PSOORFIN ;BIR/SAB - finish cprs orders ;Dec 01, 2022@12:07:21
;;7.0;OUTPATIENT PHARMACY;**7,15,27,32,44,46,84,106,111,117,131,146,139,195,225,315,266,338,391,372,416,446,505,508,557,628,441,710,770**;DEC 1997;Build 145
;PSSLOCK-2789,PSDRUG-221,50.7-2223,55-2228,50.606-2174
;PSO*7*266 Change order of calling ^PSOBING1 and ^PSORXL
;
N ORD
D:'$D(PSOPAR) ^PSOLSET I '$D(PSOPAR) D MSG^PSODPT G EX
D INST^PSOORFI2 I $G(PSOIQUIT) K PSOIQUIT G EX
I $P($G(PSOPAR),"^",2),'$D(^XUSEC("PSORPH",DUZ)) S PSORX("VERIFY")=1
K PSOBCK,MEDA,MEDP,SRT,DIR D KQ
S PSOCLIN=0,(PSOFIN,POERR)=1,PSOSORT="ROUTE"
; Workload Processing Key assigned to User
I $D(^XUSEC("PSO ERX WORKLOAD RPH",DUZ)) D G EX:$G(PSOIQUIT) G ALLPATS
. N DIC S DIC="^SC(",DIC(0)="QEAMZ",DIC("A")="Select CLINIC: "
. I +$$GET1^DIQ(59,PSOSITE,10,"I") S DIC("B")=$$GET1^DIQ(44,+$$GET1^DIQ(59,PSOSITE,10,"I"),.01)
. S DIC("S")="I $$CHECKCLN^PSOORUT3(+$G(Y))"
. D ^DIC K DIC I Y<1!($D(DTOUT))!($D(DUOUT)) S PSOIQUIT=1 Q
. S PSOCLIN=+Y,PSOCLINF=1
;
S DIR("?")="^D ST^PSOORFI1",DIR("A")="Select By",DIR("B")="PATIENT"
S DIR(0)="SMB^PA:PATIENT;RT:ROUTE;PR:PRIORITY;CL:CLINIC;FL:FLAGGED;CS:CONTROLLED SUBSTANCES;SU:SUPPLY;E:EXIT"
D ^DIR I $D(DIRUT)!(Y="E") G EX
K:Y="FL" ^TMP($J,"PSOFLPO") ;file not needed when selection="FL"
G:Y="PA" PAT G:Y="PR" PRI^PSOORFI5 G:Y="CL" ^PSOORFI3 G:Y="FL" FLG^PSOORFI5 G:Y="CS" CS^PSOORFI5 G:Y="SU" SUP^PSOORFI5
K DIR S DIR("?")="^D RT^PSOORFI1",DIR("A")="Route",DIR(0)="SBM^W:WINDOW;M:MAIL;C:CLINIC;E:EXIT",DIR("B")="WINDOW"
N RESULTS,PSOPARKX
S RESULTS="PSOPARKX" D GETPARK^PSORPC01()
I $G(PSOPARKX(0))="YES" S DIR(0)="SBM^W:WINDOW;M:MAIL;P:PARK;C:CLINIC;E:EXIT"
D ^DIR G:$D(DIRUT)!(Y="E") EX S PSOSORT=PSOSORT_"^"_Y,PSRT=Y
N SECSORT S SECSORT=$$DIR^PSOORFI6("RT:ROUTE",Y) Q:SECSORT=U
S LG=0,PATA=0 F S LG=$O(^PS(52.41,"AD",LG)) Q:'LG!($G(POERR("QFLG"))) F PSOD=0:0 S PSOD=$O(^PS(52.41,"AD",LG,PSOPINST,PSOD)) Q:'PSOD!($G(POERR("QFLG"))) D
.I $P($G(^PS(52.41,PSOD,0)),"^",23),$P(SECSORT,"^",1)'="FL" Q
.Q:$G(PAT($P(^PS(52.41,PSOD,0),"^",2)))=$P(^PS(52.41,PSOD,0),"^",2) S PAT=$P(^PS(52.41,PSOD,0),"^",2)
.;PSO*7*266
.K PSONEW I PAT'=PATA D LBL
.I '$O(^PS(52.41,"AC",PAT,PSRT,0)) S PSOLK=1,PAT(PAT)=PAT Q
.D RTE^PSOORFI2 I $G(PSZFIN) S PSOLK=1,PAT(PAT)=PAT Q
.;PSO*7*505
.I SECSORT'=0,'$$CHKFLTR^PSOORFI6(PSOD,SECSORT) Q
.D LK I $G(POERR("QFLG")) K POERR("QFLG") S PSOLK=1,PAT(PAT)=PAT Q
.I $$CHK^PSODPT(PAT_"^"_$P($G(^DPT(PAT,0)),"^"),1,1)<0 S PSOLK=1,PAT(PAT)=PAT S X=PAT D ULP Q
.S (PSODFN,Y)=PAT_"^"_$P($G(^DPT(PAT,0)),"^"),PATA=PAT
.D:'$G(MEDA) PROFILE^PSOORFI2 S Y=PSODFN I $G(MEDP) D SPL D OERR^PSORX1 S PSOFIN=1 D QU S X=PSOPTLOK D KLLP,ULP,KLL Q
.D SDFN D POST^PSOORFI1 I $G(PSOQFLG)!($G(PSOQUIT)) S:$G(PSOQUIT) POERR("QFLG")=1 S:$G(PSOQFLG) PAT(PAT)=PAT S X=PAT D ULP K PSOQFLG Q
.D PP S ORD=0 D @PSRT S PAT(PAT)=PAT
.S X=PAT D ULP
;PSO*7*266
K POERR("QFLG"),PSOQFLG,PSOPTPST,MAIL,WIN,CLI,PRK D LBL ;441 PAPI
I $G(PSOQUIT) K PSOQUIT D EX G PSOORFIN
EX D EX^PSOORFI1
Q
W D KQ F S ORD=$O(^PS(52.41,"AC",PAT,"W",ORD)) Q:'ORD!($G(POERR("QFLG"))) I $P(^PS(52.41,ORD,0),"^",3)'="DC",$P(^(0),"^",3)'="DE" D LK1,ORD S MAIL=1
Q:$G(POERR("QFLG")) I $G(MAIL) S ORD=0 D
.D KQ F S ORD=$O(^PS(52.41,"AC",PAT,"M",ORD)) Q:'ORD!($G(POERR("QFLG"))) D:$P(^PS(52.41,ORD,0),"^",3)'="DC"&($P(^(0),"^",3)'="DE") LK1,ORD
.Q:$G(POERR("QFLG"))
.D KQ F S ORD=$O(^PS(52.41,"AC",PAT,"C",ORD)) Q:'ORD!($G(POERR("QFLG"))) D:$P(^PS(52.41,ORD,0),"^",3)'="DC"&($P(^(0),"^",3)'="DE") LK1,ORD
.Q:$G(POERR("QFLG")) ;441 PAPI
.D KQ F S ORD=$O(^PS(52.41,"AC",PAT,"P",ORD)) Q:'ORD!($G(POERR("QFLG"))) D:$P(^PS(52.41,ORD,0),"^",3)'="DC"&($P(^(0),"^",3)'="DE") LK1,ORD
Q
M D KQ F S ORD=$O(^PS(52.41,"AC",PAT,"M",ORD)) Q:'ORD!($G(POERR("QFLG"))) I $P(^PS(52.41,ORD,0),"^",3)'="DC",$P(^(0),"^",3)'="DE" D LK1,ORD S WIN=1
Q:$G(POERR("QFLG")) I $G(WIN) S ORD=0 D
.D KQ F S ORD=$O(^PS(52.41,"AC",PAT,"W",ORD)) Q:'ORD!($G(POERR("QFLG"))) I $P(^PS(52.41,ORD,0),"^",3)'="DC",$P(^(0),"^",3)'="DE" D LK1,ORD
.Q:$G(POERR("QFLG"))
.D KQ F S ORD=$O(^PS(52.41,"AC",PAT,"C",ORD)) Q:'ORD!($G(POERR("QFLG"))) D:$P(^PS(52.41,ORD,0),"^",3)'="DC"&($P(^(0),"^",3)'="DE") LK1,ORD
.Q:$G(POERR("QFLG")) ;441 PAPI
.D KQ F S ORD=$O(^PS(52.41,"AC",PAT,"P",ORD)) Q:'ORD!($G(POERR("QFLG"))) D:$P(^PS(52.41,ORD,0),"^",3)'="DC"&($P(^(0),"^",3)'="DE") LK1,ORD
Q
C D KQ F S ORD=$O(^PS(52.41,"AC",PAT,"C",ORD)) Q:'ORD!($G(POERR("QFLG"))) I $P(^PS(52.41,ORD,0),"^",3)'="DC",$P(^(0),"^",3)'="DE" D LK1,ORD S CLI=1
Q:$G(POERR("QFLG")) I $G(CLI) S ORD=0 D
.D KQ F S ORD=$O(^PS(52.41,"AC",PAT,"M",ORD)) Q:'ORD!($G(POERR("QFLG"))) I $P(^PS(52.41,ORD,0),"^",3)'="DC",$P(^(0),"^",3)'="DE" D LK1,ORD
.Q:$G(POERR("QFLG"))
.D KQ F S ORD=$O(^PS(52.41,"AC",PAT,"W",ORD)) Q:'ORD!($G(POERR("QFLG"))) D:$P(^PS(52.41,ORD,0),"^",3)'="DC"&($P(^(0),"^",3)'="DE") LK1,ORD
.Q:$G(POERR("QFLG")) ;441 PAPI
.D KQ F S ORD=$O(^PS(52.41,"AC",PAT,"P",ORD)) Q:'ORD!($G(POERR("QFLG"))) D:$P(^PS(52.41,ORD,0),"^",3)'="DC"&($P(^(0),"^",3)'="DE") LK1,ORD
Q
;441 PAPI TAG
P D KQ F S ORD=$O(^PS(52.41,"AC",PAT,"P",ORD)) Q:'ORD!($G(POERR("QFLG"))) I $P(^PS(52.41,ORD,0),"^",3)'="DC",$P(^(0),"^",3)'="DE" D LK1,ORD S PRK=1
Q:$G(POERR("QFLG")) I $G(PRK) S ORD=0 D
.D KQ F S ORD=$O(^PS(52.41,"AC",PAT,"W",ORD)) Q:'ORD!($G(POERR("QFLG"))) I $P(^PS(52.41,ORD,0),"^",3)'="DC",$P(^(0),"^",3)'="DE" D LK1,ORD
.Q:$G(POERR("QFLG"))
.D KQ F S ORD=$O(^PS(52.41,"AC",PAT,"M",ORD)) Q:'ORD!($G(POERR("QFLG"))) D:$P(^PS(52.41,ORD,0),"^",3)'="DC"&($P(^(0),"^",3)'="DE") LK1,ORD
.Q:$G(POERR("QFLG"))
.D KQ F S ORD=$O(^PS(52.41,"AC",PAT,"C",ORD)) Q:'ORD!($G(POERR("QFLG"))) D:$P(^PS(52.41,ORD,0),"^",3)'="DC"&($P(^(0),"^",3)'="DE") LK1,ORD
Q
PAT W ! K MEDP,MEDA,POERR("DFLG"),DIR D KQ S PSOSORT="PATIENT"
S DIR("?")="^D PT^PSOORFI1",DIR("A")="All Patients or Single Patient",DIR(0)="SBM^A:ALL;S:SINGLE;E:EXIT",DIR("B")="SINGLE"
D ^DIR K DIR I $D(DIRUT)!(Y="E") G EX
I Y="S" S PSOSORT=PSOSORT_"^"_"SINGLE" G SPAT
ALLPATS ; All Patient Processing
S PSOSORT=PSOSORT_"^ALL",(MEDA,MEDP)=1 K POERR("DFLG"),DIR D KQ S PSOSORT="PATIENT"
N PAT,PATA,SECSORT,WPT,WPPAT,WPPATS,DIR,DUOUT,DIROUT,DTOUT,DIRUT,PSOQUIT,ERXIEN,EPATLCK,EPATIEN
I '$D(^XUSEC("PSO ERX WORKLOAD RPH",DUZ)) S SECSORT=$$DIR^PSOORFI6("PA:PATIENT",Y) I SECSORT="^" Q
I $D(^XUSEC("PSO ERX WORKLOAD RPH",DUZ)) D I $G(PSOQUIT) G EX
. W ! K DIR S DIR("A")="Process FLAGGED orders only? ",DIR(0)="YA",DIR("B")="NO"
. D ^DIR I $G(DUOUT)!$G(DIROUT)!$G(DTOUT)!$G(DIRUT) S PSOQUIT=1
. S SECSORT=0 I $G(Y) S SECSORT="FL^FLAGGED^FLAGGED"
;Cleaning up Workload Processing Patient List and setting 'tagged' patient to user
S WPPAT=0,WPT=0 F S WPT=$O(^XTMP("PSOORWP",PSOCLIN,WPT)) Q:'WPT D
. I '$$HASACTPO^PSOORUT3(WPT) K ^XTMP("PSOORWP",PSOCLIN,WPT) Q
. I $D(^XTMP("PSOORWP",PSOCLIN,WPT,DUZ)),'$D(WPPAT(PSOCLIN)) S WPPAT(PSOCLIN)=WPT
S (LG,PATA)=0
F S LG=$O(^PS(52.41,"AD",LG)) Q:'LG D I $G(POERR("QFLG")) Q
. F PSOD=0:0 S PSOD=$O(^PS(52.41,"AD",LG,PSOPINST,PSOD)) Q:'PSOD D I $G(POERR("QFLG")) Q
. . Q:'$D(^PS(52.41,PSOD,0))
. . I '$D(^XUSEC("PSO ERX WORKLOAD RPH",DUZ)),$P($G(^PS(52.41,PSOD,0)),"^",23),$P(SECSORT,"^",1)'="FL" Q
. . I " DE DC"[$$GET1^DIQ(52.41,PSOD,2,"I") Q
. . Q:$G(PAT($P(^PS(52.41,PSOD,0),"^",2))) ; Patient already marked to be skipped
. . I $D(^XUSEC("PSO ERX WORKLOAD RPH",DUZ)),$G(PSOCLIN)'=$$GET1^DIQ(52.41,PSOD,1.1,"I") Q
. . S PAT=+$P(^PS(52.41,PSOD,0),"^",2)
. . ; Patient assigned/tagged to another user
. . I SECSORT'="FL^FLAGGED^FLAGGED",$D(^XTMP("PSOORWP",PSOCLIN,PAT)),'$D(^XTMP("PSOORWP",PSOCLIN,PAT,DUZ)) S PAT(PAT)=PAT Q
. . I SECSORT'="FL^FLAGGED^FLAGGED",$D(^XUSEC("PSO ERX WORKLOAD RPH",DUZ)),'$$HASACTPO^PSOORUT3(PAT) S PAT(PAT)=PAT Q
. . ; MbM only: Checking whether the eRx Patient is locked on the eRx Holding Queue, if so, skip record
. . S ERXIEN=$$ERXIEN^PSOERXUT(PSOD_"P")
. . I $$GET1^DIQ(59.7,1,102,"I")="MBM",ERXIEN D I $G(EPATLCK) S PAT(PAT)=PAT Q
. . . S EPATLCK=0,EPATIEN=+$$GET1^DIQ(52.49,ERXIEN,.04,"I") I 'EPATIEN Q
. . . I $$L^PSOERX1A(EPATIEN,1,1) D
. . . . D UL^PSOERX1A(EPATIEN)
. . . E I +$G(^XTMP("PSOERXLOCK",EPATIEN))'=DUZ S EPATLCK=1 I $G(WPPAT(+PSOCLIN))=PAT K WPPAT(+PSOCLIN)
. . ;Secondary sort filter
. . I SECSORT'=0,'$$CHKFLTR^PSOORFI6(PSOD,SECSORT) Q
. . ;Workload Processing - Patient assigned to another Rph | Forced 'tagged' patient on User
. . I SECSORT'="FL^FLAGGED^FLAGGED",$D(^XUSEC("PSO ERX WORKLOAD RPH",DUZ)),$G(WPPAT(+PSOCLIN)),WPPAT(PSOCLIN)'=PAT Q
. . I SECSORT'="FL^FLAGGED^FLAGGED",$G(WPPAT(+PSOCLIN)) S PAT=$G(WPPAT(+PSOCLIN))
. . ;PSO*7*266
. . I PAT'=PATA D LBL
. . D LK I $G(POERR("QFLG")),$D(^XUSEC("PSO ERX WORKLOAD RPH",DUZ)),+$G(WPPAT(+PSOCLIN))=PAT K POERR("QFLG")
. . I $G(POERR("QFLG")) K POERR("QFLG") S PSOLK=1,PAT(PAT)=PAT Q
. . S PSONOLCK=0 I $G(PSOERR("QFLG")) K POERR("QFLG") S PSONOLCK=1
. . I $$CHK^PSODPT(PAT_"^"_$P($G(^DPT(PAT,0)),"^"),1,1)<0 S PSOLK=1,PAT(PAT)=PAT S X=PAT D ULP K PSOQFLG,PSOQQ Q
. . S (PSODFN,Y)=PAT_"^"_$P($G(^DPT(PAT,0)),"^"),PATA=PAT
. . D:'$G(MEDA) PROFILE^PSOORFI2 S Y=PSODFN
. . I $G(MEDP) D Q
. . . I SECSORT'="FL^FLAGGED^FLAGGED",$D(^XUSEC("PSO ERX WORKLOAD RPH",DUZ)) S ^XTMP("PSOORWP",PSOCLIN,PAT,DUZ)=""
. . . D SPL D OERR^PSORX1
. . . S PSOFIN=1 D QU S X=PSOPTLOK D KLLP,ULP,KLL
. . . ;Forcing the Workload Processing user to the beginning of the Queue
. . . I SECSORT'="FL^FLAGGED^FLAGGED",$D(^XUSEC("PSO ERX WORKLOAD RPH",DUZ)) D
. . . . I $$HASACTPO^PSOORUT3(PAT) S POERR("QFLG")=1 Q
. . . . K WPPAT(+PSOCLIN) S (LG,PSOD)=0 K ^XTMP("PSOORWP",PSOCLIN,PAT,DUZ)
. . D SDFN D POST^PSOORFI1 I $G(PSOQFLG)!($G(PSOQUIT)) S:$G(PSOQUIT) POERR("QFLG")=1 S:$G(PSOQFLG) PAT(PAT)=PAT S X=PAT D ULP K PSOQFLG Q
. . S PAT(PAT)=PAT
. . F ORD=0:0 S ORD=$O(^PS(52.41,"AOR",PAT,PSOPINST,ORD)) Q:'ORD!($G(POERR("QFLG")))!($G(PSOQQ)) D
. . . I SECSORT'=0,'$$CHKFLTR^PSOORFI6(ORD,SECSORT) Q
. . . I $P($G(^PS(52.41,ORD,0)),"^",23),$P(SECSORT,"^",1)'="FL" Q
. . . D PP,LK1,ORD
. . S X=PAT D ULP K PSOQQ
I $O(PSORX("PSOL",0))!($D(RXRS)) D LBL
I $G(PSOQUIT) K PSOQUIT D EX G PSOORFIN
G EX
;PSO*7*266 kill BINGCRT,BINGRTE when selecting pat.
SPAT ; Single Patient Selection
I $G(PSOJUMP) Q
K MEDA,MEDP,PSOQFLG,PSORX("FN"),BINGCRT,BINGRTE D KQ,KV^PSOVER1
S DIR(0)="FO^2:30",DIR("A")="Select Patient",DIR("?")="^D HELP^PSOORFI2" D ^DIR I $E(X)="?" G SPAT
G:$D(DIRUT) EX D KV^PSOVER1
S DIC(0)="EQM",DIC=2,DIC("S")="I $D(^PS(52.41,""AOR"",+Y,PSOPINST))"
D ^DIC K DIC G:"^"[X EX G:Y=-1 SPAT S (PSODFN,PAT)=+Y,PSOFINY=Y
SPAT2 D LK I $G(POERR("QFLG")) G SPAT
N SNGLPAT S SNGLPAT=1
; PSO*7*505 - SECONDARY SORT
N SECSORT S SECSORT=$S($G(PSOJUMP):0,1:$$DIR^PSOORFI6("PA:PATIENT",PSODFN)) I SECSORT'=0,$P(SECSORT,U,1)="CS" N PSRT S PSRT=$P(SECSORT,U,3)
Q:SECSORT=U
; PSO*7*505 - END
;PSO*7*266
I $G(PSOJUMP) S MEDP=1
E D:'$G(MEDA) PROFILE^PSOORFI2
S Y=PSOFINY
I $G(MEDP) D SPL D OERR^PSORX1 D LBL S PSOFIN=1,X=PSOPTLOK D KLLP,ULP,KLL G SPAT
D PP,SDFN,POST^PSOORFI1 D:$G(PSOQFLG) G:$G(PSOQFLG) EX I $G(PSOQUIT) S:$G(PSOQUIT) POERR("QFLG")=1 S X=PAT D ULP G SPAT
.S X=PAT D ULP
S ORD=0 F S ORD=$O(^PS(52.41,"P",PAT,ORD)) Q:'ORD!($G(POERR("QFLG"))) D
.I $P($G(^PS(52.41,ORD,0)),"^",23),$P(SECSORT,"^",1)'="FL" Q
.;PSO*7*505 - SECONDARY SORT
.I SECSORT'=0,'$$CHKFLTR^PSOORFI6(ORD,SECSORT) Q
.;PSO*7*505 - END
.D:$P(^PS(52.41,ORD,0),"^",3)'="DC"&($P(^(0),"^",3)'="DE")&($P(^(0),"^",3)'="HD") LK1,ORD
;PSO*7*266
D LBL
S PSOFIN=1,X=PAT D ULP G SPAT
ORD ; Entry point for processing an individual Pending Order
N PSONEW,PSORENW
I $G(PSOBCK) N LST,ORN
E S PSOLOUD=1 D:$P($G(^PS(55,PAT,0)),"^",6)'=2 EN^PSOHLUP(PAT) K PSOLOUD
K DRET,SIG,^TMP("PSORXDC",$J) Q:'$D(^PS(52.41,ORD,0))
I $G(PSOFIN),$P($G(^PS(52.41,ORD,"INI")),"^")'=$G(PSOPINST) Q
D L1^PSOORFI3 I '$G(PSOMSG) K PSOMSG Q
I '$D(^PS(52.41,ORD,0)) K PSOMSG Q
;628 Add below line
I $P($G(^PS(52.41,ORD,0)),"^",3)="DC"!($P($G(^PS(52.41,ORD,0)),"^",3)="DE") W !!,"This Order had been Discontinued.",$C(7),! K DIR S DIR(0)="E",DIR("A")="Press Return to Continue" D ^DIR K DIR Q
K DRET,SIG,PSOPRC,PHI,PRC,PSOSIGFL,OBX,PSOMSG,PSOFOERR S OR0=^PS(52.41,ORD,0),PSOTITRF=$G(^PS(52.41,ORD,"TIT"))
I $P(OR0,"^",24),($P(OR0,"^",3)="RNW"!($P(OR0,"^",3)="NW")) N PKI,PKI1,PKIR,PKIE,PKID S PKI=0 D CER^PSOPKIV1 I PKI<1 D UL1^PSOORFI3 K OR0 Q
S (PSOFOERR,PSOFDR)=1,OI=$P(OR0,"^",8),PSORX("SC")=$P(OR0,"^",16)
I $O(^PS(52.41,ORD,2,0)) S PHI=^PS(52.41,ORD,2,0),T=0 F S T=$O(^PS(52.41,ORD,2,T)) Q:'T S PHI(T)=^PS(52.41,ORD,2,T,0)
I $P($G(^PS(52.41,ORD,"EXT")),"^")'="" K PHI I $O(^PS(52.41,ORD,"SIG",0)) S PHI=$G(^PS(52.41,ORD,"SIG",0)),T=0 F S T=$O(^PS(52.41,ORD,"SIG",T)) Q:'T S PHI(T)=$G(^PS(52.41,ORD,"SIG",T,0))
I $O(^PS(52.41,ORD,3,0)) S PRC=^PS(52.41,ORD,3,0),T=0 F S T=$O(^PS(52.41,ORD,3,T)) Q:'T S PRC(T)=^PS(52.41,ORD,3,T,0)
I $P(OR0,"^",3)="RNW",$D(^PSRX(+$P(OR0,"^",21),0)) D G SUCC ;process renews
.K PSOREEDT S (PSOORRNW,PSOFDR)=1,PSORENW("OIRXN")=$P(OR0,"^",21),PSOOPT=3,(PSORENW("DFLG"),PSORENW("QFLG"))=0 D ^PSOORRNW,SQR
I $P(OR0,"^",3)="RF",$D(^PSRX(+$P(OR0,"^",19),0)) D RF^PSOORFI2 G SUCC
N PSODRUG,PSONEW S PSOFROM="PENDING" D:'$G(PSOTPBFG) DSPL^PSOTPCAN(ORD) D DSPL^PSOORFI1,SQN^PSOORFI3
SUCC ;
D UL1^PSOORFI3,FULL^VALM1
D:$P($G(^PS(52.41,+$G(ORD),0)),"^",3)'="NW"&($P($G(^(0)),"^",3)'="RNW")&($P($G(^(0)),"^",3)'="HD")&($P($G(^(0)),"^",3)'="RF")
.K PSOSD("PENDING",$S('$G(OID):$P(^PS(50.7,$P(OR0,"^",8),0),"^")_" "_$P(^PS(50.606,$P(^PS(50.7,$P(OR0,"^",8),0),"^",2),0),"^"),1:$P(^PSDRUG($P(OR0,"^",9),0),"^")))
S:$G(POERR("DFLG")) POERR("QFLG")=1 K POERR("DFLG"),PSONEW,ACP,OR0,DRET,SIG,OID,OI,PSOTITRF
K PSORX("SC"),PSORX("CLINIC"),PSORX("PROVIDER NAME"),PSODRUG,PSOFOERR
Q
;PSO*7*266 change order of bingo checks.
LBL I $O(PSORX("PSOL",0))!($D(RXRS)) S PSOFROM="NEW" D ^PSORXL K PSORX("PSOL"),PPL,RXRS
D:$D(BINGCRT)&($D(BINGRTE)&($D(DISGROUP))) ^PSOBING1 K BINGCRT,BINGRTE,PSONEW,BBFLG,BBRX,PSORX("DOSING OFF"),PSOONOFC
Q
CHK ;
D:'$D(PSOPAR) ^PSOLSET I '$D(PSOPAR) W !,$C(7),"Outpatient Division MUST be selected!",! G EX
D INST1^PSOORFI2
S PSZCNT=0 F PSZZI=0:0 S PSZZI=$O(^PS(59,PSZZI)) Q:'PSZZI S PSZCNT=PSZCNT+1
S TC=0 F TO=0:0 S TO=$O(^PS(52.41,"AOR",TO)) Q:'TO F TZ=0:0 S TZ=$O(^PS(52.41,"AOR",TO,TZ)) Q:'TZ F PSTZ=0:0 S PSTZ=$O(^PS(52.41,"AOR",TO,TZ,PSTZ)) Q:'PSTZ S TC=TC+1
W !!?10,$C(7),"Orders to be completed"_$S(PSZCNT=1:": ",1:" for all divisions: ")_TC,! Q:'TC
D SUMM^PSOORNE1 K PSZZI,PSZCNT,PSTZ
Q
;
LK D LOCK^PSOORFI1
Q
LK1 D LOCK1^PSOORFI1 Q
QU I $G(PSOQUIT) S POERR("QFLG")=1 K PSOQUIT
S:$G(PSOQFLG) PAT(PAT)=PAT
Q
ULP ; Unlocking Patient
N PATIEN
S PATIEN=+$G(X)
K PSORX("MAIL/WINDOW"),PSORX("METHOD OF PICK-UP")
D CLEAN^PSOVER1
D UL^PSSLOCK(PATIEN)
Q
KLL K PSOPTLOK Q
KLLP K PSONOLCK Q
SPL D SPL^PSOORFI4 Q
SDFN S PSODFN=+$G(PSODFN) Q
PP D PP^PSOORFI4 Q
KQ K PSOQUIT,POERR("QFLG") Q
SQR ;
K PSOORRNW,PSOOPT,PSOREEDT,PSOQUIT,VALMSG S POERR("DFLG")=0
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSOORFIN 15168 printed Aug 26, 2025@22:48:11 Page 2
PSOORFIN ;BIR/SAB - finish cprs orders ;Dec 01, 2022@12:07:21
+1 ;;7.0;OUTPATIENT PHARMACY;**7,15,27,32,44,46,84,106,111,117,131,146,139,195,225,315,266,338,391,372,416,446,505,508,557,628,441,710,770**;DEC 1997;Build 145
+2 ;PSSLOCK-2789,PSDRUG-221,50.7-2223,55-2228,50.606-2174
+3 ;PSO*7*266 Change order of calling ^PSOBING1 and ^PSORXL
+4 ;
+5 NEW ORD
+6 if '$DATA(PSOPAR)
DO ^PSOLSET
IF '$DATA(PSOPAR)
DO MSG^PSODPT
GOTO EX
+7 DO INST^PSOORFI2
IF $GET(PSOIQUIT)
KILL PSOIQUIT
GOTO EX
+8 IF $PIECE($GET(PSOPAR),"^",2)
IF '$DATA(^XUSEC("PSORPH",DUZ))
SET PSORX("VERIFY")=1
+9 KILL PSOBCK,MEDA,MEDP,SRT,DIR
DO KQ
+10 SET PSOCLIN=0
SET (PSOFIN,POERR)=1
SET PSOSORT="ROUTE"
+11 ; Workload Processing Key assigned to User
+12 IF $DATA(^XUSEC("PSO ERX WORKLOAD RPH",DUZ))
Begin DoDot:1
+13 NEW DIC
SET DIC="^SC("
SET DIC(0)="QEAMZ"
SET DIC("A")="Select CLINIC: "
+14 IF +$$GET1^DIQ(59,PSOSITE,10,"I")
SET DIC("B")=$$GET1^DIQ(44,+$$GET1^DIQ(59,PSOSITE,10,"I"),.01)
+15 SET DIC("S")="I $$CHECKCLN^PSOORUT3(+$G(Y))"
+16 DO ^DIC
KILL DIC
IF Y<1!($DATA(DTOUT))!($DATA(DUOUT))
SET PSOIQUIT=1
QUIT
+17 SET PSOCLIN=+Y
SET PSOCLINF=1
End DoDot:1
if $GET(PSOIQUIT)
GOTO EX
GOTO ALLPATS
+18 ;
+19 SET DIR("?")="^D ST^PSOORFI1"
SET DIR("A")="Select By"
SET DIR("B")="PATIENT"
+20 SET DIR(0)="SMB^PA:PATIENT;RT:ROUTE;PR:PRIORITY;CL:CLINIC;FL:FLAGGED;CS:CONTROLLED SUBSTANCES;SU:SUPPLY;E:EXIT"
+21 DO ^DIR
IF $DATA(DIRUT)!(Y="E")
GOTO EX
+22 ;file not needed when selection="FL"
if Y="FL"
KILL ^TMP($JOB,"PSOFLPO")
+23 if Y="PA"
GOTO PAT
if Y="PR"
GOTO PRI^PSOORFI5
if Y="CL"
GOTO ^PSOORFI3
if Y="FL"
GOTO FLG^PSOORFI5
if Y="CS"
GOTO CS^PSOORFI5
if Y="SU"
GOTO SUP^PSOORFI5
+24 KILL DIR
SET DIR("?")="^D RT^PSOORFI1"
SET DIR("A")="Route"
SET DIR(0)="SBM^W:WINDOW;M:MAIL;C:CLINIC;E:EXIT"
SET DIR("B")="WINDOW"
+25 NEW RESULTS,PSOPARKX
+26 SET RESULTS="PSOPARKX"
DO GETPARK^PSORPC01()
+27 IF $GET(PSOPARKX(0))="YES"
SET DIR(0)="SBM^W:WINDOW;M:MAIL;P:PARK;C:CLINIC;E:EXIT"
+28 DO ^DIR
if $DATA(DIRUT)!(Y="E")
GOTO EX
SET PSOSORT=PSOSORT_"^"_Y
SET PSRT=Y
+29 NEW SECSORT
SET SECSORT=$$DIR^PSOORFI6("RT:ROUTE",Y)
if SECSORT=U
QUIT
+30 SET LG=0
SET PATA=0
FOR
SET LG=$ORDER(^PS(52.41,"AD",LG))
if 'LG!($GET(POERR("QFLG")))
QUIT
FOR PSOD=0:0
SET PSOD=$ORDER(^PS(52.41,"AD",LG,PSOPINST,PSOD))
if 'PSOD!($GET(POERR("QFLG")))
QUIT
Begin DoDot:1
+31 IF $PIECE($GET(^PS(52.41,PSOD,0)),"^",23)
IF $PIECE(SECSORT,"^",1)'="FL"
QUIT
+32 if $GET(PAT($PIECE(^PS(52.41,PSOD,0),"^",2)))=$PIECE(^PS(52.41,PSOD,0),"^",2)
QUIT
SET PAT=$PIECE(^PS(52.41,PSOD,0),"^",2)
+33 ;PSO*7*266
+34 KILL PSONEW
IF PAT'=PATA
DO LBL
+35 IF '$ORDER(^PS(52.41,"AC",PAT,PSRT,0))
SET PSOLK=1
SET PAT(PAT)=PAT
QUIT
+36 DO RTE^PSOORFI2
IF $GET(PSZFIN)
SET PSOLK=1
SET PAT(PAT)=PAT
QUIT
+37 ;PSO*7*505
+38 IF SECSORT'=0
IF '$$CHKFLTR^PSOORFI6(PSOD,SECSORT)
QUIT
+39 DO LK
IF $GET(POERR("QFLG"))
KILL POERR("QFLG")
SET PSOLK=1
SET PAT(PAT)=PAT
QUIT
+40 IF $$CHK^PSODPT(PAT_"^"_$PIECE($GET(^DPT(PAT,0)),"^"),1,1)<0
SET PSOLK=1
SET PAT(PAT)=PAT
SET X=PAT
DO ULP
QUIT
+41 SET (PSODFN,Y)=PAT_"^"_$PIECE($GET(^DPT(PAT,0)),"^")
SET PATA=PAT
+42 if '$GET(MEDA)
DO PROFILE^PSOORFI2
SET Y=PSODFN
IF $GET(MEDP)
DO SPL
DO OERR^PSORX1
SET PSOFIN=1
DO QU
SET X=PSOPTLOK
DO KLLP
DO ULP
DO KLL
QUIT
+43 DO SDFN
DO POST^PSOORFI1
IF $GET(PSOQFLG)!($GET(PSOQUIT))
if $GET(PSOQUIT)
SET POERR("QFLG")=1
if $GET(PSOQFLG)
SET PAT(PAT)=PAT
SET X=PAT
DO ULP
KILL PSOQFLG
QUIT
+44 DO PP
SET ORD=0
DO @PSRT
SET PAT(PAT)=PAT
+45 SET X=PAT
DO ULP
End DoDot:1
+46 ;PSO*7*266
+47 ;441 PAPI
KILL POERR("QFLG"),PSOQFLG,PSOPTPST,MAIL,WIN,CLI,PRK
DO LBL
+48 IF $GET(PSOQUIT)
KILL PSOQUIT
DO EX
GOTO PSOORFIN
EX DO EX^PSOORFI1
+1 QUIT
W DO KQ
FOR
SET ORD=$ORDER(^PS(52.41,"AC",PAT,"W",ORD))
if 'ORD!($GET(POERR("QFLG")))
QUIT
IF $PIECE(^PS(52.41,ORD,0),"^",3)'="DC"
IF $PIECE(^(0),"^",3)'="DE"
DO LK1
DO ORD
SET MAIL=1
+1 if $GET(POERR("QFLG"))
QUIT
IF $GET(MAIL)
SET ORD=0
Begin DoDot:1
+2 DO KQ
FOR
SET ORD=$ORDER(^PS(52.41,"AC",PAT,"M",ORD))
if 'ORD!($GET(POERR("QFLG")))
QUIT
if $PIECE(^PS(52.41,ORD,0),"^",3)'="DC"&($PIECE(^(0),"^",3)'="DE")
DO LK1
DO ORD
+3 if $GET(POERR("QFLG"))
QUIT
+4 DO KQ
FOR
SET ORD=$ORDER(^PS(52.41,"AC",PAT,"C",ORD))
if 'ORD!($GET(POERR("QFLG")))
QUIT
if $PIECE(^PS(52.41,ORD,0),"^",3)'="DC"&($PIECE(^(0),"^",3)'="DE")
DO LK1
DO ORD
+5 ;441 PAPI
if $GET(POERR("QFLG"))
QUIT
+6 DO KQ
FOR
SET ORD=$ORDER(^PS(52.41,"AC",PAT,"P",ORD))
if 'ORD!($GET(POERR("QFLG")))
QUIT
if $PIECE(^PS(52.41,ORD,0),"^",3)'="DC"&($PIECE(^(0),"^",3)'="DE")
DO LK1
DO ORD
End DoDot:1
+7 QUIT
M DO KQ
FOR
SET ORD=$ORDER(^PS(52.41,"AC",PAT,"M",ORD))
if 'ORD!($GET(POERR("QFLG")))
QUIT
IF $PIECE(^PS(52.41,ORD,0),"^",3)'="DC"
IF $PIECE(^(0),"^",3)'="DE"
DO LK1
DO ORD
SET WIN=1
+1 if $GET(POERR("QFLG"))
QUIT
IF $GET(WIN)
SET ORD=0
Begin DoDot:1
+2 DO KQ
FOR
SET ORD=$ORDER(^PS(52.41,"AC",PAT,"W",ORD))
if 'ORD!($GET(POERR("QFLG")))
QUIT
IF $PIECE(^PS(52.41,ORD,0),"^",3)'="DC"
IF $PIECE(^(0),"^",3)'="DE"
DO LK1
DO ORD
+3 if $GET(POERR("QFLG"))
QUIT
+4 DO KQ
FOR
SET ORD=$ORDER(^PS(52.41,"AC",PAT,"C",ORD))
if 'ORD!($GET(POERR("QFLG")))
QUIT
if $PIECE(^PS(52.41,ORD,0),"^",3)'="DC"&($PIECE(^(0),"^",3)'="DE")
DO LK1
DO ORD
+5 ;441 PAPI
if $GET(POERR("QFLG"))
QUIT
+6 DO KQ
FOR
SET ORD=$ORDER(^PS(52.41,"AC",PAT,"P",ORD))
if 'ORD!($GET(POERR("QFLG")))
QUIT
if $PIECE(^PS(52.41,ORD,0),"^",3)'="DC"&($PIECE(^(0),"^",3)'="DE")
DO LK1
DO ORD
End DoDot:1
+7 QUIT
C DO KQ
FOR
SET ORD=$ORDER(^PS(52.41,"AC",PAT,"C",ORD))
if 'ORD!($GET(POERR("QFLG")))
QUIT
IF $PIECE(^PS(52.41,ORD,0),"^",3)'="DC"
IF $PIECE(^(0),"^",3)'="DE"
DO LK1
DO ORD
SET CLI=1
+1 if $GET(POERR("QFLG"))
QUIT
IF $GET(CLI)
SET ORD=0
Begin DoDot:1
+2 DO KQ
FOR
SET ORD=$ORDER(^PS(52.41,"AC",PAT,"M",ORD))
if 'ORD!($GET(POERR("QFLG")))
QUIT
IF $PIECE(^PS(52.41,ORD,0),"^",3)'="DC"
IF $PIECE(^(0),"^",3)'="DE"
DO LK1
DO ORD
+3 if $GET(POERR("QFLG"))
QUIT
+4 DO KQ
FOR
SET ORD=$ORDER(^PS(52.41,"AC",PAT,"W",ORD))
if 'ORD!($GET(POERR("QFLG")))
QUIT
if $PIECE(^PS(52.41,ORD,0),"^",3)'="DC"&($PIECE(^(0),"^",3)'="DE")
DO LK1
DO ORD
+5 ;441 PAPI
if $GET(POERR("QFLG"))
QUIT
+6 DO KQ
FOR
SET ORD=$ORDER(^PS(52.41,"AC",PAT,"P",ORD))
if 'ORD!($GET(POERR("QFLG")))
QUIT
if $PIECE(^PS(52.41,ORD,0),"^",3)'="DC"&($PIECE(^(0),"^",3)'="DE")
DO LK1
DO ORD
End DoDot:1
+7 QUIT
+8 ;441 PAPI TAG
P DO KQ
FOR
SET ORD=$ORDER(^PS(52.41,"AC",PAT,"P",ORD))
if 'ORD!($GET(POERR("QFLG")))
QUIT
IF $PIECE(^PS(52.41,ORD,0),"^",3)'="DC"
IF $PIECE(^(0),"^",3)'="DE"
DO LK1
DO ORD
SET PRK=1
+1 if $GET(POERR("QFLG"))
QUIT
IF $GET(PRK)
SET ORD=0
Begin DoDot:1
+2 DO KQ
FOR
SET ORD=$ORDER(^PS(52.41,"AC",PAT,"W",ORD))
if 'ORD!($GET(POERR("QFLG")))
QUIT
IF $PIECE(^PS(52.41,ORD,0),"^",3)'="DC"
IF $PIECE(^(0),"^",3)'="DE"
DO LK1
DO ORD
+3 if $GET(POERR("QFLG"))
QUIT
+4 DO KQ
FOR
SET ORD=$ORDER(^PS(52.41,"AC",PAT,"M",ORD))
if 'ORD!($GET(POERR("QFLG")))
QUIT
if $PIECE(^PS(52.41,ORD,0),"^",3)'="DC"&($PIECE(^(0),"^",3)'="DE")
DO LK1
DO ORD
+5 if $GET(POERR("QFLG"))
QUIT
+6 DO KQ
FOR
SET ORD=$ORDER(^PS(52.41,"AC",PAT,"C",ORD))
if 'ORD!($GET(POERR("QFLG")))
QUIT
if $PIECE(^PS(52.41,ORD,0),"^",3)'="DC"&($PIECE(^(0),"^",3)'="DE")
DO LK1
DO ORD
End DoDot:1
+7 QUIT
PAT WRITE !
KILL MEDP,MEDA,POERR("DFLG"),DIR
DO KQ
SET PSOSORT="PATIENT"
+1 SET DIR("?")="^D PT^PSOORFI1"
SET DIR("A")="All Patients or Single Patient"
SET DIR(0)="SBM^A:ALL;S:SINGLE;E:EXIT"
SET DIR("B")="SINGLE"
+2 DO ^DIR
KILL DIR
IF $DATA(DIRUT)!(Y="E")
GOTO EX
+3 IF Y="S"
SET PSOSORT=PSOSORT_"^"_"SINGLE"
GOTO SPAT
ALLPATS ; All Patient Processing
+1 SET PSOSORT=PSOSORT_"^ALL"
SET (MEDA,MEDP)=1
KILL POERR("DFLG"),DIR
DO KQ
SET PSOSORT="PATIENT"
+2 NEW PAT,PATA,SECSORT,WPT,WPPAT,WPPATS,DIR,DUOUT,DIROUT,DTOUT,DIRUT,PSOQUIT,ERXIEN,EPATLCK,EPATIEN
+3 IF '$DATA(^XUSEC("PSO ERX WORKLOAD RPH",DUZ))
SET SECSORT=$$DIR^PSOORFI6("PA:PATIENT",Y)
IF SECSORT="^"
QUIT
+4 IF $DATA(^XUSEC("PSO ERX WORKLOAD RPH",DUZ))
Begin DoDot:1
+5 WRITE !
KILL DIR
SET DIR("A")="Process FLAGGED orders only? "
SET DIR(0)="YA"
SET DIR("B")="NO"
+6 DO ^DIR
IF $GET(DUOUT)!$GET(DIROUT)!$GET(DTOUT)!$GET(DIRUT)
SET PSOQUIT=1
+7 SET SECSORT=0
IF $GET(Y)
SET SECSORT="FL^FLAGGED^FLAGGED"
End DoDot:1
IF $GET(PSOQUIT)
GOTO EX
+8 ;Cleaning up Workload Processing Patient List and setting 'tagged' patient to user
+9 SET WPPAT=0
SET WPT=0
FOR
SET WPT=$ORDER(^XTMP("PSOORWP",PSOCLIN,WPT))
if 'WPT
QUIT
Begin DoDot:1
+10 IF '$$HASACTPO^PSOORUT3(WPT)
KILL ^XTMP("PSOORWP",PSOCLIN,WPT)
QUIT
+11 IF $DATA(^XTMP("PSOORWP",PSOCLIN,WPT,DUZ))
IF '$DATA(WPPAT(PSOCLIN))
SET WPPAT(PSOCLIN)=WPT
End DoDot:1
+12 SET (LG,PATA)=0
+13 FOR
SET LG=$ORDER(^PS(52.41,"AD",LG))
if 'LG
QUIT
Begin DoDot:1
+14 FOR PSOD=0:0
SET PSOD=$ORDER(^PS(52.41,"AD",LG,PSOPINST,PSOD))
if 'PSOD
QUIT
Begin DoDot:2
+15 if '$DATA(^PS(52.41,PSOD,0))
QUIT
+16 IF '$DATA(^XUSEC("PSO ERX WORKLOAD RPH",DUZ))
IF $PIECE($GET(^PS(52.41,PSOD,0)),"^",23)
IF $PIECE(SECSORT,"^",1)'="FL"
QUIT
+17 IF " DE DC"[$$GET1^DIQ(52.41,PSOD,2,"I")
QUIT
+18 ; Patient already marked to be skipped
if $GET(PAT($PIECE(^PS(52.41,PSOD,0),"^",2)))
QUIT
+19 IF $DATA(^XUSEC("PSO ERX WORKLOAD RPH",DUZ))
IF $GET(PSOCLIN)'=$$GET1^DIQ(52.41,PSOD,1.1,"I")
QUIT
+20 SET PAT=+$PIECE(^PS(52.41,PSOD,0),"^",2)
+21 ; Patient assigned/tagged to another user
+22 IF SECSORT'="FL^FLAGGED^FLAGGED"
IF $DATA(^XTMP("PSOORWP",PSOCLIN,PAT))
IF '$DATA(^XTMP("PSOORWP",PSOCLIN,PAT,DUZ))
SET PAT(PAT)=PAT
QUIT
+23 IF SECSORT'="FL^FLAGGED^FLAGGED"
IF $DATA(^XUSEC("PSO ERX WORKLOAD RPH",DUZ))
IF '$$HASACTPO^PSOORUT3(PAT)
SET PAT(PAT)=PAT
QUIT
+24 ; MbM only: Checking whether the eRx Patient is locked on the eRx Holding Queue, if so, skip record
+25 SET ERXIEN=$$ERXIEN^PSOERXUT(PSOD_"P")
+26 IF $$GET1^DIQ(59.7,1,102,"I")="MBM"
IF ERXIEN
Begin DoDot:3
+27 SET EPATLCK=0
SET EPATIEN=+$$GET1^DIQ(52.49,ERXIEN,.04,"I")
IF 'EPATIEN
QUIT
+28 IF $$L^PSOERX1A(EPATIEN,1,1)
Begin DoDot:4
+29 DO UL^PSOERX1A(EPATIEN)
End DoDot:4
+30 IF '$TEST
IF +$GET(^XTMP("PSOERXLOCK",EPATIEN))'=DUZ
SET EPATLCK=1
IF $GET(WPPAT(+PSOCLIN))=PAT
KILL WPPAT(+PSOCLIN)
End DoDot:3
IF $GET(EPATLCK)
SET PAT(PAT)=PAT
QUIT
+31 ;Secondary sort filter
+32 IF SECSORT'=0
IF '$$CHKFLTR^PSOORFI6(PSOD,SECSORT)
QUIT
+33 ;Workload Processing - Patient assigned to another Rph | Forced 'tagged' patient on User
+34 IF SECSORT'="FL^FLAGGED^FLAGGED"
IF $DATA(^XUSEC("PSO ERX WORKLOAD RPH",DUZ))
IF $GET(WPPAT(+PSOCLIN))
IF WPPAT(PSOCLIN)'=PAT
QUIT
+35 IF SECSORT'="FL^FLAGGED^FLAGGED"
IF $GET(WPPAT(+PSOCLIN))
SET PAT=$GET(WPPAT(+PSOCLIN))
+36 ;PSO*7*266
+37 IF PAT'=PATA
DO LBL
+38 DO LK
IF $GET(POERR("QFLG"))
IF $DATA(^XUSEC("PSO ERX WORKLOAD RPH",DUZ))
IF +$GET(WPPAT(+PSOCLIN))=PAT
KILL POERR("QFLG")
+39 IF $GET(POERR("QFLG"))
KILL POERR("QFLG")
SET PSOLK=1
SET PAT(PAT)=PAT
QUIT
+40 SET PSONOLCK=0
IF $GET(PSOERR("QFLG"))
KILL POERR("QFLG")
SET PSONOLCK=1
+41 IF $$CHK^PSODPT(PAT_"^"_$PIECE($GET(^DPT(PAT,0)),"^"),1,1)<0
SET PSOLK=1
SET PAT(PAT)=PAT
SET X=PAT
DO ULP
KILL PSOQFLG,PSOQQ
QUIT
+42 SET (PSODFN,Y)=PAT_"^"_$PIECE($GET(^DPT(PAT,0)),"^")
SET PATA=PAT
+43 if '$GET(MEDA)
DO PROFILE^PSOORFI2
SET Y=PSODFN
+44 IF $GET(MEDP)
Begin DoDot:3
+45 IF SECSORT'="FL^FLAGGED^FLAGGED"
IF $DATA(^XUSEC("PSO ERX WORKLOAD RPH",DUZ))
SET ^XTMP("PSOORWP",PSOCLIN,PAT,DUZ)=""
+46 DO SPL
DO OERR^PSORX1
+47 SET PSOFIN=1
DO QU
SET X=PSOPTLOK
DO KLLP
DO ULP
DO KLL
+48 ;Forcing the Workload Processing user to the beginning of the Queue
+49 IF SECSORT'="FL^FLAGGED^FLAGGED"
IF $DATA(^XUSEC("PSO ERX WORKLOAD RPH",DUZ))
Begin DoDot:4
+50 IF $$HASACTPO^PSOORUT3(PAT)
SET POERR("QFLG")=1
QUIT
+51 KILL WPPAT(+PSOCLIN)
SET (LG,PSOD)=0
KILL ^XTMP("PSOORWP",PSOCLIN,PAT,DUZ)
End DoDot:4
End DoDot:3
QUIT
+52 DO SDFN
DO POST^PSOORFI1
IF $GET(PSOQFLG)!($GET(PSOQUIT))
if $GET(PSOQUIT)
SET POERR("QFLG")=1
if $GET(PSOQFLG)
SET PAT(PAT)=PAT
SET X=PAT
DO ULP
KILL PSOQFLG
QUIT
+53 SET PAT(PAT)=PAT
+54 FOR ORD=0:0
SET ORD=$ORDER(^PS(52.41,"AOR",PAT,PSOPINST,ORD))
if 'ORD!($GET(POERR("QFLG")))!($GET(PSOQQ))
QUIT
Begin DoDot:3
+55 IF SECSORT'=0
IF '$$CHKFLTR^PSOORFI6(ORD,SECSORT)
QUIT
+56 IF $PIECE($GET(^PS(52.41,ORD,0)),"^",23)
IF $PIECE(SECSORT,"^",1)'="FL"
QUIT
+57 DO PP
DO LK1
DO ORD
End DoDot:3
+58 SET X=PAT
DO ULP
KILL PSOQQ
End DoDot:2
IF $GET(POERR("QFLG"))
QUIT
End DoDot:1
IF $GET(POERR("QFLG"))
QUIT
+59 IF $ORDER(PSORX("PSOL",0))!($DATA(RXRS))
DO LBL
+60 IF $GET(PSOQUIT)
KILL PSOQUIT
DO EX
GOTO PSOORFIN
+61 GOTO EX
+62 ;PSO*7*266 kill BINGCRT,BINGRTE when selecting pat.
SPAT ; Single Patient Selection
+1 IF $GET(PSOJUMP)
QUIT
+2 KILL MEDA,MEDP,PSOQFLG,PSORX("FN"),BINGCRT,BINGRTE
DO KQ
DO KV^PSOVER1
+3 SET DIR(0)="FO^2:30"
SET DIR("A")="Select Patient"
SET DIR("?")="^D HELP^PSOORFI2"
DO ^DIR
IF $EXTRACT(X)="?"
GOTO SPAT
+4 if $DATA(DIRUT)
GOTO EX
DO KV^PSOVER1
+5 SET DIC(0)="EQM"
SET DIC=2
SET DIC("S")="I $D(^PS(52.41,""AOR"",+Y,PSOPINST))"
+6 DO ^DIC
KILL DIC
if "^"[X
GOTO EX
if Y=-1
GOTO SPAT
SET (PSODFN,PAT)=+Y
SET PSOFINY=Y
SPAT2 DO LK
IF $GET(POERR("QFLG"))
GOTO SPAT
+1 NEW SNGLPAT
SET SNGLPAT=1
+2 ; PSO*7*505 - SECONDARY SORT
+3 NEW SECSORT
SET SECSORT=$SELECT($GET(PSOJUMP):0,1:$$DIR^PSOORFI6("PA:PATIENT",PSODFN))
IF SECSORT'=0
IF $PIECE(SECSORT,U,1)="CS"
NEW PSRT
SET PSRT=$PIECE(SECSORT,U,3)
+4 if SECSORT=U
QUIT
+5 ; PSO*7*505 - END
+6 ;PSO*7*266
+7 IF $GET(PSOJUMP)
SET MEDP=1
+8 IF '$TEST
if '$GET(MEDA)
DO PROFILE^PSOORFI2
+9 SET Y=PSOFINY
+10 IF $GET(MEDP)
DO SPL
DO OERR^PSORX1
DO LBL
SET PSOFIN=1
SET X=PSOPTLOK
DO KLLP
DO ULP
DO KLL
GOTO SPAT
+11 DO PP
DO SDFN
DO POST^PSOORFI1
if $GET(PSOQFLG)
Begin DoDot:1
+12 SET X=PAT
DO ULP
End DoDot:1
if $GET(PSOQFLG)
GOTO EX
IF $GET(PSOQUIT)
if $GET(PSOQUIT)
SET POERR("QFLG")=1
SET X=PAT
DO ULP
GOTO SPAT
+13 SET ORD=0
FOR
SET ORD=$ORDER(^PS(52.41,"P",PAT,ORD))
if 'ORD!($GET(POERR("QFLG")))
QUIT
Begin DoDot:1
+14 IF $PIECE($GET(^PS(52.41,ORD,0)),"^",23)
IF $PIECE(SECSORT,"^",1)'="FL"
QUIT
+15 ;PSO*7*505 - SECONDARY SORT
+16 IF SECSORT'=0
IF '$$CHKFLTR^PSOORFI6(ORD,SECSORT)
QUIT
+17 ;PSO*7*505 - END
+18 if $PIECE(^PS(52.41,ORD,0),"^",3)'="DC"&($PIECE(^(0),"^",3)'="DE")&($PIECE(^(0),"^",3)'="HD")
DO LK1
DO ORD
End DoDot:1
+19 ;PSO*7*266
+20 DO LBL
+21 SET PSOFIN=1
SET X=PAT
DO ULP
GOTO SPAT
ORD ; Entry point for processing an individual Pending Order
+1 NEW PSONEW,PSORENW
+2 IF $GET(PSOBCK)
NEW LST,ORN
+3 IF '$TEST
SET PSOLOUD=1
if $PIECE($GET(^PS(55,PAT,0)),"^",6)'=2
DO EN^PSOHLUP(PAT)
KILL PSOLOUD
+4 KILL DRET,SIG,^TMP("PSORXDC",$JOB)
if '$DATA(^PS(52.41,ORD,0))
QUIT
+5 IF $GET(PSOFIN)
IF $PIECE($GET(^PS(52.41,ORD,"INI")),"^")'=$GET(PSOPINST)
QUIT
+6 DO L1^PSOORFI3
IF '$GET(PSOMSG)
KILL PSOMSG
QUIT
+7 IF '$DATA(^PS(52.41,ORD,0))
KILL PSOMSG
QUIT
+8 ;628 Add below line
+9 IF $PIECE($GET(^PS(52.41,ORD,0)),"^",3)="DC"!($PIECE($GET(^PS(52.41,ORD,0)),"^",3)="DE")
WRITE !!,"This Order had been Discontinued.",$CHAR(7),!
KILL DIR
SET DIR(0)="E"
SET DIR("A")="Press Return to Continue"
DO ^DIR
KILL DIR
QUIT
+10 KILL DRET,SIG,PSOPRC,PHI,PRC,PSOSIGFL,OBX,PSOMSG,PSOFOERR
SET OR0=^PS(52.41,ORD,0)
SET PSOTITRF=$GET(^PS(52.41,ORD,"TIT"))
+11 IF $PIECE(OR0,"^",24)
IF ($PIECE(OR0,"^",3)="RNW"!($PIECE(OR0,"^",3)="NW"))
NEW PKI,PKI1,PKIR,PKIE,PKID
SET PKI=0
DO CER^PSOPKIV1
IF PKI<1
DO UL1^PSOORFI3
KILL OR0
QUIT
+12 SET (PSOFOERR,PSOFDR)=1
SET OI=$PIECE(OR0,"^",8)
SET PSORX("SC")=$PIECE(OR0,"^",16)
+13 IF $ORDER(^PS(52.41,ORD,2,0))
SET PHI=^PS(52.41,ORD,2,0)
SET T=0
FOR
SET T=$ORDER(^PS(52.41,ORD,2,T))
if 'T
QUIT
SET PHI(T)=^PS(52.41,ORD,2,T,0)
+14 IF $PIECE($GET(^PS(52.41,ORD,"EXT")),"^")'=""
KILL PHI
IF $ORDER(^PS(52.41,ORD,"SIG",0))
SET PHI=$GET(^PS(52.41,ORD,"SIG",0))
SET T=0
FOR
SET T=$ORDER(^PS(52.41,ORD,"SIG",T))
if 'T
QUIT
SET PHI(T)=$GET(^PS(52.41,ORD,"SIG",T,0))
+15 IF $ORDER(^PS(52.41,ORD,3,0))
SET PRC=^PS(52.41,ORD,3,0)
SET T=0
FOR
SET T=$ORDER(^PS(52.41,ORD,3,T))
if 'T
QUIT
SET PRC(T)=^PS(52.41,ORD,3,T,0)
+16 ;process renews
IF $PIECE(OR0,"^",3)="RNW"
IF $DATA(^PSRX(+$PIECE(OR0,"^",21),0))
Begin DoDot:1
+17 KILL PSOREEDT
SET (PSOORRNW,PSOFDR)=1
SET PSORENW("OIRXN")=$PIECE(OR0,"^",21)
SET PSOOPT=3
SET (PSORENW("DFLG"),PSORENW("QFLG"))=0
DO ^PSOORRNW
DO SQR
End DoDot:1
GOTO SUCC
+18 IF $PIECE(OR0,"^",3)="RF"
IF $DATA(^PSRX(+$PIECE(OR0,"^",19),0))
DO RF^PSOORFI2
GOTO SUCC
+19 NEW PSODRUG,PSONEW
SET PSOFROM="PENDING"
if '$GET(PSOTPBFG)
DO DSPL^PSOTPCAN(ORD)
DO DSPL^PSOORFI1
DO SQN^PSOORFI3
SUCC ;
+1 DO UL1^PSOORFI3
DO FULL^VALM1
+2 if $PIECE($GET(^PS(52.41,+$GET(ORD),0)),"^",3)'="NW"&($PIECE($GET(^(0)),"^",3)'="RNW")&($PIECE($GET(^(0)),"^",3)'="HD")&($PIECE($GET(^(0)),"^",3)'="RF")
Begin DoDot:1
+3 KILL PSOSD("PENDING",$SELECT('$GET(OID):$PIECE(^PS(50.7,$PIECE(OR0,"^",8),0),"^")_" "_$PIECE(^PS(50.606,$PIECE(^PS(50.7,$PIECE(OR0,"^",8),0),"^",2),0),"^"),1:$PIECE(^PSDRUG($PIECE(OR0,"^",9),0),"^")))
End DoDot:1
+4 if $GET(POERR("DFLG"))
SET POERR("QFLG")=1
KILL POERR("DFLG"),PSONEW,ACP,OR0,DRET,SIG,OID,OI,PSOTITRF
+5 KILL PSORX("SC"),PSORX("CLINIC"),PSORX("PROVIDER NAME"),PSODRUG,PSOFOERR
+6 QUIT
+7 ;PSO*7*266 change order of bingo checks.
LBL IF $ORDER(PSORX("PSOL",0))!($DATA(RXRS))
SET PSOFROM="NEW"
DO ^PSORXL
KILL PSORX("PSOL"),PPL,RXRS
+1 if $DATA(BINGCRT)&($DATA(BINGRTE)&($DATA(DISGROUP)))
DO ^PSOBING1
KILL BINGCRT,BINGRTE,PSONEW,BBFLG,BBRX,PSORX("DOSING OFF"),PSOONOFC
+2 QUIT
CHK ;
+1 if '$DATA(PSOPAR)
DO ^PSOLSET
IF '$DATA(PSOPAR)
WRITE !,$CHAR(7),"Outpatient Division MUST be selected!",!
GOTO EX
+2 DO INST1^PSOORFI2
+3 SET PSZCNT=0
FOR PSZZI=0:0
SET PSZZI=$ORDER(^PS(59,PSZZI))
if 'PSZZI
QUIT
SET PSZCNT=PSZCNT+1
+4 SET TC=0
FOR TO=0:0
SET TO=$ORDER(^PS(52.41,"AOR",TO))
if 'TO
QUIT
FOR TZ=0:0
SET TZ=$ORDER(^PS(52.41,"AOR",TO,TZ))
if 'TZ
QUIT
FOR PSTZ=0:0
SET PSTZ=$ORDER(^PS(52.41,"AOR",TO,TZ,PSTZ))
if 'PSTZ
QUIT
SET TC=TC+1
+5 WRITE !!?10,$CHAR(7),"Orders to be completed"_$SELECT(PSZCNT=1:": ",1:" for all divisions: ")_TC,!
if 'TC
QUIT
+6 DO SUMM^PSOORNE1
KILL PSZZI,PSZCNT,PSTZ
+7 QUIT
+8 ;
LK DO LOCK^PSOORFI1
+1 QUIT
LK1 DO LOCK1^PSOORFI1
QUIT
QU IF $GET(PSOQUIT)
SET POERR("QFLG")=1
KILL PSOQUIT
+1 if $GET(PSOQFLG)
SET PAT(PAT)=PAT
+2 QUIT
ULP ; Unlocking Patient
+1 NEW PATIEN
+2 SET PATIEN=+$GET(X)
+3 KILL PSORX("MAIL/WINDOW"),PSORX("METHOD OF PICK-UP")
+4 DO CLEAN^PSOVER1
+5 DO UL^PSSLOCK(PATIEN)
+6 QUIT
KLL KILL PSOPTLOK
QUIT
KLLP KILL PSONOLCK
QUIT
SPL DO SPL^PSOORFI4
QUIT
SDFN SET PSODFN=+$GET(PSODFN)
QUIT
PP DO PP^PSOORFI4
QUIT
KQ KILL PSOQUIT,POERR("QFLG")
QUIT
SQR ;
+1 KILL PSOORRNW,PSOOPT,PSOREEDT,PSOQUIT,VALMSG
SET POERR("DFLG")=0
+2 QUIT