1 | PSOBPSUT ;BIRM/MFR - BPS (ECME) Utilities ; 07 Jun 2005 8:39 PM
|
---|
2 | ;;7.0;OUTPATIENT PHARMACY;**148,247,260,281**;DEC 1997;Build 41
|
---|
3 | ;Reference to $$ECMEON^BPSUTIL supported by IA 4410
|
---|
4 | ;Reference to IBSEND^BPSECMP2 supported by IA 4411
|
---|
5 | ;Reference to $$STATUS^BPSOSRX supported by IA 4412
|
---|
6 | ;Reference to $$NDCFMT^PSSNDCUT supported by IA 4707
|
---|
7 | ;Reference to $$CLAIM^BPSBUTL supported by IA 4719
|
---|
8 | ;Reference to ^PS(55 supported by IA 2228
|
---|
9 | ;Reference to ^PSDRUG( supported by IA 221
|
---|
10 | ;Reference to ^PSDRUG("AQ" supported by IA 3165
|
---|
11 | ;
|
---|
12 | ECME(RX) ; Returns "e" if Rx/Refill is Electronically Billable (3rd party)
|
---|
13 | Q $S($$STATUS^BPSOSRX(RX,$$LSTRFL^PSOBPSU1(RX))'="":"e",1:"")
|
---|
14 | ;
|
---|
15 | STATUS(RX,RFL) ; Returns the Rx's ECME Status (calls STATUS^BPSOSRX)
|
---|
16 | ; Input: (r) RX - Rx IEN (#52)
|
---|
17 | ; (o) RFL - Refill # (Default: most recent)
|
---|
18 | I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
---|
19 | Q $P($$STATUS^BPSOSRX(RX,RFL),"^")
|
---|
20 | ;
|
---|
21 | SUBMIT(RX,RFL,IGRL,IGCMP) ; Returns whether the Rx should be submitted to ECME at the moment or not
|
---|
22 | ; Input: (r) RX - Rx IEN (#52)
|
---|
23 | ; (o) RFL - Refill # (Def.: most recent)
|
---|
24 | ; (o) IGRL - Ignore Release Date? (1-YES/0-NO) (Def.: 0 - NO)
|
---|
25 | ; (o) IGCMP- Ignore CMOP/Suspense check? (1-YES/0-NO) (Def.: 0 - NO)
|
---|
26 | ;
|
---|
27 | ; - Get the REFILL # (multiple IEN)
|
---|
28 | N STATUS
|
---|
29 | I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
---|
30 | ; - Not the latest fill for the prescription
|
---|
31 | I RFL'=$$LSTRFL^PSOBPSU1(RX) Q 0
|
---|
32 | ; - Status not ACTIVE, DISCONTINUED, or EXPIRED
|
---|
33 | S STATUS=$$GET1^DIQ(52,RX,100,"I")
|
---|
34 | I STATUS'=0&(STATUS'=11)&(STATUS'=12) Q 0
|
---|
35 | ; Will suspend for CMOP
|
---|
36 | I '$G(IGCMP),$$CMOP(RX,RFL) Q 0
|
---|
37 | ; - ECME turned OFF for Rx's site
|
---|
38 | I '$$ECMEON^BPSUTIL($$RXSITE(RX,RFL)) Q 0
|
---|
39 | ; - Rx is RELEASED - Do not submit
|
---|
40 | I '$G(IGRL),$$RXRLDT(RX,RFL) Q 0
|
---|
41 | ; - Future Fill/AUTO SUSPENSE ON - will suspend
|
---|
42 | I '$G(IGCMP),$$RXFLDT(RX,RFL)>DT,$$GET1^DIQ(59,$$RXSITE(RX,RFL),.16,"I") Q 0
|
---|
43 | Q 1
|
---|
44 | ;
|
---|
45 | CMOP(RX,RFL) ; Returns if the Rx will be a CMOP Rx or not
|
---|
46 | ; Input: (r) RX - Rx IEN (#52)
|
---|
47 | ; (o) RFL - Refill # (Default: most recent)
|
---|
48 | ; Output: 1 - CMOP / 0 - NON-CMOP
|
---|
49 | ;
|
---|
50 | N DFN,CMOP,MAIL,MAILEXP,DRUG,WARNS,STATUS,MW,A
|
---|
51 | ; Get the REFILL # (multiple IEN)
|
---|
52 | I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
---|
53 | ; MAIL=MAIL Code, MAILEXP=Mail Code Expiration Date
|
---|
54 | S CMOP=0
|
---|
55 | S DFN=$$GET1^DIQ(52,RX,2,"I"),MAIL=$$GET1^DIQ(55,DFN,.03,"I"),MAILEXP=$$GET1^DIQ(55,DFN,.05,"I")
|
---|
56 | I MAIL>1,MAILEXP=""!(MAILEXP>DT) G QCMOP
|
---|
57 | ; Get drug IEN and cheDRUG if CMOP ,$S($G(MAILEXP)=""!($G(MAILEXP)>DT):1,1:0)
|
---|
58 | S DRUG=$$GET1^DIQ(52,RX,6,"I") G QCMOP:'DRUG,QCMOP:'$D(^PSDRUG("AQ",DRUG))
|
---|
59 | ; Not marked for O.P.
|
---|
60 | I $$GET1^DIQ(50,DRUG,63)'["O" G QCMOP
|
---|
61 | ; Drug Warning >11
|
---|
62 | S WARNS=$$GET1^DIQ(50,DRUG,8) I $L(WARNS)>11 G QCMOP
|
---|
63 | ; If tradename
|
---|
64 | I $$GET1^DIQ(52,RX,6.5)'="" G QCMOP
|
---|
65 | ; If Cancelled, Expired, Deleted, Hold
|
---|
66 | S STATUS=$$GET1^DIQ(52,RX,100,"I") I STATUS>9!(STATUS=4)!(STATUS=3) G QCMOP
|
---|
67 | ; Rx RELEASED
|
---|
68 | I $$RXRLDT^PSOBPSUT(RX,RFL) G QCMOP
|
---|
69 | ; MAIL/WINDOW
|
---|
70 | S MW=$S('RFL:$$GET1^DIQ(52,RX,11,"I"),1:$$GET1^DIQ(52.1,RFL_","_RX,2,"I"))
|
---|
71 | ; IF WINDOW/ORIGINAL/FUTURE FILL SETS MW = MAIL
|
---|
72 | I MW="W",$$RXFLDT^PSOBPSUT(RX,RFL)>DT S MW="M"
|
---|
73 | ; If not MAIL
|
---|
74 | I MW'="M" G QCMOP
|
---|
75 | S CMOP=1
|
---|
76 | ;
|
---|
77 | QCMOP Q CMOP
|
---|
78 | ;
|
---|
79 | RXRLDT(RX,RFL) ; Returns the Rx Release Date
|
---|
80 | ; Input: (r) RX - Rx IEN (#52)
|
---|
81 | ; (o) RFL - Refill # (Default: most recent)
|
---|
82 | ;
|
---|
83 | ; Output: RXRLDT - Rx Release Date
|
---|
84 | N RXRLDT
|
---|
85 | I '$G(RX) Q ""
|
---|
86 | S RXRLDT=$$GET1^DIQ(52,RX,31,"I")
|
---|
87 | I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
---|
88 | I RFL S RXRLDT=$$GET1^DIQ(52.1,RFL_","_RX,17,"I")
|
---|
89 | Q RXRLDT
|
---|
90 | ;
|
---|
91 | RXFLDT(RX,RFL) ; Returns the Rx Fill Date
|
---|
92 | ; Input: (r) RX - Rx IEN (#52)
|
---|
93 | ; (o) RFL - Refill # (Default: most recent)
|
---|
94 | ; Output: RXFLDT - Rx Fill Date
|
---|
95 | N RXFLDT
|
---|
96 | I '$G(RX) Q ""
|
---|
97 | S RXFLDT=$$GET1^DIQ(52,RX,22,"I")
|
---|
98 | I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
---|
99 | I RFL S RXFLDT=$$GET1^DIQ(52.1,RFL_","_RX,.01,"I")
|
---|
100 | Q RXFLDT
|
---|
101 | ;
|
---|
102 | RXSUDT(RX,RFL) ; Returns the prescription/fill Suspense Date for the RX/Reject passed in
|
---|
103 | ;Input: (r) RX - Rx IEN (#52)
|
---|
104 | ; (o) RFL - Refill IEN (#52.1)
|
---|
105 | ;Output: SUSPENSE DATE (External format) or <NULL>, if not suspended
|
---|
106 | ;
|
---|
107 | I $G(^PSRX(RX,"STA"))'=5 Q ""
|
---|
108 | N SURX,SURFL
|
---|
109 | S SURX=$O(^PS(52.5,"B",RX,0)) I 'SURX Q ""
|
---|
110 | I $$GET1^DIQ(52.5,SURX,.05,"I") Q ""
|
---|
111 | S SURFL=+$$GET1^DIQ(52.5,SURX,9) I RFL'=SURFL Q ""
|
---|
112 | Q $$GET1^DIQ(52.5,SURX,.02,"I")
|
---|
113 | ;
|
---|
114 | RXSITE(RX,RFL) ; Returns the Rx DIVISION
|
---|
115 | ; Input: (r) RX - Rx IEN (#52)
|
---|
116 | ; (o) RFL - Refill #
|
---|
117 | ; Output: SITE - Rx Fill Date
|
---|
118 | ;
|
---|
119 | N SITE
|
---|
120 | I '$G(RX) Q ""
|
---|
121 | I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
---|
122 | I RFL S SITE=$$GET1^DIQ(52.1,RFL_","_RX,8,"I")
|
---|
123 | I 'RFL!'$G(SITE) S SITE=$$GET1^DIQ(52,RX,20,"I")
|
---|
124 | Q SITE
|
---|
125 | ;
|
---|
126 | MANREL(RX,RFL,PID) ; ePharmacy Manual Rx Release
|
---|
127 | ;Input: (r) RX - Rx IEN (#52)
|
---|
128 | ; (o) RFL - Refill # (Default: most recent)
|
---|
129 | ; (o) PID - Displays PID/Drug/Rx in the NDC prompts
|
---|
130 | ;Output: "" (null - OK to Release) OR "^" (User entered "^", or no valid NDC on file for ePharmacy Rx)
|
---|
131 | ;
|
---|
132 | N ACTION
|
---|
133 | ;
|
---|
134 | I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
---|
135 | ;
|
---|
136 | ; - Checking for REJECTS before proceeding to Rx Release
|
---|
137 | I $$FIND^PSOREJUT(RX,RFL) D I ACTION="Q"!(ACTION="^") W ! Q "^"
|
---|
138 | . S ACTION=$$HDLG^PSOREJU1(RX,RFL,"79,88","ED","OIQ","Q")
|
---|
139 | ;
|
---|
140 | ; - ePharmacy switch is OFF
|
---|
141 | I '$$ECMEON^BPSUTIL($$RXSITE^PSOBPSUT(RX,RFL)) Q ""
|
---|
142 | ;
|
---|
143 | ; - Not an ePharmacy Rx
|
---|
144 | I $$STATUS^PSOBPSUT(RX,RFL)="" Q ""
|
---|
145 | ;
|
---|
146 | ; - NDC editing before Rx release
|
---|
147 | S ACTION=$$CHGNDC^PSONDCUT(RX,RFL,$G(PID)) I ACTION="^" D Q "^"
|
---|
148 | . W !!,$C(7),"A valid NDC must be entered before the Release function can be completed.",! H 1
|
---|
149 | ;
|
---|
150 | ; - Checking for OPEN/UNRESOLVED 3rd. Party Payer Rejects (After possible NDC edit)
|
---|
151 | I $$FIND^PSOREJUT(RX,RFL) D I ACTION="Q"!(ACTION="^") W ! Q "^"
|
---|
152 | . S ACTION=$$HDLG^PSOREJU1(RX,RFL,"79,88","ED","OIQ","Q")
|
---|
153 | ;
|
---|
154 | ; - Notifying IB of a Rx RELEASE event
|
---|
155 | D RELEASE^PSOBPSU1(RX,RFL,DUZ)
|
---|
156 | ;
|
---|
157 | Q ""
|
---|
158 | ;
|
---|
159 | AUTOREL(RX,RFL,RLDT,NDC,SRC,STS,HNG) ; Sends Rx Release information to ECME/IB and updates NDC
|
---|
160 | ; in the DRUG/PRESCRIPTION files
|
---|
161 | ;Input: (r) RX - Rx IEN (#52)
|
---|
162 | ; (o) RFL - Refill # (Default: most recent)
|
---|
163 | ; (r) RLDT- Release Date
|
---|
164 | ; (r) NDC - NDC Number (Must be 11 digits)
|
---|
165 | ; (o) SRC - SOURCE: "C" - CMOP / "A" - OPAI
|
---|
166 | ; (o) STS - Status: (S)uccessful/(U)nsuccessful Release (Default: "S" - Successful)
|
---|
167 | ; (o) HNG - HANG time after resubmission and before checking the status of the claim (Default: 0)
|
---|
168 | ;
|
---|
169 | N RXNDC,SITE
|
---|
170 | ;
|
---|
171 | I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
---|
172 | ;
|
---|
173 | S:'$D(STS) STS="S" S:'$D(SRC) SRC="" S HNG=+$G(HNG)
|
---|
174 | S RXNDC=$$GETNDC^PSONDCUT(RX,RFL)
|
---|
175 | ;
|
---|
176 | ; - Saves the NDC from CMOP/Automated Dispensing Machine in the Prescription file
|
---|
177 | I $$NDCFMT^PSSNDCUT(NDC)'="" D SAVNDC^PSONDCUT(RX,RFL,$$NDCFMT^PSSNDCUT(NDC),$S(SRC="C":1,1:0))
|
---|
178 | ;
|
---|
179 | ; - Not an ePharmacy Rx
|
---|
180 | I $$STATUS^PSOBPSUT(RX,RFL)="" Q ""
|
---|
181 | ;
|
---|
182 | ; - Unsuccessful Release
|
---|
183 | I STS="U" D Q
|
---|
184 | . D REVERSE^PSOBPSU1(RX,RFL,"CRLX",,"UNSUCCESSFUL "_$S(SRC="C":"CMOP",1:"EXT INTERFACE")_" RELEASE",1)
|
---|
185 | ;
|
---|
186 | ; - Notifying IB of a Rx RELEASE event
|
---|
187 | D RELEASE^PSOBPSU1(RX,RFL)
|
---|
188 | ;
|
---|
189 | ; - Invalid NDC from Automated Dispensing Machine
|
---|
190 | I SRC="A",$$NDCFMT^PSSNDCUT(NDC)="" D Q
|
---|
191 | . D REVERSE^PSOBPSU1(RX,RFL,"CRLR",,"INVALID EXT INTERFACE NDC",1,NDC)
|
---|
192 | ;
|
---|
193 | ; - Invalid NDC number for CMOP
|
---|
194 | I SRC="C",$$NDCFMT^PSSNDCUT(NDC)="" D Q
|
---|
195 | . D REVERSE^PSOBPSU1(RX,RFL,"CRLR",,"INVALID CMOP NDC",1,NDC)
|
---|
196 | ;
|
---|
197 | ; - If NDC not equal RXNDC, issue reversal and submit new claim
|
---|
198 | I SRC="A",$$NDCFMT^PSSNDCUT(NDC)'=RXNDC D Q
|
---|
199 | . D ECMESND^PSOBPSU1(RX,RFL,RLDT,"CRLB",$$NDCFMT^PSSNDCUT(NDC),,"AUTO RELEASE",,1,,1)
|
---|
200 | . H HNG
|
---|
201 | . ; - If new claim returned PAYABLE, save new NDC in the DRUG/PRESCRIPTION files
|
---|
202 | . I $$STATUS^PSOBPSUT(RX,RFL)="E PAYABLE" D SAVNDC^PSONDCUT(RX,RFL,$$NDCFMT^PSSNDCUT(NDC),0,1)
|
---|
203 | ;
|
---|
204 | ; - If NDC not equal RXNDC, issue reversal and submit new claim
|
---|
205 | I SRC="C",$$NDCFMT^PSSNDCUT(NDC)'=RXNDC D Q
|
---|
206 | . ; - Reverse/Resubmit with correct NDC
|
---|
207 | . D ECMESND^PSOBPSU1(RX,RFL,RLDT,"CRLB",$$NDCFMT^PSSNDCUT(NDC),1,"CMOP RELEASE",,1,,1)
|
---|
208 | . ; - Wait for a response from the Payer for the submission above
|
---|
209 | . H HNG
|
---|
210 | . ; - If new claim returned PAYABLE, save new NDC in the DRUG/PRESCRIPTION files
|
---|
211 | . I $$STATUS^PSOBPSUT(RX,RFL)="E PAYABLE" D SAVNDC^PSONDCUT(RX,RFL,$$NDCFMT^PSSNDCUT(NDC),1,1)
|
---|
212 | ;
|
---|
213 | ; - Calls ECME api responsible for notifying IB to create a BILL
|
---|
214 | D IBSEND(RX,RFL)
|
---|
215 | ;
|
---|
216 | Q
|
---|
217 | ;
|
---|
218 | IBSEND(RX,RFL) ; Rx Release: Calls ECME, which will call IB to create a bill
|
---|
219 | ;Input: (r) RX - Rx IEN (#52)
|
---|
220 | ; (o) RFL - Refill # (Default: most recent)
|
---|
221 | ;
|
---|
222 | I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
---|
223 | ;
|
---|
224 | ; - ECME turned OFF for Rx's site
|
---|
225 | I '$$ECMEON^BPSUTIL($$RXSITE^PSOBPSUT(RX,RFL)) Q
|
---|
226 | ;
|
---|
227 | ; - Not an ePharmacy Rx
|
---|
228 | I $$STATUS^PSOBPSUT(RX,RFL)="" Q ""
|
---|
229 | ;
|
---|
230 | ; - Calls ECME previously reversed, re-submit the claim to the payer
|
---|
231 | I $$STATUS^PSOBPSUT(RX,RFL)="E REVERSAL ACCEPTED"!($$STATUS^PSOBPSUT(RX,RFL)="IN PROGRESS") D Q
|
---|
232 | . D ECMESND^PSOBPSU1(RX,RFL,$$RXRLDT^PSOBPSUT(RX,RFL),"RRL")
|
---|
233 | ;
|
---|
234 | ; - Notifying ECME of a BILLING event
|
---|
235 | I $$STATUS^PSOBPSUT(RX,RFL)="E PAYABLE" D Q
|
---|
236 | . N PSOCLAIM S PSOCLAIM=$$CLAIM^BPSBUTL(RX,RFL)
|
---|
237 | . D IBSEND^BPSECMP2($P(PSOCLAIM,"^",2),$P(PSOCLAIM,"^",3),"BILL",DUZ)
|
---|
238 | ;
|
---|
239 | Q
|
---|
240 | ;
|
---|
241 | RETRX(RX,RFL) ; - Re-transmit a claim for the prescription/fill?
|
---|
242 | ;Input: (r) RX - Rx IEN (#52)
|
---|
243 | ; (o) RFL - Refill # (Default: most recent)
|
---|
244 | ;Output: 1 - Re-transmit / 0 - Don't re-transmit
|
---|
245 | I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
---|
246 | ;
|
---|
247 | I RFL Q +$$GET1^DIQ(52.1,RFL_","_RX,82,"I")
|
---|
248 | Q +$$GET1^DIQ(52,RX,82,"I")
|
---|