| [623] | 1 | PRSASR1 ;HISC/MGD - Display VCS, Fee, ED ;04/19/05
 | 
|---|
 | 2 |  ;;4.0;PAID;**6,21,82,93**;Sep 21, 1995;Build 7
 | 
|---|
 | 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,1,3),"-",$E(X,4,5),"-",$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
 | 
|---|