001    /**
002     * Copyright 2004-2013 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_MS_IN_M = BIG_DECIMAL_1000.multiply(BIG_DECIMAL_60);
111        public static final BigDecimal BIG_DECIMAL_HRS_IN_DAY = new BigDecimal(24);
112    
113        public static final String SUPER_USER = TkConstants.ROLE_TK_SYS_ADMIN;
114    
115        //Used to map job locations to specify the timezone for display purposes
116        public static final Map<String, String> LOCATION_TO_TIME_ZONE_MAP = new HashMap<String, String>();
117    
118        static {
119            LOCATION_TO_TIME_ZONE_MAP.put("NW", "America/Chicago");
120        }
121    
122        /**
123         * The following ROLE_* constants need to match what is in the workflow database.  They will be
124         * used internally to obtain a reference to the underlying IDs in the workflow system.
125         * <p/>
126         * Used in *ValuesFinder classes for maintenance page dropdowns.
127         */
128        public static final String ROLE_NAMESAPCE = "KUALI";
129        public static final String ROLE_TK_GLOBAL_VO = "TK_GLOBAL_VO";
130        public static final String ROLE_TK_DEPT_VO = "TK_DEPT_VO";
131        public static final String ROLE_LV_DEPT_VO = "LV_DEPT_VO"; // KPME-1411
132        public static final String ROLE_TK_LOCATION_VO = "TK_LOCATION_VO";
133        public static final String ROLE_TK_REVIEWER = "TK_REVIEWER";
134        public static final String ROLE_TK_APPROVER = "TK_APPROVER";
135        public static final String ROLE_TK_APPROVER_DELEGATE = "TK_APPROVER_DELEGATE";
136        public static final String ROLE_TK_EMPLOYEE = "TK_EMPLOYEE";
137        public static final String ROLE_TK_LOCATION_ADMIN = "TK_ORG_ADMIN";
138        public static final String ROLE_TK_DEPT_ADMIN = "TK_DEPT_ADMIN";
139        public static final String ROLE_LV_DEPT_ADMIN = "LV_DEPT_ADMIN"; // KPME-1411
140        public static final String ROLE_TK_SYS_ADMIN = "TK_SYS_ADMIN";
141        public static final String ROLE_WORK_AREA_QUALIFIER_ID = "workArea";
142        public static final List<String> ROLE_ASSIGNMENT_FOR_WORK_AREA = new ArrayList<String>(2);
143        public static final List<String> ROLE_ASSIGNMENT_FOR_USER_ROLES = new ArrayList<String>(6);
144        public static final Map<String, String> ALL_ROLES_MAP = new HashMap<String, String>();
145        public static final List<String> ROLE_ASSIGNMENT_FOR_WORK_AREA_OT_EDIT = new ArrayList<String>(3);
146    
147        static {
148            ROLE_ASSIGNMENT_FOR_WORK_AREA.add(TkConstants.ROLE_TK_APPROVER);
149            ROLE_ASSIGNMENT_FOR_USER_ROLES.add(TkConstants.ROLE_TK_GLOBAL_VO);
150            ROLE_ASSIGNMENT_FOR_USER_ROLES.add(TkConstants.ROLE_TK_DEPT_VO);
151            ROLE_ASSIGNMENT_FOR_USER_ROLES.add(TkConstants.ROLE_TK_DEPT_ADMIN);
152            ROLE_ASSIGNMENT_FOR_USER_ROLES.add(TkConstants.ROLE_TK_REVIEWER);
153            ROLE_ASSIGNMENT_FOR_USER_ROLES.add(TkConstants.ROLE_TK_APPROVER);
154            ROLE_ASSIGNMENT_FOR_USER_ROLES.add(TkConstants.ROLE_TK_APPROVER_DELEGATE);
155            ROLE_ASSIGNMENT_FOR_USER_ROLES.add(TkConstants.ROLE_TK_LOCATION_ADMIN);
156            ROLE_ASSIGNMENT_FOR_USER_ROLES.add(TkConstants.ROLE_TK_LOCATION_VO);
157            ROLE_ASSIGNMENT_FOR_USER_ROLES.add(TkConstants.ROLE_TK_SYS_ADMIN);
158    
159            ROLE_ASSIGNMENT_FOR_WORK_AREA_OT_EDIT.add(TkConstants.ROLE_TK_EMPLOYEE);
160            ROLE_ASSIGNMENT_FOR_WORK_AREA_OT_EDIT.add(TkConstants.ROLE_TK_APPROVER);
161            ROLE_ASSIGNMENT_FOR_WORK_AREA_OT_EDIT.add(TkConstants.ROLE_TK_APPROVER_DELEGATE);
162            ROLE_ASSIGNMENT_FOR_WORK_AREA_OT_EDIT.add(TkConstants.ROLE_TK_DEPT_ADMIN);
163    
164            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_REVIEWER, "Reviewer"); // attach at 'work area' level, like approvers without departmental rules
165            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_GLOBAL_VO, "Global View Only"); // can see everything in the system, but not modify
166            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_DEPT_VO, "Time Department View Only"); // can only see objects belonging to a department
167            ALL_ROLES_MAP.put(TkConstants.ROLE_LV_DEPT_VO, "Leave Department View Only"); // kpme1411
168            
169            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_LOCATION_VO, "Location View Only");
170            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_APPROVER, "Approver"); // attach at 'work area', view only departmental rules
171            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_APPROVER_DELEGATE, "Approver Delegate"); // attach at 'work area'
172            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_EMPLOYEE, "Employee"); // only people with active assignments have this role.
173            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_LOCATION_ADMIN, "Location Admin"); // location admin rename
174            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_DEPT_ADMIN, "Time Department Admin");
175            ALL_ROLES_MAP.put(TkConstants.ROLE_LV_DEPT_ADMIN, "Leave Department Admin"); // kpme1411
176            ALL_ROLES_MAP.put(TkConstants.ROLE_TK_SYS_ADMIN, "System Admin");
177    
178        }
179    
180        public static final class ACTIONS {
181            public static final String CLOCK_IN = "clockIn";
182            public static final String CLOCK_OUT = "clockOut";
183            public static final String ADD_TIME_BLOCK = "addTimeBlock";
184            public static final String UPDATE_TIME_BLOCK = "updateTimeBlock";
185            public static final String DELETE_TIME_BLOCK = "deleteTimeBlock";
186        }
187    
188        public static final List<String> ClOCK_ACTIONS = new ArrayList<String>();
189    
190        static {
191            ClOCK_ACTIONS.add("CI");
192            ClOCK_ACTIONS.add("CO");
193            ClOCK_ACTIONS.add("LI"); // Coming back for Lunch
194            ClOCK_ACTIONS.add("LO"); // Leaving for Lunch
195        }
196    
197        /**
198         * Simplistic state transition map, created statically for speed.
199         */
200        public static final Map<String, Set<String>> CLOCK_ACTION_TRANSITION_MAP = new HashMap<String, Set<String>>(4);
201    
202        static {
203            Set<String> ci = new HashSet<String>();
204            ci.add(LUNCH_OUT);
205            ci.add(CLOCK_OUT);
206    
207            Set<String> co = new HashSet<String>();
208            co.add(CLOCK_IN);
209    
210            Set<String> li = new HashSet<String>();
211            li.add(CLOCK_OUT);
212    
213            Set<String> lo = new HashSet<String>();
214            lo.add(LUNCH_IN);
215    
216            CLOCK_ACTION_TRANSITION_MAP.put(CLOCK_IN, ci);
217            CLOCK_ACTION_TRANSITION_MAP.put(CLOCK_OUT, co);
218            CLOCK_ACTION_TRANSITION_MAP.put(LUNCH_IN, li);
219            CLOCK_ACTION_TRANSITION_MAP.put(LUNCH_OUT, lo);
220        }
221    
222        // available Clock actions to choose from when user's modifying an existing Missed Punch Document based on
223        // the initial clock action
224        public static final Map<String, Set<String>> CLOCK_AVAILABLE_ACTION_MAP = new HashMap<String, Set<String>>(4);
225    
226        static {
227            Set<String> ci = new HashSet<String>();
228            ci.add(CLOCK_IN);
229    
230            Set<String> co = new HashSet<String>();
231            co.add(CLOCK_OUT);
232            co.add(LUNCH_OUT);
233    
234            Set<String> li = new HashSet<String>();
235            li.add(LUNCH_IN);
236    
237            Set<String> lo = new HashSet<String>();
238            lo.add(CLOCK_OUT);
239            lo.add(LUNCH_OUT);
240    
241            CLOCK_AVAILABLE_ACTION_MAP.put(CLOCK_IN, ci);
242            CLOCK_AVAILABLE_ACTION_MAP.put(CLOCK_OUT, co);
243            CLOCK_AVAILABLE_ACTION_MAP.put(LUNCH_IN, li);
244            CLOCK_AVAILABLE_ACTION_MAP.put(LUNCH_OUT, lo);
245        }
246        
247        public static final Map<String, String> CLOCK_ACTION_STRINGS = new HashMap<String, String>(4);
248    
249        static {
250            CLOCK_ACTION_STRINGS.put(CLOCK_IN, "Clock In");
251            CLOCK_ACTION_STRINGS.put(CLOCK_OUT, "Clock Out");
252            CLOCK_ACTION_STRINGS.put(LUNCH_IN, "Lunch In"); // Coming back for Lunch
253            CLOCK_ACTION_STRINGS.put(LUNCH_OUT, "Lunch Out"); // Going to Lunch
254        }
255    
256        public static final class DOCUMENT_ACTIONS {
257            public static final String ROUTE = "R";
258            public static final String APPROVE = "A";
259            public static final String DISAPPROVE = "D";
260        }
261    
262        public static final class BATCH_JOB_ACTIONS {
263            public static final String BATCH_JOB_INITIATE = "BI";
264            public static final String BATCH_JOB_ROUTE = "BR";
265            public static final String BATCH_JOB_APPROVE = "BA";
266        }
267    
268        public static final class ROUTE_STATUS {
269            public static final String INITIATED = DocumentStatus.INITIATED.getCode();
270            public static final String ENROUTE = DocumentStatus.ENROUTE.getCode();
271            public static final String FINAL = DocumentStatus.FINAL.getCode();
272            public static final String CANCEL = DocumentStatus.CANCELED.getCode();
273            public static final String SAVED = DocumentStatus.SAVED.getCode();
274            public static final String DISAPPROVED = DocumentStatus.DISAPPROVED.getCode();
275            public static final String EXCEPTION = DocumentStatus.EXCEPTION.getCode();
276        }
277    
278        public static final Map<String, String> DOC_ROUTE_STATUS = new HashMap<String, String>(8);
279    
280        static {
281            DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_INITIATED_CD, KewApiConstants.ROUTE_HEADER_INITIATED_LABEL);
282            DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_CANCEL_CD, KewApiConstants.ROUTE_HEADER_CANCEL_LABEL);
283            DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_ENROUTE_CD, KewApiConstants.ROUTE_HEADER_ENROUTE_LABEL);
284            DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_FINAL_CD, KewApiConstants.ROUTE_HEADER_FINAL_LABEL);
285            DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_DISAPPROVED_CD, KewApiConstants.ROUTE_HEADER_DISAPPROVED_LABEL);
286            DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_EXCEPTION_CD, KewApiConstants.ROUTE_HEADER_EXCEPTION_LABEL);
287            DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_SAVED_CD, KewApiConstants.ROUTE_HEADER_SAVED_LABEL);
288        }
289    
290        public static final class BATCH_JOB_ENTRY_STATUS {
291            public static final String SCHEDULED = "S";
292            public static final String RUNNING = "R";
293            public static final String FINISHED = "F";
294            public static final String EXCEPTION = "E";
295        }
296    
297        public static final class BATCH_JOB_NAMES {
298            public static final String INITIATE = "Initiate";
299            public static final String APPROVE = "Approve";
300            public static final String PAY_PERIOD_END = "Pay Period End";
301            public static final String SUPERVISOR_APPROVAL = "Supervisor Approval";
302            public static final String BATCH_APPROVE_MISSED_PUNCH = "Batch Approve Missed Punch";
303        }
304    
305        public static final String BATCH_JOB_USER_PRINCIPAL_ID = "admin";
306    
307        public static final String ASSIGNMENT_KEY_DELIMITER = "_";
308        public static final String HOLIDAY_EARN_CODE = "HOL";
309        // Special System earn code to represent lunch deductions.
310        public static final String LUNCH_EARN_CODE = "LUN";
311    
312        // calendar navigation
313        public static final String NEXT_TIMESHEET = "next";
314        public static final String PREV_TIMESHEET = "prev";
315    
316        // Timesheet document ID request parameter name
317        public static final String TIMESHEET_DOCUMENT_ID_REQUEST_NAME = "tdocid";
318        // document ID request parameter name
319        public static final String DOCUMENT_ID_REQUEST_NAME = "docid";
320        //Threshold in hours for clockin highlighting on approvers tab
321        public static final Integer NUMBER_OF_HOURS_CLOCKED_IN_APPROVE_TAB_HIGHLIGHT = 12;
322    
323        public static final List<String> TIME_ZONES = new ArrayList<String>();
324    
325        static {
326            TIME_ZONES.add("America/Chicago");
327            TIME_ZONES.add("America/Denver");
328            TIME_ZONES.add("America/Detroit");
329            TIME_ZONES.add("America/Indiana/Indianapolis");
330            TIME_ZONES.add("America/Phoenix");
331        }
332    
333        public String getLUNCH_EARN_CODE() {
334            return LUNCH_EARN_CODE;
335        }
336    
337        public String getEARN_CODE_AMOUNT() {
338            return EARN_CODE_AMOUNT;
339        }
340    
341        public String getHOLIDAY_EARN_CODE() {
342            return HOLIDAY_EARN_CODE;
343        }
344    
345        public static final Map<String, String> DOCUMENT_STATUS = new HashMap<String, String>();
346    
347        static {
348            DOCUMENT_STATUS.put("I", "Initiated");
349            DOCUMENT_STATUS.put("S", "Saved");
350            DOCUMENT_STATUS.put("R", "Enroute");
351            DOCUMENT_STATUS.put("F", "Final");
352        }
353    
354        public static class ConfigSettings {
355            public static final String SESSION_TIMEOUT = "session.timeout";
356            public static final String KPME_SYSTEM_TIMEZONE = "kpme.system.timezone";
357        }
358    
359        public static final Integer PAGE_SIZE = 20;
360        public static final String APPROVAL_TABLE_ID = "row";
361    
362        public static final String IP_SEPERATOR = ".";
363        public static final String IP_WILDCARD_PATTERN = "(%|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))";
364    
365        public static final String TASK_DEFAULT_DESP = "Default";
366    
367        public static final Map<String, String> ACCRUAL_EARN_INTERVAL = new LinkedHashMap<String, String>(6);
368    
369            static {
370                    ACCRUAL_EARN_INTERVAL.put("D", "Daily");
371                    ACCRUAL_EARN_INTERVAL.put("W", "Weekly");
372                    ACCRUAL_EARN_INTERVAL.put("S", "Semi-Monthly");
373                    ACCRUAL_EARN_INTERVAL.put("M", "Monthly");
374                    ACCRUAL_EARN_INTERVAL.put("Y", "Yearly");
375                    ACCRUAL_EARN_INTERVAL.put("N", "No Accrual");
376            }
377    
378            public static final Map<String, String> SERVICE_UNIT_OF_TIME = new LinkedHashMap<String, String>(3);
379    
380            static {
381                    SERVICE_UNIT_OF_TIME.put("Y", "Years");
382                    SERVICE_UNIT_OF_TIME.put("M", "Months");
383                    //SERVICE_UNIT_OF_TIME.put("H", "Hours");
384            }
385    
386            public static final Map<String, String> UNIT_OF_TIME = new LinkedHashMap<String, String>(2);
387    
388            static {
389                    UNIT_OF_TIME.put("D", "Days");
390                    UNIT_OF_TIME.put("H", "Hours");
391            }
392            
393            public static final Map<String, String> MAX_BAL_FLAG = new LinkedHashMap<String, String>(2);
394    
395            static {
396                    MAX_BAL_FLAG.put("Y", "Yes");
397                    MAX_BAL_FLAG.put("N", "No");
398            }
399            
400            public static final Map<String, String> MAX_BALANCE_ACTION_FREQUENCY = new LinkedHashMap<String, String>(3);
401    
402            static {
403                    MAX_BALANCE_ACTION_FREQUENCY.put("LA", "Leave Approve");
404                    MAX_BALANCE_ACTION_FREQUENCY.put("YE", "Year End");
405                    //MAX_BALANCE_ACTION_FREQUENCY.put("NA", "Not Applicable");
406            }
407    
408            public static final Map<String, String> ACTION_AT_MAX_BALANCE = new LinkedHashMap<String, String>(3);
409    
410            static {
411                    ACTION_AT_MAX_BALANCE.put("T", "Transfer");
412                    ACTION_AT_MAX_BALANCE.put("P", "Payout");
413                    ACTION_AT_MAX_BALANCE.put("L", "Lose");
414                    //ACTION_AT_MAX_BALANCE.put("NA", "Not Applicable");
415            }
416    
417            public static final Map<String, String> UNUSED_TIME = new LinkedHashMap<String, String>(3);
418    
419            static {
420                    UNUSED_TIME.put("NUTA", "No Unused Time Allowed");
421                    UNUSED_TIME.put("T", "Transfer");
422                    UNUSED_TIME.put("B", "Bank");
423            }
424    
425            public static final Map<String, String> EMPLOYEE_OVERRIDE_TYPE = new LinkedHashMap<String, String>(5);
426    
427            static {
428                    EMPLOYEE_OVERRIDE_TYPE.put("MB", "Max Balance");
429                    EMPLOYEE_OVERRIDE_TYPE.put("MTA", "Max Transfer Amount");
430                    EMPLOYEE_OVERRIDE_TYPE.put("MPA", "Max Payout Amount");
431                    EMPLOYEE_OVERRIDE_TYPE.put("MU", "Max Usage");
432                    EMPLOYEE_OVERRIDE_TYPE.put("MAC", "Max Annual Carryover");
433            }
434    
435        public static final String DAILY_OVT_CODE = "DOT";
436        
437        public static final Map<String, Set<String>> CLASS_INQUIRY_KEY_MAP = new HashMap<String, Set<String>>(4);
438    
439        static {
440            Set<String> keys = new HashSet<String>();
441            keys.add("accrualCategory");
442            keys.add("effectiveDate");
443            CLASS_INQUIRY_KEY_MAP.put(AccrualCategory.class.getName(), keys);
444            
445            keys = new HashSet<String>();
446            keys.add("earnCode");
447            keys.add("effectiveDate");
448            CLASS_INQUIRY_KEY_MAP.put(EarnCode.class.getName(), keys);
449        }
450    
451        public static final String FLSA_STATUS_NON_EXEMPT ="NE";
452        public static final String FLSA_STATUS_EXEMPT ="E";
453    }