[613] | 1 | IBATEP ;ALB/BGA - TRANSFER PRICING RX TRACKER ; 09-APRIL-99
|
---|
| 2 | ;;2.0;INTEGRATED BILLING;**115**;21-MAR-94
|
---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
| 4 | ;
|
---|
| 5 | ; This routine is invoked by the Rx Pharmacy Event driver interface
|
---|
| 6 | ; PS EVSEND OR. This routine monitors in real time
|
---|
| 7 | ; any Rx that has been released from Pharmacy and determines if the DFN
|
---|
| 8 | ; is a transfer pricing patient. If TP than the routine will price
|
---|
| 9 | ; the Rx and file the transaction in ^IBAT(351.61
|
---|
| 10 | ;
|
---|
| 11 | ;
|
---|
| 12 | EN ; Entry point for Rx Transfer Pricing.
|
---|
| 13 | ; Required Pharm 7.0 and Patch PSO*7*27 (Give us the new MSG(6) node)
|
---|
| 14 | ; Only select records that are return to storage or released
|
---|
| 15 | I '$P($G(^IBE(350.9,1,10)),"^",4) Q ; transfer pricing turned off
|
---|
| 16 | I $G(MSG(1))']" "!($G(MSG(2))']" ")!($G(MSG(3))']" ")!($G(MSG(4))']" ")!($G(MSG(6))']" ") Q
|
---|
| 17 | ; Proposed solution to the partial problem
|
---|
| 18 | Q:$P(MSG(6),"|",7)="P" ; quit if this is a partial.
|
---|
| 19 | N IBRXIEN,IBRXSTAT,IBDFN,D,IBPREF,IBSOURCE,IBDETM,IBATIEN,IBREL,IBIND
|
---|
| 20 | N IBEDT,IBDRUG,IBQTY,IBCOST,LASTREF
|
---|
| 21 | S D="|" Q:$P(MSG(1),D,3)'="PHARMACY"!($P(MSG(3),D,3)'="O")
|
---|
| 22 | S IBRXIEN=$P($P(MSG(4),D,4),U) Q:IBRXIEN<1
|
---|
| 23 | S IBRXSTAT=$P(MSG(4),D,2) Q:IBRXSTAT'="ZD"
|
---|
| 24 | S IBDFN=$P(MSG(2),D,4) Q:IBDFN<1
|
---|
| 25 | ;============================================================
|
---|
| 26 | ; Check to see if the dfn is a tp member and has a valid facility
|
---|
| 27 | Q:'$$TPP^IBATUTL(IBDFN)
|
---|
| 28 | S IBPREF=$$PPF^IBATUTL(IBDFN) Q:'IBPREF
|
---|
| 29 | ;============================================================
|
---|
| 30 | ; Get the Rx data
|
---|
| 31 | D EN^PSOORDER(IBDFN,IBRXIEN) Q:'$D(^TMP("PSOR",$J,IBRXIEN,0))
|
---|
| 32 | ; Determine if this is a refill or original and
|
---|
| 33 | ; Return to stock or release from stock
|
---|
| 34 | S IBSEL=$$IBDETM(IBRXIEN) Q:$P(IBSEL,U)="Q"
|
---|
| 35 | ; I IBREL=1 Return to stock ; IBREL=0 Release from stock
|
---|
| 36 | ; I IBIND>0 this is a Refill
|
---|
| 37 | S IBIND=$P($P(IBSEL,U),"|"),IBREL=$P($P(IBSEL,U),"|",2)
|
---|
| 38 | S IBSOURCE=IBRXIEN_";PSRX(;"_IBIND
|
---|
| 39 | Q:'$D(^TMP("PSOR",$J,IBRXIEN,"DRUG",0)) S IBDRUG=$P($P($G(^(0)),U),";")
|
---|
| 40 | ;==============================================================
|
---|
| 41 | ; if transaction already exists and this is a return to stock
|
---|
| 42 | I $D(^IBAT(351.61,"AD",IBSOURCE)),(IBREL) D Q
|
---|
| 43 | . S IBATIEN=$O(^IBAT(351.61,"AD",IBSOURCE,""))
|
---|
| 44 | . D DEL^IBATFILE(IBATIEN)
|
---|
| 45 | ;==============================================================
|
---|
| 46 | ; Original Rx and Released from stock
|
---|
| 47 | I '$D(^IBAT(351.61,"AD",IBSOURCE)),('IBREL),('IBIND) D Q
|
---|
| 48 | . S IBQTY=$P(IBSEL,U,7),IBCOST=$P(IBSEL,U,11),IBEDT=$P(IBSEL,U,4)
|
---|
| 49 | . S IBATFILE=$$RX^IBATFILE(IBDFN,IBEDT,IBPREF,IBSOURCE,IBDRUG,IBQTY,IBCOST)
|
---|
| 50 | ;==============================================================
|
---|
| 51 | ; Refill Rx and Released from stock
|
---|
| 52 | I '$D(^IBAT(351.61,"AD",IBSOURCE)),('IBREL),(IBIND) D Q
|
---|
| 53 | . S IBQTY=$P(IBSEL,U,5),IBCOST=$P(IBSEL,U,7),IBEDT=$P(IBSEL,U,2)
|
---|
| 54 | . S IBATFILE=$$RX^IBATFILE(IBDFN,IBEDT,IBPREF,IBSOURCE,IBDRUG,IBQTY,IBCOST)
|
---|
| 55 | ;==============================================================
|
---|
| 56 | Q
|
---|
| 57 | IBDETM(X) ; Check to see if we have a original or refill
|
---|
| 58 | ; if original return 0|0 or 1 ^the node ^TMP("PSOR",$J,RXIEN,0)
|
---|
| 59 | ; if refill return n=refill#|0 or 1^the node ^TMP("PSOR",$J,RXIEN,"REF",n,0)
|
---|
| 60 | ; piece 1 0|0 means we have a original fill and released from stock
|
---|
| 61 | ; piece 1 0|1 means we have a original fill and returned to stock
|
---|
| 62 | ; ==========================================
|
---|
| 63 | ; If this is a refill return the following:
|
---|
| 64 | ; piece 1 (n|0 or 1) where "n" is the refill number and
|
---|
| 65 | ; 0="released from stock" and 1="returned to stock"
|
---|
| 66 | ; ==========================================
|
---|
| 67 | ; all other conditions return "Q"
|
---|
| 68 | ; Note: You need to Invoke EN^PSOORDER first
|
---|
| 69 | ;
|
---|
| 70 | N RX0,FND,REFILL,Z,REFILLN,RTSFILL,ACT,ACTN,ACTON
|
---|
| 71 | I '$D(^TMP("PSOR",$J,X,0)) S IBDETM="Q^Could not fine the global TMP('PSOR',$J) for RXIEN="_X Q IBDETM
|
---|
| 72 | S RX0=$G(^TMP("PSOR",$J,X,0)) I $P(RX0,U,4)'["A;" S IBDETM="Q^This RXIEN="_X_" is not active." Q IBDETM
|
---|
| 73 | ;====================================================================
|
---|
| 74 | ; (1). Determine if the Orig RX was Returned to Stock (rts)
|
---|
| 75 | S (RTSFILL,ACTON)=" "
|
---|
| 76 | I $D(^TMP("PSOR",$J,X,"ACT")) D
|
---|
| 77 | . S ACT=$O(^TMP("PSOR",$J,X,"ACT",""),-1) Q:'$G(ACT)
|
---|
| 78 | . S ACTN=$G(^TMP("PSOR",$J,X,"ACT",ACT,0)),ACTON=1
|
---|
| 79 | . ; P14 is only for ORIG Rx's that have been rts, check no refill, orig rts
|
---|
| 80 | . I $P(RX0,U,14),'$D(^TMP("PSOR",$J,X,"REF",1,0)),$P(ACTN,U,2)["RETURN",$P(ACTN,U,4)["ORIGINAL" S IBDETM="0|1^"_X,RTSFILL=1 Q
|
---|
| 81 | . ;
|
---|
| 82 | . ;=================Decision code for Refill or RTS====================
|
---|
| 83 | . I "^DELETED^RETURNED TO STOCK^"[(U_$P(ACTN,U,2)_U),$P(ACTN,U,4)["REFILL" D Q
|
---|
| 84 | . . S RTSFILL=$P($P(ACTN,U,4)," ",2) Q:'RTSFILL
|
---|
| 85 | . . S LASTREF=$O(^TMP("PSOR",$J,X,"REF",""),-1) ;always compare the last ref node
|
---|
| 86 | . . I LASTREF,$D(^TMP("PSOR",$J,X,"REF",LASTREF,0)),(LASTREF'<RTSFILL) D
|
---|
| 87 | . . . ; REFILL:
|
---|
| 88 | . . . ; must compare the last REFILL node with the last return to stock date on the "ACT" node
|
---|
| 89 | . . . ; if this is a REFILL than the LASTREF'<RTSFILL
|
---|
| 90 | . . . ; otherwise your last activity shows a rts for x refill
|
---|
| 91 | . . . ; and you have a remaining refill node x-1
|
---|
| 92 | . . . S REFILLN=$G(^TMP("PSOR",$J,X,"REF",LASTREF,0))
|
---|
| 93 | . . . S IBDETM=LASTREF_"|0^"_REFILLN Q
|
---|
| 94 | . . E S IBDETM=RTSFILL_"|1^"_X Q
|
---|
| 95 | . I $P(ACTN,U,2)["RETURN",$P(ACTN,U,4)["ORIG",$D(^TMP("PSOR",$J,X,"REF",1,0)) D Q
|
---|
| 96 | . . ; Case where the previous action was a return to stock of the orig
|
---|
| 97 | . . ; the new action is a FILL 1
|
---|
| 98 | . . S RTSFILL=1,REFILLN=$G(^TMP("PSOR",$J,X,"REF",1,0)),IBDETM=RTSFILL_"|0^"_REFILLN Q
|
---|
| 99 | I RTSFILL Q IBDETM
|
---|
| 100 | ;====================================================================
|
---|
| 101 | ; (2). Check for an original Rx. [last fill dt=Fill dt]
|
---|
| 102 | I $P(RX0,U,2)=$P(RX0,U,3),'ACTON D Q IBDETM
|
---|
| 103 | . S IBDETM="0|0^"_RX0 ; Case of released from stock.
|
---|
| 104 | ;====================================================================
|
---|
| 105 | ; (3). Check for Refills
|
---|
| 106 | S (FND,REFILL)=0
|
---|
| 107 | F S REFILL=$O(^TMP("PSOR",$J,X,"REF",REFILL)) Q:'REFILL!(FND)!(ACTON) D
|
---|
| 108 | . S Z="",Z=$O(^TMP("PSOR",$J,X,"REF",REFILL,Z)) Q:Z=""
|
---|
| 109 | . S REFILLN=$G(^TMP("PSOR",$J,X,"REF",REFILL,Z))
|
---|
| 110 | . ; i lastfill date=the refill date [we have a refill]
|
---|
| 111 | . I $P(RX0,U,3)=$P(REFILLN,U) S FND=1 D
|
---|
| 112 | . . S IBDETM=REFILL_"|0^"_REFILLN
|
---|
| 113 | ;====================================================================
|
---|
| 114 | I 'FND S IBDETM="Q^No Refill or Original found for RXIEN="_X
|
---|
| 115 | Q IBDETM
|
---|