[613] | 1 | DGENPTA ;ALB/CJM - Patient API - Retrieve Data; 13 JUN 1997
|
---|
| 2 | ;;5.3;Registration;**121,122,147**;08/13/93
|
---|
| 3 | ;
|
---|
| 4 | VET(DFN) ;returns 1 if the patient is an eligible veteran
|
---|
| 5 | ;returns 0 if not a veteran or not eligible
|
---|
| 6 | ;
|
---|
| 7 | N VET S VET=0
|
---|
| 8 | I $G(DFN),$D(^DPT(DFN,0)) D
|
---|
| 9 | .S VET=1
|
---|
| 10 | .I $P($G(^DPT(DFN,"VET")),"^")="N" S VET=0
|
---|
| 11 | .I $P($G(^DPT(DFN,.15)),"^",2) S VET=0
|
---|
| 12 | Q VET
|
---|
| 13 | ;
|
---|
| 14 | VET1(DFN) ;returns 1 if the patient is a veteran
|
---|
| 15 | ;returns 0 if not a veteran
|
---|
| 16 | ;
|
---|
| 17 | N VET S VET=0
|
---|
| 18 | I $G(DFN),$D(^DPT(DFN,0)) D
|
---|
| 19 | .I $P($G(^DPT(DFN,"VET")),"^")="Y" S VET=1
|
---|
| 20 | Q VET
|
---|
| 21 | ;
|
---|
| 22 | ACTIVE(DFN,DGDT) ;
|
---|
| 23 | ;Description - Used to determine whether or not the patient has had a
|
---|
| 24 | ; recent epiosode of inpatient or outpatient care.
|
---|
| 25 | ;Input:
|
---|
| 26 | ; DFN - ien of record in Patient file
|
---|
| 27 | ; DGDT - date used to specify how far back to go looking for episode
|
---|
| 28 | ; of care
|
---|
| 29 | ;Output -
|
---|
| 30 | ; returns 1 if recent episode of care, 0 otherwise
|
---|
| 31 | ;
|
---|
| 32 | ;!!!!!!! NOTE: This routine is not complete. !!!!!!!!!!!!!!!
|
---|
| 33 | ; Still need to define how user wants to define an 'active' patient.
|
---|
| 34 | ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
---|
| 35 | ;
|
---|
| 36 | Q 1
|
---|
| 37 | ;
|
---|
| 38 | PREF(DFN,FACNAME) ;
|
---|
| 39 | ;Description: Used to determine the patient's preferred facility.
|
---|
| 40 | ;Input:
|
---|
| 41 | ; DFN - an ien of a record in the PATIENT file
|
---|
| 42 | ;Output:
|
---|
| 43 | ; Function Value - Returns a pointer to the INSTITUTION file entry that
|
---|
| 44 | ; is the patient's preferred facility, NULL if the preferred facility
|
---|
| 45 | ; can not be determined.
|
---|
| 46 | ; FACNAME - optional parm, pass by reference - returns institution name
|
---|
| 47 | ;
|
---|
| 48 | N FAC
|
---|
| 49 | S (FACNAME,FAC)=""
|
---|
| 50 | I $D(DFN),$D(^DPT(DFN,0)) S FAC=$P($G(^DPT(DFN,"ENR")),"^",2)
|
---|
| 51 | S:FAC FACNAME=$P($G(^DIC(4,FAC,0)),"^")
|
---|
| 52 | Q FAC
|
---|
| 53 | ;
|
---|
| 54 | DEATH(DFN) ;
|
---|
| 55 | ;Description: Used to determine whether or not the patient is alive.
|
---|
| 56 | ;Input:
|
---|
| 57 | ; DFN - an ien of a record in the PATIENT file
|
---|
| 58 | ;Output:
|
---|
| 59 | ; Function Value - Returns 0 if there is no record of the patient's
|
---|
| 60 | ; death, otherwise returns the patients date of death
|
---|
| 61 | ;
|
---|
| 62 | N DATE S DATE=0
|
---|
| 63 | I $D(DFN),$D(^DPT(DFN,0)) S DATE=$P($G(^DPT(DFN,.35)),"^")
|
---|
| 64 | I DATE S DATE=(DATE\1) ;get rid of the time portion
|
---|
| 65 | Q +DATE
|
---|
| 66 | ;
|
---|
| 67 | GET(DFN,DGPAT) ;
|
---|
| 68 | ;Description: Returns DGPAT() array with identifing infor for patient
|
---|
| 69 | ; Input:
|
---|
| 70 | ; DFN - ien, PATIENT file
|
---|
| 71 | ; Output:
|
---|
| 72 | ; Function Value - 1 on success, 0 on failure
|
---|
| 73 | ; DGPAT() array (pass by reference)
|
---|
| 74 | ; "DEATH" - date of death
|
---|
| 75 | ; "DFN" - ien, PATIENT file
|
---|
| 76 | ; "DOB" - date of birth
|
---|
| 77 | ; "INELDATE" - INELIGIBLE DATE
|
---|
| 78 | ; "INELREA" - INELIGIBLE REASON
|
---|
| 79 | ; "INELDEC" - INELIGIBLE VARO DECISION
|
---|
| 80 | ; "NAME" - patient name
|
---|
| 81 | ; "PATYPE" - patient type
|
---|
| 82 | ; "PID" - Primary Long ID
|
---|
| 83 | ; "PREFAC" - prefered facility
|
---|
| 84 | ; "SSN" - Social Security Number
|
---|
| 85 | ; "SEX" - M=male, F=female
|
---|
| 86 | ; "VETERAN" - VETERAN (Y/N)? - "Y"=YES,"N"=NO
|
---|
| 87 | ;
|
---|
| 88 | N NODE
|
---|
| 89 | Q:'$G(DFN) 0
|
---|
| 90 | K DGPAT S DGPAT=""
|
---|
| 91 | S DGPAT("DFN")=DFN
|
---|
| 92 | S NODE=$G(^DPT(DFN,0))
|
---|
| 93 | Q:NODE="" 0
|
---|
| 94 | S DGPAT("NAME")=$P(NODE,"^")
|
---|
| 95 | S DGPAT("DOB")=$P(NODE,"^",3)
|
---|
| 96 | S DGPAT("SEX")=$P(NODE,"^",2)
|
---|
| 97 | S DGPAT("SSN")=$P(NODE,"^",9)
|
---|
| 98 | ;
|
---|
| 99 | S DGPAT("DEATH")=$P($G(^DPT(DFN,.35)),"^")
|
---|
| 100 | S DGPAT("PATYPE")=$P($G(^DPT(DFN,"TYPE")),"^")
|
---|
| 101 | S DGPAT("VETERAN")=$P($G(^DPT(DFN,"VET")),"^")
|
---|
| 102 | S DGPAT("PREFAC")=$P($G(^DPT(DFN,"ENR")),"^",2)
|
---|
| 103 | S DGPAT("INELDATE")=$P($G(^DPT(DFN,.15)),"^",2)
|
---|
| 104 | S DGPAT("INELREA")=$P($G(^DPT(DFN,.3)),"^",7)
|
---|
| 105 | S DGPAT("INELDEC")=$P($G(^DPT(DFN,"INE")),"^",6)
|
---|
| 106 | S DGPAT("PID")=$P($G(^DPT(DFN,.36)),"^",3)
|
---|
| 107 | Q 1
|
---|
| 108 | ;
|
---|
| 109 | SSN(DFN) ;
|
---|
| 110 | ;Description: Function returns the patient's SSN, or "" on failure.
|
---|
| 111 | ;
|
---|
| 112 | Q:'DFN ""
|
---|
| 113 | Q $P($G(^DPT(DFN,0)),"^",9)
|
---|
| 114 | ;
|
---|
| 115 | NAME(DFN) ;
|
---|
| 116 | ;Description: Function returns the patient's NAME, or "" on failure.
|
---|
| 117 | ;
|
---|
| 118 | Q:'DFN ""
|
---|
| 119 | Q $P($G(^DPT(DFN,0)),"^")
|
---|
| 120 | ;
|
---|
| 121 | EXT(SUB,VAL) ;
|
---|
| 122 | ;Description: Given the subscript used in the PATIENT object array,
|
---|
| 123 | ; DGPAT(), and a field value, returns the external representation of
|
---|
| 124 | ; the value, as defined in the fields output transform of the PATIENT
|
---|
| 125 | ; file.
|
---|
| 126 | ;Input:
|
---|
| 127 | ; SUB - array subscript
|
---|
| 128 | ; VAL - field value
|
---|
| 129 | ;Output:
|
---|
| 130 | ; Function Value - returns the external value of the field
|
---|
| 131 | ;
|
---|
| 132 | Q:(($G(SUB)="")!($G(VAL)="")) ""
|
---|
| 133 | ;
|
---|
| 134 | N FLD
|
---|
| 135 | S FLD=$$FIELD^DGENPTA1(SUB)
|
---|
| 136 | Q:(FLD="") ""
|
---|
| 137 | Q $$EXTERNAL^DILFD(2,FLD,"F",VAL)
|
---|
| 138 | ;
|
---|
| 139 | ;
|
---|
| 140 | VALPAT(DFN) ; --
|
---|
| 141 | ; Description: This function returns a 1 if the patient DFN is valid, 0 if the patient DFN is not valid.
|
---|
| 142 | ;
|
---|
| 143 | ; Input:
|
---|
| 144 | ; DFN - as pointer to patient in Patient (#2) file
|
---|
| 145 | ;
|
---|
| 146 | ; Output:
|
---|
| 147 | ; Function Value - Is patient (DFN) valid?
|
---|
| 148 | ; Return 1 if successful, otherwise 0
|
---|
| 149 | ;
|
---|
| 150 | ; init variables
|
---|
| 151 | N DGVALID S DGVALID=0
|
---|
| 152 | ;
|
---|
| 153 | ; is patient (DFN) valid?
|
---|
| 154 | I $G(DFN),$D(^DPT(DFN,0)) S DGVALID=1
|
---|
| 155 | ;
|
---|
| 156 | Q DGVALID
|
---|
| 157 | ;
|
---|
| 158 | ;
|
---|
| 159 | CURINPAT(DFN) ; --
|
---|
| 160 | ; Description: This function will determine if the patient is a current inpatient.
|
---|
| 161 | ;
|
---|
| 162 | ; Input:
|
---|
| 163 | ; DFN - IEN of record in Patient (#2) file
|
---|
| 164 | ;
|
---|
| 165 | ; Output:
|
---|
| 166 | ; Function Value - Is patient a current inpatient?
|
---|
| 167 | ; Return 1 if successful, otherwise 0
|
---|
| 168 | ;
|
---|
| 169 | N DGCUR S DGCUR=0
|
---|
| 170 | ;
|
---|
| 171 | ; if valid patient, check if current inpatient
|
---|
| 172 | I $$VALPAT(DFN) D
|
---|
| 173 | .;
|
---|
| 174 | .; is patient a current inpatient?
|
---|
| 175 | .I $G(^DPT(DFN,.105)) S DGCUR=1
|
---|
| 176 | ;
|
---|
| 177 | Q DGCUR
|
---|
| 178 | ;
|
---|
| 179 | ;
|
---|
| 180 | INPAT(DFN,DGBEG,DGEND) ; --
|
---|
| 181 | ; Description: This function will determine if a patient was an inpatient between a specified date range.
|
---|
| 182 | ;
|
---|
| 183 | ; Input:
|
---|
| 184 | ; DFN - IEN of record in Patient (#2) file
|
---|
| 185 | ; DGBEG - as begin date/time for inpatient search
|
---|
| 186 | ; DGEND - as end date/time for inpatient search
|
---|
| 187 | ;
|
---|
| 188 | ; Output:
|
---|
| 189 | ; Function Value - Was patient an inpatient between date range?
|
---|
| 190 | ; Return 1 if successful, otherwise 0
|
---|
| 191 | ;
|
---|
| 192 | N DGINPAT,DGSDT,DGEDT,DGMOVE,DGTRANS
|
---|
| 193 | S DGINPAT=0
|
---|
| 194 | ;
|
---|
| 195 | ; if not valid patient (DFN) and not valid date range, exit
|
---|
| 196 | I '$$VALPAT(DFN),'($$RANGE(DGBEG,DGEND)) G INPATQ
|
---|
| 197 | ;
|
---|
| 198 | ; init date/time(s)
|
---|
| 199 | S DGSDT=DGBEG-.0001,DGEDT=DGEND+$S($P(DGEND,".",2)="":.2359,1:"")
|
---|
| 200 | ;
|
---|
| 201 | ; use "APRD" x-ref of Patient Movement (#405) file
|
---|
| 202 | F S DGSDT=$O(^DGPM("APRD",+DFN,DGSDT)) Q:'DGSDT!(DGSDT>DGEDT)!(DGINPAT) D
|
---|
| 203 | .S DGMOVE=0 F S DGMOVE=$O(^DGPM("APRD",+DFN,DGSDT,DGMOVE)) Q:'DGMOVE!(DGINPAT) D
|
---|
| 204 | ..; - transaction type of movement
|
---|
| 205 | ..S DGTRANS=$P($G(^DGPM(DGMOVE,0)),"^",2) ; movement transaction type
|
---|
| 206 | ..; - if trans type not DISCHARGE, CHECK-IN LODGER, CHECK-OUT LODGER
|
---|
| 207 | ..I DGTRANS'=3,(DGTRANS'=4),(DGTRANS'=5) S DGINPAT=1
|
---|
| 208 | ;
|
---|
| 209 | INPATQ Q DGINPAT
|
---|
| 210 | ;
|
---|
| 211 | ;
|
---|
| 212 | OUTPAT(DFN,DGBEG,DGEND) ; --
|
---|
| 213 | ; Description: This function will determine if a patient has an outpatient encounter between a specified date range that has successfully been checked out.
|
---|
| 214 | ;
|
---|
| 215 | ; Input:
|
---|
| 216 | ; DFN - IEN of record in Patient (#2) file
|
---|
| 217 | ; DGBEG - as begin date/time for outpatient search
|
---|
| 218 | ; DGEND - as end date/time for outpatient search
|
---|
| 219 | ;
|
---|
| 220 | ; Output:
|
---|
| 221 | ; Function Value - Does patient have outpatient encounter between date
|
---|
| 222 | ; range that that has successfully been checked out?
|
---|
| 223 | ; Return 1 if successful, otherwise 0
|
---|
| 224 | ;
|
---|
| 225 | N DGOUT,DGSDT,DGEDT,DGOE
|
---|
| 226 | S DGOUT=0
|
---|
| 227 | ;
|
---|
| 228 | ; if not valid patient (DFN) and not valid date range, exit
|
---|
| 229 | I '$$VALPAT(DFN),'($$RANGE(DGBEG,DGEND)) G OUTPATQ
|
---|
| 230 | ;
|
---|
| 231 | ; init date/time(s)
|
---|
| 232 | S DGSDT=DGBEG-.0001,DGEDT=DGEND+$S($P(DGEND,".",2)="":.2359,1:"")
|
---|
| 233 | ;
|
---|
| 234 | ; use "ADFN" x-ref of Outpatient Encounter (#409.68) file
|
---|
| 235 | F S DGSDT=$O(^SCE("ADFN",+DFN,DGSDT)) Q:'DGSDT!(DGSDT>DGEDT)!(DGOUT) D
|
---|
| 236 | .;
|
---|
| 237 | .S DGOE=0 F S DGOE=$O(^SCE("ADFN",+DFN,DGSDT,DGOE)) Q:'DGOE!(DGOUT) D
|
---|
| 238 | ..; - if encounter checked out, set flag
|
---|
| 239 | ..I $P($G(^SCE(+DGOE,0)),"^",7) S DGOUT=1
|
---|
| 240 | ;
|
---|
| 241 | OUTPATQ Q DGOUT
|
---|
| 242 | ;
|
---|
| 243 | ;
|
---|
| 244 | RANGE(DGBEG,DGEND) ; --
|
---|
| 245 | ; Description: This function returns a 1 if two dates are a valid date range, 0 if they are not valid.
|
---|
| 246 | ;
|
---|
| 247 | ; Input:
|
---|
| 248 | ; DGBEG - as begin date of date range
|
---|
| 249 | ; DGEND - as end date of date range
|
---|
| 250 | ;
|
---|
| 251 | ; Output:
|
---|
| 252 | ; Function Value - Is date range valid?
|
---|
| 253 | ; Return 1 if successful, otherwise 0
|
---|
| 254 | ;
|
---|
| 255 | N DGOK
|
---|
| 256 | ;
|
---|
| 257 | S DGOK=0
|
---|
| 258 | ;
|
---|
| 259 | ; if input parameters not defined, exit
|
---|
| 260 | I '$D(DGBEG),('$D(DGEND)) G RANGEQ
|
---|
| 261 | ;
|
---|
| 262 | ; remove time from dates
|
---|
| 263 | S DGBEG=(DGBEG/1),DGEND=(DGEND/1)
|
---|
| 264 | ;
|
---|
| 265 | ; if begin date greater than end date, exit
|
---|
| 266 | I DGBEG>DGEND G RANGEQ
|
---|
| 267 | ;
|
---|
| 268 | ; if begin date and end date future dates, exit
|
---|
| 269 | I DGBEG>DT,(DGEND>DT) G RANGEQ
|
---|
| 270 | ;
|
---|
| 271 | S DGOK=1
|
---|
| 272 | ;
|
---|
| 273 | RANGEQ Q DGOK
|
---|
| 274 | ;
|
---|
| 275 | LOOKUP(SSN,DOB,SEX,ERROR) ;
|
---|
| 276 | ;Description: This function will do a search for the patient based on
|
---|
| 277 | ;the identifying information provided. The function will be successful
|
---|
| 278 | ;only if a single patient is found matching the identifiers provided.
|
---|
| 279 | ;
|
---|
| 280 | ;Inputs:
|
---|
| 281 | ; SSN - patient Social Security Number
|
---|
| 282 | ; DOB - patient date of birth (FM format)
|
---|
| 283 | ; SEX - patient sex
|
---|
| 284 | ;Outputs:
|
---|
| 285 | ; Function Value - patient DFN if successful, 0 otherwise
|
---|
| 286 | ; ERROR - if unsuccessful, an error message is returned (optional, pass by reference)
|
---|
| 287 | ;
|
---|
| 288 | N DFN,NODE
|
---|
| 289 | ;
|
---|
| 290 | S DFN=$O(^DPT("SSN",SSN,0))
|
---|
| 291 | I 'DFN S ERROR="SSN NOT FOUND" Q 0
|
---|
| 292 | I $O(^DPT("SSN",SSN,DFN)) S ERROR="MULTIPLE PATIENTS MATCHING SSN" Q 0
|
---|
| 293 | S NODE=$G(^DPT(DFN,0))
|
---|
| 294 | I $P(NODE,"^",2)'=SEX S ERROR="SEX DOES NOT MATCH" Q 0
|
---|
| 295 | I $E($P(NODE,"^",3),1,3)'=$E(DOB,1,3) S ERROR="DOB DOES NOT MATCH" Q 0
|
---|
| 296 | I $E($P(NODE,"^",3),4,5),$E($P(NODE,"^",3),4,5)'=$E(DOB,4,5) S ERROR="DOB DOES NOT MATCH" Q 0
|
---|
| 297 | Q DFN
|
---|