1 | PSO293PI ;BIR/MFR-EXPIRATION DATE CLEAN UP ;05/03/07
|
---|
2 | ;;7.0;OUTPATIENT PHARMACY;**293**;DEC 1997;Build 22
|
---|
3 | ;External references ^DPT supported by DBIA 10035
|
---|
4 | ;External reference to STATUS^ORQOR2 is supported by DBIA 3458
|
---|
5 | ;External reference to ^PS(59.7 is supported by DBIA 694
|
---|
6 | N NMSP,JOBSTS,DIR,DIRUT,DIROUT,DTOUT,DUOUT,X,Y,ACTION,EXPJOBDT,PSODUZ
|
---|
7 | S NMSP="PSO293PI"
|
---|
8 | ;
|
---|
9 | S JOBSTS=$$JOBSTS^PSO293P1()
|
---|
10 | ;
|
---|
11 | W !?5,"Expiration Date clean up job for Outpatient Pharamcy prescriptions"
|
---|
12 | W !?5,"=================================================================="
|
---|
13 | W !?5,"Current status: "
|
---|
14 | W:JOBSTS="N" "NEVER RUN"
|
---|
15 | W:JOBSTS="S" "STOPPED ON "_$$FMTE^XLFDT($G(^XTMP(NMSP,"STOPPED")))
|
---|
16 | W:JOBSTS="R" "RUNNING"
|
---|
17 | W:JOBSTS="C" "COMPLETED ON "_$$FMTE^XLFDT($G(^XTMP(NMSP,"COMPLETED")))
|
---|
18 | W:JOBSTS="U" "UNKNOWN"
|
---|
19 | W:$G(^XTMP(NMSP,"LASTRX")) " (Last Rx IEN: "_+$G(^XTMP(NMSP,"LASTRX"))_")"
|
---|
20 | ;
|
---|
21 | S DIR(0)="SO^",DIR("A")=""
|
---|
22 | I JOBSTS="N" D
|
---|
23 | .S DIR(0)=DIR(0)_"ST:START CLEAN UP JOB;",DIR("A")=DIR("A")_"(ST)Start,",DIR("B")="START"
|
---|
24 | I JOBSTS="S" D
|
---|
25 | . S DIR(0)=DIR(0)_"RE:RESUME CLEAN UP JOB;",DIR("A")=DIR("A")_"(RE)Resume,"
|
---|
26 | I JOBSTS="R" D
|
---|
27 | . S DIR(0)=DIR(0)_"SP:STOP CLEAN UP JOB;",DIR("A")=DIR("A")_"(SP)Stop,"
|
---|
28 | I JOBSTS="C" D
|
---|
29 | . S DIR(0)=DIR(0)_"RR:RE-RUN CLEAN UP JOB;",DIR("A")=DIR("A")_"(RR)Re-run,"
|
---|
30 | S DIR(0)=DIR(0)_"VW:VIEW "_$S(JOBSTS'="C":"PARTIAL ",1:"")_"CLEAN UP JOB RESULTS;"
|
---|
31 | S DIR("A")=DIR("A")_"(VW)View,",DIR("B")="VIEW"
|
---|
32 | S DIR(0)=DIR(0)_"QT:QUIT",DIR("A")=DIR("A")_"(QT)Quit"
|
---|
33 | D ^DIR I $D(DIRUT)!$D(DIROUT)!$D(DTOUT)!$D(DUOUT) G QUIT
|
---|
34 | S ACTION=Y
|
---|
35 | ;
|
---|
36 | I ACTION="SP" W !!,"This may take a few minutes, please wait..." D G QUIT
|
---|
37 | . N TIME,UNABLE
|
---|
38 | . S ^XTMP(NMSP,"STOP")=1,(TIME,UNABLE)=0
|
---|
39 | . F Q:$D(^XTMP(NMSP,"STOPPED")) D Q:UNABLE
|
---|
40 | . . H 1 S TIME=TIME+1
|
---|
41 | . . I '$D(^XTMP(NMSP,"STOPPED")) D
|
---|
42 | . . . I $D(^XTMP(NMSP,"COMPLETED"))!($$JOBSTS^PSO293P1()'="R")!(TIME>600) S UNABLE=1
|
---|
43 | ;
|
---|
44 | I ACTION="QT" G QUIT
|
---|
45 | I ACTION="VW" D DISPLAY^PSO293P1 G QUIT
|
---|
46 | ;
|
---|
47 | D JOB^PSO293P1()
|
---|
48 | Q
|
---|
49 | ;
|
---|
50 | PI ; Post-Install entry point
|
---|
51 | N EXPJOBDT,NMSP
|
---|
52 | S NMSP="PSO293PI"
|
---|
53 | D LOG^PSO293P1("PATCH INSTALLATION")
|
---|
54 | S EXPJOBDT=$$GET1^DIQ(59.7,1,49.95,"I")
|
---|
55 | I 'EXPJOBDT D
|
---|
56 | . S EXPJOBDT=$$FMADD^XLFDT($$DT^XLFDT(),-2)
|
---|
57 | . S $P(^PS(59.7,1,49.99),"^",8)=EXPJOBDT
|
---|
58 | . D LOG^PSO293P1("DATE AUTO-EXPIRE set: "_$$FMTE^XLFDT(EXPJOBDT,2))
|
---|
59 | S ^XTMP(NMSP,"EXPJOBDT")=EXPJOBDT
|
---|
60 | ;
|
---|
61 | D JOB^PSO293P1($$NOW^XLFDT())
|
---|
62 | Q
|
---|
63 | ;
|
---|
64 | EN ;
|
---|
65 | N NMSP,PSOINST,CUTOFF,PSOACT,RXP,STOP,PSOINACT,PATIENT,COUNTER,RXP,DRUG,STATUS
|
---|
66 | N ISSUEDT,EXPIRDT,BADRXCNT,DAYSSUP,NUMREFS,PSOPROD,LASTCNT,I
|
---|
67 | ;
|
---|
68 | S NMSP="PSO293PI" I '$G(PSODUZ) S PSODUZ=+$G(DUZ)
|
---|
69 | ;
|
---|
70 | ; - If can't get Lock, then already running.
|
---|
71 | L +^XTMP(NMSP):5 I '$T D LOG^PSO293P1("UNSUCCESSFUL (LOCKED)") G QUIT
|
---|
72 | ;
|
---|
73 | D SETXTMP
|
---|
74 | ;
|
---|
75 | I '$G(DT) S DT=$$DT^XLFDT
|
---|
76 | S PSOPROD=$$PROD^XUPROD()
|
---|
77 | ;
|
---|
78 | S PSOINST=$P($$SITE^VASITE(),"^",2)_" ("_+$$SITE^VASITE()_")"
|
---|
79 | S CUTOFF=$$GET1^DIQ(59.7,1,49.95,"I") I 'CUTOFF S CUTOFF=$$FMADD^XLFDT(DT,-2)
|
---|
80 | S PSOINACT=",11,12,13,14,15,"
|
---|
81 | S RXP=+$G(^XTMP(NMSP,"LASTRX"))
|
---|
82 | I $G(ACTION)="RE" D
|
---|
83 | . F I=2:1:12,14 S BADRXCNT(14)=+$G(^XTMP(NMSP,I))
|
---|
84 | S LASTCNT=+$G(BADRXCNT(14)),STOP=0
|
---|
85 | F COUNTER=LASTCNT:1 S RXP=$O(^PSRX(RXP)) Q:'RXP D Q:STOP
|
---|
86 | . S:'(COUNTER#10000) DT=$$DT^XLFDT()
|
---|
87 | . S PATIENT=$P($G(^PSRX(RXP,0)),"^",2)
|
---|
88 | . S DRUG=$P($G(^PSRX(RXP,0)),"^",6)
|
---|
89 | . S STATUS=$P($G(^PSRX(RXP,"STA")),"^")
|
---|
90 | . S ISSUEDT=$P($G(^PSRX(RXP,0)),"^",13)
|
---|
91 | . S DAYSSUP=$P($G(^PSRX(RXP,0)),"^",8)
|
---|
92 | . S NUMREFS=$P($G(^PSRX(RXP,0)),"^",9)
|
---|
93 | . S EXPIRDT=$P($G(^PSRX(RXP,2)),"^",6)
|
---|
94 | . S BADRXCNT(14)=$G(BADRXCNT(14))+1
|
---|
95 | . S BADRXCNT("LASTRX")=RXP_"^"_COUNTER
|
---|
96 | . ;--- SKIP bad Rx's
|
---|
97 | . I ('PATIENT!'DRUG) Q
|
---|
98 | . I '$D(^DPT(PATIENT))!('$D(^PSDRUG(DRUG))) Q
|
---|
99 | . I 'ISSUEDT Q
|
---|
100 | . ;---
|
---|
101 | . D SET
|
---|
102 | . ;---
|
---|
103 | . I '(COUNTER#5000) D
|
---|
104 | . . M ^XTMP(NMSP)=BADRXCNT
|
---|
105 | . . I $G(^XTMP(NMSP,"STOP")) S STOP=1
|
---|
106 | ;
|
---|
107 | I STOP D STOP G QUIT
|
---|
108 | ;
|
---|
109 | M ^XTMP(NMSP)=BADRXCNT
|
---|
110 | S ^XTMP(NMSP,"COMPLETED")=$$NOW^XLFDT()
|
---|
111 | K ^XTMP(NMSP,"LASTRX")
|
---|
112 | D LOG^PSO293P1("COMPLETED")
|
---|
113 | D MAIL^PSO293P1
|
---|
114 | ;
|
---|
115 | QUIT ;
|
---|
116 | L -^XTMP(NMSP)
|
---|
117 | Q
|
---|
118 | ;
|
---|
119 | STOP ;
|
---|
120 | K ^XTMP(NMSP,"STOP")
|
---|
121 | S ^XTMP(NMSP,"STOPPED")=$$NOW^XLFDT()
|
---|
122 | D LOG^PSO293P1("STOPPED")
|
---|
123 | D MAIL^PSO293P1
|
---|
124 | Q
|
---|
125 | ;
|
---|
126 | SET ;
|
---|
127 | N CPRSDC,CPRSTA,NEWEXPDT,DA,DIE,ORN,DR
|
---|
128 | S CPRSDC=",1,7,12,13,"
|
---|
129 | ;
|
---|
130 | ; --- No expiration date on PRESCRIPTION file (#52)
|
---|
131 | I EXPIRDT="" D Q
|
---|
132 | . S ORN=$$CPRSNUM(RXP),CPRSTA=$P(ORN,"^",2),ORN=+ORN
|
---|
133 | . D SETEXP^PSO293P1 I '$G(EXPIRDT) Q
|
---|
134 | . I EXPIRDT>CUTOFF D Q ; Expiration Date past Cutoff (will be exp. by auto exp. job), Quit
|
---|
135 | . . S BADRXCNT(2)=$G(BADRXCNT(2))+1,^XTMP(NMSP,2,RXP)=""
|
---|
136 | . . D SENDHDR
|
---|
137 | . I PSOINACT'[(","_STATUS_",") D ; Foce expiration of Rx (Past Exp. Date)
|
---|
138 | . . S DA=RXP,DIE=52,DR="100///11",STATUS=11
|
---|
139 | . . D ^DIE K DIE,DR
|
---|
140 | . . D RXACT^PSOBPSU2(RXP,0,"Rx status set to EXPIRED by PSO*7*293","E",PSODUZ)
|
---|
141 | . I ORN D Q ; Rx is expired in CPRS (Update HDR with Exp. Date), Quit
|
---|
142 | . . I CPRSDC'[(","_CPRSTA_","),'$D(^PS(52.41,"AQ",RXP)) D Q
|
---|
143 | . . . S BADRXCNT(3)=$G(BADRXCNT(3))+1,^XTMP(NMSP,3,RXP)=""
|
---|
144 | . . . D SENDCPRS()
|
---|
145 | . . S BADRXCNT(4)=$G(BADRXCNT(4))+1,^XTMP(NMSP,4,RXP)=""
|
---|
146 | . . D SENDHDR
|
---|
147 | . I 'ORN D ; No CPRS Order # (Update HDR with Exp. Date)
|
---|
148 | . . S BADRXCNT(5)=$G(BADRXCNT(5))+1,^XTMP(NMSP,5,RXP)=""
|
---|
149 | . . D SENDHDR
|
---|
150 | ;
|
---|
151 | ; --- Rx is expired. Update CPRS and HDR if necessary
|
---|
152 | I STATUS=11 D Q
|
---|
153 | . S ORN=$$CPRSNUM(RXP),CPRSTA=$P(ORN,"^",2),ORN=+ORN
|
---|
154 | . S NEWEXPDT=0
|
---|
155 | . I $$FMDIFF^XLFDT(EXPIRDT,ISSUEDT,1)>366 D ; Expiration Date is > 366, Recalculate new Date
|
---|
156 | . . S NEWEXPDT=1 D SETEXP^PSO293P1
|
---|
157 | . I ORN,CPRSDC'[(","_CPRSTA_","),'$D(^PS(52.41,"AQ",RXP)) D ; Rx is not expired in CPRS (Update CPRS/HDR with Exp. Date), Quit
|
---|
158 | . . I 'NEWEXPDT S BADRXCNT(6)=$G(BADRXCNT(6))+1,^XTMP(NMSP,6,RXP)=""
|
---|
159 | . . I NEWEXPDT S BADRXCNT(7)=$G(BADRXCNT(7))+1,^XTMP(NMSP,7,RXP)=""
|
---|
160 | . . D SENDCPRS()
|
---|
161 | . I 'NEWEXPDT Q ; Expiration Date was not recalculated, don't send to HDR
|
---|
162 | . S BADRXCNT(8)=$G(BADRXCNT(8))+1,^XTMP(NMSP,8,RXP)=""
|
---|
163 | . D SENDHDR
|
---|
164 | ;
|
---|
165 | I EXPIRDT<CUTOFF,(PSOINACT'[(","_STATUS_",")) D ; Rx is past exp. date but is still on a non-Expired/DC'd status
|
---|
166 | . S DA=RXP ; Note: Rx's expiring on or after the CUTOFF will be picked up
|
---|
167 | . S DIE=52,DR="100///11",STATUS=11 ; by the Auto Expiration Job.
|
---|
168 | . D ^DIE K DIE,DR
|
---|
169 | . D RXACT^PSOBPSU2(RXP,0,"Rx status set to EXPIRED by PSO*7*293","E",PSODUZ)
|
---|
170 | . S ORN=$$CPRSNUM(RXP),CPRSTA=$P(ORN,"^",2),ORN=+ORN
|
---|
171 | . I ORN,CPRSDC'[(","_CPRSTA_",") D Q ; Update CPRS if necessary, this will also call HDR
|
---|
172 | . . S BADRXCNT(9)=$G(BADRXCNT(9))+1,^XTMP(NMSP,9,RXP)=""
|
---|
173 | . . D SENDCPRS()
|
---|
174 | . I ORN D Q ; If CPRS was not updated, call HDR if there is an Order #
|
---|
175 | . . S BADRXCNT(10)=$G(BADRXCNT(10))+1,^XTMP(NMSP,10,RXP)=""
|
---|
176 | . . D SENDHDR
|
---|
177 | . I 'ORN D ; If no CPRS Order #, just report (no updates to CPRS/HDR)
|
---|
178 | . . S BADRXCNT(11)=$G(BADRXCNT(11))+1
|
---|
179 | . . S ^XTMP(NMSP,11,RXP)=""
|
---|
180 | ;
|
---|
181 | I STATUS=13 D Q
|
---|
182 | . S ORN=+$$CPRSNUM(RXP)
|
---|
183 | . I 'ORN D
|
---|
184 | . . S BADRXCNT(12)=$G(BADRXCNT(12))+1,^XTMP(NMSP,12,RXP)=""
|
---|
185 | . . D SENDHDR
|
---|
186 | Q
|
---|
187 | ;
|
---|
188 | CPRSNUM(RXP) ;
|
---|
189 | N ORN,STA
|
---|
190 | S ORN=$P($G(^PSRX(RXP,"OR1")),"^",2),STA=""
|
---|
191 | I ORN S STA=+$$STATUS^ORQOR2(ORN) I STA=0 S ORN=""
|
---|
192 | Q (ORN_"^"_STA)
|
---|
193 | ;
|
---|
194 | SETXTMP ; - Initialize the XTMP global
|
---|
195 | I $D(^XTMP(NMSP,"STARTED")) D
|
---|
196 | . S ^XTMP(NMSP,"RE-STARTED")=$$NOW^XLFDT() D LOG^PSO293P1("RESUMED")
|
---|
197 | I '$D(^XTMP(NMSP,"STARTED")) D
|
---|
198 | . S ^XTMP(NMSP,"STARTED")=$$NOW^XLFDT() D LOG^PSO293P1("STARTED")
|
---|
199 | K ^XTMP(NMSP,"STOP"),^XTMP(NMSP,"STOPPED")
|
---|
200 | S ^XTMP(NMSP,0)=$$FMADD^XLFDT($$NOW^XLFDT(),730)_"^"_$$NOW^XLFDT()_"^PSO*7*293 - RX EXPIRATION DATE CLEAN UP"
|
---|
201 | Q
|
---|
202 | ;
|
---|
203 | SENDCPRS(CPRSONLY) ; Update CPRS/HDR
|
---|
204 | N PSOSSMES,TYPE,STS,STSCOM
|
---|
205 | S:$G(CPRSONLY) PSOSSMES="CPRSUP"
|
---|
206 | ;
|
---|
207 | S TYPE="SC",STS="DC",STSCOM="Discontinued"
|
---|
208 | I STATUS=11 S $P(^PSRX(RXP,0),"^",19)=1,STS="ZE",STSCOM="Expired"
|
---|
209 | I STATUS=13 S TYPE="OC",STS="",STSCOM="Deleted"
|
---|
210 | I STATUS=14 S TYPE="OD",STS="RP",STSCOM="Discontinued/Edited"
|
---|
211 | D EN^PSOHLSN1(RXP,TYPE,STS,"Prescription is "_STSCOM_".")
|
---|
212 | Q
|
---|
213 | ;
|
---|
214 | SENDHDR ; Update HDR only
|
---|
215 | D:$G(PSOPROD) EN^PSOHDR("PRES",RXP)
|
---|
216 | Q
|
---|