| 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 |  ;
 | 
|---|