[613] | 1 | RGFIU ;ALB/CJM-MPI/PD NDBI MERGE UTILITY (CONTINUED) ;08/27/99
|
---|
| 2 | ;;1.0;CLINICAL INFO RESOURCE NETWORK;**5,13,25**;30 Apr 99
|
---|
| 3 | ;
|
---|
| 4 | STATNUM(IEN) ;
|
---|
| 5 | ;Description: Given an ien to the Institution file, returns as the function value the station number. Returns "" on failure.
|
---|
| 6 | ;
|
---|
| 7 | N STATION
|
---|
| 8 | Q:'$G(IEN) ""
|
---|
| 9 | Q:'$D(^DIC(4,IEN,0)) ""
|
---|
| 10 | S STATION=$P($$NNT^XUAF4(IEN),"^",2)
|
---|
| 11 | Q $S(+STATION:STATION,1:"")
|
---|
| 12 | ;
|
---|
| 13 | UPD(FILE,RGDA,DATA,ERROR) ;File data into an existing record.
|
---|
| 14 | ; Input:
|
---|
| 15 | ; FILE - File or sub-file number
|
---|
| 16 | ; RGDA - New name for traditional DA array, with same meaning.
|
---|
| 17 | ; Pass by reference.
|
---|
| 18 | ; DATA - Data array to file (pass by reference)
|
---|
| 19 | ; Format: DATA(<field #>)=<value>
|
---|
| 20 | ;
|
---|
| 21 | ; Output:
|
---|
| 22 | ; Function Value - 0=error and 1=no error
|
---|
| 23 | ; ERROR - optional error message - if needed, pass by reference
|
---|
| 24 | ;
|
---|
| 25 | ; Example: To update a record in subfile 2.0361 in record with ien=353,
|
---|
| 26 | ; subrecord ien=68, with the field .01 value = 21:
|
---|
| 27 | ; S DATA(.01)=21,RGDA=68,RGDA(1)=353 I $$UPD^RGFIU(2.0361,.RGDA,.DATA,.ERROR) W !,"DONE"
|
---|
| 28 | ;
|
---|
| 29 | N FDA,FIELD,IENS,ERRORS
|
---|
| 30 | ;
|
---|
| 31 | ;IENS - Internal Entry Number String defined by FM
|
---|
| 32 | ;FDA - the FDA array as defined by FM
|
---|
| 33 | ;
|
---|
| 34 | I '$G(RGDA) S ERROR="IEN OF RECORD TO BE UPDATED NOT SPECIFIED" Q 0
|
---|
| 35 | S IENS=$$IENS^DILF(.RGDA)
|
---|
| 36 | S FIELD=0
|
---|
| 37 | F S FIELD=$O(DATA(FIELD)) Q:'FIELD D
|
---|
| 38 | .S FDA(FILE,IENS,FIELD)=$G(DATA(FIELD))
|
---|
| 39 | D FILE^DIE("K","FDA","ERRORS(1)")
|
---|
| 40 | I +$G(DIERR) D
|
---|
| 41 | .S ERROR=$G(ERRORS(1,"DIERR",1,"TEXT",1))
|
---|
| 42 | E D
|
---|
| 43 | .S ERROR=""
|
---|
| 44 | ;
|
---|
| 45 | I $S(+$G(DIERR):0,1:1) D CLEAN^DILF Q 1
|
---|
| 46 | E D CLEAN^DILF Q 0
|
---|
| 47 | ;
|
---|
| 48 | GETFIELD(FILE,FIELD,RGDA,ERROR,EXT) ;Get field value from an existing record.
|
---|
| 49 | ; Input:
|
---|
| 50 | ; FILE - File or sub-file number
|
---|
| 51 | ; RGDA - New name for traditional DA array, with same meaning.
|
---|
| 52 | ; Pass by reference.
|
---|
| 53 | ; FIELD - Field for which value is needed
|
---|
| 54 | ; EXT - (optional) If $G(EXT) then returns the external display form of the value
|
---|
| 55 | ; Output:
|
---|
| 56 | ; Function Value - field value in internal format,"" if an error was encountered
|
---|
| 57 | ; ERROR - optional error message - if needed, pass by reference
|
---|
| 58 | ;
|
---|
| 59 | N FDA,IENS,ERRORS,VALUE
|
---|
| 60 | ;
|
---|
| 61 | ;IENS - Internal Entry Number String defined by FM
|
---|
| 62 | ;FDA - the FDA array as defined by FM
|
---|
| 63 | ;
|
---|
| 64 | I '$G(RGDA) S ERROR="IEN OF RECORD TO BE UPDATED NOT SPECIFIED" Q ""
|
---|
| 65 | S IENS=$$IENS^DILF(.RGDA)
|
---|
| 66 | S VALUE=$$GET1^DIQ(FILE,IENS,FIELD,$S($G(EXT):"",1:"I"),,"ERRORS(1)")
|
---|
| 67 | I +$G(DIERR) D
|
---|
| 68 | .S ERROR=$G(ERRORS(1,"DIERR",1,"TEXT",1))
|
---|
| 69 | E D
|
---|
| 70 | .S ERROR=""
|
---|
| 71 | ;
|
---|
| 72 | I $S(+$G(DIERR):0,1:1) D CLEAN^DILF Q VALUE
|
---|
| 73 | E D CLEAN^DILF Q ""
|
---|
| 74 | ;
|
---|
| 75 | DELETE(FILE,RGDA,ERROR) ;Delete an existing record.
|
---|
| 76 | ; Input:
|
---|
| 77 | ; FILE - File or sub-file number
|
---|
| 78 | ; RGDA - New name for traditional DA array, with same meaning.
|
---|
| 79 | ; Pass by reference.
|
---|
| 80 | ;
|
---|
| 81 | ; Output:
|
---|
| 82 | ; Function Value - 0=error and 1=no error
|
---|
| 83 | ; ERROR - optional error message - if needed, pass by reference
|
---|
| 84 | ;
|
---|
| 85 | ; Example: To delete a record in subfile 2.0361 in record with ien=353,
|
---|
| 86 | ; subrecord ien=68:
|
---|
| 87 | ; S RGDA=68,RGDA(1)=353 I $$DELETE^RGFIU(2.0361,.RGDA,.DATA,.ERROR) W !,"DONE"
|
---|
| 88 | ;
|
---|
| 89 | N DATA
|
---|
| 90 | S DATA(.01)="@"
|
---|
| 91 | Q $$UPD^RGFIU(FILE,.RGDA,.DATA,.ERROR)
|
---|
| 92 | Q
|
---|
| 93 | ;
|
---|
| 94 | ADD(FILE,RGDA,DATA,ERROR,IEN) ;
|
---|
| 95 | ;Description: Creates a new record and files the data.
|
---|
| 96 | ; Input:
|
---|
| 97 | ; FILE - File or sub-file number
|
---|
| 98 | ; RGDA - New name for traditional FileMan DA array with same
|
---|
| 99 | ; meaning. Pass by reference. Only needed if adding to a
|
---|
| 100 | ; subfile.
|
---|
| 101 | ; DATA - Data array to file, pass by reference
|
---|
| 102 | ; Format: DATA(<field #>)=<value>
|
---|
| 103 | ; IEN - internal entry number to use (optional)
|
---|
| 104 | ;
|
---|
| 105 | ; Output:
|
---|
| 106 | ; Function Value - If no error then it returns the ien of the created record, else returns NULL.
|
---|
| 107 | ; RGDA - returns the ien of the new record, NULL if none created. If needed, pass by reference.
|
---|
| 108 | ; ERROR - optional error message - if needed, pass by reference
|
---|
| 109 | ;
|
---|
| 110 | ; Example: To add a record in subfile 2.0361 in the record with ien=353
|
---|
| 111 | ; with the field .01 value = 21:
|
---|
| 112 | ; S DATA(.01)=21,RGDA(1)=353 I $$ADD^RGFIU(2.0361,.RGDA,.DATA) W !,"DONE"
|
---|
| 113 | ;
|
---|
| 114 | ; Example: If creating a record not in a subfile, would look like this:
|
---|
| 115 | ; S DATA(.01)=21 I $$ADD^RGFIU(867,,.DATA) W !,"DONE"
|
---|
| 116 | ;
|
---|
| 117 | N FDA,FIELD,IENA,IENS,ERRORS
|
---|
| 118 | ;
|
---|
| 119 | ;IENS - Internal Entry Number String defined by FM
|
---|
| 120 | ;IENA - the Internal Entry Numebr Array defined by FM
|
---|
| 121 | ;FDA - the FDA array defined by FM
|
---|
| 122 | ;IEN - the ien of the new record
|
---|
| 123 | ;
|
---|
| 124 | S RGDA="+1"
|
---|
| 125 | S IENS=$$IENS^DILF(.RGDA)
|
---|
| 126 | S FIELD=0
|
---|
| 127 | F S FIELD=$O(DATA(FIELD)) Q:'FIELD D
|
---|
| 128 | .S FDA(FILE,IENS,FIELD)=$G(DATA(FIELD))
|
---|
| 129 | I $G(IEN) S IENA(1)=IEN
|
---|
| 130 | D UPDATE^DIE("","FDA","IENA","ERRORS(1)")
|
---|
| 131 | I +$G(DIERR) D
|
---|
| 132 | .S ERROR=$G(ERRORS(1,"DIERR",1,"TEXT",1))
|
---|
| 133 | .S IEN=""
|
---|
| 134 | E D
|
---|
| 135 | .S IEN=IENA(1)
|
---|
| 136 | .S ERROR=""
|
---|
| 137 | D CLEAN^DILF
|
---|
| 138 | S RGDA=IEN
|
---|
| 139 | Q IEN
|
---|
| 140 | ;
|
---|
| 141 | TESTVAL(FILE,FIELD,VALUE) ;
|
---|
| 142 | ;Description: returns 1 if VALUE is a valid value for FIELD in FILE
|
---|
| 143 | ;
|
---|
| 144 | Q:(('$G(FILE))!('$G(FIELD))) 0
|
---|
| 145 | ;
|
---|
| 146 | N DISPLAY,VALID,RESULT
|
---|
| 147 | S VALID=1
|
---|
| 148 | ;
|
---|
| 149 | ;if there is no external value then it is not valid
|
---|
| 150 | S DISPLAY=$$EXTERNAL^DILFD(FILE,FIELD,"F",VALUE)
|
---|
| 151 | I (DISPLAY="") S VALID=0
|
---|
| 152 | ;
|
---|
| 153 | I VALID,$$GET1^DID(FILE,FIELD,"","TYPE")'["POINTER" D
|
---|
| 154 | .D CHK^DIE(FILE,FIELD,,VALUE,.RESULT) I RESULT="^" S VALID=0 Q
|
---|
| 155 | Q VALID
|
---|
| 156 | ;
|
---|
| 157 | GETLINK(INSTIEN) ;
|
---|
| 158 | ;Description: Returns name of logical link for institition, given the institution ien. Returns "" if a logical link name not found.
|
---|
| 159 | ;
|
---|
| 160 | Q:'$G(INSTIEN) ""
|
---|
| 161 | ;
|
---|
| 162 | N LINK,I,LINKNAME
|
---|
| 163 | S LINKNAME=""
|
---|
| 164 | D
|
---|
| 165 | .;don't check if enabled - if shut down, message will be queued
|
---|
| 166 | .;Q:'$$CHKLL^HLUTIL(INSTIEN)
|
---|
| 167 | .;
|
---|
| 168 | .D LINK^HLUTIL3(INSTIEN,.LINK)
|
---|
| 169 | .S I=$O(LINK(0))
|
---|
| 170 | .I I,$L(LINK(I)) S LINKNAME=LINK(I)
|
---|
| 171 | Q LINKNAME
|
---|
| 172 | ;
|
---|
| 173 | ASKYESNO(PROMPT,DEFAULT) ;
|
---|
| 174 | ;Description: Displays PROMPT, appending '?'. Expects a YES NO response.
|
---|
| 175 | ;Input:
|
---|
| 176 | ; PROMPT - text to display as prompt. Appends '?'
|
---|
| 177 | ; DEFAULT - (optional) YES or NO. If not passed, defaults to YES
|
---|
| 178 | ;Output:
|
---|
| 179 | ; Function value: 1 if yes, 0 if no, "" if '^' entered or timeout
|
---|
| 180 | ;
|
---|
| 181 | N DIR,Y
|
---|
| 182 | S DIR(0)="Y"
|
---|
| 183 | S DIR("A")=PROMPT
|
---|
| 184 | S DIR("B")=$S($G(DEFAULT)="NO":"NO",1:"YES")
|
---|
| 185 | D ^DIR
|
---|
| 186 | Q:$D(DIRUT) ""
|
---|
| 187 | Q Y
|
---|
| 188 | ;
|
---|
| 189 | EXC(RGEXC,RGERR,RGDFN,RGMSGID,RGSITE) ;
|
---|
| 190 | ;Description: Calls the MPI/PD Exception Handler
|
---|
| 191 | ;Inputs:
|
---|
| 192 | ; RGEXC - the exception type
|
---|
| 193 | ; RGERR - (optional) text
|
---|
| 194 | ; RGDFN - (optional) patient DFN
|
---|
| 195 | ; RGMSGID - (optional) HL7 message id
|
---|
| 196 | ; RGSITE - (optional) station # of site where the exception occurred
|
---|
| 197 | N ICN
|
---|
| 198 | I +$G(RGDFN) D
|
---|
| 199 | .S ICN=+$$GETICN^MPIF001(RGDFN)
|
---|
| 200 | .I ICN'>0 S ICN=""
|
---|
| 201 | .S RGERR=$G(RGERR)_" Patient Name: "_$E($$NAME(RGDFN),1,25)_" SSN: "_$$SSN(RGDFN)_" ICN: "_ICN
|
---|
| 202 | D EXC^RGHLLOG($G(RGEXC),$E($G(RGERR),1,235),$G(RGDFN),$G(RGMSGID),$G(RGSITE))
|
---|
| 203 | Q
|
---|
| 204 | ;
|
---|
| 205 | SSN(DFN) ;
|
---|
| 206 | ;Description: Function returns the patient's SSN, or "" on failure.
|
---|
| 207 | Q $$GETFIELD(2,.09,.DFN)
|
---|
| 208 | ;
|
---|
| 209 | NAME(DFN) ;
|
---|
| 210 | ;Description: Function returns the patient's NAME, or "" on failure.
|
---|
| 211 | Q $$GETFIELD(2,.01,.DFN)
|
---|
| 212 | ;
|
---|
| 213 | ICN(DFN) ;Return patient ICN
|
---|
| 214 | NEW RESULT
|
---|
| 215 | S RESULT=+$$GETICN^MPIF001($G(DFN))
|
---|
| 216 | I RESULT<0 Q ""
|
---|
| 217 | Q +RESULT
|
---|
| 218 | ;
|
---|
| 219 | DFN(ICN) ;Return patient IEN
|
---|
| 220 | NEW RESULT
|
---|
| 221 | I ICN'="" S ICN=+ICN
|
---|
| 222 | S RESULT=$$GETDFN^MPIF001($G(ICN))
|
---|
| 223 | I RESULT<0 Q ""
|
---|
| 224 | Q RESULT
|
---|
| 225 | ;
|
---|
| 226 | MPINODE(DFN) ;
|
---|
| 227 | N NODE
|
---|
| 228 | S NODE=$$MPINODE^MPIFAPI($G(DFN))
|
---|
| 229 | I +NODE=-1 S NODE=""
|
---|
| 230 | Q NODE
|
---|
| 231 | ;
|
---|
| 232 | GETALL(DFN,MPIDATA) ;
|
---|
| 233 | ;Descripition: Gets the MPI data and treating facility list
|
---|
| 234 | ;
|
---|
| 235 | ;Input:
|
---|
| 236 | ; DFN - patient ien
|
---|
| 237 | ;Output:
|
---|
| 238 | ; MPIDATA - output array (pass by reference)
|
---|
| 239 | ; "ICN") = <ICN>
|
---|
| 240 | ; "CHKSUM") = <ICN checksum>
|
---|
| 241 | ; "LOC") = <1 if ICN is local, 0 if national>
|
---|
| 242 | ; "CMOR") = <station number of CMOR>
|
---|
| 243 | ; "TF",<station number of TF>,"INSTIEN")=<ien of treating facility in Institution file>
|
---|
| 244 | ; "TF",<station number of TF>,"LASTDATE")=<date last treated>
|
---|
| 245 | ; "TF",<station number of TF>,"EVENT")=<ADT event reason (a pointer)>
|
---|
| 246 | ; "SUB") = <ien of subscriber list>
|
---|
| 247 | ;
|
---|
| 248 | N NODE,IEN,STAT,INST,LINK,I,HLL
|
---|
| 249 | ;
|
---|
| 250 | K MPIDATA
|
---|
| 251 | ;
|
---|
| 252 | ;get MPI data
|
---|
| 253 | S NODE=$$MPINODE^RGFIU(DFN)
|
---|
| 254 | S MPIDATA("ICN")=$P(NODE,"^"),MPIDATA("CHKSUM")=$P(NODE,"^",2),MPIDATA("LOC")=$P(NODE,"^",4),MPIDATA("CMOR")=$$STATNUM^RGFIU($P(NODE,"^",3)),MPIDATA("SUB")=$P(NODE,"^",5)
|
---|
| 255 | ;
|
---|
| 256 | ;get TF list
|
---|
| 257 | I MPIDATA("ICN") D
|
---|
| 258 | .N ARRAY,ITEM,NODE,STAT
|
---|
| 259 | .Q:$$QUERYTF^VAFCTFU1(MPIDATA("ICN"),"ARRAY")
|
---|
| 260 | .S ITEM=0
|
---|
| 261 | .F S ITEM=$O(ARRAY(ITEM)) Q:'ITEM D
|
---|
| 262 | ..S NODE=ARRAY(ITEM)
|
---|
| 263 | ..S STAT=$$STATNUM^RGFIU($P(NODE,"^"))
|
---|
| 264 | ..Q:'STAT
|
---|
| 265 | ..S MPIDATA("TF",STAT,"INSTIEN")=$P(NODE,"^",1)
|
---|
| 266 | ..S MPIDATA("TF",STAT,"LASTDATE")=$P(NODE,"^",2)
|
---|
| 267 | ..S MPIDATA("TF",STAT,"EVENT")=$P(NODE,"^",3)
|
---|
| 268 | Q
|
---|