| [613] | 1 | IBCNRP5 ;BHAM ISC/CMW - Group Plan Status Report ;01-NOV-2004 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**276**;21-MAR-94 | 
|---|
|  | 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | EN ; | 
|---|
|  | 6 | ; Initialize variables | 
|---|
|  | 7 | N STOP,IBCNRRTN,IBCNRSPC,RESORT,IBCNTYP,IBSEL | 
|---|
|  | 8 | D:'$D(IOF) HOME^%ZIS | 
|---|
|  | 9 | ; | 
|---|
|  | 10 | S STOP=0,IBPXT=$G(IBPXT) | 
|---|
|  | 11 | W @IOF | 
|---|
|  | 12 | W !,"ePHARM GROUP PLAN STATUS REPORT",! | 
|---|
|  | 13 | W !,"NCPDP process requires that the users match Group Plans to Pharmacy Plans." | 
|---|
|  | 14 | W !,"This report will assist users in matching Group Insurance Plans to Pharmacy" | 
|---|
|  | 15 | W !,"  Plans by searching through GIPF file for Group Plans that " | 
|---|
|  | 16 | W !,"    are linked to an Insurance with active Pharmacy Plan coverage." | 
|---|
|  | 17 | ; | 
|---|
|  | 18 | ; Prompts | 
|---|
|  | 19 | ; lock global | 
|---|
|  | 20 | S IBCNRRPT=1 | 
|---|
|  | 21 | N IBCNRDEV S IBCNRDEV=1 | 
|---|
|  | 22 | L +^XTMP("IBCNRP5"):5 I '$T W !!,"Sorry, Status Report in use." H 2 G EXIT | 
|---|
|  | 23 | ;Check for prior compile | 
|---|
|  | 24 | P10 D RESORT(.RESORT) I STOP G EXIT | 
|---|
|  | 25 | I $G(RESORT) G P30 | 
|---|
|  | 26 | K ^XTMP("IBCNRP5") | 
|---|
|  | 27 | ; compile valid insurance file | 
|---|
|  | 28 | P20 D GIPF | 
|---|
|  | 29 | ; select insurance company | 
|---|
|  | 30 | P30 D INS I $G(IBSEL)="" G EXIT | 
|---|
|  | 31 | D TYPE I $G(IBCNTYP)="" G EXIT | 
|---|
|  | 32 | ; perform sort/selection | 
|---|
|  | 33 | P40 D INSEL | 
|---|
|  | 34 | I '$D(^TMP("IBCNRP5")) G EXIT | 
|---|
|  | 35 | ; print selection | 
|---|
|  | 36 | P50 D PRINT^IBCNRP5P | 
|---|
|  | 37 | ; | 
|---|
|  | 38 | EXIT ; unlock global | 
|---|
|  | 39 | L -^XTMP("IBCNRP5") | 
|---|
|  | 40 | K IBPXT | 
|---|
|  | 41 | K IBCNSP,IBCPOL,IBIND,IBMULT,IBSEL,IBW,IBALR,IBGRP,IBCNGP | 
|---|
|  | 42 | K IBCNRRPT,IBCNTYP,IBCNRDEV,ZTDESC,ZTSTOP | 
|---|
|  | 43 | K IBCNRP,IBCNRI,IBCNRGP | 
|---|
|  | 44 | K IBICPT,IBICF,IBICL,IBIC,IBINA,IBIEN,INIEN | 
|---|
|  | 45 | K ^TMP("IBCNRP5",$J) | 
|---|
|  | 46 | Q | 
|---|
|  | 47 | ; | 
|---|
|  | 48 | RESORT(RESORT) ; check for prior compile | 
|---|
|  | 49 | NEW DIR,BDT,EDT,RDT,HDR,IBDT,X,Y,DIRUT | 
|---|
|  | 50 | I '$D(^XTMP("IBCNRP5")) Q | 
|---|
|  | 51 | S RDT=$P($G(^XTMP("IBCNRP5",0)),U,2) | 
|---|
|  | 52 | S RESORT=0 | 
|---|
|  | 53 | S HDR=$$FMTE^XLFDT(RDT,"5Z") | 
|---|
|  | 54 | W !!,"Current Insurance company list compiled on: ",HDR,! | 
|---|
|  | 55 | S DIR(0)="Y" | 
|---|
|  | 56 | S DIR("A")="Do you want to use the existing compiled file" | 
|---|
|  | 57 | S DIR("B")="YES" | 
|---|
|  | 58 | S DIR("?",1)=" Enter YES to use the existing compiled file." | 
|---|
|  | 59 | S DIR("?")=" Enter NO to DELETE existing file and recompile," | 
|---|
|  | 60 | D ^DIR K DIR | 
|---|
|  | 61 | I $D(DIRUT) S STOP=1 G RESRTX | 
|---|
|  | 62 | S RESORT=Y | 
|---|
|  | 63 | S IBCNRSPC("RESORT")=Y | 
|---|
|  | 64 | ; | 
|---|
|  | 65 | RESRTX ;RESORT EXIT | 
|---|
|  | 66 | Q | 
|---|
|  | 67 | ; | 
|---|
|  | 68 | GIPF ; compiler valid insurance | 
|---|
|  | 69 | W !,"*** COMPILING ......" | 
|---|
|  | 70 | N GST1,GP0,GP6,IBCOV,LIM,IBCVRD,IBIEN | 
|---|
|  | 71 | N GPIEN,GPNAM,GPNUM,IBINA | 
|---|
|  | 72 | S GST1=1,(GPIEN,INIEN)="" | 
|---|
|  | 73 | S ^XTMP("IBCNRP5",0)=($$NOW^XLFDT+30)_"^"_$$NOW^XLFDT_"^"_"Group Plan Status Report" | 
|---|
|  | 74 | F  S INIEN=$O(^IBA(355.3,"B",INIEN)) Q:INIEN=""  D | 
|---|
|  | 75 | . S IBINA=$P($G(^DIC(36,+INIEN,0)),U) | 
|---|
|  | 76 | . ; company does not reimburse | 
|---|
|  | 77 | . I $P($G(^DIC(36,+INIEN,0)),U,2)="N" Q | 
|---|
|  | 78 | . ; company is inactive | 
|---|
|  | 79 | . I $P($G(^DIC(36,INIEN,0)),U,5) Q | 
|---|
|  | 80 | . ; | 
|---|
|  | 81 | . F  S GPIEN=$O(^IBA(355.3,"B",INIEN,GPIEN)) Q:GPIEN=""  D | 
|---|
|  | 82 | .. ;chk for active group | 
|---|
|  | 83 | .. S GP0=$G(^IBA(355.3,GPIEN,0)),GP6=$G(^IBA(355.3,GPIEN,6)) | 
|---|
|  | 84 | .. I $P(GP0,U,11)=1 Q | 
|---|
|  | 85 | .. ; | 
|---|
|  | 86 | .. ;chk for pharm plan coverage | 
|---|
|  | 87 | .. S IBCOV=$O(^IBE(355.31,"B","PHARMACY","")) | 
|---|
|  | 88 | .. S LIM="",IBCVRD=0 | 
|---|
|  | 89 | .. F  S LIM=$O(^IBA(355.32,"B",GPIEN,LIM)) Q:LIM=""  D | 
|---|
|  | 90 | ... I $P(^IBA(355.32,LIM,0),U,2)'=IBCOV Q | 
|---|
|  | 91 | ... ;chk covered status | 
|---|
|  | 92 | ... S IBCVRD=$P(^IBA(355.32,LIM,0),U,4) | 
|---|
|  | 93 | ... I IBCVRD=0 Q | 
|---|
|  | 94 | ... ;set valid insurance/group array | 
|---|
|  | 95 | ... S ^XTMP("IBCNRP5",IBINA,INIEN,GPIEN)="" | 
|---|
|  | 96 | Q | 
|---|
|  | 97 | ; | 
|---|
|  | 98 | INS ; | 
|---|
|  | 99 | S IBSEL="" | 
|---|
|  | 100 | W !,"Run Report " | 
|---|
|  | 101 | W " for (S)PECIFIC insurance companies or a (R)ANGE: RANGE// " | 
|---|
|  | 102 | R X:DTIME Q:'$T!(X["^") | 
|---|
|  | 103 | S:X="" X="R" S X=$E(X) | 
|---|
|  | 104 | I "RSrs"'[X W !,"Enter <CR> for Range; 'S' for specific insurance; '^' to quit." G INS | 
|---|
|  | 105 | W "  ",$S("Ss"[X:"SPECIFIC",1:"RANGE") G:"Rr"[X INSO1 | 
|---|
|  | 106 | INSO S DIC="^DIC(36,",DIC(0)="AEQMZ",DIC("S")="I '$G(^(5))" | 
|---|
|  | 107 | S DIC("A")="   Select "_$S($G(IBICPT):"another ",1:"")_"INSURANCE CO.: " | 
|---|
|  | 108 | D ^DIC K DIC I Y'>0 G INS:'$G(IBICPT) S IBSEL=1 Q | 
|---|
|  | 109 | I $D(IBICPT(+Y)) D  G INSO | 
|---|
|  | 110 | .W !!?3,"Already selected. Choose another insurance company.",!,*7 | 
|---|
|  | 111 | S IBICPT(+Y)="",IBICPT=$G(IBICPT)+1 G INSO | 
|---|
|  | 112 | ; | 
|---|
|  | 113 | INSO1 W !?3,"Start with INSURANCE COMPANY: FIRST// " R X:DTIME | 
|---|
|  | 114 | G:'$T!(X["^") INS | 
|---|
|  | 115 | I $E(X)="?" W !,"Enter value up to 40 char; <CR> to start with 'first' value; '^' to quit." G INSO1 | 
|---|
|  | 116 | S IBICF=X | 
|---|
|  | 117 | INSO2 W !?8,"Go to INSURANCE COMPANY: LAST// " R X:DTIME | 
|---|
|  | 118 | G:'$T!(X["^") INSO1 | 
|---|
|  | 119 | I $E(X)="?" W !,"Enter value up to 40 char; <CR> to go to 'last' value; '^' to quit." G INSO1 | 
|---|
|  | 120 | I X="" S IBICL="zzzzz" S:IBICF="" IBIC="ALL" S IBSEL=1 Q | 
|---|
|  | 121 | I IBICF]X D  G INSO2 | 
|---|
|  | 122 | .W *7,!!?3,"The LAST value must follow the FIRST.",! | 
|---|
|  | 123 | S IBICL=X,IBSEL=1 | 
|---|
|  | 124 | Q | 
|---|
|  | 125 | ; | 
|---|
|  | 126 | TYPE ; Prompt to allow users to inquire for All group plans, or Matched group plans | 
|---|
|  | 127 | N DIR,X,Y,DIRUT | 
|---|
|  | 128 | S IBCNTYP="A" | 
|---|
|  | 129 | S DIR(0)="S^A:All Group Plans;M:Matched Group Plans" | 
|---|
|  | 130 | S DIR("A")=" Select the type of Group Plans you want to see for Insurance selected." | 
|---|
|  | 131 | S DIR("B")="A" | 
|---|
|  | 132 | S DIR("?",1)="  A - All Group Plans" | 
|---|
|  | 133 | S DIR("?",2)="  M - Matched Group Plans" | 
|---|
|  | 134 | D ^DIR K DIR | 
|---|
|  | 135 | I $D(DIRUT) G TYPEX | 
|---|
|  | 136 | S IBCNTYP=Y | 
|---|
|  | 137 | TYPEX Q | 
|---|
|  | 138 | ; | 
|---|
|  | 139 | INSEL ; - Perform selection for insurance company. | 
|---|
|  | 140 | S VALMCNT=0,VALMBG=1,IBCNGP=0 | 
|---|
|  | 141 | K ^TMP("IBCNRP5",$J) | 
|---|
|  | 142 | ; check for specific insurance companies | 
|---|
|  | 143 | I $G(IBICPT) D  Q | 
|---|
|  | 144 | . S (IBINA,IBIEN)="" | 
|---|
|  | 145 | . F  S IBIEN=$O(IBICPT(IBIEN)) Q:IBIEN=""  D | 
|---|
|  | 146 | .. S IBINA=$P($G(^DIC(36,+IBIEN,0)),U) | 
|---|
|  | 147 | .. I '$D(^XTMP("IBCNRP5",IBINA,IBIEN)) D  Q | 
|---|
|  | 148 | ... W *7,!?3,"**NO pharmacy data found for " | 
|---|
|  | 149 | ... W $P(^DIC(36,IBIEN,0),U)_"  "_$P(^DIC(36,IBIEN,.11),U),! R X:2 | 
|---|
|  | 150 | .. D INIT | 
|---|
|  | 151 | ; | 
|---|
|  | 152 | ; check for range of insurance companies | 
|---|
|  | 153 | I '$D(IBICL) Q | 
|---|
|  | 154 | S IBIEN=0,IBINA="" | 
|---|
|  | 155 | F  S IBINA=$O(^XTMP("IBCNRP5",IBINA)) Q:IBINA=""  D | 
|---|
|  | 156 | . F  S IBIEN=$O(^XTMP("IBCNRP5",IBINA,IBIEN)) Q:IBIEN=""  D | 
|---|
|  | 157 | ..; for selection "ALL" | 
|---|
|  | 158 | .. I $G(IBIC)="ALL" D INIT Q | 
|---|
|  | 159 | .. ; | 
|---|
|  | 160 | .. ;check for match within first/last range | 
|---|
|  | 161 | .. I (IBICF]IBINA)!(IBINA]IBICL) Q | 
|---|
|  | 162 | .. D INIT | 
|---|
|  | 163 | Q | 
|---|
|  | 164 | ; | 
|---|
|  | 165 | INIT ; -- init variables and create list array or report array | 
|---|
|  | 166 | N IBGP0,IBCPOLD,X,IBCPD6,IBCNRPP,IBCOV,IBCVRD,LIM | 
|---|
|  | 167 | F  S IBCNGP=$O(^XTMP("IBCNRP5",IBINA,IBIEN,IBCNGP)) Q:'IBCNGP  D | 
|---|
|  | 168 | . I '$D(^IBA(355.3,+IBCNGP,0)) Q | 
|---|
|  | 169 | . ; if we want all plans, let it pass | 
|---|
|  | 170 | . I IBCNTYP="A" D  Q | 
|---|
|  | 171 | . . D SETPLAN(IBCNGP) | 
|---|
|  | 172 | . ; if we want Matched plans, check for existence of Plan ID | 
|---|
|  | 173 | . I IBCNTYP="M" D  Q | 
|---|
|  | 174 | . . I $P($G(^IBA(355.3,IBCNGP,6)),U)'="" D SETPLAN(IBCNGP) | 
|---|
|  | 175 | I VALMCNT=0 D | 
|---|
|  | 176 | . S ^TMP("IBCNRP5",$J,"DSPDATA",1)=IBIEN | 
|---|
|  | 177 | . S ^TMP("IBCNRP5",$J,"DSPDATA",2)="No data for this Insurance" | 
|---|
|  | 178 | Q | 
|---|
|  | 179 | ; | 
|---|
|  | 180 | SETPLAN(IBCNGP) ; | 
|---|
|  | 181 | ; create text | 
|---|
|  | 182 | N IBGPZ,I,IBPLN,IBPLNA,LINE | 
|---|
|  | 183 | S VALMCNT=VALMCNT+1,$P(LINE,"-",80)="" | 
|---|
|  | 184 | S IBGPZ=^IBA(355.3,+IBCNGP,0) | 
|---|
|  | 185 | ; Group Name, Group #, Group Type, Plan ID, Plan Status | 
|---|
|  | 186 | S X=$$FO^IBCNEUT1($P(IBGPZ,U,3),18) | 
|---|
|  | 187 | S X=X_" "_$$FO^IBCNEUT1($P(IBGPZ,U,4),17) | 
|---|
|  | 188 | S X=X_" "_$$FO^IBCNEUT1($$EXPAND^IBTRE(355.3,.09,$P(IBGPZ,U,9)),13) | 
|---|
|  | 189 | S IBPLN=$P($G(^IBA(355.3,+IBCNGP,6)),U) | 
|---|
|  | 190 | ; check for plan | 
|---|
|  | 191 | I IBPLN="" D  Q | 
|---|
|  | 192 | . S ^TMP("IBCNRP5",$J,"DSPDATA",VALMCNT)=IBIEN_"^"_X | 
|---|
|  | 193 | . S VALMCNT=VALMCNT+1,^TMP("IBCNRP5",$J,"DSPDATA",VALMCNT)=IBIEN_"^"_"No Plan Found." | 
|---|
|  | 194 | . S VALMCNT=VALMCNT+1,^TMP("IBCNRP5",$J,"DSPDATA",VALMCNT)=IBIEN_"^"_LINE | 
|---|
|  | 195 | ; check plan status information | 
|---|
|  | 196 | S IBPLNA=$P($G(^IBCNR(366.03,IBPLN,0)),U) | 
|---|
|  | 197 | S X=X_" "_$$FO^IBCNEUT1(IBPLNA,13) | 
|---|
|  | 198 | ; | 
|---|
|  | 199 | N ARRAY D STCHK^IBCNRU1(IBPLN,.ARRAY) | 
|---|
|  | 200 | S X=X_"      "_$$FO^IBCNEUT1($S($G(ARRAY(1))="I":"INACTIVE",1:"ACTIVE"),8) | 
|---|
|  | 201 | S ^TMP("IBCNRP5",$J,"DSPDATA",VALMCNT)=IBIEN_"^"_X | 
|---|
|  | 202 | I $G(ARRAY(6)) D | 
|---|
|  | 203 | . N STATAR | 
|---|
|  | 204 | . D STATAR^IBCNRU1(.STATAR) | 
|---|
|  | 205 | . F I=1:1:$L(ARRAY(6),",") D | 
|---|
|  | 206 | .. S VALMCNT=VALMCNT+1 | 
|---|
|  | 207 | .. S ^TMP("IBCNRP5",$J,"DSPDATA",VALMCNT)=IBIEN_"^"_"       "_$G(STATAR($P(ARRAY(6),",",I))) | 
|---|
|  | 208 | . S VALMCNT=VALMCNT+1,^TMP("IBCNRP5",$J,"DSPDATA",VALMCNT)=IBIEN_"^"_LINE | 
|---|
|  | 209 | ; | 
|---|
|  | 210 | Q | 
|---|