PRSNRLS0 ;WOIFO/KJS - All Activity at a Nursing Location - Summary and Detailed;12-8-2011
 ;;4.0;PAID;**126**;Sep 21, 1995;Build 59
 ;;Per VHA Directive 2004-038, this routine should not be modified.
 ;
 Q
 ;
COORD ;Entry point for VANOD Coordinator
 ; Coordinator has no access limits so let them pick any group
 N GROUP
 D PIKGROUP^PRSNUT04(.GROUP,"N",1)
 ; quit if any error during group selection
 I $P($G(GROUP(0)),U,2)="E" D  Q
 .W !,$P(GROUP(0),U,3)
 D MAIN
 ;
 Q
 ;
MAIN ;
 N RANGE,BEG,END,EXTBEG,EXTEND,STOP
 N DAYBEG,DAYEND
 N TYPE,BEG,END
 S STOP=0
 D TYPE
 Q:STOP
 D DATE
 Q:STOP
 D QUE
 Q
 ;
REPORT ;for group of location
 ;
 N PRSIEN,PRSNG,PICK,PG,LOCIEN,PRSNVER,PRSNTS,PRSNDAY,PPIEN,ENDPP,ENDDAY,BEGPP,BEGDAY,TODAY,PG,TIMEREC
 N PRSNAME,PRSNSSN,PRSNTL,SKILMIX,PRSL,PRSNDAYS,PRSNDATE
 N PRSNST,PRSNSP,PRSNTT,PRSNWIEN,HOURS,PRSNTIEN
 N PRSNTW,PRSNTWD,PRSNM,PRSNRE,PRSNREC,PRSNRIEN,MEAL
 N PRSNLNG,IEN200,PRIMLOC,PRSNARY,LOCNAM,GHD,PRSD
 K ^TMP($J,"PRSNR")
 U IO
 S PG=0,TODAY=$E(DT,4,5)_"/"_$E(DT,6,7)_"/"_$E(DT,2,3)
 S BEGPP=$G(^PRST(458,"AD",BEG)),BEGDAY=$P(BEGPP,U,2),BEGPP=+BEGPP
 S ENDPP=$G(^PRST(458,"AD",END)),ENDDAY=$P(ENDPP,U,2),ENDPP=+ENDPP
 I TYPE="S" D HDRSUM
 I TYPE="D" D HDRDET
 S (PICK,STOP)=0
 F  S PICK=$O(GROUP(PICK)) Q:PICK=""!STOP  D
 . S PRSNG=GROUP(0)_"^"_PICK_"^"_GROUP(PICK)
 . S LOCIEN=+GROUP(PICK)
 . S LOCNAM=$P($$ISACTIVE^PRSNUT01(DT,LOCIEN),U,2)
 . S GHD="Location: "_LOCNAM
 . S TAB=IOM-$L(GHD)/2-5
 . W !!,?TAB,GHD,!
 . W ?TAB F I=1:1:$L(GHD) W "-"
 . ;SORT BY NAME FOR THIS LOCATION
 . K ^TMP($J,"PRSNR")
 . S PRSIEN=0
 . F  S PRSIEN=$O(^PRSN(451,"ALN",LOCIEN,PRSIEN)) Q:'PRSIEN   S PRSNA=$P($G(^PRSPC(PRSIEN,0)),U),^TMP($J,"PRSNR",PRSNA,PRSIEN)=""
 . S PRSNA=""
 . F  S PRSNA=$O(^TMP($J,"PRSNR",PRSNA)) Q:PRSNA=""!STOP  D
 .. S PRSIEN=0
 .. F  S PRSIEN=$O(^TMP($J,"PRSNR",PRSNA,PRSIEN)) Q:PRSIEN=""!STOP  D
 ... N WKTOT
 ... D INFO
 ... S PPIEN=BEGPP-1
 ... F  S PPIEN=$O(^PRSN(451,"ALN",LOCIEN,PRSIEN,PPIEN)) Q:'PPIEN!STOP!(PPIEN>ENDPP)  D
 .... S PRSNDAYS=$G(^PRST(458,PPIEN,1))
 .... S PRSNDAY=$S(PPIEN=BEGPP:BEGDAY-1,1:0)
 .... F  S PRSNDAY=$O(^PRSN(451,"ALN",LOCIEN,PRSIEN,PPIEN,PRSNDAY)) Q:'PRSNDAY!STOP!(PPIEN=ENDPP&(PRSNDAY>ENDDAY))  D
 ..... S PRSNDATE=$P(PRSNDAYS,U,PRSNDAY),PRSNDATE=$E(PRSNDATE,4,5)_"/"_$E(PRSNDATE,6,7)_"/"_$E(PRSNDATE,2,3)
 ..... S PRSNVER=$O(^PRSN(451,"ALN",LOCIEN,PRSIEN,PPIEN,PRSNDAY,""),-1)
 ..... S PRSNTS=0,PRSD=1
 ..... F  S PRSNTS=$O(^PRSN(451,"ALN",LOCIEN,PRSIEN,PPIEN,PRSNDAY,PRSNVER,PRSNTS)) Q:'PRSNTS!STOP  D
 ...... S TIMEREC=$G(^PRSN(451,PPIEN,"E",PRSIEN,"D",PRSNDAY,"V",PRSNVER,"T",PRSNTS,0))
 ...... D DATA
 ...... I TYPE="S" D TOTTIME
 ...... I TYPE="D" D PRTDET
 ...Q:STOP
 ... I TYPE="S" D PRTSUM
 W !!,"End of Report"
 D ^%ZISC
 K ^TMP($J,"PRSNR")
 Q
 ;
INFO ;Find nurse information to display in report
 ;
 S PRSL=1
 S PRSNARY=$G(^PRSPC(PRSIEN,0))
 S PRSNAME=$P(PRSNARY,U)              ;Nurse Name
 S PRSNSSN=$P(PRSNARY,U,9)           ;Nurse SSN
 S PRSNTL=$P(PRSNARY,U,8)             ;Nurse T&L
 S SKILMIX=$P($$ISNURSE^PRSNUT01(PRSIEN),U,2) ;  Nurse skillmix
 I SKILMIX["ADMINISTRATIVE" S SKILMIX="ADMIN RN"
 S IEN200=$G(^PRSPC(PRSIEN,200))
 S PRIMLOC=$S(IEN200="":"",1:$$PRIMLOC^PRSNUT03(IEN200))
 Q
 ;
DATA ;Extract display data from POCD array
 ;
 ;Start Time
 S PRSNST=$P(TIMEREC,U)
 ;
 ;Stop Time 
 S PRSNSP=$P(TIMEREC,U,2)
 ;
 ;Meal Time
 S MEAL=$P(TIMEREC,U,3)
 ;
 ;Get hours worked in a given location
 S HOURS=$$AMT^PRSPSAPU(PRSNST,PRSNSP,MEAL)
 ;
 ;Type of Time code IEN
 S PRSNTT=$P(TIMEREC,U,4),PRSNLNG=" "
 I PRSNTT'="" D
 . ;
 . ;Type of Time code
 . S PRSNTIEN=$O(^PRST(457.3,"B",PRSNTT,0))
 . Q:PRSNTIEN=""
 . ;
 . ;Description for Type of Time code
 . S PRSNLNG=$P(^PRST(457.3,PRSNTIEN,0),U,2)
 . ;
 . ;Type of Work Code IEN
 S PRSNWIEN=$P(TIMEREC,U,6),PRSNTW=" ",PRSNTWD=" "
 I PRSNWIEN'="" D
 . ;
 . ;Type of Work Code
 . S PRSNTW=$P(^PRSN(451.5,PRSNWIEN,0),U)
 . ;
 . ;Description for Type of Work code
 . S PRSNTWD=$P(^PRSN(451.5,PRSNWIEN,0),U,2)
 ;
 ;OT Mandatory/Voluntary
 S PRSNM=$P(TIMEREC,U,7)
 Q
 ;
TOTTIME ;
 ; save hours into work array
 S WKTOT(PRSNLNG,PRSNTWD)=$G(WKTOT(PRSNLNG,PRSNTWD))+HOURS
 ;
 Q
 ;
HDRSUM ;Display header for report of Individual Nurse Activity
 ;
 W @IOF
 S PG=PG+1,PRSL=1
 W ?20,"All Activity at a Nurse Location Summary Report"
 W !,?15,EXTBEG_" - "_EXTEND,?45,"Run Date: ",TODAY,?70,"Page: ",$J(PG,3)
 W !         ;blank line
 W !,"Nurse Name",?21,"Type of",?32,"Type of",?48,"Primary Location",?68,"# of",?75,"T&L"
 W !,"Skill Mix",?22,"Time",?33,"Work",?68,"Hours",?75,"Unit"
 W !,"--------------------------------------------------------------------------------"
 ;
 Q
 ;
PRTSUM ;  Loop through Totals array and print each one
 ;
 N TT,TWD,HOURS,CNT
 S TT="",CNT=0
 F  S TT=$O(WKTOT(TT)) Q:TT=""!STOP  D
 . S TWD=""
 . F  S TWD=$O(WKTOT(TT,TWD)) Q:TWD=""!STOP  D
 .. S HOURS=$G(WKTOT(TT,TWD)),CNT=CNT+1
 .. D PPP
 ; need a blank line between nurses when there was only one record printed
 I CNT=1 W !
 Q
 ;
PPP ;
 I PRSL W !,$E(PRSNAME,1,19)
 W ?21,TT,?32,$E(TWD,1,14),?48,$E($P(PRIMLOC,U,3),1,18),?66,$J(HOURS,7,2),?75,PRSNTL
 W !
 I PRSL W "  ",$E(SKILMIX,1,17)
 ;
 S PRSL=0
 I (IOSL-5)<$Y S STOP=$$ASK^PRSLIB00() I 'STOP D HDRSUM
 Q
 ;
HDRDET ;Display header for report of Individual Nurse Activity
 ;
 W @IOF
 S PG=PG+1,(PRSL,PRSD)=1
 W ?20,"All Activity at a Nurse Location Detail Report"
 W !,?15,EXTBEG_" - "_EXTEND,?45,"Run Date: ",TODAY,?70,"Page: ",$J(PG,3)
 W !              ;blank line
 W !,"Nurse Name",?21,"Last 4",?29,"Start/",?38,"Type of",?49,"Mand",?57,"Meal",?63,"Primary Location/"
 W !,"Skill Mix",?23,"SSN/",?29,"Stop",?39,"Time",?50,"OT",?57,"Time",?64,"Type of Work"
 W !,"Date",?23,"T&L",?29,"Time"
 W !,"--------------------------------------------------------------------------------"
 ;
 Q
 ;
PRTDET ;Print report
 I PRSL W !,$E(PRSNAME,1,19)
 ;PUT DATE ON FIRST LINE IF NAME & SKILL ARE NOT PRINTED
 I 'PRSL,PRSD W !,"  ",PRSNDATE
 W ?22,$E(PRSNSSN,6,9)
 W ?29,PRSNST
 W ?38,PRSNLNG
 W ?51,PRSNM
 W ?58,MEAL
 W ?65,$E($P(PRIMLOC,U,3),1,14)
 W !
 I PRSL W "  ",$E(SKILMIX,1,17)
 W ?22,PRSNTL
 W ?29,PRSNSP
 W ?65,$E(PRSNTWD,1,14)
 W !
 ;PUT DATE ON THIRD LINE IF NAME & SKILL ARE PRINTED
 I PRSL,PRSD W "  ",PRSNDATE,!
 S (PRSL,PRSD)=0
 ;
 I (IOSL-5)<$Y S STOP=$$ASK^PRSLIB00() I 'STOP D HDRDET
 Q
 ;
TYPE ;Choose summary or detailed group activity report
 ;
 N DIR,DIRUT,X,Y
 S DIR(0)="S^S:Summary Report;D:Detailed Report"
 S DIR("A")="Enter Selection"
 S DIR("?")="Enter whether you want to select a Summary or Detailed Group Activity Report"
 D ^DIR
 I $D(DIRUT) S STOP=1 Q
 S TYPE=Y
 Q
 ;
DATE ; User is prompted for a date range 
 ;
 S RANGE=$$POCRANGE^PRSNUT01()
 ; QUIT HERE IF RANGE=0 
 I +$G(RANGE)'>0 S STOP=1
 ;
 S BEG=$P(RANGE,U)
 S END=$P(RANGE,U,2)
 S EXTBEG=$P(RANGE,U,3)
 S EXTEND=$P(RANGE,U,4)
 ;
 Q
 ;
QUE ;call to generate and display report for individual activity
 N %ZIS,POP,IOP
 S %ZIS="MQ"
 D ^%ZIS
 Q:POP
 I $D(IO("Q")) D
 . K IO("Q")
 . N ZTSK,ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE,ZTUCI,ZTCPU,ZTPRI,ZTKIL,ZTSYNC
 . S ZTDESC="All Activity at a Nurse Location "_$S(TYPE="S":"Summary",1:"Detail")
 . S ZTRTN="REPORT^PRSNRLS0"
 . S ZTSAVE("GROUP")=""
 . S ZTSAVE("GROUP(")=""
 . S ZTSAVE("TYPE")=""
 . S ZTSAVE("BEG")=""
 . S ZTSAVE("END")=""
 . S ZTSAVE("EXTBEG")=""
 . S ZTSAVE("EXTEND")=""
 . D ^%ZTLOAD
 . I $D(ZTSK) S ZTREQ="@" W !,"Request "_ZTSK_" queued."
 E  D
 . D REPORT
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPRSNRLS0   7647     printed  Sep 23, 2025@20:03:52                                                                                                                                                                                                    Page 2
PRSNRLS0  ;WOIFO/KJS - All Activity at a Nursing Location - Summary and Detailed;12-8-2011
 +1       ;;4.0;PAID;**126**;Sep 21, 1995;Build 59
 +2       ;;Per VHA Directive 2004-038, this routine should not be modified.
 +3       ;
 +4        QUIT 
 +5       ;
COORD     ;Entry point for VANOD Coordinator
 +1       ; Coordinator has no access limits so let them pick any group
 +2        NEW GROUP
 +3        DO PIKGROUP^PRSNUT04(.GROUP,"N",1)
 +4       ; quit if any error during group selection
 +5        IF $PIECE($GET(GROUP(0)),U,2)="E"
               Begin DoDot:1
 +6                WRITE !,$PIECE(GROUP(0),U,3)
               End DoDot:1
               QUIT 
 +7        DO MAIN
 +8       ;
 +9        QUIT 
 +10      ;
MAIN      ;
 +1        NEW RANGE,BEG,END,EXTBEG,EXTEND,STOP
 +2        NEW DAYBEG,DAYEND
 +3        NEW TYPE,BEG,END
 +4        SET STOP=0
 +5        DO TYPE
 +6        if STOP
               QUIT 
 +7        DO DATE
 +8        if STOP
               QUIT 
 +9        DO QUE
 +10       QUIT 
 +11      ;
REPORT    ;for group of location
 +1       ;
 +2        NEW PRSIEN,PRSNG,PICK,PG,LOCIEN,PRSNVER,PRSNTS,PRSNDAY,PPIEN,ENDPP,ENDDAY,BEGPP,BEGDAY,TODAY,PG,TIMEREC
 +3        NEW PRSNAME,PRSNSSN,PRSNTL,SKILMIX,PRSL,PRSNDAYS,PRSNDATE
 +4        NEW PRSNST,PRSNSP,PRSNTT,PRSNWIEN,HOURS,PRSNTIEN
 +5        NEW PRSNTW,PRSNTWD,PRSNM,PRSNRE,PRSNREC,PRSNRIEN,MEAL
 +6        NEW PRSNLNG,IEN200,PRIMLOC,PRSNARY,LOCNAM,GHD,PRSD
 +7        KILL ^TMP($JOB,"PRSNR")
 +8        USE IO
 +9        SET PG=0
           SET TODAY=$EXTRACT(DT,4,5)_"/"_$EXTRACT(DT,6,7)_"/"_$EXTRACT(DT,2,3)
 +10       SET BEGPP=$GET(^PRST(458,"AD",BEG))
           SET BEGDAY=$PIECE(BEGPP,U,2)
           SET BEGPP=+BEGPP
 +11       SET ENDPP=$GET(^PRST(458,"AD",END))
           SET ENDDAY=$PIECE(ENDPP,U,2)
           SET ENDPP=+ENDPP
 +12       IF TYPE="S"
               DO HDRSUM
 +13       IF TYPE="D"
               DO HDRDET
 +14       SET (PICK,STOP)=0
 +15       FOR 
               SET PICK=$ORDER(GROUP(PICK))
               if PICK=""!STOP
                   QUIT 
               Begin DoDot:1
 +16               SET PRSNG=GROUP(0)_"^"_PICK_"^"_GROUP(PICK)
 +17               SET LOCIEN=+GROUP(PICK)
 +18               SET LOCNAM=$PIECE($$ISACTIVE^PRSNUT01(DT,LOCIEN),U,2)
 +19               SET GHD="Location: "_LOCNAM
 +20               SET TAB=IOM-$LENGTH(GHD)/2-5
 +21               WRITE !!,?TAB,GHD,!
 +22               WRITE ?TAB
                   FOR I=1:1:$LENGTH(GHD)
                       WRITE "-"
 +23      ;SORT BY NAME FOR THIS LOCATION
 +24               KILL ^TMP($JOB,"PRSNR")
 +25               SET PRSIEN=0
 +26               FOR 
                       SET PRSIEN=$ORDER(^PRSN(451,"ALN",LOCIEN,PRSIEN))
                       if 'PRSIEN
                           QUIT 
                       SET PRSNA=$PIECE($GET(^PRSPC(PRSIEN,0)),U)
                       SET ^TMP($JOB,"PRSNR",PRSNA,PRSIEN)=""
 +27               SET PRSNA=""
 +28               FOR 
                       SET PRSNA=$ORDER(^TMP($JOB,"PRSNR",PRSNA))
                       if PRSNA=""!STOP
                           QUIT 
                       Begin DoDot:2
 +29                       SET PRSIEN=0
 +30                       FOR 
                               SET PRSIEN=$ORDER(^TMP($JOB,"PRSNR",PRSNA,PRSIEN))
                               if PRSIEN=""!STOP
                                   QUIT 
                               Begin DoDot:3
 +31                               NEW WKTOT
 +32                               DO INFO
 +33                               SET PPIEN=BEGPP-1
 +34                               FOR 
                                       SET PPIEN=$ORDER(^PRSN(451,"ALN",LOCIEN,PRSIEN,PPIEN))
                                       if 'PPIEN!STOP!(PPIEN>ENDPP)
                                           QUIT 
                                       Begin DoDot:4
 +35                                       SET PRSNDAYS=$GET(^PRST(458,PPIEN,1))
 +36                                       SET PRSNDAY=$SELECT(PPIEN=BEGPP:BEGDAY-1,1:0)
 +37                                       FOR 
                                               SET PRSNDAY=$ORDER(^PRSN(451,"ALN",LOCIEN,PRSIEN,PPIEN,PRSNDAY))
                                               if 'PRSNDAY!STOP!(PPIEN=ENDPP&(PRSNDAY>ENDDAY))
                                                   QUIT 
                                               Begin DoDot:5
 +38                                               SET PRSNDATE=$PIECE(PRSNDAYS,U,PRSNDAY)
                                                   SET PRSNDATE=$EXTRACT(PRSNDATE,4,5)_"/"_$EXTRACT(PRSNDATE,6,7)_"/"_$EXTRACT(PRSNDATE,2,3)
 +39                                               SET PRSNVER=$ORDER(^PRSN(451,"ALN",LOCIEN,PRSIEN,PPIEN,PRSNDAY,""),-1)
 +40                                               SET PRSNTS=0
                                                   SET PRSD=1
 +41                                               FOR 
                                                       SET PRSNTS=$ORDER(^PRSN(451,"ALN",LOCIEN,PRSIEN,PPIEN,PRSNDAY,PRSNVER,PRSNTS))
                                                       if 'PRSNTS!STOP
                                                           QUIT 
                                                       Begin DoDot:6
 +42                                                       SET TIMEREC=$GET(^PRSN(451,PPIEN,"E",PRSIEN,"D",PRSNDAY,"V",PRSNVER,"T",PRSNTS,0))
 +43                                                       DO DATA
 +44                                                       IF TYPE="S"
                                                               DO TOTTIME
 +45                                                       IF TYPE="D"
                                                               DO PRTDET
                                                       End DoDot:6
                                               End DoDot:5
                                       End DoDot:4
 +46                               if STOP
                                       QUIT 
 +47                               IF TYPE="S"
                                       DO PRTSUM
                               End DoDot:3
                       End DoDot:2
               End DoDot:1
 +48       WRITE !!,"End of Report"
 +49       DO ^%ZISC
 +50       KILL ^TMP($JOB,"PRSNR")
 +51       QUIT 
 +52      ;
INFO      ;Find nurse information to display in report
 +1       ;
 +2        SET PRSL=1
 +3        SET PRSNARY=$GET(^PRSPC(PRSIEN,0))
 +4       ;Nurse Name
           SET PRSNAME=$PIECE(PRSNARY,U)
 +5       ;Nurse SSN
           SET PRSNSSN=$PIECE(PRSNARY,U,9)
 +6       ;Nurse T&L
           SET PRSNTL=$PIECE(PRSNARY,U,8)
 +7       ;  Nurse skillmix
           SET SKILMIX=$PIECE($$ISNURSE^PRSNUT01(PRSIEN),U,2)
 +8        IF SKILMIX["ADMINISTRATIVE"
               SET SKILMIX="ADMIN RN"
 +9        SET IEN200=$GET(^PRSPC(PRSIEN,200))
 +10       SET PRIMLOC=$SELECT(IEN200="":"",1:$$PRIMLOC^PRSNUT03(IEN200))
 +11       QUIT 
 +12      ;
DATA      ;Extract display data from POCD array
 +1       ;
 +2       ;Start Time
 +3        SET PRSNST=$PIECE(TIMEREC,U)
 +4       ;
 +5       ;Stop Time 
 +6        SET PRSNSP=$PIECE(TIMEREC,U,2)
 +7       ;
 +8       ;Meal Time
 +9        SET MEAL=$PIECE(TIMEREC,U,3)
 +10      ;
 +11      ;Get hours worked in a given location
 +12       SET HOURS=$$AMT^PRSPSAPU(PRSNST,PRSNSP,MEAL)
 +13      ;
 +14      ;Type of Time code IEN
 +15       SET PRSNTT=$PIECE(TIMEREC,U,4)
           SET PRSNLNG=" "
 +16       IF PRSNTT'=""
               Begin DoDot:1
 +17      ;
 +18      ;Type of Time code
 +19               SET PRSNTIEN=$ORDER(^PRST(457.3,"B",PRSNTT,0))
 +20               if PRSNTIEN=""
                       QUIT 
 +21      ;
 +22      ;Description for Type of Time code
 +23               SET PRSNLNG=$PIECE(^PRST(457.3,PRSNTIEN,0),U,2)
 +24      ;
 +25      ;Type of Work Code IEN
               End DoDot:1
 +26       SET PRSNWIEN=$PIECE(TIMEREC,U,6)
           SET PRSNTW=" "
           SET PRSNTWD=" "
 +27       IF PRSNWIEN'=""
               Begin DoDot:1
 +28      ;
 +29      ;Type of Work Code
 +30               SET PRSNTW=$PIECE(^PRSN(451.5,PRSNWIEN,0),U)
 +31      ;
 +32      ;Description for Type of Work code
 +33               SET PRSNTWD=$PIECE(^PRSN(451.5,PRSNWIEN,0),U,2)
               End DoDot:1
 +34      ;
 +35      ;OT Mandatory/Voluntary
 +36       SET PRSNM=$PIECE(TIMEREC,U,7)
 +37       QUIT 
 +38      ;
TOTTIME   ;
 +1       ; save hours into work array
 +2        SET WKTOT(PRSNLNG,PRSNTWD)=$GET(WKTOT(PRSNLNG,PRSNTWD))+HOURS
 +3       ;
 +4        QUIT 
 +5       ;
HDRSUM    ;Display header for report of Individual Nurse Activity
 +1       ;
 +2        WRITE @IOF
 +3        SET PG=PG+1
           SET PRSL=1
 +4        WRITE ?20,"All Activity at a Nurse Location Summary Report"
 +5        WRITE !,?15,EXTBEG_" - "_EXTEND,?45,"Run Date: ",TODAY,?70,"Page: ",$JUSTIFY(PG,3)
 +6       ;blank line
           WRITE !
 +7        WRITE !,"Nurse Name",?21,"Type of",?32,"Type of",?48,"Primary Location",?68,"# of",?75,"T&L"
 +8        WRITE !,"Skill Mix",?22,"Time",?33,"Work",?68,"Hours",?75,"Unit"
 +9        WRITE !,"--------------------------------------------------------------------------------"
 +10      ;
 +11       QUIT 
 +12      ;
PRTSUM    ;  Loop through Totals array and print each one
 +1       ;
 +2        NEW TT,TWD,HOURS,CNT
 +3        SET TT=""
           SET CNT=0
 +4        FOR 
               SET TT=$ORDER(WKTOT(TT))
               if TT=""!STOP
                   QUIT 
               Begin DoDot:1
 +5                SET TWD=""
 +6                FOR 
                       SET TWD=$ORDER(WKTOT(TT,TWD))
                       if TWD=""!STOP
                           QUIT 
                       Begin DoDot:2
 +7                        SET HOURS=$GET(WKTOT(TT,TWD))
                           SET CNT=CNT+1
 +8                        DO PPP
                       End DoDot:2
               End DoDot:1
 +9       ; need a blank line between nurses when there was only one record printed
 +10       IF CNT=1
               WRITE !
 +11       QUIT 
 +12      ;
PPP       ;
 +1        IF PRSL
               WRITE !,$EXTRACT(PRSNAME,1,19)
 +2        WRITE ?21,TT,?32,$EXTRACT(TWD,1,14),?48,$EXTRACT($PIECE(PRIMLOC,U,3),1,18),?66,$JUSTIFY(HOURS,7,2),?75,PRSNTL
 +3        WRITE !
 +4        IF PRSL
               WRITE "  ",$EXTRACT(SKILMIX,1,17)
 +5       ;
 +6        SET PRSL=0
 +7        IF (IOSL-5)<$Y
               SET STOP=$$ASK^PRSLIB00()
               IF 'STOP
                   DO HDRSUM
 +8        QUIT 
 +9       ;
HDRDET    ;Display header for report of Individual Nurse Activity
 +1       ;
 +2        WRITE @IOF
 +3        SET PG=PG+1
           SET (PRSL,PRSD)=1
 +4        WRITE ?20,"All Activity at a Nurse Location Detail Report"
 +5        WRITE !,?15,EXTBEG_" - "_EXTEND,?45,"Run Date: ",TODAY,?70,"Page: ",$JUSTIFY(PG,3)
 +6       ;blank line
           WRITE !
 +7        WRITE !,"Nurse Name",?21,"Last 4",?29,"Start/",?38,"Type of",?49,"Mand",?57,"Meal",?63,"Primary Location/"
 +8        WRITE !,"Skill Mix",?23,"SSN/",?29,"Stop",?39,"Time",?50,"OT",?57,"Time",?64,"Type of Work"
 +9        WRITE !,"Date",?23,"T&L",?29,"Time"
 +10       WRITE !,"--------------------------------------------------------------------------------"
 +11      ;
 +12       QUIT 
 +13      ;
PRTDET    ;Print report
 +1        IF PRSL
               WRITE !,$EXTRACT(PRSNAME,1,19)
 +2       ;PUT DATE ON FIRST LINE IF NAME & SKILL ARE NOT PRINTED
 +3        IF 'PRSL
               IF PRSD
                   WRITE !,"  ",PRSNDATE
 +4        WRITE ?22,$EXTRACT(PRSNSSN,6,9)
 +5        WRITE ?29,PRSNST
 +6        WRITE ?38,PRSNLNG
 +7        WRITE ?51,PRSNM
 +8        WRITE ?58,MEAL
 +9        WRITE ?65,$EXTRACT($PIECE(PRIMLOC,U,3),1,14)
 +10       WRITE !
 +11       IF PRSL
               WRITE "  ",$EXTRACT(SKILMIX,1,17)
 +12       WRITE ?22,PRSNTL
 +13       WRITE ?29,PRSNSP
 +14       WRITE ?65,$EXTRACT(PRSNTWD,1,14)
 +15       WRITE !
 +16      ;PUT DATE ON THIRD LINE IF NAME & SKILL ARE PRINTED
 +17       IF PRSL
               IF PRSD
                   WRITE "  ",PRSNDATE,!
 +18       SET (PRSL,PRSD)=0
 +19      ;
 +20       IF (IOSL-5)<$Y
               SET STOP=$$ASK^PRSLIB00()
               IF 'STOP
                   DO HDRDET
 +21       QUIT 
 +22      ;
TYPE      ;Choose summary or detailed group activity report
 +1       ;
 +2        NEW DIR,DIRUT,X,Y
 +3        SET DIR(0)="S^S:Summary Report;D:Detailed Report"
 +4        SET DIR("A")="Enter Selection"
 +5        SET DIR("?")="Enter whether you want to select a Summary or Detailed Group Activity Report"
 +6        DO ^DIR
 +7        IF $DATA(DIRUT)
               SET STOP=1
               QUIT 
 +8        SET TYPE=Y
 +9        QUIT 
 +10      ;
DATE      ; User is prompted for a date range 
 +1       ;
 +2        SET RANGE=$$POCRANGE^PRSNUT01()
 +3       ; QUIT HERE IF RANGE=0 
 +4        IF +$GET(RANGE)'>0
               SET STOP=1
 +5       ;
 +6        SET BEG=$PIECE(RANGE,U)
 +7        SET END=$PIECE(RANGE,U,2)
 +8        SET EXTBEG=$PIECE(RANGE,U,3)
 +9        SET EXTEND=$PIECE(RANGE,U,4)
 +10      ;
 +11       QUIT 
 +12      ;
QUE       ;call to generate and display report for individual activity
 +1        NEW %ZIS,POP,IOP
 +2        SET %ZIS="MQ"
 +3        DO ^%ZIS
 +4        if POP
               QUIT 
 +5        IF $DATA(IO("Q"))
               Begin DoDot:1
 +6                KILL IO("Q")
 +7                NEW ZTSK,ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE,ZTUCI,ZTCPU,ZTPRI,ZTKIL,ZTSYNC
 +8                SET ZTDESC="All Activity at a Nurse Location "_$SELECT(TYPE="S":"Summary",1:"Detail")
 +9                SET ZTRTN="REPORT^PRSNRLS0"
 +10               SET ZTSAVE("GROUP")=""
 +11               SET ZTSAVE("GROUP(")=""
 +12               SET ZTSAVE("TYPE")=""
 +13               SET ZTSAVE("BEG")=""
 +14               SET ZTSAVE("END")=""
 +15               SET ZTSAVE("EXTBEG")=""
 +16               SET ZTSAVE("EXTEND")=""
 +17               DO ^%ZTLOAD
 +18               IF $DATA(ZTSK)
                       SET ZTREQ="@"
                       WRITE !,"Request "_ZTSK_" queued."
               End DoDot:1
 +19      IF '$TEST
               Begin DoDot:1
 +20               DO REPORT
               End DoDot:1
 +21       QUIT