CSV Data Ingestion
Contract-as-Code validates employee payroll data uploaded as CSV files. No direct integration with your HRIS or payroll system is required.
Supported HRIS formats
The column-mapping engine automatically recognises exports from:
| Platform | Auto-detected |
|---|---|
| ADP Workforce Now | ✓ |
| Ceridian Dayforce | ✓ |
| Workday | ✓ |
| UKG / Kronos | ✓ |
| Sage Payroll | ✓ |
| Micropay | ✓ |
| BambooHR | ✓ |
| Generic CSV | Manual mapping |
For other formats, you'll be prompted to map columns during the first upload. The mapping is saved for future uploads.
CSV schema
Required columns
| Column | Type | Description | Examples |
|---|---|---|---|
employee_id | string | Unique employee identifier | EMP-4471, 12345 |
date | date | Pay period date or shift date | 2025-01-15, 01/15/2025 |
hours_worked | number | Total hours for the period | 42.5, 7.5 |
hourly_rate | number | Rate paid per hour | 35.00 |
classification | string | Job title or classification code | RN-2, Labourer Grade 3 |
Optional columns (improve finding accuracy)
| Column | Type | Description |
|---|---|---|
shift_start | datetime | Shift start time (enables shift premium validation) |
shift_end | datetime | Shift end time |
overtime_hours | number | Overtime hours already calculated by your system |
overtime_rate | number | Overtime rate applied |
years_of_service | number | Employee tenure in years |
vacation_hours | number | Vacation hours taken in the period |
vacation_pay | number | Vacation pay amount |
department | string | Department or cost centre |
location | string | Work location |
employment_type | string | Full-time, part-time, casual |
hire_date | date | Date of hire |
Date formats
The parser accepts:
- ISO 8601:
2025-01-15,2025-01-15T08:00:00 - US format:
01/15/2025,1/15/2025 - UK/AU format:
15/01/2025 - Separated:
2025-01-15,15-Jan-2025
The parser auto-detects the format. If ambiguous (e.g., 01/02/2025), you'll be prompted to confirm.
Upload process
- Navigate to Validation → New validation run
- Select your contract(s) and jurisdiction
- Upload your CSV file (drag and drop or file picker)
- The column-mapping engine attempts automatic mapping
- Review and correct any mappings that need adjustment
- Click Run validation
File size limits
| Plan | Max file size | Max rows |
|---|---|---|
| Free Pilot | 5 MB | 1,000 |
| Per Contract | 50 MB | 50,000 |
| Monthly SaaS | 200 MB | 500,000 |
Encoding
UTF-8 is required. Files with BOM (byte order mark) are accepted. Other encodings (Latin-1, Windows-1252) are detected and converted automatically where possible.
Data handling
Employee PII
Before any processing, employee identifiers are hashed using SHA-256. The original identifiers are never stored on our infrastructure. The hashed references allow findings to be correlated back to specific employees within your own systems.
- CSV files are stored in your regional data centre during processing
- Files are automatically deleted 90 days after upload
- You can delete uploaded files manually at any time
- Uploaded data is never used for AI model training
Troubleshooting
Common upload errors
| Error | Cause | Fix |
|---|---|---|
Missing required column: employee_id | The column couldn't be auto-mapped | Map the column manually in the mapping step |
Invalid date format in row 42 | Unrecognised date format | Check the specific row; ensure consistent date formatting |
Duplicate employee_id + date combination | Multiple records for the same employee on the same date | This may be valid (multiple shifts). Confirm and re-upload, or consolidate rows |
File too large | Exceeds your plan's file size limit | Split the file or upgrade your plan |
Column mapping tips
- Column names are matched case-insensitively
- Common aliases are recognised (e.g.,
emp_no→employee_id,hrs→hours_worked) - If your HRIS uses non-standard column names, save the mapping once and it will apply to future uploads