[613] | 1 | DGENUPL4 ;ALB/CJM,RTK,ISA/KWP,ISD/GSN,PHH,RGL,PJR,BRM,TDM,TMK,EG - PROCESS INCOMING (Z11 EVENT TYPE) HL7 MESSAGES ; 09/25/2006
|
---|
| 2 | ;;5.3;REGISTRATION;**147,177,232,253,327,367,377,514,451,625,673,708**;Aug 13,1993;Build 7
|
---|
| 3 | ;
|
---|
| 4 | UOBJECTS(DFN,DGPAT,DGELG,DGCDIS,DGOEIF,MSGID,ERRCOUNT,MSGS,OLDPAT,OLDELG,OLDCDIS,OLDOEIF) ;
|
---|
| 5 | ;Used to update PATIENT, ELIGIBILITY, CATASTROPHIC
|
---|
| 6 | ;DISABILITY, and OEF/OIF CONFLICT objects 'in memory'.
|
---|
| 7 | ;
|
---|
| 8 | ;Input:
|
---|
| 9 | ; DFN - ien of record in the PATIENT file
|
---|
| 10 | ; DGPAT - PATIENT object array (pass by reference)
|
---|
| 11 | ; DGELG - ELIGIBILITY object array (pass by ref)
|
---|
| 12 | ; DGCDIS - CATASTROPHIC DISABILITY object array (pass by ref)
|
---|
| 13 | ; DGOEIF - OEF/OIF conflict object array (pass by ref)
|
---|
| 14 | ; MSGID - message control id of the HL7 message being processed
|
---|
| 15 | ; ERRCOUNT - count of errors (pass by ref)
|
---|
| 16 | ; MSGS - array of messages for the site (pass by ref)
|
---|
| 17 | ;
|
---|
| 18 | ;Output:
|
---|
| 19 | ; Function Value: 1 if update was successful 'in memory',
|
---|
| 20 | ; consistency checks pass and the objects can be stored in
|
---|
| 21 | ; the local database, 0 otherwise.
|
---|
| 22 | ; DGPAT - PATIENT object array (pass by reference)
|
---|
| 23 | ; DGELG - ELIGIBILITY object array (pass by ref)
|
---|
| 24 | ; DGCDIS - CATASTROPHIC DISABILITY object array (pass by ref)
|
---|
| 25 | ; ERRCOUNT - count of errors (pass by ref)
|
---|
| 26 | ; MSGS - array of messages for the site (pass by ref)
|
---|
| 27 | ; OLDPAT - patient object array as it currently exists in database before the update (pass by ref)
|
---|
| 28 | ; OLDELG - eligibility object array as it currently exists in database before the update (pass by ref)
|
---|
| 29 | ; OLDCDIS - catastrophically disability object array as it currently exists in database before the update (pass by ref)
|
---|
| 30 | ; OLDOEIF - OEF/OIF conflict data as it currently exists in database before the update (pass by ref)
|
---|
| 31 | ;
|
---|
| 32 | N DGPAT3,DGELG3,DGCDIS3,SUCCESS
|
---|
| 33 | S SUCCESS=1
|
---|
| 34 | D
|
---|
| 35 | .;first get local site's current data
|
---|
| 36 | .I ('$$GET^DGENPTA(DFN,.OLDPAT))!('$$GET^DGENELA(DFN,.OLDELG))!('$$GET^DGENCDA(DFN,.OLDCDIS))!('$P($$GET^DGENOEIF(DFN,.OLDOEIF,0),U,2)) D Q
|
---|
| 37 | ..D ADDERROR^DGENUPL(MSGID,DGPAT("SSN"),"UNABLE TO ACCESS PATIENT RECORD",.ERRCOUNT)
|
---|
| 38 | ..S SUCCESS=0
|
---|
| 39 | .;
|
---|
| 40 | .;Phase II CD Consistency Checks (SRS 6.5.1.4) check VISTA against HEC
|
---|
| 41 | .S SUCCESS=$$CDCHECK^DGENUPL9()
|
---|
| 42 | .Q:'SUCCESS
|
---|
| 43 | .;
|
---|
| 44 | .;now merge with the update
|
---|
| 45 | .D MERGE
|
---|
| 46 | .;
|
---|
| 47 | .;add the assumed values
|
---|
| 48 | .D ADD
|
---|
| 49 | .;
|
---|
| 50 | .;now do the consistency checks
|
---|
| 51 | .S SUCCESS=$$CHECK()
|
---|
| 52 | .Q:'SUCCESS
|
---|
| 53 | .;
|
---|
| 54 | .;replace input arrays with fully updated versions
|
---|
| 55 | .K DGPAT M DGPAT=DGPAT3
|
---|
| 56 | .K DGELG M DGELG=DGELG3
|
---|
| 57 | .K DGCDIS M DGCDIS=DGCDIS3
|
---|
| 58 | ;
|
---|
| 59 | I SUCCESS D
|
---|
| 60 | .;
|
---|
| 61 | .;list of required notifications
|
---|
| 62 | .;
|
---|
| 63 | .;change in date of death
|
---|
| 64 | .I DGPAT("DEATH"),$P(OLDPAT("DEATH"),".")'=$P(DGPAT("DEATH"),".") D
|
---|
| 65 | ..D ADDMSG^DGENUPL3(.MSGS,"HEC SHOWS DATE OF DEATH = "_$$FMTE^XLFDT(DGPAT("DEATH"),"1"),1)
|
---|
| 66 | ..D ADDMSG^DGENUPL3(.MSGS,$S('OLDPAT("DEATH"):"SITE DOES NOT HAVE DATE OF DEATH",1:"SITE HAS DATE OF DEATH = "_$$FMTE^XLFDT(OLDPAT("DEATH"),"1")),1)
|
---|
| 67 | .;
|
---|
| 68 | .I OLDPAT("DEATH"),'DGPAT("DEATH") D
|
---|
| 69 | ..D ADDMSG^DGENUPL3(.MSGS,"HEC SHOWS NO DATE OF DEATH",1)
|
---|
| 70 | ..D ADDMSG^DGENUPL3(.MSGS,"SITE HAS DATE OF DEATH = "_$$FMTE^XLFDT(OLDPAT("DEATH"),"1"),1)
|
---|
| 71 | .;
|
---|
| 72 | .;change in POW
|
---|
| 73 | .I OLDELG("POW")="N",DGELG("POW")="Y" D ADDMSG^DGENUPL3(.MSGS,"POW STATUS CHANGED TO YES")
|
---|
| 74 | .I OLDELG("POW")="Y",DGELG("POW")="N" D ADDMSG^DGENUPL3(.MSGS,"POW STATUS CHANGED TO NO")
|
---|
| 75 | .;
|
---|
| 76 | .;SC to NSC
|
---|
| 77 | .I OLDELG("SC")="Y",DGELG("SC")="N" D ADDMSG^DGENUPL3(.MSGS,"VETERAN CHANGED TO NON-SERVICE CONNECTED",1)
|
---|
| 78 | .;
|
---|
| 79 | .; Change from Eligible to Ineligible
|
---|
| 80 | .I 'OLDPAT("INELDATE"),DGPAT("INELDATE") D ADDMSG^DGENUPL3(.MSGS,"VETERAN PREVIOUSLY ELIGIBLE FOR VA HEALTH CARE, NOW INELIGIBLE.",1)
|
---|
| 81 | .;
|
---|
| 82 | .; Check for erroneous CD deletion
|
---|
| 83 | .I OLDCDIS("VCD")="","@"[DGCDIS("VCD") Q ;no notification is needed
|
---|
| 84 | .;
|
---|
| 85 | .; CD Determination Changed
|
---|
| 86 | .I OLDCDIS("VCD")'=DGCDIS("VCD") D ADDMSG^DGENUPL3(.MSGS,"VETERANS CD EVALUATION HAS CHANGED.")
|
---|
| 87 | D EP^DGENUPLB
|
---|
| 88 | Q SUCCESS
|
---|
| 89 | ;
|
---|
| 90 | ADD ;
|
---|
| 91 | ;Description: adds computed and assumed values to the updated objects
|
---|
| 92 | ;
|
---|
| 93 | ;Input: DGELG3(),DGPAT3() created in the UOBJECTS procedure.
|
---|
| 94 | ;
|
---|
| 95 | N SUB,TYPE,DATA
|
---|
| 96 | S DGELG3("ELIGENTBY")=.5
|
---|
| 97 | S SUB=0 F S SUB=$O(DGELG3("RATEDIS",SUB)) Q:'SUB S DGELG3("RATEDIS",SUB,"RDSC")=1
|
---|
| 98 | ;
|
---|
| 99 | ; Default Patient Types
|
---|
| 100 | I DGELG3("SC")="N" S DGPAT3("VETERAN")="Y",DGPAT3("PATYPE")=$O(^DG(391,"B","NSC VETERAN",0))
|
---|
| 101 | I DGELG3("SC")="Y" S DGPAT3("VETERAN")="Y",DGPAT3("PATYPE")=$O(^DG(391,"B","SC VETERAN",0))
|
---|
| 102 | ;
|
---|
| 103 | ; If Ineldate apply business rules
|
---|
| 104 | I DGPAT3("INELDATE"),DGELG3("SC")'="Y" D
|
---|
| 105 | .S DGPAT3("VETERAN")="N",DGPAT3("PATYPE")=$O(^DG(391,"B","NON-VETERAN (OTHER)",0))
|
---|
| 106 | .S DGELG3("POS")=$O(^DIC(21,"B","OTHER NON-VETERANS",0))
|
---|
| 107 | ;
|
---|
| 108 | ;update/set ELIGIBILITY VERIF. SOURCE field (Ineligible Project):
|
---|
| 109 | I DGELG3("ELIGVERIF")["VIVA" S DATA(.3613)="H"
|
---|
| 110 | E S DATA(.3613)="V"
|
---|
| 111 | ;
|
---|
| 112 | ; File data fields modified by Ineligible Business Rules
|
---|
| 113 | I $$UPD^DGENDBS(2,DFN,.DATA,.ERROR)
|
---|
| 114 | Q
|
---|
| 115 | ;
|
---|
| 116 | MERGE ;
|
---|
| 117 | ;Description: merges arrays with current patient data with the updates
|
---|
| 118 | ; Merges DGPAT() + OLDPAT() -> DGPAT3()
|
---|
| 119 | ; DGELG() + OLDELG() -> DGELG3()
|
---|
| 120 | ; overlays catastrophic disability array with data from HEC
|
---|
| 121 | ; DGCDIS() is info from HEC
|
---|
| 122 | ;
|
---|
| 123 | N SUB,SUB2,LOC,HEC,NATCODE
|
---|
| 124 | M DGPAT3=OLDPAT,DGELG3=OLDELG
|
---|
| 125 | K DGCDIS3 M DGCDIS3=OLDCDIS K DGCDIS3("EXT"),DGCDIS3("PROC"),DGCDIS3("COND"),DGCDIS3("DIAG")
|
---|
| 126 | ;nothing on HEC...delete VistA
|
---|
| 127 | I $G(DGCDIS("EXT",1,1))="",$G(DGCDIS("PROC",1))="",$G(DGCDIS("COND",1))="",$G(DGCDIS("DIAG",1))="" D
|
---|
| 128 | . S DGCDIS("VCD")="@"
|
---|
| 129 | . S DGCDIS("BY")="@"
|
---|
| 130 | . S DGCDIS("DATE")="@"
|
---|
| 131 | . S DGCDIS("FACDET")="@"
|
---|
| 132 | . S DGCDIS("METDET")="@"
|
---|
| 133 | . S DGCDIS("REVDTE")="@"
|
---|
| 134 | . Q
|
---|
| 135 | ;
|
---|
| 136 | ;discard MT status from local database - don't ever want to use it during upload
|
---|
| 137 | S DGELG3("MTSTA")=DGELG("MTSTA")
|
---|
| 138 | ;
|
---|
| 139 | ;patient array
|
---|
| 140 | S SUB=""
|
---|
| 141 | F S SUB=$O(DGPAT(SUB)) Q:(SUB="") I (DGPAT(SUB)'="") S DGPAT3(SUB)=$S((DGPAT(SUB)="@"):"",1:DGPAT(SUB))
|
---|
| 142 | ;
|
---|
| 143 | ;Allow Ineligible info deletion (Ineligible Project):
|
---|
| 144 | I $D(DGPAT("INELDEC")),DGPAT("INELDEC")="" S DGPAT("INELDEC")="@"
|
---|
| 145 | I $D(DGPAT("INELREA")),DGPAT("INELREA")="" S DGPAT("INELREA")="@"
|
---|
| 146 | I $D(DGPAT("INELDATE")),DGPAT("INELDATE")="" S DGPAT("INELDATE")="@"
|
---|
| 147 | ;
|
---|
| 148 | ;catastrophic disability array
|
---|
| 149 | S SUB=""
|
---|
| 150 | F S SUB=$O(DGCDIS(SUB)) Q:(SUB="") D
|
---|
| 151 | .I $D(DGCDIS(SUB))=1 I ($G(DGCDIS(SUB))'="") S DGCDIS3(SUB)=DGCDIS(SUB)
|
---|
| 152 | .I $D(DGCDIS(SUB))=10 D
|
---|
| 153 | ..S SUB2=""
|
---|
| 154 | ..F S SUB2=$O(DGCDIS(SUB,SUB2)) Q:SUB2="" D
|
---|
| 155 | ...I ($G(DGCDIS(SUB,SUB2))'="") S DGCDIS3(SUB,SUB2)=DGCDIS(SUB,SUB2)
|
---|
| 156 | ...I SUB="PROC" D
|
---|
| 157 | ....N CDPROC,CDEXT,LIEN
|
---|
| 158 | ....S CDPROC=$G(DGCDIS("PROC",SUB2))
|
---|
| 159 | ....Q:CDPROC=""
|
---|
| 160 | ....S CDEXT=$G(DGCDIS("EXT",SUB2,1))
|
---|
| 161 | ....Q:CDEXT=""
|
---|
| 162 | ....S LIEN=$O(^DGEN(27.17,CDPROC,1,"B",CDEXT,0))
|
---|
| 163 | ....Q:LIEN=""
|
---|
| 164 | ....S DGCDIS3("EXT",SUB2,LIEN)=CDEXT
|
---|
| 165 | ;
|
---|
| 166 | ;eligibility array
|
---|
| 167 | F S SUB=$O(DGELG(SUB)) Q:(SUB="") I ($G(DGELG(SUB))'="") S DGELG3(SUB)=$S((DGELG(SUB)="@"):"",1:DGELG(SUB))
|
---|
| 168 | ;
|
---|
| 169 | ;rated disabilities from HEC should replace local sites
|
---|
| 170 | D
|
---|
| 171 | .K DGELG3("RATEDIS")
|
---|
| 172 | .M DGELG3("RATEDIS")=DGELG("RATEDIS")
|
---|
| 173 | ;
|
---|
| 174 | ;primary eligibility
|
---|
| 175 | I (DGELG("ELIG","CODE")'="") S DGELG3("ELIG","CODE")=$S((DGELG("ELIG","CODE")="@"):"",($$NATCODE^DGENELA(DGELG("ELIG","CODE"))=$$NATCODE^DGENELA(DGELG3("ELIG","CODE"))):DGELG3("ELIG","CODE"),1:DGELG("ELIG","CODE"))
|
---|
| 176 | ;
|
---|
| 177 | ;patient eligibilities multiple
|
---|
| 178 | ;delete veteran type codes not mapped to national codes sent by HEC, but leave non-veteran types and the codes where there is a match
|
---|
| 179 | ;first find all local codes already in the patient file and the ones sent from HEC, keep in arrays LOC and HEC
|
---|
| 180 | S NATCODE=$$NATCODE^DGENELA(DGELG("ELIG","CODE")) I NATCODE S HEC(NATCODE)=""
|
---|
| 181 | S SUB=0 F S SUB=$O(DGELG("ELIG","CODE",SUB)) Q:'SUB S NATCODE=$$NATCODE^DGENELA(SUB) I NATCODE S HEC(NATCODE)=""
|
---|
| 182 | S SUB=0 F S SUB=$O(DGELG3("ELIG","CODE",SUB)) Q:'SUB S NATCODE=$$NATCODE^DGENELA(SUB) I NATCODE S LOC(NATCODE)=""
|
---|
| 183 | ;Now discard the codes in the local patient database that don't map to a national code sent by HEC, as well as HUMANIARIAN EMERGENCY code if not sent by HEC:
|
---|
| 184 | S SUB=0
|
---|
| 185 | F S SUB=$O(DGELG3("ELIG","CODE",SUB)) Q:'SUB D
|
---|
| 186 | .I $P($G(^DIC(8,SUB,0)),"^",5)="Y"!($P($G(^DIC(8,SUB,0)),"^")["HUMANITARIAN EMERGENCY"),'$D(HEC($$NATCODE^DGENELA(SUB))) K DGELG3("ELIG","CODE",SUB)
|
---|
| 187 | ;now add codes included in the update that the local database does not already contain
|
---|
| 188 | S SUB=0
|
---|
| 189 | F S SUB=$O(DGELG("ELIG","CODE",SUB)) Q:'SUB D
|
---|
| 190 | .I '$D(LOC($$NATCODE^DGENELA(SUB))) S DGELG3("ELIG","CODE",SUB)=SUB
|
---|
| 191 | ;Agent Orange Exp. Location, use local database when upload is NULL
|
---|
| 192 | D AO^DGENUPL9
|
---|
| 193 | Q
|
---|
| 194 | ;
|
---|
| 195 | CHECK() ;
|
---|
| 196 | ;
|
---|
| 197 | N SUCCESS,ALIVE,ERRMSG,DGENR
|
---|
| 198 | S SUCCESS=1
|
---|
| 199 | S ERRMSG=""
|
---|
| 200 | ;
|
---|
| 201 | ;if upload includes date of death, check for indications that patient is alive
|
---|
| 202 | I DGPAT3("DEATH"),'OLDPAT("DEATH") D S:ALIVE SUCCESS=0
|
---|
| 203 | .;
|
---|
| 204 | .;determine if patient is at the moment being registered
|
---|
| 205 | .S ALIVE=$$IFREG^DGREG(DFN)
|
---|
| 206 | .;
|
---|
| 207 | .;check if an inpatient
|
---|
| 208 | .I 'ALIVE,$$INPAT^DGENPTA(DFN,DT,DT) S ALIVE=1
|
---|
| 209 | .;
|
---|
| 210 | .;Phase II locally enrolled with enrollment date after death date and status of unverified and rejected-initial application by vamc (SRS 6.5.1.2 e)
|
---|
| 211 | .N CURIEN,CURENR
|
---|
| 212 | .S CURIEN=$$FINDCUR^DGENA(DFN)
|
---|
| 213 | .I CURIEN,$$GET^DGENA(CURIEN,.CURENR),CURENR("DATE")>DGPAT3("DEATH"),CURENR("STATUS")=1!(CURENR("STATUS")=14) S ALIVE=1
|
---|
| 214 | .;there is an indication that he patient may not be dead
|
---|
| 215 | .D:ALIVE ADDERROR^DGENUPL(MSGID,DGPAT("SSN"),"LOCAL SITE VERIFY PATIENT DEATH",.ERRCOUNT),ADDMSG^DGENUPL3(.MSGS,"ELIBILITY UPLOAD CONTAINED DATE OF DEATH AND WAS REJECTED, PLEASE VERIFY PATIENT DEATH",1),NOTIFY^DGENUPL3(.DGPAT,.MSGS)
|
---|
| 216 | ;
|
---|
| 217 | ;only do consistency checks on this data if it is verified
|
---|
| 218 | I SUCCESS,(DGELG3("ELIGSTA")="V") D
|
---|
| 219 | .I $$CHECK^DGENPTA1(.DGPAT3,.ERRMSG),$$CHECK^DGENELA1(.DGELG3,.DGPAT3,.DGCDIS3,.ERRMSG),$$CHECK^DGENCDA1(.DGCDIS3,.ERRMSG)
|
---|
| 220 | .E D
|
---|
| 221 | ..S SUCCESS=0
|
---|
| 222 | ..D ADDERROR^DGENUPL(MSGID,DGPAT("SSN"),ERRMSG,.ERRCOUNT)
|
---|
| 223 | Q SUCCESS
|
---|