| 1 | IVMPLOG ;ALB/CJM,RTK - API for IVM PATIENT file; ; 12/6/00 5:28pm
 | 
|---|
| 2 |  ;;2.0;INCOME VERIFICATION MATCH;**9,19,12,21,17,28,36,40,49,68**; 21-OCT-94
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | FIND(DFN,YEAR) ;
 | 
|---|
| 7 |  ;Description: Looks up an entry in the IVM PATIENT file (#301.5).
 | 
|---|
| 8 |  ;Input:
 | 
|---|
| 9 |  ;  DFN - IEN in the PATIENT file.
 | 
|---|
| 10 |  ;  YEAR - value for the INCOME YEAR field, a year in FM format.
 | 
|---|
| 11 |  ;Output:
 | 
|---|
| 12 |  ;  Function Value - returns IEN of record if found, NULL otherwise.
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 |  Q:('$G(DFN)!'$G(YEAR)) ""
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  N YR
 | 
|---|
| 17 |  S YR=$E(YEAR,1,3)_"0000"
 | 
|---|
| 18 |  Q $O(^IVM(301.5,"APT",DFN,YR,0))
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 | LOCK(IEN) ;
 | 
|---|
| 21 |  ;Description: Locks a record in the IVM PATIENT file.
 | 
|---|
| 22 |  ;Input:
 | 
|---|
| 23 |  ;  IEN - ien of record  in IVM PATIENT file.
 | 
|---|
| 24 |  ;Output:
 | 
|---|
| 25 |  ;  Function Value - 1 if successful, 0 otherwise.
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  I $G(IEN) L +^IVM(301.5,IEN):3
 | 
|---|
| 28 |  Q $T
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 | UNLOCK(IEN) ;
 | 
|---|
| 31 |  ;Description: Unlocks a record in the IVM PATIENT file.
 | 
|---|
| 32 |  ;Input:
 | 
|---|
| 33 |  ;  IEN - ien of record in the IVM PATIENT file.
 | 
|---|
| 34 |  ;Output: None
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 |  I $G(IEN) L -^IVM(301.5,IEN)
 | 
|---|
| 37 |  Q
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 | STATUS(IEN,EVENTS) ;
 | 
|---|
| 40 |  ;Description: Returns the value of the TRANSMISSION STATUS field of the 
 | 
|---|
| 41 |  ;  IVM PATIENT file.
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 |  ;Input:
 | 
|---|
| 44 |  ;  IEN - internal entry number of a record in the IVM PATIENT file
 | 
|---|
| 45 |  ;Output:
 | 
|---|
| 46 |  ;  Function Value -returns the value of the TRANSMISSION STATUS field
 | 
|---|
| 47 |  ;  EVENTS - optional, pass by reference.  Will return the types of events logged.
 | 
|---|
| 48 |  ;  EVENTS("IVM") - value of IVM EVENT field
 | 
|---|
| 49 |  ;  EVENTS("DCD") - value of DCD EVENT field
 | 
|---|
| 50 |  ;  EVENTS("ENROLL") - value of ENROLLMENT EVENT field
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 |  ;
 | 
|---|
| 53 |  S EVENTS("IVM")=""
 | 
|---|
| 54 |  S EVENTS("DCD")=""
 | 
|---|
| 55 |  S EVENTS("ENROLL")=""
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 |  Q:'$G(IEN) ""
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 |  N NODE
 | 
|---|
| 60 |  S NODE=$G(^IVM(301.5,IEN,"E"))
 | 
|---|
| 61 |  S EVENTS("IVM")=$P(NODE,"^")
 | 
|---|
| 62 |  S EVENTS("DCD")=$P(NODE,"^",2)
 | 
|---|
| 63 |  S EVENTS("ENROLL")=$P(NODE,"^",3)
 | 
|---|
| 64 |  Q $P($G(^IVM(301.5,IEN,0)),"^",3)
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 | SETSTAT(IEN,EVENTS,ERRMSG) ;
 | 
|---|
| 67 |  ;Description: Sets the value of the TRANSMISSION STATUS field of the
 | 
|---|
| 68 |  ;  IVM PATIENT file for a particular record to 0, meaning transmission
 | 
|---|
| 69 |  ;  is requested.  If the case is closed, depending on the event types,
 | 
|---|
| 70 |  ;  the TRANSMISSION STATUS may not be set.
 | 
|---|
| 71 |  ;Input:
 | 
|---|
| 72 |  ;  IEN - internal entry number of a record in the IVM PATIENT file.
 | 
|---|
| 73 |  ;  EVENTS () - an array of reasons for transmission, pass by reference.
 | 
|---|
| 74 |  ;  EVENTS("IVM") = 1 if transmission due to IVM criteria, 0 otherwise
 | 
|---|
| 75 |  ;  EVENTS("DCD")=1 if transmission due to DCD criteria, 0 otherwise
 | 
|---|
| 76 |  ;  EVENTS("ENROLL")=1 if transmission due to enrollment criteria, 0 otherwise
 | 
|---|
| 77 |  ;Output:  
 | 
|---|
| 78 |  ;  Function Value - 1 on success, 0 on failure.
 | 
|---|
| 79 |  ;  ERRMSG - optional, pass by reference if needed, returns message on failure
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 |  N DATA,CLOSED,SUCCESS
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 |  I ($G(DGENUPLD)="ENROLLMENT/ELIGIBILITY UPLOAD IN PROGRESS") S ERRMSG="ENROLLMENT UPLOAD IN PROGRESS" Q 0
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 |  I '$$LOCK($G(IEN)) S ERRMSG="UNABLE TO OBTAIN LOCK ON IVM PATIENT, TRY AGAIN LATTER" Q 0
 | 
|---|
| 86 |  S CLOSED=$$CLOSED(IEN)
 | 
|---|
| 87 |  S SUCCESS=0
 | 
|---|
| 88 |  I ('CLOSED)!(1=$G(EVENTS("ENROLL"))) D
 | 
|---|
| 89 |  .S DATA(.03)=0
 | 
|---|
| 90 |  .I 'CLOSED D
 | 
|---|
| 91 |  ..I $G(EVENTS("IVM"))=1 S DATA(30.01)=1
 | 
|---|
| 92 |  ..I $G(EVENTS("DCD"))=1 S DATA(30.02)=1
 | 
|---|
| 93 |  .I $G(EVENTS("ENROLL"))=1 S DATA(30.03)=1
 | 
|---|
| 94 |  .S SUCCESS=$$UPD^DGENDBS(301.5,IEN,.DATA,.ERRMSG)
 | 
|---|
| 95 |  E  S SUCCESS=0,ERRMSG="CASE IS CLOSED"
 | 
|---|
| 96 |  D UNLOCK(IEN)
 | 
|---|
| 97 |  Q SUCCESS
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 | CLEAR(IEN,WHEN) ;
 | 
|---|
| 100 |  ; Description: Sets the value of the TRANSMISSION STATUS field of the
 | 
|---|
| 101 |  ;IVM PATIENT file for a particular record to 1, meaning transmission
 | 
|---|
| 102 |  ;already occurred.
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 |  ;Input:
 | 
|---|
| 105 |  ;  IEN - internal entry number of record in IVM PATIENT file
 | 
|---|
| 106 |  ;  WHEN - optional, date/time in FM format that transmission occurred
 | 
|---|
| 107 |  ;Output:
 | 
|---|
| 108 |  ;  Function Value - 1 on success, 0 on failure
 | 
|---|
| 109 |  ; 
 | 
|---|
| 110 |  N SUCCESS,PLOG,DATA
 | 
|---|
| 111 |  Q:'$$LOCK($G(IEN)) 0
 | 
|---|
| 112 |  Q:'$$GET(IEN,.PLOG) 0
 | 
|---|
| 113 |  S DATA(.03)=1
 | 
|---|
| 114 |  I PLOG("EVENTS","IVM")=1 S DATA(30.01)=2
 | 
|---|
| 115 |  I PLOG("EVENTS","DCD")=1 S DATA(30.02)=2
 | 
|---|
| 116 |  I PLOG("EVENTS","ENROLL")=1 S DATA(30.03)=2
 | 
|---|
| 117 |  I $G(WHEN),((PLOG("FIRST")'>0)!(WHEN<PLOG("FIRST"))) S DATA(.05)=WHEN
 | 
|---|
| 118 |  S SUCCESS=$$UPD^DGENDBS(301.5,IEN,.DATA)
 | 
|---|
| 119 |  D UNLOCK(IEN)
 | 
|---|
| 120 |  Q SUCCESS
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 | GET(IEN,PLOG) ;
 | 
|---|
| 123 |  ;Description: Used to obtain a record in the IVM PATIENT file.  The
 | 
|---|
| 124 |  ;values are returned in the PLOG() array.
 | 
|---|
| 125 |  ;Input:
 | 
|---|
| 126 |  ;  IEN - internal entry number of a record in the IVM PATIENT file.
 | 
|---|
| 127 |  ;Output:
 | 
|---|
| 128 |  ;  Function Value - 1 on success, 0 on failure.
 | 
|---|
| 129 |  ;  PLOG() array, pass by reference.  Subscripts are
 | 
|---|
| 130 |  ;  "DFN" - value of the PATIENT field (#.01) which is the ien of record in the PATIENT file.
 | 
|---|
| 131 |  ;  "YEAR" -  value of the INCOME YEAR field (#.02)
 | 
|---|
| 132 |  ;  "STATUS" - value from the TRANSMISSIONS STATUS field (#.03)
 | 
|---|
| 133 |  ;  "FIRST" -  value from the QUERY TRANSMISSION DATE/TIME field (#.05)
 | 
|---|
| 134 |  ;  "CLOSE" - value from the STOP FLAG field (#.04)
 | 
|---|
| 135 |  ;  "CLOSE","REASON" -  value from the CLOSURE REASON field (#301.93)
 | 
|---|
| 136 |  ;  "CLOSE","SOURCE" - value of the CLOSURE SOURCE  field (#1.02)
 | 
|---|
| 137 |  ;  "CLOSE","TIME" - value of the CLOSURE DATE/TIME field (#1.03)
 | 
|---|
| 138 |  ;  "EVENTS","IVM" - value of the IVM EVENT field
 | 
|---|
| 139 |  ;  "EVENTS","DCD" - value of the DCD EVENT field
 | 
|---|
| 140 |  ;  "EVENTS","ENROLL" - value of the ENROLLMENT EVENT field
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 |  N NODE
 | 
|---|
| 143 |  Q:'$G(IEN) 0
 | 
|---|
| 144 |  S NODE=$G(^IVM(301.5,IEN,0))
 | 
|---|
| 145 |  Q:(NODE="") 0
 | 
|---|
| 146 |  S PLOG("DFN")=$P(NODE,"^")
 | 
|---|
| 147 |  S PLOG("YEAR")=$P(NODE,"^",2)
 | 
|---|
| 148 |  S PLOG("STATUS")=$P(NODE,"^",3)
 | 
|---|
| 149 |  S PLOG("FIRST")=$P(NODE,"^",5)
 | 
|---|
| 150 |  S PLOG("CLOSE")=$P(NODE,"^",4)
 | 
|---|
| 151 |  S NODE=$G(^IVM(301.5,IEN,1))
 | 
|---|
| 152 |  S PLOG("CLOSE","REASON")=$P(NODE,"^")
 | 
|---|
| 153 |  S PLOG("CLOSE","SOURCE")=$P(NODE,"^",2)
 | 
|---|
| 154 |  S PLOG("CLOSE","TIME")=$P(NODE,"^",3)
 | 
|---|
| 155 |  S NODE=$G(^IVM(301.5,IEN,"E"))
 | 
|---|
| 156 |  S PLOG("EVENTS","IVM")=$P(NODE,"^")
 | 
|---|
| 157 |  S PLOG("EVENTS","DCD")=$P(NODE,"^",2)
 | 
|---|
| 158 |  S PLOG("EVENTS","ENROLL")=$P(NODE,"^",3)
 | 
|---|
| 159 |  Q 1
 | 
|---|
| 160 |  ;
 | 
|---|
| 161 | CLOSED(IEN) ;
 | 
|---|
| 162 |  ;Description: Returns the value of the STOP FLAG field of the
 | 
|---|
| 163 |  ;IVM PATIENT file for a particular record, which indicates whether
 | 
|---|
| 164 |  ;transmissions for certain events (but not enrollment events) should
 | 
|---|
| 165 |  ;take place.
 | 
|---|
| 166 |  ;
 | 
|---|
| 167 |  ;Input:
 | 
|---|
| 168 |  ;  IEN - internal entry number of a record in the IVM PATIENT file.
 | 
|---|
| 169 |  ;Output:
 | 
|---|
| 170 |  ;  Function Value - The value of the STOP FLAG field.
 | 
|---|
| 171 |  ;
 | 
|---|
| 172 |  Q:'$G(IEN) ""
 | 
|---|
| 173 |  Q $P($G(^IVM(301.5,IEN,0)),"^",4)
 | 
|---|
| 174 |  ;
 | 
|---|
| 175 | LOG(DFN,YEAR,EVENTS) ;
 | 
|---|
| 176 |  ;Description: Used to queue a patient for the nightly full transmission
 | 
|---|
| 177 |  ;for a particular income year. If EVENTS is not passed, an entry in the 
 | 
|---|
| 178 |  ;IVM PATIENT file will be created if it does not already exist, but
 | 
|---|
| 179 |  ;the flag for transmission will not be set.
 | 
|---|
| 180 |  ;
 | 
|---|
| 181 |  ;Input:
 | 
|---|
| 182 |  ;  DFN - ien of record in the PATIENT file.
 | 
|---|
| 183 |  ;  YEAR -  income year in FM format.  This is the year that is to be
 | 
|---|
| 184 |  ;  used when creating the full transmission message.
 | 
|---|
| 185 |  ;  EVENTS () - an array of reasons for transmission, pass by reference.
 | 
|---|
| 186 |  ;    EVENTS("IVM") = 1 if transmission due to IVM criteria, 0 otherwise
 | 
|---|
| 187 |  ;    EVENTS(" "DCD")=1 if transmission due to DCD criteria, 0 otherwise
 | 
|---|
| 188 |  ;    EVENTS("ENROLL")=1 if transmission due to enrollment criteria, 0 otherwise
 | 
|---|
| 189 |  ;Output:
 | 
|---|
| 190 |  ;  Function Value - internal entry number of the IVM PATIENT file record, or NULL if record could not be found or created.
 | 
|---|
| 191 |  ;
 | 
|---|
| 192 |  N IEN
 | 
|---|
| 193 |  ;
 | 
|---|
| 194 |  ;if the eligibility/enrollment upload is in progess, do nothing
 | 
|---|
| 195 |  Q:($G(DGENUPLD)="ENROLLMENT/ELIGIBILITY UPLOAD IN PROGRESS") ""
 | 
|---|
| 196 |  ;
 | 
|---|
| 197 |  ;to be compatable with current software - in some places,
 | 
|---|
| 198 |  ;YEAR passed is just 3 digits
 | 
|---|
| 199 |  S:YEAR YEAR=$E(YEAR,1,3)_"0000"
 | 
|---|
| 200 |  ;
 | 
|---|
| 201 |  Q:'$$TESTVAL^DGENDBS(301.5,.01,DFN) ""
 | 
|---|
| 202 |  Q:'$$TESTVAL^DGENDBS(301.5,.02,YEAR) ""
 | 
|---|
| 203 |  ;
 | 
|---|
| 204 |  ; check for an existing record in 301.5 for this income year...
 | 
|---|
| 205 |  S IEN=$$FIND(DFN,YEAR)
 | 
|---|
| 206 |  I 'IEN D
 | 
|---|
| 207 |  .;need to create a new record
 | 
|---|
| 208 |  .N DATA
 | 
|---|
| 209 |  .L +^IVM(301.5,0):3
 | 
|---|
| 210 |  .Q:'$T
 | 
|---|
| 211 |  .S IEN=$$FIND(DFN,YEAR)
 | 
|---|
| 212 |  .I IEN L -^IVM(301.5,0) Q
 | 
|---|
| 213 |  .S DATA(.01)=DFN,DATA(.02)=YEAR,DATA(.04)=1,DATA(1.01)=5,DATA(1.02)=2,DATA(1.03)=$$NOW^XLFDT
 | 
|---|
| 214 |  .S IEN=$$ADD^DGENDBS(301.5,,.DATA)
 | 
|---|
| 215 |  .L -^IVM(301.5,0)
 | 
|---|
| 216 |  I IEN,$D(EVENTS),$$SETSTAT(IEN,.EVENTS)
 | 
|---|
| 217 |  Q IEN
 | 
|---|
| 218 |  ;
 | 
|---|
| 219 | DELETE(DFN,TESTDATE,MT,RX,HARDSHIP,LTC) ;
 | 
|---|
| 220 |  ;Description: Used to notify HEC that deletion of a MT,RX Copay test,
 | 
|---|
| 221 |  ;LTC copay exemption test or hardship has occurred
 | 
|---|
| 222 |  ;
 | 
|---|
| 223 |  ;Input:
 | 
|---|
| 224 |  ;  DFN - ien of record in the PATIENT file.
 | 
|---|
| 225 |  ;  TESTDATE - date of test
 | 
|---|
| 226 |  ;  MT - if $D(MT),MT then a MT was deleted
 | 
|---|
| 227 |  ;  RX - if $D(RX),RX then a RX copay test was deleted
 | 
|---|
| 228 |  ;  HARDSHIP - if $D(HARDSHIP),HARDSHIP then a hardship was deleted
 | 
|---|
| 229 |  ;  LTC - if $G(LTC) then a LTC copay exemption test was deleted
 | 
|---|
| 230 |  ;Output: none
 | 
|---|
| 231 |  ;
 | 
|---|
| 232 |  N YEAR,IEN,DATA
 | 
|---|
| 233 |  ;
 | 
|---|
| 234 |  S YEAR=($E(TESTDATE,1,3)-1)_"0000"
 | 
|---|
| 235 |  ;
 | 
|---|
| 236 |  ;
 | 
|---|
| 237 |  S IEN=$$FIND(DFN,YEAR)
 | 
|---|
| 238 |  Q:'IEN
 | 
|---|
| 239 |  I $D(HARDSHIP),HARDSHIP S DATA(.1)=TESTDATE
 | 
|---|
| 240 |  I $D(MT),MT S DATA(.08)=TESTDATE
 | 
|---|
| 241 |  I $D(RX),RX S DATA(.09)=TESTDATE
 | 
|---|
| 242 |  I $G(LTC) S DATA(.11)=TESTDATE
 | 
|---|
| 243 |  I $$UPD^DGENDBS(301.5,IEN,.DATA)
 | 
|---|
| 244 |  Q
 | 
|---|
| 245 |  ;
 | 
|---|
| 246 | EVENT(DFN) ;
 | 
|---|
| 247 |  ;Description: Called in response to enrollment events. Determines
 | 
|---|
| 248 |  ;whether for this patient transmission is appropriate, and if so the
 | 
|---|
| 249 |  ;patient is logged for transmission.
 | 
|---|
| 250 |  ;
 | 
|---|
| 251 |  ;Input: DFN
 | 
|---|
| 252 |  ;Output: none
 | 
|---|
| 253 |  ;
 | 
|---|
| 254 |  Q:'$G(DFN)
 | 
|---|
| 255 |  ;
 | 
|---|
| 256 |  Q:'$$ON^IVMUPAR1  ;quit if enrollment events turned off
 | 
|---|
| 257 |  ;
 | 
|---|
| 258 |  ;don't want to log event if called due to file re-indexing
 | 
|---|
| 259 |  I $D(DIU(0))!($D(DIK)&$D(DIKJ)&$D(DIKLK)&$D(DIKS)&$D(DIN)) Q
 | 
|---|
| 260 |  ;
 | 
|---|
| 261 |  ;if the eligibility/enrollment upload is in progess, or there is no enrollment, do nothing
 | 
|---|
| 262 |  Q:($G(DGENUPLD)="ENROLLMENT/ELIGIBILITY UPLOAD IN PROGRESS")
 | 
|---|
| 263 |  I ('$$FINDCUR^DGENA(DFN)),('$$VET^DGENPTA(DFN)) Q
 | 
|---|
| 264 |  N STATUS
 | 
|---|
| 265 |  S STATUS=$$STATUS^DGENA(DFN)
 | 
|---|
| 266 |  ; Purple Heart added status 21
 | 
|---|
| 267 |  I $$VET1^DGENPTA(DFN)!(STATUS=1)!(STATUS=2)!(STATUS=9)!(STATUS=15)!(STATUS=16)!(STATUS=17)!(STATUS=18)!(STATUS=19)!(STATUS=20)!(STATUS=21) D
 | 
|---|
| 268 |  .N EVENTS
 | 
|---|
| 269 |  .S EVENTS("ENROLL")=1
 | 
|---|
| 270 |  .I $$LOG(DFN,$$YEAR(DFN),.EVENTS) ;no need to inform on success or failure
 | 
|---|
| 271 |  Q
 | 
|---|
| 272 |  ;
 | 
|---|
| 273 | YEAR(DFN) ;
 | 
|---|
| 274 |  ;Determines the income year to be used in the transmission 
 | 
|---|
| 275 |  ;
 | 
|---|
| 276 |  N YEAR
 | 
|---|
| 277 |  S YEAR=$$LD^IVMUFNC4(DFN)
 | 
|---|
| 278 |  S:YEAR YEAR=($E(YEAR,1,3)-1)_"0000"
 | 
|---|
| 279 |  S:'YEAR YEAR=($E(DT,1,3)-1)_"0000"
 | 
|---|
| 280 |  Q YEAR
 | 
|---|