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