| 1 | PRSASR1 ;WCIOFO/JAH - Display VCS, Fee, ED ;02/20/08 | 
|---|
| 2 | ;;4.0;PAID;**6,21,82,93,116**;Sep 21, 1995;Build 23 | 
|---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | VCS ; Display VCS Sales/Fee Basis | 
|---|
| 5 | ; | 
|---|
| 6 | N OLDPP | 
|---|
| 7 | S PAYP=$P($G(^PRSPC(DFN,0)),"^",21) | 
|---|
| 8 | ; Check the pay plan for the pay period we are dealing with | 
|---|
| 9 | ; in case it's a previous pay period where an employee | 
|---|
| 10 | ; had a different pay plan. | 
|---|
| 11 | ;  1st put pay period in YY-PP format 4 call 2 lookup old pay plan. | 
|---|
| 12 | ;Only check if called from option Display employee pay period PPERIOD | 
|---|
| 13 | ;will be defined. | 
|---|
| 14 | I $G(PPERIOD) D | 
|---|
| 15 | .;S PPERIOD=$S(Y["-":$P(Y,"^",2),1:$P(^PRST(458,$P(Y,"^"),0),"^")) | 
|---|
| 16 | .S OLDPP=$$OLDPP^PRS8UT(PPERIOD,DFN) | 
|---|
| 17 | .I OLDPP'=0,(OLDPP'=PAYP) D | 
|---|
| 18 | .. S PAYP=OLDPP | 
|---|
| 19 | .. W !,"Employee is NOT currently under this pay plan." | 
|---|
| 20 | ; | 
|---|
| 21 | W !!?30,$S(PAYP="F":"Fee Basis Appointee",1:"VCS Commission Sales") | 
|---|
| 22 | W !!?13,"Sun       Mon       Tue       Wed       Thu       Fri       Sat",! | 
|---|
| 23 | W !,"Week 1" S L1=1 F K=1:1:7 S L1=L1+10,Z1=$P(Z,"^",K) I Z1'="" W ?L1,$J(Z1,7,2) | 
|---|
| 24 | W !,"Week 2" S L1=1 F K=8:1:14 S L1=L1+10,Z1=$P(Z,"^",K) I Z1'="" W ?L1,$J(Z1,7,2) | 
|---|
| 25 | I PAYP="F" W !! F K=19:1:21 S Z1=$P(Z,"^",K) W "Total ",$P("Hours Days Procedures"," ",K-18),": ",Z1,"    " | 
|---|
| 26 | Q | 
|---|
| 27 | ED ; Display Envir. Diff. | 
|---|
| 28 | W !!?26,"Environmental Differentials",! | 
|---|
| 29 | S Y="" F K=1:2:5 S Z1=$P(Z,"^",K) Q:'Z1  S:Y'="" Y=Y_"; " S Y=Y_$P($G(^PRST(457.6,+Z1,0)),"^",1)_" "_$P(Z,"^",K+1)_" Hrs." | 
|---|
| 30 | I Y'="" W !,"Week 1: ",Y | 
|---|
| 31 | S Y="" F K=7:2:11 S Z1=$P(Z,"^",K) Q:'Z1  S:Y'="" Y=Y_"; " S Y=Y_$P($G(^PRST(457.6,+Z1,0)),"^",1)_" "_$P(Z,"^",K+1)_" Hrs." | 
|---|
| 32 | I Y'="" W !,"Week 2: ",Y | 
|---|
| 33 | Q | 
|---|
| 34 | ; | 
|---|
| 35 | LD ; Display changes to the Labor Distribution Codes within the Pay | 
|---|
| 36 | ; Period. | 
|---|
| 37 | ; | 
|---|
| 38 | N DASH,DESC,IENS,LDCC,LDCCB,LDCCEX,LDCODE,LDCNT,LDDOA,LDFCP | 
|---|
| 39 | N LDHOLD,LDPCT,LDTOI,PRSLD,Y | 
|---|
| 40 | S $P(DASH,"-",80)="" | 
|---|
| 41 | W ! | 
|---|
| 42 | D LDHOLD | 
|---|
| 43 | W !,"Current Labor Distribution Values:" | 
|---|
| 44 | S LDDOA=$$GET1^DIQ(450,DFN,756,"E") | 
|---|
| 45 | S LDCCB=$$GET1^DIQ(450,DFN,755,"E") | 
|---|
| 46 | S LDTOI=$$GET1^DIQ(450,DFN,755.1,"E") | 
|---|
| 47 | W !,LDDOA,?24,LDCCB,?61,LDTOI | 
|---|
| 48 | F PRSLD=1:1:4 D | 
|---|
| 49 | . S LDCODE=$$GET1^DIQ(450.0757,PRSLD_","_DFN,1) | 
|---|
| 50 | . S LDPCT=$$GET1^DIQ(450.0757,PRSLD_","_DFN,2) | 
|---|
| 51 | . S LDCC=$$GET1^DIQ(450.0757,PRSLD_","_DFN,3) | 
|---|
| 52 | . S Y=LDCC,SUB454="CC" | 
|---|
| 53 | . D OT^PRSDUTIL K SUB454 | 
|---|
| 54 | . S LDCCEX=$E(Y,1,30) | 
|---|
| 55 | . S LDFCP=$$GET1^DIQ(450.0757,PRSLD_","_DFN,4) | 
|---|
| 56 | . W !,"Code",PRSLD,": ",LDCODE,?12,LDPCT,?24,LDCC," - ",LDCCEX,?70,LDFCP | 
|---|
| 57 | ; | 
|---|
| 58 | W !!,"The previous Labor Distribution Values:" | 
|---|
| 59 | S LDCNT="A" | 
|---|
| 60 | S LDCNT=$O(^PRST(458,PPI,"E",DFN,"LDAUD",LDCNT),-1) | 
|---|
| 61 | Q:'LDCNT | 
|---|
| 62 | S IENS=LDCNT_","_DFN_","_PPI_"," | 
|---|
| 63 | S LDDOA=$$GET1^DIQ(458.1105,IENS,1,"E") | 
|---|
| 64 | S LDCCB=$$GET1^DIQ(458.1105,IENS,2,"E") | 
|---|
| 65 | S LDTOI=$$GET1^DIQ(458.1105,IENS,3,"E") | 
|---|
| 66 | W !,LDDOA,?24,LDCCB,?61,LDTOI | 
|---|
| 67 | F PRSLD=1:1:4 D | 
|---|
| 68 | . S IENS=PRSLD_","_LDCNT_","_DFN_","_PPI_"," | 
|---|
| 69 | . S LDCODE=$$GET1^DIQ(458.11054,IENS,1) | 
|---|
| 70 | . S LDPCT=$$GET1^DIQ(458.11054,IENS,2) | 
|---|
| 71 | . S LDCC=$$GET1^DIQ(458.11054,IENS,3) | 
|---|
| 72 | . S Y=LDCC,SUB454="CC" | 
|---|
| 73 | . D OT^PRSDUTIL K SUB454 | 
|---|
| 74 | . S LDCCEX=$E(Y,1,30) | 
|---|
| 75 | . S LDFCP=$$GET1^DIQ(458.11054,IENS,4) | 
|---|
| 76 | . W !,"Code",PRSLD,": ",LDCODE,?12,LDPCT,?24,LDCC," - ",LDCCEX,?70,LDFCP | 
|---|
| 77 | Q | 
|---|
| 78 | ; | 
|---|
| 79 | LDHDR ; Labor Distribution Header information | 
|---|
| 80 | ; | 
|---|
| 81 | W !?15,"Labor Distribution Changes within the Pay Period:" | 
|---|
| 82 | W !,"Date/Time",?24,"Changed by",?61,"Type of Interface" | 
|---|
| 83 | W !,"Code",?12,"Percent",?24,"Cost Center - Description" | 
|---|
| 84 | W ?65,"Fund Ctrl Pt" | 
|---|
| 85 | W !,DASH | 
|---|
| 86 | Q | 
|---|
| 87 | ; | 
|---|
| 88 | LDHOLD ; Pause of more LD changes that will fit on 1 screen. | 
|---|
| 89 | ; | 
|---|
| 90 | N X | 
|---|
| 91 | S LDHOLD=$$ASK^PRSLIB00(1) | 
|---|
| 92 | S X=$G(^PRSPC(DFN,0)) | 
|---|
| 93 | W !,@IOF,?3,$P(X,"^",1) | 
|---|
| 94 | S X=$P(X,"^",9) | 
|---|
| 95 | I X W ?68,$E(X),"XX-XX-",$E(X,6,9) | 
|---|
| 96 | W !,DASH | 
|---|
| 97 | D LDHDR | 
|---|
| 98 | Q | 
|---|
| 99 | ; | 
|---|
| 100 | PTP(PRSIEN,PPI) ; Updates hours credited for PT Phys w/ Memorandums | 
|---|
| 101 | ; This API can be used for initial and subsequent calculation | 
|---|
| 102 | ; of the PTP's ESR. | 
|---|
| 103 | ;    algorithm for this API follows: | 
|---|
| 104 | ; 1. Grab copy of currently stored pay period hours | 
|---|
| 105 | ; 2. Look at ESR/timecard data to recalculate pay period hours | 
|---|
| 106 | ; 3. Calculate net difference between 1 and 2 | 
|---|
| 107 | ; 4. update current pay period with new pp totals from (2) above | 
|---|
| 108 | ; 5. add net diff (3) to memo totals | 
|---|
| 109 | ; | 
|---|
| 110 | N AHRS,AHTCM,AMT,COHRS,DIFFNP,DIFFRG,DIFFWP,INPH,ITHP,ITHW,IWPH | 
|---|
| 111 | N MDAT,MDATA,MEAL,MIEN,MPPIEN,POHC,POT,PPC,PPE | 
|---|
| 112 | N PPHRS,PPNP,PPWP,PRSX,START,STOP,THP,TOT,TOTAL,TOTNP,TOTWP | 
|---|
| 113 | S MDAT=$P($G(^PRST(458,PPI,1)),U,1) | 
|---|
| 114 | S MIEN=+$$MIEN^PRSPUT1(PRSIEN,MDAT) | 
|---|
| 115 | Q:'MIEN  ; Not a PTP w/ memo | 
|---|
| 116 | S PPE=$P($G(^PRST(458,PPI,0)),U,1) | 
|---|
| 117 | ; | 
|---|
| 118 | ; Locate this PP in the PTP's memorandum | 
|---|
| 119 | S MPPIEN=$O(^PRST(458.7,MIEN,9,"B",PPE,0)) | 
|---|
| 120 | Q:'MPPIEN  ; PP not found within memo (###exception message) | 
|---|
| 121 | ; | 
|---|
| 122 | ;get the current values for this pay period under the memo. | 
|---|
| 123 | S PRSX=$G(^PRST(458.7,MIEN,9,MPPIEN,0)) | 
|---|
| 124 | S PPHRS=+$P(PRSX,U,2) ; Actual hours of work credited | 
|---|
| 125 | S PPNP=+$P(PRSX,U,3)  ; Actual hours of Non Pay | 
|---|
| 126 | S PPWP=+$P(PRSX,U,4)  ; Actual hours of LWOP | 
|---|
| 127 | K PRSX | 
|---|
| 128 | ; | 
|---|
| 129 | ; Load the memo totals | 
|---|
| 130 | S MDATA=$G(^PRST(458.7,MIEN,0)) | 
|---|
| 131 | S AHRS=+$P(MDATA,U,4)  ; Agreed Hours | 
|---|
| 132 | S COHRS=+$P(MDATA,U,9) ; Carryover Hours | 
|---|
| 133 | S ITHW=+$P(MDATA,U,10) ; Initial Total Hours Worked | 
|---|
| 134 | S ITHP=+$P(MDATA,U,11) ; Initial Total Hours Paid | 
|---|
| 135 | S INPH=+$P(MDATA,U,12) ; Initial Non-Pay Hours | 
|---|
| 136 | S IWPH=+$P(MDATA,U,13) ; Initial Without Pay Hours | 
|---|
| 137 | S (AHTCM,DIFFRG,DIFFNP,DIFFWP)=0 | 
|---|
| 138 | ; | 
|---|
| 139 | ; Get Non pay and Leave without pay times from 8b string or recalc. | 
|---|
| 140 | N TAMTS | 
|---|
| 141 | S TAMTS("WP","Leave Without Pay")="" | 
|---|
| 142 | S TAMTS("NP","Non-Pay Time")="" | 
|---|
| 143 | D PP8BAMT^PRSPUT3(.TAMTS,PPI,PRSIEN) | 
|---|
| 144 | S TOTAL("WP")=$G(TAMTS("WP","Leave Without Pay")) | 
|---|
| 145 | S TOTAL("NP")=$G(TAMTS("NP","Non-Pay Time")) | 
|---|
| 146 | S DIFFNP=TOTAL("NP")-PPNP | 
|---|
| 147 | S DIFFWP=TOTAL("WP")-PPWP | 
|---|
| 148 | ; | 
|---|
| 149 | ; Loop thru day and ESR segments looking for leave and RG time | 
|---|
| 150 | N DAY,ESR,RGCODES,SEG,TOT | 
|---|
| 151 | S RGCODES="AA,AD,AL,CB,CP,DL,HX,ML,RG,RL,SL,TR,TV" | 
|---|
| 152 | S TOTAL("RG")=0 | 
|---|
| 153 | F DAY=1:1:14 D | 
|---|
| 154 | . ; only add totals for supervisor approved days | 
|---|
| 155 | . Q:$$GETSTAT^PRSPESR1(PRSIEN,PPI,DAY)'=5 | 
|---|
| 156 | . S ESR=$G(^PRST(458,PPI,"E",PRSIEN,"D",DAY,5)) | 
|---|
| 157 | . Q:ESR="" | 
|---|
| 158 | . F SEG=0:1:6 Q:$P(ESR,U,(5*SEG)+3)=""  D | 
|---|
| 159 | . . S TOT=$P(ESR,U,(5*SEG)+3) | 
|---|
| 160 | . . ; Types Of Time that might have been worked in week 1 | 
|---|
| 161 | . . I RGCODES[TOT D  Q | 
|---|
| 162 | . . . S TOTAL("RG")=TOTAL("RG")+$$AMT(ESR) | 
|---|
| 163 | ; | 
|---|
| 164 | ; Checks for Regular Time | 
|---|
| 165 | S DIFFRG=TOTAL("RG")-PPHRS | 
|---|
| 166 | ; determine number of memo pay periods that have been certified | 
|---|
| 167 | S PRSX=$$MEMCPP^PRSPUT3(MIEN) | 
|---|
| 168 | S PPC=$P(PRSX,U,2)+$S(PPE]$P(PRSX,U):1,1:0) | 
|---|
| 169 | ; | 
|---|
| 170 | ; Update pp totals with current calculated values | 
|---|
| 171 | K IEN4587,PRSFDA | 
|---|
| 172 | S IEN4587=MIEN_"," | 
|---|
| 173 | S PRSFDA(458.701,MPPIEN_","_IEN4587,1)=TOTAL("RG")  ; PP new REG hrs | 
|---|
| 174 | S PRSFDA(458.701,MPPIEN_","_IEN4587,2)=TOTAL("NP")  ; PP new NP hrs | 
|---|
| 175 | S PRSFDA(458.701,MPPIEN_","_IEN4587,3)=TOTAL("WP")  ; PP new WP hrs | 
|---|
| 176 | ; | 
|---|
| 177 | ; update memo grand totals with differences found | 
|---|
| 178 | S TOTNP=INPH+DIFFNP | 
|---|
| 179 | S TOTWP=IWPH+DIFFWP | 
|---|
| 180 | S PRSFDA(458.7,IEN4587,11)=TOTNP ; NP hrs | 
|---|
| 181 | S PRSFDA(458.7,IEN4587,12)=TOTWP ; WP hrs | 
|---|
| 182 | S PRSFDA(458.7,IEN4587,9)=ITHW+DIFFRG ; tot hrs worked (all creditable) | 
|---|
| 183 | ; | 
|---|
| 184 | ; If this is the first time the PP has been processed PPHRS will be null | 
|---|
| 185 | ; so add the average hrs/pp, otherwise this count has already been added | 
|---|
| 186 | S THP=ITHP+$S(PPHRS="":AHRS/26,1:0) | 
|---|
| 187 | S PRSFDA(458.7,IEN4587,10)=$FN(THP-DIFFNP-DIFFWP,"",2) ; tot hrs paid | 
|---|
| 188 | S PRSFDA(458.7,IEN4587,13)=$FN(PPC/26,"",2) ; % of memo completed | 
|---|
| 189 | ; % OF HOURS COMPLETED | 
|---|
| 190 | S POHC=$FN((ITHW+COHRS+DIFFRG)/(AHRS-TOTNP-TOTWP),"",2) | 
|---|
| 191 | S PRSFDA(458.7,IEN4587,14)=POHC | 
|---|
| 192 | ; | 
|---|
| 193 | ; ave hrs/pp to complete mem (if certifying last pay period then then | 
|---|
| 194 | ; you're out of pay periods so use 0.00 to report how many more hours) | 
|---|
| 195 | S AHTCM=$S(PPC>25:"0.00",1:$FN((AHRS-(ITHW+COHRS+DIFFRG)/(26-PPC)),"",2)) | 
|---|
| 196 | S PRSFDA(458.7,IEN4587,15)=AHTCM | 
|---|
| 197 | ; % off target | 
|---|
| 198 | S POT=((AHRS/26)*PPC)-TOTNP-TOTWP | 
|---|
| 199 | S POT=(ITHW+COHRS+DIFFRG)-POT/POT,POT=POT*100,POT=$FN(POT,"",2) | 
|---|
| 200 | S PRSFDA(458.7,IEN4587,16)=POT | 
|---|
| 201 | D FILE^DIE("","PRSFDA") | 
|---|
| 202 | Q | 
|---|
| 203 | ; | 
|---|
| 204 | AMT(ESR) ; Return hours elapsed for time segment in decimal format | 
|---|
| 205 | ;          deduct meal | 
|---|
| 206 | ;            e.g. AMT=2.5 (2 hours 30 min) | 
|---|
| 207 | N START,STOP,MEAL,AMT,X | 
|---|
| 208 | S START=$P(ESR,U,(5*SEG)+1),STOP=$P(ESR,U,(5*SEG)+2) | 
|---|
| 209 | S MEAL=$P(ESR,U,(5*SEG)+5) | 
|---|
| 210 | S AMT=$$ELAPSE^PRSPESR2(MEAL,START,STOP) | 
|---|
| 211 | S X=$P(AMT,":",2) S X=$S(X=30:5,X=15:25,X=45:75,1:0) | 
|---|
| 212 | S AMT=+$P(AMT,":",1)_"."_X | 
|---|
| 213 | Q AMT | 
|---|