| 1 | EASPTRN1 ;ALB/EJG,GN - GENERATE EAS SUBPROCESSES ; 11/09/2004
 | 
|---|
| 2 |  ;;1.0;ENROLLMENT APPLICATION SYSTEM;**30,33,47,42,59**; 21-OCT-94
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 |  ; Cloned from IVMPTRN1
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  ;EAS*1*47 - break up Z09's by Income year, via new "ATR" xref
 | 
|---|
| 8 |  ;EAS*1*42 - add RXCP testing to Expired tag
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 | DELMT ; send delete mt transaction if pt no longer meets IVM criteria
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 |  ; Input - DFN
 | 
|---|
| 14 |  ;         IVMMTDT - date of means test
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  N I,IVMIY,X
 | 
|---|
| 17 |  S IVMIY=$$LYR^DGMTSCU1(IVMMTDT)
 | 
|---|
| 18 |  F I=1:1:5,8:1:14 S $P(X,HLFS,I)=HLQ
 | 
|---|
| 19 |  S ^TMP("HLS",$J,HLSDT,IVMCT)="ZMT"_HLFS_X
 | 
|---|
| 20 |  D CLOSE(IVMIY,DFN,2,3) ; set flag to stop future transmissions
 | 
|---|
| 21 |  Q
 | 
|---|
| 22 |  ;
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 | CLOSE(IVMIY,DFN,IVMCS,IVMCR) ; Close IVM case record for a patient
 | 
|---|
| 25 |  ; Input:    DFN  --  Pointer to the patient in file #2
 | 
|---|
| 26 |  ;         IVMIY  --  Income year of the closed case
 | 
|---|
| 27 |  ;         IVMCS  --  Closure source [1=IVM | 2=DHCP]
 | 
|---|
| 28 |  ;         IVMCR  --  Pointer to the closure reason in file #301.93
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 |  N DA,DIE,DR,X,Y,EVENTS,STATUS,EAEVENT,IVEVENT
 | 
|---|
| 31 |  I '$G(IVMIY)!'$G(DFN)!'$G(IVMCS)!'$G(IVMCR) G CLOSEQ
 | 
|---|
| 32 |  S IVMDELMT=1 ; flag indicates deletion
 | 
|---|
| 33 |  S DA=$O(^IVM(301.5,"APT",+DFN,+IVMIY,0))
 | 
|---|
| 34 |  I $G(^IVM(301.5,+DA,0))']"" G CLOSEQ
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 |  ;don't want closing a case to stop transmission of an enrollment event
 | 
|---|
| 37 |  S STATUS=1
 | 
|---|
| 38 |  I ($$STATUS^IVMPLOG(+DA,.EVENTS)=0),EVENTS("ENROLL")=1 S STATUS=0
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 |  ; If previous years event make sure Enrollment Event does not get 
 | 
|---|
| 41 |  ; updated, and the IVM Event does
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 |  S EAEVENT=1,IVEVENT=2
 | 
|---|
| 44 |  I $G(EXPIRED)=1 S EAEVENT=2,STATUS=0,IVEVENT=1
 | 
|---|
| 45 |  I $G(EXPIRED)=0 S EAEVENT=1,STATUS=0
 | 
|---|
| 46 |  D NOW^%DTC S DR=".03////"_STATUS_";.04////1;1.01////"_IVMCR_";1.02////"_IVMCS_";1.03////"_%_";30.01////"_IVEVENT_";30.02////2;30.03////"_$G(EAEVENT)
 | 
|---|
| 47 |  S DIE="^IVM(301.5," D ^DIE
 | 
|---|
| 48 | CLOSEQ Q
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 | PSEUDO ; strip P from pseudo SSNs before transmitting to IVM
 | 
|---|
| 52 |  ;
 | 
|---|
| 53 |  N X
 | 
|---|
| 54 |  S X=IVMPID_$G(IVMPID(1))
 | 
|---|
| 55 |  S $P(X,HLFS,20)=$E($P(X,HLFS,20),1,9) ; remove P
 | 
|---|
| 56 |  K IVMPID S IVMPID=$E(X,1,245)
 | 
|---|
| 57 |  I $L(X)>245 S IVMPID(1)=$E(X,246,999)
 | 
|---|
| 58 |  Q
 | 
|---|
| 59 |  ;
 | 
|---|
| 60 |  ;Check if EDB Z06 in Annual Means Test file #408.31
 | 
|---|
| 61 |  ; 'Z06 MT via Edb' will be stored in Comments if EDB Z06 Means Test
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 | Z06MT(IVMMTIEN,Z06COM) N FLAG,LINE,COMMENT
 | 
|---|
| 64 |  I '$G(IVMMTIEN) Q 0
 | 
|---|
| 65 |  I $G(Z06COM)="" S Z06COM="Z06 MT via Edb"
 | 
|---|
| 66 |  S (FLAG,LINE)=0
 | 
|---|
| 67 |  F  S LINE=$O(^DGMT(408.31,IVMMTIEN,"C",LINE)) Q:'LINE!(FLAG)  D
 | 
|---|
| 68 |  . S COMMENT=$G(^DGMT(408.31,IVMMTIEN,"C",LINE,0))
 | 
|---|
| 69 |  . I COMMENT=Z06COM S FLAG=1 Q
 | 
|---|
| 70 |  Q FLAG
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 |  ;Retrieve Means Test information from incoming HL7 message.  
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 | CHECKMT(DFN) N SOURCE,IVMLAST,IVMMTDT,IVMMTIEN
 | 
|---|
| 75 |  I IVMTYPE'=1 Q    ;Only want MT = 1
 | 
|---|
| 76 |  S SOURCE=$P($G(^TMP($J,"IVMCM","ZMT1")),HLFS,22)
 | 
|---|
| 77 |  S IVMMTDT=$$FMDATE^HLFNC($P($G(^TMP($J,"IVMCM","ZMT1")),HLFS,2))
 | 
|---|
| 78 |  S IVMLAST=$$LST^DGMTU(DFN,$E(IVMMTDT,1,3)_1231,1)
 | 
|---|
| 79 |  S IVMMTIEN=+IVMLAST
 | 
|---|
| 80 |  Q $$Z06MT(IVMMTIEN)
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 |  ;Based upon DFN and MT Date find primary MT
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 | VERZ06(DFN) N CMT,CMTDATE,MTIEN,PRIM
 | 
|---|
| 85 |  S CMT=$$LST^DGMTU(DFN)
 | 
|---|
| 86 |  S MTIEN=+CMT,CMTDATE=$P(CMT,"^",2)
 | 
|---|
| 87 |  I 'MTIEN Q 0                             ;No Means Test found
 | 
|---|
| 88 |  S PRIM=$G(^DGMT(408.31,MTIEN,"PRIM"))
 | 
|---|
| 89 |  I PRIM,$$Z06MT(MTIEN) Q 1
 | 
|---|
| 90 |  Q 0
 | 
|---|
| 91 |  ;
 | 
|---|
| 92 |  ;Check for expired MT or CT                                 ;EAS*1*42
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 | EXPIRED(DFN,DGMTDT) N CMT,PMT,CCT,PCT
 | 
|---|
| 95 |  S (CMT,PMT,CCT,PCT)=""
 | 
|---|
| 96 |  S:DGMTYPT=2 PCT=$$LST^DGMTU(DFN,DGMTDT,2)     ;Retrieve previous CT
 | 
|---|
| 97 |  S PMT=$$LST^DGMTU(DFN,DGMTDT,1)               ;Retrieve previous MT
 | 
|---|
| 98 |  I PCT="",PMT="" Q 0
 | 
|---|
| 99 |  S:DGMTYPT=2 CCT=$$LST^DGMTU(DFN,DT,2)         ;Retrieve current CT
 | 
|---|
| 100 |  S CMT=$$LST^DGMTU(DFN,DT,1)                   ;Retrieve current MT
 | 
|---|
| 101 |  ;check for any expired test
 | 
|---|
| 102 |  I DGMTYPT=2,$P(PCT,"^",2)<$P(CCT,"^",2) Q 1   ;Prev Yr CT is Expired
 | 
|---|
| 103 |  I $P(PMT,"^",2)<$P(CMT,"^",2) Q 1             ;Prev Yr MT is Expired
 | 
|---|
| 104 |  Q 0
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 |  ;Determine if Z09 should be sent to EDB or HEC legacy       ;EAS*1*47
 | 
|---|
| 107 |  ; Input:  DFN
 | 
|---|
| 108 |  ; Output: Where to Send Z09
 | 
|---|
| 109 |  ;          0 - HEC Legacy
 | 
|---|
| 110 |  ;          1 - EDB
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 | WHERETO(ICYR,DFN) N COM,DATE,FOUND,FRMDATE,IEN,MIEN,ONODE,MTD,TYPE,Z06COM
 | 
|---|
| 113 |  S FOUND=0
 | 
|---|
| 114 |  S Z06COM="Z06 MT via Edb"
 | 
|---|
| 115 |  S IEN=$O(^IVM(301.61,"ATR",ICYR,DFN,0)) I IEN="" Q FOUND
 | 
|---|
| 116 |  S FRMDATE=$P($G(^IVM(301.61,IEN,0)),"^",5) I FRMDATE="" Q FOUND
 | 
|---|
| 117 |  S TYPE=""
 | 
|---|
| 118 |  F  S TYPE=$O(^DGMT(408.31,"AID",TYPE)) Q:TYPE=""!(FOUND)  D
 | 
|---|
| 119 |  .S MTD=""
 | 
|---|
| 120 |  .F  S MTD=$O(^DGMT(408.31,"AID",TYPE,DFN,MTD)) Q:MTD=""!(FOUND)  D
 | 
|---|
| 121 |  ..S MIEN=""
 | 
|---|
| 122 |  ..F  S MIEN=$O(^DGMT(408.31,"AID",TYPE,DFN,MTD,MIEN)) Q:MIEN=""!(FOUND)  D
 | 
|---|
| 123 |  ...S ONODE=$G(^DGMT(408.31,MIEN,0))
 | 
|---|
| 124 |  ...S DATE=$P(ONODE,"^",25)                     ;Use IVM Verified Date
 | 
|---|
| 125 |  ...I DATE="" S DATE=$P(ONODE,"^",7)            ;Use Completed Date
 | 
|---|
| 126 |  ...S COM=$G(^DGMT(408.31,MIEN,"C",1,0))        ;Comment
 | 
|---|
| 127 |  ...I DATE'="",COM[Z06COM,FRMDATE>(DATE-1),$G(^DGMT(408.31,MIEN,"PRIM")) S FOUND=1
 | 
|---|
| 128 |  Q FOUND
 | 
|---|