PRSPSAP ;WOIFO/JAH - part time physician, supervisory approvals ;10/22/04
;;4.0;PAID;**93,151**;Sep 21, 1995;Build 2
;Per VA Directive 6402, this routine should not be modified
Q
; T&A supervisor of PTP employee is required to review and take
; one of the following actions on each signed day of the PTP's ESR:
; 1. approve, 2. request resubmission or 3. bypass.
; When the T&A Supervisor approves a signed day we attempt to
; update the PTP's timecard for that day. Updates to the
; timecard will be screened based on the status of the timecard
; and the effect of any potential update.
;
; MAIN entry point called from option Approve Signed ESRs.
;
MAIN ;
K ^TMP($J,"PRSPSAP")
N PRSTLV,TLI,TLE,PRSIEN,ANYACT,AVAIL,OUT,DCNT,APRWHO
; Make sure we have a signature code before continuing
I '$$ESIGC^PRSPUT2(1) W !! S OUT=$$ASK^PRSLIB00(1) Q
D HDROPT^PRSPSAP1
; Prompt supervisor to pick one T&L unit for which they are assigned.
S PRSTLV=3
D ^PRSAUTL
Q:TLI<1
;
; Check if they only want to look at one employee
S APRWHO=$$ONEPTP^PRSPSAPU(TLE)
Q:APRWHO<0
; ---------------------------------------------------
I APRWHO>0 D
. S NN=$P($G(^PRSPC(APRWHO,0)),U)
. D BLDLST(.OUT,TLE,NN)
E D
.; Loop thru supervisor's selected T&L
. S NN=""
. F S NN=$O(^PRSPC("ATL"_TLE,NN)) Q:NN=""!($G(OUT)>0) D
.. D BLDLST(.OUT,TLE,NN)
;
; display all the ASA records for action.
S OUT=0
D ASALIST^PRSPSAP1(.OUT)
; check if there are any updates and then prompt for signature
;
D ANYACT^PRSPSAP1(.ANYACT)
I ANYACT>0 D
. D SUMMARY(.ANYACT)
. D SIG^XUSESIG
.; update the timecard and ESR status for all actions when
.; a valid signature is applied
. I X1="" D
.. W @IOF,!!!,?10,"TIMECARD AND ESR WERE NOT UPDATED."
.E D
.. D TRANSACT^PRSPSAP2
; remove any remaining PTP timecard locks held in this option
; D EX^PRSASR
K ^TMP($J,"PRSPSAP")
Q
;
BLDLST(OUT,TLE,NN) ; BUILD LIST OF ALL APPROVAL ACTIONS FOR SINGLE EMPLOYEE
N PRSIEN,PPE,PPI,AVAIL,DCNT,PRSD,GLOB,DFN
S PRSIEN=0
F S PRSIEN=$O(^PRSPC("ATL"_TLE,NN,PRSIEN)) Q:PRSIEN<1!($G(OUT)>0) D ;Loop through IENs for a single name, PRS*4.0*151
. S PPE=""
. F S PPE=$O(^PRST(458,"ASA",PRSIEN,PPE)) Q:PPE=""!($G(OUT)>0) D
.. S PPI=$O(^PRST(458,"B",PPE,0))
..; get lock for PTP's entire PP, then add record (PUSH) that
..; requires supervisor action to the list
.. S DFN=PRSIEN
..;
..; $$availrec() locks PTP ESR node.
..; unlock if supervisor bybasses unlock otherwise they
..; are not unlocked until they are processed thru temp global
..; & their status' are updated.
.. S AVAIL=$$AVAILREC^PRSLIB00("",.GLOB,.OUT)
.. Q:'AVAIL
.. ;
..; add item to list and set up a day cross ref with count of days
.. S (DCNT,PRSD)=0
.. F S PRSD=$O(^PRST(458,"ASA",PRSIEN,PPE,PRSD)) Q:PRSD'>0 D
... S DCNT=DCNT+1
... D PUSH^PRSPSAP1(PPI,PRSIEN,PRSD,DCNT)
;
Q
;
SUMMARY(AA) ;
W @IOF,!!!,"Supervisory Action Summary"
W !!,$J(AA,6)," actions require your electronic signature before being"
W !,?(6-$L(AA))," committed to the database."
I AA("A")>0 W !,$J(AA("A"),6)," ESR record marked for approval. (signature required)"
I AA("R")>0 W !,$J(AA("R"),6)," ESR records marked for resubmission. (signature required)"
I AA("B")>0 W !,$J(AA("B"),6)," ESR records explicitly bypassed."
I AA("N")>0 W !,$J(AA("N"),6)," ESR records with no action."
Q
GETACT(ESRDTS,PRSIEN,PPI) ; return user choice of # (1-ACTCNT) or action
; return 0 for ^ at first action prompt
; return null for no response (user hit return)
; return -1 if ^ at 2nd prompt (action on single day prompt)
N DIR,DIRUT,ACT,CT,NUMS
;
; get total items + marked items CT CT(1)
D MARKCNT^PRSPSAP1(.CT,PRSIEN,PPI)
I CT>1 D
. S NUMS=";"
. F I=1:1:CT D
.. S NUMS=NUMS_I_":"_$P(ESRDTS(I),U,2)_";"
;
; status already marked on all days
I (CT>1)&(CT=CT(1)) D
. S DIR(0)="SAO^"_NUMS
. S DIR("A")="Select an item #: "
. S DIR("?",1)="Enter an item from the left column to change status for that day"
E D
.; if all days don't have a superV action (marked) then prompt for
.; action on remaining days or pick a day (item)
. I CT>1 D
.. S DIR(0)="SAO^A:Approve;B:Bypass;R:Resubmit"_NUMS
.. S DIR("A")="(A)pprove, (B)ypass, (R)esubmit or enter an item #: "
.. S DIR("?",1)="Enter an action for all records without a status or enter an item #"
.. S DIR("?",2)="to then pick an action for that day."
.. S DIR("?",3)=" Type R for Resubmit when the part-time physician needs to correct an ESR day."
.. S DIR("?",4)=" Type B for Bypass to skip the day(s) for now and approve at a later time."
.. S DIR("?",5)=" Type A for Approve when the ESR day(s) appears correct."
.E D
..; if only one item to pick, don't ask for item #
.. S DIR(0)="SAO^A:Approve;B:Bypass;R:Resubmit"
.. S DIR("A")="(A)pprove, (B)ypass, (R)esubmit: "
.. S DIR("?",1)="Enter an action for all records without a status"
.. S DIR("?",2)=" Type R for Resubmit when the part-time physician needs to correct an ESR day."
.. S DIR("?",3)=" Type B for Bypass to skip the day(s) for now and approve at a later time."
.. S DIR("?",4)=" Type A for Approve when the ESR day(s) appears correct."
;
S DIR("?")=" Press [enter] to move to the next part time physician."
D ^DIR
S PICK=$G(Y)
I $G(Y)="" Q ""
; if there was only one item then set pick to 1 plus action
I CT=1 S PICK=PICK_"^1"
I $G(DIRUT) S PICK=0
;
; item was picked
I PICK>0,(PICK<(CT+1)) D
. N DAYLNS,DIR,DIRUT,ESR,HPL
. D GETESR^PRSPSAP1(.ESR,PPI,PRSIEN,+ESRDTS(PICK))
. N COUNT S COUNT=PICK,COUNT(1)=0
. W ! D DAY^PRSPSAPU(.DAYLNS,ESRDTS(COUNT),.ESR,PRSIEN,PPI)
. S ACT=PICK
. S DIR(0)="SA^A:Approve;B:Bypass;R:Resubmit"
. S DIR("A")="(A)pprove, (B)ypass, (R)esubmit: "
. S DIR("?")="Select an action for the ESR day above."
. S DIR("?",1)=" Type R for Resubmit when the part-time physician needs to correct an ESR day."
. S DIR("?",2)=" Type B for Bypass to skip the day(s) for now and approve at a later time."
. S DIR("?",3)=" Type A for Approve when the ESR day(s) appears correct."
. S DIR("?",4)=" Type ^ to redisplay the current part time physician."
. D GETDAY^PRSPSAPU(.DAYLNS,.ESRDTS,.ESR,PICK,PRSIEN,PPI)
. S HPL=0
. F S HPL=$O(DAYLNS(HPL)) Q:HPL'>0 D
.. S DIR("?",HPL+4)=$G(DAYLNS(HPL))
. D ^DIR
. S PICK=$G(Y)_"^"_ACT
. I $G(DIRUT) S PICK=-1
Q PICK
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPRSPSAP 6580 printed Nov 22, 2024@17:38:15 Page 2
PRSPSAP ;WOIFO/JAH - part time physician, supervisory approvals ;10/22/04
+1 ;;4.0;PAID;**93,151**;Sep 21, 1995;Build 2
+2 ;Per VA Directive 6402, this routine should not be modified
+3 QUIT
+4 ; T&A supervisor of PTP employee is required to review and take
+5 ; one of the following actions on each signed day of the PTP's ESR:
+6 ; 1. approve, 2. request resubmission or 3. bypass.
+7 ; When the T&A Supervisor approves a signed day we attempt to
+8 ; update the PTP's timecard for that day. Updates to the
+9 ; timecard will be screened based on the status of the timecard
+10 ; and the effect of any potential update.
+11 ;
+12 ; MAIN entry point called from option Approve Signed ESRs.
+13 ;
MAIN ;
+1 KILL ^TMP($JOB,"PRSPSAP")
+2 NEW PRSTLV,TLI,TLE,PRSIEN,ANYACT,AVAIL,OUT,DCNT,APRWHO
+3 ; Make sure we have a signature code before continuing
+4 IF '$$ESIGC^PRSPUT2(1)
WRITE !!
SET OUT=$$ASK^PRSLIB00(1)
QUIT
+5 DO HDROPT^PRSPSAP1
+6 ; Prompt supervisor to pick one T&L unit for which they are assigned.
+7 SET PRSTLV=3
+8 DO ^PRSAUTL
+9 if TLI<1
QUIT
+10 ;
+11 ; Check if they only want to look at one employee
+12 SET APRWHO=$$ONEPTP^PRSPSAPU(TLE)
+13 if APRWHO<0
QUIT
+14 ; ---------------------------------------------------
+15 IF APRWHO>0
Begin DoDot:1
+16 SET NN=$PIECE($GET(^PRSPC(APRWHO,0)),U)
+17 DO BLDLST(.OUT,TLE,NN)
End DoDot:1
+18 IF '$TEST
Begin DoDot:1
+19 ; Loop thru supervisor's selected T&L
+20 SET NN=""
+21 FOR
SET NN=$ORDER(^PRSPC("ATL"_TLE,NN))
if NN=""!($GET(OUT)>0)
QUIT
Begin DoDot:2
+22 DO BLDLST(.OUT,TLE,NN)
End DoDot:2
End DoDot:1
+23 ;
+24 ; display all the ASA records for action.
+25 SET OUT=0
+26 DO ASALIST^PRSPSAP1(.OUT)
+27 ; check if there are any updates and then prompt for signature
+28 ;
+29 DO ANYACT^PRSPSAP1(.ANYACT)
+30 IF ANYACT>0
Begin DoDot:1
+31 DO SUMMARY(.ANYACT)
+32 DO SIG^XUSESIG
+33 ; update the timecard and ESR status for all actions when
+34 ; a valid signature is applied
+35 IF X1=""
Begin DoDot:2
+36 WRITE @IOF,!!!,?10,"TIMECARD AND ESR WERE NOT UPDATED."
End DoDot:2
+37 IF '$TEST
Begin DoDot:2
+38 DO TRANSACT^PRSPSAP2
End DoDot:2
End DoDot:1
+39 ; remove any remaining PTP timecard locks held in this option
+40 ; D EX^PRSASR
+41 KILL ^TMP($JOB,"PRSPSAP")
+42 QUIT
+43 ;
BLDLST(OUT,TLE,NN) ; BUILD LIST OF ALL APPROVAL ACTIONS FOR SINGLE EMPLOYEE
+1 NEW PRSIEN,PPE,PPI,AVAIL,DCNT,PRSD,GLOB,DFN
+2 SET PRSIEN=0
+3 ;Loop through IENs for a single name, PRS*4.0*151
FOR
SET PRSIEN=$ORDER(^PRSPC("ATL"_TLE,NN,PRSIEN))
if PRSIEN<1!($GET(OUT)>0)
QUIT
Begin DoDot:1
+4 SET PPE=""
+5 FOR
SET PPE=$ORDER(^PRST(458,"ASA",PRSIEN,PPE))
if PPE=""!($GET(OUT)>0)
QUIT
Begin DoDot:2
+6 SET PPI=$ORDER(^PRST(458,"B",PPE,0))
+7 ; get lock for PTP's entire PP, then add record (PUSH) that
+8 ; requires supervisor action to the list
+9 SET DFN=PRSIEN
+10 ;
+11 ; $$availrec() locks PTP ESR node.
+12 ; unlock if supervisor bybasses unlock otherwise they
+13 ; are not unlocked until they are processed thru temp global
+14 ; & their status' are updated.
+15 SET AVAIL=$$AVAILREC^PRSLIB00("",.GLOB,.OUT)
+16 if 'AVAIL
QUIT
+17 ;
+18 ; add item to list and set up a day cross ref with count of days
+19 SET (DCNT,PRSD)=0
+20 FOR
SET PRSD=$ORDER(^PRST(458,"ASA",PRSIEN,PPE,PRSD))
if PRSD'>0
QUIT
Begin DoDot:3
+21 SET DCNT=DCNT+1
+22 DO PUSH^PRSPSAP1(PPI,PRSIEN,PRSD,DCNT)
End DoDot:3
End DoDot:2
End DoDot:1
+23 ;
+24 QUIT
+25 ;
SUMMARY(AA) ;
+1 WRITE @IOF,!!!,"Supervisory Action Summary"
+2 WRITE !!,$JUSTIFY(AA,6)," actions require your electronic signature before being"
+3 WRITE !,?(6-$LENGTH(AA))," committed to the database."
+4 IF AA("A")>0
WRITE !,$JUSTIFY(AA("A"),6)," ESR record marked for approval. (signature required)"
+5 IF AA("R")>0
WRITE !,$JUSTIFY(AA("R"),6)," ESR records marked for resubmission. (signature required)"
+6 IF AA("B")>0
WRITE !,$JUSTIFY(AA("B"),6)," ESR records explicitly bypassed."
+7 IF AA("N")>0
WRITE !,$JUSTIFY(AA("N"),6)," ESR records with no action."
+8 QUIT
GETACT(ESRDTS,PRSIEN,PPI) ; return user choice of # (1-ACTCNT) or action
+1 ; return 0 for ^ at first action prompt
+2 ; return null for no response (user hit return)
+3 ; return -1 if ^ at 2nd prompt (action on single day prompt)
+4 NEW DIR,DIRUT,ACT,CT,NUMS
+5 ;
+6 ; get total items + marked items CT CT(1)
+7 DO MARKCNT^PRSPSAP1(.CT,PRSIEN,PPI)
+8 IF CT>1
Begin DoDot:1
+9 SET NUMS=";"
+10 FOR I=1:1:CT
Begin DoDot:2
+11 SET NUMS=NUMS_I_":"_$PIECE(ESRDTS(I),U,2)_";"
End DoDot:2
End DoDot:1
+12 ;
+13 ; status already marked on all days
+14 IF (CT>1)&(CT=CT(1))
Begin DoDot:1
+15 SET DIR(0)="SAO^"_NUMS
+16 SET DIR("A")="Select an item #: "
+17 SET DIR("?",1)="Enter an item from the left column to change status for that day"
End DoDot:1
+18 IF '$TEST
Begin DoDot:1
+19 ; if all days don't have a superV action (marked) then prompt for
+20 ; action on remaining days or pick a day (item)
+21 IF CT>1
Begin DoDot:2
+22 SET DIR(0)="SAO^A:Approve;B:Bypass;R:Resubmit"_NUMS
+23 SET DIR("A")="(A)pprove, (B)ypass, (R)esubmit or enter an item #: "
+24 SET DIR("?",1)="Enter an action for all records without a status or enter an item #"
+25 SET DIR("?",2)="to then pick an action for that day."
+26 SET DIR("?",3)=" Type R for Resubmit when the part-time physician needs to correct an ESR day."
+27 SET DIR("?",4)=" Type B for Bypass to skip the day(s) for now and approve at a later time."
+28 SET DIR("?",5)=" Type A for Approve when the ESR day(s) appears correct."
End DoDot:2
+29 IF '$TEST
Begin DoDot:2
+30 ; if only one item to pick, don't ask for item #
+31 SET DIR(0)="SAO^A:Approve;B:Bypass;R:Resubmit"
+32 SET DIR("A")="(A)pprove, (B)ypass, (R)esubmit: "
+33 SET DIR("?",1)="Enter an action for all records without a status"
+34 SET DIR("?",2)=" Type R for Resubmit when the part-time physician needs to correct an ESR day."
+35 SET DIR("?",3)=" Type B for Bypass to skip the day(s) for now and approve at a later time."
+36 SET DIR("?",4)=" Type A for Approve when the ESR day(s) appears correct."
End DoDot:2
End DoDot:1
+37 ;
+38 SET DIR("?")=" Press [enter] to move to the next part time physician."
+39 DO ^DIR
+40 SET PICK=$GET(Y)
+41 IF $GET(Y)=""
QUIT ""
+42 ; if there was only one item then set pick to 1 plus action
+43 IF CT=1
SET PICK=PICK_"^1"
+44 IF $GET(DIRUT)
SET PICK=0
+45 ;
+46 ; item was picked
+47 IF PICK>0
IF (PICK<(CT+1))
Begin DoDot:1
+48 NEW DAYLNS,DIR,DIRUT,ESR,HPL
+49 DO GETESR^PRSPSAP1(.ESR,PPI,PRSIEN,+ESRDTS(PICK))
+50 NEW COUNT
SET COUNT=PICK
SET COUNT(1)=0
+51 WRITE !
DO DAY^PRSPSAPU(.DAYLNS,ESRDTS(COUNT),.ESR,PRSIEN,PPI)
+52 SET ACT=PICK
+53 SET DIR(0)="SA^A:Approve;B:Bypass;R:Resubmit"
+54 SET DIR("A")="(A)pprove, (B)ypass, (R)esubmit: "
+55 SET DIR("?")="Select an action for the ESR day above."
+56 SET DIR("?",1)=" Type R for Resubmit when the part-time physician needs to correct an ESR day."
+57 SET DIR("?",2)=" Type B for Bypass to skip the day(s) for now and approve at a later time."
+58 SET DIR("?",3)=" Type A for Approve when the ESR day(s) appears correct."
+59 SET DIR("?",4)=" Type ^ to redisplay the current part time physician."
+60 DO GETDAY^PRSPSAPU(.DAYLNS,.ESRDTS,.ESR,PICK,PRSIEN,PPI)
+61 SET HPL=0
+62 FOR
SET HPL=$ORDER(DAYLNS(HPL))
if HPL'>0
QUIT
Begin DoDot:2
+63 SET DIR("?",HPL+4)=$GET(DAYLNS(HPL))
End DoDot:2
+64 DO ^DIR
+65 SET PICK=$GET(Y)_"^"_ACT
+66 IF $GET(DIRUT)
SET PICK=-1
End DoDot:1
+67 QUIT PICK
+68 ;