- 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 Dec 13, 2024@02:27:19 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