| [613] | 1 | IBAERR3 ;ALB/AAS - RX COPAY EXEMPTION ALERT PROCESSOR ; 15-JAN-93
 | 
|---|
 | 2 |  ;;2.0;INTEGRATED BILLING;**356**;21-MAR-94
 | 
|---|
 | 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
 | 4 |  ;
 | 
|---|
 | 5 | % ; -- medication copayment exemption errors
 | 
|---|
 | 6 |  ;
 | 
|---|
 | 7 | SEND ; -- use kernel alerts
 | 
|---|
 | 8 |  N X,Y,IBA,IBP,XQA,XQAID,XQAKILL,XQAMSG,XQAROU,XQAOPT,XQADATA,DIC,DA,DR,DIE,DLAYGO
 | 
|---|
 | 9 |  S:'$D(IBALERT) IBALERT=$G(IBEXERR)+10 G:'IBALERT SENDQ
 | 
|---|
 | 10 |  S IBP=$$PT^IBEFUNC(DFN)
 | 
|---|
 | 11 |  S IBA=$G(^IBE(354.5,IBALERT,0)) G:IBA="" SENDQ
 | 
|---|
 | 12 |  S X=$P($G(^IBE(354.5,IBALERT,3)),"^",1) I X="D" G SENDQ
 | 
|---|
 | 13 |  S X=+IBALERT,DIC(0)="L",DIC="^IBA(354.4,",DLAYGO=354.4 K DD,DO D FILE^DICN S IBDA=+Y
 | 
|---|
 | 14 |  S XQAID=$P(IBA,"^",2)_IBDA,XQAKILL=0
 | 
|---|
 | 15 |  S XQAMSG=$P(IBP,"^")_" ("_$P(IBP,"^",3)_") - "_$P(IBA,"^",3)
 | 
|---|
 | 16 |  I $P(IBA,"^",5)="R" S XQAROU=$S($P(IBA,"^",6)'="":$P(IBA,"^",6,7),1:$P(IBA,"^",7))
 | 
|---|
 | 17 |  ;
 | 
|---|
 | 18 |  S XQADATA=$G(IBALERT)_";"_$G(DFN)_";"_$G(IBEXDA)_";"_$G(IBJOB)_";"_$G(IBWHER)_";"_$G(DUZ)_";"_$G(DT)_";"_$G(IBDA)
 | 
|---|
 | 19 |  ;
 | 
|---|
 | 20 |  S DA=IBDA,DIE="^IBA(354.4,",DR=".02///NOW" D ^DIE K DIC,DIE,DA,DR
 | 
|---|
 | 21 |  ;
 | 
|---|
 | 22 |  I $G(IBEXDA) S DA=IBEXDA,DIE="^IBA(354.1,",DR=".09////^S X=IBDA" D ^DIE K DIC,DIE,DA,DR
 | 
|---|
 | 23 |  ;
 | 
|---|
 | 24 |  D TOWHO
 | 
|---|
 | 25 |  ;
 | 
|---|
 | 26 |  D SETUP^XQALERT
 | 
|---|
 | 27 |  ;
 | 
|---|
 | 28 | SENDQ I $G(IBEXERR) S IBEXERR="" ; clear error flag
 | 
|---|
 | 29 |  Q
 | 
|---|
 | 30 |  ;
 | 
|---|
 | 31 | TOWHO ; -- set xqa array to deliver to
 | 
|---|
 | 32 |  N I,J
 | 
|---|
 | 33 |  S I="" F  S I=$O(^IBE(354.5,+IBALERT,200,I)) Q:'I  S J=+^(I,0),XQA(J)=""
 | 
|---|
 | 34 |  S I="" F  S I=$O(^IBE(354.5,+IBALERT,2,I)) Q:'I  S J=+^(I,0),XQA("G."_$P($G(^XMB(3.8,+J,0)),"^"))=""
 | 
|---|
 | 35 |  I '$D(XQA) D
 | 
|---|
 | 36 |  .S J=+$P($G(^IBE(350.9,1,0)),"^",$S($G(IBALERT)<10:13,1:9))
 | 
|---|
 | 37 |  .I +J'=0 S XQA("G."_$P($G(^XMB(3.8,+J,0)),"^"))=""
 | 
|---|
 | 38 |  .I +J=0 S XQA("G.IB EDI SUPERVISOR")=""
 | 
|---|
 | 39 |  ;S XQA(DUZ)=""
 | 
|---|
 | 40 | TOWHOQ Q
 | 
|---|
 | 41 |  ;
 | 
|---|
 | 42 | 1 ; -- process info only alerts
 | 
|---|
 | 43 |  Q:$G(XQADATA)=""  K XQAKILL
 | 
|---|
 | 44 |  N DFN,IBP,IBCLEAR,DIR,DIRUT,DUOUT S IBCLEAR="YES"
 | 
|---|
 | 45 |  D WRITE,CLEAR,UP
 | 
|---|
 | 46 |  K IBCLEAR Q
 | 
|---|
 | 47 |  ;
 | 
|---|
 | 48 | 11 ; -- process action alerts
 | 
|---|
 | 49 |  Q:$G(XQADATA)=""  K XQAKILL
 | 
|---|
 | 50 |  N DFN,IBP,IBCLEAR,DIR,DIRUT,DUOUT S IBCLEAR="YES"
 | 
|---|
 | 51 |  D WRITE,PROC,CLEAR,UP
 | 
|---|
 | 52 |  Q
 | 
|---|
 | 53 |  ;
 | 
|---|
 | 54 | PROC ; -- process alert
 | 
|---|
 | 55 |  ; -- run ^ibarxex to see if okay
 | 
|---|
 | 56 |  N IBDFN,DIR,X,Y W !!
 | 
|---|
 | 57 |  S DIR("?")="Enter YES to run the Manual Update option for this patient or NO if everything appears in order or enter '^' to exit and save this alert for later processing."
 | 
|---|
 | 58 |  S DIR(0)="Y",DIR("A")="Run Manual Update Option",DIR("B")="YES" D ^DIR
 | 
|---|
 | 59 |  I $D(DIRUT)!(Y=0) S IBCLEAR="NO" G PROCQ
 | 
|---|
 | 60 |  S IBDFN=DFN D EN^IBARXEX S DFN=IBDFN
 | 
|---|
 | 61 | PROCQ Q
 | 
|---|
 | 62 |  ;
 | 
|---|
 | 63 | CLEAR ; -- clear entry in 354.4 and alert in 354.1
 | 
|---|
 | 64 |  Q:$D(DIRUT)
 | 
|---|
 | 65 |  N DIR,X,Y W !!
 | 
|---|
 | 66 |  S DIR("?")="Enter YES to clear this alert for all users or NO to clear this alert for the current user or '^' to exit and save this alert for later processing."
 | 
|---|
 | 67 |  S DIR(0)="Y",DIR("A")="Clear alert for all users ('^' to save alert)",DIR("B")=IBCLEAR D ^DIR
 | 
|---|
 | 68 |  I $D(DIRUT) G CLEARQ
 | 
|---|
 | 69 |  ; -- xqakill=0 clear for all, =1 clear for current user only
 | 
|---|
 | 70 |  S XQAKILL='Y
 | 
|---|
 | 71 |  W !
 | 
|---|
 | 72 | CLEARQ Q
 | 
|---|
 | 73 |  ;
 | 
|---|
 | 74 | WRITE ; -- write out long message
 | 
|---|
 | 75 |  ;    xqadata = alert type;dfn;exemption;ibjob;ibwhere;duz;dt;alert entry
 | 
|---|
 | 76 |  N XQATMP,XQATMP1,XQATMP2
 | 
|---|
 | 77 |  S DFN=$P(XQADATA,";",2),IBP=$$PT^IBEFUNC(DFN)
 | 
|---|
 | 78 |  W !!,"Patient: ",$P(IBP,"^"),?40,$P(IBP,"^",2)
 | 
|---|
 | 79 |  D DISP^IBARXEU(DFN,DT,3,0)
 | 
|---|
 | 80 |  W:+XQADATA<11 !!,$P($T(MSG+(+XQADATA)),";;",2)
 | 
|---|
 | 81 |  I +XQADATA>10 D
 | 
|---|
 | 82 |  .S XQATMP=+XQADATA-10
 | 
|---|
 | 83 |  .W !!,"The error that occurred was: ",$P($T(ERR+XQATMP^IBAERR2),";;",2),!,"Processed"
 | 
|---|
 | 84 |  W " by ",$P($G(^VA(200,+$P(XQADATA,";",6),0)),"^")," on ",$$DAT1^IBOUTL($P(XQADATA,";",7)),"."
 | 
|---|
 | 85 |  ;
 | 
|---|
 | 86 |  ; -- this only handles ibjobs>10 (exemption)
 | 
|---|
 | 87 |  I $P(XQADATA,";",4)>10 D
 | 
|---|
 | 88 |  .S XQATMP1=$P(XQADATA,";",4)-10
 | 
|---|
 | 89 |  .W !,"This occurred during the ",$P($T(JOB+XQATMP1^IBAERR2),";;",2)
 | 
|---|
 | 90 |  I $P(XQADATA,";",5)>10 D
 | 
|---|
 | 91 |  .S XQATMP2=$P(XQADATA,";",5)-10
 | 
|---|
 | 92 |  .W !,$P($T(WHERE+XQATMP2^IBAERR2),";;",2)
 | 
|---|
 | 93 |  ;
 | 
|---|
 | 94 | WRITEQ Q
 | 
|---|
 | 95 |  ;
 | 
|---|
 | 96 | UP ; -- update error file with user
 | 
|---|
 | 97 |  Q:'$D(XQAKILL)
 | 
|---|
 | 98 |  N DA,DIC,DIE,DR,X,Y
 | 
|---|
 | 99 |  G:'$P(XQADATA,";",8) UPQ
 | 
|---|
 | 100 |  S DA=$P(XQADATA,";",8) S X=$G(^IBA(354.4,DA,0)) G:X=""!($P(X,"^",3)'="") UPQ
 | 
|---|
 | 101 |  S DIE="^IBA(354.4,",DR=".03////"_DUZ_";.04///NOW" D ^DIE
 | 
|---|
 | 102 |  ;
 | 
|---|
 | 103 |  G:$P($G(^IBA(354.1,+$P(XQADATA,";",3),0)),"^",9)="" UPQ
 | 
|---|
 | 104 |  K DIC,DIE,DA,DR,X,Y
 | 
|---|
 | 105 |  S DA=$P(XQADATA,";",3),DIE="^IBA(354.1,",DR=".09///@" D ^DIE
 | 
|---|
 | 106 | UPQ Q
 | 
|---|
 | 107 |  ;
 | 
|---|
 | 108 | MSG ;;
 | 
|---|
 | 109 |  ;;Patient has been given a Hardship Exemption
 | 
|---|
 | 110 |  ;;Patient's Hardship Exemption has been removed
 | 
|---|
 | 111 |  ;;Patient's Exemption based on Income has expired
 | 
|---|
 | 112 |  ;;
 | 
|---|
 | 113 |  Q
 | 
|---|
 | 114 |  ;
 | 
|---|
 | 115 | PURGE ; -- purge entries in 354.4, clear pointer in 354.1, delete alert
 | 
|---|
 | 116 |  ;    purge cleared entries older than 30 days, all over 60 days
 | 
|---|
 | 117 |  ;
 | 
|---|
 | 118 |  ; -- called by IBAMTC (nightly means test job)
 | 
|---|
 | 119 |  ;    not user interactive (friendly)
 | 
|---|
 | 120 |  ;
 | 
|---|
 | 121 |  Q:'$O(^IBA(354.4,"AC",0))
 | 
|---|
 | 122 |  S X1=DT,X2=-30 D C^%DTC S IB30=X
 | 
|---|
 | 123 |  S X1=DT,X2=-60 D C^%DTC S IB60=X
 | 
|---|
 | 124 |  S IBDT=""
 | 
|---|
 | 125 |  W:'$D(ZTQUEUED) !!,"Purging Alerts..."
 | 
|---|
 | 126 |  F  S IBDT=$O(^IBA(354.4,"AC",IBDT)) Q:'IBDT!(IBDT>IB30)  S IBDA=0 F  S IBDA=$O(^IBA(354.4,"AC",IBDT,IBDA)) Q:'IBDA  D
 | 
|---|
 | 127 |  .;
 | 
|---|
 | 128 |  .S X=$G(^IBA(354.4,IBDA,0))
 | 
|---|
 | 129 |  .I '$P(X,"^",3),(IBDT>IB60) Q
 | 
|---|
 | 130 |  .;
 | 
|---|
 | 131 |  .S XQAID=$P(^IBE(354.5,+1,0),"^",2)_IBDA
 | 
|---|
 | 132 |  .S X=$O(^IBA(354.1,"ALERT",IBDA,0)) I X S DA=X,DR=".09///@",DIE="^IBA(354.1," D ^DIE K DA,DR,DIE
 | 
|---|
 | 133 |  .;
 | 
|---|
 | 134 |  .S IBALERT=+$G(^IBA(354.4,+IBDA,0))
 | 
|---|
 | 135 |  .D TOWHO S XQAKILL=0 D DELETEA^XQALERT
 | 
|---|
 | 136 |  .;
 | 
|---|
 | 137 |  .S DA=IBDA,DIK="^IBA(354.4," D ^DIK K DA,DIK
 | 
|---|
 | 138 |  .Q
 | 
|---|
 | 139 |  K IB30,IB60,IBDA,XQA,XQAID,XQAKILL,X,X1,X2
 | 
|---|