| 1 | PRSPSAP ;WOIFO/JAH - part time physician, supervisory approvals ;10/22/04 | 
|---|
| 2 | ;;4.0;PAID;**93**;Sep 21, 1995;Build 7 | 
|---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | Q | 
|---|
| 5 | ; T&A supervisor of PTP employee is required to review and take | 
|---|
| 6 | ; one of the following actions on each signed day of the PTP's ESR: | 
|---|
| 7 | ; 1. approve, 2. request resubmission or 3. bypass. | 
|---|
| 8 | ; When the T&A Supervisor approves a signed day we attempt to | 
|---|
| 9 | ; update the PTP's timecard for that day.  Updates to the | 
|---|
| 10 | ; timecard will be screened based on the status of the timecard | 
|---|
| 11 | ; and the effect of any potential update. | 
|---|
| 12 | ; | 
|---|
| 13 | ; MAIN entry point called from option Approve Signed ESRs. | 
|---|
| 14 | ; | 
|---|
| 15 | MAIN ; | 
|---|
| 16 | K ^TMP($J,"PRSPSAP") | 
|---|
| 17 | N PRSTLV,TLI,TLE,PRSIEN,ANYACT,AVAIL,OUT,DCNT,APRWHO | 
|---|
| 18 | ; Make sure we have a signature code before continuing | 
|---|
| 19 | I '$$ESIGC^PRSPUT2(1) W !! S OUT=$$ASK^PRSLIB00(1) Q | 
|---|
| 20 | D HDROPT^PRSPSAP1 | 
|---|
| 21 | ; Prompt supervisor to pick one T&L unit for which they are assigned. | 
|---|
| 22 | S PRSTLV=3 | 
|---|
| 23 | D ^PRSAUTL | 
|---|
| 24 | Q:TLI<1 | 
|---|
| 25 | ; | 
|---|
| 26 | ; Check if they only want to look at one employee | 
|---|
| 27 | S APRWHO=$$ONEPTP^PRSPSAPU(TLE) | 
|---|
| 28 | Q:APRWHO<0 | 
|---|
| 29 | ;     --------------------------------------------------- | 
|---|
| 30 | I APRWHO>0 D | 
|---|
| 31 | .  S NN=$P($G(^PRSPC(APRWHO,0)),U) | 
|---|
| 32 | .  D BLDLST(.OUT,TLE,NN) | 
|---|
| 33 | E  D | 
|---|
| 34 | .;   Loop thru supervisor's selected T&L | 
|---|
| 35 | .  S NN="" | 
|---|
| 36 | .  F  S NN=$O(^PRSPC("ATL"_TLE,NN)) Q:NN=""!($G(OUT)>0)  D | 
|---|
| 37 | ..   D BLDLST(.OUT,TLE,NN) | 
|---|
| 38 | ; | 
|---|
| 39 | ; display all the ASA records for action. | 
|---|
| 40 | S OUT=0 | 
|---|
| 41 | D ASALIST^PRSPSAP1(.OUT) | 
|---|
| 42 | ; check if there are any updates and then prompt for signature | 
|---|
| 43 | ; | 
|---|
| 44 | D ANYACT^PRSPSAP1(.ANYACT) | 
|---|
| 45 | I ANYACT>0 D | 
|---|
| 46 | . D SUMMARY(.ANYACT) | 
|---|
| 47 | . D SIG^XUSESIG | 
|---|
| 48 | .; update the timecard and ESR status for all actions when | 
|---|
| 49 | .; a valid signature is applied | 
|---|
| 50 | . I X1="" D | 
|---|
| 51 | ..   W @IOF,!!!,?10,"TIMECARD AND ESR WERE NOT UPDATED." | 
|---|
| 52 | .E  D | 
|---|
| 53 | ..   D TRANSACT^PRSPSAP2 | 
|---|
| 54 | ; remove any remaining PTP timecard locks held in this option | 
|---|
| 55 | ; D EX^PRSASR | 
|---|
| 56 | K ^TMP($J,"PRSPSAP") | 
|---|
| 57 | Q | 
|---|
| 58 | ; | 
|---|
| 59 | BLDLST(OUT,TLE,NN) ; BUILD LIST OF ALL APPROVAL ACTIONS FOR SINGLE EMPLOYEE | 
|---|
| 60 | N PRSIEN,PPE,PPI,AVAIL,DCNT,PRSD,GLOB,DFN | 
|---|
| 61 | S PRSIEN=0 | 
|---|
| 62 | S PRSIEN=$O(^PRSPC("ATL"_TLE,NN,PRSIEN)) Q:PRSIEN<1!($G(OUT)>0)  D | 
|---|
| 63 | .    S PPE="" | 
|---|
| 64 | .    F  S PPE=$O(^PRST(458,"ASA",PRSIEN,PPE)) Q:PPE=""!($G(OUT)>0)  D | 
|---|
| 65 | ..     S PPI=$O(^PRST(458,"B",PPE,0)) | 
|---|
| 66 | ..; get lock for PTP's entire PP, then add record (PUSH) that | 
|---|
| 67 | ..; requires supervisor action to the list | 
|---|
| 68 | ..    S DFN=PRSIEN | 
|---|
| 69 | ..; | 
|---|
| 70 | ..; $$availrec() locks PTP ESR node. | 
|---|
| 71 | ..;  unlock if supervisor bybasses unlock otherwise they | 
|---|
| 72 | ..;  are not unlocked until they are processed thru temp global | 
|---|
| 73 | ..;  & their status' are updated. | 
|---|
| 74 | ..    S AVAIL=$$AVAILREC^PRSLIB00("",.GLOB,.OUT) | 
|---|
| 75 | ..    Q:'AVAIL | 
|---|
| 76 | ..    ; | 
|---|
| 77 | ..;  add item to list and set up a day cross ref with count of days | 
|---|
| 78 | ..     S (DCNT,PRSD)=0 | 
|---|
| 79 | ..     F  S PRSD=$O(^PRST(458,"ASA",PRSIEN,PPE,PRSD)) Q:PRSD'>0  D | 
|---|
| 80 | ...       S DCNT=DCNT+1 | 
|---|
| 81 | ...       D PUSH^PRSPSAP1(PPI,PRSIEN,PRSD,DCNT) | 
|---|
| 82 | ; | 
|---|
| 83 | Q | 
|---|
| 84 | ; | 
|---|
| 85 | SUMMARY(AA) ; | 
|---|
| 86 | W @IOF,!!!,"Supervisory Action Summary" | 
|---|
| 87 | W !!,$J(AA,6)," actions require your electronic signature before being" | 
|---|
| 88 | W !,?(6-$L(AA)),"  committed to the database." | 
|---|
| 89 | I AA("A")>0 W !,$J(AA("A"),6)," ESR record marked for approval. (signature required)" | 
|---|
| 90 | I AA("R")>0 W !,$J(AA("R"),6)," ESR records marked for resubmission. (signature required)" | 
|---|
| 91 | I AA("B")>0 W !,$J(AA("B"),6)," ESR records explicitly bypassed." | 
|---|
| 92 | I AA("N")>0 W !,$J(AA("N"),6)," ESR records with no action." | 
|---|
| 93 | Q | 
|---|
| 94 | GETACT(ESRDTS,PRSIEN,PPI) ; return user choice of # (1-ACTCNT) or action | 
|---|
| 95 | ; return 0 for ^ at first action prompt | 
|---|
| 96 | ; return null for no response (user hit return) | 
|---|
| 97 | ; return -1 if ^ at 2nd prompt (action on single day prompt) | 
|---|
| 98 | N DIR,DIRUT,ACT,CT,NUMS | 
|---|
| 99 | ; | 
|---|
| 100 | ; get total items + marked items CT CT(1) | 
|---|
| 101 | D MARKCNT^PRSPSAP1(.CT,PRSIEN,PPI) | 
|---|
| 102 | I CT>1 D | 
|---|
| 103 | .  S NUMS=";" | 
|---|
| 104 | .  F I=1:1:CT D | 
|---|
| 105 | ..    S NUMS=NUMS_I_":"_$P(ESRDTS(I),U,2)_";" | 
|---|
| 106 | ; | 
|---|
| 107 | ; status already marked on all days | 
|---|
| 108 | I (CT>1)&(CT=CT(1)) D | 
|---|
| 109 | .  S DIR(0)="SAO^"_NUMS | 
|---|
| 110 | .  S DIR("A")="Select an item #: " | 
|---|
| 111 | .  S DIR("?",1)="Enter an item from the left column to change status for that day" | 
|---|
| 112 | E  D | 
|---|
| 113 | .; if all days don't have a superV action (marked) then prompt for | 
|---|
| 114 | .; action on remaining days or pick a day (item) | 
|---|
| 115 | .  I CT>1 D | 
|---|
| 116 | ..  S DIR(0)="SAO^A:Approve;B:Bypass;R:Resubmit"_NUMS | 
|---|
| 117 | ..  S DIR("A")="(A)pprove, (B)ypass, (R)esubmit or enter an item #: " | 
|---|
| 118 | ..  S DIR("?",1)="Enter an action for all records without a status or enter an item #" | 
|---|
| 119 | ..  S DIR("?",2)="to then pick an action for that day." | 
|---|
| 120 | ..  S DIR("?",3)="  Type R for Resubmit when the part-time physician needs to correct an ESR day." | 
|---|
| 121 | ..  S DIR("?",4)="  Type B for Bypass to skip the day(s) for now and approve at a later time." | 
|---|
| 122 | ..  S DIR("?",5)="  Type A for Approve when the ESR day(s) appears correct." | 
|---|
| 123 | .E  D | 
|---|
| 124 | ..; if only one item to pick, don't ask for item # | 
|---|
| 125 | ..  S DIR(0)="SAO^A:Approve;B:Bypass;R:Resubmit" | 
|---|
| 126 | ..  S DIR("A")="(A)pprove, (B)ypass, (R)esubmit: " | 
|---|
| 127 | ..  S DIR("?",1)="Enter an action for all records without a status" | 
|---|
| 128 | ..  S DIR("?",2)="  Type R for Resubmit when the part-time physician needs to correct an ESR day." | 
|---|
| 129 | ..  S DIR("?",3)="  Type B for Bypass to skip the day(s) for now and approve at a later time." | 
|---|
| 130 | ..  S DIR("?",4)="  Type A for Approve when the ESR day(s) appears correct." | 
|---|
| 131 | ; | 
|---|
| 132 | S DIR("?")="  Press [enter] to move to the next part time physician." | 
|---|
| 133 | D ^DIR | 
|---|
| 134 | S PICK=$G(Y) | 
|---|
| 135 | I $G(Y)="" Q "" | 
|---|
| 136 | ; if there was only one item then set pick to 1 plus action | 
|---|
| 137 | I CT=1 S PICK=PICK_"^1" | 
|---|
| 138 | I $G(DIRUT) S PICK=0 | 
|---|
| 139 | ; | 
|---|
| 140 | ; item was picked | 
|---|
| 141 | I PICK>0,(PICK<(CT+1)) D | 
|---|
| 142 | .  N DAYLNS,DIR,DIRUT,ESR,HPL | 
|---|
| 143 | .  D GETESR^PRSPSAP1(.ESR,PPI,PRSIEN,+ESRDTS(PICK)) | 
|---|
| 144 | .  N COUNT S COUNT=PICK,COUNT(1)=0 | 
|---|
| 145 | .  W ! D DAY^PRSPSAPU(.DAYLNS,ESRDTS(COUNT),.ESR,PRSIEN,PPI) | 
|---|
| 146 | .  S ACT=PICK | 
|---|
| 147 | .  S DIR(0)="SA^A:Approve;B:Bypass;R:Resubmit" | 
|---|
| 148 | .  S DIR("A")="(A)pprove, (B)ypass, (R)esubmit: " | 
|---|
| 149 | .  S DIR("?")="Select an action for the ESR day above." | 
|---|
| 150 | .  S DIR("?",1)="  Type R for Resubmit when the part-time physician needs to correct an ESR day." | 
|---|
| 151 | .  S DIR("?",2)="  Type B for Bypass to skip the day(s) for now and approve at a later time." | 
|---|
| 152 | .  S DIR("?",3)="  Type A for Approve when the ESR day(s) appears correct." | 
|---|
| 153 | .  S DIR("?",4)="  Type ^ to redisplay the current part time physician." | 
|---|
| 154 | .  D GETDAY^PRSPSAPU(.DAYLNS,.ESRDTS,.ESR,PICK,PRSIEN,PPI) | 
|---|
| 155 | .  S HPL=0 | 
|---|
| 156 | .  F  S HPL=$O(DAYLNS(HPL)) Q:HPL'>0  D | 
|---|
| 157 | ..    S DIR("?",HPL+4)=$G(DAYLNS(HPL)) | 
|---|
| 158 | .  D ^DIR | 
|---|
| 159 | .  S PICK=$G(Y)_"^"_ACT | 
|---|
| 160 | .  I $G(DIRUT) S PICK=-1 | 
|---|
| 161 | Q PICK | 
|---|
| 162 | ; | 
|---|