001    /**
002     * Copyright 2004-2012 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.hr.time.util;
017    
018    import java.math.BigDecimal;
019    import java.math.MathContext;
020    import java.math.RoundingMode;
021    import java.util.ArrayList;
022    import java.util.HashMap;
023    import java.util.HashSet;
024    import java.util.LinkedHashMap;
025    import java.util.List;
026    import java.util.Map;
027    import java.util.Set;
028    import java.util.TimeZone;
029    
030    import org.joda.time.DateTimeZone;
031    import org.joda.time.format.DateTimeFormat;
032    import org.joda.time.format.DateTimeFormatter;
033    import org.kuali.hr.time.accrual.AccrualCategory;
034    import org.kuali.hr.time.earncode.EarnCode;
035    import org.kuali.rice.kew.api.KewApiConstants;
036    import org.kuali.rice.kew.api.document.DocumentStatus;
037    
038    public class TkConstants {
039    
040        public static final class RECORD_METHOD {
041            public static final String TIME = "T";
042            public static final String HOUR = "H";
043            public static final String AMOUNT = "A";
044            public static final String DAY = "D";
045        }
046    
047        public static final Map<String, String> RECORD_METHOD_MAP = new HashMap<String, String>(2);
048        static {
049            RECORD_METHOD_MAP.put(RECORD_METHOD.TIME, "Time");
050            RECORD_METHOD_MAP.put(RECORD_METHOD.HOUR, "Hours");
051            RECORD_METHOD_MAP.put(RECORD_METHOD.AMOUNT, "Amount");
052            RECORD_METHOD_MAP.put(RECORD_METHOD.DAY, "Days");
053        }
054    
055        public static final int DEFAULT_CACHE_TIME = 900;
056        public static final String TK_TARGET_USER_RETURN = "tkTargetReturn";
057        public static final String TK_TARGET_USER_PERSON = "tkTargetPerson";
058    
059        public static final String WILDCARD_CHARACTER = "%";
060        public static final Long WILDCARD_LONG = -1L;
061    
062        //in days
063        public static final Integer LENGTH_OF_WORK_SCHEDULE = 10;
064    
065        public static final String CLOCK_IN = "CI";
066        public static final String CLOCK_OUT = "CO";
067        public static final String LUNCH_IN = "LI"; // Coming back from Lunch
068        public static final String LUNCH_OUT = "LO"; // Leaving for Lunch
069    
070        public static final List<String> ON_THE_CLOCK_CODES = new ArrayList<String>();
071    
072        static {
073            ON_THE_CLOCK_CODES.add(CLOCK_IN);
074            ON_THE_CLOCK_CODES.add(LUNCH_IN);
075        }
076    
077        // action history
078        public static final String DELETE = "DELETE";
079        public static final String ADD = "ADD";
080        public static final String MODIFIED = "MODIFIED";
081    
082        // earn code type
083        public static final String EARN_CODE_HOUR = "H";
084        public static final String EARN_CODE_TIME = "T";
085        public static final String EARN_CODE_AMOUNT = "A";
086        public static final String EARN_CODE_OVT = "OVT";
087        public static final String EARN_CODE_CPE = "CPE";
088        public static final String EARN_CODE_DAY = "D";
089        
090        public static final String GMT_TIME_ZONE_ID = "Etc/GMT";
091        public static final TimeZone GMT_TIME_ZONE = TimeZone.getTimeZone(GMT_TIME_ZONE_ID);
092        //public static final String SYSTEM_TIME_ZONE = TimeZone.getDefault().getDisplayName();
093    
094        //public static final DateTimeZone SYSTEM_DATE_TIME_ZONE = DateTimeZone.forID(TKUtils.getSystemTimeZone());
095        public static DateTimeFormatter DT_BASIC_TIME_FORMAT = DateTimeFormat.forPattern("hh:mm aa");
096        public static DateTimeFormatter DT_MILITARY_TIME_FORMAT = DateTimeFormat.forPattern("H:mm");
097        public static DateTimeFormatter DT_BASIC_DATE_FORMAT = DateTimeFormat.forPattern("MM/dd/yyyy");
098        public static DateTimeFormatter DT_ABBREV_DATE_FORMAT = DateTimeFormat.forPattern("MM/dd");
099        public static DateTimeFormatter DT_FULL_DATE_TIME_FORMAT = DateTimeFormat.forPattern("MM/dd/yyyy hh:mm aa");
100    
101        public static final int BIG_DECIMAL_SCALE = 2;
102        public static final RoundingMode BIG_DECIMAL_SCALE_ROUNDING = RoundingMode.HALF_EVEN;
103        public static final BigDecimal BIG_DECIMAL_SCALED_ZERO = BigDecimal.ZERO.setScale(TkConstants.BIG_DECIMAL_SCALE, TkConstants.BIG_DECIMAL_SCALE_ROUNDING);
104        public static final BigDecimal BIG_DECIMAL_NEGATIVE_ONE = new BigDecimal("-1");
105    
106        public static final MathContext MATH_CONTEXT = new MathContext(5, BIG_DECIMAL_SCALE_ROUNDING);
107        public static final BigDecimal BIG_DECIMAL_1000 = BigDecimal.TEN.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN);
108        public static final BigDecimal BIG_DECIMAL_60 = BigDecimal.TEN.multiply(new BigDecimal("6"));
109        public static final BigDecimal BIG_DECIMAL_MS_IN_H = BIG_DECIMAL_1000.multiply(BIG_DECIMAL_60).multiply(BIG_DECIMAL_60);
110        public static final BigDecimal BIG_DECIMAL_HRS_IN_DAY = new BigDecimal(24);
111    
112        public static final String SUPER_USER = TkConstants.ROLE_TK_SYS_ADMIN;
113    
114        //Used to map job locations to specify the timezone for display purposes
115        public static final Map<String, String> LOCATION_TO_TIME_ZONE_MAP = new HashMap<String, String>();
116    
117        static {
118            LOCATION_TO_TIME_ZONE_MAP.put("NW", "America/Chicago");
119        }
120    
121        /**
122         * The following ROLE_* constants need to match what is in the workflow database.  They will be
123         * used internally to obtain a reference to the underlying IDs in the workflow system.
124         * <p/>
125         * Used in *ValuesFinder classes for maintenance page dropdowns.
126         */
127        public static final String ROLE_NAMESAPCE = "KUALI";
128        public static final String ROLE_TK_GLOBAL_VO = "TK_GLOBAL_VO";
129        public static final String ROLE_TK_DEPT_VO = "TK_DEPT_VO";
130        public static final String ROLE_LV_DEPT_VO = "LV_DEPT_VO"; // KPME-1411
131        public static final String ROLE_TK_LOCATION_VO = "TK_LOCATION_VO";
132        public static final String ROLE_TK_REVIEWER = "TK_REVIEWER";
133        public static final String ROLE_TK_APPROVER = "TK_APPROVER";
134        public static final String ROLE_TK_APPROVER_DELEGATE = "TK_APPROVER_DELEGATE";
135        public static final String ROLE_TK_EMPLOYEE = "TK_EMPLOYEE";
136        public static final String ROLE_TK_LOCATION_ADMIN = "TK_ORG_ADMIN";
137        public static final String ROLE_TK_DEPT_ADMIN = "TK_DEPT_ADMIN";
138        public static final String ROLE_LV_DEPT_ADMIN = "LV_DEPT_ADMIN"; // KPME-1411
139        public static final String ROLE_TK_SYS_ADMIN = "TK_SYS_ADMIN";
140        public static final String ROLE_WORK_AREA_QUALIFIER_ID = "workArea";
141        public static final List<String> ROLE_ASSIGNMENT_FOR_WORK_AREA = new ArrayList<String>(2);
142        public static final List<String> ROLE_ASSIGNMENT_FOR_USER_ROLES = new ArrayList<String>(6);
143        public static final Map<String, String> ALL_ROLES_MAP = new HashMap<String, String>();
144        public static final List<String> ROLE_ASSIGNMENT_FOR_WORK_AREA_OT_EDIT = new ArrayList<String>(3);
145    
146        static {
147            ROLE_ASSIGNMENT_FOR_WORK_AREA.add(TkConstants.ROLE_TK_APPROVER);
148            ROLE_ASSIGNMENT_FOR_USER_ROLES.add(TkConstants.ROLE_TK_GLOBAL_VO);
149            ROLE_ASSIGNMENT_FOR_USER_ROLES.add(TkConstants.ROLE_TK_DEPT_VO);
150            ROLE_ASSIGNMENT_FOR_USER_ROLES.add(TkConstants.ROLE_TK_DEPT_ADMIN);
151            ROLE_ASSIGNMENT_FOR_USER_ROLES.add(TkConstants.ROLE_TK_REVIEWER);
152            ROLE_ASSIGNMENT_FOR_USER_ROLES.add(TkConstants.ROLE_TK_APPROVER);
153            ROLE_ASSIGNMENT_FOR_USER_ROLES.add(TkConstants.ROLE_TK_APPROVER_DELEGATE);
154            ROLE_ASSIGNMENT_FOR_USER_ROLES.add(TkConstants.ROLE_TK_LOCATION_ADMIN);
155            ROLE_ASSIGNMENT_FOR_USER_ROLES.add(TkConstants.ROLE_TK_LOCATION_VO);
156            ROLE_ASSIGNMENT_FOR_USER_ROLES.add(TkConstants.ROLE_TK_SYS_ADMIN);
157    
158            ROLE_ASSIGNMENT_FOR_WORK_AREA_OT_EDIT.add(TkConstants.ROLE_TK_EMPLOYEE);
159            ROLE_ASSIGNMENT_FOR_WORK_AREA_OT_EDIT.add(TkConstants.ROLE_TK_APPROVER);
160            ROLE_ASSIGNMENT_FOR_WORK_AREA_OT_EDIT.add(TkConstants.ROLE_TK_APPROVER_DELEGATE);
161            ROLE_ASSIGNMENT_FOR_WORK_AREA_OT_EDIT.add(TkConstants.ROLE_TK_DEPT_ADMIN);
162    
163            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_REVIEWER, "Reviewer"); // attach at 'work area' level, like approvers without departmental rules
164            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_GLOBAL_VO, "Global View Only"); // can see everything in the system, but not modify
165            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_DEPT_VO, "Time Department View Only"); // can only see objects belonging to a department
166            ALL_ROLES_MAP.put(TkConstants.ROLE_LV_DEPT_VO, "Leave Department View Only"); // kpme1411
167            
168            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_LOCATION_VO, "Location View Only");
169            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_APPROVER, "Approver"); // attach at 'work area', view only departmental rules
170            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_APPROVER_DELEGATE, "Approver Delegate"); // attach at 'work area'
171            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_EMPLOYEE, "Employee"); // only people with active assignments have this role.
172            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_LOCATION_ADMIN, "Location Admin"); // location admin rename
173            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_DEPT_ADMIN, "Time Department Admin");
174            ALL_ROLES_MAP.put(TkConstants.ROLE_LV_DEPT_ADMIN, "Leave Department Admin"); // kpme1411
175            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_SYS_ADMIN, "System Admin");
176    
177        }
178    
179        public static final class ACTIONS {
180            public static final String CLOCK_IN = "clockIn";
181            public static final String CLOCK_OUT = "clockOut";
182            public static final String ADD_TIME_BLOCK = "addTimeBlock";
183            public static final String UPDATE_TIME_BLOCK = "updateTimeBlock";
184            public static final String DELETE_TIME_BLOCK = "deleteTimeBlock";
185        }
186    
187        public static final List<String> ClOCK_ACTIONS = new ArrayList<String>();
188    
189        static {
190            ClOCK_ACTIONS.add("CI");
191            ClOCK_ACTIONS.add("CO");
192            ClOCK_ACTIONS.add("LI"); // Coming back for Lunch
193            ClOCK_ACTIONS.add("LO"); // Leaving for Lunch
194        }
195    
196        /**
197         * Simplistic state transition map, created statically for speed.
198         */
199        public static final Map<String, Set<String>> CLOCK_ACTION_TRANSITION_MAP = new HashMap<String, Set<String>>(4);
200    
201        static {
202            Set<String> ci = new HashSet<String>();
203            ci.add(LUNCH_OUT);
204            ci.add(CLOCK_OUT);
205    
206            Set<String> co = new HashSet<String>();
207            co.add(CLOCK_IN);
208    
209            Set<String> li = new HashSet<String>();
210            li.add(CLOCK_OUT);
211    
212            Set<String> lo = new HashSet<String>();
213            lo.add(LUNCH_IN);
214    
215            CLOCK_ACTION_TRANSITION_MAP.put(CLOCK_IN, ci);
216            CLOCK_ACTION_TRANSITION_MAP.put(CLOCK_OUT, co);
217            CLOCK_ACTION_TRANSITION_MAP.put(LUNCH_IN, li);
218            CLOCK_ACTION_TRANSITION_MAP.put(LUNCH_OUT, lo);
219        }
220    
221        // available Clock actions to choose from when user's modifying an existing Missed Punch Document based on
222        // the initial clock action
223        public static final Map<String, Set<String>> CLOCK_AVAILABLE_ACTION_MAP = new HashMap<String, Set<String>>(4);
224    
225        static {
226            Set<String> ci = new HashSet<String>();
227            ci.add(CLOCK_IN);
228    
229            Set<String> co = new HashSet<String>();
230            co.add(CLOCK_OUT);
231            co.add(LUNCH_OUT);
232    
233            Set<String> li = new HashSet<String>();
234            li.add(LUNCH_IN);
235    
236            Set<String> lo = new HashSet<String>();
237            lo.add(CLOCK_OUT);
238            lo.add(LUNCH_OUT);
239    
240            CLOCK_AVAILABLE_ACTION_MAP.put(CLOCK_IN, ci);
241            CLOCK_AVAILABLE_ACTION_MAP.put(CLOCK_OUT, co);
242            CLOCK_AVAILABLE_ACTION_MAP.put(LUNCH_IN, li);
243            CLOCK_AVAILABLE_ACTION_MAP.put(LUNCH_OUT, lo);
244        }
245        
246        public static final Map<String, String> CLOCK_ACTION_STRINGS = new HashMap<String, String>(4);
247    
248        static {
249            CLOCK_ACTION_STRINGS.put(CLOCK_IN, "Clock In");
250            CLOCK_ACTION_STRINGS.put(CLOCK_OUT, "Clock Out");
251            CLOCK_ACTION_STRINGS.put(LUNCH_IN, "Lunch In"); // Coming back for Lunch
252            CLOCK_ACTION_STRINGS.put(LUNCH_OUT, "Lunch Out"); // Going to Lunch
253        }
254    
255        public static final class DOCUMENT_ACTIONS {
256            public static final String ROUTE = "R";
257            public static final String APPROVE = "A";
258            public static final String DISAPPROVE = "D";
259        }
260    
261        public static final class BATCH_JOB_ACTIONS {
262            public static final String BATCH_JOB_INITIATE = "BI";
263            public static final String BATCH_JOB_ROUTE = "BR";
264            public static final String BATCH_JOB_APPROVE = "BA";
265        }
266    
267        public static final class ROUTE_STATUS {
268            public static final String INITIATED = DocumentStatus.INITIATED.getCode();
269            public static final String ENROUTE = DocumentStatus.ENROUTE.getCode();
270            public static final String FINAL = DocumentStatus.FINAL.getCode();
271            public static final String CANCEL = DocumentStatus.CANCELED.getCode();
272            public static final String SAVED = DocumentStatus.SAVED.getCode();
273            public static final String DISAPPROVED = DocumentStatus.DISAPPROVED.getCode();
274            public static final String EXCEPTION = DocumentStatus.EXCEPTION.getCode();
275        }
276    
277        public static final Map<String, String> DOC_ROUTE_STATUS = new HashMap<String, String>(8);
278    
279        static {
280            DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_INITIATED_CD, KewApiConstants.ROUTE_HEADER_INITIATED_LABEL);
281            DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_CANCEL_CD, KewApiConstants.ROUTE_HEADER_CANCEL_LABEL);
282            DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_ENROUTE_CD, KewApiConstants.ROUTE_HEADER_ENROUTE_LABEL);
283            DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_FINAL_CD, KewApiConstants.ROUTE_HEADER_FINAL_LABEL);
284            DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_DISAPPROVED_CD, KewApiConstants.ROUTE_HEADER_DISAPPROVED_LABEL);
285            DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_EXCEPTION_CD, KewApiConstants.ROUTE_HEADER_EXCEPTION_LABEL);
286            DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_SAVED_CD, KewApiConstants.ROUTE_HEADER_SAVED_LABEL);
287        }
288    
289        public static final class BATCH_JOB_ENTRY_STATUS {
290            public static final String SCHEDULED = "S";
291            public static final String RUNNING = "R";
292            public static final String FINISHED = "F";
293            public static final String EXCEPTION = "E";
294        }
295    
296        public static final class BATCH_JOB_NAMES {
297            public static final String INITIATE = "Initiate";
298            public static final String APPROVE = "Approve";
299            public static final String PAY_PERIOD_END = "Pay Period End";
300            public static final String SUPERVISOR_APPROVAL = "Supervisor Approval";
301            public static final String BATCH_APPROVE_MISSED_PUNCH = "Batch Approve Missed Punch";
302        }
303    
304        public static final String BATCH_JOB_USER_PRINCIPAL_ID = "admin";
305    
306        public static final String ASSIGNMENT_KEY_DELIMITER = "_";
307        public static final String HOLIDAY_EARN_CODE = "HOL";
308        // Special System earn code to represent lunch deductions.
309        public static final String LUNCH_EARN_CODE = "LUN";
310    
311        // calendar navigation
312        public static final String NEXT_TIMESHEET = "next";
313        public static final String PREV_TIMESHEET = "prev";
314    
315        // Timesheet document ID request parameter name
316        public static final String TIMESHEET_DOCUMENT_ID_REQUEST_NAME = "tdocid";
317        // document ID request parameter name
318        public static final String DOCUMENT_ID_REQUEST_NAME = "docid";
319        //Threshold in hours for clockin highlighting on approvers tab
320        public static final Integer NUMBER_OF_HOURS_CLOCKED_IN_APPROVE_TAB_HIGHLIGHT = 12;
321    
322        public static final List<String> TIME_ZONES = new ArrayList<String>();
323    
324        static {
325            TIME_ZONES.add("America/Chicago");
326            TIME_ZONES.add("America/Denver");
327            TIME_ZONES.add("America/Detroit");
328            TIME_ZONES.add("America/Indiana/Indianapolis");
329            TIME_ZONES.add("America/Phoenix");
330        }
331    
332        public String getLUNCH_EARN_CODE() {
333            return LUNCH_EARN_CODE;
334        }
335    
336        public String getEARN_CODE_AMOUNT() {
337            return EARN_CODE_AMOUNT;
338        }
339    
340        public String getHOLIDAY_EARN_CODE() {
341            return HOLIDAY_EARN_CODE;
342        }
343    
344        public static final Map<String, String> DOCUMENT_STATUS = new HashMap<String, String>();
345    
346        static {
347            DOCUMENT_STATUS.put("I", "Initiated");
348            DOCUMENT_STATUS.put("S", "Saved");
349            DOCUMENT_STATUS.put("R", "Enroute");
350            DOCUMENT_STATUS.put("F", "Final");
351        }
352    
353        public static class ConfigSettings {
354            public static final String SESSION_TIMEOUT = "session.timeout";
355            public static final String KPME_SYSTEM_TIMEZONE = "kpme.system.timezone";
356        }
357    
358        public static final Integer PAGE_SIZE = 20;
359        public static final String APPROVAL_TABLE_ID = "row";
360    
361        public static final String IP_SEPERATOR = ".";
362        public static final String IP_WILDCARD_PATTERN = "(%|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))";
363    
364        public static final String TASK_DEFAULT_DESP = "Default";
365    
366        public static final Map<String, String> ACCRUAL_EARN_INTERVAL = new LinkedHashMap<String, String>(6);
367    
368            static {
369                    ACCRUAL_EARN_INTERVAL.put("D", "Daily");
370                    ACCRUAL_EARN_INTERVAL.put("W", "Weekly");
371                    ACCRUAL_EARN_INTERVAL.put("S", "Semi-Monthly");
372                    ACCRUAL_EARN_INTERVAL.put("M", "Monthly");
373                    ACCRUAL_EARN_INTERVAL.put("Y", "Yearly");
374                    ACCRUAL_EARN_INTERVAL.put("N", "No Accrual");
375            }
376    
377            public static final Map<String, String> SERVICE_UNIT_OF_TIME = new LinkedHashMap<String, String>(3);
378    
379            static {
380                    SERVICE_UNIT_OF_TIME.put("Y", "Years");
381                    SERVICE_UNIT_OF_TIME.put("M", "Months");
382                    //SERVICE_UNIT_OF_TIME.put("H", "Hours");
383            }
384    
385            public static final Map<String, String> UNIT_OF_TIME = new LinkedHashMap<String, String>(2);
386    
387            static {
388                    UNIT_OF_TIME.put("D", "Days");
389                    UNIT_OF_TIME.put("H", "Hours");
390            }
391            
392            public static final Map<String, String> MAX_BAL_FLAG = new LinkedHashMap<String, String>(2);
393    
394            static {
395                    MAX_BAL_FLAG.put("Y", "Yes");
396                    MAX_BAL_FLAG.put("N", "No");
397            }
398            
399            public static final Map<String, String> MAX_BALANCE_ACTION_FREQUENCY = new LinkedHashMap<String, String>(3);
400    
401            static {
402                    MAX_BALANCE_ACTION_FREQUENCY.put("LA", "Leave Approve");
403                    MAX_BALANCE_ACTION_FREQUENCY.put("YE", "Year End");
404                    //MAX_BALANCE_ACTION_FREQUENCY.put("NA", "Not Applicable");
405            }
406    
407            public static final Map<String, String> ACTION_AT_MAX_BALANCE = new LinkedHashMap<String, String>(3);
408    
409            static {
410                    ACTION_AT_MAX_BALANCE.put("T", "Transfer");
411                    ACTION_AT_MAX_BALANCE.put("P", "Payout");
412                    ACTION_AT_MAX_BALANCE.put("L", "Lose");
413                    //ACTION_AT_MAX_BALANCE.put("NA", "Not Applicable");
414            }
415    
416            public static final Map<String, String> UNUSED_TIME = new LinkedHashMap<String, String>(3);
417    
418            static {
419                    UNUSED_TIME.put("NUTA", "No Unused Time Allowed");
420                    UNUSED_TIME.put("T", "Transfer");
421                    UNUSED_TIME.put("B", "Bank");
422            }
423    
424            public static final Map<String, String> EMPLOYEE_OVERRIDE_TYPE = new LinkedHashMap<String, String>(5);
425    
426            static {
427                    EMPLOYEE_OVERRIDE_TYPE.put("MB", "Max Balance");
428                    EMPLOYEE_OVERRIDE_TYPE.put("MTA", "Max Transfer Amount");
429                    EMPLOYEE_OVERRIDE_TYPE.put("MPA", "Max Payout Amount");
430                    EMPLOYEE_OVERRIDE_TYPE.put("MU", "Max Usage");
431                    EMPLOYEE_OVERRIDE_TYPE.put("MAC", "Max Annual Carryover");
432            }
433    
434        public static final String DAILY_OVT_CODE = "DOT";
435        
436        public static final Map<String, Set<String>> CLASS_INQUIRY_KEY_MAP = new HashMap<String, Set<String>>(4);
437    
438        static {
439            Set<String> keys = new HashSet<String>();
440            keys.add("accrualCategory");
441            keys.add("effectiveDate");
442            CLASS_INQUIRY_KEY_MAP.put(AccrualCategory.class.getName(), keys);
443            
444            keys = new HashSet<String>();
445            keys.add("earnCode");
446            keys.add("effectiveDate");
447            CLASS_INQUIRY_KEY_MAP.put(EarnCode.class.getName(), keys);
448        }
449    
450        public static final String FLSA_STATUS_NON_EXEMPT ="NE";
451        public static final String FLSA_STATUS_EXEMPT ="E";
452    }