| [613] | 1 | IBARXEU3 ;ALB/AAS - RX COPAY EXEMPTION PROCESS AR CANCELS ; 8-JAN-93 | 
|---|
|  | 2 | ;;Version 2.0 ; INTEGRATED BILLING ;**16,34**; 21-MAR-94 | 
|---|
|  | 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | CANCEL ; Cancel Rx copay charges when veteran becomes exempt. | 
|---|
|  | 6 | ;  Required variable input: | 
|---|
|  | 7 | ;        DFN  --  Pointer to the patient in file #2 | 
|---|
|  | 8 | ;     IBSTAT  --  patient is non-exempt (0) or exempt (1) | 
|---|
|  | 9 | ;     IBEVTA  --  Zeroth node in #354.1 of CURRENT exemption | 
|---|
|  | 10 | ;     IBEVTP  --  Zeroth node in #354.1 of PRIOR exemption | 
|---|
|  | 11 | ; | 
|---|
|  | 12 | N IBDT,IBEDT,IBCODA,IBCODP,IBSITE,IBAFY,IBATYP,IBCHRG,IBXX | 
|---|
|  | 13 | N IBCRES,IBERR,IBFAC,IBIL,IBL,IBLAST,IBLDT,IBN,IBND,IBNN,IBNOW,IBFOUND | 
|---|
|  | 14 | N IBPARNT,IBPARNT1,IBSEQNO,IBUNIT,IBVLAST,IBCODVL,IBANVD,IBFIL | 
|---|
|  | 15 | ; | 
|---|
|  | 16 | ; - veteran must be currently exempt, | 
|---|
|  | 17 | I 'IBSTAT G CANCELQ | 
|---|
|  | 18 | ; | 
|---|
|  | 19 | ; - due to income < pension, | 
|---|
|  | 20 | S IBCODP=$$ACODE^IBARXEU0(IBEVTP),IBCODA=$$ACODE^IBARXEU0(IBEVTA) | 
|---|
|  | 21 | G:IBCODA'=120 CANCELQ | 
|---|
|  | 22 | ; | 
|---|
|  | 23 | ; - when s/he was previously non-exempt, due to no income data, | 
|---|
|  | 24 | I $S(IBCODP="":0,IBCODP=210:0,1:1) G CANCELQ | 
|---|
|  | 25 | ; | 
|---|
|  | 26 | ; - after having been exempt due to income < pension. | 
|---|
|  | 27 | S IBVLAST=$$LST^IBARXEU0(DFN,+IBEVTP-.01),IBCODVL=$$ACODE^IBARXEU0(IBVLAST) | 
|---|
|  | 28 | G:IBCODVL'=120 CANCELQ | 
|---|
|  | 29 | ; | 
|---|
|  | 30 | ; - calculate 'anniversary date' from original exemption | 
|---|
|  | 31 | S IBANVD=$$PLUS^IBARXEU0(+IBVLAST) | 
|---|
|  | 32 | ; | 
|---|
|  | 33 | ; - 'filing' date of new exemption must be within 90 days of this date | 
|---|
|  | 34 | S IBFIL=$P($G(^DGMT(408.31,+$$LST^DGMTCOU1(DFN,+IBEVTA,3),0)),"^",7) | 
|---|
|  | 35 | I $$FMDIFF^XLFDT(IBFIL,IBANVD)>90 G CANCELQ | 
|---|
|  | 36 | ; | 
|---|
|  | 37 | ; - set start date for cancelling at beginning of non-exempt period. | 
|---|
|  | 38 | ; - end date: today (if the new exemption is the most current), or | 
|---|
|  | 39 | ;             the end of the exemption just started (day before | 
|---|
|  | 40 | ;                 the most current exemption) | 
|---|
|  | 41 | S IBBDT=+IBEVTA I IBEVTP,+IBEVTP<+IBEVTA S IBBDT=+IBEVTP | 
|---|
|  | 42 | S:IBBDT<$$STDATE^IBARXEU IBBDT=$$STDATE^IBARXEU | 
|---|
|  | 43 | S IBXX=$$LST^IBARXEU0(DFN) | 
|---|
|  | 44 | S IBEDT=$S(+IBXX=+IBEVTA:DT,1:$$FMADD^XLFDT(+IBXX,-1)) | 
|---|
|  | 45 | ; | 
|---|
|  | 46 | ; - move the start date up past the last cancellation end date | 
|---|
|  | 47 | S X=-$O(^IBA(354.1,"ACAN",DFN,"")) | 
|---|
|  | 48 | I X'<IBBDT S IBBDT=X | 
|---|
|  | 49 | ; | 
|---|
|  | 50 | ; - quit if the start date slipped ahead of the end date | 
|---|
|  | 51 | I IBEDT<IBBDT G CANCELQ | 
|---|
|  | 52 | ; | 
|---|
|  | 53 | ; - quit if there are no charges to cancel | 
|---|
|  | 54 | S X=$O(^IB("APTDT",DFN,(IBBDT-.01))) I 'X!(X>(IBEDT+.9)) G CANCELQ | 
|---|
|  | 55 | ; | 
|---|
|  | 56 | ; - cancel the charges in billing | 
|---|
|  | 57 | S Y=1 D ARPARM^IBAUTL I Y<0 G CANCELQ | 
|---|
|  | 58 | ; | 
|---|
|  | 59 | S IBDATE=IBBDT-.0001,IBFOUND=0 | 
|---|
|  | 60 | F  S IBDATE=$O(^IB("APTDT",DFN,IBDATE)) Q:'IBDATE!((IBEDT+.9)<IBDATE)  D | 
|---|
|  | 61 | .S IBNN=0 F  S IBNN=$O(^IB("APTDT",DFN,IBDATE,IBNN)) Q:'IBNN  D BILL | 
|---|
|  | 62 | ; | 
|---|
|  | 63 | ; - cancel bills in AR, if at least one charge was cancelled | 
|---|
|  | 64 | I IBFOUND S IBARCAN=1 D ARCAN^IBARXEU4(DFN,IBSTAT,IBBDT,IBEDT) | 
|---|
|  | 65 | ; | 
|---|
|  | 66 | CANCELQ Q | 
|---|
|  | 67 | ; | 
|---|
|  | 68 | BILL ; -- process cancelling one bill | 
|---|
|  | 69 | S X=$G(^IB(IBNN,0)) Q:X="" | 
|---|
|  | 70 | Q:+$P(X,"^",4)'=52  ;quit if not pharmacy co-pay | 
|---|
|  | 71 | ; | 
|---|
|  | 72 | ; -- find parent | 
|---|
|  | 73 | S IBPARNT=$P(X,"^",9) | 
|---|
|  | 74 | ; | 
|---|
|  | 75 | S IBPARDT=$P($G(^IB(IBPARNT,1)),"^",2) ; get date of parent charge | 
|---|
|  | 76 | I $S(IBPARDT="":1,IBPARDT<IBBDT:1,IBPARDT>(IBEDT+.9):1,1:0) Q  ; ignore charges started before or after date range | 
|---|
|  | 77 | ; | 
|---|
|  | 78 | ; -- get most recent ibaction | 
|---|
|  | 79 | S IBPARNT1=IBPARNT F  S IBPARNT1=$P($G(^IB(IBPARNT,0)),"^",9) Q:IBPARNT1=IBPARNT  S IBPARNT=IBPARNT1 ;gets parent of parents | 
|---|
|  | 80 | S IBLAST=$$LAST^IBECEAU(IBPARNT) | 
|---|
|  | 81 | ; | 
|---|
|  | 82 | Q:$P(^IBE(350.1,$P(^IB(IBLAST,0),"^",3),0),"^",5)=2  ;quit if already cancelled | 
|---|
|  | 83 | ; | 
|---|
|  | 84 | S IBCRES=$O(^IBE(350.3,"B","RX COPAY INCOME EXEMPTION",0)) ; get cancellation reason | 
|---|
|  | 85 | ; | 
|---|
|  | 86 | D CANRX | 
|---|
|  | 87 | Q | 
|---|
|  | 88 | ; | 
|---|
|  | 89 | CANRX ; -- do actual cancellation without calling ar | 
|---|
|  | 90 | ;    input :  iblast := last entry for parnt | 
|---|
|  | 91 | ;             ibparnt := parent charge | 
|---|
|  | 92 | ;             ibnd    := ^(0) node of iblast | 
|---|
|  | 93 | ; | 
|---|
|  | 94 | I $D(^IB(IBLAST,0)),$P(^IBE(350.1,$P(^IB(IBLAST,0),"^",3),0),"^",5)=2 G CANRXQ ;already cancelled | 
|---|
|  | 95 | S IBND=$G(^IB(+IBLAST,0)),IBDUZ=DUZ | 
|---|
|  | 96 | ; | 
|---|
|  | 97 | S IBATYP=$P(^IBE(350.1,+$P($G(^IB(IBPARNT,0)),"^",3),0),"^",6) ;cancellation action type for parent | 
|---|
|  | 98 | I '$D(^IBE(350.1,+IBATYP,0)) G CANRXQ | 
|---|
|  | 99 | S IBSEQNO=$P(^IBE(350.1,+IBATYP,0),"^",5) I 'IBSEQNO G CANRXQ | 
|---|
|  | 100 | S IBIL=$P($G(^IB(IBPARNT,0)),"^",11) | 
|---|
|  | 101 | S IBUNIT=$S($P(IBND,"^",6):$P(IBND,"^",6),$D(^IB(IBPARNT,0)):$P(^(0),"^",6),1:0) I IBUNIT<1 G CANRXQ | 
|---|
|  | 102 | S IBCHRG=$S($P(IBND,"^",7):$P(IBND,"^",7),$D(^IB(IBPARNT,0)):$P(^(0),"^",7),1:0) I IBCHRG<1 G CANRXQ | 
|---|
|  | 103 | ; | 
|---|
|  | 104 | D ADD^IBAUTL I +Y<1 G CANRXQ | 
|---|
|  | 105 | S $P(^IB(IBN,1),"^",1)=IBDUZ,$P(^IB(IBN,0),"^",2,13)=DFN_"^"_IBATYP_"^"_$P(IBND,"^",4)_"^11^"_IBUNIT_"^"_IBCHRG_"^"_$P(IBND,"^",8)_"^"_IBPARNT_"^"_IBCRES_"^"_IBIL_"^^"_IBFAC | 
|---|
|  | 106 | K ^IB("AC",1,IBN) | 
|---|
|  | 107 | S DA=IBN,DIK="^IB(" D IX^DIK | 
|---|
|  | 108 | S IBFOUND=1 | 
|---|
|  | 109 | ; | 
|---|
|  | 110 | ; -- update parent to cancelled | 
|---|
|  | 111 | ;    note: parent status=10, cancellation due to exemption reason only | 
|---|
|  | 112 | ;          on charge cancelled so reports work right. | 
|---|
|  | 113 | S DIE="^IB(",DA=IBPARNT,DR=".05////10;.1////"_IBCRES D ^DIE K DIE,DA,DR | 
|---|
|  | 114 | CANRXQ Q | 
|---|