PSORRPA1 ;AITC/BWF,RBD - remote partial prescriptions ;18 Feb 2025  8:56 AM
 ;;7.0;OUTPATIENT PHARMACY;**454,475,497,643,740,774**;DEC 1997;Build 15
 ;
 ;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=$$FIND1^DIC(200,,"M","PSOAPPLICATIONPROXY,PSO") I 'PSOPHDUZ S PSOPHDUZ=.5   ; RBD *774 Always set PSOPHDUZ to PSOAPPLICATIONPROXY,PSO
 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
UNPARK ; Unpark it if it is PARK'ed - RBD *774
 N PSORXIEN S PSORXIEN=$O(^PSRX("B",RXNUM,0)) Q:'$G(^PSRX(PSORXIEN,"PARK"))
 I $$GET1^DIQ(52,PSORXIEN,11,"I")'="W" D   ; RBD *774 Set Routing to WINDOW if it is not
 .K FDA N PSORXIENS S PSORXIENS=PSORXIEN_",",FDA(52,PSORXIENS,11)="W" D FILE^DIE(,"FDA","PSOERR") K FDA
 D KILLPARK^PSOPRK(PSORXIEN) N PSOUPUSR
 S PSOUPUSR=$$FIND1^DIC(200,,"M","PSOAPPLICATIONPROXY,PSO") S:'PSOUPUSR PSOUPUSR=.5   ; RBD *774 Set PSOUPUSR to PSOAPPLICATIONPROXY,PSO
 N X,DIC,DA,DD,DO,DR,DINUM,Y,DLAYGO,PSOCOMM,PSORFL
 S PSORFL=$$LSTRFL^PSOBPSU1(PSORXIEN)
 S PSOCOMM="Rx removed from Parked status ("_$E(DT,4,5)_"-"
 S PSOCOMM=PSOCOMM_$E(DT,6,7)_"-"_$E(DT,2,3)_")"
 S DA(1)=PSORXIEN,DIC="^PSRX("_PSORXIEN_",""A"",",DLAYGO=52.3,DIC(0)="L"
 S DIC("DR")=".02///E;.03///"_PSOUPUSR_";.04///"_$S((PSORFL>5):PSORFL+1,1:PSORFL)
 S DIC("DR")=DIC("DR")_";.05///"_PSOCOMM
 S X=$P($$NOW^XLFDT(),".") D FILE^DICN   ; RBD *774 Timestamp removed from X
 Q
 ;
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSORRPA1   13972     printed  Sep 23, 2025@20:10:45                                                                                                                                                                                                   Page 2
PSORRPA1  ;AITC/BWF,RBD - remote partial prescriptions ;18 Feb 2025  8:56 AM
 +1       ;;7.0;OUTPATIENT PHARMACY;**454,475,497,643,740,774**;DEC 1997;Build 15
 +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      ; RBD *774 Always set PSOPHDUZ to PSOAPPLICATIONPROXY,PSO
           SET PSOPHDUZ=$$FIND1^DIC(200,,"M","PSOAPPLICATIONPROXY,PSO")
           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
UNPARK    ; Unpark it if it is PARK'ed - RBD *774
 +1        NEW PSORXIEN
           SET PSORXIEN=$ORDER(^PSRX("B",RXNUM,0))
           if '$GET(^PSRX(PSORXIEN,"PARK"))
               QUIT 
 +2       ; RBD *774 Set Routing to WINDOW if it is not
           IF $$GET1^DIQ(52,PSORXIEN,11,"I")'="W"
               Begin DoDot:1
 +3                KILL FDA
                   NEW PSORXIENS
                   SET PSORXIENS=PSORXIEN_","
                   SET FDA(52,PSORXIENS,11)="W"
                   DO FILE^DIE(,"FDA","PSOERR")
                   KILL FDA
               End DoDot:1
 +4        DO KILLPARK^PSOPRK(PSORXIEN)
           NEW PSOUPUSR
 +5       ; RBD *774 Set PSOUPUSR to PSOAPPLICATIONPROXY,PSO
           SET PSOUPUSR=$$FIND1^DIC(200,,"M","PSOAPPLICATIONPROXY,PSO")
           if 'PSOUPUSR
               SET PSOUPUSR=.5
 +6        NEW X,DIC,DA,DD,DO,DR,DINUM,Y,DLAYGO,PSOCOMM,PSORFL
 +7        SET PSORFL=$$LSTRFL^PSOBPSU1(PSORXIEN)
 +8        SET PSOCOMM="Rx removed from Parked status ("_$EXTRACT(DT,4,5)_"-"
 +9        SET PSOCOMM=PSOCOMM_$EXTRACT(DT,6,7)_"-"_$EXTRACT(DT,2,3)_")"
 +10       SET DA(1)=PSORXIEN
           SET DIC="^PSRX("_PSORXIEN_",""A"","
           SET DLAYGO=52.3
           SET DIC(0)="L"
 +11       SET DIC("DR")=".02///E;.03///"_PSOUPUSR_";.04///"_$SELECT((PSORFL>5):PSORFL+1,1:PSORFL)
 +12       SET DIC("DR")=DIC("DR")_";.05///"_PSOCOMM
 +13      ; RBD *774 Timestamp removed from X
           SET X=$PIECE($$NOW^XLFDT(),".")
           DO FILE^DICN
 +14       QUIT 
 +15      ;