1 | VEPER7SG ;DOQ-IT HL7 Segment generation routine ; 10/11/05 10:22am
|
---|
2 | ;;1.0;VOE;;Nov 16, 2005
|
---|
3 | FHS(SF,FHSC,BHSC,PROD,FNM,FNMID) ;File Header Segment
|
---|
4 | ;
|
---|
5 | ; SF - Sending Facility
|
---|
6 | ; FHSC - File Header Segment id & count *** PASS BY REFERENCE ***
|
---|
7 | ; BHSC - Batch Header Segment Count ***
|
---|
8 | ; PROD - Production indicator
|
---|
9 | ; FNM - File name
|
---|
10 | ; FNMID - Facility UPIN #
|
---|
11 | ;
|
---|
12 | S FNM=$P(FNM,"\",3) ;***CBF*** RESET FNM
|
---|
13 | S TP=$S(PROD:"PROD",1:"TEST")
|
---|
14 | S FHSC=FHSC+1,BHSC=0
|
---|
15 | W "FHS|^~\&|VISTAEHR|"_SF_"|||||"_FNMID_"|"_TP_"|"_FNM_"||||||||||"
|
---|
16 | W ! Q
|
---|
17 | ;
|
---|
18 | ;
|
---|
19 | BHS(SF,BHSC,MSHC) ;Batch Header Segment
|
---|
20 | ;
|
---|
21 | S BHSC=BHSC+1,MSHC=0
|
---|
22 | W "BHS|^~\&|VISTAEHR|"_SF_"|||||||BHS"_$E(1000+BHSC,2,4)_"|||||"
|
---|
23 | W ! Q
|
---|
24 | ;
|
---|
25 | MSH(MC,TE,SF,MSHC) ;Message Header Segment
|
---|
26 | ;
|
---|
27 | ; MC - Message code first piece of MSH-9
|
---|
28 | ; TE - Trigger Event second piece of MSH-9
|
---|
29 | ; MSHC - Message Control ID Counter
|
---|
30 | ;
|
---|
31 | N X,C1,CC,DTTM
|
---|
32 | S DTTM=$$DTCALC("T","N")_"00"
|
---|
33 | S MSHC=MSHC+1
|
---|
34 | W "MSH|^~\&|VISTAEHR|"_SF_"|DOQ-IT||"_DTTM_"||"_MC_"^"_TE_"|MSG"_$E(100000+MSHC,2,99)_"|P|2.5||||"
|
---|
35 | W ! Q
|
---|
36 | ;
|
---|
37 | EVN(EVNTYPE) ;EVENT TYPE SEGMENT
|
---|
38 | ;
|
---|
39 | N REC
|
---|
40 | S REC=""
|
---|
41 | S $P(REC,"|")=EVNTYPE
|
---|
42 | S $P(REC,"|",2)=DTZ
|
---|
43 | W "EVN|"_REC
|
---|
44 | W ! Q
|
---|
45 | ;
|
---|
46 | ZCR ;Primary Practice segment data
|
---|
47 | ;
|
---|
48 | N REC
|
---|
49 | S REC=""
|
---|
50 | ; Pieces 1-11 Are Primary Clinic Information
|
---|
51 | S $P(REC,"|",1)=CONFIG(19904.5,CFGIEN,.02) ; Group Upin
|
---|
52 | S $P(REC,"|",2)=CONFIG(19904.5,CFGIEN,.03) ; Name
|
---|
53 | S PCADD=CONFIG(19904.5,CFGIEN,.04)_"^"_CONFIG(19904.5,CFGIEN,.05)_"^"_CONFIG(19904.5,CFGIEN,.06) ; Primary Clinic Address 1~2
|
---|
54 | S $P(REC,"|",3)=PCADD ;Primary Clinic Address
|
---|
55 | S $P(REC,"|",4)=CONFIG(19904.5,CFGIEN,.07) ; City
|
---|
56 | S $P(REC,"|",5)=CONFIG(19904.5,CFGIEN,.071) ; State
|
---|
57 | S $P(REC,"|",6)=CONFIG(19904.5,CFGIEN,.072) ; Zip
|
---|
58 | S $P(REC,"|",7)=CONFIG(19904.5,CFGIEN,.081) ; Phone
|
---|
59 | S $P(REC,"|",8)=CONFIG(19904.5,CFGIEN,.083) ; Email
|
---|
60 | S $P(REC,"|",9)=CLSTDT ; Start Date
|
---|
61 | S $P(REC,"|",10)=CLENDT ; End Date
|
---|
62 | S $P(REC,"|",11)=CONFIG(19904.5,CFGIEN,.08) ; Contact Name
|
---|
63 | W "ZCR|"_REC
|
---|
64 | W ! Q
|
---|
65 | ;
|
---|
66 | ZPP ;Practice Patients segment data
|
---|
67 | ;
|
---|
68 | N REC,PTFNM,PTLNM,PTMI,EG,PS,X,RACE,SEX
|
---|
69 | S REC=""
|
---|
70 | S $P(REC,"|",1)=CONFIG(19904.5,CFGIEN,.02) ;Primary Clinic Group Upin
|
---|
71 | S $P(REC,"|",2)="MR" ;Patient ID List Code Sys
|
---|
72 | ;
|
---|
73 | ;***CBF*** Patient ID - need to find in IHS patient file
|
---|
74 | ;
|
---|
75 | N PATDFN,DOQPATID
|
---|
76 | S PATDFN=$P($O(DOQREG("19904.4","")),",")
|
---|
77 | S DOQPATID=$P(^AUPNPAT(PATDFN,41,DUZ(2),0),"^",2)
|
---|
78 | S $P(REC,"|",3)=DOQPATID
|
---|
79 | S PTLNM=$P(VEPER7PT(2,DFN,.01),","),PTFNM=$P(VEPER7PT(2,DFN,.01),",",2)
|
---|
80 | S PTMI=$E($P(PTFNM," ",2))
|
---|
81 | S $P(REC,"|",4)=$P(PTFNM," ") ;Patient First Name
|
---|
82 | S $P(REC,"|",5)=PTMI ; Middle Initial
|
---|
83 | S $P(REC,"|",6)=PTLNM ; Last Name
|
---|
84 | S $P(REC,"|",7)=PRIPHN ;PRIMARY PHYSICIAN UPIN
|
---|
85 | S $P(REC,"|",8)=$P($$FMTHL7^XLFDT(VEPER7PT(2,DFN,.03,"I")),"-") ; DOB
|
---|
86 | ;
|
---|
87 | ; ***CBF*** ETHNIC GROUP, SEX, RACE AND PAYSOURCE ARE REQUIRED AND NEED TO BE HL7 ENCODED
|
---|
88 | ;
|
---|
89 | S EG=$O(VEPER7PT(2.06,""))
|
---|
90 | I EG'="" S EG=$G(VEPER7PT(2.06,EG,.01))
|
---|
91 | S EG=$S(EG="HISPANIC OR LATINO":"H",EG="NOT HISPANIC OR LATINO":"N",1:"U")
|
---|
92 | S $P(REC,"|",9)=EG
|
---|
93 | ;
|
---|
94 | S SEX=VEPER7PT(2,DFN,.02)
|
---|
95 | S $P(REC,"|",10)=$S(SEX="MALE":"M",SEX="FEMALE":"F",1:"U")
|
---|
96 | ;
|
---|
97 | S RACE=VEPER7PT(2,DFN,.06)
|
---|
98 | S RACE=$S(RACE="AMERICAN INDIAN OR ALASKA NATIVE":"1002-5",RACE="ASIAN":"2028-9",RACE="BLACK OR AFRICAN AMERICAN":"2054-5",RACE="NATIVE HAWAIIAN OR OTHER PACIFIC ISLANDER":"2076-8",RACE="WHITE":"2106-3",1:"2131-1")
|
---|
99 | S $P(REC,"|",11)=RACE
|
---|
100 | S $P(REC,"|",12)=DOQREG(19904.4,PATDFN_",",".014") ;Paysource
|
---|
101 | S $P(REC,"|",13)=DOQREG(19904.4,PATDFN_",",".015") ;HIC #
|
---|
102 | S $P(REC,"|",14)=$S(VEPER7PT(2,DFN,.09)?9N:VEPER7PT(2,DFN,.09),1:"") ;SSN
|
---|
103 | S BENEADD=VEPER7PT(2,DFN,.2914)_"~"_VEPER7PT(2,DFN,.2915)
|
---|
104 | S $P(REC,"|",15)=BENEADD ;BENEFACTOR ADDRESS
|
---|
105 | S $P(REC,"|",16)=VEPER7PT(2,DFN,.2916) ; " CITY
|
---|
106 | S $P(REC,"|",17)=VEPER7PT(2,DFN,.2917) ; " STATE
|
---|
107 | S $P(REC,"|",18)=VEPER7PT(2,DFN,.2918) ; " ZIP
|
---|
108 | W "ZPP|"_REC
|
---|
109 | W ! Q
|
---|
110 | ;
|
---|
111 | ;
|
---|
112 | DG1 ;Diagnosis segment
|
---|
113 | ;
|
---|
114 | ;***CBF*** THERE COULD BE MORE THAN ONE DIAGNOSIS, NEED TO LOOP AND FIND THEM ALL
|
---|
115 | ;
|
---|
116 | N PATDFN2,TRACE
|
---|
117 | S TRACE="",PATDFN2=$P(DFN,","),SETID=0
|
---|
118 | F S TRACE=$O(^AUPNPROB("AC",PATDFN2,TRACE)) Q:'TRACE D
|
---|
119 | .I $P($G(^AUPNPROB(TRACE,0)),"^",12)'="A" Q
|
---|
120 | .D GETS^DIQ(9000011,TRACE_",","**","","VEPER7PT")
|
---|
121 | .S X=$G(VEPER7PT(9000011,TRACE_",",.03)),X=$P(X,"@"),%DT="T" D ^%DT
|
---|
122 | .I Y'=VISITDT&DGREG'=1 Q ; FOR PATIENT REGISTRATION, PASS ALL PROBLEMS, FOR VISIT, PASS ONLY VISIT RELATED PROBLEMS
|
---|
123 | .S SETID=SETID+1,DATE=Y D
|
---|
124 | ..N REC
|
---|
125 | ..S REC=""
|
---|
126 | ..S $P(REC,"|")=SETID
|
---|
127 | ..S $P(REC,"|",3)=$G(VEPER7PT("9000011",TRACE_",",.01))_"^"_$G(VEPER7PT("9000011",TRACE_",",.05))_"^I9" ; CODE^TEXT^SYSTEM
|
---|
128 | ..S DATE=$P($$FMTHL7^XLFDT(DATE),"-")
|
---|
129 | ..S $P(REC,"|",5)=DATE ; DIAGNOSIS DATE
|
---|
130 | ..S $P(REC,"|",6)="F" ;Diagnosis Type - Final
|
---|
131 | ..S $P(REC,"|",16)=PRIPHN ;Diagnosis Clinician
|
---|
132 | ..W "DG1|"_REC
|
---|
133 | ..W !
|
---|
134 | Q
|
---|
135 | ;
|
---|
136 | ;
|
---|
137 | ZPT ;Practice Patients Topics segment data
|
---|
138 | ;
|
---|
139 | N REC
|
---|
140 | S REC=""
|
---|
141 | S $P(REC,"|",1)=CONFIG(19904.5,CFGIEN,.02) ;Primary Clinic Group Upin
|
---|
142 | S $P(REC,"|",2)="MR" ;Patient ID List Code Sys
|
---|
143 | ;
|
---|
144 | ;***CBF*** Patient ID - need to find in IHS patient file
|
---|
145 | ;
|
---|
146 | S DOQPATID=$P(^AUPNPAT(PATDFN,41,DUZ(2),0),"^",2)
|
---|
147 | S $P(REC,"|",3)=DOQPATID
|
---|
148 | S $P(REC,"|",4)=TOPTYP ;Topic Type
|
---|
149 | S $P(REC,"|",5)=TOPIND ;Topic Indicator
|
---|
150 | S $P(REC,"|",6)=$E(ENEFFDT,1,8) ;Enrollment Effective Date
|
---|
151 | S $P(REC,"|",7)=$E(ENCLSDT,1,8) ;Enrollment Close Date
|
---|
152 | W "ZPT|"_REC
|
---|
153 | W ! Q
|
---|
154 | ;
|
---|
155 | ;
|
---|
156 | PID ;
|
---|
157 | ;
|
---|
158 | N REC
|
---|
159 | S REC=""
|
---|
160 | S $P(REC,"|",1)="1" ;Set ID
|
---|
161 | ;
|
---|
162 | ;***CBF*** Patient ID - need to find in IHS patient file
|
---|
163 | ;
|
---|
164 | S DOQPATID=$P(^AUPNPAT(PATDFN,41,DUZ(2),0),"^",2)
|
---|
165 | S $P(REC,"|",3)=DOQPATID_"^^^^MR"
|
---|
166 | W "PID|"_REC
|
---|
167 | W ! Q
|
---|
168 | ;
|
---|
169 | ;
|
---|
170 | PV1 ;
|
---|
171 | ;
|
---|
172 | N REC
|
---|
173 | S REC=""
|
---|
174 | S $P(REC,"|",2)="R"
|
---|
175 | S $P(REC,"|",19)=VSTNO ;Visit Number
|
---|
176 | S DTTM=$G(VISIT(9000010,VSTIEN,.01,"I")),DTTM=$P(DTTM,".")
|
---|
177 | S $P(REC,"|",44)=$P($$FMTHL7^XLFDT(DTTM),"-") ;Admit Date/Time
|
---|
178 | W "PV1|"_REC
|
---|
179 | W ! Q
|
---|
180 | ;
|
---|
181 | ;
|
---|
182 | ZL1 ;
|
---|
183 | ;
|
---|
184 | ;***CBF*** MODIFIED TO PASS ALLERGEN TYPE CODE AS AN ACTUAL CODE, RATHER THAN TEXT
|
---|
185 | ; ALSO CHANGED ALLERGEN TO A CODE^TEXT^CODE SYSTEM (WHICH MUST BE SNOMED-2)
|
---|
186 | ; BASED ON LEXICON SEARCH. THERE COULD ALSO BE MORE THAN ONE ALLERY, NEED
|
---|
187 | ; TO FIND THEM ALL
|
---|
188 | ;
|
---|
189 | N PATDFN2,TRACE,DATE
|
---|
190 | S TRACE="",PATDFN2=$P(DFN,","),SETID=0
|
---|
191 | F S TRACE=$O(^GMR(120.8,"B",PATDFN2,TRACE)) Q:'TRACE D
|
---|
192 | . D GETS^DIQ(120.8,TRACE_",","**","","VEPER7PT")
|
---|
193 | . S X=$G(VEPER7PT(120.8,TRACE_",",4)),X=$P(X,"@"),%DT="T" D ^%DT
|
---|
194 | . I Y'=VISITDT&ALLREG'=1 Q ; FOR PATIENT REGISTRATION, PASS ALL ALLERGIES, FOR VISIT, PASS ONLY VISIT RELATED ALLERGIES
|
---|
195 | . S SETID=SETID+1 D
|
---|
196 | ..N REC,SEARCH,ALLIEN,LEX
|
---|
197 | ..S REC=""
|
---|
198 | ..S $P(REC,"|",1)=SETID ;Set ID ZL1
|
---|
199 | ..S TYPE=$G(VEPER7PT(120.8,TRACE_",",3.1))
|
---|
200 | ..S TYPE=$S(TYPE["FOOD":"FA",TYPE["DRUG":"DA",TYPE["POLLEN":"PA",TYPE["PLANT":"PA",TYPE["ANIMAL":"AA",TYPE["ENVIRON":"EA",1:"MA")
|
---|
201 | ..S $P(REC,"|",2)=TYPE ;Allergen Type Code
|
---|
202 | ..S SEARCH=$G(VEPER7PT(120.8,TRACE_",",1))
|
---|
203 | ..I SEARCH'="" S ALLIEN=$O(^LEX(757.01,"B",SEARCH,"")) I ALLIEN'="" D INFO^LEXA(ALLIEN)
|
---|
204 | ..S $P(REC,"|",3)=$P($G(LEX("SEL","SRC","1")),"^",2)_"^"_SEARCH_"^SNM"
|
---|
205 | ..S DATE=$P($$FMTHL7^XLFDT(Y),"-")
|
---|
206 | ..S $P(REC,"|",6)=DATE ;Allergen Identification Date
|
---|
207 | ..W "ZL1|"_REC
|
---|
208 | ..W !
|
---|
209 | ..K LEX
|
---|
210 | Q
|
---|
211 | ;
|
---|
212 | ;
|
---|
213 | ORC ;
|
---|
214 | ;
|
---|
215 | N REC
|
---|
216 | S REC=""
|
---|
217 | S $P(REC,"|",1)="OK"
|
---|
218 | S $P(REC,"|",2)=$S(ORCTYPE="PHARM":"P",1:"I")_TRACE ; PLACER ORDER NUMBER - UNIQUE ORDER NUMBER FOR ORDER
|
---|
219 | S $P(REC,"|",12)=PRIPHN
|
---|
220 | I ORCTYPE="IMMUNE" S X=$G(IMMUNE(9000010.11,TRACE_",",.03)),X=$P(X,"@"),%DT="T" D ^%DT
|
---|
221 | I ORCTYPE="PHARM" S RXIEN=TRACE2_"," D GETS^DIQ(52,RXIEN,1,"I","MEDDATA") S Y=$G(MEDDATA(52,RXIEN,1,"I"))
|
---|
222 | I Y="" S Y=VISITDT
|
---|
223 | S $P(REC,"|",15)=$P($$FMTHL7^XLFDT(Y),"-")
|
---|
224 | S $P(REC,"|",21)=FNMID
|
---|
225 | W "ORC|"_REC
|
---|
226 | W ! Q
|
---|
227 | ;
|
---|
228 | ;
|
---|
229 | OBR ;
|
---|
230 | ;
|
---|
231 | ;***CBF*** FLESHED THIS OUT FOR FUTURE USE. VOE WON'T SEND OBR SEGMENTS,
|
---|
232 | ; BUT MIGHT IN THE FUTURE.
|
---|
233 | ;
|
---|
234 | ;N REC S REC=""
|
---|
235 | ;S $P(REC,"|",4)="" ; UNIVERSAL SERVICE IDENTIFIER - CODE^TEXT^CODE SYSTEM
|
---|
236 | ;S $P(REC,"|",7)=DTTM ; OBSERVATION DATE TIME
|
---|
237 | ;S $P(REC,"|",22)="" ; RESULTS REPORT
|
---|
238 | ;S $P(REC,"|",)=""
|
---|
239 | ;W "OBR|"_REC
|
---|
240 | ;W ! Q
|
---|
241 | Q
|
---|
242 | ;
|
---|
243 | ;
|
---|
244 | RXO ;
|
---|
245 | ;
|
---|
246 | N RXIEN,REC,MEDDATA,DRUGIEN,DRUGAMT,DRUGDAY,DRUGREF,DRUGNDC,DRUGDATA,DRUGTEXT,DISPCODE
|
---|
247 | S RXIEN=TRACE2_",",REC=""
|
---|
248 | K MEDDATA D GETS^DIQ(52,RXIEN,"6;7;8;9;27;","I","MEDDATA")
|
---|
249 | S DRUGIEN=$G(MEDDATA(52,RXIEN,6,"I"))_","
|
---|
250 | S DRUGAMT=$G(MEDDATA(52,RXIEN,7,"I"))
|
---|
251 | S DRUGDAY=$G(MEDDATA(52,RXIEN,8,"I"))
|
---|
252 | S DRUGREF=$G(MEDDATA(52,RXIEN,9,"I"))
|
---|
253 | S DRUGNDC=$G(MEDDATA(52,RXIEN,27,"I"))
|
---|
254 | K DRUGDATA D GETS^DIQ(50,DRUGIEN,".01","","DRUGDATA")
|
---|
255 | S DRUGTEXT=$G(DRUGDATA(50,DRUGIEN,.01))
|
---|
256 | S DRUGNDC=$P(DRUGNDC,"-")_$P(DRUGNDC,"-",2)_$P(DRUGNDC,"-",3)
|
---|
257 | S $P(REC,"|")=DRUGNDC_"^"_DRUGTEXT_"^NDC" ;DRUG INFORMATION = CODE^TEXT^CODE SYSTEM (always NDC)
|
---|
258 | S $P(REC,"|",11)=DRUGAMT ;DISPENSE AMOUNT
|
---|
259 | S $P(REC,"|",13)=DRUGREF ;NUMBER OF REFILLS
|
---|
260 | S TOTQTY=DRUGAMT/DRUGDAY,TOTQTY=$E(TOTQTY,1,10)
|
---|
261 | S $P(REC,"|",23)=TOTQTY ;TOTAL DAILY DOSAGE QUANTITY - QUANTITY/DAYS SUPPLY
|
---|
262 | W "RXO|"_REC
|
---|
263 | W ! Q
|
---|
264 | ;
|
---|
265 | ;
|
---|
266 | RXA(RXAC) ;
|
---|
267 | ;
|
---|
268 | ; RXAC - RXA counter
|
---|
269 | ;
|
---|
270 | N REC,LEX,VOECODE
|
---|
271 | S REC=""
|
---|
272 | S RXAC=RXAC+1
|
---|
273 | S $P(REC,"|",1)=RXAC ;Give Sub ID Counter
|
---|
274 | S $P(REC,"|",2)=RXAC ;Admin. Sub ID Counter
|
---|
275 | S DTTM=$G(IMMUNE(9000010.11,DFN,.03)),DTTM=$P(DTTM,"@"),%DT="T",X=DTTM D ^%DT
|
---|
276 | S DTTM=$P($$FMTHL7^XLFDT(Y),"-")
|
---|
277 | S $P(REC,"|",3)=DTTM
|
---|
278 | S $P(REC,"|",4)=DTTM
|
---|
279 | S SEARCH=$G(IMMUNE(9000010.11,DFN,.01)) D INFO^LEXA(SEARCH)
|
---|
280 | S VOECODE=$P($G(LEX("SEL","SRC",1)),"^",2)
|
---|
281 | S VOECODE=$S(SEARCH["FLU":16,SEARCH["PNEUM":33,1:"") ; THIS NEEDS TO BE A "CVX" CODE FROM HL7TABLE 0292
|
---|
282 | S $P(REC,"|",5)=VOECODE_"^"_SEARCH_"^CVX" ; CODE^TEXT^CODE SYSTEM^"CVX"
|
---|
283 | W "RXA|"_REC
|
---|
284 | W ! Q
|
---|
285 | ;
|
---|
286 | ;
|
---|
287 | BTS(MSHC) ;Batch Trailer Segment
|
---|
288 | ;
|
---|
289 | W "BTS|",MSHC,"|||||"
|
---|
290 | W ! Q
|
---|
291 | ;
|
---|
292 | ;
|
---|
293 | FTS(BTSC) ;File Trailer Segment
|
---|
294 | ;
|
---|
295 | W "FTS|",BHSC,"||"
|
---|
296 | W ! Q
|
---|
297 | ;
|
---|
298 | ;
|
---|
299 | DTCALC(DATE,TIME) ;CONVERT DATE INTO HL7 DATE FORMAT.
|
---|
300 | ;
|
---|
301 | I DATE="" S DATE="T"
|
---|
302 | I TIME="" S TIME="N"
|
---|
303 | N %DT,X,DTTM
|
---|
304 | S %DT=DATE
|
---|
305 | S X=TIME
|
---|
306 | D ^%DT
|
---|
307 | S DTTM=$P($$FMTHL7^XLFDT(Y),"-")
|
---|
308 | Q DTTM
|
---|
309 | ;
|
---|
310 |
|
---|