| [613] | 1 | IBARXMN ;LL/ELZ-PHARMCAY COPAY CAP RX PROCESSING ;17-NOV-2000 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**150,158,156,186,308**;21-MAR-94 | 
|---|
|  | 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | TRACK(DFN) ; checks out patient if tracked already | 
|---|
|  | 6 | I '$D(^IBAM(354.7,DFN,0)) D QUERY(DFN,$E(DT,1,5)_"00") | 
|---|
|  | 7 | Q | 
|---|
|  | 8 | ; | 
|---|
|  | 9 | QUERY(DFN,IBDT) ; if there are treating facilities, perform query | 
|---|
|  | 10 | N IBT,IBX,IBS,IBD,IBB,DIE,DA,DR,X,IBA,IBP,IBZ,IBY,IBFD,IBTD | 
|---|
|  | 11 | S IBB=0,IBP=$$PRIORITY^IBARXMU(DFN) | 
|---|
|  | 12 | D ADD^IBARXMU(DFN) Q:'IBP | 
|---|
|  | 13 | S IBT=$$TFL^IBARXMU(DFN,.IBT) Q:'IBT | 
|---|
|  | 14 | D CAP^IBARXMC(IBDT,IBP,.IBZ,.IBY,.IBFD,.IBTD) I 'IBY,'IBZ Q | 
|---|
|  | 15 | I 'IBFD!('IBTD) Q | 
|---|
|  | 16 | W !!,"This patient has never had billing information tracked before",!,"Now querying other facilities..." | 
|---|
|  | 17 | S IBX=0 F  S IBX=$O(IBT(IBX)) Q:IBX<1  W !,"Now sending query to ",$P(IBT(IBX),"^",2)," ..." D | 
|---|
|  | 18 | . ; | 
|---|
|  | 19 | . ; need to query every month in the cap billing period | 
|---|
|  | 20 | . S IBDT=IBFD D  F  S IBDT=$$NEXTMO^IBARXMC(IBDT) Q:IBDT>IBTD  D | 
|---|
|  | 21 | .. D UQUERY^IBARXMU(DFN,$E(IBDT,1,5)_"00",IBX,.IBD) | 
|---|
|  | 22 | .. ; | 
|---|
|  | 23 | .. ; error returned | 
|---|
|  | 24 | .. I -1=+$G(IBD,"-1") Q | 
|---|
|  | 25 | .. ; | 
|---|
|  | 26 | .. ; loop through query and file data | 
|---|
|  | 27 | .. S X=0 F  S X=$O(IBD(X)) Q:X<1  S:$E(IBD(X),1,4)=+IBT(IBX)_"-" IBA=$$ADD(DFN,IBD(X)),IBB=IBB+$P(IBD(X),"^",11) | 
|---|
|  | 28 | .. K IBD | 
|---|
|  | 29 | ; | 
|---|
|  | 30 | Q | 
|---|
|  | 31 | ; | 
|---|
|  | 32 | ACCT(DFN,IBB,IBU,IBDT,IBS) ; - update amount in patient account | 
|---|
|  | 33 | ; IBB = amount to be added to pt account (billed) | 
|---|
|  | 34 | ; IBU = amount to be added to pt account (not billable) | 
|---|
|  | 35 | ; IBDT = effective date for amount | 
|---|
|  | 36 | ; IBS = flag, if passed the amounts are totals not to be added to what is already there | 
|---|
|  | 37 | ; | 
|---|
|  | 38 | N DIE,DR,DO,DIC,DA,Y,IBA | 
|---|
|  | 39 | ; | 
|---|
|  | 40 | S DA(1)=DFN,IBDT=$E(IBDT,1,5)_"00" | 
|---|
|  | 41 | ; | 
|---|
|  | 42 | ; check to see if there is already that mo/year there and add if not | 
|---|
|  | 43 | S DA=$O(^IBAM(354.7,DFN,1,"B",IBDT,0)) | 
|---|
|  | 44 | I 'DA S DIC="^IBAM(354.7,"_DFN_",1,",DIC(0)="",X=IBDT D FILE^DICN S DA=+Y | 
|---|
|  | 45 | ; | 
|---|
|  | 46 | ; now edit and add the new amount | 
|---|
|  | 47 | S IBA=^IBAM(354.7,DFN,1,DA,0) | 
|---|
|  | 48 | S:'$D(IBS) IBB=IBB+$P(IBA,"^",2),IBU=IBU+$P(IBA,"^",4) | 
|---|
|  | 49 | L +^IBAM(354.7,DFN):10 I '$T Q | 
|---|
|  | 50 | S DIE="^IBAM(354.7,"_DFN_",1,",DR=".02///^S X=IBB;.04///^S X=IBU" | 
|---|
|  | 51 | D ^DIE L -^IBAM(354.7,DFN) | 
|---|
|  | 52 | ; | 
|---|
|  | 53 | D FLAG^IBARXMC(DFN,IBDT) | 
|---|
|  | 54 | ; | 
|---|
|  | 55 | Q | 
|---|
|  | 56 | ; | 
|---|
|  | 57 | UPCHG(IBX,IBU,IBC) ; update a charge (from one that is on hold only) | 
|---|
|  | 58 | ; IBX = ien in 354.71 | 
|---|
|  | 59 | ; IBU = updated # of units | 
|---|
|  | 60 | ; IBC = updated charge amount | 
|---|
|  | 61 | N IBO,IBY,DIE,DA,DR | 
|---|
|  | 62 | W !,"Updating copay cap account records..." | 
|---|
|  | 63 | S IBO=^IBAM(354.71,IBX,0) | 
|---|
|  | 64 | ; | 
|---|
|  | 65 | ; first update 354.71 entry | 
|---|
|  | 66 | S DIE="^IBAM(354.71,",DA=IBX,DR=".07///^S X=IBU;.08///^S X=IBC;.11///^S X=IBC;.05///P" | 
|---|
|  | 67 | L +^IBAM(354.71,DA):10 I '$T W !!,"Unable to update records, entry locked!!" Q | 
|---|
|  | 68 | D ^DIE L -^IBAM(354.71,DA) | 
|---|
|  | 69 | ; | 
|---|
|  | 70 | ; now update account | 
|---|
|  | 71 | D ACCT($P(IBO,"^",2),IBC-$P(IBO,"^",11),0,$P(IBO,"^",3)) | 
|---|
|  | 72 | ; | 
|---|
|  | 73 | ; send to IDX | 
|---|
|  | 74 | I $$SWSTAT^IBBAPI S IBO=$$QUEUE^VDEFQM("DFT^P03","SUBTYPE=CPIN^IEN="_IBX,,"PFSS OUTBOUND") | 
|---|
|  | 75 | ; | 
|---|
|  | 76 | ; finally clean transmission record | 
|---|
|  | 77 | D CLEAN(IBX) | 
|---|
|  | 78 | ; | 
|---|
|  | 79 | Q | 
|---|
|  | 80 | CLEAN(IBX) ; clean out transmission record | 
|---|
|  | 81 | N IBA,DA,DIK,X,Y | 
|---|
|  | 82 | S IBA=0 F  S IBA=$O(^IBAM(354.71,IBX,1,IBA)) Q:IBA<1  S DA=IBA,DA(1)=IBX,DIK="^IBAM(354.71,"_IBX_",1," D ^DIK | 
|---|
|  | 83 | Q | 
|---|
|  | 84 | ; | 
|---|
|  | 85 | CANCEL(DFN,IBX,IBY,IBR) ; cancel a transaction (flags old one and creates a new one) | 
|---|
|  | 86 | ; IBX is the ien from 354.71, IBY is the error flag (y) passed by ref | 
|---|
|  | 87 | ; IBR is optional, it is the reason to cancel | 
|---|
|  | 88 | ; | 
|---|
|  | 89 | N IBN,IBD,DIE,DA,DR,X,Y | 
|---|
|  | 90 | ; | 
|---|
|  | 91 | ; is IBX there or is this an old transaction | 
|---|
|  | 92 | S IBD=$G(^IBAM(354.71,+IBX,0)) I 'IBD S IBN=0 G CANQ | 
|---|
|  | 93 | S IBAMP=$P($G(^IBAM(354.71,+$P(IBD,"^",10),0)),"^") | 
|---|
|  | 94 | ; | 
|---|
|  | 95 | ; set flag for at or above cap | 
|---|
|  | 96 | S:'$D(IBCAP) IBCAP=+$P($G(^IBAM(354.7,DFN,1,+$O(^IBAM(354.7,DFN,1,"B",$E($P(IBD,"^",3),1,5)_"00",0)),0)),"^",3) | 
|---|
|  | 97 | ; | 
|---|
|  | 98 | ; flag old one as canceled, and clean out transmission record. | 
|---|
|  | 99 | S DIE="^IBAM(354.71,",DA=IBX,DR=".05///Y;.16///"_DUZ_";.17///"_$$NOW^XLFDT_";.19///"_$S($D(IBR):IBR,1:16) | 
|---|
|  | 100 | L +^IBAM(354.71,IBX):5 I '$T S IBY="-1^IB318",IBN=0 G CANQ | 
|---|
|  | 101 | D ^DIE L -^IBAM(354.71,IBX) | 
|---|
|  | 102 | D CLEAN(IBX) | 
|---|
|  | 103 | ; | 
|---|
|  | 104 | ; send to IDX | 
|---|
|  | 105 | I $$SWSTAT^IBBAPI S IBO=$$QUEUE^VDEFQM("DFT^P03","SUBTYPE=CPIN^IEN="_IBX,,"PFSS OUTBOUND") | 
|---|
|  | 106 | ; | 
|---|
|  | 107 | ; now create new transaction to adjust amounts | 
|---|
|  | 108 | ; first set up parent, clear out .01, set facility, - dollar amt, status | 
|---|
|  | 109 | S $P(IBD,"^",10)=$P(IBD,"^"),$P(IBD,"^")="",$P(IBD,"^",13)=+$P($$FAC^IBARXMU(+$$SITE^IBARXMU),"^",2),$P(IBD,"^",11)=-$P(IBD,"^",11),$P(IBD,"^",12)=-$P(IBD,"^",12),$P(IBD,"^",5)="P" | 
|---|
|  | 110 | S IBN=$$ADD(DFN,$P(IBD,"^",1,13)) I IBN<1 S IBY="-1^IB316" | 
|---|
|  | 111 | ; | 
|---|
|  | 112 | ; set up variable to check for cap and re-bill if necessary | 
|---|
|  | 113 | S IBCAP($E($P(IBD,"^",3),1,5)_"00")="" | 
|---|
|  | 114 | ; | 
|---|
|  | 115 | ; now check to see if the patient has previously reached cap and has some unbilled (only if not updating, check for flag) | 
|---|
|  | 116 | ;I '$G(IBUPDATE) D CANCEL^IBARXMC(DFN,$P(IBD,"^",3)) | 
|---|
|  | 117 | ;D CANCEL^IBARXMC(DFN,$P(IBD,"^",3)) | 
|---|
|  | 118 | ; | 
|---|
|  | 119 | CANQ Q IBN | 
|---|
|  | 120 | ; | 
|---|
|  | 121 | ADD(DFN,IBD,IBT,IBPFSS) ; adds a transaction to 354.71 | 
|---|
|  | 122 | ; IBD = data in 354.71 format, if $p(IBD,"^")="" create new number | 
|---|
|  | 123 | ; IBT = action type pointer (optional, but needed for local site) | 
|---|
|  | 124 | ; returns ien in 354.71 | 
|---|
|  | 125 | ; IBPFSS optional to indicate came from PFSS system | 
|---|
|  | 126 | ; | 
|---|
|  | 127 | N IBA,DIC,X,IBS,IBN | 
|---|
|  | 128 | Q:'$G(DFN) | 
|---|
|  | 129 | D ADD^IBARXMU(DFN) | 
|---|
|  | 130 | I $P(IBD,"^") S IBA=$O(^IBAM(354.71,"B",$P(IBD,"^"),0)) D  Q IBA | 
|---|
|  | 131 | . ;I IBA D TRANF(DFN,IBA,IBD,$G(IBT)) Q | 
|---|
|  | 132 | . I 'IBA S DIC="^IBAM(354.71,",DIC(0)="",X=$P(IBD,"^") D FILE^DICN S IBA=+Y | 
|---|
|  | 133 | . I IBA>0 D TRANF(DFN,IBA,IBD,$G(IBT)),ACCT(DFN,$P(IBD,"^",11),$P(IBD,"^",12),$P(IBD,"^",3)) | 
|---|
|  | 134 | K DO S DIC="^IBAM(354.71,",DIC(0)="",IBS=+$P($$SITE^IBARXMU,"^",3) | 
|---|
|  | 135 | ; | 
|---|
|  | 136 | ; get next number and file | 
|---|
|  | 137 | F  L +^IBAM(354.71,0):20 I $T S IBN=$P(^IBAM(354.71,0),"^",3) S:'IBN IBN=0 Q | 
|---|
|  | 138 | I +$G(^IBAM(354.71,+IBN,0))'=IBS,IBN F  S IBN=$O(^IBAM(354.71,IBN),-1) Q:IBS=+$G(^IBAM(354.71,IBN,0))!('IBN) | 
|---|
|  | 139 | S IBN=$P($P($G(^IBAM(354.71,+IBN,0)),"^"),"-",2)+1 F IBN=IBN:1 S X=IBS_"-"_IBN I '$D(^IBAM(354.71,"B",X)) L +^IBAM(354.71,"B",X):10 I $T D FILE^DICN L -^IBAM(354.71,"B",X) I Y>0 S IBA=+Y Q | 
|---|
|  | 140 | L -^IBAM(354.71,0) | 
|---|
|  | 141 | ; | 
|---|
|  | 142 | D TRANF(DFN,IBA,IBD,$G(IBT),$G(IBPFSS)),ACCT(DFN,$P(IBD,"^",11),$P(IBD,"^",12),$P(IBD,"^",3)) | 
|---|
|  | 143 | ;I '$G(IBUPDATE) D CANCEL^IBARXMC(DFN,$P(IBD,"^",3)) | 
|---|
|  | 144 | ; | 
|---|
|  | 145 | Q IBA | 
|---|
|  | 146 | ; | 
|---|
|  | 147 | TRANF(DFN,IBA,IBD,IBT,IBPFSS) ; file transaction data in 354.71 | 
|---|
|  | 148 | ; DFN = patient's dfn | 
|---|
|  | 149 | ; IBA = ien from file 354.71 | 
|---|
|  | 150 | ; IBD = data in global file format for file 354.71 | 
|---|
|  | 151 | ; piece 2 will be changed to dfn | 
|---|
|  | 152 | ; pieces 10 and 13 will be resolved | 
|---|
|  | 153 | ; pieces 14,15 will be created new if they don't exist | 
|---|
|  | 154 | ; pieces 16,17 will be created new | 
|---|
|  | 155 | ; piece 18 will be filled if not $g(IBT)="" | 
|---|
|  | 156 | ; | 
|---|
|  | 157 | N X,Y,IBZ,IBN,D,IBU,DIC,IBPAR,DA,DIK Q:'$D(^IBAM(354.71,IBA,0)) | 
|---|
|  | 158 | ; | 
|---|
|  | 159 | X $S($P(IBD,"^")=$P(IBD,"^",10):"S $P(IBD,""^"",10)=IBA",1:"S X=$P(IBD,""^"",10),D=""B"",DIC=""^IBAM(354.71,"",DIC(0)=""OX"" D IX^DIC S $P(IBD,""^"",10)=$S(Y>0:+Y,1:"""")") | 
|---|
|  | 160 | S IBPAR=$$PARENT^IBARXMC(+$P(IBD,"^",10)) S:IBPAR $P(IBD,"^",10)=IBPAR | 
|---|
|  | 161 | S DIC="^DIC(4,",DIC(0)="O",X=$P(IBD,"^",13),D="D" D IX^DIC | 
|---|
|  | 162 | S IBS=$S(Y>0:+Y,1:"") | 
|---|
|  | 163 | S IBN=$$NOW^XLFDT,IBU=$P(^IBAM(354.71,IBA,0),"^",14,15) | 
|---|
|  | 164 | ; | 
|---|
|  | 165 | S $P(^IBAM(354.71,IBA,0),"^",2,18)=DFN_"^"_$P(IBD,"^",3,12)_"^"_IBS_"^"_$S(+IBU:+IBU,$D(IBDUZ):IBDUZ,1:DUZ)_"^"_$S($P(IBU,"^",2):$P(IBU,"^",2),1:IBN)_"^"_$S($D(IBDUZ):IBDUZ,1:DUZ)_"^"_IBN_$S($G(IBT):"^"_IBT,1:"") | 
|---|
|  | 166 | S DA=IBA,DIK="^IBAM(354.71," D IX^DIK | 
|---|
|  | 167 | I $$SWSTAT^IBBAPI,'$G(IBPFSS) S X=$$QUEUE^VDEFQM("DFT^P03","SUBTYPE=CPIN^IEN="_IBA,,"PFSS OUTBOUND") ; use IBA as the IEN | 
|---|
|  | 168 | Q | 
|---|