[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
|
---|