247 lines
9.1 KiB
Mathematica
247 lines
9.1 KiB
Mathematica
PSOBPSUT ;BIRM/MFR - BPS (ECME) Utilities ; 07 Jun 2005 8:39 PM
|
|
;;7.0;OUTPATIENT PHARMACY;**148,247,260**;DEC 1997;Build 84
|
|
;Reference to $$ECMEON^BPSUTIL supported by IA 4410
|
|
;Reference to IBSEND^BPSECMP2 supported by IA 4411
|
|
;Reference to $$STATUS^BPSOSRX supported by IA 4412
|
|
;Reference to $$NDCFMT^PSSNDCUT supported by IA 4707
|
|
;Reference to $$CLAIM^BPSBUTL supported by IA 4719
|
|
;Reference to ^PS(55 supported by IA 2228
|
|
;Reference to ^PSDRUG( supported by IA 221
|
|
;Reference to ^PSDRUG("AQ" supported by IA 3165
|
|
;
|
|
ECME(RX) ; Returns "e" if Rx/Refill is Electronically Billable (3rd party)
|
|
Q $S($$STATUS^BPSOSRX(RX,$$LSTRFL^PSOBPSU1(RX))'="":"e",1:"")
|
|
;
|
|
STATUS(RX,RFL) ; Returns the Rx's ECME Status (calls STATUS^BPSOSRX)
|
|
; Input: (r) RX - Rx IEN (#52)
|
|
; (o) RFL - Refill # (Default: most recent)
|
|
I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
|
Q $P($$STATUS^BPSOSRX(RX,RFL),"^")
|
|
;
|
|
SUBMIT(RX,RFL,IGRL,IGCMP) ; Returns whether the Rx should be submitted to ECME at the moment or not
|
|
; Input: (r) RX - Rx IEN (#52)
|
|
; (o) RFL - Refill # (Def.: most recent)
|
|
; (o) IGRL - Ignore Release Date? (1-YES/0-NO) (Def.: 0 - NO)
|
|
; (o) IGCMP- Ignore CMOP/Suspense check? (1-YES/0-NO) (Def.: 0 - NO)
|
|
;
|
|
; - Get the REFILL # (multiple IEN)
|
|
I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
|
; - Not the latest fill for the prescription
|
|
I RFL'=$$LSTRFL^PSOBPSU1(RX) Q 0
|
|
; - Status not ACTIVE
|
|
I $$GET1^DIQ(52,RX,100,"I")'=0 Q 0
|
|
; Will suspend for CMOP
|
|
I '$G(IGCMP),$$CMOP(RX,RFL) Q 0
|
|
; - ECME turned OFF for Rx's site
|
|
I '$$ECMEON^BPSUTIL($$RXSITE(RX,RFL)) Q 0
|
|
; - Rx is RELEASED - Do not submit
|
|
I '$G(IGRL),$$RXRLDT(RX,RFL) Q 0
|
|
; - Future Fill/AUTO SUSPENSE ON - will suspend
|
|
I '$G(IGCMP),$$RXFLDT(RX,RFL)>DT,$$GET1^DIQ(59,$$RXSITE(RX,RFL),.16,"I") Q 0
|
|
Q 1
|
|
;
|
|
CMOP(RX,RFL) ; Returns if the Rx will be a CMOP Rx or not
|
|
; Input: (r) RX - Rx IEN (#52)
|
|
; (o) RFL - Refill # (Default: most recent)
|
|
; Output: 1 - CMOP / 0 - NON-CMOP
|
|
;
|
|
N DFN,CMOP,MAIL,MAILEXP,DRUG,WARNS,STATUS,MW,A
|
|
; Get the REFILL # (multiple IEN)
|
|
I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
|
; MAIL=MAIL Code, MAILEXP=Mail Code Expiration Date
|
|
S CMOP=0
|
|
S DFN=$$GET1^DIQ(52,RX,2,"I"),MAIL=$$GET1^DIQ(55,DFN,.03,"I"),MAILEXP=$$GET1^DIQ(55,DFN,.05,"I")
|
|
I MAIL>1,MAILEXP=""!(MAILEXP>DT) G QCMOP
|
|
; Get drug IEN and cheDRUG if CMOP ,$S($G(MAILEXP)=""!($G(MAILEXP)>DT):1,1:0)
|
|
S DRUG=$$GET1^DIQ(52,RX,6,"I") G QCMOP:'DRUG,QCMOP:'$D(^PSDRUG("AQ",DRUG))
|
|
; Not marked for O.P.
|
|
I $$GET1^DIQ(50,DRUG,63)'["O" G QCMOP
|
|
; Drug Warning >11
|
|
S WARNS=$$GET1^DIQ(50,DRUG,8) I $L(WARNS)>11 G QCMOP
|
|
; If tradename
|
|
I $$GET1^DIQ(52,RX,6.5)'="" G QCMOP
|
|
; If Cancelled, Expired, Deleted, Hold
|
|
S STATUS=$$GET1^DIQ(52,RX,100,"I") I STATUS>9!(STATUS=4)!(STATUS=3) G QCMOP
|
|
; Rx RELEASED
|
|
I $$RXRLDT^PSOBPSUT(RX,RFL) G QCMOP
|
|
; MAIL/WINDOW
|
|
S MW=$S('RFL:$$GET1^DIQ(52,RX,11,"I"),1:$$GET1^DIQ(52.1,RFL_","_RX,2,"I"))
|
|
; IF WINDOW/ORIGINAL/FUTURE FILL SETS MW = MAIL
|
|
I MW="W",$$RXFLDT^PSOBPSUT(RX,RFL)>DT S MW="M"
|
|
; If not MAIL
|
|
I MW'="M" G QCMOP
|
|
S CMOP=1
|
|
;
|
|
QCMOP Q CMOP
|
|
;
|
|
RXRLDT(RX,RFL) ; Returns the Rx Release Date
|
|
; Input: (r) RX - Rx IEN (#52)
|
|
; (o) RFL - Refill # (Default: most recent)
|
|
;
|
|
; Output: RXRLDT - Rx Release Date
|
|
N RXRLDT
|
|
I '$G(RX) Q ""
|
|
S RXRLDT=$$GET1^DIQ(52,RX,31,"I")
|
|
I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
|
I RFL S RXRLDT=$$GET1^DIQ(52.1,RFL_","_RX,17,"I")
|
|
Q RXRLDT
|
|
;
|
|
RXFLDT(RX,RFL) ; Returns the Rx Fill Date
|
|
; Input: (r) RX - Rx IEN (#52)
|
|
; (o) RFL - Refill # (Default: most recent)
|
|
; Output: RXFLDT - Rx Fill Date
|
|
N RXFLDT
|
|
I '$G(RX) Q ""
|
|
S RXFLDT=$$GET1^DIQ(52,RX,22,"I")
|
|
I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
|
I RFL S RXFLDT=$$GET1^DIQ(52.1,RFL_","_RX,.01,"I")
|
|
Q RXFLDT
|
|
;
|
|
RXSUDT(RX,RFL) ; Returns the prescription/fill Suspense Date for the RX/Reject passed in
|
|
;Input: (r) RX - Rx IEN (#52)
|
|
; (o) RFL - Refill IEN (#52.1)
|
|
;Output: SUSPENSE DATE (External format) or <NULL>, if not suspended
|
|
;
|
|
I $G(^PSRX(RX,"STA"))'=5 Q ""
|
|
N SURX,SURFL
|
|
S SURX=$O(^PS(52.5,"B",RX,0)) I 'SURX Q ""
|
|
I $$GET1^DIQ(52.5,SURX,.05,"I") Q ""
|
|
S SURFL=+$$GET1^DIQ(52.5,SURX,9) I RFL'=SURFL Q ""
|
|
Q $$GET1^DIQ(52.5,SURX,.02,"I")
|
|
;
|
|
RXSITE(RX,RFL) ; Returns the Rx DIVISION
|
|
; Input: (r) RX - Rx IEN (#52)
|
|
; (o) RFL - Refill #
|
|
; Output: SITE - Rx Fill Date
|
|
;
|
|
N SITE
|
|
I '$G(RX) Q ""
|
|
I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
|
I RFL S SITE=$$GET1^DIQ(52.1,RFL_","_RX,8,"I")
|
|
I 'RFL!'$G(SITE) S SITE=$$GET1^DIQ(52,RX,20,"I")
|
|
Q SITE
|
|
;
|
|
MANREL(RX,RFL,PID) ; ePharmacy Manual Rx Release
|
|
;Input: (r) RX - Rx IEN (#52)
|
|
; (o) RFL - Refill # (Default: most recent)
|
|
; (o) PID - Displays PID/Drug/Rx in the NDC prompts
|
|
;Output: "" (null - OK to Release) OR "^" (User entered "^", or no valid NDC on file for ePharmacy Rx)
|
|
;
|
|
N ACTION
|
|
;
|
|
I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
|
;
|
|
; - Checking for REJECTS before proceeding to Rx Release
|
|
I $$FIND^PSOREJUT(RX,RFL) D I ACTION="Q"!(ACTION="^") W ! Q "^"
|
|
. S ACTION=$$HDLG^PSOREJU1(RX,RFL,"79,88","ED","OIQ","Q")
|
|
;
|
|
; - ePharmacy switch is OFF
|
|
I '$$ECMEON^BPSUTIL($$RXSITE^PSOBPSUT(RX,RFL)) Q ""
|
|
;
|
|
; - Not an ePharmacy Rx
|
|
I $$STATUS^PSOBPSUT(RX,RFL)="" Q ""
|
|
;
|
|
; - NDC editing before Rx release
|
|
S ACTION=$$CHGNDC^PSONDCUT(RX,RFL,$G(PID)) I ACTION="^" D Q "^"
|
|
. W !!,$C(7),"A valid NDC must be entered before the Release function can be completed.",! H 1
|
|
;
|
|
; - Checking for OPEN/UNRESOLVED 3rd. Party Payer Rejects (After possible NDC edit)
|
|
I $$FIND^PSOREJUT(RX,RFL) D I ACTION="Q"!(ACTION="^") W ! Q "^"
|
|
. S ACTION=$$HDLG^PSOREJU1(RX,RFL,"79,88","ED","OIQ","Q")
|
|
;
|
|
; - Notifying IB of a Rx RELEASE event
|
|
D RELEASE^PSOBPSU1(RX,RFL,DUZ)
|
|
;
|
|
Q ""
|
|
;
|
|
AUTOREL(RX,RFL,RLDT,NDC,SRC,STS,HNG) ; Sends Rx Release information to ECME/IB and updates NDC
|
|
; in the DRUG/PRESCRIPTION files
|
|
;Input: (r) RX - Rx IEN (#52)
|
|
; (o) RFL - Refill # (Default: most recent)
|
|
; (r) RLDT- Release Date
|
|
; (r) NDC - NDC Number (Must be 11 digits)
|
|
; (o) SRC - SOURCE: "C" - CMOP / "A" - OPAI
|
|
; (o) STS - Status: (S)uccessful/(U)nsuccessful Release (Default: "S" - Successful)
|
|
; (o) HNG - HANG time after resubmission and before checking the status of the claim (Default: 0)
|
|
;
|
|
N RXNDC,SITE
|
|
;
|
|
I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
|
;
|
|
S:'$D(STS) STS="S" S:'$D(SRC) SRC="" S HNG=+$G(HNG)
|
|
S RXNDC=$$GETNDC^PSONDCUT(RX,RFL)
|
|
;
|
|
; - Saves the NDC from CMOP/Automated Dispensing Machine in the Prescription file
|
|
I $$NDCFMT^PSSNDCUT(NDC)'="" D SAVNDC^PSONDCUT(RX,RFL,$$NDCFMT^PSSNDCUT(NDC),$S(SRC="C":1,1:0))
|
|
;
|
|
; - Not an ePharmacy Rx
|
|
I $$STATUS^PSOBPSUT(RX,RFL)="" Q ""
|
|
;
|
|
; - Unsuccessful Release
|
|
I STS="U" D Q
|
|
. D REVERSE^PSOBPSU1(RX,RFL,"CRLX",,"UNSUCCESSFUL "_$S(SRC="C":"CMOP",1:"EXT INTERFACE")_" RELEASE",1)
|
|
;
|
|
; - Notifying IB of a Rx RELEASE event
|
|
D RELEASE^PSOBPSU1(RX,RFL)
|
|
;
|
|
; - Invalid NDC from Automated Dispensing Machine
|
|
I SRC="A",$$NDCFMT^PSSNDCUT(NDC)="" D Q
|
|
. D REVERSE^PSOBPSU1(RX,RFL,"CRLR",,"INVALID EXT INTERFACE NDC",1,NDC)
|
|
;
|
|
; - Invalid NDC number for CMOP
|
|
I SRC="C",$$NDCFMT^PSSNDCUT(NDC)="" D Q
|
|
. D REVERSE^PSOBPSU1(RX,RFL,"CRLR",,"INVALID CMOP NDC",1,NDC)
|
|
;
|
|
; - If NDC not equal RXNDC, issue reversal and submit new claim
|
|
I SRC="A",$$NDCFMT^PSSNDCUT(NDC)'=RXNDC D Q
|
|
. D ECMESND^PSOBPSU1(RX,RFL,RLDT,"CRLB",$$NDCFMT^PSSNDCUT(NDC),,"AUTO RELEASE",,1,,1)
|
|
. H HNG
|
|
. ; - If new claim returned PAYABLE, save new NDC in the DRUG/PRESCRIPTION files
|
|
. I $$STATUS^PSOBPSUT(RX,RFL)="E PAYABLE" D SAVNDC^PSONDCUT(RX,RFL,$$NDCFMT^PSSNDCUT(NDC),0,1)
|
|
;
|
|
; - If NDC not equal RXNDC, issue reversal and submit new claim
|
|
I SRC="C",$$NDCFMT^PSSNDCUT(NDC)'=RXNDC D Q
|
|
. ; - Reverse/Resubmit with correct NDC
|
|
. D ECMESND^PSOBPSU1(RX,RFL,RLDT,"CRLB",$$NDCFMT^PSSNDCUT(NDC),1,"CMOP RELEASE",,1,,1)
|
|
. ; - Wait for a response from the Payer for the submission above
|
|
. H HNG
|
|
. ; - If new claim returned PAYABLE, save new NDC in the DRUG/PRESCRIPTION files
|
|
. I $$STATUS^PSOBPSUT(RX,RFL)="E PAYABLE" D SAVNDC^PSONDCUT(RX,RFL,$$NDCFMT^PSSNDCUT(NDC),1,1)
|
|
;
|
|
; - Calls ECME api responsible for notifying IB to create a BILL
|
|
D IBSEND(RX,RFL)
|
|
;
|
|
Q
|
|
;
|
|
IBSEND(RX,RFL) ; Rx Release: Calls ECME, which will call IB to create a bill
|
|
;Input: (r) RX - Rx IEN (#52)
|
|
; (o) RFL - Refill # (Default: most recent)
|
|
;
|
|
I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
|
;
|
|
; - ECME turned OFF for Rx's site
|
|
I '$$ECMEON^BPSUTIL($$RXSITE^PSOBPSUT(RX,RFL)) Q
|
|
;
|
|
; - Not an ePharmacy Rx
|
|
I $$STATUS^PSOBPSUT(RX,RFL)="" Q ""
|
|
;
|
|
; - Calls ECME previously reversed, re-submit the claim to the payer
|
|
I $$STATUS^PSOBPSUT(RX,RFL)="E REVERSAL ACCEPTED"!($$STATUS^PSOBPSUT(RX,RFL)="IN PROGRESS") D Q
|
|
. D ECMESND^PSOBPSU1(RX,RFL,$$RXRLDT^PSOBPSUT(RX,RFL),"RRL")
|
|
;
|
|
; - Notifying ECME of a BILLING event
|
|
I $$STATUS^PSOBPSUT(RX,RFL)="E PAYABLE" D Q
|
|
. N PSOCLAIM S PSOCLAIM=$$CLAIM^BPSBUTL(RX,RFL)
|
|
. D IBSEND^BPSECMP2($P(PSOCLAIM,"^",2),$P(PSOCLAIM,"^",3),"BILL",DUZ)
|
|
;
|
|
Q
|
|
;
|
|
RETRX(RX,RFL) ; - Re-transmit a claim for the prescription/fill?
|
|
;Input: (r) RX - Rx IEN (#52)
|
|
; (o) RFL - Refill # (Default: most recent)
|
|
;Output: 1 - Re-transmit / 0 - Don't re-transmit
|
|
I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX)
|
|
;
|
|
I RFL Q +$$GET1^DIQ(52.1,RFL_","_RX,82,"I")
|
|
Q +$$GET1^DIQ(52,RX,82,"I")
|