1 | BMXUTL1 ; IHS/OIT/HMW - UTIL: PATIENT DEMOGRAPHICS ;
|
---|
2 | ;;2.31;BMX;;Jul 25, 2011
|
---|
3 | ;;Stolen from:* MICHAEL REMILLARD, DDS * ALASKA NATIVE MEDICAL CENTER *
|
---|
4 | ;; UTILITY: PATIENT DEMOGRAPHICS.
|
---|
5 | ;
|
---|
6 | ;
|
---|
7 | ;----------
|
---|
8 | NAME(DFN,ORDER) ;EP
|
---|
9 | ;---> Return text of Patient Name.
|
---|
10 | ;---> Parameters:
|
---|
11 | ; 1 - DFN (req) Patient's IEN (DFN).
|
---|
12 | ; 2 - ORDER (opt) ""/0=Last,First 2=First Only
|
---|
13 | ; 1=First Last 3=Last Only
|
---|
14 | ;
|
---|
15 | Q:'$G(DFN) "NO PATIENT"
|
---|
16 | Q:'$D(^DPT(DFN,0)) "Unknown"
|
---|
17 | N X S X=$P(^DPT(DFN,0),U)
|
---|
18 | Q:'$G(ORDER) X
|
---|
19 | S X=$$FL(X)
|
---|
20 | Q:ORDER=1 X
|
---|
21 | Q:ORDER=2 $P(X," ")
|
---|
22 | Q:ORDER=3 $P(X," ",2)
|
---|
23 | Q "UNKNOWN ORDER"
|
---|
24 | ;
|
---|
25 | ;
|
---|
26 | ;----------
|
---|
27 | FL(X) ;EP
|
---|
28 | ;---> Switch First and Last Names.
|
---|
29 | Q $P($P(X,",",2)," ")_" "_$P(X,",")
|
---|
30 | ;
|
---|
31 | ;
|
---|
32 | ;----------
|
---|
33 | DOB(DFN) ;EP
|
---|
34 | ;---> Return Patient's Date of Birth in Fileman format.
|
---|
35 | ;---> Parameters:
|
---|
36 | ; 1 - DFN (req) Patient's IEN (DFN).
|
---|
37 | ;
|
---|
38 | Q:'$G(DFN) "NO PATIENT"
|
---|
39 | Q:'$P($G(^DPT(DFN,0)),U,3) "NOT ENTERED"
|
---|
40 | Q $P(^DPT(DFN,0),U,3)
|
---|
41 | ;
|
---|
42 | ;
|
---|
43 | ;----------
|
---|
44 | DOBF(DFN,BMXDT,BMXNOA) ;EP
|
---|
45 | ;---> Date of Birth formatted "09-Sep-1994 (35 Months)"
|
---|
46 | ;---> Parameters:
|
---|
47 | ; 1 - DFN (req) Patient's IEN (DFN).
|
---|
48 | ; 2 - BMXDT (opt) Date on which Age should be calculated.
|
---|
49 | ; 3 - BMXNOA (opt) 1=No age (don't append age).
|
---|
50 | ;
|
---|
51 | N X,Y
|
---|
52 | S X=$$DOB($G(DFN))
|
---|
53 | Q:'X X
|
---|
54 | S X=$$TXDT1^BMXUTL5(X)
|
---|
55 | Q:$G(BMXNOA) X
|
---|
56 | S Y=$$AGEF(DFN,$G(BMXDT))
|
---|
57 | S:Y["DECEASED" Y="DECEASED"
|
---|
58 | S X=X_" ("_Y_")"
|
---|
59 | Q X
|
---|
60 | ;
|
---|
61 | ;
|
---|
62 | ;----------
|
---|
63 | AGE(DFN,BMXZ,BMXDT) ;EP
|
---|
64 | ;---> Return Patient's Age.
|
---|
65 | ;---> Parameters:
|
---|
66 | ; 1 - DFN (req) IEN in PATIENT File.
|
---|
67 | ; 2 - BMXZ (opt) BMXZ=1,2,3 1=years, 2=months, 3=days.
|
---|
68 | ; 2 will be assumed if not passed.
|
---|
69 | ; 3 - BMXDT (opt) Date on which Age should be calculated.
|
---|
70 | ;
|
---|
71 | N BMXDOB,X,X1,X2 S:$G(BMXZ)="" BMXZ=2
|
---|
72 | Q:'$G(DFN) "NO PATIENT"
|
---|
73 | S BMXDOB=$$DOB(DFN)
|
---|
74 | Q:'BMXDOB "Unknown"
|
---|
75 | I '$G(BMXDT)&($$DECEASED(DFN)) D Q X
|
---|
76 | .S X="DECEASED: "_$$TXDT1^BMXUTL5(+^DPT(DFN,.35))
|
---|
77 | S:'$G(DT) DT=$$DT^XLFDT
|
---|
78 | S:'$G(BMXDT) BMXDT=DT
|
---|
79 | Q:BMXDT<BMXDOB "NOT BORN"
|
---|
80 | ;
|
---|
81 | ;---> Age in Years.
|
---|
82 | N BMXAGEY,BMXAGEM,BMXD1,BMXD2,BMXM1,BMXM2,BMXY1,BMXY2
|
---|
83 | S BMXM1=$E(BMXDOB,4,7),BMXM2=$E(BMXDT,4,7)
|
---|
84 | S BMXY1=$E(BMXDOB,1,3),BMXY2=$E(BMXDT,1,3)
|
---|
85 | S BMXAGEY=BMXY2-BMXY1 S:BMXM2<BMXM1 BMXAGEY=BMXAGEY-1
|
---|
86 | S:BMXAGEY<1 BMXAGEY="<1"
|
---|
87 | Q:BMXZ=1 BMXAGEY
|
---|
88 | ;
|
---|
89 | ;---> Age in Months.
|
---|
90 | S BMXD1=$E(BMXM1,3,4),BMXM1=$E(BMXM1,1,2)
|
---|
91 | S BMXD2=$E(BMXM2,3,4),BMXM2=$E(BMXM2,1,2)
|
---|
92 | S BMXAGEM=12*BMXAGEY
|
---|
93 | I BMXM2=BMXM1&(BMXD2<BMXD1) S BMXAGEM=BMXAGEM+12
|
---|
94 | I BMXM2>BMXM1 S BMXAGEM=BMXAGEM+BMXM2-BMXM1
|
---|
95 | I BMXM2<BMXM1 S BMXAGEM=BMXAGEM+BMXM2+(12-BMXM1)
|
---|
96 | S:BMXD2<BMXD1 BMXAGEM=BMXAGEM-1
|
---|
97 | Q:BMXZ=2 BMXAGEM
|
---|
98 | ;
|
---|
99 | ;---> Age in Days.
|
---|
100 | S X1=BMXDT,X2=BMXDOB
|
---|
101 | D ^%DTC
|
---|
102 | Q X
|
---|
103 | ;
|
---|
104 | ;
|
---|
105 | ;----------
|
---|
106 | AGEF(DFN,BMXDT) ;EP
|
---|
107 | ;---> Age formatted "35 Months" or "23 Years"
|
---|
108 | ;---> Parameters:
|
---|
109 | ; 1 - DFN (req) Patient's IEN (DFN).
|
---|
110 | ; 2 - BMXDT (opt) Date on which Age should be calculated.
|
---|
111 | ;
|
---|
112 | N Y
|
---|
113 | S Y=$$AGE(DFN,2,$G(BMXDT))
|
---|
114 | Q:Y["DECEASED" Y
|
---|
115 | Q:Y["NOT BORN" Y
|
---|
116 | ;
|
---|
117 | ;---> If over 60 months, return years.
|
---|
118 | Q:Y>60 $$AGE(DFN,1,$G(BMXDT))_" years"
|
---|
119 | ;
|
---|
120 | ;---> If under 1 month return days.
|
---|
121 | I Y<1 S Y=$$AGE(DFN,3,$G(BMXDT)) Q Y_$S(Y=1:" day",1:" days")
|
---|
122 | ;
|
---|
123 | ;---> Return months
|
---|
124 | Q Y_$S(Y=1:" month",1:" months")
|
---|
125 | ;
|
---|
126 | ;
|
---|
127 | ;----------
|
---|
128 | DECEASED(DFN,BMXDT) ;EP
|
---|
129 | ;---> Return 1 if patient is deceased, 0 if not deceased.
|
---|
130 | ;---> Parameters:
|
---|
131 | ; 1 - DFN (req) Patient's IEN (DFN).
|
---|
132 | ; 2 - BMXDT (opt) If BMXDT=1 return Date of Death (Fileman format).
|
---|
133 | ;
|
---|
134 | Q:'$G(DFN) 0
|
---|
135 | N X S X=+$G(^DPT(DFN,.35))
|
---|
136 | Q:'X 0
|
---|
137 | Q:'$G(BMXDT) 1
|
---|
138 | Q X
|
---|
139 | ;
|
---|
140 | ;
|
---|
141 | ;----------
|
---|
142 | SEX(DFN,PRON) ;EP
|
---|
143 | ;---> Return "F" is patient is female, "M" if male.
|
---|
144 | ;---> Parameters:
|
---|
145 | ; 1 - DFN (req) Patient's IEN (DFN).
|
---|
146 | ; 2 - PRON (opt) Pronoun: 1=he/she, 2=him/her,3=his,her
|
---|
147 | ;
|
---|
148 | Q:'$G(DFN) ""
|
---|
149 | Q:'$D(^DPT(DFN,0)) ""
|
---|
150 | N X S X=$P(^DPT(DFN,0),U,2)
|
---|
151 | Q:'$G(PRON) X
|
---|
152 | I PRON=1 Q $S(X="F":"she",1:"he")
|
---|
153 | I PRON=2 Q $S(X="F":"her",1:"him")
|
---|
154 | I PRON=3 Q $S(X="F":"her",1:"his")
|
---|
155 | Q X
|
---|
156 | ;
|
---|
157 | ;
|
---|
158 | ;----------
|
---|
159 | SEXW(DFN) ;EP
|
---|
160 | ;---> Return Patient sex: "Female"/"Male".
|
---|
161 | ;---> Parameters:
|
---|
162 | ; 1 - DFN (req) Patient's IEN (DFN).
|
---|
163 | ;
|
---|
164 | Q:$$SEX(DFN)="M" "Male"
|
---|
165 | Q:$$SEX(DFN)="F" "Female"
|
---|
166 | Q "Unknown"
|
---|
167 | ;
|
---|
168 | ;
|
---|
169 | ;----------
|
---|
170 | NAMAGE(DFN) ;EP
|
---|
171 | ;---> Return Patient Name concatenated with age.
|
---|
172 | ;---> Parameters:
|
---|
173 | ; 1 - DFN (req) Patient's IEN (DFN).
|
---|
174 | ;
|
---|
175 | Q:'$G(DFN) "NO PATIENT"
|
---|
176 | Q $$NAME(DFN)_" ("_$$AGE(DFN)_"y/o)"
|
---|
177 | ;
|
---|
178 | ;
|
---|
179 | ;----------
|
---|
180 | SSN(DFN) ;EP
|
---|
181 | ;---> Return Social Security Number (SSN).
|
---|
182 | ;---> Parameters:
|
---|
183 | ; 1 - DFN (req) Patient's IEN (DFN).
|
---|
184 | N X
|
---|
185 | Q:'$G(DFN) "NO PATIENT"
|
---|
186 | Q:'$D(^DPT(DFN,0)) "Unknown"
|
---|
187 | S X=$P(^DPT(DFN,0),U,9)
|
---|
188 | Q:X']"" "Unknown"
|
---|
189 | Q X
|
---|
190 | ;
|
---|
191 | ;
|
---|
192 | ;----------
|
---|
193 | HRCN(DFN,DUZ2,AGD) ;EP
|
---|
194 | ;---> Return IHS Health Record Number.
|
---|
195 | ;---> Parameters:
|
---|
196 | ; 1 - DFN (req) Patient's IEN (DFN).
|
---|
197 | ; 2 - DUZ2 (opt) User's Site/Location IEN. If no DUZ2
|
---|
198 | ; provided, function will look for DUZ(2).
|
---|
199 | ; 3 - AGD (opt) If AGD=1 return HRCN with no dashes.
|
---|
200 | ;
|
---|
201 | ;
|
---|
202 | S:'$G(DUZ2) DUZ2=$G(DUZ(2))
|
---|
203 | Q:'$G(DFN)!('$G(DUZ2)) "Unknown1"
|
---|
204 | Q:'$D(^AUPNPAT(DFN,41,DUZ2,0)) "Unknown2"
|
---|
205 | Q:'+$P(^AUPNPAT(DFN,41,DUZ2,0),"^",2) "Unknown3"
|
---|
206 | N Y S Y=$P(^AUPNPAT(DFN,41,DUZ2,0),"^",2)
|
---|
207 | Q:$G(AGD) Y
|
---|
208 | Q:'+Y Y
|
---|
209 | I $L(Y)=7 D Q Y
|
---|
210 | .S Y=$TR("123-45-67",1234567,Y)
|
---|
211 | S Y=$E("00000",0,6-$L(Y))_Y
|
---|
212 | S Y=$TR("12-34-56",123456,Y)
|
---|
213 | Q Y
|
---|
214 | ;
|
---|
215 | ;
|
---|
216 | ;----------
|
---|
217 | PHONE(AGDFN,AGOFF) ;EP
|
---|
218 | ;---> Return patient's home phone number.
|
---|
219 | ;---> Parameters:
|
---|
220 | ; 1 - AGDFN (req) Patient's IEN (DFN).
|
---|
221 | ; 2 - AGOFF (opt) =1 will return Patient's Office Phone.
|
---|
222 | ;
|
---|
223 | Q:'$G(AGDFN) "Error: No DFN"
|
---|
224 | Q $P($G(^DPT(AGDFN,.13)),U,$S($G(AGOFF):2,1:1))
|
---|
225 | ;
|
---|
226 | ;
|
---|
227 | ;----------
|
---|
228 | STREET(DFN) ;EP
|
---|
229 | ;---> Return patient's street address.
|
---|
230 | ;---> Parameters:
|
---|
231 | ; 1 - DFN (req) Patient's IEN (DFN).
|
---|
232 | ;
|
---|
233 | Q:'$G(DFN) "No Patient"
|
---|
234 | Q:'$D(^DPT(DFN,.11)) ""
|
---|
235 | Q:$P(^DPT(DFN,.11),U)="" ""
|
---|
236 | Q $P(^DPT(DFN,.11),U)
|
---|
237 | ;
|
---|
238 | ;
|
---|
239 | ;----------
|
---|
240 | CITY(DFN) ;EP
|
---|
241 | ;---> Return patient's city.
|
---|
242 | ;---> Parameters:
|
---|
243 | ; 1 - DFN (req) Patient's IEN (DFN).
|
---|
244 | ;
|
---|
245 | Q:'$G(DFN) "No Patient"
|
---|
246 | Q:'$D(^DPT(DFN,.11)) ""
|
---|
247 | Q:$P(^DPT(DFN,.11),U,4)="" ""
|
---|
248 | Q $P(^DPT(DFN,.11),U,4)
|
---|
249 | ;
|
---|
250 | ;
|
---|
251 | ;----------
|
---|
252 | STATE(DFN,NOTEXT) ;EP
|
---|
253 | ;---> Return patient's state.
|
---|
254 | ;---> Parameters:
|
---|
255 | ; 1 - DFN (req) Patient's IEN (DFN).
|
---|
256 | ; 2 - NOTEXT (opt) If NOTEXT=1 return only the State IEN.
|
---|
257 | ; If NOTEXT=2 return IEN|Text.
|
---|
258 | ;
|
---|
259 | Q:'$G(DFN) ""
|
---|
260 | N Y S Y=$P($G(^DPT(DFN,.11)),U,5)
|
---|
261 | Q:$G(NOTEXT)=1 Y
|
---|
262 | Q:$G(NOTEXT)=2 Y_"|"_$$GET^BMXG(1,Y)
|
---|
263 | Q $$GET^BMXG(1,Y)
|
---|
264 | ;
|
---|
265 | ;
|
---|
266 | ;----------
|
---|
267 | ZIP(DFN) ;EP
|
---|
268 | ;---> Return patient's zipcode.
|
---|
269 | ;---> Parameters:
|
---|
270 | ; 1 - DFN (req) Patient's IEN (DFN).
|
---|
271 | ;
|
---|
272 | Q:'$G(DFN) "No Patient"
|
---|
273 | Q:'$D(^DPT(DFN,.11)) ""
|
---|
274 | Q:$P(^DPT(DFN,.11),U,6)="" ""
|
---|
275 | Q $P(^DPT(DFN,.11),U,6)
|
---|
276 | ;
|
---|
277 | ;
|
---|
278 | ;----------
|
---|
279 | CTYSTZ(DFN) ;EP
|
---|
280 | ;---> Return patient's city, state zip.
|
---|
281 | ;---> Parameters:
|
---|
282 | ; 1 - DFN (req) Patient's IEN (DFN).
|
---|
283 | ;
|
---|
284 | Q:'$G(DFN) "No Patient"
|
---|
285 | Q $$CITY(DFN)_", "_$$STATE(DFN)_" "_$$ZIP(DFN)
|
---|
286 | ;
|
---|
287 | ;
|
---|
288 | CURCOM(DFN,NOTEXT) ;EP
|
---|
289 | ;---> Return patient's Current Community IEN or Text.
|
---|
290 | ;---> (Item 6 on page 1 of Registration).
|
---|
291 | ;---> Parameters:
|
---|
292 | ; 1 - DFN (req) Patient's IEN (DFN).
|
---|
293 | ; 2 - NOTEXT (opt) If NOTEXT=1 return only the Current Comm IEN.
|
---|
294 | ; If NOTEXT=2 return IEN|Text.
|
---|
295 | ;
|
---|
296 | Q:'$G(DFN) "No Patient"
|
---|
297 | Q:'$D(^AUPNPAT(DFN,11)) "" ;"Unknown1"
|
---|
298 | ;
|
---|
299 | N X,Y,Z
|
---|
300 | S X=^AUPNPAT(DFN,11)
|
---|
301 | ;---> Set Y=Pointer (IEN in ^AUTTCOM, piece 17), Z=Text (piece 18).
|
---|
302 | S Y=$P(X,U,17),Z=$P(X,U,18)
|
---|
303 | ;---> If both Pointer and Text are null, return "Unknown2".
|
---|
304 | Q:('Y&(Z="")) "" ;"Unknown2"
|
---|
305 | ;
|
---|
306 | ;---> If Y is null or a bad pointer, set Y="".
|
---|
307 | I Y<1!('$D(^AUTTCOM(+Y,0))) S Y=""
|
---|
308 | ;
|
---|
309 | ;---> If no valid pointer and if Text (pc 18) exists in the
|
---|
310 | ;---> Community file, then set Y=IEN in ^AUTTCOM(.
|
---|
311 | I Y<1,$D(^AUTTCOM("B",Z)) S Y=$O(^AUTTCOM("B",Z,0))
|
---|
312 | ;
|
---|
313 | Q:'$D(^AUTTCOM(+Y,0)) "" ;"Unknown3"
|
---|
314 | Q:$G(NOTEXT)=1 Y
|
---|
315 | Q:$G(NOTEXT)=2 Y_"|"_$$GET^BMXG(2,Y)
|
---|
316 | Q $$GET^BMXG(2,Y)
|
---|
317 | ;
|
---|
318 | ;
|
---|
319 | ;----------
|
---|
320 | PERSON(X,ORDER) ;EP
|
---|
321 | ;---> Return person's name from File #200.
|
---|
322 | ;---> Parameters:
|
---|
323 | ; 1 - X (req) Person's IEN in New Person File #200.
|
---|
324 | ; 2 - ORDER (opt) ""/0=Last,First 1=First Last
|
---|
325 | ;
|
---|
326 | Q:'X "Unknown"
|
---|
327 | Q:'$D(^VA(200,X,0)) "Unknown"
|
---|
328 | N Y S Y=$P(^VA(200,X,0),U)
|
---|
329 | Q:'$G(ORDER) Y
|
---|
330 | Q $$FL(Y)
|
---|