1 | PRSPSAP3 ;WOIFO/JAH - Supervisor Approve-update pt phys timecard ;01/05/05
|
---|
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 | MARK(ACT,PRSIEN,PPI) ; mark supervisors action on temp global
|
---|
6 | ; ESR STATUS
|
---|
7 | ; when updating a single record we overwrite. When updating
|
---|
8 | ; multiple records we will only update ones with no status.
|
---|
9 | N ITEM,OLDACT,REM,OLDREM
|
---|
10 | S ITEM=$P($G(ACT),U,2)
|
---|
11 | S ACT=$P($G(ACT),U)
|
---|
12 | I ITEM>0 D
|
---|
13 | . S PRSD=$G(^TMP($J,"PRSPSAP",PRSIEN,PPI,"B",ITEM))
|
---|
14 | . S ^TMP($J,"PRSPSAP",PRSIEN,PPI,PRSD,1)=ACT
|
---|
15 | .; add remarks to the resubmit action, otherwise remove old remarks
|
---|
16 | . I ACT="R" D
|
---|
17 | .. S OLDREM=$G(^TMP($J,"PRSPSAP",PRSIEN,PPI,PRSD,2))
|
---|
18 | .. S REM=$$GETREM(OLDREM)
|
---|
19 | .. I REM'="^" S ^TMP($J,"PRSPSAP",PRSIEN,PPI,PRSD,2)=$G(REM)
|
---|
20 | . E D
|
---|
21 | .. K ^TMP($J,"PRSPSAP",PRSIEN,PPI,PRSD,2)
|
---|
22 | E D
|
---|
23 | . I ACT="R" S REM=$$GETREM()
|
---|
24 | . S PRSD=0
|
---|
25 | . F S PRSD=$O(^TMP($J,"PRSPSAP",PRSIEN,PPI,PRSD)) Q:PRSD'>0 D
|
---|
26 | .. S OLDACT=$G(^TMP($J,"PRSPSAP",PRSIEN,PPI,PRSD,1))
|
---|
27 | .. I OLDACT="" D
|
---|
28 | ... S ^TMP($J,"PRSPSAP",PRSIEN,PPI,PRSD,1)=ACT
|
---|
29 | ... I $G(ACT)="R" S ^TMP($J,"PRSPSAP",PRSIEN,PPI,PRSD,2)=$G(REM)
|
---|
30 | Q
|
---|
31 | GETREM(SNIDE) ; return supervisor remark for a resubmit request
|
---|
32 | ; WE CAN'T EDIT THE FIELD DIRECTLY BECAUSE THIS IS A TRANSACTION
|
---|
33 | ; AND NOTHING IS COMMITED TO THE DB UNTIL THEY SIGN
|
---|
34 | N DIR,DIRUT,REM,DTOUT,DUOUT,X,Y
|
---|
35 | S REM=""
|
---|
36 | S DIR(0)="458.02,148^O"
|
---|
37 | I $G(SNIDE)'="" S DIR("B")=SNIDE
|
---|
38 | S DIR("A")="Enter Remarks"
|
---|
39 | D ^DIR
|
---|
40 | S REM=$G(Y)
|
---|
41 | I $D(DTOUT)!$D(DUOUT) S REM="^"
|
---|
42 | Q REM
|
---|
43 | ;
|
---|
44 | CANTPOST(ER,TCS,PPI,PRSIEN,PRSD,ESRN) ; GIVE SUPERVISOR CAN'T POST INFORMATION
|
---|
45 | ;
|
---|
46 | N I,LNCNT
|
---|
47 | D HDR(PRSIEN,PPI,PRSD)
|
---|
48 | W !!,"Time Discrepancies must be resolved. Timecard Status: "
|
---|
49 | W $S(TCS="P":"RELEASED TO PAYROLL",1:"TRANSMITTED TO AUSTIN")
|
---|
50 | W !,"Payroll must "
|
---|
51 | W $S(TCS="P":"return ",1:"initiate corrected ")
|
---|
52 | W "timecard or physician must resubmit ESR."
|
---|
53 | ;
|
---|
54 | W !!!,$$ASK^PRSLIB00(1)
|
---|
55 | D HDR(PRSIEN,PPI,PRSD)
|
---|
56 | ;
|
---|
57 | ;
|
---|
58 | W !!,?15,"TIME DISCREPANCIES BETWEEN TIMECARD AND ESR"
|
---|
59 | ;W !,?15,"-------------------------------------------"
|
---|
60 | W !,?6,"Error",?21,"Type of Time",?39,"Timecard Hrs",?57,"ESR Hrs"
|
---|
61 | W !,?2,"--------------------------------------------------------------"
|
---|
62 | S I=0 F S I=$O(ER(I)) Q:I'>0 D
|
---|
63 | . W !,?2,$P(ER(I),U,2),?26,$P(ER(I),U),?44,$P(ER(I),U,3),?60,$P(ER(I),U,4)
|
---|
64 | ;
|
---|
65 | W !!,?32,"ESR POSTING"
|
---|
66 | ;W !,?32,"-----------"
|
---|
67 | N ESR,DAYLNS,DTE,PDT,DAY
|
---|
68 | S PDT=$G(^PRST(458,PPI,2))
|
---|
69 | S DTE=$P(PDT,U,PRSD)
|
---|
70 | D GETESR^PRSPSAP1(.ESR,PPI,PRSIEN,PRSD)
|
---|
71 | D COLHDRS^PRSPSAP1
|
---|
72 | W ! F I=1:1:(IOM-1) W "-"
|
---|
73 | W ! D DAY^PRSPSAPU(.DAYLNS,PRSD_"^"_DTE,.ESR,PRSIEN,PPI)
|
---|
74 | W !!,?30,"TIMECARD POSTING"
|
---|
75 | ;W !,?30,"----------------"
|
---|
76 | W !,?7,"Date",?21,"Scheduled Tour",?46,"Tour Exceptions"
|
---|
77 | W !,?2,"------------------------------------------------------------"
|
---|
78 | N DFN S DAY=PRSD,DFN=PRSIEN D F0^PRSADP1
|
---|
79 | W !
|
---|
80 | Q
|
---|
81 | ;
|
---|
82 | HDR(PRSIEN,PPI,PRSD) ;
|
---|
83 | W @IOF,!!,"ESR approval REJECTED for "
|
---|
84 | W $P($G(^PRSPC(PRSIEN,0)),"^")," on day ",PRSD," in PP "
|
---|
85 | W $P($G(^PRST(458,PPI,0)),U),"."
|
---|
86 | Q
|
---|
87 | ;
|
---|
88 | ;===================================================================
|
---|
89 | ;
|
---|
90 | CMPESRTC(ERCNT,ERMSG,ESRN,TCN,PPI,PRSIEN,PRSD) ;compare the ESR to the timecard
|
---|
91 | ;
|
---|
92 | ; OUTPUT VARIABLE
|
---|
93 | ;
|
---|
94 | ; ERMSG: Array of mismatches in a 4 piece ^ message format
|
---|
95 | ; type of time ^ message ^ timecard total ^ ESR total
|
---|
96 | ;
|
---|
97 | ; LOCAL VARS
|
---|
98 | ; TT : Type of time code from type of time file (2 exceptions for
|
---|
99 | ; WP on timecard with remark 3, awol is "WPAWOL" OR
|
---|
100 | ; remarks 4, on suspension is "WPSUSP")
|
---|
101 | ; ERFND : flag that some mismatch was found
|
---|
102 | ; ESRT
|
---|
103 | ; TCT : total time
|
---|
104 | ;
|
---|
105 | N TT,ERFND,ESRT,TCT,PRSTA
|
---|
106 | ;
|
---|
107 | S (ERFND,ERMSG,ERCNT)=0
|
---|
108 | I ($G(PPI)'>0)!($G(PRSIEN)'>0)!($G(PRSD)'>0) D Q
|
---|
109 | . S ERMSG=U_"FATAL ERROR: Missing internal lookup parameters."_U_U
|
---|
110 | I $G(ESRN)="" S ESRN=$G(^PRST(458,PPI,"E",PRSIEN,"D",PRSD,5))
|
---|
111 | I $G(TCN)="" S TCN=$G(^PRST(458,PPI,"E",PRSIEN,"D",PRSD,2))
|
---|
112 | D ESRTCAR(.PRSTA,ESRN,TCN,PPI,PRSIEN,PRSD)
|
---|
113 | ;
|
---|
114 | ;
|
---|
115 | ; Check for any leave posting mismatch (IGNORE WPAWOL, WPSUSP, RG)
|
---|
116 | S TT=""
|
---|
117 | F S TT=$O(PRSTA(TT)) Q:TT="" D
|
---|
118 | . Q:"^HX^AL^AA^DL^ML^RL^SL^CB^AD^WP^TR^TV^"'[(U_TT_U)
|
---|
119 | . S TCT=+$P(PRSTA(TT),U),ESRT=+$P(PRSTA(TT),U,2)
|
---|
120 | . I TCT'=ESRT D
|
---|
121 | .. S ERCNT=ERCNT+1
|
---|
122 | .. S ERMSG(ERCNT)=TT_U_"LEAVE mismatch"_U_TCT_U_ESRT,ERFND=1
|
---|
123 | ;
|
---|
124 | ; Check for problems with NON PAY. If non pay is on the timecard
|
---|
125 | ; then only NO WORK is accepatable on the ESR.
|
---|
126 | ;
|
---|
127 | I $P($G(PRSTA("NP")),U)>0 D
|
---|
128 | . S TT=""
|
---|
129 | . F S TT=$O(PRSTA(TT)) Q:TT=""!(ERFND) D
|
---|
130 | .. S ESRT=+$P(PRSTA(TT),U,2)
|
---|
131 | .. I +ESRT>0 D
|
---|
132 | ... S ERCNT=ERCNT+1
|
---|
133 | ... S ERMSG(ERCNT)=TT_U_"NON PAY mismatch"_U_U_ESRT
|
---|
134 | Q
|
---|
135 | ;
|
---|
136 | ;===================================================================
|
---|
137 | ;
|
---|
138 | ESRTCAR(PRSTA,ESRN,TCN,PPI,PRSIEN,PRSD) ;
|
---|
139 | ; return an array subscripted by types of time (TT) for each TT
|
---|
140 | ; found in either the ESR or timecard. Piece 1 of each TT subscript
|
---|
141 | ; represents the timcard and piece 2 represents the ESR.
|
---|
142 | ; Both pieces contain the total hours in decimal format of that TT.
|
---|
143 | ;
|
---|
144 | ;
|
---|
145 | ; loop through the timecard and the ESR totaling the various types of
|
---|
146 | ; time for each. Exceptions are as follows:
|
---|
147 | ; 1. when timecard has WP with remarks AWOL or On Suspension then
|
---|
148 | ; don't add to WP total, since this can never be recorded on
|
---|
149 | ; the ESR, instead store on special node ("WPAWOL") or ("WPSUSP")
|
---|
150 | ;
|
---|
151 | ; INPUT VARIABLES
|
---|
152 | ;
|
---|
153 | ; ESRN : electronic subsidiary record posting node
|
---|
154 | ; TCN : timecard posting node
|
---|
155 | ; PPI, PRSIEN, PRSD : package standard
|
---|
156 | ;
|
---|
157 | ;
|
---|
158 | ;LOCAL variables
|
---|
159 | ; TCPT : timecard posting type (worked or absent all day or except)
|
---|
160 | ; TOD : Tour of duty pointer
|
---|
161 | ; PRSML : Length of meal in minutes
|
---|
162 | ; PRSTA : Time Array subscripted by type of time code (piece one is
|
---|
163 | ; the timecard total time and piece 2 is esr total time
|
---|
164 | ; MTT : Type of time associated with the meal
|
---|
165 | ; ZNODE : zero node from timecard for tour pointers and lengths
|
---|
166 | ;
|
---|
167 | ;
|
---|
168 | N TCPT,TOD,PRSML,ZNODE,T1LEN,T2LEN,NETRG,TCEXAMT
|
---|
169 | N TSEG,TT,BEG,END,MEAL,HRS,SEGHRS,TRC
|
---|
170 | K PRSTA
|
---|
171 | ;
|
---|
172 | S ZNODE=$G(^PRST(458,PPI,"E",PRSIEN,"D",PRSD,0))
|
---|
173 | ;
|
---|
174 | ; get tour length in case we need to determine amount of time
|
---|
175 | ; for the tour when we don't have exceptions on the timecard or
|
---|
176 | ; we need the implied RG
|
---|
177 | ;
|
---|
178 | S T1LEN=$P(ZNODE,U,8)
|
---|
179 | S T2LEN=$P(ZNODE,U,14)
|
---|
180 | ;
|
---|
181 | ;
|
---|
182 | ;ESR
|
---|
183 | ;
|
---|
184 | ;
|
---|
185 | F I=1:5:31 D
|
---|
186 | . S TSEG=$P(ESRN,U,I,I+4)
|
---|
187 | . S TT=$P(TSEG,U,3)
|
---|
188 | .;
|
---|
189 | .;this line may need to be removed since we are simply looking
|
---|
190 | .; at all types of time at this stage (also would make this call
|
---|
191 | .; more useful as an API to get all types of time)
|
---|
192 | .;
|
---|
193 | . Q:"^RG^HX^AL^AA^DL^ML^RL^SL^CB^AD^WP^TR^TV^"'[(U_TT_U)
|
---|
194 | . S HRS=$P($G(PRSTA(TT)),U,2)
|
---|
195 | . S BEG=$P(TSEG,U)
|
---|
196 | . S END=$P(TSEG,U,2)
|
---|
197 | . S MEAL=$P(TSEG,U,5)
|
---|
198 | . S SEGHRS=$$AMT^PRSPSAPU(BEG,END,MEAL)
|
---|
199 | . S $P(PRSTA(TT),U,2)=SEGHRS+HRS
|
---|
200 | ;
|
---|
201 | ; if timecard isn't posted there's no point in going on
|
---|
202 | Q:(+$P($G(^PRST(458,PPI,"E",PRSIEN,"D",PRSD,10)),U,2)'>0)
|
---|
203 | ;
|
---|
204 | ;Timecard with exceptions (no full day work or leave)
|
---|
205 | ;
|
---|
206 | S TCPT=$P($G(^PRST(458,PPI,"E",PRSIEN,"D",PRSD,10)),U,4)
|
---|
207 | I '((TCPT=1)!(TCPT=2)) D
|
---|
208 | . F I=1:4:24 D
|
---|
209 | .. S TSEG=$P(TCN,U,I,I+3)
|
---|
210 | .. S TT=$P(TSEG,U,3)
|
---|
211 | .. S TRC=$P(TSEG,U,4)
|
---|
212 | ..; check for awol and store separate from other WP
|
---|
213 | .. I TT="WP" S TT=$S(TRC=3:"WPAWOL",TRC=4:"WPSUSP",1:TT)
|
---|
214 | .. Q:"^HX^AL^AA^DL^ML^RL^SL^CB^AD^WP^TR^TV^"'[(U_TT_U)
|
---|
215 | .. S HRS=$P($G(PRSTA(TT)),U)
|
---|
216 | .. S BEG=$P(TSEG,U)
|
---|
217 | .. S END=$P(TSEG,U,2)
|
---|
218 | .. S SEGHRS=$$AMT^PRSPSAPU(BEG,END,0)
|
---|
219 | .. S $P(PRSTA(TT),U)=SEGHRS+HRS
|
---|
220 | E D
|
---|
221 | .;
|
---|
222 | .; if timecard is posted w/exception or work for the full day
|
---|
223 | .; then use the tour 1 and 2 lengths to record hours
|
---|
224 | .;
|
---|
225 | . I TCPT=2 D
|
---|
226 | ..; full day exception posted: get type of time and remarks
|
---|
227 | .. S TT="" F I=1:4:24 Q:TT'="" S TT=$P(TCN,U,I+2),TRC=$P(TCN,U,I+3)
|
---|
228 | .. I TT="WP" S TT=$S(TRC=3:"WPAWOL",TRC=4:"WPSUSP",1:TT)
|
---|
229 | . ;
|
---|
230 | . ; full day work
|
---|
231 | . I TCPT=1 S TT="RG"
|
---|
232 | .;
|
---|
233 | . S $P(PRSTA(TT),U)=T1LEN+T2LEN
|
---|
234 | ;
|
---|
235 | ; RG should not be coded on the PTP's timecard but we will tabulate
|
---|
236 | ; the implied RG by reducing the tour length by any exceptions totals
|
---|
237 | ;
|
---|
238 | I $P($G(PRSTA("RG")),U)="" D
|
---|
239 | . S NETRG=T1LEN+T2LEN
|
---|
240 | . S TT=""
|
---|
241 | . F S TT=$O(PRSTA(TT)) Q:TT="" D
|
---|
242 | ..; only times that reduce RG are included
|
---|
243 | ..; (WP, WPAWOL, WPSUSP & NP) reduce RG
|
---|
244 | .. Q:"^HX^AL^AA^DL^ML^RL^SL^CB^AD^TR^TV^"[(U_TT_U)
|
---|
245 | .. Q:TT="RG"
|
---|
246 | .. S TCEXAMT=$P(PRSTA(TT),U)
|
---|
247 | .. S NETRG=NETRG-TCEXAMT
|
---|
248 | . S $P(PRSTA("RG"),U)=NETRG
|
---|
249 | ;
|
---|
250 | Q
|
---|