PSSUTLAZ ;BIR/RTR-PSS report utility routine ;08/21/00
 ;;1.0;PHARMACY DATA MANAGEMENT;**40,49**;9/30/97
 ;
EN3(PSSBINTR,PSSBLGTH) ;
 ;Pass in to EN3 the internal number from 50.7, and the length of the
 ;array you want. Returns expanded Instructions is PSSBSIG array
 K PSSBSIG N X,BVAR,BVAR1,III,CNT,NNN,BLIM,Y,PISIG,Z0,Z1,CNTZ,FFF
 Q:'$G(PSSBINTR)!('$G(PSSBLGTH))
 S X=$P($G(^PS(50.7,PSSBINTR,"INS")),"^") Q:X=""
 S PISIG(1)="",CNTZ=1 Q:$L(X)<1  F Z0=1:1:$L(X," ") G:Z0="" START S Z1=$P(X," ",Z0) D  G:'$D(X) START
 .D:$D(X)&($G(Z1)]"")  D ADD
 ..S Y=$O(^PS(51,"B",Z1,0)) Q:'Y!($P($G(^PS(51,+Y,0)),"^",4)>1)  S Z1=$P($G(^PS(51,Y,0)),"^",2) Q:'$D(^(9))  S Y=$P(X," ",Z0-1),Y=$E(Y,$L(Y)) S:Y>1 Z1=^(9)
START ;
 S (BVAR,BVAR1)="",III=1
 F FFF=0:0 S FFF=$O(PISIG(FFF)) Q:'FFF  S CNT=0 F NNN=1:1:$L(PISIG(FFF)) I $E(PISIG(FFF),NNN)=" "!($L(PISIG(FFF))=NNN) S CNT=CNT+1 D  I $L(BVAR)>PSSBLGTH S PSSBSIG(III)=BLIM_" ",III=III+1,BVAR=BVAR1
 .S BVAR1=$P(PISIG(FFF)," ",(CNT))
 .S BLIM=BVAR
 .S BVAR=$S(BVAR="":BVAR1,1:BVAR_" "_BVAR1)
 I $G(BVAR)'="" S PSSBSIG(III)=BVAR
 I $G(PSSBSIG(1))=""!($G(PSSBSIG(1))=" ") S PSSBSIG(1)=$G(PSSBSIG(2)) K PSSBSIG(2)
 F CNTZ=0:0 S CNTZ=$O(PSSBSIG(CNTZ)) Q:'CNTZ  S PSSX("PI",CNTZ)=$G(PSSBSIG(CNTZ))
 K PSSBSIG
 Q
ADD ;
 I $L(PISIG(CNTZ))+$L(Z1)+1<246 S PISIG(CNTZ)=PISIG(CNTZ)_" "_Z1 Q
 S CNTZ=CNTZ+1 S PISIG(CNTZ)=Z1
 Q
 ;
DEA(PSSDIENM) ;Return DEA Special Handling for CPRS Dose Call
 ;1 Requires wet sig, DEA contains 1, or a 2
 ;2 = Controlled Sub, no wet sig required, DEA contains 3, 4, or 5
 ;0 = others
 Q:'$G(PSSDIENM)
 N PSSDEAX,PSSDEAXV
 S PSSDEAX=$P($G(^PSDRUG(PSSDIENM,0)),"^",3)
 I PSSDEAX[1!(PSSDEAX[2) S PSSDEAXV=1 G DSET
 I PSSDEAX[3!(PSSDEAX[4)!(PSSDEAX[5) S PSSDEAXV=2 G DSET
 S PSSDEAXV=0
DSET ;
 S PSSX("DD",PSSDIENM)=PSSX("DD",PSSDIENM)_"^"_PSSDEAXV
 Q
HELP ;
 Q:$G(X)=""
 N PSSSIG,PSSYX,PSSZ0,PSSZ1,PSSCTX,PSSLPX,PSSBVAR,PSSBVAR1,PSSIII,PSSFFF,PCT,PNNN,PSSBLIM,PSSIG
 S PSSIG(1)="",PSSCTX=1 Q:$L(X)<1  F PSSZ0=1:1:$L(X," ") G:PSSZ0="" HELP1 S PSSZ1=$P(X," ",PSSZ0) D  G:'$D(X) HELP1
 .D:$D(X)&($G(PSSZ1)]"")  D HELPADD
 ..S PSSYX=$O(^PS(51,"B",PSSZ1,0)) Q:'PSSYX!($P($G(^PS(51,+PSSYX,0)),"^",4)>1)  S PSSZ1=$P($G(^PS(51,PSSYX,0)),"^",2) Q:'$D(^(9))  S PSSYX=$P(X," ",PSSZ0-1),PSSYX=$E(PSSYX,$L(PSSYX)) S:PSSYX>1 PSSZ1=^(9)
HELP1 ;
 S (PSSBVAR,PSSBVAR1)="",PSSIII=1
 F PSSFFF=0:0 S PSSFFF=$O(PSSIG(PSSFFF)) Q:'PSSFFF  S PCT=0 F PNNN=1:1:$L(PSSIG(PSSFFF)) I $E(PSSIG(PSSFFF),PNNN)=" "!($L(PSSIG(PSSFFF))=PNNN) S PCT=PCT+1 D  I $L(PSSBVAR)>70 S PSSSIG(PSSIII)=PSSBLIM_" ",PSSIII=PSSIII+1,PSSBVAR=PSSBVAR1
 .S PSSBVAR1=$P(PSSIG(PSSFFF)," ",(PCT))
 .S PSSBLIM=PSSBVAR
 .S PSSBVAR=$S(PSSBVAR="":PSSBVAR1,1:PSSBVAR_" "_PSSBVAR1)
 I $G(PSSBVAR)'="" S PSSSIG(PSSIII)=PSSBVAR
 I $G(PSSSIG(1))=""!($G(PSSSIG(1))=" ") S PSSSIG(1)=$G(PSSSIG(2)) K PSSSIG(2)
 F PSSLPX=0:0 S PSSLPX=$O(PSSSIG(PSSLPX)) Q:'PSSLPX  D:PSSLPX=1 EN^DDIOL(" ") D EN^DDIOL(" "_$G(PSSSIG(PSSLPX)))
 Q
HELPADD ;
 I $L(PSSIG(PSSCTX))+$L(PSSZ1)+1<246 S PSSIG(PSSCTX)=PSSIG(PSSCTX)_" "_PSSZ1 Q
 S PSSCTX=PSSCTX+1 S PSSIG(PSSCTX)=PSSZ1
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSSUTLAZ   3107     printed  Sep 23, 2025@20:10:25                                                                                                                                                                                                    Page 2
PSSUTLAZ  ;BIR/RTR-PSS report utility routine ;08/21/00
 +1       ;;1.0;PHARMACY DATA MANAGEMENT;**40,49**;9/30/97
 +2       ;
EN3(PSSBINTR,PSSBLGTH) ;
 +1       ;Pass in to EN3 the internal number from 50.7, and the length of the
 +2       ;array you want. Returns expanded Instructions is PSSBSIG array
 +3        KILL PSSBSIG
           NEW X,BVAR,BVAR1,III,CNT,NNN,BLIM,Y,PISIG,Z0,Z1,CNTZ,FFF
 +4        if '$GET(PSSBINTR)!('$GET(PSSBLGTH))
               QUIT 
 +5        SET X=$PIECE($GET(^PS(50.7,PSSBINTR,"INS")),"^")
           if X=""
               QUIT 
 +6        SET PISIG(1)=""
           SET CNTZ=1
           if $LENGTH(X)<1
               QUIT 
           FOR Z0=1:1:$LENGTH(X," ")
               if Z0=""
                   GOTO START
               SET Z1=$PIECE(X," ",Z0)
               Begin DoDot:1
 +7                if $DATA(X)&($GET(Z1)]"")
                       Begin DoDot:2
 +8                        SET Y=$ORDER(^PS(51,"B",Z1,0))
                           if 'Y!($PIECE($GET(^PS(51,+Y,0)),"^",4)>1)
                               QUIT 
                           SET Z1=$PIECE($GET(^PS(51,Y,0)),"^",2)
                           if '$DATA(^(9))
                               QUIT 
                           SET Y=$PIECE(X," ",Z0-1)
                           SET Y=$EXTRACT(Y,$LENGTH(Y))
                           if Y>1
                               SET Z1=^(9)
                       End DoDot:2
                   DO ADD
               End DoDot:1
               if '$DATA(X)
                   GOTO START
START     ;
 +1        SET (BVAR,BVAR1)=""
           SET III=1
 +2        FOR FFF=0:0
               SET FFF=$ORDER(PISIG(FFF))
               if 'FFF
                   QUIT 
               SET CNT=0
               FOR NNN=1:1:$LENGTH(PISIG(FFF))
                   IF $EXTRACT(PISIG(FFF),NNN)=" "!($LENGTH(PISIG(FFF))=NNN)
                       SET CNT=CNT+1
                       Begin DoDot:1
 +3                        SET BVAR1=$PIECE(PISIG(FFF)," ",(CNT))
 +4                        SET BLIM=BVAR
 +5                        SET BVAR=$SELECT(BVAR="":BVAR1,1:BVAR_" "_BVAR1)
                       End DoDot:1
                       IF $LENGTH(BVAR)>PSSBLGTH
                           SET PSSBSIG(III)=BLIM_" "
                           SET III=III+1
                           SET BVAR=BVAR1
 +6        IF $GET(BVAR)'=""
               SET PSSBSIG(III)=BVAR
 +7        IF $GET(PSSBSIG(1))=""!($GET(PSSBSIG(1))=" ")
               SET PSSBSIG(1)=$GET(PSSBSIG(2))
               KILL PSSBSIG(2)
 +8        FOR CNTZ=0:0
               SET CNTZ=$ORDER(PSSBSIG(CNTZ))
               if 'CNTZ
                   QUIT 
               SET PSSX("PI",CNTZ)=$GET(PSSBSIG(CNTZ))
 +9        KILL PSSBSIG
 +10       QUIT 
ADD       ;
 +1        IF $LENGTH(PISIG(CNTZ))+$LENGTH(Z1)+1<246
               SET PISIG(CNTZ)=PISIG(CNTZ)_" "_Z1
               QUIT 
 +2        SET CNTZ=CNTZ+1
           SET PISIG(CNTZ)=Z1
 +3        QUIT 
 +4       ;
DEA(PSSDIENM) ;Return DEA Special Handling for CPRS Dose Call
 +1       ;1 Requires wet sig, DEA contains 1, or a 2
 +2       ;2 = Controlled Sub, no wet sig required, DEA contains 3, 4, or 5
 +3       ;0 = others
 +4        if '$GET(PSSDIENM)
               QUIT 
 +5        NEW PSSDEAX,PSSDEAXV
 +6        SET PSSDEAX=$PIECE($GET(^PSDRUG(PSSDIENM,0)),"^",3)
 +7        IF PSSDEAX[1!(PSSDEAX[2)
               SET PSSDEAXV=1
               GOTO DSET
 +8        IF PSSDEAX[3!(PSSDEAX[4)!(PSSDEAX[5)
               SET PSSDEAXV=2
               GOTO DSET
 +9        SET PSSDEAXV=0
DSET      ;
 +1        SET PSSX("DD",PSSDIENM)=PSSX("DD",PSSDIENM)_"^"_PSSDEAXV
 +2        QUIT 
HELP      ;
 +1        if $GET(X)=""
               QUIT 
 +2        NEW PSSSIG,PSSYX,PSSZ0,PSSZ1,PSSCTX,PSSLPX,PSSBVAR,PSSBVAR1,PSSIII,PSSFFF,PCT,PNNN,PSSBLIM,PSSIG
 +3        SET PSSIG(1)=""
           SET PSSCTX=1
           if $LENGTH(X)<1
               QUIT 
           FOR PSSZ0=1:1:$LENGTH(X," ")
               if PSSZ0=""
                   GOTO HELP1
               SET PSSZ1=$PIECE(X," ",PSSZ0)
               Begin DoDot:1
 +4                if $DATA(X)&($GET(PSSZ1)]"")
                       Begin DoDot:2
 +5                        SET PSSYX=$ORDER(^PS(51,"B",PSSZ1,0))
                           if 'PSSYX!($PIECE($GET(^PS(51,+PSSYX,0)),"^",4)>1)
                               QUIT 
                           SET PSSZ1=$PIECE($GET(^PS(51,PSSYX,0)),"^",2)
                           if '$DATA(^(9))
                               QUIT 
                           SET PSSYX=$PIECE(X," ",PSSZ0-1)
                           SET PSSYX=$EXTRACT(PSSYX,$LENGTH(PSSYX))
                           if PSSYX>1
                               SET PSSZ1=^(9)
                       End DoDot:2
                   DO HELPADD
               End DoDot:1
               if '$DATA(X)
                   GOTO HELP1
HELP1     ;
 +1        SET (PSSBVAR,PSSBVAR1)=""
           SET PSSIII=1
 +2        FOR PSSFFF=0:0
               SET PSSFFF=$ORDER(PSSIG(PSSFFF))
               if 'PSSFFF
                   QUIT 
               SET PCT=0
               FOR PNNN=1:1:$LENGTH(PSSIG(PSSFFF))
                   IF $EXTRACT(PSSIG(PSSFFF),PNNN)=" "!($LENGTH(PSSIG(PSSFFF))=PNNN)
                       SET PCT=PCT+1
                       Begin DoDot:1
 +3                        SET PSSBVAR1=$PIECE(PSSIG(PSSFFF)," ",(PCT))
 +4                        SET PSSBLIM=PSSBVAR
 +5                        SET PSSBVAR=$SELECT(PSSBVAR="":PSSBVAR1,1:PSSBVAR_" "_PSSBVAR1)
                       End DoDot:1
                       IF $LENGTH(PSSBVAR)>70
                           SET PSSSIG(PSSIII)=PSSBLIM_" "
                           SET PSSIII=PSSIII+1
                           SET PSSBVAR=PSSBVAR1
 +6        IF $GET(PSSBVAR)'=""
               SET PSSSIG(PSSIII)=PSSBVAR
 +7        IF $GET(PSSSIG(1))=""!($GET(PSSSIG(1))=" ")
               SET PSSSIG(1)=$GET(PSSSIG(2))
               KILL PSSSIG(2)
 +8        FOR PSSLPX=0:0
               SET PSSLPX=$ORDER(PSSSIG(PSSLPX))
               if 'PSSLPX
                   QUIT 
               if PSSLPX=1
                   DO EN^DDIOL(" ")
               DO EN^DDIOL(" "_$GET(PSSSIG(PSSLPX)))
 +9        QUIT 
HELPADD   ;
 +1        IF $LENGTH(PSSIG(PSSCTX))+$LENGTH(PSSZ1)+1<246
               SET PSSIG(PSSCTX)=PSSIG(PSSCTX)_" "_PSSZ1
               QUIT 
 +2        SET PSSCTX=PSSCTX+1
           SET PSSIG(PSSCTX)=PSSZ1
 +3        QUIT