IBARXEPV ;ALB/AAS - RX COPAY EXEMPTION VERIFY STATUS ; 02/12/2004
;;2.0;INTEGRATED BILLING;**262**; 21-MAR-94
;;Per VHA Directive 10-93-142, this routine should not be modified.
;
% ; -- print/verify patients whose current exemption does not match
; what is currently computed.
I '$D(DT) D DT^DICRW
S IBQUIT=0
I '$D(IOF) D HOME^%ZIS
W @IOF,"Verify Medication Copayment Exemption Status"
W !! D DATE^IBOUTL
I 'IBBDT!('IBEDT)!(IBEDT<IBBDT) G END
;
; -- update patient status
W !
S DIR("?")="Answer 'YES' if you want to automatically update patient status to the computed status, or 'NO' to print a report of discrepancies."
S DIR(0)="Y",DIR("A")="Update Patient Status",DIR("B")="NO" D ^DIR K DIR S IBUP=+Y
I $D(DIRUT) G END
W !
;
DEV W !!,"You will need a 132 column printer for this report!",!
S %ZIS="QM" D ^%ZIS G:POP END
I $D(IO("Q")) S ZTRTN="DQ^IBARXEPV",ZTSAVE("IB*")="",ZTDESC="IB Verify Medication Copayment exemption" D ^%ZTLOAD K ZTSK,IO("Q") D HOME^%ZIS G END
I '$D(ZTQUEUED) W !,"HMMMM, LET ME THINK ABOUT THIS FOR A MINUTE"
U IO
;
DQ ; -- entry point from task man to start comparison
S (IBPCNT,IBPAG)=0,IBOK=1 D NOW^%DTC S Y=% D D^DIQ S IBPDAT=$P(Y,"@")_" "_$E($P(Y,"@",2),1,5)
K ^TMP($J,"IBUNVER")
;
; -- look through inverse date x-ref
S IBDT=IBBDT-.00001
F S IBDT=$O(^IBA(354.1,"B",IBDT)) Q:'IBDT!(IBDT>(IBEDT+.9)) S IBDA=0 F S IBDA=$O(^IBA(354.1,"B",IBDT,IBDA)) Q:'IBDA D CHK I 'IBOK D UP:IBUP,SET
D REPORT,PAUSE^IBOUTL:'IBQUIT
G END
;
END K ^TMP($J,"IBUNVER")
I $D(ZTQUEUED) S ZTREQ="@" Q
D ^%ZISC
K DFN,DIR,DIRUT,DIC,DIE,DA,DR,X,Y
K IBBDT,IBDA,IBDATA,IBDEPEN,IBDFN,IBDT,IBEDT,IBER,IBERR,IBEXREA,IBEXREAN,IBEXREAO,IBJ,IBMESS,IBNAM,IBOK,IBP,IBPAG,IBPCNT,IBPDAT,IBQUIT,IBUP
Q
;
REPORT ; -- print report
D HDR S IBDCNT=0
I '$D(^TMP($J,"IBUNVER")) W !,"No discrepancies found in ",IBPCNT," exemptions checked." G REPORTQ
;
S IBNAM=""
F S IBNAM=$O(^TMP($J,"IBUNVER",IBNAM)) Q:IBNAM=""!(IBQUIT) S IBDFN="" F S IBDFN=$O(^TMP($J,"IBUNVER",IBNAM,IBDFN)) Q:IBDFN=""!(IBQUIT) S IBER=^(IBDFN) D LINE
;
W !!,"There were ",IBDCNT," discrepancies found in ",IBPCNT," exemptions checked."
;
REPORTQ Q
;
LINE ; -- write each line
S DFN=+IBDFN,IBDCNT=IBDCNT+1
I $Y>(IOSL-5) D PAUSE^IBOUTL Q:IBQUIT D HDR
W !,$E(IBNAM,1,20),?22,$P(IBER,"^",8)
S X=$P(IBER,"^",5) W ?39,$S(X=3:"Exemption incorrect",X=1!(X=2)!(X=5):"Not Current Status",X=4:"Name Missing",1:"Hmmmm")
W ?61,$$DAT1^IBOUTL($P(IBER,"^",2))_" "_$E($P($G(^IBE(354.2,+IBER,0)),"^"),1,15)
W ?88,$$DAT1^IBOUTL($P(IBER,"^",4))_" "_$E($P($G(^IBE(354.2,+$P(IBER,"^",3),0)),"^"),1,15)
W ?115,$P(IBER,"^",6)
Q
;
CHK ; -- check if current status = computed status
S IBOK=1,IBMESS="Nothing Updated",IBERR=""
S X=$G(^IBA(354.1,+IBDA,0)) G CHKQ:'$P(X,"^",10) ;not active skip
S DFN=$P(X,"^",2)
S Y=$G(^IBA(354,DFN,0)) I +X<$P(Y,"^",3) G CHKQ ;not current exemption
;
N DGMT,CONV,CLN S (CLN,CONV)=0,DGMT=$$LST^DGMTU(DFN,+X,1)
I $P(DGMT,U,5)=2 D G:CONV CHKQ ; skip Edb conv. tests
.; Loop through the MT comments, Check for EDB converted test
.; No comments to check
.Q:'$D(^DGMT(408.31,+DGMT,"C",1,0))
.F S CLN=$O(^DGMT(408.31,+DGMT,"C",CLN)) Q:'CLN!(CONV) D
..I ^DGMT(408.31,+DGMT,"C",CLN,0)["Z06 MT via Edb" S CONV=1
;
S IBPCNT=IBPCNT+1
I '+Y S IBOK=0,IBERR=4
S IBEXREAO=$P(X,"^",5)_"^"_+X ;current exemption
I $P($G(^IBE(354.2,+IBEXREAO,0)),"^",5)=2010 G CHKQ ; hardships don't report
I +X>$P(Y,"^",3) S IBOK=0,IBERR=1 ;most current exemption not in 354
I $P(X,"^",5)'=$P(Y,"^",5) S IBOK=0,IBERR=2 ;Current exemption not in 354
I $P(X,"^",4)'=$P(Y,"^",4) S IBOK=0,IBERR=5 ;current status in exemption not in 354
S IBEXREAN=$$STATUS^IBARXEU1(DFN,DT)
I +IBEXREAO'=+IBEXREAN S IBOK=0,IBERR=3
CHKQ Q
;
UP ; -- update current exemption status
Q:IBOK
S IBJOB=15,IBWHER=16
I IBERR=4 D G UPQ
.S DIE="^IBA(354,",DA=DFN,DR=".01////"_DFN D ^DIE
.K DIE,DA,DR,DIC
.S IBMESS="Name Corrected"
UP1 N IBOLDAUT S IBOLDAUT=""
;
; -- if currently not auto exempt make sure not more recent autoexempt
I $L($P($G(^IBE(354.2,+IBEXREAN,0)),"^",5))>2 D OLDAUT^IBARXEX1(IBEXREAN)
S IBFORCE=$P(IBEXREAN,"^",2)
D MOSTR^IBARXEU5($P(IBEXREAN,"^",2),+IBEXREAN)
D ADDEX^IBAUTL6(+IBEXREAN,$P(IBEXREAN,"^",2),1,1,IBOLDAUT)
S IBMESS="Updated"
UPQ K IBFORCE Q
;
SET ; -- set ^tmp node if not okay
Q:IBOK
S IBP=$$PT^IBEFUNC(DFN)
S IBDFN=DFN
I $D(^TMP($J,"IBUNVER",$P(IBP,"^"),DFN)) S IBDFN=DFN_"-"_IBPCNT
S ^TMP($J,"IBUNVER",$P(IBP,"^"),IBDFN)=IBEXREAO_"^"_IBEXREAN_"^"_IBERR_"^"_IBMESS_"^"_IBP
Q
;
HDR ; -- print header
I IBPAG!($E(IOST,1,2)="C-") W @IOF
S IBPAG=IBPAG+1
W !,"Medication Copayment Exemption Problem Report",?(IOM-31),IBPDAT," Page ",IBPAG
W !,"Patient",?22,"PT. ID",?39,"Error",?61,"Current Exemption",?88,"Computed Exemption",?115,"Action"
W !,$TR($J(" ",IOM)," ","-")
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBARXEPV 4955 printed Oct 16, 2024@18:08:01 Page 2
IBARXEPV ;ALB/AAS - RX COPAY EXEMPTION VERIFY STATUS ; 02/12/2004
+1 ;;2.0;INTEGRATED BILLING;**262**; 21-MAR-94
+2 ;;Per VHA Directive 10-93-142, this routine should not be modified.
+3 ;
% ; -- print/verify patients whose current exemption does not match
+1 ; what is currently computed.
+2 IF '$DATA(DT)
DO DT^DICRW
+3 SET IBQUIT=0
+4 IF '$DATA(IOF)
DO HOME^%ZIS
+5 WRITE @IOF,"Verify Medication Copayment Exemption Status"
+6 WRITE !!
DO DATE^IBOUTL
+7 IF 'IBBDT!('IBEDT)!(IBEDT<IBBDT)
GOTO END
+8 ;
+9 ; -- update patient status
+10 WRITE !
+11 SET DIR("?")="Answer 'YES' if you want to automatically update patient status to the computed status, or 'NO' to print a report of discrepancies."
+12 SET DIR(0)="Y"
SET DIR("A")="Update Patient Status"
SET DIR("B")="NO"
DO ^DIR
KILL DIR
SET IBUP=+Y
+13 IF $DATA(DIRUT)
GOTO END
+14 WRITE !
+15 ;
DEV WRITE !!,"You will need a 132 column printer for this report!",!
+1 SET %ZIS="QM"
DO ^%ZIS
if POP
GOTO END
+2 IF $DATA(IO("Q"))
SET ZTRTN="DQ^IBARXEPV"
SET ZTSAVE("IB*")=""
SET ZTDESC="IB Verify Medication Copayment exemption"
DO ^%ZTLOAD
KILL ZTSK,IO("Q")
DO HOME^%ZIS
GOTO END
+3 IF '$DATA(ZTQUEUED)
WRITE !,"HMMMM, LET ME THINK ABOUT THIS FOR A MINUTE"
+4 USE IO
+5 ;
DQ ; -- entry point from task man to start comparison
+1 SET (IBPCNT,IBPAG)=0
SET IBOK=1
DO NOW^%DTC
SET Y=%
DO D^DIQ
SET IBPDAT=$PIECE(Y,"@")_" "_$EXTRACT($PIECE(Y,"@",2),1,5)
+2 KILL ^TMP($JOB,"IBUNVER")
+3 ;
+4 ; -- look through inverse date x-ref
+5 SET IBDT=IBBDT-.00001
+6 FOR
SET IBDT=$ORDER(^IBA(354.1,"B",IBDT))
if 'IBDT!(IBDT>(IBEDT+.9))
QUIT
SET IBDA=0
FOR
SET IBDA=$ORDER(^IBA(354.1,"B",IBDT,IBDA))
if 'IBDA
QUIT
DO CHK
IF 'IBOK
if IBUP
DO UP
DO SET
+7 DO REPORT
if 'IBQUIT
DO PAUSE^IBOUTL
+8 GOTO END
+9 ;
END KILL ^TMP($JOB,"IBUNVER")
+1 IF $DATA(ZTQUEUED)
SET ZTREQ="@"
QUIT
+2 DO ^%ZISC
+3 KILL DFN,DIR,DIRUT,DIC,DIE,DA,DR,X,Y
+4 KILL IBBDT,IBDA,IBDATA,IBDEPEN,IBDFN,IBDT,IBEDT,IBER,IBERR,IBEXREA,IBEXREAN,IBEXREAO,IBJ,IBMESS,IBNAM,IBOK,IBP,IBPAG,IBPCNT,IBPDAT,IBQUIT,IBUP
+5 QUIT
+6 ;
REPORT ; -- print report
+1 DO HDR
SET IBDCNT=0
+2 IF '$DATA(^TMP($JOB,"IBUNVER"))
WRITE !,"No discrepancies found in ",IBPCNT," exemptions checked."
GOTO REPORTQ
+3 ;
+4 SET IBNAM=""
+5 FOR
SET IBNAM=$ORDER(^TMP($JOB,"IBUNVER",IBNAM))
if IBNAM=""!(IBQUIT)
QUIT
SET IBDFN=""
FOR
SET IBDFN=$ORDER(^TMP($JOB,"IBUNVER",IBNAM,IBDFN))
if IBDFN=""!(IBQUIT)
QUIT
SET IBER=^(IBDFN)
DO LINE
+6 ;
+7 WRITE !!,"There were ",IBDCNT," discrepancies found in ",IBPCNT," exemptions checked."
+8 ;
REPORTQ QUIT
+1 ;
LINE ; -- write each line
+1 SET DFN=+IBDFN
SET IBDCNT=IBDCNT+1
+2 IF $Y>(IOSL-5)
DO PAUSE^IBOUTL
if IBQUIT
QUIT
DO HDR
+3 WRITE !,$EXTRACT(IBNAM,1,20),?22,$PIECE(IBER,"^",8)
+4 SET X=$PIECE(IBER,"^",5)
WRITE ?39,$SELECT(X=3:"Exemption incorrect",X=1!(X=2)!(X=5):"Not Current Status",X=4:"Name Missing",1:"Hmmmm")
+5 WRITE ?61,$$DAT1^IBOUTL($PIECE(IBER,"^",2))_" "_$EXTRACT($PIECE($GET(^IBE(354.2,+IBER,0)),"^"),1,15)
+6 WRITE ?88,$$DAT1^IBOUTL($PIECE(IBER,"^",4))_" "_$EXTRACT($PIECE($GET(^IBE(354.2,+$PIECE(IBER,"^",3),0)),"^"),1,15)
+7 WRITE ?115,$PIECE(IBER,"^",6)
+8 QUIT
+9 ;
CHK ; -- check if current status = computed status
+1 SET IBOK=1
SET IBMESS="Nothing Updated"
SET IBERR=""
+2 ;not active skip
SET X=$GET(^IBA(354.1,+IBDA,0))
if '$PIECE(X,"^",10)
GOTO CHKQ
+3 SET DFN=$PIECE(X,"^",2)
+4 ;not current exemption
SET Y=$GET(^IBA(354,DFN,0))
IF +X<$PIECE(Y,"^",3)
GOTO CHKQ
+5 ;
+6 NEW DGMT,CONV,CLN
SET (CLN,CONV)=0
SET DGMT=$$LST^DGMTU(DFN,+X,1)
+7 ; skip Edb conv. tests
IF $PIECE(DGMT,U,5)=2
Begin DoDot:1
+8 ; Loop through the MT comments, Check for EDB converted test
+9 ; No comments to check
+10 if '$DATA(^DGMT(408.31,+DGMT,"C",1,0))
QUIT
+11 FOR
SET CLN=$ORDER(^DGMT(408.31,+DGMT,"C",CLN))
if 'CLN!(CONV)
QUIT
Begin DoDot:2
+12 IF ^DGMT(408.31,+DGMT,"C",CLN,0)["Z06 MT via Edb"
SET CONV=1
End DoDot:2
End DoDot:1
if CONV
GOTO CHKQ
+13 ;
+14 SET IBPCNT=IBPCNT+1
+15 IF '+Y
SET IBOK=0
SET IBERR=4
+16 ;current exemption
SET IBEXREAO=$PIECE(X,"^",5)_"^"_+X
+17 ; hardships don't report
IF $PIECE($GET(^IBE(354.2,+IBEXREAO,0)),"^",5)=2010
GOTO CHKQ
+18 ;most current exemption not in 354
IF +X>$PIECE(Y,"^",3)
SET IBOK=0
SET IBERR=1
+19 ;Current exemption not in 354
IF $PIECE(X,"^",5)'=$PIECE(Y,"^",5)
SET IBOK=0
SET IBERR=2
+20 ;current status in exemption not in 354
IF $PIECE(X,"^",4)'=$PIECE(Y,"^",4)
SET IBOK=0
SET IBERR=5
+21 SET IBEXREAN=$$STATUS^IBARXEU1(DFN,DT)
+22 IF +IBEXREAO'=+IBEXREAN
SET IBOK=0
SET IBERR=3
CHKQ QUIT
+1 ;
UP ; -- update current exemption status
+1 if IBOK
QUIT
+2 SET IBJOB=15
SET IBWHER=16
+3 IF IBERR=4
Begin DoDot:1
+4 SET DIE="^IBA(354,"
SET DA=DFN
SET DR=".01////"_DFN
DO ^DIE
+5 KILL DIE,DA,DR,DIC
+6 SET IBMESS="Name Corrected"
End DoDot:1
GOTO UPQ
UP1 NEW IBOLDAUT
SET IBOLDAUT=""
+1 ;
+2 ; -- if currently not auto exempt make sure not more recent autoexempt
+3 IF $LENGTH($PIECE($GET(^IBE(354.2,+IBEXREAN,0)),"^",5))>2
DO OLDAUT^IBARXEX1(IBEXREAN)
+4 SET IBFORCE=$PIECE(IBEXREAN,"^",2)
+5 DO MOSTR^IBARXEU5($PIECE(IBEXREAN,"^",2),+IBEXREAN)
+6 DO ADDEX^IBAUTL6(+IBEXREAN,$PIECE(IBEXREAN,"^",2),1,1,IBOLDAUT)
+7 SET IBMESS="Updated"
UPQ KILL IBFORCE
QUIT
+1 ;
SET ; -- set ^tmp node if not okay
+1 if IBOK
QUIT
+2 SET IBP=$$PT^IBEFUNC(DFN)
+3 SET IBDFN=DFN
+4 IF $DATA(^TMP($JOB,"IBUNVER",$PIECE(IBP,"^"),DFN))
SET IBDFN=DFN_"-"_IBPCNT
+5 SET ^TMP($JOB,"IBUNVER",$PIECE(IBP,"^"),IBDFN)=IBEXREAO_"^"_IBEXREAN_"^"_IBERR_"^"_IBMESS_"^"_IBP
+6 QUIT
+7 ;
HDR ; -- print header
+1 IF IBPAG!($EXTRACT(IOST,1,2)="C-")
WRITE @IOF
+2 SET IBPAG=IBPAG+1
+3 WRITE !,"Medication Copayment Exemption Problem Report",?(IOM-31),IBPDAT," Page ",IBPAG
+4 WRITE !,"Patient",?22,"PT. ID",?39,"Error",?61,"Current Exemption",?88,"Computed Exemption",?115,"Action"
+5 WRITE !,$TRANSLATE($JUSTIFY(" ",IOM)," ","-")
+6 QUIT