PSSMRRDG ;BIRMINGHAM/GN/DRP-Diagnostic Report only, does not update ;9/25/15 10:03am
 ;;1.0;PHARMACY DATA MANAGEMENT;**191**;9/30/97;Build 40
 Q
 ;
EN(P1) ;Check for MRR meds missing the 2.1 node which is new and would be
 ;there if an order was created and Finished after patch PSJ*3*315
 ; Input param: P1 = default is null and checks for 2.1 node
 ;                  = if pass in a value, then it will not check 2.1
 ;
 W ! K %ZIS,IOP,ZTSK S %ZIS("B")="",%ZIS="QM" D ^%ZIS I POP Q
 I $E($G(IOST),1,2)="C-" W $C(7),!?5,"It is recommended to Queue this report to a printer for Large sites, enter Q at Device prompt",!
 I '$D(IO("Q")) N TERM U IO S:$E(IOSL,1)'["9" TERM=$S($E($G(IOST),1,2)="C-":1,1:0) D MAIN,^%ZISC Q
 S ZTRTN="MAIN^PSSMRRDG",ZTDESC="Orders for MRRs With Removal Properties" D ^%ZTLOAD K IO("Q")
 Q
 ;
MAIN ; main control
 N DFN,MRR,MRRAR,ORD,STP,ORDTOT,DDOI,DDTXT,QQ,YY,STS,PSSID,PSSLOC,PSSQ,PSSPATCH,ORDSDT
 N CLNODE,LIN,MRRFL,OI,PAGNO,POP
 N $ESTACK,$ETRAP S $ETRAP="D ERRTRP^PSSMRRDG" ;
 S P1=$G(P1)   ;define P1 to null if not passed
 S PSSPATCH=$S($G(P2):1,1:'$$PATCH^XPDUTL("PSJ*5.0*315"))
 ;build array of OI's that are mrr and their flag value
 F QQ=0:0 S QQ=$O(^PSDRUG("ASP",QQ)) Q:QQ=""  D
 . F YY=0:0 S YY=$O(^PSDRUG("ASP",QQ,YY)) Q:'YY  D
 .. S OI=$P(^PSDRUG(YY,2),U)
 .. S MRRFL=$P($G(^PS(50.7,OI,4)),U,1)
 .. S:MRRFL MRRAR(OI)=MRRFL
 ..Q
 .Q
 ;
 ; Use Ord Stop Date XREF to look for current orders
 S ORDTOT=0,PSSQ=0,PAGNO=0,ORDSDT=DT
 F  S ORDSDT=$O(^PS(55,"AUD",ORDSDT)) Q:ORDSDT=""  D
 . S DFN=0
 . F  S DFN=$O(^PS(55,"AUD",ORDSDT,DFN)) Q:DFN=""  D
 .. S ORD=0
 .. F  S ORD=$O(^PS(55,"AUD",ORDSDT,DFN,ORD)) Q:ORD=""  D
 ... S STS=$P($G(^PS(55,DFN,5,ORD,0)),U,9)
 ... S CLNODE=$G(^PS(55,DFN,5,ORD,8),0)
 ... ;non Active type order, quit dont include
 ... I (STS="D")!(STS="E")!(STS="DE")!(STS="DR") Q
 ... S PSSID=$S('$D(^DPT(DFN,0)):"NONE",1:$E($P($G(^DPT(DFN,0)),U,1),1)_$E($P($G(^DPT(DFN,0)),U,9),6,9))
 ... D CHKORD        ;check and then set ^TMP for sort
 ...Q
 ..Q
 .Q
 D:$D(^TMP("PSSMRRDG")) PRINT
 D:ORDTOT=0 HDR
 I 'PSSQ W !!,"Total Orders found: ",ORDTOT,!
 W !!,"Press RETURN to continue....." R X:$G(DTIME) ;pause before returning to Detail screen
 K ^TMP("PSSMRRDG")
 Q
 ;
CHKORD ;check if Order qualifies and then print on report
 ; return mrrfl which is positive or true  (1,2,3)
 F QQ=0:0 S QQ=$O(^PS(55,DFN,5,ORD,1,QQ)) Q:'QQ  D
 . S DDOI=+$P($G(^PS(55,DFN,5,ORD,.2)),U)
 . S MRR=$G(MRRAR(DDOI))
 . Q:'MRR      ;don't report not a MRR med
 . ;   don't report if has a 2.1 node, unless P1 overrides
 . I $G(P1)="",$D(^PS(55,DFN,5,ORD,2.1)) Q
 . S PSSLOC=$S($$CLINIC(CLNODE):$P(^SC(+^PS(55,DFN,5,ORD,8),0),U,1),$G(^DPT(DFN,.1))]"":^DPT(DFN,.1),1:"UNKNOWN")
 . S DDTXT=$$GET1^DIQ(55.07,QQ_","_ORD_","_DFN,"DISPENSE DRUG")
 . S ^TMP("PSSMRRDG",PSSLOC,PSSID)=DDTXT_U_STS_U_MRR
 .Q
 Q
 ;
PRINT ;
 N STR S PSSLOC=""
  F  S PSSLOC=$O(^TMP("PSSMRRDG",PSSLOC)) Q:PSSLOC=""!PSSQ  D
 . D HDR S PSSID=""
 . F  S PSSID=$O(^TMP("PSSMRRDG",PSSLOC,PSSID)) Q:PSSID=""!PSSQ  D
 .. S STR=^TMP("PSSMRRDG",PSSLOC,PSSID),DDTXT=$P(STR,U),STS=$P(STR,U,2),MRR=$P(STR,U,3)
 .. D WRITELN S ORDTOT=ORDTOT+1
 .. I $Y>(IOSL-1) D PAUSE Q:PSSQ
 ..Q
 . D PAUSE Q:PSSQ
 .Q
 Q
 ;
HDR ;Write a heading on report
 S PAGNO=PAGNO+1
 W @IOF
 W !,$E($$FMTE^XLFDT($$NOW^XLFDT),1,18),?125,"Page ",PAGNO
 I 'PSSPATCH D H1,BODY Q
 D H2,BODY
 Q
 ;
H1 ; heading for Pre-PSJ315 install
 W !,?2,"The following ACTIVE Orders are for Medications Requiring Removal (MRR). Prior to Installation of PSJ*5*315 these orders"
 W !,?2,"should be reviewed for planning purposes, but no action taken. Once PSJ*5*315 is installed they will need to be d/c'd and"
 W !,?2,"re-entered after coordinating with your ADPAC."
 Q
H2 ; heading for Post-PSJ315 install
 W !,?2,"The following ACTIVE orders for medications that Require Removal (MRR) were finished prior to install of Patch PSJ*5*315."
 W !,?2,"These orders must be re-entered. They may not be copied, renewed or edited to create new orders."
 W !,?33,"Any changes to these orders should be coordinated with your ADPAC."
 Q
BODY ;
 W !!,?50," Sort by Patient within Ward  "_$G(PSSLOC,"NONE FOUND")
 W !!,"Patient",?10,"Patient",?30,"Orderable",?75,"Ordr",?80,"MRR"
 W !,"ID",?10,"Loc",?30,"Item Name",?75,"Sts",?80,"Val"
 S $P(LIN,"-",132)=""
 W !,LIN
 Q
 ;
WRITELN ;Write line on report
 W !,PSSID,?10,PSSLOC,?30,DDTXT,?76,STS,?81,MRR
 Q
 ;
PAUSE ;
 Q:'($G(TERM))
 N X
 W !!,"Press RETURN to continue, '^' to exit"
 R X:$G(DTIME) I (X="^")!('$T) S PSSQ=1 Q
 U IO
 Q
 ;
CLINIC(CL) ;Is this a Clinic order that would show on the VDL in CO mode also?
 Q:'($P(CL,"^",2)?7N!($P(CL,"^",2)?7N1".".N)) 0  ;no appt date, IM ord
 Q:'$D(^PS(53.46,"B",+CL)) 0                     ;no PTR to 44, IM ord
 N A S A=$O(^PS(53.46,"B",+CL,"")) Q:'A 0        ;no 53.46 ien, IM ord
 Q $P(^PS(53.46,A,0),"^",4)                      ;Send to BCMA? flag
 ;
TST(P2) ;
 S P2=$G(P2),P1=1
 D EN(P1)
 Q
 ;
ERRTRP ; Error trap processing
 N Z,PROBLEM
 S Z(1,1)=$$EC^%ZOSV ; mumps error location and description
 S Z="A SYSTEM ERROR HAS BEEN DETECTED AT THE FOLLOWING LOCATION"
 S PROBLEM=7
 D ^%ZTER ; record the error in the trap
 G UNWIND^%ZTER ; unwind stack levels
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSSMRRDG   5325     printed  Sep 23, 2025@20:08:48                                                                                                                                                                                                    Page 2
PSSMRRDG  ;BIRMINGHAM/GN/DRP-Diagnostic Report only, does not update ;9/25/15 10:03am
 +1       ;;1.0;PHARMACY DATA MANAGEMENT;**191**;9/30/97;Build 40
 +2        QUIT 
 +3       ;
EN(P1)    ;Check for MRR meds missing the 2.1 node which is new and would be
 +1       ;there if an order was created and Finished after patch PSJ*3*315
 +2       ; Input param: P1 = default is null and checks for 2.1 node
 +3       ;                  = if pass in a value, then it will not check 2.1
 +4       ;
 +5        WRITE !
           KILL %ZIS,IOP,ZTSK
           SET %ZIS("B")=""
           SET %ZIS="QM"
           DO ^%ZIS
           IF POP
               QUIT 
 +6        IF $EXTRACT($GET(IOST),1,2)="C-"
               WRITE $CHAR(7),!?5,"It is recommended to Queue this report to a printer for Large sites, enter Q at Device prompt",!
 +7        IF '$DATA(IO("Q"))
               NEW TERM
               USE IO
               if $EXTRACT(IOSL,1)'["9"
                   SET TERM=$SELECT($EXTRACT($GET(IOST),1,2)="C-":1,1:0)
               DO MAIN
               DO ^%ZISC
               QUIT 
 +8        SET ZTRTN="MAIN^PSSMRRDG"
           SET ZTDESC="Orders for MRRs With Removal Properties"
           DO ^%ZTLOAD
           KILL IO("Q")
 +9        QUIT 
 +10      ;
MAIN      ; main control
 +1        NEW DFN,MRR,MRRAR,ORD,STP,ORDTOT,DDOI,DDTXT,QQ,YY,STS,PSSID,PSSLOC,PSSQ,PSSPATCH,ORDSDT
 +2        NEW CLNODE,LIN,MRRFL,OI,PAGNO,POP
 +3       ;
           NEW $ESTACK,$ETRAP
           SET $ETRAP="D ERRTRP^PSSMRRDG"
 +4       ;define P1 to null if not passed
           SET P1=$GET(P1)
 +5        SET PSSPATCH=$SELECT($GET(P2):1,1:'$$PATCH^XPDUTL("PSJ*5.0*315"))
 +6       ;build array of OI's that are mrr and their flag value
 +7        FOR QQ=0:0
               SET QQ=$ORDER(^PSDRUG("ASP",QQ))
               if QQ=""
                   QUIT 
               Begin DoDot:1
 +8                FOR YY=0:0
                       SET YY=$ORDER(^PSDRUG("ASP",QQ,YY))
                       if 'YY
                           QUIT 
                       Begin DoDot:2
 +9                        SET OI=$PIECE(^PSDRUG(YY,2),U)
 +10                       SET MRRFL=$PIECE($GET(^PS(50.7,OI,4)),U,1)
 +11                       if MRRFL
                               SET MRRAR(OI)=MRRFL
 +12                       QUIT 
                       End DoDot:2
 +13               QUIT 
               End DoDot:1
 +14      ;
 +15      ; Use Ord Stop Date XREF to look for current orders
 +16       SET ORDTOT=0
           SET PSSQ=0
           SET PAGNO=0
           SET ORDSDT=DT
 +17       FOR 
               SET ORDSDT=$ORDER(^PS(55,"AUD",ORDSDT))
               if ORDSDT=""
                   QUIT 
               Begin DoDot:1
 +18               SET DFN=0
 +19               FOR 
                       SET DFN=$ORDER(^PS(55,"AUD",ORDSDT,DFN))
                       if DFN=""
                           QUIT 
                       Begin DoDot:2
 +20                       SET ORD=0
 +21                       FOR 
                               SET ORD=$ORDER(^PS(55,"AUD",ORDSDT,DFN,ORD))
                               if ORD=""
                                   QUIT 
                               Begin DoDot:3
 +22                               SET STS=$PIECE($GET(^PS(55,DFN,5,ORD,0)),U,9)
 +23                               SET CLNODE=$GET(^PS(55,DFN,5,ORD,8),0)
 +24      ;non Active type order, quit dont include
 +25                               IF (STS="D")!(STS="E")!(STS="DE")!(STS="DR")
                                       QUIT 
 +26                               SET PSSID=$SELECT('$DATA(^DPT(DFN,0)):"NONE",1:$EXTRACT($PIECE($GET(^DPT(DFN,0)),U,1),1)_$EXTRACT($PIECE($GET(^DPT(DFN,0)),U,9),6,9))
 +27      ;check and then set ^TMP for sort
                                   DO CHKORD
 +28                               QUIT 
                               End DoDot:3
 +29                       QUIT 
                       End DoDot:2
 +30               QUIT 
               End DoDot:1
 +31       if $DATA(^TMP("PSSMRRDG"))
               DO PRINT
 +32       if ORDTOT=0
               DO HDR
 +33       IF 'PSSQ
               WRITE !!,"Total Orders found: ",ORDTOT,!
 +34      ;pause before returning to Detail screen
           WRITE !!,"Press RETURN to continue....."
           READ X:$GET(DTIME)
 +35       KILL ^TMP("PSSMRRDG")
 +36       QUIT 
 +37      ;
CHKORD    ;check if Order qualifies and then print on report
 +1       ; return mrrfl which is positive or true  (1,2,3)
 +2        FOR QQ=0:0
               SET QQ=$ORDER(^PS(55,DFN,5,ORD,1,QQ))
               if 'QQ
                   QUIT 
               Begin DoDot:1
 +3                SET DDOI=+$PIECE($GET(^PS(55,DFN,5,ORD,.2)),U)
 +4                SET MRR=$GET(MRRAR(DDOI))
 +5       ;don't report not a MRR med
                   if 'MRR
                       QUIT 
 +6       ;   don't report if has a 2.1 node, unless P1 overrides
 +7                IF $GET(P1)=""
                       IF $DATA(^PS(55,DFN,5,ORD,2.1))
                           QUIT 
 +8                SET PSSLOC=$SELECT($$CLINIC(CLNODE):$PIECE(^SC(+^PS(55,DFN,5,ORD,8),0),U,1),$GET(^DPT(DFN,.1))]"":^DPT(DFN,.1),1:"UNKNOWN")
 +9                SET DDTXT=$$GET1^DIQ(55.07,QQ_","_ORD_","_DFN,"DISPENSE DRUG")
 +10               SET ^TMP("PSSMRRDG",PSSLOC,PSSID)=DDTXT_U_STS_U_MRR
 +11               QUIT 
               End DoDot:1
 +12       QUIT 
 +13      ;
PRINT     ;
 +1        NEW STR
           SET PSSLOC=""
 +2        FOR 
               SET PSSLOC=$ORDER(^TMP("PSSMRRDG",PSSLOC))
               if PSSLOC=""!PSSQ
                   QUIT 
               Begin DoDot:1
 +3                DO HDR
                   SET PSSID=""
 +4                FOR 
                       SET PSSID=$ORDER(^TMP("PSSMRRDG",PSSLOC,PSSID))
                       if PSSID=""!PSSQ
                           QUIT 
                       Begin DoDot:2
 +5                        SET STR=^TMP("PSSMRRDG",PSSLOC,PSSID)
                           SET DDTXT=$PIECE(STR,U)
                           SET STS=$PIECE(STR,U,2)
                           SET MRR=$PIECE(STR,U,3)
 +6                        DO WRITELN
                           SET ORDTOT=ORDTOT+1
 +7                        IF $Y>(IOSL-1)
                               DO PAUSE
                               if PSSQ
                                   QUIT 
 +8                        QUIT 
                       End DoDot:2
 +9                DO PAUSE
                   if PSSQ
                       QUIT 
 +10               QUIT 
               End DoDot:1
 +11       QUIT 
 +12      ;
HDR       ;Write a heading on report
 +1        SET PAGNO=PAGNO+1
 +2        WRITE @IOF
 +3        WRITE !,$EXTRACT($$FMTE^XLFDT($$NOW^XLFDT),1,18),?125,"Page ",PAGNO
 +4        IF 'PSSPATCH
               DO H1
               DO BODY
               QUIT 
 +5        DO H2
           DO BODY
 +6        QUIT 
 +7       ;
H1        ; heading for Pre-PSJ315 install
 +1        WRITE !,?2,"The following ACTIVE Orders are for Medications Requiring Removal (MRR). Prior to Installation of PSJ*5*315 these orders"
 +2        WRITE !,?2,"should be reviewed for planning purposes, but no action taken. Once PSJ*5*315 is installed they will need to be d/c'd and"
 +3        WRITE !,?2,"re-entered after coordinating with your ADPAC."
 +4        QUIT 
H2        ; heading for Post-PSJ315 install
 +1        WRITE !,?2,"The following ACTIVE orders for medications that Require Removal (MRR) were finished prior to install of Patch PSJ*5*315."
 +2        WRITE !,?2,"These orders must be re-entered. They may not be copied, renewed or edited to create new orders."
 +3        WRITE !,?33,"Any changes to these orders should be coordinated with your ADPAC."
 +4        QUIT 
BODY      ;
 +1        WRITE !!,?50," Sort by Patient within Ward  "_$GET(PSSLOC,"NONE FOUND")
 +2        WRITE !!,"Patient",?10,"Patient",?30,"Orderable",?75,"Ordr",?80,"MRR"
 +3        WRITE !,"ID",?10,"Loc",?30,"Item Name",?75,"Sts",?80,"Val"
 +4        SET $PIECE(LIN,"-",132)=""
 +5        WRITE !,LIN
 +6        QUIT 
 +7       ;
WRITELN   ;Write line on report
 +1        WRITE !,PSSID,?10,PSSLOC,?30,DDTXT,?76,STS,?81,MRR
 +2        QUIT 
 +3       ;
PAUSE     ;
 +1        if '($GET(TERM))
               QUIT 
 +2        NEW X
 +3        WRITE !!,"Press RETURN to continue, '^' to exit"
 +4        READ X:$GET(DTIME)
           IF (X="^")!('$TEST)
               SET PSSQ=1
               QUIT 
 +5        USE IO
 +6        QUIT 
 +7       ;
CLINIC(CL) ;Is this a Clinic order that would show on the VDL in CO mode also?
 +1       ;no appt date, IM ord
           if '($PIECE(CL,"^",2)?7N!($PIECE(CL,"^",2)?7N1".".N))
               QUIT 0
 +2       ;no PTR to 44, IM ord
           if '$DATA(^PS(53.46,"B",+CL))
               QUIT 0
 +3       ;no 53.46 ien, IM ord
           NEW A
           SET A=$ORDER(^PS(53.46,"B",+CL,""))
           if 'A
               QUIT 0
 +4       ;Send to BCMA? flag
           QUIT $PIECE(^PS(53.46,A,0),"^",4)
 +5       ;
TST(P2)   ;
 +1        SET P2=$GET(P2)
           SET P1=1
 +2        DO EN(P1)
 +3        QUIT 
 +4       ;
ERRTRP    ; Error trap processing
 +1        NEW Z,PROBLEM
 +2       ; mumps error location and description
           SET Z(1,1)=$$EC^%ZOSV
 +3        SET Z="A SYSTEM ERROR HAS BEEN DETECTED AT THE FOLLOWING LOCATION"
 +4        SET PROBLEM=7
 +5       ; record the error in the trap
           DO ^%ZTER
 +6       ; unwind stack levels
           GOTO UNWIND^%ZTER
 +7        QUIT