1 | VAFHAPV1 ;ALB/RJS - INPATIENT PV1 SEGMENT ; 10/8/04 11:28am
|
---|
2 | ;;5.3;Registration;**91,209,190,298,494,621**;Aug 13, 1993
|
---|
3 | ;
|
---|
4 | ;The DGBUILD entry point is call used internally by MAS software
|
---|
5 | ;to build a PV1 Segment for deleted Admissions. The DGPMP
|
---|
6 | ;variable, available from the DGPM Event Driver at the time of
|
---|
7 | ;the deletion, makes it possible to construct a partial PV1 segment
|
---|
8 | ;for the deleted record.
|
---|
9 | ;
|
---|
10 | ;06/29/00 ACS - Added sequence 21 (physical treating specialty - ward
|
---|
11 | ;location) and sequence 39 (facility + suffix).
|
---|
12 | ;
|
---|
13 | EN(DFN,VAFHDT,VAFSTR,IEN,ALTVISID,SETID,VAFDIAG) ;
|
---|
14 | ;
|
---|
15 | ;This Entry Point builds the HL7 PV1 segment for inpatients.
|
---|
16 | ;
|
---|
17 | ;DFN, VAFHDT, & VAFSTR are the required variables.
|
---|
18 | ;
|
---|
19 | ; DFN = IEN of Patient File
|
---|
20 | ; VAFHDT = Date/Time of Patient Movement
|
---|
21 | ; VAFSTR = HL7 Fields Requested e.g. ",3,7,10"
|
---|
22 | ;
|
---|
23 | ;IEN, ALTVISID, SETID are the optional variables
|
---|
24 | ;
|
---|
25 | ;The optional variable IEN is used for Discharge movements
|
---|
26 | ;because if only Date/Time is passed for a Discharge movement
|
---|
27 | ;no useful information is returned by VADPT.
|
---|
28 | ;
|
---|
29 | ;The optional ALTVISID variable is used to pass in a "Alternate.
|
---|
30 | ;Visit ID" this is a unique number that
|
---|
31 | ;identifies this Admission or episode of care
|
---|
32 | ;
|
---|
33 | ;The optional variable SETID can be used to differentiate
|
---|
34 | ;different sets of data, in messages that may contain multiple
|
---|
35 | ;events or messages.
|
---|
36 | ;
|
---|
37 | ;VAFDIAG, is a passed as a dotted variable. The inpatient diagnosis
|
---|
38 | ;is then returned in this variable.
|
---|
39 | ;
|
---|
40 | N VAFCOMP,RESULT,VAROOT,VA200
|
---|
41 | N CURRENT
|
---|
42 | D KVAR^VADPT
|
---|
43 | S VAFCOMP=$E(HLECH,1)
|
---|
44 | S VAROOT="CURRENT",VAIP("D")=VAFHDT,VA200=1
|
---|
45 | I ($G(IEN)'="") S VAIP("E")=IEN
|
---|
46 | D IN5^VADPT
|
---|
47 | S RESULT=$$BUILD()
|
---|
48 | I $G(ALTVISID)'="" S $P(RESULT,HLFS,51)=ALTVISID
|
---|
49 | I $G(SETID)'="" S $P(RESULT,HLFS,2)=SETID
|
---|
50 | I $G(SETID)="" S $P(RESULT,HLFS,2)=1
|
---|
51 | ;
|
---|
52 | EXIT ;
|
---|
53 | Q $G(RESULT)
|
---|
54 | ;
|
---|
55 | BUILD() ;Build the PV1 Segment
|
---|
56 | ;
|
---|
57 | ;Required Variables: Array "CURRENT" containing the results
|
---|
58 | ; of a call to VADPT
|
---|
59 | ;
|
---|
60 | ;This entry point is called to build the HL7 PV1 segment from
|
---|
61 | ;data returned by VADPT
|
---|
62 | ;
|
---|
63 | ;It returns a fully encoded HL7 segment, or a partially encoded HL7 segment containing patient class only
|
---|
64 | ;
|
---|
65 | N RESULT,SUBS
|
---|
66 | S RESULT="PV1"_HLFS_HLFS_"I"
|
---|
67 | I $G(CURRENT(1))="" Q RESULT
|
---|
68 | I $G(CURRENT(1))'="" D
|
---|
69 | . S VAFDIAG=CURRENT(9)
|
---|
70 | . ;
|
---|
71 | . ;--Ward, Room, Bed
|
---|
72 | . ;
|
---|
73 | . I VAFSTR[",3," D
|
---|
74 | . . N WARD,ROOM,BED
|
---|
75 | . . S WARD=$$HLQ^VAFHUTL($P(CURRENT(5),"^",2))
|
---|
76 | . . S ROOM=$$HLQ^VAFHUTL($P($P(CURRENT(6),"^",2),"-",1))
|
---|
77 | . . S BED=$$HLQ^VAFHUTL($P($P(CURRENT(6),"^",2),"-",2))
|
---|
78 | . . S $P(RESULT,HLFS,4)=$G(WARD)_VAFCOMP_$G(ROOM)_VAFCOMP_$G(BED)
|
---|
79 | . ;
|
---|
80 | . ;--Attending Physician
|
---|
81 | . ;
|
---|
82 | . I VAFSTR[",7," D
|
---|
83 | . . N ATTNDPTR,ATTNDING
|
---|
84 | . . S ATTNDPTR=$P(CURRENT(18),"^",1)
|
---|
85 | . . ;S:ATTNDPTR'="" ATTNDING=$$HLNAME^HLFNC($P(CURRENT(18),"^",2))
|
---|
86 | . . I $G(ATTNDPTR)'="" D
|
---|
87 | . . . N DGNAME S DGNAME("FILE")=200,DGNAME("IENS")=ATTNDPTR,DGNAME("FIELD")=.01
|
---|
88 | . . . S ATTNDING=$$HLNAME^XLFNAME(.DGNAME,"S",$E($G(HLECH)))
|
---|
89 | . . S $P(RESULT,HLFS,8)=$$HLQ^VAFHUTL($G(ATTNDPTR))_VAFCOMP_$$HLQ^VAFHUTL($G(ATTNDING))
|
---|
90 | . ;
|
---|
91 | . ;--Treating Specialty
|
---|
92 | . ;
|
---|
93 | . I VAFSTR[",10," D
|
---|
94 | . . N SPECPTR,SPECALTY
|
---|
95 | . . S SPECPTR=$P(CURRENT(8),"^",1)
|
---|
96 | . . S:$G(SPECPTR)'="" SPECALTY=$P($G(^DIC(45.7,SPECPTR,0)),"^",2)
|
---|
97 | . . S $P(RESULT,HLFS,11)=$$HLQ^VAFHUTL($G(SPECALTY))
|
---|
98 | . ;
|
---|
99 | . ;--Previous Patient Location
|
---|
100 | . I VAFSTR["6" D
|
---|
101 | . . N WARD,ROOM,BED,ROOMPTR,ROOMBED,MOVEMENT
|
---|
102 | . . S WARD=$$HLQ^VAFHUTL($P(CURRENT(15,4),"^",2))
|
---|
103 | . . S MOVEMENT=$G(CURRENT(15))
|
---|
104 | . . I MOVEMENT D
|
---|
105 | . . . S ROOMPTR=$P(^DGPM(MOVEMENT,0),"^",7)
|
---|
106 | . . . I ROOMPTR D
|
---|
107 | . . . . S ROOMBED=$P(^DG(405.4,ROOMPTR,0),"^",1)
|
---|
108 | . . . . I (ROOMBED'="") D
|
---|
109 | . . . . . S ROOM=$P(ROOMBED,"-",1)
|
---|
110 | . . . . . S BED=$P(ROOMBED,"-",2)
|
---|
111 | . . S $P(RESULT,HLFS,7)=$$HLQ^VAFHUTL($G(WARD))_VAFCOMP_$$HLQ^VAFHUTL($G(ROOM))_VAFCOMP_$$HLQ^VAFHUTL($G(BED))
|
---|
112 | . ;
|
---|
113 | . ;-- Patient Type
|
---|
114 | . I VAFSTR["18" D
|
---|
115 | . .I +$G(^DPT(DFN,"TYPE")) DO
|
---|
116 | . . .S $P(RESULT,HLFS,19)=$P($G(^DG(391,+^("TYPE"),0)),"^",1)
|
---|
117 | . .E S $P(RESULT,HLFS,19)=HLQ
|
---|
118 | . ;
|
---|
119 | . ;--Physical Treating Specialty - Ward Location
|
---|
120 | . ;
|
---|
121 | . I VAFSTR[",21," D
|
---|
122 | . . N VAWARD,VAPHYTS
|
---|
123 | . . ; get ward location pointer
|
---|
124 | . . S VAWARD=$P($G(CURRENT(5)),"^",1) Q:VAWARD=""
|
---|
125 | . . ; get ward treating specialty pointer
|
---|
126 | . . S VAPHYTS=$P($G(^DIC(42,VAWARD,0)),"^",12)
|
---|
127 | . . S $P(RESULT,HLFS,22)=$S(VAPHYTS]"":VAPHYTS,1:HLQ)
|
---|
128 | . . Q
|
---|
129 | . ;
|
---|
130 | . ;--Facility and Suffix
|
---|
131 | . I VAFSTR[",39," D
|
---|
132 | . . N VAFIEN,VAWARD,VAMEDCTR,VAFACSUF
|
---|
133 | . . ; get patient movement IEN, ward loc ptr, med center div ptr
|
---|
134 | . . S VAFIEN=$G(CURRENT(1))
|
---|
135 | . . S VAWARD=$P($G(^DGPM(VAFIEN,0)),"^",6) Q:VAWARD=""
|
---|
136 | . . S VAMEDCTR=$P($G(^DIC(42,VAWARD,0)),"^",11) Q:VAMEDCTR=""
|
---|
137 | . . ; call below returns: inst pointer^inst name^station number w/suffix
|
---|
138 | . . S VAFACSUF=$$SITE^VASITE($G(CURRENT(3)),VAMEDCTR)
|
---|
139 | . . S VAFACSUF=$P(VAFACSUF,"^",3)
|
---|
140 | . . ; move data into the PV1 segment
|
---|
141 | . . S $P(RESULT,HLFS,40)=$S(VAFACSUF]"":VAFACSUF,1:HLQ)
|
---|
142 | . ;
|
---|
143 | . ;Discharge Disposition
|
---|
144 | . I VAFSTR[",36," D ;If Discharge Disposition requested
|
---|
145 | . .N DGDTYP
|
---|
146 | . .S DGDTYP=$P(CURRENT(17,3),"^") S $P(RESULT,HLFS,37)=DGDTYP
|
---|
147 | . ;
|
---|
148 | . ;--Admission Date
|
---|
149 | . ;
|
---|
150 | . I (VAFSTR["44") D
|
---|
151 | . . I ($P(CURRENT(13,1),"^",1)'="") S $P(RESULT,HLFS,45)=$$HLDATE^HLFNC($P(CURRENT(13,1),"^",1),"TS")
|
---|
152 | . . E S $P(RESULT,HLFS,45)=HLQ
|
---|
153 | . ;
|
---|
154 | . ;
|
---|
155 | . ;--Discharge Date
|
---|
156 | . ;
|
---|
157 | . I (VAFSTR["45") D
|
---|
158 | . . I ($P(CURRENT(17,1),"^",1)'="") S $P(RESULT,HLFS,46)=$$HLDATE^HLFNC($P(CURRENT(17,1),"^",1),"TS")
|
---|
159 | . . E S $P(RESULT,HLFS,46)=HLQ
|
---|
160 | ;
|
---|
161 | Q:$$TEST(7,RESULT,HLFS,VAFCOMP) RESULT
|
---|
162 | Q RESULT
|
---|
163 | DGBUILD(DGPMP,VAFSTR) ;
|
---|
164 | ;
|
---|
165 | ;Required Variables: DGPMP = 0 node of patient movement
|
---|
166 | ; VAFSTR = HL7 fields requested e.g.
|
---|
167 | ; ",3,7,10"
|
---|
168 | ;
|
---|
169 | ;This entry point builds an HL7 segment from data supplied
|
---|
170 | ;from the 0 node of the Patient movement file in the required
|
---|
171 | ;variable DGPMP. It is an internal PIMS call used to build
|
---|
172 | ;a PV1 segment when the record has already been deleted.
|
---|
173 | ;
|
---|
174 | ;The call returns a fully encoded PV1 segment or a partially encoded
|
---|
175 | ;PV1 segment containing only set id and patient class
|
---|
176 | ;
|
---|
177 | N WARD,BED,ROOM,ATTNDPTR,ATTNDING,SPECPTR,SPECALTY,TRANSACT
|
---|
178 | N ADMPTR,ADMSSN,VAFCOMP,RESULT
|
---|
179 | S RESULT="PV1"_HLFS_1_HLFS_"I" ;Inpatient
|
---|
180 | I $G(DGPMP)="" Q RESULT
|
---|
181 | S TRANSACT=$P(DGPMP,"^",2),VAFCOMP=$E(HLECH,1)
|
---|
182 | I TRANSACT=1 S VAFDIAG=$P(DGPMP,"^",10)
|
---|
183 | E S ADMPTR=$P(DGPMP,"^",14),ADMSSN=$G(^DGPM(ADMPTR,0)),VAFDIAG=$P(ADMSSN,"^",10)
|
---|
184 | ;
|
---|
185 | ;--Ward, Room, Bed
|
---|
186 | ;
|
---|
187 | I VAFSTR[",3," D
|
---|
188 | . N WARD,ROOM,BED
|
---|
189 | . ;
|
---|
190 | . ;--Check node 2 to see if it's a discharge movement
|
---|
191 | . ;
|
---|
192 | . ;
|
---|
193 | . I TRANSACT=3 D
|
---|
194 | . . S $P(RESULT,HLFS,4)=HLQ_VAFCOMP_HLQ_VAFCOMP_HLQ
|
---|
195 | . . ;
|
---|
196 | . . ;--All non discharge events are handled the same
|
---|
197 | . . ;
|
---|
198 | . I TRANSACT'=3 D
|
---|
199 | . . N WARDPTR,ROOMPTR,ROOM,WARD,BED
|
---|
200 | . . S WARDPTR=$P(DGPMP,"^",6)
|
---|
201 | . . S ROOMPTR=$P(DGPMP,"^",7)
|
---|
202 | . . I $G(WARDPTR)'="" S WARD=$P(^DIC(42,WARDPTR,0),"^",1)
|
---|
203 | . . I $G(ROOMPTR)'="" D
|
---|
204 | . . . S ROOM=$P(^DG(405.4,ROOMPTR,0),"^",1)
|
---|
205 | . . . S BED=$P(ROOM,"-",2)
|
---|
206 | . . . S ROOM=$P(ROOM,"-",1)
|
---|
207 | . . S $P(RESULT,HLFS,4)=$$HLQ^VAFHUTL($G(WARD))_VAFCOMP_$$HLQ^VAFHUTL($G(ROOM))_VAFCOMP_$$HLQ^VAFHUTL($G(BED))
|
---|
208 | . ;
|
---|
209 | . ;--Attending Physician
|
---|
210 | . ;
|
---|
211 | I VAFSTR[",7," D
|
---|
212 | . N ATTNDPTR,ATTNDING
|
---|
213 | . S ATTNDPTR=$P(DGPMP,"^",19)
|
---|
214 | . I $G(ATTNDPTR)'="" D
|
---|
215 | . . N DGNAME S DGNAME("FILE")=200,DGNAME("IENS")=ATTNDPTR,DGNAME("FIELD")=.01
|
---|
216 | . . S ATTNDING=$$HLNAME^XLFNAME(.DGNAME,"S",$E($G(HLECH)))
|
---|
217 | . S $P(RESULT,HLFS,8)=$$HLQ^VAFHUTL($G(ATTNDPTR))_VAFCOMP_$$HLQ^VAFHUTL($G(ATTNDING))
|
---|
218 | . ;
|
---|
219 | . ;--Treating Specialty
|
---|
220 | . ;
|
---|
221 | I VAFSTR[",10," D
|
---|
222 | . N SPECPTR,SPECALTY
|
---|
223 | . S SPECPTR=$P(DGPMP,"^",9)
|
---|
224 | . I $G(SPECPTR)'="" S SPECALTY=$P($G(^DIC(45.7,SPECPTR,0)),"^",2)
|
---|
225 | . S $P(RESULT,HLFS,11)=$$HLQ^VAFHUTL($G(SPECALTY))
|
---|
226 | ;
|
---|
227 | ;-- Patient Type
|
---|
228 | I VAFSTR["18" D
|
---|
229 | . I +$G(^DPT(DFN,"TYPE")) DO
|
---|
230 | . . S $P(RESULT,HLFS,19)=$P($G(^DG(391,+^("TYPE"),0)),"^",1)
|
---|
231 | . E S $P(RESULT,HLFS,19)=HLQ
|
---|
232 | ;
|
---|
233 | ;--Physical Treating Specialty - Ward Location
|
---|
234 | ;
|
---|
235 | I VAFSTR[",21," D
|
---|
236 | . N VAWARD,VAPHYTS
|
---|
237 | . ; get ward location pointer
|
---|
238 | . S VAWARD=$P($G(DGPMP),"^",6) Q:VAWARD=""
|
---|
239 | . ; get ward treating specialty
|
---|
240 | . S VAPHYTS=$P($G(^DIC(42,VAWARD,0)),"^",12)
|
---|
241 | . S $P(RESULT,HLFS,22)=$S(VAPHYTS]"":VAPHYTS,1:HLQ)
|
---|
242 | . Q
|
---|
243 | ;
|
---|
244 | ;--Facility and Suffix
|
---|
245 | ;
|
---|
246 | N VAWARD,VAMEDCTR,VAFACSUF
|
---|
247 | I VAFSTR[",39," D
|
---|
248 | . ; get ward location pointer, med center div pointer
|
---|
249 | . S $P(RESULT,HLFS,40)=HLQ
|
---|
250 | . S VAWARD=$P($G(DGPMP),"^",6) Q:VAWARD=""
|
---|
251 | . S VAMEDCTR=$P($G(^DIC(42,VAWARD,0)),"^",11) Q:VAMEDCTR=""
|
---|
252 | . ; call below returns: inst pointer^inst name^station number w/suffix
|
---|
253 | . S VAFACSUF=$$SITE^VASITE($P(DGPMP,"^",1),VAMEDCTR)
|
---|
254 | . S VAFACSUF=$P(VAFACSUF,"^",3)
|
---|
255 | . ; move data into the PV1 segment
|
---|
256 | . S $P(RESULT,HLFS,40)=$S(VAFACSUF]"":VAFACSUF,1:HLQ)
|
---|
257 | ;
|
---|
258 | ;Discharge Disposition
|
---|
259 | ;
|
---|
260 | I VAFSTR[",36," D ;If Discharge Disposition requested
|
---|
261 | . N DGDTYP
|
---|
262 | . S DGDTYP=$P($G(DGPMP),"^",18) ;Discharge type pointer in movement file
|
---|
263 | . S $P(RESULT,HLFS,37)=DGDTYP ;store in variable
|
---|
264 | ;
|
---|
265 | ;--Admission Date
|
---|
266 | ;
|
---|
267 | I (VAFSTR["44") D
|
---|
268 | . I $P(DGPMP,"^",1)="" S $P(RESULT,HLFS,45)=HLQ
|
---|
269 | . E S $P(RESULT,HLFS,45)=$$HLDATE^HLFNC($P(DGPMP,"^",1),"TS")
|
---|
270 | ;
|
---|
271 | Q:$$TEST(8,RESULT,HLFS,VAFCOMP) RESULT
|
---|
272 | Q RESULT
|
---|
273 | TEST(COUNTER,STRING,FIELDSEP,COMPNENT) ;
|
---|
274 | N CHAR,LENGTH
|
---|
275 | S LENGTH=$L(STRING)
|
---|
276 | NEXT ;
|
---|
277 | I COUNTER>LENGTH Q 0
|
---|
278 | S CHAR=$E(STRING,COUNTER,COUNTER)
|
---|
279 | I $G(CHAR)=FIELDSEP!($G(CHAR)=COMPNENT) S COUNTER=COUNTER+1 G NEXT
|
---|
280 | Q 1
|
---|