| 1 | IBARXEL ;ALB/CPM - RX COPAY EXEMPTION INCOME TEST REMINDERS ;22-MAR-95
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**34,139,206,217**;21-MAR-94
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | EN ; Entry point for the generation of income test reminder letters.
 | 
|---|
| 6 |  ; Invoked by the nightly IB Background job (routine IBAMTC).
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  ; - check the job parameters
 | 
|---|
| 9 |  S IBLET=$O(^IBE(354.6,"B","IB INCOME TEST REMINDER",0)) I 'IBLET G ENQ
 | 
|---|
| 10 |  S IBLET0=$G(^IBE(354.6,IBLET,0))
 | 
|---|
| 11 |  S IBDEV=$P(IBLET0,"^",5) I IBDEV="" G ENQ
 | 
|---|
| 12 |  S IBREPR=$P(IBLET0,"^",7)
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 |  ; - should the job run tonight?
 | 
|---|
| 15 |  D NOW^%DTC S IBDAT=%
 | 
|---|
| 16 |  S IBDAY=$$DOW^XLFDT(IBDAT\1,1)
 | 
|---|
| 17 |  I $E(IBDAT,8,17)>.17 S IBDAY=$S(IBDAY=6:0,1:IBDAY+1)
 | 
|---|
| 18 |  I $P(IBLET0,"^",6)'[IBDAY G ENQ
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 |  ; - who needs a letter?
 | 
|---|
| 21 |  S IBSTART=$$FMADD^XLFDT(IBDAT\1,-366)
 | 
|---|
| 22 |  S IBEND=$$FMADD^XLFDT(IBDAT\1,-305)
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 |  K ^TMP("IBEX",$J)
 | 
|---|
| 25 |  S IBD=IBSTART F  S IBD=$O(^IBA(354.1,"B",IBD)) Q:'IBD!(IBD>IBEND)  D
 | 
|---|
| 26 |  .S IBEX=0 F  S IBEX=$O(^IBA(354.1,"B",IBD,IBEX)) Q:'IBEX  D
 | 
|---|
| 27 |  ..S IBEXD=$G(^IBA(354.1,IBEX,0)) Q:'IBEXD
 | 
|---|
| 28 |  ..;
 | 
|---|
| 29 |  ..; - don't reprint letter unless requested
 | 
|---|
| 30 |  ..S IBLASTPR=$P(IBEXD,"^",16)
 | 
|---|
| 31 |  ..I IBREPR,IBLASTPR,IBLASTPR'=IBREPR Q
 | 
|---|
| 32 |  ..I 'IBREPR,IBLASTPR Q
 | 
|---|
| 33 |  ..;
 | 
|---|
| 34 |  ..Q:$P(IBEXD,"^",3)'=1  ;           not a copay exemption
 | 
|---|
| 35 |  ..Q:'$P(IBEXD,"^",10)  ;            exemption is not active
 | 
|---|
| 36 |  ..;
 | 
|---|
| 37 |  ..S IBEXREA=$$ACODE^IBARXEU0(IBEXD)
 | 
|---|
| 38 |  ..I IBEXREA'=110,IBEXREA'=120 Q  ;  exemption is not based on income
 | 
|---|
| 39 |  ..;
 | 
|---|
| 40 |  ..S DFN=+$P(IBEXD,"^",2)
 | 
|---|
| 41 |  ..Q:$$BIL^DGMTUB(DFN,IBD)  ; vet is cat c or pend. adj. & agreed to pay deductible
 | 
|---|
| 42 |  ..I $P(IBLET0,"^",8),$$DOM(DFN) Q  ;  vet is in a dom
 | 
|---|
| 43 |  ..Q:$G(^DPT(DFN,.35))  ;              vet is deceased
 | 
|---|
| 44 |  ..I +IBEXD'=$P($G(^IBA(354,DFN,0)),"^",3) Q  ;  exemption not current
 | 
|---|
| 45 |  ..Q:$D(^TMP("IBEX",$J,"V",DFN))  ;    vet already getting letter
 | 
|---|
| 46 |  ..;
 | 
|---|
| 47 |  ..; - sort letters by zip code
 | 
|---|
| 48 |  ..K VA,VAERR,VAPA D ADD^VADPT
 | 
|---|
| 49 |  ..S IBZIP=$P(VAPA($S($$CONFADD():18,1:11)),"^",2) S:IBZIP="" IBZIP="99999-9999"
 | 
|---|
| 50 |  ..S:'$P(IBZIP,"-",2) IBZIP=$E(IBZIP,1,5)_"-0000"
 | 
|---|
| 51 |  ..S ^TMP("IBEX",$J,"V",DFN)=""
 | 
|---|
| 52 |  ..S ^TMP("IBEX",$J,"L",IBZIP,IBEX)=+IBEXD_"^"_+$P(IBEXD,"^",4)_"^"_DFN
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 |  ; - open a print device if necessary
 | 
|---|
| 55 |  I '$D(^TMP("IBEX",$J,"L")) G ENQ
 | 
|---|
| 56 |  S IOP=IBDEV D ^%ZIS I POP G ENQ
 | 
|---|
| 57 |  U IO
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 |  ; - print the letters
 | 
|---|
| 60 |  S IBSCR="" F  S IBSCR=$O(^TMP("IBEX",$J,"L",IBSCR)) Q:IBSCR=""  D
 | 
|---|
| 61 |  .S IBEX=0 F  S IBEX=$O(^TMP("IBEX",$J,"L",IBSCR,IBEX)) Q:'IBEX  D PRINT
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 | ENQ I $G(IBREPR),IBLET S DA=IBLET,DIE="^IBE(354.6,",DR=".07////@" D ^DIE K DA,DR,DIE
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 |  D ^%ZISC
 | 
|---|
| 66 |  K ^TMP("IBEX",$J),DFN,VAPA,VA,VAERR,X
 | 
|---|
| 67 |  K IBD,IBEX,IBEXD,IBEXREA,IBDAT,IBDAY,IBDEV,IBZIP,IBLET0,IBREPR,IBQUIT
 | 
|---|
| 68 |  K IBEND,IBLET,IBSTART,IBSCR,IBEXPD,IBDATA,IBNAM,IBALIN,IBLASTPR
 | 
|---|
| 69 |  Q
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 | PRINT ; Print a reminder letter.
 | 
|---|
| 73 |  ;  Required variable input:
 | 
|---|
| 74 |  ;      IBEX  --  Pointer to exemption in file #354.1
 | 
|---|
| 75 |  ;     IBLET  --  Pointer to the reminder letter in file #354.6
 | 
|---|
| 76 |  ;
 | 
|---|
| 77 |  ; - set letter variables
 | 
|---|
| 78 |  S IBEXD=$G(^IBA(354.1,+IBEX,0))
 | 
|---|
| 79 |  S IBEXPD=$$DATE($$PLUS^IBARXEU0(+IBEXD))
 | 
|---|
| 80 |  ;S IBEXPD=$$DATE($$FMADD^XLFDT(+IBEXD,365))
 | 
|---|
| 81 |  S DFN=+$P(IBEXD,"^",2),IBQUIT=0
 | 
|---|
| 82 |  S IBDATA=$$PT^IBEFUNC(DFN),IBNAM=$P(IBDATA,"^")
 | 
|---|
| 83 |  S IBALIN=$P($G(^IBE(354.6,IBLET,0)),"^",4)
 | 
|---|
| 84 |  I IBALIN<10!(IBALIN>25) S IBALIN=15
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 |  ; - print letter
 | 
|---|
| 87 |  D ONE^IBARXEPL
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 |  ; - update the exemption
 | 
|---|
| 90 |  S DA=IBEX,DIE="^IBA(354.1,",DR=".16////"_DT D ^DIE K DA,DR,DIE
 | 
|---|
| 91 |  K IBEXD,TAB,IBCNTL,IB,IBCNT,IBX,VAPA,VA,VAERR
 | 
|---|
| 92 |  Q
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 |  ;
 | 
|---|
| 95 | DATE(X) ; Format the exemption expiration date.
 | 
|---|
| 96 |  N A S A="January^February^March^April^May^June^July^August^September^October^November^December"
 | 
|---|
| 97 |  Q $P(A,"^",+$E(X,4,5))_" "_+$E(X,6,7)_", "_(1700+$E(X,1,3))
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 | DOM(DFN) ; Is the veteran in a domiciliary?
 | 
|---|
| 100 |  ;  Input:  DFN  -  Pointer to the patient in file #2
 | 
|---|
| 101 |  ; Output:    0  -  Vet is not in a domiciliary
 | 
|---|
| 102 |  ;            1  -  Vet is in a domiciliary
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 |  N VAIN,VA,VAERR
 | 
|---|
| 105 |  D INP^VADPT
 | 
|---|
| 106 |  Q $P($G(^DIC(42,+$G(VAIN(4)),0)),"^",3)="D"
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 | CONFADD() ; Determine, does the patient have a Confidential Address.
 | 
|---|
| 109 |  ; Input: VAPA() local array (by ADD^VADPT)
 | 
|---|
| 110 |  I '$G(VAPA(12)) Q 0  ; The Conf Address is not active
 | 
|---|
| 111 |  I $P($G(VAPA(22,3)),U,3)'="Y" Q 0  ; The Conf Address is not valid for billing-related correspondence
 | 
|---|
| 112 |  Q 1
 | 
|---|