PSORRPA1 ;AITC/BWF - remote partial prescriptions ;12/12/16 3:21pm
;;7.0;OUTPATIENT PHARMACY;**454,475,497,643,740**;DEC 1997;Build 18
;
;External references L,UL, PSOL, and PSOUL^PSSLOCK supported by DBIA 2789
;External reference to ^PSDRUG supported by DBIA 221
;External reference to ^DD(52 supported by DBIA 999
; bwf - Modified copy of PSORXPA1
; bwf - 2/24/14 adding PAR refill tag for API usage.
; VALMSG - return data for remote facility
; RXNUM - rx number
; PFDATE - Partial Fill Date
; MW - Mail or Window
; QTY - Quantity
; DSUPP - Days Supply
; REMARKS - Remarks entered by 'remote' (filling) facility.
; PHARM - Remote pharmacist's name
; PHONE - remote pharmacists phone number
; SITE - remote filling site.
;
PAR(VALMSG,RXNUM,PFDATE,MW,QTY,DSUPP,REMARKS,PHARM,PHONE,SITE,RX0,RX2,RXSTA,RPROV,RSIG,RPAR0,ROR1,RX3,RREF0) ;
N RRXIEN,PSOPAR,ORN,PSOLST,XTMPLOC,PASSLOC,HFSIEN,FULLPTH,HFSDONE,PTHDAT,PTHPIECE,DEL,DELARR,FTGOPEN,FOUND,FTGSTRT,FTGOPEN,STATION,HDRUG
N PERR,PDIR,PFIL,CSVAL,C,D,E,NEWPFIEN,PFIEN,PFIENS,PSOEXREP,PSOFROM,DINACT,PSOPHDUZ,PSODFDIR,PSOFNAME,PSOZ1,RREFIEN,CLOZVAL,NOONEVA
S $ETRAP="D ^%ZTER Q"
S (RRXIEN,RXN)=$O(^PSRX("B",RXNUM,0)),PSOSIEN=$$GET1^DIQ(52,RRXIEN,20,"I")
I '$$GET1^DIQ(59.7,1,101,"I") D Q
.S VALMSG(1)="The OneVA pharmacy flag is turned 'OFF' at this facility."
.S VALMSG(2)="Unable to process refill/partial fill requests."
.D PARFAIL(.VALMSG,RRXIEN,PHARM,PHONE,SITE)
; PSO*7*497 - trade name block
I $$GET1^DIQ(52,RRXIEN,6.5,"E")]"" D Q
.D PARFAIL(.VALMSG,RRXIEN,PHARM,PHONE,SITE)
.S VALMSG(1)="This prescription cannot be refilled or partial filled because it has a value"
.S VALMSG(2)="entered in the Rx trade name field. Please follow local policy for obtaining"
.S VALMSG(3)="a new prescription."
; PSO*7*497 - end trade name block
S HDRUG=$$GET1^DIQ(52,RRXIEN,6,"I")
I '$$VALIDDRUG(HDRUG) D PARFAIL(.VALMSG,RRXIEN,PHARM,PHONE,SITE) Q
I $D(^PSRX(RRXIEN,"ADP",PFDATE,RRXIEN)) S VALMSG(1)="A partial fill already exists for "_$$FMTE^XLFDT(PFDATE,"5D")_".",VALMSG(2)="Partial cannot be processed" D PARFAIL(.VALMSG,RRXIEN,PHARM,PHONE,SITE) Q
S PSOPAR=$G(^PS(59,PSOSIEN,1)),PSOSITE=PSOSIEN
; set up PSOLST
S ORN=1,PSOLST(ORN)=52_U_RRXIEN_U_U
S PSOPHDUZ=$$GET1^DIQ(52,RRXIEN,23,"I") I 'PSOPHDUZ S PSOPHDUZ=.5
S PSORPDFN=+$P($G(^PSRX($P(PSOLST(ORN),"^",2),0)),"^",2)
S DA=$P(PSOLST(ORN),"^",2),RX0=^PSRX(DA,0),J=DA,RX2=$G(^(2)),R3=$G(^(3)) S:'$G(BBFLG) BBRX(1)=""
N PSORF,PSOTRIC D TRIC^PSORXL1(DA) I PSOTRIC&($$STATUS^PSOBPSUT(DA,PSORF)'["PAYABLE") D Q
. S VALMSG(1)="Partial cannot be filled on Tricare non-payable Rx."
. D PARFAIL(.VALMSG,RRXIEN,PHARM,PHONE,SITE)
I +$P($G(^PSRX(DA,2)),"^",6)<DT D
.S:$P($G(^PSRX(DA,"STA")),"^")<12 $P(^PSRX(DA,"STA"),"^")=11
.S COMM="Medication Expired on "_$E($P(^PSRX(DA,2),"^",6),4,5)_"/"_$E($P(^(2),"^",6),6,7)_"/"_$E($P(^(2),"^",6),2,3)
.S STAT="SC",PHARMST="ZE" D EN^PSOHLSN1(DA,STAT,PHARMST,COMM) K STAT,PHARMST,COMM,RX0,J,RX2,R3
I +^PSRX(DA,"STA"),+^("STA")'=5,+^("STA")'=11 D K DA D ULK Q
.S C=";"_+^PSRX(DA,"STA")_":",X=$P(^DD(52,100,0),"^",3),E=$F(X,C),D=$P($E(X,E,999),";") ;IA#999
.S VALMSG(1)="Prescription is in a "_D_" status."
.D PARFAIL(.VALMSG,RRXIEN,PHARM,PHONE,SITE)
I $G(PSXSYS),($O(^PS(52.5,"B",DA,""))) S PSOZ1=$O(^PS(52.5,"B",DA,"")) D
.I $P($G(^PS(52.5,PSOZ1,0)),"^",7)="Q"!($P($G(^(0)),"^",7)="L") D
..S VALMSG(1)="A partial entered for this Rx cannot be suspended."
..S VALMSG(2)="A fill for this Rx is already suspended for CMOP transmission."
..S VALMSG(3)="You may pull this fill from suspense or enter a partial and print the label."
..D PARFAIL(.VALMSG,RRXIEN,PHARM,PHONE,SITE)
CLC S PSOCLC=PSOPHDUZ,PHYS=$P(^PSRX(DA,0),"^",4),DRG=$P(^(0),"^",6)
I 'PHYS,$O(^PSRX(DA,1,0)) F I=0:0 S I=$O(^PSRX(DA,1,I)) Q:'I S PHYS=$S($P(^PSRX(DA,1,I,0),"^",17):$P(^PSRX(DA,1,I,0),"^",17),1:PHYS)
S PSOPRZ=0 I $O(^PSRX(DA,"P",0)) N Z2 F Z2=0:0 S Z2=$O(^PSRX(DA,"P",Z2)) Q:'Z2 S PSOPRZ=Z2
I $D(RXPR(DA)),'$D(^PSRX(DA,"P",$G(RXPR(DA)))) D RMP^PSOCAN3
; bwf - save information into database, just as it would be through ^DIE
S FDA(52.2,"+1,"_RRXIEN_",",.01)=PFDATE D UPDATE^DIE(,"FDA","NEWPFIEN","PERR") K FDA
I $D(PERR) M VALMSG=PERR
S PFIEN=$O(NEWPFIEN(0)),PFIEN=$G(NEWPFIEN(PFIEN))
; set Z1 variable as was done in the ^DIE call for later use.
S Z1=PFIEN
S PFIENS=PFIEN_","_RRXIEN_","
; set PM variable as was done in the ^DIE call for later use.
I MW="M"!('$P($G(PSOPAR),U,12)) S PM=1
S FDA(52.2,PFIENS,.02)=MW
S FDA(52.2,PFIENS,.04)=QTY
S FDA(52.2,PFIENS,.041)=DSUPP
; currently we have no local pharmacist. May need to add entry to file 200 for 'REMOTE,PHARMACIST' or 'PHARMACIST,REMOTE'
S FDA(52.2,PFIENS,.05)=PSOPHDUZ
; can we use DUZ as the clerk code, or will this need another value??
S FDA(52.2,PFIENS,.07)=PSOPHDUZ
S FDA(52.2,PFIENS,6)=PHYS
S FDA(52.2,PFIENS,.08)=$$NOW^XLFDT
S FDA(52.2,PFIENS,.09)=PSOSITE
S FDA(52.2,PFIENS,.03)=REMARKS
;
; setting the partial fill date to the dispense date to match the
; HL7 response
S FDA(52.2,PFIENS,7.5)=PFDATE
;
S RXPR(RRXIEN)=PFIEN,PSOZZ=1,PRMK=REMARKS
; file the rest of the data onto the newly created multiple.
D FILE^DIE(,"FDA") K FDA
I Z1,$G(PRMK)]"" D D:$T(EN^PSOHDR)]"" EN^PSOHDR("PPAR",RXN) K DIE,RXN,RXF
.D ACT
.S ZD(RXN)=+^PSRX(RXN,"P",Z1,0),^PSRX(RXN,"TYPE")=Z1,$P(^PSRX(RXN,"P",Z1,0),"^",11)=$P($G(^PSDRUG(DRG,660)),"^",6)
S:'$D(PSOFROM) PSOFROM="PARTIAL" S BINGCRT=1 ;D:$D(BINGRTE)&($D(DISGROUP)) ^PSOBING1 K BINGRTE,TM,TM1
; bwf 8/14/14 - set up needed variables for label printing
S PSODFN=$P(^PSRX(RRXIEN,0),U,2)
S PSORX("PSOL",1)=RRXIEN_","
S PSORX("MAIL/WINDOW")="WINDOW"
S PSORX("NAME")=$$GET1^DIQ(2,PSODFN,.01)
S PSORX("QFLG")=0
S PSORX("METHOD OF PICKUP")=""
S PSOX=$G(^PS(55,PSODFN,"PS")) I PSOX]"" S PSORX("PATIENT STATUS")=$P($G(^PS(53,PSOX,0)),"^")
N PPL1
S PPL1=RRXIEN
S HFSDONE=0,PTHDAT=""
S PSODFDIR=$$DEFDIR^%ZISH()
S PSOFNAME="PSOLBL_"_RXNUM_"_"_PSOSITE_"_"_DT_".DAT"
S FULLPTH=PSODFDIR_PSOFNAME
; bwf 8/14/14 - end setup for label printing.
; preserve IO
D SAVDEV^%ZISUTL("ONEVAHLIO")
; delete the file first to ensure there isn't one lingering around
S DELARR("PSOLBL_"_RXNUM_"_"_PSOSITE_"_"_DT_".DAT")="" S DEL=$$DEL^%ZISH(PSODFDIR,$NA(DELARR))
S PSOEXREP=1
; call out to generate label
D LABEL^PSORWRAP(RRXIEN,"HFS",PSOSITE,PSOPHDUZ,"",PSOFNAME)
S XTMPLOC="^XTMP(""PSORLBL"","_HLINSTN_","_+RXNUM_",1,0)"
S PASSLOC="XTMP(""PSORLBL"","_HLINSTN_","_+RXNUM_")"
K ^XTMP("PSORLBL",HLINSTN,+RXNUM)
S ^XTMP("PSORLBL",HLINSTN,+RXNUM,0)=DT_U_$$FMADD^XLFDT(DT,30)
; looks like we have to wait a moment before the file shows up.
S FTGSTRT=$$NOW^XLFDT,(FOUND,FTGOPEN)=0
N PAR S PAR=0
F D Q:$$NOW^XLFDT>$$FMADD^XLFDT(FTGSTRT,,,,15)!(FOUND)!(FTGOPEN)
.S FTGOPEN=$$FTG^%ZISH(PSODFDIR,PSOFNAME,XTMPLOC,4)
.I $O(^XTMP("PSORLBL",HLINSTN,+RXNUM,0)) S FOUND=1
S DELARR("PSOLBL_"_RXNUM_"_"_PSOSITE_"_"_DT_".DAT")="" S DEL=$$DEL^%ZISH(PSODFDIR,$NA(DELARR))
; restore IO
D USE^%ZISUTL("ONEVAHLIO"),RMDEV^%ZISUTL("ONEVAHLIO")
D UPDPAR(.VALMSG,RRXIEN,PHARM,PHONE,SITE,PASSLOC)
S RX0=$G(^PSRX(RRXIEN,0)),RX2=$G(^PSRX(RRXIEN,2)),RX3=$G(^PSRX(RRXIEN,3))
S RXSTA=$G(^PSRX(RRXIEN,"STA")),RPROV=$$GET1^DIQ(200,$P(RX0,U,4),.01,"E")_U_$$GET1^DIQ(200,$P(RX0,U,16),.01,"E")
S RSIG=$G(^PSRX(RRXIEN,"SIG"))
S RPAR0=$G(^PSRX(RRXIEN,"P",PFIEN,0))
S ROR1=$G(^PSRX(RRXIEN,"OR1"))
S RREFIEN=$O(^PSRX(RRXIEN,1,"A"),-1)
I RREFIEN S RREF0=$G(^PSRX(RRXIEN,1,RREFIEN,0))
CLCX D ULK K DR,DIE,DRG,PPL,RXP,IOP,DA,PHYS,PSOPRZ,PSORX,PSOSIEN,PSOSITE,PSOX,PSOZZ,PSXSYS,RXPR,ZD Q
;
KILL S DA=Z1,DIK="^PSRX("_RXN_",""P""," D ^DIK S ^PSRX(RXN,"TYPE")=0
D ULK S VALMSG(1)="No Partial Fill Dispensed" D PARFAIL(.VALMSG,RRXIEN,PHARM,PHONE,SITE) Q
KL K DFN,RFDAT,RLL,%,PRMK,PM,%Y,%X,D0,D1,DA,DI,DIC,DIE,DLAYGO,DQ,DR,I,II,J,JJJ,N,PHYS,PS,PSDATE,RFL,RFL1,RXF,ST,ST0,Z,Z1,X,Y,PDT,PSL,PSNP
K PSOM,PSOP,PSOD,PSOU,DIK,DUOUT,IFN,RXN,DRG,HRX,I1,PSOCLC,PSOLIST,PSOLST,PSPAR,RXP D KVA^VADPT Q
ACT ;adds activity info for partial rx
S RXF=0 F I=0:0 S I=$O(^PSRX(RRXIEN,1,I)) Q:'I S RXF=I S:I>5 RXF=I+1
S DA=0 F FDA=0:0 S FDA=$O(^PSRX(RRXIEN,"A",FDA)) Q:'FDA S DA=FDA
S DA=DA+1,^PSRX(RRXIEN,"A",0)="^52.3DA^"_DA_"^"_DA,^PSRX(RRXIEN,"A",DA,0)=DT_"^"_"P"_"^"_PSOPHDUZ_"^"_RXF_"^"_PRMK
EX K RXF,I,FDA S DA=RXN
Q
ULK ;
K PSOMSG,PSOPLCK,PSORPDFN
Q
PARFAIL(PSOMSG,PSOIEN,RPHARM,RPHONE,RSITE) ;
S PSOMSG(0)=0_U_$$GET1^DIQ(52,PSOIEN,.01,"I")_U_PSOIEN,$P(PSOMSG(0),U,15)=RPHARM,$P(PSOMSG(0),U,16)=RPHONE,$P(PSOMSG(0),U,17)=RSITE
Q
VALIDDRUG(DRUGIEN) ;
S DINACT=$$GET1^DIQ(50,DRUGIEN,100,"I")
I DINACT>0,($$DT^XLFDT>DINACT) S VALMSG(1)="Drug is inactive for Rx# "_RXNUM_". Cannot process partial fill." Q 0
S CSVAL=$$GET1^DIQ(50,DRUGIEN,3,"E"),CSVAL=$E(CSVAL,1)
I CSVAL,CSVAL>0,CSVAL<6 S VALMSG(1)="Rx #"_RXNUM_" cannot be partially filled. The associated drug is considered a controlled substance at the host facility." Q 0
S CLOZVAL=$$GET1^DIQ(50,DRUGIEN,17.5) ; Clozapine Check PSO*7*740
I CLOZVAL="PSOCLO1" S VALMSG(1)="This is a Clozapine prescription.",VALMSG(2)="Cannot process a partial fill for Rx # "_RXNUM_"." Q 0
;
S NOONEVA=$$GET1^DIQ(50,DRUGIEN,907)
I NOONEVA="YES" S VALMSG(1)="Remote Site Drug is restricted from OneVA Pharmacy processing.",VALMSG(2)="Cannot process a partial fill for Rx # "_RXNUM_"." Q 0
Q 1
UPDPAR(PSOMSG,PSOIEN,RPHARM,RPHONE,RSITE,PASSLOC) ;
N PARIEN,PARIENS,PARDATA,FIL,RXNUM,RFILLDT,QTY,DSUPP,CLERK,LOGDATE,IDIV,EDIV,DISPDT,NDC,FDA,DNAME,DIEN
S FIL=52.2
; get last partial data node
S PARIEN=$O(^PSRX(PSOIEN,"P",""),-1)
S RXNUM=$$GET1^DIQ(52,PSOIEN,.01,"E")
S DNAME=$$GET1^DIQ(52,PSOIEN,6,"E")
S DIEN=$$GET1^DIQ(52,PSOIEN,6,"I")
S PARIENS=PARIEN_","_PSOIEN_","
; first, set in the remote pharmacist data
S FDA(52.2,PARIENS,91)=RSITE
S FDA(52.2,PARIENS,92)=RPHARM
S FDA(52.2,PARIENS,93)=RPHONE
D FILE^DIE(,"FDA","MSG") K FDA,RPHARM,RPHONE,RSITE
; now query data and build RET(0) holding accurate information from the refill multiple
D GETS^DIQ(FIL,PARIENS,"**","IE","PARDATA")
S RFILLDT=$G(PARDATA(FIL,PARIENS,.01,"I"))
S QTY=$G(PARDATA(FIL,PARIENS,.04,"I"))
S DSUPP=$G(PARDATA(FIL,PARIENS,.041,"I"))
S CLERK=$G(PARDATA(FIL,PARIENS,.07,"E"))
S LOGDATE=$G(PARDATA(FIL,PARIENS,.08,"I"))
; internal division number (IEN to PSO SITE file)
S IDIV=$G(PARDATA(FIL,PARIENS,.09,"I"))
S EDIV=$G(PARDATA(FIL,PARIENS,.09,"E"))
;
; there is nothing in this field.
; HL7 is returning refill date in the RXD
; but trying to log the blank dispense date from file 52.2 into 52.09
S DISPDT=$G(PARDATA(FIL,PARIENS,7.5,"I"))
;
S NDC=$G(PARDATA(FIL,PARIENS,1,"E"))
S RSITE=$G(PARDATA(FIL,PARIENS,91,"I"))
S RPHARM=$G(PARDATA(FIL,PARIENS,92,"E"))
S RPHONE=$G(PARDATA(FIL,PARIENS,93,"E"))
S $P(DAT(1),U,3)=RXNUM,$P(DAT(1),U,4)=RSITE,$P(DAT(1),U,7)=QTY,$P(DAT(1),U,8)=DISPDT,$P(DAT(1),U,9)=DNAME,$P(DAT(1),U,10)=DSUPP,$P(DAT(1),U,11)=RPHARM,$P(DAT(1),U,12)=RFILLDT
D LOGDATA^PSORWRAP($NA(DAT),"OP",,,PSOIEN,,PARIEN)
S PSOMSG(0)=1_U_RXNUM_U_PSOIEN_U_PARIEN_U_RFILLDT_U_DNAME_U_QTY_U_DSUPP_U_CLERK_U_LOGDATE_U_IDIV_U_EDIV_U_DISPDT_U_NDC_U_RPHARM_U_RPHONE_U_RSITE_U_PASSLOC
I '$L($G(PSOMSG(1))) S PSOMSG(1)="Partial complete for RX #"_RXNUM_"."
Q
;
VALDRGINT(DRUGIEN,FILLTYP,RXNUM) ; Interactive check for drug restrictions
N DINACT,CSVAL,CLOZVAL,NOONEVA
; Inactive
S DINACT=$$GET1^DIQ(50,DRUGIEN,100,"I")
I DINACT>0,($$DT^XLFDT>DINACT) D Q 0
.;I FILLTYP="F" W !!,"Matched Drug "_$$GET1^DIQ(50,DRUGIEN,.01,"E")_" is inactive.",!,"Cannot refill."
.W !!,"Matched Drug "_$$GET1^DIQ(50,DRUGIEN,.01,"E")_" is inactive.",!,"Cannot "_$S(FILLTYP="R":"refill.",1:"process a partial fill.")
.Q
; Controlled substance check
S CSVAL=$$GET1^DIQ(50,DRUGIEN,3,"E"),CSVAL=$E(CSVAL,1)
I CSVAL,CSVAL>0,CSVAL<6 D Q 0
.;I FILLTYP="R" W !!,"This is a controlled substance. Cannot refill Rx#",RXNUM,"."
.W !!,"This is a controlled substance. Cannot "_$S(FILLTYP="R":"refill",1:"process a partial fill for")_" Rx # ",RXNUM,"."
.Q
; Clozapine check PSO*7*740
S CLOZVAL=$$GET1^DIQ(50,DRUGIEN,17.5)
I CLOZVAL="PSOCLO1" D Q 0
.;I FILLTYP="F" W !!,"This is a Clozapine prescription.",!,"Cannot refill Rx # ",RXNUM,"."
.W !!,"This is a Clozapine prescription.",!,"Cannot "_$S(FILLTYP="R":"refill",1:"process a partial fill for")_" Rx # ",RXNUM,"."
.Q
;
; Restrict for OneVA
S NOONEVA=$$GET1^DIQ(50,DRUGIEN,907)
I NOONEVA="YES" D Q 0
.I FILLTYP="F" W !!,"Local Drug is restricted from OneVA Pharmacy processing.",!,"Cannot refill Rx # ",RXNUM,"."
.E W !!,"Local Drug is restricted from OneVA Pharmacy processing.",!,"Cannot "_$S(FILLTYP="R":"refill",1:"process a partial fill for")_" Rx # ",RXNUM,"."
.Q
Q 1
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSORRPA1 12894 printed Oct 16, 2024@18:34:57 Page 2
PSORRPA1 ;AITC/BWF - remote partial prescriptions ;12/12/16 3:21pm
+1 ;;7.0;OUTPATIENT PHARMACY;**454,475,497,643,740**;DEC 1997;Build 18
+2 ;
+3 ;External references L,UL, PSOL, and PSOUL^PSSLOCK supported by DBIA 2789
+4 ;External reference to ^PSDRUG supported by DBIA 221
+5 ;External reference to ^DD(52 supported by DBIA 999
+6 ; bwf - Modified copy of PSORXPA1
+7 ; bwf - 2/24/14 adding PAR refill tag for API usage.
+8 ; VALMSG - return data for remote facility
+9 ; RXNUM - rx number
+10 ; PFDATE - Partial Fill Date
+11 ; MW - Mail or Window
+12 ; QTY - Quantity
+13 ; DSUPP - Days Supply
+14 ; REMARKS - Remarks entered by 'remote' (filling) facility.
+15 ; PHARM - Remote pharmacist's name
+16 ; PHONE - remote pharmacists phone number
+17 ; SITE - remote filling site.
+18 ;
PAR(VALMSG,RXNUM,PFDATE,MW,QTY,DSUPP,REMARKS,PHARM,PHONE,SITE,RX0,RX2,RXSTA,RPROV,RSIG,RPAR0,ROR1,RX3,RREF0) ;
+1 NEW RRXIEN,PSOPAR,ORN,PSOLST,XTMPLOC,PASSLOC,HFSIEN,FULLPTH,HFSDONE,PTHDAT,PTHPIECE,DEL,DELARR,FTGOPEN,FOUND,FTGSTRT,FTGOPEN,STATION,HDRUG
+2 NEW PERR,PDIR,PFIL,CSVAL,C,D,E,NEWPFIEN,PFIEN,PFIENS,PSOEXREP,PSOFROM,DINACT,PSOPHDUZ,PSODFDIR,PSOFNAME,PSOZ1,RREFIEN,CLOZVAL,NOONEVA
+3 SET $ETRAP="D ^%ZTER Q"
+4 SET (RRXIEN,RXN)=$ORDER(^PSRX("B",RXNUM,0))
SET PSOSIEN=$$GET1^DIQ(52,RRXIEN,20,"I")
+5 IF '$$GET1^DIQ(59.7,1,101,"I")
Begin DoDot:1
+6 SET VALMSG(1)="The OneVA pharmacy flag is turned 'OFF' at this facility."
+7 SET VALMSG(2)="Unable to process refill/partial fill requests."
+8 DO PARFAIL(.VALMSG,RRXIEN,PHARM,PHONE,SITE)
End DoDot:1
QUIT
+9 ; PSO*7*497 - trade name block
+10 IF $$GET1^DIQ(52,RRXIEN,6.5,"E")]""
Begin DoDot:1
+11 DO PARFAIL(.VALMSG,RRXIEN,PHARM,PHONE,SITE)
+12 SET VALMSG(1)="This prescription cannot be refilled or partial filled because it has a value"
+13 SET VALMSG(2)="entered in the Rx trade name field. Please follow local policy for obtaining"
+14 SET VALMSG(3)="a new prescription."
End DoDot:1
QUIT
+15 ; PSO*7*497 - end trade name block
+16 SET HDRUG=$$GET1^DIQ(52,RRXIEN,6,"I")
+17 IF '$$VALIDDRUG(HDRUG)
DO PARFAIL(.VALMSG,RRXIEN,PHARM,PHONE,SITE)
QUIT
+18 IF $DATA(^PSRX(RRXIEN,"ADP",PFDATE,RRXIEN))
SET VALMSG(1)="A partial fill already exists for "_$$FMTE^XLFDT(PFDATE,"5D")_"."
SET VALMSG(2)="Partial cannot be processed"
DO PARFAIL(.VALMSG,RRXIEN,PHARM,PHONE,SITE)
QUIT
+19 SET PSOPAR=$GET(^PS(59,PSOSIEN,1))
SET PSOSITE=PSOSIEN
+20 ; set up PSOLST
+21 SET ORN=1
SET PSOLST(ORN)=52_U_RRXIEN_U_U
+22 SET PSOPHDUZ=$$GET1^DIQ(52,RRXIEN,23,"I")
IF 'PSOPHDUZ
SET PSOPHDUZ=.5
+23 SET PSORPDFN=+$PIECE($GET(^PSRX($PIECE(PSOLST(ORN),"^",2),0)),"^",2)
+24 SET DA=$PIECE(PSOLST(ORN),"^",2)
SET RX0=^PSRX(DA,0)
SET J=DA
SET RX2=$GET(^(2))
SET R3=$GET(^(3))
if '$GET(BBFLG)
SET BBRX(1)=""
+25 NEW PSORF,PSOTRIC
DO TRIC^PSORXL1(DA)
IF PSOTRIC&($$STATUS^PSOBPSUT(DA,PSORF)'["PAYABLE")
Begin DoDot:1
+26 SET VALMSG(1)="Partial cannot be filled on Tricare non-payable Rx."
+27 DO PARFAIL(.VALMSG,RRXIEN,PHARM,PHONE,SITE)
End DoDot:1
QUIT
+28 IF +$PIECE($GET(^PSRX(DA,2)),"^",6)<DT
Begin DoDot:1
+29 if $PIECE($GET(^PSRX(DA,"STA")),"^")<12
SET $PIECE(^PSRX(DA,"STA"),"^")=11
+30 SET COMM="Medication Expired on "_$EXTRACT($PIECE(^PSRX(DA,2),"^",6),4,5)_"/"_$EXTRACT($PIECE(^(2),"^",6),6,7)_"/"_$EXTRACT($PIECE(^(2),"^",6),2,3)
+31 SET STAT="SC"
SET PHARMST="ZE"
DO EN^PSOHLSN1(DA,STAT,PHARMST,COMM)
KILL STAT,PHARMST,COMM,RX0,J,RX2,R3
End DoDot:1
+32 IF +^PSRX(DA,"STA")
IF +^("STA")'=5
IF +^("STA")'=11
Begin DoDot:1
+33 ;IA#999
SET C=";"_+^PSRX(DA,"STA")_":"
SET X=$PIECE(^DD(52,100,0),"^",3)
SET E=$FIND(X,C)
SET D=$PIECE($EXTRACT(X,E,999),";")
+34 SET VALMSG(1)="Prescription is in a "_D_" status."
+35 DO PARFAIL(.VALMSG,RRXIEN,PHARM,PHONE,SITE)
End DoDot:1
KILL DA
DO ULK
QUIT
+36 IF $GET(PSXSYS)
IF ($ORDER(^PS(52.5,"B",DA,"")))
SET PSOZ1=$ORDER(^PS(52.5,"B",DA,""))
Begin DoDot:1
+37 IF $PIECE($GET(^PS(52.5,PSOZ1,0)),"^",7)="Q"!($PIECE($GET(^(0)),"^",7)="L")
Begin DoDot:2
+38 SET VALMSG(1)="A partial entered for this Rx cannot be suspended."
+39 SET VALMSG(2)="A fill for this Rx is already suspended for CMOP transmission."
+40 SET VALMSG(3)="You may pull this fill from suspense or enter a partial and print the label."
+41 DO PARFAIL(.VALMSG,RRXIEN,PHARM,PHONE,SITE)
End DoDot:2
End DoDot:1
CLC SET PSOCLC=PSOPHDUZ
SET PHYS=$PIECE(^PSRX(DA,0),"^",4)
SET DRG=$PIECE(^(0),"^",6)
+1 IF 'PHYS
IF $ORDER(^PSRX(DA,1,0))
FOR I=0:0
SET I=$ORDER(^PSRX(DA,1,I))
if 'I
QUIT
SET PHYS=$SELECT($PIECE(^PSRX(DA,1,I,0),"^",17):$PIECE(^PSRX(DA,1,I,0),"^",17),1:PHYS)
+2 SET PSOPRZ=0
IF $ORDER(^PSRX(DA,"P",0))
NEW Z2
FOR Z2=0:0
SET Z2=$ORDER(^PSRX(DA,"P",Z2))
if 'Z2
QUIT
SET PSOPRZ=Z2
+3 IF $DATA(RXPR(DA))
IF '$DATA(^PSRX(DA,"P",$GET(RXPR(DA))))
DO RMP^PSOCAN3
+4 ; bwf - save information into database, just as it would be through ^DIE
+5 SET FDA(52.2,"+1,"_RRXIEN_",",.01)=PFDATE
DO UPDATE^DIE(,"FDA","NEWPFIEN","PERR")
KILL FDA
+6 IF $DATA(PERR)
MERGE VALMSG=PERR
+7 SET PFIEN=$ORDER(NEWPFIEN(0))
SET PFIEN=$GET(NEWPFIEN(PFIEN))
+8 ; set Z1 variable as was done in the ^DIE call for later use.
+9 SET Z1=PFIEN
+10 SET PFIENS=PFIEN_","_RRXIEN_","
+11 ; set PM variable as was done in the ^DIE call for later use.
+12 IF MW="M"!('$PIECE($GET(PSOPAR),U,12))
SET PM=1
+13 SET FDA(52.2,PFIENS,.02)=MW
+14 SET FDA(52.2,PFIENS,.04)=QTY
+15 SET FDA(52.2,PFIENS,.041)=DSUPP
+16 ; currently we have no local pharmacist. May need to add entry to file 200 for 'REMOTE,PHARMACIST' or 'PHARMACIST,REMOTE'
+17 SET FDA(52.2,PFIENS,.05)=PSOPHDUZ
+18 ; can we use DUZ as the clerk code, or will this need another value??
+19 SET FDA(52.2,PFIENS,.07)=PSOPHDUZ
+20 SET FDA(52.2,PFIENS,6)=PHYS
+21 SET FDA(52.2,PFIENS,.08)=$$NOW^XLFDT
+22 SET FDA(52.2,PFIENS,.09)=PSOSITE
+23 SET FDA(52.2,PFIENS,.03)=REMARKS
+24 ;
+25 ; setting the partial fill date to the dispense date to match the
+26 ; HL7 response
+27 SET FDA(52.2,PFIENS,7.5)=PFDATE
+28 ;
+29 SET RXPR(RRXIEN)=PFIEN
SET PSOZZ=1
SET PRMK=REMARKS
+30 ; file the rest of the data onto the newly created multiple.
+31 DO FILE^DIE(,"FDA")
KILL FDA
+32 IF Z1
IF $GET(PRMK)]""
Begin DoDot:1
+33 DO ACT
+34 SET ZD(RXN)=+^PSRX(RXN,"P",Z1,0)
SET ^PSRX(RXN,"TYPE")=Z1
SET $PIECE(^PSRX(RXN,"P",Z1,0),"^",11)=$PIECE($GET(^PSDRUG(DRG,660)),"^",6)
End DoDot:1
if $TEXT(EN^PSOHDR)]""
DO EN^PSOHDR("PPAR",RXN)
KILL DIE,RXN,RXF
+35 ;D:$D(BINGRTE)&($D(DISGROUP)) ^PSOBING1 K BINGRTE,TM,TM1
if '$DATA(PSOFROM)
SET PSOFROM="PARTIAL"
SET BINGCRT=1
+36 ; bwf 8/14/14 - set up needed variables for label printing
+37 SET PSODFN=$PIECE(^PSRX(RRXIEN,0),U,2)
+38 SET PSORX("PSOL",1)=RRXIEN_","
+39 SET PSORX("MAIL/WINDOW")="WINDOW"
+40 SET PSORX("NAME")=$$GET1^DIQ(2,PSODFN,.01)
+41 SET PSORX("QFLG")=0
+42 SET PSORX("METHOD OF PICKUP")=""
+43 SET PSOX=$GET(^PS(55,PSODFN,"PS"))
IF PSOX]""
SET PSORX("PATIENT STATUS")=$PIECE($GET(^PS(53,PSOX,0)),"^")
+44 NEW PPL1
+45 SET PPL1=RRXIEN
+46 SET HFSDONE=0
SET PTHDAT=""
+47 SET PSODFDIR=$$DEFDIR^%ZISH()
+48 SET PSOFNAME="PSOLBL_"_RXNUM_"_"_PSOSITE_"_"_DT_".DAT"
+49 SET FULLPTH=PSODFDIR_PSOFNAME
+50 ; bwf 8/14/14 - end setup for label printing.
+51 ; preserve IO
+52 DO SAVDEV^%ZISUTL("ONEVAHLIO")
+53 ; delete the file first to ensure there isn't one lingering around
+54 SET DELARR("PSOLBL_"_RXNUM_"_"_PSOSITE_"_"_DT_".DAT")=""
SET DEL=$$DEL^%ZISH(PSODFDIR,$NAME(DELARR))
+55 SET PSOEXREP=1
+56 ; call out to generate label
+57 DO LABEL^PSORWRAP(RRXIEN,"HFS",PSOSITE,PSOPHDUZ,"",PSOFNAME)
+58 SET XTMPLOC="^XTMP(""PSORLBL"","_HLINSTN_","_+RXNUM_",1,0)"
+59 SET PASSLOC="XTMP(""PSORLBL"","_HLINSTN_","_+RXNUM_")"
+60 KILL ^XTMP("PSORLBL",HLINSTN,+RXNUM)
+61 SET ^XTMP("PSORLBL",HLINSTN,+RXNUM,0)=DT_U_$$FMADD^XLFDT(DT,30)
+62 ; looks like we have to wait a moment before the file shows up.
+63 SET FTGSTRT=$$NOW^XLFDT
SET (FOUND,FTGOPEN)=0
+64 NEW PAR
SET PAR=0
+65 FOR
Begin DoDot:1
+66 SET FTGOPEN=$$FTG^%ZISH(PSODFDIR,PSOFNAME,XTMPLOC,4)
+67 IF $ORDER(^XTMP("PSORLBL",HLINSTN,+RXNUM,0))
SET FOUND=1
End DoDot:1
if $$NOW^XLFDT>$$FMADD^XLFDT(FTGSTRT,,,,15)!(FOUND)!(FTGOPEN)
QUIT
+68 SET DELARR("PSOLBL_"_RXNUM_"_"_PSOSITE_"_"_DT_".DAT")=""
SET DEL=$$DEL^%ZISH(PSODFDIR,$NAME(DELARR))
+69 ; restore IO
+70 DO USE^%ZISUTL("ONEVAHLIO")
DO RMDEV^%ZISUTL("ONEVAHLIO")
+71 DO UPDPAR(.VALMSG,RRXIEN,PHARM,PHONE,SITE,PASSLOC)
+72 SET RX0=$GET(^PSRX(RRXIEN,0))
SET RX2=$GET(^PSRX(RRXIEN,2))
SET RX3=$GET(^PSRX(RRXIEN,3))
+73 SET RXSTA=$GET(^PSRX(RRXIEN,"STA"))
SET RPROV=$$GET1^DIQ(200,$PIECE(RX0,U,4),.01,"E")_U_$$GET1^DIQ(200,$PIECE(RX0,U,16),.01,"E")
+74 SET RSIG=$GET(^PSRX(RRXIEN,"SIG"))
+75 SET RPAR0=$GET(^PSRX(RRXIEN,"P",PFIEN,0))
+76 SET ROR1=$GET(^PSRX(RRXIEN,"OR1"))
+77 SET RREFIEN=$ORDER(^PSRX(RRXIEN,1,"A"),-1)
+78 IF RREFIEN
SET RREF0=$GET(^PSRX(RRXIEN,1,RREFIEN,0))
CLCX DO ULK
KILL DR,DIE,DRG,PPL,RXP,IOP,DA,PHYS,PSOPRZ,PSORX,PSOSIEN,PSOSITE,PSOX,PSOZZ,PSXSYS,RXPR,ZD
QUIT
+1 ;
KILL SET DA=Z1
SET DIK="^PSRX("_RXN_",""P"","
DO ^DIK
SET ^PSRX(RXN,"TYPE")=0
+1 DO ULK
SET VALMSG(1)="No Partial Fill Dispensed"
DO PARFAIL(.VALMSG,RRXIEN,PHARM,PHONE,SITE)
QUIT
KL KILL DFN,RFDAT,RLL,%,PRMK,PM,%Y,%X,D0,D1,DA,DI,DIC,DIE,DLAYGO,DQ,DR,I,II,J,JJJ,N,PHYS,PS,PSDATE,RFL,RFL1,RXF,ST,ST0,Z,Z1,X,Y,PDT,PSL,PSNP
+1 KILL PSOM,PSOP,PSOD,PSOU,DIK,DUOUT,IFN,RXN,DRG,HRX,I1,PSOCLC,PSOLIST,PSOLST,PSPAR,RXP
DO KVA^VADPT
QUIT
ACT ;adds activity info for partial rx
+1 SET RXF=0
FOR I=0:0
SET I=$ORDER(^PSRX(RRXIEN,1,I))
if 'I
QUIT
SET RXF=I
if I>5
SET RXF=I+1
+2 SET DA=0
FOR FDA=0:0
SET FDA=$ORDER(^PSRX(RRXIEN,"A",FDA))
if 'FDA
QUIT
SET DA=FDA
+3 SET DA=DA+1
SET ^PSRX(RRXIEN,"A",0)="^52.3DA^"_DA_"^"_DA
SET ^PSRX(RRXIEN,"A",DA,0)=DT_"^"_"P"_"^"_PSOPHDUZ_"^"_RXF_"^"_PRMK
EX KILL RXF,I,FDA
SET DA=RXN
+1 QUIT
ULK ;
+1 KILL PSOMSG,PSOPLCK,PSORPDFN
+2 QUIT
PARFAIL(PSOMSG,PSOIEN,RPHARM,RPHONE,RSITE) ;
+1 SET PSOMSG(0)=0_U_$$GET1^DIQ(52,PSOIEN,.01,"I")_U_PSOIEN
SET $PIECE(PSOMSG(0),U,15)=RPHARM
SET $PIECE(PSOMSG(0),U,16)=RPHONE
SET $PIECE(PSOMSG(0),U,17)=RSITE
+2 QUIT
VALIDDRUG(DRUGIEN) ;
+1 SET DINACT=$$GET1^DIQ(50,DRUGIEN,100,"I")
+2 IF DINACT>0
IF ($$DT^XLFDT>DINACT)
SET VALMSG(1)="Drug is inactive for Rx# "_RXNUM_". Cannot process partial fill."
QUIT 0
+3 SET CSVAL=$$GET1^DIQ(50,DRUGIEN,3,"E")
SET CSVAL=$EXTRACT(CSVAL,1)
+4 IF CSVAL
IF CSVAL>0
IF CSVAL<6
SET VALMSG(1)="Rx #"_RXNUM_" cannot be partially filled. The associated drug is considered a controlled substance at the host facility."
QUIT 0
+5 ; Clozapine Check PSO*7*740
SET CLOZVAL=$$GET1^DIQ(50,DRUGIEN,17.5)
+6 IF CLOZVAL="PSOCLO1"
SET VALMSG(1)="This is a Clozapine prescription."
SET VALMSG(2)="Cannot process a partial fill for Rx # "_RXNUM_"."
QUIT 0
+7 ;
+8 SET NOONEVA=$$GET1^DIQ(50,DRUGIEN,907)
+9 IF NOONEVA="YES"
SET VALMSG(1)="Remote Site Drug is restricted from OneVA Pharmacy processing."
SET VALMSG(2)="Cannot process a partial fill for Rx # "_RXNUM_"."
QUIT 0
+10 QUIT 1
UPDPAR(PSOMSG,PSOIEN,RPHARM,RPHONE,RSITE,PASSLOC) ;
+1 NEW PARIEN,PARIENS,PARDATA,FIL,RXNUM,RFILLDT,QTY,DSUPP,CLERK,LOGDATE,IDIV,EDIV,DISPDT,NDC,FDA,DNAME,DIEN
+2 SET FIL=52.2
+3 ; get last partial data node
+4 SET PARIEN=$ORDER(^PSRX(PSOIEN,"P",""),-1)
+5 SET RXNUM=$$GET1^DIQ(52,PSOIEN,.01,"E")
+6 SET DNAME=$$GET1^DIQ(52,PSOIEN,6,"E")
+7 SET DIEN=$$GET1^DIQ(52,PSOIEN,6,"I")
+8 SET PARIENS=PARIEN_","_PSOIEN_","
+9 ; first, set in the remote pharmacist data
+10 SET FDA(52.2,PARIENS,91)=RSITE
+11 SET FDA(52.2,PARIENS,92)=RPHARM
+12 SET FDA(52.2,PARIENS,93)=RPHONE
+13 DO FILE^DIE(,"FDA","MSG")
KILL FDA,RPHARM,RPHONE,RSITE
+14 ; now query data and build RET(0) holding accurate information from the refill multiple
+15 DO GETS^DIQ(FIL,PARIENS,"**","IE","PARDATA")
+16 SET RFILLDT=$GET(PARDATA(FIL,PARIENS,.01,"I"))
+17 SET QTY=$GET(PARDATA(FIL,PARIENS,.04,"I"))
+18 SET DSUPP=$GET(PARDATA(FIL,PARIENS,.041,"I"))
+19 SET CLERK=$GET(PARDATA(FIL,PARIENS,.07,"E"))
+20 SET LOGDATE=$GET(PARDATA(FIL,PARIENS,.08,"I"))
+21 ; internal division number (IEN to PSO SITE file)
+22 SET IDIV=$GET(PARDATA(FIL,PARIENS,.09,"I"))
+23 SET EDIV=$GET(PARDATA(FIL,PARIENS,.09,"E"))
+24 ;
+25 ; there is nothing in this field.
+26 ; HL7 is returning refill date in the RXD
+27 ; but trying to log the blank dispense date from file 52.2 into 52.09
+28 SET DISPDT=$GET(PARDATA(FIL,PARIENS,7.5,"I"))
+29 ;
+30 SET NDC=$GET(PARDATA(FIL,PARIENS,1,"E"))
+31 SET RSITE=$GET(PARDATA(FIL,PARIENS,91,"I"))
+32 SET RPHARM=$GET(PARDATA(FIL,PARIENS,92,"E"))
+33 SET RPHONE=$GET(PARDATA(FIL,PARIENS,93,"E"))
+34 SET $PIECE(DAT(1),U,3)=RXNUM
SET $PIECE(DAT(1),U,4)=RSITE
SET $PIECE(DAT(1),U,7)=QTY
SET $PIECE(DAT(1),U,8)=DISPDT
SET $PIECE(DAT(1),U,9)=DNAME
SET $PIECE(DAT(1),U,10)=DSUPP
SET $PIECE(DAT(1),U,11)=RPHARM
SET $PIECE(DAT(1),U,12)=RFILLDT
+35 DO LOGDATA^PSORWRAP($NAME(DAT),"OP",,,PSOIEN,,PARIEN)
+36 SET PSOMSG(0)=1_U_RXNUM_U_PSOIEN_U_PARIEN_U_RFILLDT_U_DNAME_U_QTY_U_DSUPP_U_CLERK_U_LOGDATE_U_IDIV_U_EDIV_U_DISPDT_U_NDC_U_RPHARM_U_RPHONE_U_RSITE_U_PASSLOC
+37 IF '$LENGTH($GET(PSOMSG(1)))
SET PSOMSG(1)="Partial complete for RX #"_RXNUM_"."
+38 QUIT
+39 ;
VALDRGINT(DRUGIEN,FILLTYP,RXNUM) ; Interactive check for drug restrictions
+1 NEW DINACT,CSVAL,CLOZVAL,NOONEVA
+2 ; Inactive
+3 SET DINACT=$$GET1^DIQ(50,DRUGIEN,100,"I")
+4 IF DINACT>0
IF ($$DT^XLFDT>DINACT)
Begin DoDot:1
+5 ;I FILLTYP="F" W !!,"Matched Drug "_$$GET1^DIQ(50,DRUGIEN,.01,"E")_" is inactive.",!,"Cannot refill."
+6 WRITE !!,"Matched Drug "_$$GET1^DIQ(50,DRUGIEN,.01,"E")_" is inactive.",!,"Cannot "_$SELECT(FILLTYP="R":"refill.",1:"process a partial fill.")
+7 QUIT
End DoDot:1
QUIT 0
+8 ; Controlled substance check
+9 SET CSVAL=$$GET1^DIQ(50,DRUGIEN,3,"E")
SET CSVAL=$EXTRACT(CSVAL,1)
+10 IF CSVAL
IF CSVAL>0
IF CSVAL<6
Begin DoDot:1
+11 ;I FILLTYP="R" W !!,"This is a controlled substance. Cannot refill Rx#",RXNUM,"."
+12 WRITE !!,"This is a controlled substance. Cannot "_$SELECT(FILLTYP="R":"refill",1:"process a partial fill for")_" Rx # ",RXNUM,"."
+13 QUIT
End DoDot:1
QUIT 0
+14 ; Clozapine check PSO*7*740
+15 SET CLOZVAL=$$GET1^DIQ(50,DRUGIEN,17.5)
+16 IF CLOZVAL="PSOCLO1"
Begin DoDot:1
+17 ;I FILLTYP="F" W !!,"This is a Clozapine prescription.",!,"Cannot refill Rx # ",RXNUM,"."
+18 WRITE !!,"This is a Clozapine prescription.",!,"Cannot "_$SELECT(FILLTYP="R":"refill",1:"process a partial fill for")_" Rx # ",RXNUM,"."
+19 QUIT
End DoDot:1
QUIT 0
+20 ;
+21 ; Restrict for OneVA
+22 SET NOONEVA=$$GET1^DIQ(50,DRUGIEN,907)
+23 IF NOONEVA="YES"
Begin DoDot:1
+24 IF FILLTYP="F"
WRITE !!,"Local Drug is restricted from OneVA Pharmacy processing.",!,"Cannot refill Rx # ",RXNUM,"."
+25 IF '$TEST
WRITE !!,"Local Drug is restricted from OneVA Pharmacy processing.",!,"Cannot "_$SELECT(FILLTYP="R":"refill",1:"process a partial fill for")_" Rx # ",RXNUM,"."
+26 QUIT
End DoDot:1
QUIT 0
+27 QUIT 1