| [613] | 1 | IBAUTL6 ;AAS/ALB-RX EXEMPTION UTILITY ROUTINE (CONT.);2-NOV-92 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**34,195**;21-MAR-94 | 
|---|
|  | 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | ADDP ; -- Add patient to file 354 | 
|---|
|  | 6 | ; -- Input    : dfn    =  entry in patient file | 
|---|
|  | 7 | ;    returns  : ibadd  =  0 if not added, 1 if added | 
|---|
|  | 8 | ; | 
|---|
|  | 9 | N DINUM,DLAYGO,X | 
|---|
|  | 10 | I '$D(DT) D DT^DICRW | 
|---|
|  | 11 | S IBWHER=11,IBEXERR="" | 
|---|
|  | 12 | S IBADD=0 | 
|---|
|  | 13 | I $S('$D(DFN):1,'$D(^IBA(354)):1,$D(^IBA(354,DFN)):1,1:0) G ADDPQ | 
|---|
|  | 14 | K DO,DD,DIC,DR,DA,DIE S DIC="^IBA(354,",DIC(0)="L",DLAYGO=354 | 
|---|
|  | 15 | L +^IBA(354,DFN):15 I $T,'$D(^IBA(354,DFN)) S (DINUM,X)=DFN D FILE^DICN I +Y>0 S IBADD=1 | 
|---|
|  | 16 | I IBADD'=1 S IBEXERR=9 | 
|---|
|  | 17 | L -^IBA(354,DFN) | 
|---|
|  | 18 | ; | 
|---|
|  | 19 | ADDPQ K DO,DD,DIC,DR,DIE,DA | 
|---|
|  | 20 | Q | 
|---|
|  | 21 | ; | 
|---|
|  | 22 | ADDEX(IBEXREA,IBDT,IBHOW,IBTYPE,IBOLDAUT) ; -- add entry to 354.1 and update | 
|---|
|  | 23 | ;  -- this will become the active entry for this effective date | 
|---|
|  | 24 | ;     other entries for this effective date should be cancelled | 
|---|
|  | 25 | ;     prior to making this call | 
|---|
|  | 26 | ; | 
|---|
|  | 27 | ;  -- input      dfn  =  pt ien (required) | 
|---|
|  | 28 | ;            ibexrea  =  pointer to exemption reason file (required) | 
|---|
|  | 29 | ;               ibdt  =  internal form of effective date (required) | 
|---|
|  | 30 | ;              ibhow  =  1=system added, 2=user override (optional) default =1 | 
|---|
|  | 31 | ;             ibtype  =  type of exemption (optional)  default =1 (copay) | 
|---|
|  | 32 | ;           iboldaut  = date (optional)  if defined is the date of a previous exemption status (automatic) that needs to be inactivated | 
|---|
|  | 33 | ; | 
|---|
|  | 34 | ;  -- returns  ibadde = ibexrea^ibdt or null if not added | 
|---|
|  | 35 | ;              iberr  = error if occurs else null | 
|---|
|  | 36 | ; | 
|---|
|  | 37 | L +^IBA(354,DFN):30 I '$T S IBEXERR=1 W:$D(IBTALK)&('$D(ZTQUEUED)) !,"ENTRY LOCKED" G ADDEXQ | 
|---|
|  | 38 | A1 I '$D(^IBA(354,DFN,0)) D ADDP G ADDEXQ:$G(IBEXERR) | 
|---|
|  | 39 | ; | 
|---|
|  | 40 | N IBDGMTA,IBDGMTP,IBDGMTF | 
|---|
|  | 41 | I $D(DGMTA) S IBDGMTA=$G(DGMTA),IBDGMTP=$G(DGMTP),IBDGMTF=$G(DGMTINF) | 
|---|
|  | 42 | N X,X1,X2,Y,IBCNT,DGMTA,DGMTP,DGMTINF | 
|---|
|  | 43 | I $D(IBDGMTA) S DGMTA=$G(IBDGMTA),DGMTP=$G(IBDGMTP),DGMTINF=$G(IBDGMTF) | 
|---|
|  | 44 | S IBWHER=12,IBEXERR="",IBADDE="" | 
|---|
|  | 45 | ; | 
|---|
|  | 46 | ;  - one last quick check | 
|---|
|  | 47 | I IBDT'?7N S IBEXERR=3 G ADDEXQ | 
|---|
|  | 48 | I DUZ,$G(^VA(200,+DUZ,0))="" S IBEXERR=8 G ADDEXQ | 
|---|
|  | 49 | ; if DUZ=0, it will be considered as .5 (POSTMASTER) by the input template [IB NEW EXEMPTION] | 
|---|
|  | 50 | ; | 
|---|
|  | 51 | D BEFORE^IBARXEVT ;get prior exemption | 
|---|
|  | 52 | ; | 
|---|
|  | 53 | N IBSTAT,IBEXDA | 
|---|
|  | 54 | S IBSTAT=$P($G(^IBE(354.2,+IBEXREA,0)),"^",4) | 
|---|
|  | 55 | S IBHOW=$S('$D(IBHOW):1,IBHOW="":1,IBHOW>2:1,IBHOW<1:1,1:IBHOW) | 
|---|
|  | 56 | S IBTYPE=$S('$D(IBTYPE):1,IBTYPE="":1,1:IBTYPE) | 
|---|
|  | 57 | ;I '$D(IBACTION) S IBACTION="ADD" | 
|---|
|  | 58 | ; | 
|---|
|  | 59 | ; -- inactivate a current autoexempt of no longer autoexempt | 
|---|
|  | 60 | I $G(IBOLDAUT)?7N D INACT^IBAUTL7(IBOLDAUT) ;I '$D(ZTQUEUED),$D(IBTALK) W !,"Inactivating current non-income based exemption for patient" | 
|---|
|  | 61 | ; | 
|---|
|  | 62 | ; -- if forcing a new entry to correct problems | 
|---|
|  | 63 | I $G(IBFORCE)?7N D INACT^IBAUTL7(IBFORCE) | 
|---|
|  | 64 | ; | 
|---|
|  | 65 | ; -- check for duplicate entry | 
|---|
|  | 66 | I $G(IBOLDAUT)'?7N,$G(IBFORCE)'?7N,$$DUPL() W:'$D(ZTQUEUED)&($D(IBTALK)) !,"Exemption Attempting to Add is a duplicate, nothing added!",! G ADDEXQ | 
|---|
|  | 67 | ; | 
|---|
|  | 68 | ; -- inactivate previous active entries | 
|---|
|  | 69 | D INACT^IBAUTL7(IBDT) I $G(IBEXERR) G ADDEXQ | 
|---|
|  | 70 | ; | 
|---|
|  | 71 | ; -- if no income data from conversion set date = start date | 
|---|
|  | 72 | I $D(IBCONVER),$P($G(^IBE(354.2,+IBEXREA,0)),"^",5)=210 S IBDT=$$STDATE^IBARXEU | 
|---|
|  | 73 | ; | 
|---|
|  | 74 | ; -- add entry | 
|---|
|  | 75 | S DIC="^IBA(354.1,",DIC(0)="L",X=IBDT K DO,DD D FILE^DICN | 
|---|
|  | 76 | S (IBEXDA,DA)=+Y I Y<1 W:'$D(ZTQUEUED)&($D(IBTALK)) !,"Can't add entry to exemption file" S IBEXERR=4 G ADDEXQ | 
|---|
|  | 77 | ; | 
|---|
|  | 78 | ; -- edit new entry | 
|---|
|  | 79 | S DIE="^IBA(354.1,",DR="[IB NEW EXEMPTION]" ; use compiled template | 
|---|
|  | 80 | ; | 
|---|
|  | 81 | ;DR=".02////"_DFN_";.03////"_IBTYPE_";.04////"_IBSTAT_";.05////"_IBEXREA_";.06////"_IBHOW_";.07////"_DUZ_";.08///NOW;.1////1;.11////"_$G(IBASIG) | 
|---|
|  | 82 | ; | 
|---|
|  | 83 | D ^DIE K DIC,DIE,DA,DR | 
|---|
|  | 84 | I $D(Y) S IBEXERR=5 G ADDEXQ | 
|---|
|  | 85 | S IBADDE=IBEXREA_"^"_IBDT | 
|---|
|  | 86 | ; | 
|---|
|  | 87 | ; --if effective date is in last 365 days make current | 
|---|
|  | 88 | I IBDT>$$MINUS^IBARXEU0(DT) D CURREX^IBAUTL7(IBSTAT,IBDT) I $G(IBEXERR) G ADDEXQ | 
|---|
|  | 89 | ; | 
|---|
|  | 90 | I '$D(ZTQUEUED),$G(IBADDE),$D(IBTALK) W !!,"Medication Copayment Exemption Status Updated: ",$P(^IBE(354.2,+IBADDE,0),"^"),"   ",$$DAT1^IBOUTL($P(IBADDE,"^",2)) | 
|---|
|  | 91 | ; -- setup and call event driver | 
|---|
|  | 92 | I '$D(IBCONVER) D  ;if not from conversion do following | 
|---|
|  | 93 | .D AFTER^IBARXEVT | 
|---|
|  | 94 | .S IBEVT=$$RXST^IBARXEU(DFN,$S(IBDT<$$STDATE^IBARXEU:$$STDATE^IBARXEU,1:IBDT)) | 
|---|
|  | 95 | .D ^IBARXEVT | 
|---|
|  | 96 | .I IBSTAT D CANCEL^IBARXEU3 ;exempt patient cancel old charges | 
|---|
|  | 97 | .D ^IBARXEB ; process bulletins and alerts | 
|---|
|  | 98 | ; | 
|---|
|  | 99 | ADDEXQ ; | 
|---|
|  | 100 | L -^IBA(354,DFN) | 
|---|
|  | 101 | I $G(IBEXERR) D ^IBAERR | 
|---|
|  | 102 | K DO,DD,DIC,DIE,DA,DR,IBEVT,IBEVTP,IBEVTA,IBASIG,IBARCAN | 
|---|
|  | 103 | Q | 
|---|
|  | 104 | ; | 
|---|
|  | 105 | DUPL() ; -- see if entry is a duplicate | 
|---|
|  | 106 | N X,Y | 
|---|
|  | 107 | S X=0 | 
|---|
|  | 108 | S Y=$$LST^IBARXEU0(DFN,IBDT) | 
|---|
|  | 109 | I IBDT=+Y,+IBEXREA=+$P(Y,"^",5),IBTYPE=$P(Y,"^",3) S X=1 | 
|---|
|  | 110 | Q X | 
|---|