Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: IBARXEU

IBARXEU.m

Go to the documentation of this file.
IBARXEU ;AAS/ALB - RX EXEMPTION UTILITY ROUTINE ;2-NOV-92
 ;;2.0;INTEGRATED BILLING;**20,222,293,385**;21-MAR-94;Build 35
 ;;Per VHA Directive 2004-038, this routine should not be modified.
 ;
 ;
RXST(DFN,IBDT) ; -- Check rx income exemption status of patient
 ;
 ;  input = :  dfn  = patient file pointer
 ;             ibdt = date to check for (optional) default is today
 ;
 ;  returns :  -1 if no data   ^text^reason code^reason text^date of test
 ;              0 if non exempt
 ;              1 if exempt
 ;
 N X,Y,Z,IBX,IBON
 ;
 S IBON=$$ON^IBARXEU0 I IBON<1 Q IBON
 ;
 S IBX=""
 I '$G(IBDT) S IBDT=DT
 I IBDT>DT S IBDT=DT ; no future dates
 ;
 ; -- date before legislations
 I IBDT<$$STDATE S IBX="0^NON-EXEMPT^^Date is Prior to Legislation^" G RXSTQ ; nobody exempt prior to legislation
 ;
 ; -- if no data on patient quit
 S X=$G(^IBA(354,DFN,0))
 I X=""!('$D(^IBA(354.1,"AP",DFN))) S IBX="-1^UNKNOWN^^Medication Copayment Exemption status never determined" G RXSTQ ; no data return -1
 ;
 ; -- use current status if ibdt not less than current test and
 ;    not greater than current test date +365
 I IBDT'<$P(X,U,3),IBDT'>$$PLUS^IBARXEU0($P(X,U,3)) S IBX=$$IBX^IBARXEU0(DFN,IBDT) G RXSTQ
 ;
 ; -- if ibdt not less than current date but greater than
 ;    current test +365 is into future
 I IBDT'<$P(X,U,3),IBDT>$$PLUS^IBARXEU0($P(X,U,3)) D
 .S Y=$$LST^IBARXEU0(DFN,IBDT)
 .;
 .; -- see if patient was SC>50, can't be updated so don't say previous
 .;    also check to see if last is still ok under VFA rules
 .I $L($$ACODE^IBARXEU0(Y))<3!($$VFAOK(Y)) S IBX=+$P(X,U,4)_U_$$TEXT^IBARXEU0($P(X,U,4))_U_$$ACODE^IBARXEU0(Y)_U_$$REASON^IBARXEU0(X)_U_$P(X,U,3) Q
 .;
 .S IBX=+$P(X,U,4)_U_"Previously "_$$TEXT^IBARXEU0($P(X,U,4))_U_$$ACODE^IBARXEU0(Y)_U_"Requires new exemption. Previously "_$$REASON^IBARXEU0(X)_U_$P(X,U,3)
 ;
 ; -- if ibdt less than current date need old exemption data
 I IBDT<$P(X,U,3) D  G RXSTQ
 .;
 .; -- find status of prior test
 .S Y=$$LST^IBARXEU0(DFN,IBDT)
 .;
 .; -- no previous data
 .I Y="" D  Q
 ..S IBX="-1^UNKNOWN^^No data for date requested."
 ..Q
 .;
 .S Z=$G(^IBA(354,DFN,0)),Z=$P(Z,U,5)_U_$P(Z,U,3) ; get status & date
 .;
 .; -- if old exemption is current for copay date
 .I IBDT'>$$PLUS^IBARXEU0(+Y) D  Q
 ..S X=$G(^IBE(354.2,+$P(Y,U,5),0)) ; exemption reason node
 ..S IBX=+$P(X,U,4)_U_$$TEXT^IBARXEU0($P(X,U,4))_U_$$ACODE^IBARXEU0(Y)_U_$$REASON^IBARXEU0(X)_U_$P(X,U,3)
 ..Q
 .;
 .; -- if ibdt is greater than old exemption + 365
 .;    report previous
 .I IBDT>$$PLUS^IBARXEU0(+Y) D  Q
 ..S X=$G(^IBE(354.2,+$P(Y,U,5),0)) ;exemption reason node
 ..;
 ..; -- see if patient was SC>50, can't be updated so don't say previous
 ..;    also check to see if last is still ok under VFA rules
 ..I $L($$ACODE^IBARXEU0(Y))<3!($$VFAOK(Y)) S IBX=+$P(X,U,4)_U_$$TEXT^IBARXEU0($P(X,U,4))_U_$$ACODE^IBARXEU0(Y)_U_$$REASON^IBARXEU0(X)_U_$P(X,U,3) Q
 ..;
 ..S IBX=+$P(X,U,4)_U_"Previously "_$$TEXT^IBARXEU0($P(X,U,4))_U_$$ACODE^IBARXEU0(Y)_U_"Requires new exemption. Previously "_$$REASON^IBARXEU0(X)_U_$P(X,U,3)
 ..Q
 .Q
 ;
RXSTQ Q IBX
 ;
DISP(DFN,IBDT,NO,NULL) ; -- formats text to display 
 ; -- input =  dfn
 ;             ibdt = date to check for
 ;             no   = number of lines to print (1, 2, or 3)
 ;             null = if zero print unknown, if non-zero quit
 ;
 I '$G(IBDT) S IBDT=DT
 I '$D(NULL) S NULL=1
 I IBDT>DT S IBDT=DT ; no future dates
 I '$G(NO) S NO=3
 S X=$$RXST(DFN,IBDT)
 S IBON=$$ON^IBARXEU0 I IBON<1 S X=IBON
 I X<0&(NULL) G DISPQ
 W !,"Medication Copayment Exemption Status: ",$P(X,U,2) G:NO<2 DISPQ
 W !,$P(X,U,4) G:NO<3 DISPQ
 I $P(X,U,5) W !,"Last Rx Copay Exemption date: " S Y=$P(X,U,5) D DT^DIQ
DISPQ Q
 ;
STDATE() ; -- legislative start date for income exemption
 Q 2921030
 ;
 ;
ACTIVE(IBZ) ; -- SCREEN for active field of billing exemptions file
 ;    only one entry per effective date can be active
 ;
 N IBX,IBY,T
 S T=0
 S IBZ=$S(IBZ=1:IBZ,$E(IBZ)="A":1,1:0)
 I 'IBZ S T=1 G ACTIVEQ
 S IBX=$G(^IBA(354.1,DA,0))
 S IBY=$O(^IBA(354.1,"AIVDT",+$P(IBX,U,3),+$P(IBX,U,2),-$P(IBX,U),0))
 I 'IBY!(IBY=DA) S T=1
 W:$D(IBTALK) !!,"Another entry is already Active, You must inactivate it first",!!
ACTIVEQ Q T
 ;
VFA() ; -- returns VFA (no longer asking for mt income info) start date
 ;  less One year
 ; ICR #431
 N IBDT
 S IBDT=$$GET1^DIQ(43,"1,",1205,"I")
 S:IBDT IBDT=$$MINUS^IBARXEU0(IBDT)
 Q IBDT
 ;
VFAOK(X) ; - under VFA (veterans financial assestment) rules, MT no
 ; longer required if within one year of VFA start date, use last test.
 ; Pass in the zeroth node of the 354.1 exemption.
 ;   Output = OK under VFA rules or not (1 or 0)
 ;
 N IBACODE,IBLST
 ;
 ; -- is this test income related, if not then not OK
 S IBACODE=$$ACODE^IBARXEU0(X)
 I IBACODE<100,IBACODE>200 Q 0
 ;
 ; -- is the test MT related, if not then not OK, ICR# 423
 S IBLST=$$LST^DGMTCOU1(+$P(X,"^",2),+X,1)
 I 'IBLST!($P(IBLST,"^",2)'=+X) Q 0
 ;
 ; -- is the test within dates needed?
 Q $S(X<$$VFA:0,1:1)
 ;