PSGSCT0 ;BIR/CML3-PRINT COST PER SERVICE REPORT ;14 JUL 94 / 9:36 AM
 ;;5.0; INPATIENT MEDICATIONS ;;16 DEC 97
START ;
 D NOW^%DTC S PSGDT=%,PSGPDT=$$ENDTC^PSGMI(PSGDT),CML=IO'=IO(0)!(IOST'["C-"),(NP,LN1,LN2)="",$P(LN1,"-",81)="",$P(LN2,"=",81)="",(TCNT,TCST)=0
 U IO D HDR I '$D(^UTILITY("PSG",$J)) W !!?23,"*** NO SERVICE COST DATA FOUND ***" G DONE
 ;
RUN ;
 S SN="" F  S SN=$O(^UTILITY("PSG",$J,"S",SN)) Q:SN=""  S CST=^(SN) D:$Y+3>IOSL NP G:NP["^" DONE D WRITE
 ;
 G:'$D(^UTILITY("PSG",$J,"W")) TOTLS D:$Y+3>IOSL NP G:NP["^" DONE W !?9,"*** A SERVICE COULD NOT BE FOUND FOR THE FOLLOWING WARD(S) ***",!
 S SN="" F  S SN=$O(^UTILITY("PSG",$J,"W",SN)) Q:SN=""  S CST=^(SN) D:$Y+3>IOSL NP G:NP["^" DONE D WRITE
 ;
TOTLS ;
 D:$Y+5>IOSL NP I NP'["^" S TCPU=$S(TCNT:TCST/TCNT,1:"****") S:TCST<0&(TCPU>0) TCPU=-TCPU W !!,LN2,!!?15,"TOTALS =>",?35,$J(TCNT,9,0),?52,$J(TCST,12,2),?72,$J(TCPU,6,2)
 ;
DONE ;
 W:CML&($Y) @IOF,@IOF K %,CML,CNT,CPU,CST,LN1,LN2,NP,PSGID,PSGOD,PSGPDT,SN,TCNT,TCPU,TCST Q
 ;
WRITE ;
 S CNT=+CST,CST=$P(CST,"^",2),TCNT=TCNT+CNT,TCST=TCST+CST,CPU=$S(CNT:CST/CNT,1:0) S:CST<0&(CPU>0) CPU=-CPU W !?2,SN,?35,$J(CNT,9,0),?52,$J(CST,12,2),?72,$J(CPU,6,2),! Q
 ;
NP ;
 I 'CML W $C(7) R !,"'^' TO STOP ",NP:DTIME W:'$T $C(7) S:'$T NP="^" Q:NP["^"
 ;
HDR ;
 W:$Y @IOF W !!?24,"UNIT DOSE COST PER SERVICE REPORT",?63,PSGPDT,!?25,"FROM ",STRT," THROUGH ",STOP,!!?35,"TOTAL UNITS",?56,"TOTAL",?68,"AVERAGE COST",!?10,"SERVICE",?36,"DISPENSED",?56,"COST",?70,"PER UNIT",!,LN1,! Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSGSCT0   1515     printed  Sep 23, 2025@19:39:15                                                                                                                                                                                                     Page 2
PSGSCT0   ;BIR/CML3-PRINT COST PER SERVICE REPORT ;14 JUL 94 / 9:36 AM
 +1       ;;5.0; INPATIENT MEDICATIONS ;;16 DEC 97
START     ;
 +1        DO NOW^%DTC
           SET PSGDT=%
           SET PSGPDT=$$ENDTC^PSGMI(PSGDT)
           SET CML=IO'=IO(0)!(IOST'["C-")
           SET (NP,LN1,LN2)=""
           SET $PIECE(LN1,"-",81)=""
           SET $PIECE(LN2,"=",81)=""
           SET (TCNT,TCST)=0
 +2        USE IO
           DO HDR
           IF '$DATA(^UTILITY("PSG",$JOB))
               WRITE !!?23,"*** NO SERVICE COST DATA FOUND ***"
               GOTO DONE
 +3       ;
RUN       ;
 +1        SET SN=""
           FOR 
               SET SN=$ORDER(^UTILITY("PSG",$JOB,"S",SN))
               if SN=""
                   QUIT 
               SET CST=^(SN)
               if $Y+3>IOSL
                   DO NP
               if NP["^"
                   GOTO DONE
               DO WRITE
 +2       ;
 +3        if '$DATA(^UTILITY("PSG",$JOB,"W"))
               GOTO TOTLS
           if $Y+3>IOSL
               DO NP
           if NP["^"
               GOTO DONE
           WRITE !?9,"*** A SERVICE COULD NOT BE FOUND FOR THE FOLLOWING WARD(S) ***",!
 +4        SET SN=""
           FOR 
               SET SN=$ORDER(^UTILITY("PSG",$JOB,"W",SN))
               if SN=""
                   QUIT 
               SET CST=^(SN)
               if $Y+3>IOSL
                   DO NP
               if NP["^"
                   GOTO DONE
               DO WRITE
 +5       ;
TOTLS     ;
 +1        if $Y+5>IOSL
               DO NP
           IF NP'["^"
               SET TCPU=$SELECT(TCNT:TCST/TCNT,1:"****")
               if TCST<0&(TCPU>0)
                   SET TCPU=-TCPU
               WRITE !!,LN2,!!?15,"TOTALS =>",?35,$JUSTIFY(TCNT,9,0),?52,$JUSTIFY(TCST,12,2),?72,$JUSTIFY(TCPU,6,2)
 +2       ;
DONE      ;
 +1        if CML&($Y)
               WRITE @IOF,@IOF
           KILL %,CML,CNT,CPU,CST,LN1,LN2,NP,PSGID,PSGOD,PSGPDT,SN,TCNT,TCPU,TCST
           QUIT 
 +2       ;
WRITE     ;
 +1        SET CNT=+CST
           SET CST=$PIECE(CST,"^",2)
           SET TCNT=TCNT+CNT
           SET TCST=TCST+CST
           SET CPU=$SELECT(CNT:CST/CNT,1:0)
           if CST<0&(CPU>0)
               SET CPU=-CPU
           WRITE !?2,SN,?35,$JUSTIFY(CNT,9,0),?52,$JUSTIFY(CST,12,2),?72,$JUSTIFY(CPU,6,2),!
           QUIT 
 +2       ;
NP        ;
 +1        IF 'CML
               WRITE $CHAR(7)
               READ !,"'^' TO STOP ",NP:DTIME
               if '$TEST
                   WRITE $CHAR(7)
               if '$TEST
                   SET NP="^"
               if NP["^"
                   QUIT 
 +2       ;
HDR       ;
 +1        if $Y
               WRITE @IOF
           WRITE !!?24,"UNIT DOSE COST PER SERVICE REPORT",?63,PSGPDT,!?25,"FROM ",STRT," THROUGH ",STOP,!!?35,"TOTAL UNITS",?56,"TOTAL",?68,"AVERAGE COST",!?10,"SERVICE",?36,"DISPENSED",?56,"COST",?70,"PER UNIT",!,LN1,!
           QUIT