| [613] | 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 |  ;
 | 
|---|