PSOOCPGX ;BIR/KML - OUTPATIENT PHARMACY PGx ORDER CHECKS DRIVER ;9/10/14 10:53pm
 ;;7.0;OUTPATIENT PHARMACY;**737**;DEC 1997;Build 52
 ;
 ;External reference to PGXOC^PSSPGX is supported by ICR #7526
 ;External reference to $$PROD0^PSNAPIS(P1,P3) supported by ICR #2531
 ;External reference to $$PGX^PSNAPIS supported by ICR #2574
 ;
 Q
 ;
GETPGX(PSODFN,PSODRUG) ; called by POST^PSODRG
 ; input - PSODRUG = array of data from DRUG entry in file 50
 ;           PSODFN = patient identifier DFN
 Q:+$G(PSODGCK)  ;Not perform PGx OC from Check Interactions hidden action yet. PSODRUG may still hang around from the CK action.
 N PSOQUIT,PSORETURN,PSODRARRAY,PSODRUGDA
 S PSODRUGDA=$G(PSODRUG("IEN")),PSODRARRAY(PSODRUGDA)="",PSODRARRAY(PSODRUGDA,"DRUGNAME")=$G(PSODRUG("NAME"))
 D PGXOC^PSSPGX("PSOPGX",PSODFN,.PSODRARRAY,.PSORETURN,"O") ; call to PDM to request Order Check Results/Warnings
 I $D(^TMP($J,"PSSXWARN")) D DISPWARN
 K ^TMP($J,"PSSXWARN")
 Q
 ;
DISPWARN ;
 N PSOS4,PSOS5,PSOSEV,PSOSOP,DIR,PSOTAG,PRINT,PSOTXT,PSOEFLG
 S (PSOS4,PSOS5,PSOSOP,PRINT)=0
 ; loop through any warnings created
 F PSOSEV="ERROR","HIGH","MEDIUM","NONE" S PSOS4=0 F  S PSOS4=$O(^TMP($J,"PSSXWARN",PSOSEV,PSOS4)) Q:'PSOS4  D
 . W:'+$G(PSOEFLG) @IOF K PSOEFLG
 . S PSOS5=0 F  S PSOS5=$O(^TMP($J,"PSSXWARN",PSOSEV,PSOS4,PSOS5)) Q:'PSOS5  D
 . . I (PSOSEV="ERROR"),'$O(^TMP($J,"PSSXWARN",PSOSEV)) S PSOEFLG=1
 . . S PSOTXT=^TMP($J,"PSSXWARN",PSOSEV,PSOS4,PSOS5)
 . . I PSOSEV="ERROR" I ($Y+5)>IOSL,(PSOTXT["For more details") D PAUSE(1)
 . . I ($Y+4)>IOSL D PAUSE(1)
 . . W !,PSOTXT
 . I +$O(^TMP($J,"PSSXWARN",PSOSEV,PSOS4)) D PAUSE(1)
 . I '$D(^XUSEC("PSORPH",DUZ)),'$P($G(PSOPAR),"^",2),PSOSEV="HIGH" D MESS
 . S PRINT=0 I (PSOSEV="MEDIUM")!(PSOSEV="HIGH") S PRINT=$$ASKAI()
 . I PRINT D ADDINFO(PSOSEV,PSOS4)
 . Q:'$D(^XUSEC("PSORPH",DUZ))   ; need to be a pharmacist to create an intervention
 . S PSOTAG=$S(PSOSEV="HIGH":"REQINTERV",PSOSEV="MEDIUM":"OPTINTERV",1:"")
 . D:PSOTAG]"" @PSOTAG
 D PAUSE(1)
 Q
 ;
OPTINTERV ;Prompt end user for optional intervention
 N DIR,DTOUT,DIRUT,DIROUT,DUOUT,Y,X
 S DIR(0)="SA^1:YES;0:NO",DIR("A")="Do you want to Intervene? ",DIR("B")="NO"
 S DIR("?",1)="Answer 'YES' if you DO want to enter an intervention for this medication,"
 S DIR("?")="       'NO' if you DON'T want to enter an intervention for this medication,"
 W ! D ^DIR
 ; line below: already in the stack -  RX ien (PSORXIEN) for VERIFY and REINSTATE actions (PSOZVER and PSOREINO respectively)
 I Y D ENPGX^PSORXI("PHARMACOGENOMIC MEDIUM ORDER CHECK",$S($G(PSOZVER):$G(PSORXIEN),$G(PSOREINO):$G(PSORXIEN),1:""))
 W !
 Q
 ; 
REQINTERV ;Prompt end user for required intervention
 N DIR,DTOUT,DIRUT,DIROUT,DUOUT,Y,X
 W !
 S DIR(0)="SA^1:YES;0:NO",DIR("A")="Do you want to Continue? ",DIR("B")="NO"
 I $G(PSODRUG("NAME"))]"" S DIR("A")="Do you want to Continue with "_$G(PSODRUG("NAME"))_"? "
 S DIR("?",1)="Enter 'NO' if you wish to exit without continuing with the order,",DIR("?")="or 'YES' to continue with the order entry process."
 D ^DIR
 I 'Y S PSORX("DFLG")=1  ; PSONEW("DFLG") is set when end-user needs to quit processing the order
 I Y D
 . N X1 D SIG^XUSESIG I X1="" W !!,"Signature Code not valid." S PSORX("DFLG")=1 H 1 Q
 . ; line below: already in the stack -  RX ien (PSORXIEN) for VERIFY and REINSTATE actions (PSOZVER and PSOREINS respectively)
 . D ENPGX^PSORXI("PHARMACOGENOMIC HIGH ORDER CHECK",$S($G(PSOZVER):$G(PSORXIEN),$G(PSOREINS):$G(PSORXIEN),1:"")) ; ; pass in RX ien for VERIFY and REINSTATE actions
 Q
 ;
ASKAI() ;  additional information prompt
 N DIR,DIRUT,DUOUT,DTOUT,DIROUT
 S DIR("A")="Display Additional Information on Pharmacogenomic Order Check(s)"
 s DIR("B")="NO",DIR(0)="Y"
 S DIR("?",1)="Enter 'YES' to see the additional information on Pharmacogenomic Order Check."
 S DIR("?")=" "
 D ^DIR K DIR
 Q $S(+Y=1:1,1:0)
 ;
ADDINFO(PSOSEV,PSOS4) ;Display additional information
 N ZTDESC,ZTRTN,ZTSAVE
 N IOP,%ZIS,POP
 S %ZIS="QM"
 W ! D ^%ZIS
 Q:POP
 I $D(IO("Q")) D  Q
 .S ZTRTN="PRINTAI^PSOOCPGX",ZTDESC="Pharmacogenomic Order Check - Additional Information"
 .S ZTSAVE("^TMP($J,""PSSXWARN"",")="",ZTSAVE("PSOSEV")="",ZTSAVE("PSOS4")=""
 .D ^%ZTLOAD,^%ZISC
 .I $G(ZTSK) W !,"Pharmacogenomic Additional Information Queued, task# ",ZTSK,".",! S:$D(ZTQUEUED) ZTREQ="Q"
 D PRINTAI,^%ZISC
 Q
 ;
PRINTAI ;
 U IO
 I $E(IOST)="C" W @IOF
 N PSOX1,DIR,Y,STOP
 S (PSOX1,STOP)=0
 S PSOX1=0 F  S PSOX1=$O(^TMP($J,"PSSXWARN",PSOSEV,PSOS4,"AI",PSOX1)) Q:'PSOX1  Q:STOP  D
 . W !,^TMP($J,"PSSXWARN",PSOSEV,PSOS4,"AI",PSOX1)
 . I $Y+4>IOSL,$E(IOST)="C" D
 . . W ! S DIR(0)="EA",DIR("A")="Press Return to continue..."
 . . D ^DIR
 . . I 'Y S STOP=1 Q
 . . W @IOF
 Q
 ;
PAUSE(PSOIOF) ;
 W ! S DIR(0)="EA",DIR("A")="Press ENTER to continue ..." D ^DIR W:$G(PSOIOF) @IOF
 Q
 ;
BLD(PSOXDFN,PSOPGXS) ;
 N PSOPGXCT,PSOXINDX,X,Y,X1,X2
 K ^TMP($J,"ORDERS") I '$G(PSOXDFN) Q
 I '$G(DT) S DT=$$DT^XLFDT
 I '$G(PSOPGXS) S PSOPGXS=120
 S X1=DT,X2=-PSOPGXS D C^%DTC S PSOPGXCT=X D BUILD
 Q
BUILD ;build profiles
 N PSOPGXEX,PSOPGXRX,PSOEN,PSOEN1,PSOOI,PSODD
 S PSOPGXEX=PSOPGXCT-1,PSOPGXRX=0
 F  S PSOPGXEX=$O(^PS(55,PSOXDFN,"P","A",PSOPGXEX)) Q:'PSOPGXEX  F  S PSOPGXRX=$O(^PS(55,PSOXDFN,"P","A",PSOPGXEX,PSOPGXRX)) Q:'PSOPGXRX  I $D(^PSRX(PSOPGXRX,0)) D GET
 S PSOEN1=0
 F PSOEN=0:0 S PSOEN=$O(^PS(52.41,"AOR",PSOXDFN,PSOEN)) Q:'PSOEN  D
 .F  S PSOEN1=$O(^PS(52.41,"AOR",PSOXDFN,PSOEN,PSOEN1)) Q:'PSOEN1  D
 ..Q:'$P(^PS(52.41,PSOEN1,0),"^",8)
 ..S PSOOI=^PS(52.41,PSOEN1,0)
 ..I $P(PSOOI,"^",3)'="DC"&($P(PSOOI,"^",3)'="DE") D
 ...I '$P(^PS(52.41,PSOEN1,0),"^",9) D BLDOI Q
 ...S PSODD=+$P(PSOOI,"^",9) D SETTMP
 Q
 ;
BLDOI ;If no DD/non-standard dose, get all drugs for OI
 N PSOI S PSOI=$P(PSOOI,"^",8) Q:'PSOOI
 S PSODD="" F  S PSODD=$O(^PSDRUG("ASP",PSOI,PSODD)) Q:'PSODD  D SETTMP
 Q
 ;
SETTMP ;Create ^TMP($J,"ORDERS"
 N PSOXDRG
 Q:$P(PSOOI,"^",3)="RF"
 S PSOXDRG=$S(PSODD:$P($G(^PSDRUG(PSODD,0)),"^"),1:"") Q:PSOXDRG']""
 S PSOXINDX=$G(PSOXINDX)+1,^TMP($J,"ORDERS",PSOXINDX)=$S(PSODD:$P(^PSDRUG(PSODD,0),"^",2),1:"")_"^"_$S($G(^PSDRUG(PSODD,"ND"))]"":+^("ND")_"A"_$P(^("ND"),"^",3),1:0)_"^"_PSOXDRG_"^"_$P(^PS(52.41,PSOEN1,0),"^")_"^"_PSOEN1_"P;O"
 Q
 ;
GET ;data for profiles
 N PSOPGX0,PSOPGX2,PSOPGXST,PSOPGXOR,PSOPGXDG,PSOPGXD0,PSOPGXVC
 S PSOPGX0=^PSRX(PSOPGXRX,0),PSOPGXST=+^("STA") Q:(PSOPGXST'=0)&(PSOPGXST'=3)&(PSOPGXST'=5)&(PSOPGXST'=11)&(PSOPGXST'=16)
 S PSOPGX2=$G(^PSRX(PSOPGXRX,2)),PSOPGXOR=$P($G(^("OR1")),"^",2)
 S PSOPGXDG=+$P(PSOPGX0,"^",6) Q:'$D(^PSDRUG(PSOPGXDG,0))
 S PSOPGXD0=^PSDRUG(PSOPGXDG,0),PSOPGXVC=$P(PSOPGXD0,"^",2)
 ;
 I PSOPGXEX<DT,(PSOPGXST<6)!(PSOPGXST=16) D
 .N DIE,DIC,DR,DA,PSOGSTAT,PSOGCOMM,PSOPGXDA,PSOPSTAT S PSOGSTAT="SC",DIE=52,DA=PSOPGXRX,DR="100////11" D ^DIE K DIE,DIC,DR,DA
 .D ECAN^PSOUTL(PSOPGXRX) S PSOPGXDA=PSOPGXRX
 .S PSOGCOMM="Prescription Expired",PSOPSTAT="ZE" D EN^PSOHLSN1(PSOPGXDA,PSOGSTAT,PSOPSTAT,PSOGCOMM)
 S PSOXINDX=$G(PSOXINDX)+1
 S ^TMP($J,"ORDERS",PSOXINDX)=PSOPGXVC_"^"_$S($G(^PSDRUG(PSOPGXDG,"ND"))]"":+^("ND")_"A"_$P(^("ND"),"^",3),1:0)_"^"_$P(^PSDRUG(PSOPGXDG,0),"^")_"^"_PSOPGXOR_"^"_PSOPGXRX_"R;O"
 Q
 ;
MESS ;display technician message
 N DIR,DUOUT,DTOUT,DIRUT,DIROUT,DA,DR,X,Y
 W !?3,"WARNING: Unlike other orders with Critical Order Checks, this order will"
 W !?3,"not be placed in a Non-Verified status for pharmacist verification after"
 W !?3,"you process it. If you are unsure about this order, please stop processing"
 W !?3,"by '^'ing out, and consult a pharmacist.",!
 K DIR S DIR(0)="E",DIR("A")="  Press Return to continue" D ^DIR K DIR W !
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSOOCPGX   7693     printed  Sep 23, 2025@20:08:06                                                                                                                                                                                                    Page 2
PSOOCPGX  ;BIR/KML - OUTPATIENT PHARMACY PGx ORDER CHECKS DRIVER ;9/10/14 10:53pm
 +1       ;;7.0;OUTPATIENT PHARMACY;**737**;DEC 1997;Build 52
 +2       ;
 +3       ;External reference to PGXOC^PSSPGX is supported by ICR #7526
 +4       ;External reference to $$PROD0^PSNAPIS(P1,P3) supported by ICR #2531
 +5       ;External reference to $$PGX^PSNAPIS supported by ICR #2574
 +6       ;
 +7        QUIT 
 +8       ;
GETPGX(PSODFN,PSODRUG) ; called by POST^PSODRG
 +1       ; input - PSODRUG = array of data from DRUG entry in file 50
 +2       ;           PSODFN = patient identifier DFN
 +3       ;Not perform PGx OC from Check Interactions hidden action yet. PSODRUG may still hang around from the CK action.
           if +$GET(PSODGCK)
               QUIT 
 +4        NEW PSOQUIT,PSORETURN,PSODRARRAY,PSODRUGDA
 +5        SET PSODRUGDA=$GET(PSODRUG("IEN"))
           SET PSODRARRAY(PSODRUGDA)=""
           SET PSODRARRAY(PSODRUGDA,"DRUGNAME")=$GET(PSODRUG("NAME"))
 +6       ; call to PDM to request Order Check Results/Warnings
           DO PGXOC^PSSPGX("PSOPGX",PSODFN,.PSODRARRAY,.PSORETURN,"O")
 +7        IF $DATA(^TMP($JOB,"PSSXWARN"))
               DO DISPWARN
 +8        KILL ^TMP($JOB,"PSSXWARN")
 +9        QUIT 
 +10      ;
DISPWARN  ;
 +1        NEW PSOS4,PSOS5,PSOSEV,PSOSOP,DIR,PSOTAG,PRINT,PSOTXT,PSOEFLG
 +2        SET (PSOS4,PSOS5,PSOSOP,PRINT)=0
 +3       ; loop through any warnings created
 +4        FOR PSOSEV="ERROR","HIGH","MEDIUM","NONE"
               SET PSOS4=0
               FOR 
                   SET PSOS4=$ORDER(^TMP($JOB,"PSSXWARN",PSOSEV,PSOS4))
                   if 'PSOS4
                       QUIT 
                   Begin DoDot:1
 +5                    if '+$GET(PSOEFLG)
                           WRITE @IOF
                       KILL PSOEFLG
 +6                    SET PSOS5=0
                       FOR 
                           SET PSOS5=$ORDER(^TMP($JOB,"PSSXWARN",PSOSEV,PSOS4,PSOS5))
                           if 'PSOS5
                               QUIT 
                           Begin DoDot:2
 +7                            IF (PSOSEV="ERROR")
                                   IF '$ORDER(^TMP($JOB,"PSSXWARN",PSOSEV))
                                       SET PSOEFLG=1
 +8                            SET PSOTXT=^TMP($JOB,"PSSXWARN",PSOSEV,PSOS4,PSOS5)
 +9                            IF PSOSEV="ERROR"
                                   IF ($Y+5)>IOSL
                                       IF (PSOTXT["For more details")
                                           DO PAUSE(1)
 +10                           IF ($Y+4)>IOSL
                                   DO PAUSE(1)
 +11                           WRITE !,PSOTXT
                           End DoDot:2
 +12                   IF +$ORDER(^TMP($JOB,"PSSXWARN",PSOSEV,PSOS4))
                           DO PAUSE(1)
 +13                   IF '$DATA(^XUSEC("PSORPH",DUZ))
                           IF '$PIECE($GET(PSOPAR),"^",2)
                               IF PSOSEV="HIGH"
                                   DO MESS
 +14                   SET PRINT=0
                       IF (PSOSEV="MEDIUM")!(PSOSEV="HIGH")
                           SET PRINT=$$ASKAI()
 +15                   IF PRINT
                           DO ADDINFO(PSOSEV,PSOS4)
 +16      ; need to be a pharmacist to create an intervention
                       if '$DATA(^XUSEC("PSORPH",DUZ))
                           QUIT 
 +17                   SET PSOTAG=$SELECT(PSOSEV="HIGH":"REQINTERV",PSOSEV="MEDIUM":"OPTINTERV",1:"")
 +18                   if PSOTAG]""
                           DO @PSOTAG
                   End DoDot:1
 +19       DO PAUSE(1)
 +20       QUIT 
 +21      ;
OPTINTERV ;Prompt end user for optional intervention
 +1        NEW DIR,DTOUT,DIRUT,DIROUT,DUOUT,Y,X
 +2        SET DIR(0)="SA^1:YES;0:NO"
           SET DIR("A")="Do you want to Intervene? "
           SET DIR("B")="NO"
 +3        SET DIR("?",1)="Answer 'YES' if you DO want to enter an intervention for this medication,"
 +4        SET DIR("?")="       'NO' if you DON'T want to enter an intervention for this medication,"
 +5        WRITE !
           DO ^DIR
 +6       ; line below: already in the stack -  RX ien (PSORXIEN) for VERIFY and REINSTATE actions (PSOZVER and PSOREINO respectively)
 +7        IF Y
               DO ENPGX^PSORXI("PHARMACOGENOMIC MEDIUM ORDER CHECK",$SELECT($GET(PSOZVER):$GET(PSORXIEN),$GET(PSOREINO):$GET(PSORXIEN),1:""))
 +8        WRITE !
 +9        QUIT 
 +10      ; 
REQINTERV ;Prompt end user for required intervention
 +1        NEW DIR,DTOUT,DIRUT,DIROUT,DUOUT,Y,X
 +2        WRITE !
 +3        SET DIR(0)="SA^1:YES;0:NO"
           SET DIR("A")="Do you want to Continue? "
           SET DIR("B")="NO"
 +4        IF $GET(PSODRUG("NAME"))]""
               SET DIR("A")="Do you want to Continue with "_$GET(PSODRUG("NAME"))_"? "
 +5        SET DIR("?",1)="Enter 'NO' if you wish to exit without continuing with the order,"
           SET DIR("?")="or 'YES' to continue with the order entry process."
 +6        DO ^DIR
 +7       ; PSONEW("DFLG") is set when end-user needs to quit processing the order
           IF 'Y
               SET PSORX("DFLG")=1
 +8        IF Y
               Begin DoDot:1
 +9                NEW X1
                   DO SIG^XUSESIG
                   IF X1=""
                       WRITE !!,"Signature Code not valid."
                       SET PSORX("DFLG")=1
                       HANG 1
                       QUIT 
 +10      ; line below: already in the stack -  RX ien (PSORXIEN) for VERIFY and REINSTATE actions (PSOZVER and PSOREINS respectively)
 +11      ; ; pass in RX ien for VERIFY and REINSTATE actions
                   DO ENPGX^PSORXI("PHARMACOGENOMIC HIGH ORDER CHECK",$SELECT($GET(PSOZVER):$GET(PSORXIEN),$GET(PSOREINS):$GET(PSORXIEN),1:""))
               End DoDot:1
 +12       QUIT 
 +13      ;
ASKAI()   ;  additional information prompt
 +1        NEW DIR,DIRUT,DUOUT,DTOUT,DIROUT
 +2        SET DIR("A")="Display Additional Information on Pharmacogenomic Order Check(s)"
 +3        SET DIR("B")="NO"
           SET DIR(0)="Y"
 +4        SET DIR("?",1)="Enter 'YES' to see the additional information on Pharmacogenomic Order Check."
 +5        SET DIR("?")=" "
 +6        DO ^DIR
           KILL DIR
 +7        QUIT $SELECT(+Y=1:1,1:0)
 +8       ;
ADDINFO(PSOSEV,PSOS4) ;Display additional information
 +1        NEW ZTDESC,ZTRTN,ZTSAVE
 +2        NEW IOP,%ZIS,POP
 +3        SET %ZIS="QM"
 +4        WRITE !
           DO ^%ZIS
 +5        if POP
               QUIT 
 +6        IF $DATA(IO("Q"))
               Begin DoDot:1
 +7                SET ZTRTN="PRINTAI^PSOOCPGX"
                   SET ZTDESC="Pharmacogenomic Order Check - Additional Information"
 +8                SET ZTSAVE("^TMP($J,""PSSXWARN"",")=""
                   SET ZTSAVE("PSOSEV")=""
                   SET ZTSAVE("PSOS4")=""
 +9                DO ^%ZTLOAD
                   DO ^%ZISC
 +10               IF $GET(ZTSK)
                       WRITE !,"Pharmacogenomic Additional Information Queued, task# ",ZTSK,".",!
                       if $DATA(ZTQUEUED)
                           SET ZTREQ="Q"
               End DoDot:1
               QUIT 
 +11       DO PRINTAI
           DO ^%ZISC
 +12       QUIT 
 +13      ;
PRINTAI   ;
 +1        USE IO
 +2        IF $EXTRACT(IOST)="C"
               WRITE @IOF
 +3        NEW PSOX1,DIR,Y,STOP
 +4        SET (PSOX1,STOP)=0
 +5        SET PSOX1=0
           FOR 
               SET PSOX1=$ORDER(^TMP($JOB,"PSSXWARN",PSOSEV,PSOS4,"AI",PSOX1))
               if 'PSOX1
                   QUIT 
               if STOP
                   QUIT 
               Begin DoDot:1
 +6                WRITE !,^TMP($JOB,"PSSXWARN",PSOSEV,PSOS4,"AI",PSOX1)
 +7                IF $Y+4>IOSL
                       IF $EXTRACT(IOST)="C"
                           Begin DoDot:2
 +8                            WRITE !
                               SET DIR(0)="EA"
                               SET DIR("A")="Press Return to continue..."
 +9                            DO ^DIR
 +10                           IF 'Y
                                   SET STOP=1
                                   QUIT 
 +11                           WRITE @IOF
                           End DoDot:2
               End DoDot:1
 +12       QUIT 
 +13      ;
PAUSE(PSOIOF) ;
 +1        WRITE !
           SET DIR(0)="EA"
           SET DIR("A")="Press ENTER to continue ..."
           DO ^DIR
           if $GET(PSOIOF)
               WRITE @IOF
 +2        QUIT 
 +3       ;
BLD(PSOXDFN,PSOPGXS) ;
 +1        NEW PSOPGXCT,PSOXINDX,X,Y,X1,X2
 +2        KILL ^TMP($JOB,"ORDERS")
           IF '$GET(PSOXDFN)
               QUIT 
 +3        IF '$GET(DT)
               SET DT=$$DT^XLFDT
 +4        IF '$GET(PSOPGXS)
               SET PSOPGXS=120
 +5        SET X1=DT
           SET X2=-PSOPGXS
           DO C^%DTC
           SET PSOPGXCT=X
           DO BUILD
 +6        QUIT 
BUILD     ;build profiles
 +1        NEW PSOPGXEX,PSOPGXRX,PSOEN,PSOEN1,PSOOI,PSODD
 +2        SET PSOPGXEX=PSOPGXCT-1
           SET PSOPGXRX=0
 +3        FOR 
               SET PSOPGXEX=$ORDER(^PS(55,PSOXDFN,"P","A",PSOPGXEX))
               if 'PSOPGXEX
                   QUIT 
               FOR 
                   SET PSOPGXRX=$ORDER(^PS(55,PSOXDFN,"P","A",PSOPGXEX,PSOPGXRX))
                   if 'PSOPGXRX
                       QUIT 
                   IF $DATA(^PSRX(PSOPGXRX,0))
                       DO GET
 +4        SET PSOEN1=0
 +5        FOR PSOEN=0:0
               SET PSOEN=$ORDER(^PS(52.41,"AOR",PSOXDFN,PSOEN))
               if 'PSOEN
                   QUIT 
               Begin DoDot:1
 +6                FOR 
                       SET PSOEN1=$ORDER(^PS(52.41,"AOR",PSOXDFN,PSOEN,PSOEN1))
                       if 'PSOEN1
                           QUIT 
                       Begin DoDot:2
 +7                        if '$PIECE(^PS(52.41,PSOEN1,0),"^",8)
                               QUIT 
 +8                        SET PSOOI=^PS(52.41,PSOEN1,0)
 +9                        IF $PIECE(PSOOI,"^",3)'="DC"&($PIECE(PSOOI,"^",3)'="DE")
                               Begin DoDot:3
 +10                               IF '$PIECE(^PS(52.41,PSOEN1,0),"^",9)
                                       DO BLDOI
                                       QUIT 
 +11                               SET PSODD=+$PIECE(PSOOI,"^",9)
                                   DO SETTMP
                               End DoDot:3
                       End DoDot:2
               End DoDot:1
 +12       QUIT 
 +13      ;
BLDOI     ;If no DD/non-standard dose, get all drugs for OI
 +1        NEW PSOI
           SET PSOI=$PIECE(PSOOI,"^",8)
           if 'PSOOI
               QUIT 
 +2        SET PSODD=""
           FOR 
               SET PSODD=$ORDER(^PSDRUG("ASP",PSOI,PSODD))
               if 'PSODD
                   QUIT 
               DO SETTMP
 +3        QUIT 
 +4       ;
SETTMP    ;Create ^TMP($J,"ORDERS"
 +1        NEW PSOXDRG
 +2        if $PIECE(PSOOI,"^",3)="RF"
               QUIT 
 +3        SET PSOXDRG=$SELECT(PSODD:$PIECE($GET(^PSDRUG(PSODD,0)),"^"),1:"")
           if PSOXDRG']""
               QUIT 
 +4        SET PSOXINDX=$GET(PSOXINDX)+1
           SET ^TMP($JOB,"ORDERS",PSOXINDX)=$SELECT(PSODD:$PIECE(^PSDRUG(PSODD,0),"^",2),1:"")_"^"_$SELECT($GET(^PSDRUG(PSODD,"ND"))]"":+^("ND")_"A"_$PIECE(^("ND"),"^",3),1:0)_"^"_PSOXDRG_"^"_$PIECE(^PS(52.41,PSOEN1,0),"^")_"^"_PSOEN1_"P;O"
 +5        QUIT 
 +6       ;
GET       ;data for profiles
 +1        NEW PSOPGX0,PSOPGX2,PSOPGXST,PSOPGXOR,PSOPGXDG,PSOPGXD0,PSOPGXVC
 +2        SET PSOPGX0=^PSRX(PSOPGXRX,0)
           SET PSOPGXST=+^("STA")
           if (PSOPGXST'=0)&(PSOPGXST'=3)&(PSOPGXST'=5)&(PSOPGXST'=11)&(PSOPGXST'=16)
               QUIT 
 +3        SET PSOPGX2=$GET(^PSRX(PSOPGXRX,2))
           SET PSOPGXOR=$PIECE($GET(^("OR1")),"^",2)
 +4        SET PSOPGXDG=+$PIECE(PSOPGX0,"^",6)
           if '$DATA(^PSDRUG(PSOPGXDG,0))
               QUIT 
 +5        SET PSOPGXD0=^PSDRUG(PSOPGXDG,0)
           SET PSOPGXVC=$PIECE(PSOPGXD0,"^",2)
 +6       ;
 +7        IF PSOPGXEX<DT
               IF (PSOPGXST<6)!(PSOPGXST=16)
                   Begin DoDot:1
 +8                    NEW DIE,DIC,DR,DA,PSOGSTAT,PSOGCOMM,PSOPGXDA,PSOPSTAT
                       SET PSOGSTAT="SC"
                       SET DIE=52
                       SET DA=PSOPGXRX
                       SET DR="100////11"
                       DO ^DIE
                       KILL DIE,DIC,DR,DA
 +9                    DO ECAN^PSOUTL(PSOPGXRX)
                       SET PSOPGXDA=PSOPGXRX
 +10                   SET PSOGCOMM="Prescription Expired"
                       SET PSOPSTAT="ZE"
                       DO EN^PSOHLSN1(PSOPGXDA,PSOGSTAT,PSOPSTAT,PSOGCOMM)
                   End DoDot:1
 +11       SET PSOXINDX=$GET(PSOXINDX)+1
 +12       SET ^TMP($JOB,"ORDERS",PSOXINDX)=PSOPGXVC_"^"_$SELECT($GET(^PSDRUG(PSOPGXDG,"ND"))]"":+^("ND")_"A"_$PIECE(^("ND"),"^",3),1:0)_"^"_$PIECE(^PSDRUG(PSOPGXDG,0),"^")_"^"_PSOPGXOR_"^"_PSOPGXRX_"R;O"
 +13       QUIT 
 +14      ;
MESS      ;display technician message
 +1        NEW DIR,DUOUT,DTOUT,DIRUT,DIROUT,DA,DR,X,Y
 +2        WRITE !?3,"WARNING: Unlike other orders with Critical Order Checks, this order will"
 +3        WRITE !?3,"not be placed in a Non-Verified status for pharmacist verification after"
 +4        WRITE !?3,"you process it. If you are unsure about this order, please stop processing"
 +5        WRITE !?3,"by '^'ing out, and consult a pharmacist.",!
 +6        KILL DIR
           SET DIR(0)="E"
           SET DIR("A")="  Press Return to continue"
           DO ^DIR
           KILL DIR
           WRITE !
 +7        QUIT