| [623] | 1 | PRSAENT ;HISC/MGD-Entitlement String ;10/21/04
 | 
|---|
 | 2 |  ;;4.0;PAID;**6,21,45,69,75,76,90,96**;Sep 21, 1995
 | 
|---|
 | 3 |  ;
 | 
|---|
 | 4 |  ;VARS:
 | 
|---|
 | 5 |  ; C0=employees 0 node of master record in file 450
 | 
|---|
 | 6 |  ; NH= employees 8B normal hours
 | 
|---|
 | 7 |  ; FLX= compressed/flextime code (0=none,C=compressed,F=flextime)
 | 
|---|
 | 8 |  ; PMP= premium pay indicator 
 | 
|---|
 | 9 |  ;     ( D = entitled Sun.,   F = entitled Sat./Sun.,
 | 
|---|
 | 10 |  ;       E = entitled variable Sat./Sun. premium pay,
 | 
|---|
 | 11 |  ;       G = entitled variable Sun. prem pay
 | 
|---|
 | 12 |  ;       X = title 5 employees
 | 
|---|
 | 13 |  ;       R, C, O = 3 types of firefighters )
 | 
|---|
 | 14 |  ; AC= 3 single char codes concat. w/o delims + a possible 4th char.
 | 
|---|
 | 15 |  ; AC= PP_DutyBasis(full-1,part-2,intermit-3)_FLSA(E=Exempt,N=NonExempt)
 | 
|---|
 | 16 |  ;     _(*EWXY8BT02S9P)
 | 
|---|
 | 17 |  ; PP= employees pay plan (possible chars 0AEFGJKLMNPQRSTUWXY)
 | 
|---|
 | 18 |  ; PB= pay basis-code for time condition for computing pay.
 | 
|---|
 | 19 |  ; TA= type of appointment (career, career conditional, etc.)
 | 
|---|
 | 20 |  ; OCC= 4 digit cost center for fund appropriation accounting
 | 
|---|
 | 21 |  ; LVG= one digit code for employees leave group.
 | 
|---|
 | 22 |  ; ASS= specialty assignment of physicians,dentists, nurses,
 | 
|---|
 | 23 |  ;      summer employees,trainees and other special programs.
 | 
|---|
 | 24 |  ; ENT= 39 character entitlement string
 | 
|---|
 | 25 |  ; PMP = Premium Pay Code
 | 
|---|
 | 26 |  ;
 | 
|---|
 | 27 |  N PAYPDTMP,PPLOLD,DUTYTEMP,FLSATEMP
 | 
|---|
 | 28 |  ;
 | 
|---|
 | 29 |  S C0=^PRSPC(DFN,0)
 | 
|---|
 | 30 |  ;
 | 
|---|
 | 31 |  ; pay plan in master record.
 | 
|---|
 | 32 |  S PP=$P(C0,"^",21)
 | 
|---|
 | 33 |  ;
 | 
|---|
 | 34 |  ;=====================================================================
 | 
|---|
 | 35 |  ; duty basis from master record
 | 
|---|
 | 36 |  S DUTYTEMP=$P(C0,"^",10)
 | 
|---|
 | 37 |  ;
 | 
|---|
 | 38 |  ; FLSA indicator from master record
 | 
|---|
 | 39 |  S FLSATEMP=$P(C0,"^",12)
 | 
|---|
 | 40 |  ;
 | 
|---|
 | 41 |  ;Make sure we've called this routine from an entry point that uses
 | 
|---|
 | 42 |  ;PY for pay period.  A few reports, call PRSAENT from TYPSTF^PRSRUT0
 | 
|---|
 | 43 |  ;and the reports aren't concerned about differing pay plans from 
 | 
|---|
 | 44 |  ;other pay periods.
 | 
|---|
 | 45 |  ;
 | 
|---|
 | 46 |  I +($G(PY))>0 D
 | 
|---|
 | 47 |  .S PAYPDTMP=$P($G(^PRST(458,+PY,0)),"^") ;pay period we're working with.
 | 
|---|
 | 48 |  .S PPLOLD=$$OLDPP^PRS8UT(PAYPDTMP,+DFN) ;pay plan from PAYPDTMP.
 | 
|---|
 | 49 |  .;if we find an old pay plan and it's different than the master record
 | 
|---|
 | 50 |  .;use the old pay plan to determine VCS or FEE.
 | 
|---|
 | 51 |  .I PPLOLD'=0,(PP'=PPLOLD) D
 | 
|---|
 | 52 |  ..   S PP=PPLOLD
 | 
|---|
 | 53 |  ..   S DUTYTEMP=OLDPP("DUTYBS")
 | 
|---|
 | 54 |  ;=====================================================================
 | 
|---|
 | 55 |  ;
 | 
|---|
 | 56 |  ; Numeric Pay plans are all Wage grade. Set them to 0.
 | 
|---|
 | 57 |  S:PP?1N PP=0
 | 
|---|
 | 58 |  ;
 | 
|---|
 | 59 |  ;
 | 
|---|
 | 60 |  S:"BC"[PP PP="A"
 | 
|---|
 | 61 |  I "0AEFGJKLMNPQRSTUWXY"'[PP D NO Q
 | 
|---|
 | 62 |  S NH=+$P(C0,"^",16)
 | 
|---|
 | 63 |  S FLX=$P($G(^PRSPC(DFN,1)),"^",7)
 | 
|---|
 | 64 |  S PMP=$P($G(^PRSPC(DFN,"PREMIUM")),"^",6)
 | 
|---|
 | 65 |  S AC=PP_DUTYTEMP_FLSATEMP
 | 
|---|
 | 66 |  I $L(AC)'=3 D NO Q
 | 
|---|
 | 67 |  ;
 | 
|---|
 | 68 |  ;
 | 
|---|
 | 69 |  D @PP
 | 
|---|
 | 70 |  D FND
 | 
|---|
 | 71 |  Q
 | 
|---|
 | 72 |  ;===========================================================
 | 
|---|
 | 73 |  ;
 | 
|---|
 | 74 | 0 Q
 | 
|---|
 | 75 |  ;
 | 
|---|
 | 76 | A ;patch 45: firefighters entitlements are based on PMP Codes.  
 | 
|---|
 | 77 |  ; Code O still uses nh>80 to determine entitlement. 
 | 
|---|
 | 78 |  I "RC"[PMP S AC=AC_PMP Q
 | 
|---|
 | 79 |  ;
 | 
|---|
 | 80 |  ;This check does not concern itself with whether or not a code
 | 
|---|
 | 81 |  ; O is present.  Simply if not a code R or C then an over 80
 | 
|---|
 | 82 |  ; must be a code O firefighter under the rules implemented in 
 | 
|---|
 | 83 |  ; patch 45.  
 | 
|---|
 | 84 |  ;
 | 
|---|
 | 85 |  I "CR"'[PMP,NH>80 S AC=AC_"*" Q
 | 
|---|
 | 86 |  ;
 | 
|---|
 | 87 |  Q:PMP=""
 | 
|---|
 | 88 |  I $E(AC,2)'=3,"WXY"[PMP S AC=AC_PMP Q
 | 
|---|
 | 89 |  S:"EF"[PMP AC=AC_"E"
 | 
|---|
 | 90 |  ;The following check is for Public Law 108-170
 | 
|---|
 | 91 |  S:"STUV"[PMP AC=AC_PMP
 | 
|---|
 | 92 |  Q
 | 
|---|
 | 93 | E Q
 | 
|---|
 | 94 | F Q
 | 
|---|
 | 95 | G I $E(AC,2)<3 Q
 | 
|---|
 | 96 |  S TA=$P(C0,"^",43) S:TA=8 AC=AC_"8" Q
 | 
|---|
 | 97 | J Q
 | 
|---|
 | 98 | K S:NH=48 AC=AC_"B" Q
 | 
|---|
 | 99 | L I $E(AC,2)=2 S PB=$P(C0,"^",20) S:PB=0 AC=AC_"*" Q
 | 
|---|
 | 100 |  I $E(AC,2)=3 S OCC=$P(C0,"^",17),OCC=+$E(OCC,5,6) S:OCC>20&(OCC<38) AC=AC_"*" Q
 | 
|---|
 | 101 |  S LVG=$P(C0,"^",15) S:LVG=5 AC=AC_"*" Q
 | 
|---|
 | 102 | M I $E(AC,2)=1,NH=48 S AC=AC_"B" Q
 | 
|---|
 | 103 |  I $E(AC,2)=2 S PB=$P(C0,"^",20) I PB=0 S AC=AC_"0" Q
 | 
|---|
 | 104 |  I $E(AC,2)=3 S PB=$P(C0,"^",20) I PB=2 S AC=AC_"2" Q
 | 
|---|
 | 105 |  S OCC=$P(C0,"^",17) S:OCC="" OCC="*"
 | 
|---|
 | 106 |  S:" 061056 061057 "[OCC AC=AC_"T"
 | 
|---|
 | 107 |  S:" 061071 061072 061080 061083 061084 "[OCC AC=AC_"T"
 | 
|---|
 | 108 |  S:" 060552 060556 "[OCC AC=AC_"T" Q
 | 
|---|
 | 109 | N S ASS=$P(C0,"^",4),PB=$P(C0,"^",20)
 | 
|---|
 | 110 |  ;The following check is for Public Law 108-170
 | 
|---|
 | 111 |  I "^S^T^U^V^"[("^"_PMP_"^") S AC=AC_PMP Q
 | 
|---|
 | 112 |  I AC="N2E",PB=0 S AC=AC_"0" Q
 | 
|---|
 | 113 |  I $E(AC,2)=3,PB="S" S AC=AC_"$" Q
 | 
|---|
 | 114 |  S OCC=$P(C0,"^",17) S:OCC="" OCC="*"
 | 
|---|
 | 115 |  I OCC="069961" S AC=AC_"T" Q  ; Student Nurse Technician
 | 
|---|
 | 116 |  I OCC="069964" S AC=AC_"T" Q  ; Student Nurse Technician
 | 
|---|
 | 117 |  S AC=AC_$S(ASS="TR":"T",ASS?1"T"1N:"T",ASS?1"A"1N:"T",1:"") Q
 | 
|---|
 | 118 | P Q
 | 
|---|
 | 119 | Q I $E(AC,2)'=2 Q
 | 
|---|
 | 120 |  S PB=$P(C0,"^",20) S:PB=0 AC=AC_"0" Q
 | 
|---|
 | 121 | R Q
 | 
|---|
 | 122 | S Q
 | 
|---|
 | 123 | T I $E(AC,2)'=3 Q
 | 
|---|
 | 124 |  S PB=$P(C0,"^",20) S:PB=9 AC=AC_"9" Q
 | 
|---|
 | 125 | U S PB=$P(C0,"^",20) I $E(AC,3)="N",PB="P" S AC=AC_"P"
 | 
|---|
 | 126 |  Q
 | 
|---|
 | 127 | W Q
 | 
|---|
 | 128 | X S:'NH AC=AC_"0" Q
 | 
|---|
 | 129 | Y Q
 | 
|---|
 | 130 |  ;
 | 
|---|
 | 131 |  ;= = = = = = = = = = = = = = = = = = = = = = = =
 | 
|---|
 | 132 | FND ;Look up the 39 character entitlement string in the entitlement table
 | 
|---|
 | 133 |  ;The lookup is based on the AC x-ref that matches the AC variable that
 | 
|---|
 | 134 |  ;is built in this routine from the three 1 character codes from the 
 | 
|---|
 | 135 |  ;450 fields (pay plan, duty basis, FLSA).
 | 
|---|
 | 136 |  ;
 | 
|---|
 | 137 |  S A1=$O(^PRST(457.5,"AC",AC,0))
 | 
|---|
 | 138 |  D NO
 | 
|---|
 | 139 |  I +A1 S ENT=^PRST(457.5,A1,1)
 | 
|---|
 | 140 |  ; The following check was added to address the Hybrid employees
 | 
|---|
 | 141 |  ; defined in Public Law 107-135.  These Hybrids do not have a
 | 
|---|
 | 142 |  ; Premium Pay Indicator but are entitled to Saturday and Sunday
 | 
|---|
 | 143 |  ; Premium Pay.
 | 
|---|
 | 144 |  I $$HYBRID^PRSAENT1(DFN) D
 | 
|---|
 | 145 |  . S $E(ENT,8,9)="11"
 | 
|---|
 | 146 |  ;
 | 
|---|
 | 147 |  Q
 | 
|---|
 | 148 |  ;= = = = = = = = = = = = = = = = = = = = = = = =
 | 
|---|
 | 149 | NO S ENT=""
 | 
|---|
 | 150 |  Q
 | 
|---|
 | 151 |  ;
 | 
|---|
 | 152 | MLINHRS(IEN) ; 
 | 
|---|
 | 153 |  ;----------------------------------------------------------------------
 | 
|---|
 | 154 |  ; Determine if the employee is entitled to Military Leave in hours.
 | 
|---|
 | 155 |  ;
 | 
|---|
 | 156 |  ; Input Vars:
 | 
|---|
 | 157 |  ;  IEN - the ien number of the employee in the PAID EMPLOYEE (#450)
 | 
|---|
 | 158 |  ;        file.
 | 
|---|
 | 159 |  ;
 | 
|---|
 | 160 |  ; Local Vars:
 | 
|---|
 | 161 |  ;  DATA - the 0 node of the employee from the PAID EMPLOYEE (#450)
 | 
|---|
 | 162 |  ;         file.
 | 
|---|
 | 163 |  ;    DB - Duty Basis    field #9    from the #450 file.
 | 
|---|
 | 164 |  ;    NH - Normal Hours  field # 15  from the #450 file.
 | 
|---|
 | 165 |  ;    PP - Pay Plan      field # 20  from the #450 file.
 | 
|---|
 | 166 |  ;
 | 
|---|
 | 167 |  ; Output:
 | 
|---|
 | 168 |  ;  1 : Entitled to ML in hours.
 | 
|---|
 | 169 |  ;  0 : Entitled to ML in days.
 | 
|---|
 | 170 |  ;  X : Some of the required fields were not defined or the employee
 | 
|---|
 | 171 |  ;      is not entitled to Military Leave.
 | 
|---|
 | 172 |  ;----------------------------------------------------------------------
 | 
|---|
 | 173 |  ; Quit if no IEN passed in
 | 
|---|
 | 174 |  ;
 | 
|---|
 | 175 |  Q:'+IEN "X"
 | 
|---|
 | 176 |  ;
 | 
|---|
 | 177 |  ; Verify that ENT is defined.  If not call PRSAENT to define it.
 | 
|---|
 | 178 |  ;
 | 
|---|
 | 179 |  I '$D(ENT) D PRSAENT
 | 
|---|
 | 180 |  ;
 | 
|---|
 | 181 |  ; Quit if the Entitlement string is not defined for the employee
 | 
|---|
 | 182 |  ;
 | 
|---|
 | 183 |  Q:ENT="" "X"
 | 
|---|
 | 184 |  ;
 | 
|---|
 | 185 |  ; Quit if the employee is not entitled to Military Leave
 | 
|---|
 | 186 |  ;
 | 
|---|
 | 187 |  Q:'$E(ENT,34) "X"
 | 
|---|
 | 188 |  ;
 | 
|---|
 | 189 |  N DATA,PP,DB,NH
 | 
|---|
 | 190 |  S DATA=$G(^PRSPC(IEN,0))
 | 
|---|
 | 191 |  Q:DATA="" "X"
 | 
|---|
 | 192 |  S DB=$P(DATA,U,10),NH=$P(DATA,U,16),PP=$P(DATA,U,21)
 | 
|---|
 | 193 |  Q:DB=""!(NH="")!(PP="") "X" ; Quit if DB or NH or PP is not defined.
 | 
|---|
 | 194 |  ;
 | 
|---|
 | 195 |  ; Check for ML in Days
 | 
|---|
 | 196 |  ;
 | 
|---|
 | 197 |  I DB=1,NH=0,"^J^L^P^Q^X^"[PP  Q 0
 | 
|---|
 | 198 |  ;
 | 
|---|
 | 199 |  ; Otherwise the employee is entitled to ML in hours.
 | 
|---|
 | 200 |  ;
 | 
|---|
 | 201 |  Q 1
 | 
|---|