1 | PSOTPHL1 ;BPFO/EL-CREATE HL7 BATCH MESSAGE FILE ;09/10/03
|
---|
2 | ;;7.0;OUTPATIENT PHARMACY;**146,153,227**;DEC 1997
|
---|
3 | ;
|
---|
4 | ; Summary:
|
---|
5 | ; Use of ^VAFCQRY API is approved under private IA #3630
|
---|
6 | ; For initial run, makes sure the "Transmission End Date" (#46.2) in
|
---|
7 | ; File 59.7 - Pharmacy System File is null.
|
---|
8 | ; If field (#46.2) is null, the system will pick up all DFN in File 52.91
|
---|
9 | ; from the first date of file creation to the "RunDate"-1.
|
---|
10 | ; If field (#46.2) has a date, the system will pick up DFN starting
|
---|
11 | ; from the last "Transmission End Date"+1 to the "RunDate"-1.
|
---|
12 | ; This program only runs on Sunday. RunTime will be 6pm.
|
---|
13 | ; Tab: EN^PSOTPHL1(RDT,EDT,.SDT) is the ad-hoc entry point if user
|
---|
14 | ; wants to run it at certain "Transmission Begin Date",
|
---|
15 | ; "Transmission End Date", & return actual "Transmission Begin Date".
|
---|
16 | ; If run is success, an audit node will be placed at File 59.7 as:
|
---|
17 | ; ^PS(59.7,D0,46)=TransmissionStartDt_"^"_TransmissionEndDt_"^"_MshID_"^"_MshCnt_"^"_LineCnt
|
---|
18 | ;
|
---|
19 | ; At the end of each run, this program will send out mail to the mail
|
---|
20 | ; group "PSO TPB HL7 EXTRACT" except the non-Sunday TaskMan check
|
---|
21 | ;
|
---|
22 | Q ; placed out of order by PSO*7*227
|
---|
23 | N A,B,C,CK,EDT,ERR,FRTIME,I,L,R,RDT,SDT,SET,X
|
---|
24 | N BCNT,DATA,DFN,EVENT,LN,MCNT,PGM,PS,PSO
|
---|
25 | N BBDT,BEDT,DADT,EXC,INS,PADT,PN,REASON,STA,WAITYP
|
---|
26 | ;
|
---|
27 | START S CK=0 D DATE I CK=1 G ENDS
|
---|
28 | ;
|
---|
29 | D EN^PSOTPHL1(RDT,EDT,.SDT)
|
---|
30 | Q
|
---|
31 | ;
|
---|
32 | DATE ; Check if first time run or Sunday
|
---|
33 | S (EDT,FRTIME,PS,SET)=0,PS=59.7
|
---|
34 | S EDT=$$GET1^DIQ(PS,"1,46",46.2,"I"),EDT=+EDT
|
---|
35 | D NOW^%DTC
|
---|
36 | D DW^%DTC
|
---|
37 | I EDT'>0 S FRTIME=1 G GDATE
|
---|
38 | I X'["SUN" S CK=1 Q
|
---|
39 | ;
|
---|
40 | S SDT=EDT+1
|
---|
41 | GDATE S RDT="",SET=1
|
---|
42 | S RDT=$S(EDT:EDT,1:0)
|
---|
43 | S EDT=DT-1
|
---|
44 | Q
|
---|
45 | ;
|
---|
46 | INIT ; Variable Initialization
|
---|
47 | S (BCNT,LN,MCNT,CK)=0
|
---|
48 | S PGM="PSOTPHL1"
|
---|
49 | S PSO=52.91
|
---|
50 | D INHL7
|
---|
51 | ;
|
---|
52 | K ^TMP("HLS",$J),^TMP(PGM,$J,EDT)
|
---|
53 | ;
|
---|
54 | Q
|
---|
55 | ;
|
---|
56 | INHL7 S EVENT="PSO TPB EV"
|
---|
57 | I '$D(U) S U="^"
|
---|
58 | D INIT^HLFNC2(EVENT,.HL)
|
---|
59 | I $G(HL) S ERR=$P(HL,"^",2),CK=1 Q
|
---|
60 | D CREATE^HLTF(.HLMID,.HLDA,.HLDT,.HLDT1)
|
---|
61 | D INHD
|
---|
62 | Q
|
---|
63 | ;
|
---|
64 | INHD I '$D(DTIME) S DTIME=0
|
---|
65 | I '$D(HL("DTM")) S HL("DTM")=HLDT1
|
---|
66 | I '$D(HL("FS")) S HL("FS")="^"
|
---|
67 | I '$D(HL("ECH")) S HL("ECH")="~|\&"
|
---|
68 | I '$D(HL("ETN")) S HL("ETN")="S12"
|
---|
69 | I '$D(HL("MTN")) S HL("MTN")="SIU"
|
---|
70 | I '$D(HL("MTN_ETN")) S HL("MTN_ETN")="SIU_S12"
|
---|
71 | I '$D(HL("PID")) S HL("PID")="P"
|
---|
72 | I '$D(HL("Q")) S HL("Q")=""""
|
---|
73 | I '$D(HL("VER")) S HL("VER")="2.4"
|
---|
74 | I '$D(HL("CC")) S HL("CC")="US"
|
---|
75 | I '$D(HL("ACAT")) S HL("ACAT")="AL"
|
---|
76 | I '$D(HL("APAT")) S HL("APAT")="NE"
|
---|
77 | I '$D(HL("SAN")) S HL("SAN")="PSO TPB-PHARM"
|
---|
78 | I '$D(HL("RAN")) S HL("RAN")="PSO TPB-ACC"
|
---|
79 | ;
|
---|
80 | Q
|
---|
81 | ;
|
---|
82 | BHS ; CREATE "BHS" SEGMENT
|
---|
83 | S BCNT=BCNT+1
|
---|
84 | S LN=LN+1
|
---|
85 | ;
|
---|
86 | Q
|
---|
87 | ;
|
---|
88 | EN(RDT,EDT,SDT) ; ENTRY POINT FOR PROCESS
|
---|
89 | D INIT I CK=1 G OUT
|
---|
90 | D BHS
|
---|
91 | D PROCESS
|
---|
92 | D BTS
|
---|
93 | G OUT
|
---|
94 | ;
|
---|
95 | PROCESS ; Sort and Process the message body
|
---|
96 | I '$D(SET) S SDT=RDT,RDT=RDT-1
|
---|
97 | I $G(FRTIME)=1 D FRTIME
|
---|
98 | P10 S RDT=$O(^PS(PSO,"AX",RDT)) G P30:(RDT>EDT)!(RDT="")
|
---|
99 | I SDT>RDT S SDT=RDT
|
---|
100 | S DFN=""
|
---|
101 | P20 S DFN=$O(^PS(PSO,"AX",RDT,DFN)) G P10:DFN=""
|
---|
102 | I '$D(^PS(PSO,DFN,0)) K ^PS(PSO,"AX",RDT,DFN) G P20
|
---|
103 | S ^TMP(PGM,$J,EDT,"ZZ",DFN)=RDT
|
---|
104 | G P20
|
---|
105 | ;
|
---|
106 | FRTIME ; To generate a complete data set for the frist time
|
---|
107 | S (DFN,RDT,X)=""
|
---|
108 | S SDT=999999999
|
---|
109 | F10 S DFN=$O(^PS(PSO,DFN)) Q:(DFN'?1N.N)!(DFN="")
|
---|
110 | I '$D(^PS(PSO,DFN,0)) G F10
|
---|
111 | S X=$P(^PS(PSO,DFN,0),"^",2)
|
---|
112 | I SDT>X S SDT=X
|
---|
113 | S ^TMP(PGM,$J,EDT,"ZZ",DFN)=X
|
---|
114 | G F10
|
---|
115 | ;
|
---|
116 | P30 I '$D(^TMP(PGM,$J,EDT,"ZZ")) D G GEN
|
---|
117 | . S MCNT=0
|
---|
118 | . D MSH^HLFNC2(.HL,HLMID_"-"_MCNT,.X,"")
|
---|
119 | . D WRITE
|
---|
120 | ;
|
---|
121 | S DFN=""
|
---|
122 | DFN S DFN=$O(^TMP(PGM,$J,EDT,"ZZ",DFN)) G GEN:DFN=""
|
---|
123 | S RDT=^TMP(PGM,$J,EDT,"ZZ",DFN)
|
---|
124 | D EXTRACT
|
---|
125 | D MSH
|
---|
126 | D SCH
|
---|
127 | D PID
|
---|
128 | G DFN
|
---|
129 | ;
|
---|
130 | GEN S HLP="" D GENERATE^HLMA(EVENT,"GB",1,.R,HLDA,.HLP)
|
---|
131 | Q
|
---|
132 | ;
|
---|
133 | EXTRACT ; Extract data from File 52.91
|
---|
134 | S (A,B,BBDT,BEDT,C,DADT,DATA,EXC,INS,PADT,PN,REASON,STA,WAITYP,X)=""
|
---|
135 | S X=^PS(PSO,DFN,0)
|
---|
136 | S DATA="PN,BBDT,BEDT,REASON,DADT,WAITYP,STA,INS,EXC,PADT"
|
---|
137 | F I=1:1:10 S @$P(DATA,",",I)=$P(X,"^",I)
|
---|
138 | I $D(PADT) S PADT=$P(PADT,".")
|
---|
139 | I +BBDT=+RDT S HL("ETN")="S12"
|
---|
140 | E S HL("ETN")="S14"
|
---|
141 | S HL("MTN_ETN")=HL("MTN")_"_"_HL("ETN")
|
---|
142 | S A="BBDT,BEDT,DADT,PADT"
|
---|
143 | F I=1:1:4 S B=$P(A,",",I) I $G(@B)>0 S C=$$HLDATE^HLFNC(@B,"DT"),@$P(A,",",I)=C
|
---|
144 | Q
|
---|
145 | ;
|
---|
146 | MSH ; CREATE "MSH" SEGMENT
|
---|
147 | S MCNT=MCNT+1
|
---|
148 | D MSH^HLFNC2(.HL,HLMID_"-"_MCNT,.X,"")
|
---|
149 | ;
|
---|
150 | D WRITE
|
---|
151 | Q
|
---|
152 | ;
|
---|
153 | SCH ; CREATE "SCH" SEGMENT
|
---|
154 | K SCH S (X,A,B,C)="",I=0 S:REASON>9 REASON=9
|
---|
155 | S X="Seen by VA Provider,No/Show/Cancellation,Patient Ended"
|
---|
156 | S X=X_",Non-Formulary Rx not accepted,Patient Expired,All Rx's Inactive"
|
---|
157 | S X=X_",Exclusion,Patient Refused Appointment,Patient Unreachable"
|
---|
158 | S A=$P(X,",",REASON)
|
---|
159 | ;
|
---|
160 | S X="" S:EXC>3 EXC=3
|
---|
161 | S X="Excluded due to active Rx#"
|
---|
162 | S X=X_",Excluded due to actual appt<30 days from desired appt date"
|
---|
163 | S X=X_",Exclued due to active Rx# and actual appt<30 days from desired appt date"
|
---|
164 | S B=$P(X,",",EXC)
|
---|
165 | ;
|
---|
166 | I WAITYP="E" S C="EWL"
|
---|
167 | E I WAITYP="M" S C="Manual"
|
---|
168 | E I WAITYP="S" S C="Schedule"
|
---|
169 | E S C="S\T\E"
|
---|
170 | ;
|
---|
171 | S X=""
|
---|
172 | S X=HL("FS")_HL("FS")_HL("FS")_HL("FS")_HL("FS")_HL("FS")_REASON_"~"_A
|
---|
173 | S X=X_HL("FS")_EXC_"~"_B_HL("FS")_WAITYP_"~"_C
|
---|
174 | S X=X_HL("FS")_HL("FS")_HL("FS")
|
---|
175 | S I=I+1,SCH(I)="SCH"_X
|
---|
176 | ;
|
---|
177 | S X="",X=X_"~~~"_DADT_"~~~~Desired Appointment Date|~~~"
|
---|
178 | S X=X_PADT_"~~~~Primary Care Scheduled Appointment Date|~~~"
|
---|
179 | S X=X_BBDT_"~~~~Date Pharmacy Benefit Began|~~~"
|
---|
180 | S X=X_BEDT_"~~~~Inactivation of Benefit Date|~~~"
|
---|
181 | S X=X_$$HLDATE^HLFNC(RDT,"DT")_"~~~~Record Change Date"
|
---|
182 | I $L(SCH(I)_X)<246 S SCH(I)=SCH(I)_X
|
---|
183 | E S I=I+1,SCH(I)=X
|
---|
184 | ;
|
---|
185 | S X="",$P(X,"^",12)=STA_"~~~"_INS_"&"_$$GET1^DIQ(4,INS_",0",.01)
|
---|
186 | I $L(SCH(I)_X)<246 S SCH(I)=SCH(I)_X
|
---|
187 | E S I=I+1,SCH(I)=X
|
---|
188 | ;
|
---|
189 | F I=1:1 S X=$G(SCH(I)) Q:X="" D
|
---|
190 | . I I=1 D WRITE
|
---|
191 | . E D WRITEN
|
---|
192 | Q
|
---|
193 | ;
|
---|
194 | PID ; CREATE "PID" SEGMENT
|
---|
195 | K PID
|
---|
196 | D DEM^VADPT,ADD^VADPT
|
---|
197 | D BLDPID^PSOTPHL2(DFN,1,.PID,.HL,.ERR)
|
---|
198 | Q:$G(PID(1))=""
|
---|
199 | S X=""
|
---|
200 | F I=1:1 S X=$G(PID(I)) Q:X="" D
|
---|
201 | . I I=1 D WRITE
|
---|
202 | . E D WRITEN
|
---|
203 | Q
|
---|
204 | ;
|
---|
205 | BTS ; CREATE "BTS" SEGMENT
|
---|
206 | S LN=LN+1
|
---|
207 | Q
|
---|
208 | ;
|
---|
209 | WRITE ; Write single line
|
---|
210 | S LN=LN+1
|
---|
211 | S ^TMP("HLS",$J,LN)=X
|
---|
212 | Q
|
---|
213 | ;
|
---|
214 | WRITEN ; Write multiple lines
|
---|
215 | S ^TMP("HLS",$J,LN,I-1)=X
|
---|
216 | Q
|
---|
217 | ;
|
---|
218 | CLEANUP ; Clean up variables
|
---|
219 | K A,B,C,CK,EDT,ERR,I,L,R,RDT,SDT,X
|
---|
220 | K BCNT,DATA,DFN,EVENT,LN,MCNT,PGM,PS,PSO
|
---|
221 | K BBDT,BEDT,DADT,EXC,INS,PADT,PN,REASON,STA,WAITYP
|
---|
222 | Q
|
---|
223 | ;
|
---|
224 | OUT ; End of compilation
|
---|
225 | I CK=1 G END
|
---|
226 | K ^TMP("HLS",$J),^TMP(PGM,$J,EDT),PID,SCH
|
---|
227 | I SDT>EDT S SDT=EDT
|
---|
228 | I $G(SET)=1 S ^PS(PS,1,46)=SDT_"^"_EDT_"^"_HLDA_"^"_MCNT_"^"_LN
|
---|
229 | ;
|
---|
230 | END D MAIL
|
---|
231 | I $G(SET)'=1 D CLEANUP
|
---|
232 | ENDS I $G(FRTIME)=1 D RESET
|
---|
233 | S:$D(ZTQUEUED) ZTREQ="@"
|
---|
234 | Q
|
---|
235 | ;
|
---|
236 | RESET ; Reset to run tomorrow
|
---|
237 | D RESCH^XUTMOPT("PSO TPB HL7 EXTRACT","T+1@18:00","","24H","L")
|
---|
238 | Q
|
---|
239 | ;
|
---|
240 | RESET1 ; Reset to run tomorrow
|
---|
241 | D RESET,EDIT^XUTMOPT("PSO TPB HL7 EXTRACT")
|
---|
242 | Q
|
---|
243 | ;
|
---|
244 | MAIL ;Send mail message
|
---|
245 | I '$G(DUZ) Q
|
---|
246 | K PSOTTEXT,XMY S (XMDUZ,XMSUB,XMTEST,A,B,C,I,L,R,X)=""
|
---|
247 | S C="G.PSO TPB HL7 EXTRACT"
|
---|
248 | S XMY(C)=""
|
---|
249 | S PSOTTEXT(1)="SENT TO: "_C
|
---|
250 | S XMDUZ="PSO TPB HL7 EXTRACT"
|
---|
251 | S (A,B)=""
|
---|
252 | I '$D(SET) S A="Ad-Hoc"
|
---|
253 | E S A=$S(($G(FRTIME)=1):"first-time",1:"weekly")
|
---|
254 | S B=$S(($G(CK)=1):"unsuccessful",1:"successful")
|
---|
255 | S XMSUB="PSO TPB HL7 "_A_" update ** "_B_" **"
|
---|
256 | S A=XMSUB
|
---|
257 | I $G(CK)=1 D FAIL
|
---|
258 | E D SUCC
|
---|
259 | S PSOTTEXT(2)=" "
|
---|
260 | S PSOTTEXT(3)="The weekly generation of the HL7 Message of"
|
---|
261 | S PSOTTEXT(3.2)="TPB Patient Information was "_B
|
---|
262 | S PSOTTEXT(4)=""
|
---|
263 | S PSOTTEXT(5)=I
|
---|
264 | S PSOTTEXT(6)=L
|
---|
265 | S PSOTTEXT(6.2)=R
|
---|
266 | S PSOTTEXT(6.4)=X
|
---|
267 | S PSOTTEXT(7)=" "
|
---|
268 | D NOW^%DTC S Y=% X ^DD("DD") S PSOTTEXT(8)="The job ended at "_$G(Y)
|
---|
269 | S PSOTTEXT(9)=" "
|
---|
270 | S XMTEXT="PSOTTEXT(" N DIFROM D ^XMD
|
---|
271 | I $D(XMMG),(XMMG["Error =") D
|
---|
272 | . K XMY(C)
|
---|
273 | . S XMSUB=A,XMY(DUZ)="",PSOTTEXT(1)=PSOTTEXT(1)_" ("_XMMG_")",XMMG=""
|
---|
274 | . S XMTEXT="PSOTTEXT(" D ^XMD
|
---|
275 | K PSOTTEXT,XMDUZ,XMSUB,XMTEXT,XMY
|
---|
276 | Q
|
---|
277 | FAIL ; Msg for unsuccessful run
|
---|
278 | S I="Reason: "_$S(($D(ERR)):ERR,1:"Check Event Server Protocol OR the run date")
|
---|
279 | S L=" "
|
---|
280 | S R="Please contact National Help Desk @888-596-4357"
|
---|
281 | S X=" "
|
---|
282 | Q
|
---|
283 | ;
|
---|
284 | SUCC ; Msg for successful run
|
---|
285 | S I="Please check the PSOTPBAAC HL7 Logical Link to ensure"
|
---|
286 | S L="successful transmission to the Austin Automation Center."
|
---|
287 | S R=" "
|
---|
288 | S X="MSH-ID: "_HLDA
|
---|
289 | Q
|
---|
290 | ;
|
---|