| 1 | IBARXMB ;LL/ELZ - PHARMCAY COPAY CAP BILLING FUNCTIONS ;26-APR-2001
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**156**;21-MAR-94
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | BILL(IBX,IBB) ; receives information to bill for amounts not previously billed
 | 
|---|
| 6 |  ; to create bills for them on the local system, DFN is assumed
 | 
|---|
| 7 |  ; IBX = the parent transaction number to bill, IBB = the amount to bill
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  N IBY,IBZ,IB350,IBUPDATE,IBER,Y,IBL
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  ; find bill number
 | 
|---|
| 12 |  S IBY=+$O(^IBAM(354.71,"B",IBX,0)) Q:'IBY
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 |  ; find last 354.71 entry for IBX
 | 
|---|
| 15 |  S IBL=$O(^IBAM(354.71,"AF",IBY,":"),-1) I IBL S IBY=+IBL
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 |  ; get info
 | 
|---|
| 18 |  S IBZ=^IBAM(354.71,IBY,0),IB350=$G(^IB(+$P(IBZ,"^",4),0))
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 |  ; is this already totally billed?
 | 
|---|
| 21 |  Q:$P($$NET^IBARXMC(IBY),"^",2)'>0
 | 
|---|
| 22 |  ;
 | 
|---|
| 23 |  ; cancel old 354.71 entry
 | 
|---|
| 24 |  S IBUPDATE=1 S IBER=$$CANCEL^IBARXMN(DFN,IBY,.IBER)
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 |  ; cancel old 350 entry
 | 
|---|
| 27 |  D:IB350 CAN(DFN,+$P(IBZ,"^",4))
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 |  ; create updated one
 | 
|---|
| 30 |  D ADDUP(IBY,IBB)
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 |  Q
 | 
|---|
| 33 | SEND(IBX,IBB) ; receives information to bill remotely for amounts not already
 | 
|---|
| 34 |  ; billed.  Makes a call to the remote system to tell them to bill
 | 
|---|
| 35 |  ; IBX = the parent transaction number to bill, IBB = the amount to bill
 | 
|---|
| 36 |  ; ia #3144
 | 
|---|
| 37 |  N IBICN,Y,DA,HLDOM,HLECH,HLFS,HLINSTN,HLNEXT,HLNODE,HLPARAM,HLQ,HLQUIT,PHONE,RPCIEN,IO,IOBS,IOCPU,IOF,IOHG,IOM,ION,IOPAR,IOUPAR,IOS,IOSL,IOST,IOT,IOXY,POP,IBD
 | 
|---|
| 38 |  D
 | 
|---|
| 39 |  . S IBICN=$$ICN^IBARXMU(DFN) Q:'IBICN
 | 
|---|
| 40 |  . D DIRECT^XWB2HL7(.IBD,+IBX,"IBARXM TRANS BILL","",IBICN,IBX,IBB)
 | 
|---|
| 41 |  Q
 | 
|---|
| 42 | CAN(DFN,IBX,IBCRES) ; cancels charge to be updated
 | 
|---|
| 43 |  ; IBX = ien from 350, IBCRES = charge cancel reason (optional)
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  N IBZ,IBSERV,IBDUZ,IBSITE,IBFAC,IBLAST,IBPARNT,IBTYP,IBSEQNO,IBIL,IBLASTZ,IBUNIT,IBCHRG,IBNOS,IBTOTL,IBN,IBND
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 |  S (IBND,IBZ)=$G(^IB(IBX,0)) Q:'IBZ
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 |  S IBSERV=$$SERVICE(IBZ)
 | 
|---|
| 50 |  D ARPARM^IBAUTL
 | 
|---|
| 51 |  S:'$D(IBCRES) IBCRES=16
 | 
|---|
| 52 |  ;
 | 
|---|
| 53 |  D LAST^IBARX1 I IBLAST'=IBPARNT,$D(^IB(IBLAST,0)),$P(^IBE(350.1,$P(^IB(IBLAST,0),"^",3),0),"^",5)=2 Q  ; already cancelled
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 |  ; cancel a charge with a status of HOLD
 | 
|---|
| 56 |  I $P(IBZ,"^",5)=8 N DIE,DA,DR S DIE="^IB(",DA=IBX,DR=".05///10;.1///"_IBCRES D ^DIE Q
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 |  S IBDUZ=DUZ
 | 
|---|
| 59 |  S IBPARNT=$P(IBZ,"^",9) Q:'$D(^IB(IBPARNT,0))
 | 
|---|
| 60 |  S IBATYP=$P(^IBE(350.1,$P(IBZ,"^",3),0),"^",6) ;cancellation action type
 | 
|---|
| 61 |  S IBSEQNO=$P($G(^IBE(350.1,+IBATYP,0)),"^",5) Q:'IBSEQNO
 | 
|---|
| 62 |  S IBIL=$P(IBZ,"^",11) Q:'IBIL  ; no bill exists
 | 
|---|
| 63 |  S IBLASTZ=$G(^IB(+IBLAST,0))
 | 
|---|
| 64 |  S IBUNIT=$S($P(IBLASTZ,"^",6):$P(IBLASTZ,"^",6),1:$P(IBZ,"^",6))
 | 
|---|
| 65 |  S IBCHRG=$S($P(IBLASTZ,"^",7):$P(IBLASTZ,"^",7),1:$P(IBZ,"^",7))
 | 
|---|
| 66 |  S IBTOTL=IBCHRG,IBWHER=2
 | 
|---|
| 67 |  D ADD^IBAUTL I +Y<1 Q
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 |  S $P(^IB(IBN,1),"^",1)=IBDUZ,$P(^IB(IBN,0),"^",2,13)=DFN_"^"_IBATYP_"^"_$P(IBND,"^",4)_"^2^"_IBUNIT_"^"_IBCHRG_"^"_$P(IBND,"^",8)_"^"_IBPARNT_"^"_IBCRES_"^"_IBIL_"^^"_IBFAC
 | 
|---|
| 70 |  K ^IB("AC",1,IBN)
 | 
|---|
| 71 |  D INDEX^IBARX1
 | 
|---|
| 72 |  S IBNOS=IBN
 | 
|---|
| 73 |  D ^IBAFIL
 | 
|---|
| 74 |  Q
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 | ADDUP(IBX,IBB) ; add updated transaction, assumes DFN
 | 
|---|
| 77 |  ; IBX = example ien from 354.71 to bill, IBB = amount to bill
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 |  N IBZ,IBSEQNO,IBDESC,IBCHRG,IBNOCH,IBAM,IBATYP,IBPARNT,IBN,IBDUZ,IBFAC,IBNOS,Y
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 |  S IBZ=^IBAM(354.71,IBX,0),IBDUZ=$P(IBZ,"^",14)
 | 
|---|
| 82 |  D ARPARM^IBAUTL
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 |  ; check exemption status
 | 
|---|
| 85 |  I +$$RXEXMT^IBARXEU0(DFN,$P(IBZ,"^",3)) Q
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 |  S IBATYP=$P(IBZ,"^",18),IBATYP=$P($G(^IBE(350.1,+IBATYP,0)),"^",7)
 | 
|---|
| 88 |  S IBSEQNO=$P($G(^IBE(350.1,+IBATYP,0)),"^",5) Q:'IBSEQNO
 | 
|---|
| 89 |  S IBDESC=$P(IBZ,"^",9)
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 |  S IBCHRG=IBB+$P(IBZ,"^",11),IBNOCH=$P(IBZ,"^",8)-IBCHRG
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 |  S IBAM=$$ADD^IBARXMN(DFN,"^^"_$P(IBZ,"^",3)_"^^P^"_$P(IBZ,"^",6,9)_"^"_$P(IBZ,"^")_"^"_IBCHRG_"^"_IBNOCH_"^"_(+$P($$SITE^IBARXMU,"^",3)),IBATYP) I IBAM<1 Q
 | 
|---|
| 94 |  ;
 | 
|---|
| 95 |  D ADD^IBAUTL
 | 
|---|
| 96 |  S IBPARNT=$S($P(IBZ,"^",4):$P(IBZ,"^",4),1:IBN)
 | 
|---|
| 97 |  S $P(^IB(IBN,1),"^",1)=IBDUZ,$P(^IB(IBN,0),"^",2,13)=DFN_"^"_IBATYP_"^"_$P(IBZ,"^",6)_"^2^"_$P(IBZ,"^",7)_"^"_IBCHRG_"^"_IBDESC_"^"_IBPARNT_"^^^^"_IBFAC,$P(^(0),"^",19)=IBAM
 | 
|---|
| 98 |  K IBPARNT,^IB("AC",1,IBN)
 | 
|---|
| 99 |  D INDEX^IBARX1
 | 
|---|
| 100 |  S IBNOS=IBN_"^"_$G(IBNOS)
 | 
|---|
| 101 |  D ^IBAFIL
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 |  ; call pso to let them know I have billed
 | 
|---|
| 104 |  ; check for pso part not installed
 | 
|---|
| 105 |  ; ia #3462
 | 
|---|
| 106 |  I $L($T(^PSOCPIB)) S Y(1)=$$NOW^XLFDT_"^"_DUZ_"^"_(+$P($P(IBZ,"^",6),":",2))_"^"_(+$P($P(IBZ,"^",6),":",3))_"^"_$S(IBNOCH:"P",1:"F")_"^"_IBN D ^PSOCPIB
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 |  Q
 | 
|---|
| 110 |  ;
 | 
|---|
| 111 | SERVICE(IBZ) ; returns service pointer
 | 
|---|
| 112 |  ; IBZ = zero node from 350
 | 
|---|
| 113 |  Q $P($G(^IBE(350.1,+$P(IBZ,"^",3),0)),"^",4)
 | 
|---|
| 114 |  ;
 | 
|---|