| 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 | 
|---|