| [613] | 1 | IBNCPDP2 ;OAK/ELZ - PROCESSING FOR ECME RESP ;20-JUN-2003 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**223,276,342,347,363**;21-MAR-94;Build 35 | 
|---|
|  | 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | ;NCPDP PHASE III | 
|---|
|  | 6 | Q | 
|---|
|  | 7 | ; | 
|---|
|  | 8 | ECME(DFN,IBD) ; function called by STORESP^IBNCPDP | 
|---|
|  | 9 | ; input - DFN - patient IEN for the prescription | 
|---|
|  | 10 | ;         IBD array passed in by reference | 
|---|
|  | 11 | ;      The IBD array is passed to various subroutines depending | 
|---|
|  | 12 | ;      on the ePharmacy event as evaluated by IBD("STATUS") | 
|---|
|  | 13 | I $G(IBD("EPHARM"))="" S IBD("EPHARM")=$$EPHARM(+$G(IBD("PRESCRIPTION")),+$G(IBD("FILL NUMBER"))) | 
|---|
|  | 14 | I IBD("STATUS")="PAID" Q $$BILL(DFN,.IBD) | 
|---|
|  | 15 | I IBD("STATUS")="REVERSED" Q $$REVERSE^IBNCPDP3(DFN,.IBD) | 
|---|
|  | 16 | I IBD("STATUS")="CLOSED" Q $$CLOSE^IBNCPDP4(DFN,.IBD) | 
|---|
|  | 17 | I IBD("STATUS")="RELEASED" Q $$RELEASE^IBNCPDP4(DFN,.IBD) | 
|---|
|  | 18 | I IBD("STATUS")="SUBMITTED" Q $$SUBMIT^IBNCPDP4(DFN,.IBD) | 
|---|
|  | 19 | I IBD("STATUS")="REOPEN" Q $$REOPEN^IBNCPDP4(DFN,.IBD) | 
|---|
|  | 20 | D LOG("UNKNOWN") | 
|---|
|  | 21 | Q "0^Cannot determine ECME event status" | 
|---|
|  | 22 | ; | 
|---|
|  | 23 | MATCH(BCID) ; | 
|---|
|  | 24 | N IBX,IBHAVE | 
|---|
|  | 25 | S IBX=0,IBHAVE=0 F  S IBX=$O(^DGCR(399,"AG",BCID,IBX)) Q:'IBX  S IBHAVE=1 I '$P($G(^DGCR(399,IBX,"S")),U,16) Q | 
|---|
|  | 26 | I 'IBX,IBHAVE Q "" | 
|---|
|  | 27 | Q +IBX | 
|---|
|  | 28 | ; | 
|---|
|  | 29 | ; | 
|---|
|  | 30 | BILL(DFN,IBD) ; create fi bill | 
|---|
|  | 31 | N IBRVCD,IBBS,IBUNITS,IBCPT,IBDIV,IBAA,IBTYPE,IBITEM,IBAMT,IBY,IBSERV,IBFAC,IBSITE,IBDRX,IB,IBCDFN,IBINS,IBIDS,IBIFN,IBDFN,PRCASV,PRCAERR,IBADT,IBRXN,IBFIL,IBTRKRN,DIE,DA,DR,IBRES,IBLOCK,IBLDT,IBNOW,IBDUZ,RCDUZ,IBPREV,IBQUERY,IBPAID,IBACT | 
|---|
|  | 32 | ; | 
|---|
|  | 33 | S IBDUZ=.5 ;POSTMASTER | 
|---|
|  | 34 | ;I $G(IBD("FILLED BY")),$D(^VA(200,+IBD("FILLED BY"))) S IBDUZ=+IBD("FILLED BY") | 
|---|
|  | 35 | S RCDUZ=IBDUZ | 
|---|
|  | 36 | ; | 
|---|
|  | 37 | S IBY=1,IBLOCK=0 | 
|---|
|  | 38 | I 'DFN S IBY="0^Missing DFN" G BILLQ | 
|---|
|  | 39 | S IBAMT=+$G(IBD("BILLED")) ;FI portion of charge | 
|---|
|  | 40 | I 'IBAMT S IBY="-1^Zero amount billed" G BILLQ | 
|---|
|  | 41 | S IBADT=+$G(IBD("FILL DATE"),DT) | 
|---|
|  | 42 | S IBRXN=+$G(IBD("PRESCRIPTION")) I 'IBRXN S IBY="0^Missing Rx IEN" G BILLQ | 
|---|
|  | 43 | S IBFIL=+$G(IBD("FILL NUMBER"),-1) I IBFIL<0 S IBY="0^No fill number" G BILLQ | 
|---|
|  | 44 | S IBDIV=+$G(IBD("DIVISION")) | 
|---|
|  | 45 | I '$L($G(IBD("CLAIMID"))) S IBY="-1^Missing ECME Number" G BILLQ | 
|---|
|  | 46 | S IBD("BCID")=(+IBD("CLAIMID"))_";"_IBADT ; The BCID# | 
|---|
|  | 47 | L +^DGCR(399,"AG",IBD("BCID")):15 E  S IBY="0^Cannot lock ECME number." G BILLQ | 
|---|
|  | 48 | S IBLOCK=1 | 
|---|
|  | 49 | S IBLDT=$G(^DGCR(399,"AG",IBD("BCID"))) ;Last time called | 
|---|
|  | 50 | D NOW^%DTC S IBNOW=% | 
|---|
|  | 51 | ; 2 calls in 45 sec | 
|---|
|  | 52 | I $P(IBLDT,"^",2)="B" I $$FMDIFF^XLFDT(IBNOW,+IBLDT,2)<45 S IBY="0^Duplicate billing call" G BILLQ | 
|---|
|  | 53 | ; | 
|---|
|  | 54 | I $$MATCH(IBD("BCID")) D   ;cancel the previous bill | 
|---|
|  | 55 | . N IBARR M IBARR=IBD I $$REVERSE^IBNCPDP3(DFN,.IBARR,2) | 
|---|
|  | 56 | ; | 
|---|
|  | 57 | ; derive minimal variables | 
|---|
|  | 58 | I '$$CHECK^IBECEAU(0) S IBY="-1^IB SITE" G BILLQ | 
|---|
|  | 59 | S IBSERV=$P($G(^IBE(350.1,1,0)),"^",4) | 
|---|
|  | 60 | I '$$SERV^IBARX1(IBSERV) S IBY="-1^IB SERVICE" G BILLQ | 
|---|
|  | 61 | I 'IBDIV S IBDIV=$P($$MCDIV^IBNCPEB(IBRXN,IBFIL),U,2) | 
|---|
|  | 62 | I 'IBDIV S IBDIV=+$P($G(^SC(+$$FILE^IBRXUTL(IBRXN,5),0)),"^",15) | 
|---|
|  | 63 | I 'IBDIV S IBDIV=+$P($G(^IBE(350.9,1,1)),U,25) ;dflt | 
|---|
|  | 64 | I IBDIV S IBD("DIVISION")=IBDIV | 
|---|
|  | 65 | ; - establish a stub claim/receivable | 
|---|
|  | 66 | D SET^IBR I IBY<0 G BILLQ | 
|---|
|  | 67 | ; | 
|---|
|  | 68 | ; set up the following variables for claim establishment: | 
|---|
|  | 69 | ; .01 BILL # | 
|---|
|  | 70 | ; .17 ORIG CLAIM | 
|---|
|  | 71 | ; .2  AUTO? | 
|---|
|  | 72 | ; .02 DFN | 
|---|
|  | 73 | ; .06 TIMEFRAME | 
|---|
|  | 74 | ; .07 RATE TYPE | 
|---|
|  | 75 | ; .18 SC AT TIME? | 
|---|
|  | 76 | ; .04 LOCATION | 
|---|
|  | 77 | ; .22 DIVISION | 
|---|
|  | 78 | ; .05 BILL CLASSIF  (3) | 
|---|
|  | 79 | ; .03 EVT DATE (FILL DATE) | 
|---|
|  | 80 | ; 151 BILL FROM | 
|---|
|  | 81 | ; 152 BILL TO | 
|---|
|  | 82 | ; 101 PRIMARY INS CARRIER | 
|---|
|  | 83 | K IB | 
|---|
|  | 84 | S (IB(.02),IBDFN)=DFN | 
|---|
|  | 85 | S IB(.07)=+$$RT^IBNCPDPU(DFN) | 
|---|
|  | 86 | I 'IB(.07) S IBY="-1^IB RATE TYPE" G BILLQ | 
|---|
|  | 87 | ; | 
|---|
|  | 88 | S IBIFN=PRCASV("ARREC") | 
|---|
|  | 89 | S IB(.01)=$P(PRCASV("ARBIL"),"-",2) | 
|---|
|  | 90 | S IB(.17)="" | 
|---|
|  | 91 | S IB(.2)=0 | 
|---|
|  | 92 | S IB(.06)=1 | 
|---|
|  | 93 | S IB(.18)=$$SC^IBCU3(DFN) | 
|---|
|  | 94 | S IB(.04)=$S(+$P($G(^DG(40.8,+IBDIV,0)),U,3):7,1:1) | 
|---|
|  | 95 | S:IBDIV IB(.22)=+IBDIV | 
|---|
|  | 96 | S IB(.05)=3 | 
|---|
|  | 97 | S (IB(.03),IB(151),IB(152))=IBADT | 
|---|
|  | 98 | S IBINS=$P($G(^IBA(355.3,+$G(IBD("PLAN")),0)),"^") I IBINS S IB(101)=IBINS | 
|---|
|  | 99 | ; | 
|---|
|  | 100 | ; set 362.4 node to rx#^p50^days sup^fill date^qty^ndc | 
|---|
|  | 101 | S IB(362.4,IBRXN,1)=IBD("RX NO")_"^"_IBD("DRUG")_"^"_IBD("DAYS SUPPLY")_"^"_IBD("FILL DATE")_"^"_IBD("QTY")_"^"_IBD("NDC") | 
|---|
|  | 102 | ; | 
|---|
|  | 103 | ; call the autobiller module to create the claim with a default | 
|---|
|  | 104 | ; diagnosis and procedure for prescriptions | 
|---|
|  | 105 | D EN^IBCD3(.IBQUERY) | 
|---|
|  | 106 | D CLOSE^IBSDU(.IBQUERY) | 
|---|
|  | 107 | ; | 
|---|
|  | 108 | S ^DGCR(399,"AG",IBD("BCID"))=IBNOW_"^B" | 
|---|
|  | 109 | S DIE="^DGCR(399,",DA=IBIFN | 
|---|
|  | 110 | ; update the ECME fields | 
|---|
|  | 111 | S DR="460////^S X=IBD(""BCID"")" S:$L($G(IBD("AUTH #"))) DR=DR_";461////^S X=IBD(""AUTH #"")" | 
|---|
|  | 112 | D ^DIE K DA,DR,DIE | 
|---|
|  | 113 | D SETCT ; Set Claims Tracking record | 
|---|
|  | 114 | ; | 
|---|
|  | 115 | ; IEN to 2.3121 | 
|---|
|  | 116 | S IBCDFN=$$PLANN^IBNCPDPU(DFN,IBD("PLAN"),IBADT) | 
|---|
|  | 117 | I 'IBCDFN S IBY="-1^Plan not found in Patient's Profile." G BILLQ | 
|---|
|  | 118 | ; | 
|---|
|  | 119 | ; add the payer (fiscal intermediary) to the claim | 
|---|
|  | 120 | S IBINS=+IBCDFN,IBCDFN=$P(IBCDFN,"^",2) | 
|---|
|  | 121 | S DIE="^DGCR(399,",DA=IBIFN,DR="112////"_IBCDFN | 
|---|
|  | 122 | D ^DIE K DA,DR,DIE,DGRVRCAL | 
|---|
|  | 123 | ; | 
|---|
|  | 124 | ; need to make sure we have computed charges. | 
|---|
|  | 125 | D BILL^IBCRBC(IBIFN) | 
|---|
|  | 126 | ; | 
|---|
|  | 127 | ; update the authorize/print fields | 
|---|
|  | 128 | S DIE="^DGCR(399,",DA=IBIFN | 
|---|
|  | 129 | S DR="9////1;12////"_DT D ^DIE | 
|---|
|  | 130 | K DA,DR,DIE | 
|---|
|  | 131 | ; | 
|---|
|  | 132 | ; pass the claim to AR | 
|---|
|  | 133 | D GVAR^IBCBB,ARRAY^IBCBB1 S PRCASV("APR")=IBDUZ D ^PRCASVC6 | 
|---|
|  | 134 | I 'PRCASV("OKAY") S IBY="-1^Cannot establish receivable in AR." G BILLQ | 
|---|
|  | 135 | D REL^PRCASVC | 
|---|
|  | 136 | ; | 
|---|
|  | 137 | ; update the AR status to Active | 
|---|
|  | 138 | ;  D AUDITX^PRCAUDT(PRCASV("ARREC")) | 
|---|
|  | 139 | S PRCASV("STATUS")=16 | 
|---|
|  | 140 | D STATUS^PRCASVC1 | 
|---|
|  | 141 | ; | 
|---|
|  | 142 | ; decrease adjust bill | 
|---|
|  | 143 | ; Auto decrease from service Bill#,Tran amt,person,reason,Tran date | 
|---|
|  | 144 | S IBAMT=$G(^DGCR(399,IBIFN,"U1")) | 
|---|
|  | 145 | S IBPAID=IBD("PAID") | 
|---|
|  | 146 | D:IBAMT-IBPAID>.01 | 
|---|
|  | 147 | . D DEC^PRCASER1(PRCASV("ARREC"),IBAMT-IBPAID,IBDUZ,"Adjust based on ECME amount paid.",IBADT) | 
|---|
|  | 148 | . I 'IBPAID S PRCASV("STATUS")=22 D STATUS^PRCASVC1 ; collected/closed | 
|---|
|  | 149 | ; | 
|---|
|  | 150 | D  ; set the user in 399 | 
|---|
|  | 151 | . N IBI,IBT F IBI=2,5,11,13,15 S IBT(399,IBIFN_",",IBI)=IBDUZ | 
|---|
|  | 152 | . D FILE^DIE("","IBT") | 
|---|
|  | 153 | ; | 
|---|
|  | 154 | BILLQ S IBRES=$S(IBY<0:"0^"_$S($L($P(IBY,"^",2)):$P(IBY,"^",2),1:$P(IBY,"^",3)),$G(IBIFN):+IBIFN,1:IBY) | 
|---|
|  | 155 | I $G(IBIFN) S IBD("BILL")=IBIFN | 
|---|
|  | 156 | D LOG("BILL",IBRES) | 
|---|
|  | 157 | I IBY<0 D BULL^IBNCPEB($G(DFN),.IBD,IBRES,$G(IBIFN)) | 
|---|
|  | 158 | I IBLOCK L -^DGCR(399,"AG",IBD("BCID")) | 
|---|
|  | 159 | Q IBRES | 
|---|
|  | 160 | ; | 
|---|
|  | 161 | ; update claims tracking saying bill has been billed | 
|---|
|  | 162 | SETCT ; | 
|---|
|  | 163 | S IBTRKRN=+$O(^IBT(356,"ARXFL",IBRXN,IBFIL,0)) | 
|---|
|  | 164 | I IBTRKRN S DIE="^IBT(356,",DA=IBTRKRN,DR=".11////^S X=IBIFN;.17///@" D ^DIE | 
|---|
|  | 165 | I IBTRKRN,IBIFN D CTB^IBCDC(IBTRKRN,IBIFN) | 
|---|
|  | 166 | Q | 
|---|
|  | 167 | ; | 
|---|
|  | 168 | ;/** | 
|---|
|  | 169 | ;Log values passed into IB by outside applications | 
|---|
|  | 170 | ; | 
|---|
|  | 171 | ;implicit input variables/arrays : | 
|---|
|  | 172 | ; IBD array with values sent to IB (see calling subroutines) | 
|---|
|  | 173 | ; DFN - patient's IEN (file #2) | 
|---|
|  | 174 | ; DUZ - user's IEN(file #200) | 
|---|
|  | 175 | ;explicit parameters: | 
|---|
|  | 176 | ; PROC - type of event as string, i.e. BILL, REJECT and so on | 
|---|
|  | 177 | ; RESULT - result of the event processing, format: return_code^message | 
|---|
|  | 178 | LOG(PROC,RESULT) ;Store the data | 
|---|
|  | 179 | D LOG^IBNCPLOG(.IBD,DFN,PROC,RESULT,$J,$$NOW^XLFDT(),+DUZ) | 
|---|
|  | 180 | Q | 
|---|
|  | 181 | ; | 
|---|
|  | 182 | ;returns ien of #9002313.56 BPS PHARMACIES associated | 
|---|
|  | 183 | ;with the prescription specified by: | 
|---|
|  | 184 | ; IBRX - IEN in file #52 | 
|---|
|  | 185 | ; IBREFILL - zero(0) for the original prescription or the refill | 
|---|
|  | 186 | ;    number for a refill (IEN of REFILL multiple #52.1) | 
|---|
|  | 187 | EPHARM(IBRX,IBREFILL) ; | 
|---|
|  | 188 | I +$G(IBRX)=0 Q "" | 
|---|
|  | 189 | I $G(IBREFILL)="" Q "" | 
|---|
|  | 190 | N IBDIV59 | 
|---|
|  | 191 | S IBDIV59=+$$RXSITE^PSOBPSUT(+IBRX,+IBREFILL) | 
|---|
|  | 192 | I IBDIV59>0 Q $$GETPHARM^BPSUTIL(IBDIV59) | 
|---|
|  | 193 | Q "" | 
|---|
|  | 194 | ; | 
|---|
|  | 195 | ;IBNCPDP2 | 
|---|