Mass Loading in USPS-R is overly complicated and impossible to maintain (uses groovy 'magic' and recursive reflection). This has made the loaders unable to handle specific scenarios users need as well as forced only concrete classes to be loaded in the same file. The service is build on query build and should be removed in favor of loaders for specific entity types.
Entities that need to have spreadsheet loading in USPS
- Compensation
- Compensation Adjustment
- Employee
- Position
- Payroll Items
- Payroll Item Config
- Payroll Item Employee Error Adjustments
- Payroll Item Employer Error Adjustments
- Payroll Accounts
- Pay Distributions
- Leaves?
Current 'supported' types that should be removed
- Absence / Attendance (Attendance Import should be used)
- Concrete Payroll Item classes
- Concrete Payroll Item Config classes
- Non Contract compensations
- Date Text Fields
- Leaves?
The User Interface only displays a upload box and import buttons. We have a lot of white space to work with. Maybe we could display the require headers for each type right in the application? We could also return more robust results to the user after the file has been processed.
When we begin this epic we might want to look at OpenCSV to see if it will handle the loading for us
A new module should be created in USPS and all things related to mass loading should be kept there (unit tests, dtos, dependencies...etc)
Employee Mass Loader
This section will detail all property headers for the Employee CSV file
CSV Header | Header Value (if specific input required) | Required Header when Creating | Required Header when Updating |
---|---|---|---|
number | Y | Y | |
name.lastName | Y | N | |
name.firstName | Y | N | |
name.middleName | N | N | |
name.suffix | N | N | |
ssn | Y | N | |
legalName.lastName | N | N | |
legalName.firstName | N | N | |
legalName.middleName | N | N | |
legalName.suffix | N | N | |
address.street1 | N | N | |
address.street2 | N | N | |
address.city | N | N | |
address.state | N | N | |
address.postalCode | N | N | |
address.foreignAddress | true false | N | N |
address.province | N | N | |
address.country | N | N | |
birthDate | MM/dd/YYYY | N | N |
maritalStatus | Single Married Unstated | N | N |
race.white | true false | N | N |
race.black | true false | N | N |
race.asian | true false | N | N |
race.americanIndianAlaskaNative | true false | N | N |
race.nativeHawaiianPacificIslander | true false | N | N |
race.hispanicLatinoOptions | HispanicOrLatino NotHispanicOrLatino Unknown | N | N |
hireDate | MM/dd/YYYY | N | N |
newHireReportedODJFS | true false | N | N |
terminationDate | MM/dd/YYYY | N | N |
odjfsHireDate | MM/dd/YYYY | N | N |
osdiCode | N | N | |
emailDirectDeposit | true false | N | N |
reportToEmis | true false | N | N |
archived | true false | N | N |
odjfsReportable | true false | N | N |
customFields.accredDistrictExperience.value | N | N | |
customFields.authorizedExperience.value | N | N | |
customFields.buildingExperience.value | N | N | |
customFields.checkDistribution.value | N | N | |
customFields.credentialID.value | N | N | |
customFields.degreeType.value | N | N | |
customFields.districtExperience.value | N | N | |
customFields.ECEQualification.value | N | N | |
customFields.eligibleForRetirement.value | N | N | |
customFields.emisId.value | N | N | |
customFields.gender.value | N | N | |
customFields.handicapStatus.value | N | N | |
customFields.homePhone.value | N | N | |
customFields.homePhoneUnlisted.value | N | N | |
customFields.lastEvaluation.value | N | N | |
customFields.longTermIllness.value | N | N | |
customFields.militaryExperience.value | N | N | |
customFields.multilingual.value | N | N | |
customFields.nextEvaluation.value | N | N | |
customFields.nonCertificateEmployeeID.value | N | N | |
customFields.nonOhioPrivateExperience.value | N | N | |
customFields.nonOhioPublicExperience.value | N | N | |
customFields.otherEmail.value | N | N | |
customFields.ohioPrivateExperience.value | N | N | |
customFields.ohioPublicExperience.value | N | N | |
customFields.otherCredentials.value | N | N | |
customFields.partTime.value | N | N | |
customFields.payrollCode1.value | N | N | |
customFields.payrollCode2.value | N | N | |
customFields.payrollCode3.value | N | N | |
customFields.payrollCode4.value | N | N | |
customFields.payrollDate1.value | N | N | |
customFields.payrollDate2.value | N | N | |
customFields.payrollMoney1.value | N | N | |
customFields.payrollMoney2.value | N | N | |
customFields.payrollMoney3.value | N | N | |
customFields.payrollMoney4.value | N | N | |
customFields.payrollText1.value | N | N | |
customFields.payrollText2.value | N | N | |
customFields.personnelCode1.value | N | N | |
customFields.personnelCode2.value | N | N | |
customFields.personnelCode3.value | N | N | |
customFields.personnelCode4.value | N | N | |
customFields.personnelDate1.value | N | N | |
customFields.personnelDate2.value | N | N | |
customFields.personnelMoney1.value | N | N | |
customFields.personnelMoney2.value | N | N | |
customFields.personnelMoney3.value | N | N | |
customFields.personnelMoney4.value | N | N | |
customFields.personnelText1.value | N | N | |
customFields.personnelText2.value | N | N | |
customFields.primaryEmail.value | N | N | |
customFields.primaryRace.value | N | N | |
customFields.principalExperience.value | N | N | |
customFields.purchasedExperience.value | N | N | |
customFields.retireSystemExperience.value | N | N | |
customFields.secondaryEmail.value | N | N | |
customFields.semesterHours.value | N | N | |
customFields.spouseFirstName.value | N | N | |
customFields.subDays.value | N | N | |
customFields.totalExperience.value | N | N | |
customFields.tradeExperience.value | N | N | |
customFields.workPhone.value | N | N |