PRSNRDN1 ;WOIFO/KJS - GROUP SUMMARY ACTIVITY DIRECT AND NON DIRECT II REPORT ;080411
;;4.0;PAID;**126**;Sep 21, 1995;Build 59
;;Per VHA Directive 2004-038, this routine should not be modified
;
;
;
GATHER(SKILMIX,GRP,PRSIEN,BEG,END) ;Entry point to gather POC data from 451
;INPUT:
; SKILMIX: ARRAY containing totals for various types of work
; subscripted by nurse role (or skill mix)
; GRP: Nurse default location or T&L Unit
; PRSIEN: Nurse ien 450
; BEG,END: FileMan begin and end dates for report
;
N INDEX,CNT,DAYNODE,FMDT,PPIEN,PRSNDAY
S FMDT=BEG-.1
S (INDEX,CNT)=0
F S FMDT=$O(^PRST(458,"AD",FMDT)) Q:FMDT>END!(FMDT'>0)!STOP D
.S DAYNODE=$G(^PRST(458,"AD",FMDT))
.S PPIEN=+DAYNODE
.S PRSNDAY=$P(DAYNODE,U,2)
.K POCD ;array to hold POC data
.D L1^PRSNRUT1(.POCD,PPIEN,PRSIEN,PRSNDAY)
.Q:$G(POCD(0))=0
.D DATA(.SKILMIX,GRP)
;
Q
;
;
DATA(SKILMIX,GRP) ;Extract data from POCD array
;
N PRSL,ST,SP,MEAL,HOURS,TT,TIEN,POC,POC1,WIEN,TW,TWD,TYPETM,TYPEWK
;
S PRSL=0
F S PRSL=$O(POCD(PRSL)) Q:PRSL'>0 D
.;
.;Start and stop time and mealtime
.S ST=$P(POCD(PRSL),U),SP=$P(POCD(PRSL),U,2),MEAL=$P(POCD(PRSL),U,3)
.;
.;Get elapsed time
.S HOURS=$$AMT^PRSPSAPU(ST,SP,MEAL)
.;
.;Type of Time code IEN
.S (TIEN,TYPETM)=""
.S TT=$P(POCD(PRSL),U,4)
.I TT'="" D
..;
..;Type of Time code
..S TIEN=$O(^PRST(457.3,"B",TT,TIEN))
..Q:TIEN=""
..;
..;Description for Type of Time code
..S TYPETM=$P(^PRST(457.3,TIEN,0),U,2) ;eg, Direct Care, AL
..;
.S POC1=""
.S POC=$P(POCD(PRSL),U,5)
.I POC'="" D
..S POC1=$P($$ISACTIVE^PRSNUT01(DT,POC),U,2) ;Location
.;
.;Type of Work Code IEN
.S (TW,TWD)=""
.S WIEN=$P(POCD(PRSL),U,6)
.I WIEN'="" D
..;
..;Type of Work Code
..S TW=$P(^PRSN(451.5,WIEN,0),U)
..;
..;Description for Type of Work code
..S TWD=$P(^PRSN(451.5,WIEN,0),U,2)
.
.; save skill mix, hours and type of work into SKILMIX array
.Q:(TYPETM="")!(POC1="")
.;
.S TYPEWK=$S(TW="DC":"Direct",1:"Non Direct")
.S SKILMIX(GRP,TYPETM,TYPEWK)=$G(SKILMIX(GRP,TYPETM,TYPEWK))+HOURS
Q
HDR(EXTBEG,EXTEND) ;Display header for report of Individual Nurse Activity
;
W @IOF
S PG=PG+1,PRTGP=1
W ?17,"GROUP SUMMARY ACTIVITY DIRECT AND NON DIRECT REPORT"
W !,?15,EXTBEG_" - "_EXTEND,?45,"Run Date: ",TODAY,?70,"Page: ",$J(PG,3)
W ! ;blank line
W !,"Location",?22,"Type of Time",?44,"Type of Work",?75,"Hours"
W !,"--------------------------------------------------------------------------------"
;
Q
PRTLP(EXTBEG,EXTEND) ;Order through SKILMIX array, total data & display
N RNDC,LNDC,UNDC,GP,TNDC,TYPEWK,TYPETM
S GP=0
F S GP=$O(SKILMIX(GP)) Q:GP=""!STOP D
.S TYPETM="",PRTGP=1
.F S TYPETM=$O(SKILMIX(GP,TYPETM)) Q:TYPETM=""!STOP D
..S (RNDC,LNDC,UNDC,TNDC)=0
..S TYPEWK=""
..F S TYPEWK=$O(SKILMIX(GP,TYPETM,TYPEWK)) Q:TYPEWK=""!STOP D
...S TOTHRS=$P(SKILMIX(GP,TYPETM,TYPEWK),U)
...D PPP(.STOP,EXTBEG,EXTEND)
Q
PPP(STOP,EXTBEG,EXTEND) ;
I PRTGP W !,GP S PRTGP=0
W ?22,TYPETM,?44,TYPEWK,?72,$J(TOTHRS,8,2),!
I (IOSL-5)<$Y S STOP=$$ASK^PRSLIB00() I 'STOP D HDR(EXTBEG,EXTEND)
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPRSNRDN1 3190 printed Nov 22, 2024@17:37:22 Page 2
PRSNRDN1 ;WOIFO/KJS - GROUP SUMMARY ACTIVITY DIRECT AND NON DIRECT II REPORT ;080411
+1 ;;4.0;PAID;**126**;Sep 21, 1995;Build 59
+2 ;;Per VHA Directive 2004-038, this routine should not be modified
+3 ;
+4 ;
+5 ;
GATHER(SKILMIX,GRP,PRSIEN,BEG,END) ;Entry point to gather POC data from 451
+1 ;INPUT:
+2 ; SKILMIX: ARRAY containing totals for various types of work
+3 ; subscripted by nurse role (or skill mix)
+4 ; GRP: Nurse default location or T&L Unit
+5 ; PRSIEN: Nurse ien 450
+6 ; BEG,END: FileMan begin and end dates for report
+7 ;
+8 NEW INDEX,CNT,DAYNODE,FMDT,PPIEN,PRSNDAY
+9 SET FMDT=BEG-.1
+10 SET (INDEX,CNT)=0
+11 FOR
SET FMDT=$ORDER(^PRST(458,"AD",FMDT))
if FMDT>END!(FMDT'>0)!STOP
QUIT
Begin DoDot:1
+12 SET DAYNODE=$GET(^PRST(458,"AD",FMDT))
+13 SET PPIEN=+DAYNODE
+14 SET PRSNDAY=$PIECE(DAYNODE,U,2)
+15 ;array to hold POC data
KILL POCD
+16 DO L1^PRSNRUT1(.POCD,PPIEN,PRSIEN,PRSNDAY)
+17 if $GET(POCD(0))=0
QUIT
+18 DO DATA(.SKILMIX,GRP)
End DoDot:1
+19 ;
+20 QUIT
+21 ;
+22 ;
DATA(SKILMIX,GRP) ;Extract data from POCD array
+1 ;
+2 NEW PRSL,ST,SP,MEAL,HOURS,TT,TIEN,POC,POC1,WIEN,TW,TWD,TYPETM,TYPEWK
+3 ;
+4 SET PRSL=0
+5 FOR
SET PRSL=$ORDER(POCD(PRSL))
if PRSL'>0
QUIT
Begin DoDot:1
+6 ;
+7 ;Start and stop time and mealtime
+8 SET ST=$PIECE(POCD(PRSL),U)
SET SP=$PIECE(POCD(PRSL),U,2)
SET MEAL=$PIECE(POCD(PRSL),U,3)
+9 ;
+10 ;Get elapsed time
+11 SET HOURS=$$AMT^PRSPSAPU(ST,SP,MEAL)
+12 ;
+13 ;Type of Time code IEN
+14 SET (TIEN,TYPETM)=""
+15 SET TT=$PIECE(POCD(PRSL),U,4)
+16 IF TT'=""
Begin DoDot:2
+17 ;
+18 ;Type of Time code
+19 SET TIEN=$ORDER(^PRST(457.3,"B",TT,TIEN))
+20 if TIEN=""
QUIT
+21 ;
+22 ;Description for Type of Time code
+23 ;eg, Direct Care, AL
SET TYPETM=$PIECE(^PRST(457.3,TIEN,0),U,2)
+24 ;
End DoDot:2
+25 SET POC1=""
+26 SET POC=$PIECE(POCD(PRSL),U,5)
+27 IF POC'=""
Begin DoDot:2
+28 ;Location
SET POC1=$PIECE($$ISACTIVE^PRSNUT01(DT,POC),U,2)
End DoDot:2
+29 ;
+30 ;Type of Work Code IEN
+31 SET (TW,TWD)=""
+32 SET WIEN=$PIECE(POCD(PRSL),U,6)
+33 IF WIEN'=""
Begin DoDot:2
+34 ;
+35 ;Type of Work Code
+36 SET TW=$PIECE(^PRSN(451.5,WIEN,0),U)
+37 ;
+38 ;Description for Type of Work code
+39 SET TWD=$PIECE(^PRSN(451.5,WIEN,0),U,2)
End DoDot:2
+40 +41 ; save skill mix, hours and type of work into SKILMIX array
+42 if (TYPETM="")!(POC1="")
QUIT
+43 ;
+44 SET TYPEWK=$SELECT(TW="DC":"Direct",1:"Non Direct")
+45 SET SKILMIX(GRP,TYPETM,TYPEWK)=$GET(SKILMIX(GRP,TYPETM,TYPEWK))+HOURS
End DoDot:1
+46 QUIT
HDR(EXTBEG,EXTEND) ;Display header for report of Individual Nurse Activity
+1 ;
+2 WRITE @IOF
+3 SET PG=PG+1
SET PRTGP=1
+4 WRITE ?17,"GROUP SUMMARY ACTIVITY DIRECT AND NON DIRECT REPORT"
+5 WRITE !,?15,EXTBEG_" - "_EXTEND,?45,"Run Date: ",TODAY,?70,"Page: ",$JUSTIFY(PG,3)
+6 ;blank line
WRITE !
+7 WRITE !,"Location",?22,"Type of Time",?44,"Type of Work",?75,"Hours"
+8 WRITE !,"--------------------------------------------------------------------------------"
+9 ;
+10 QUIT
PRTLP(EXTBEG,EXTEND) ;Order through SKILMIX array, total data & display
+1 NEW RNDC,LNDC,UNDC,GP,TNDC,TYPEWK,TYPETM
+2 SET GP=0
+3 FOR
SET GP=$ORDER(SKILMIX(GP))
if GP=""!STOP
QUIT
Begin DoDot:1
+4 SET TYPETM=""
SET PRTGP=1
+5 FOR
SET TYPETM=$ORDER(SKILMIX(GP,TYPETM))
if TYPETM=""!STOP
QUIT
Begin DoDot:2
+6 SET (RNDC,LNDC,UNDC,TNDC)=0
+7 SET TYPEWK=""
+8 FOR
SET TYPEWK=$ORDER(SKILMIX(GP,TYPETM,TYPEWK))
if TYPEWK=""!STOP
QUIT
Begin DoDot:3
+9 SET TOTHRS=$PIECE(SKILMIX(GP,TYPETM,TYPEWK),U)
+10 DO PPP(.STOP,EXTBEG,EXTEND)
End DoDot:3
End DoDot:2
End DoDot:1
+11 QUIT
PPP(STOP,EXTBEG,EXTEND) ;
+1 IF PRTGP
WRITE !,GP
SET PRTGP=0
+2 WRITE ?22,TYPETM,?44,TYPEWK,?72,$JUSTIFY(TOTHRS,8,2),!
+3 IF (IOSL-5)<$Y
SET STOP=$$ASK^PRSLIB00()
IF 'STOP
DO HDR(EXTBEG,EXTEND)
+4 QUIT