Back to Playbook
Act 3: Day-to-Day Operations

17. Data Import/Export

Story

Sarah is moving an existing company onto Zetta HRM mid-year. Instead of importing each module separately and hoping the order is right, she downloads one workbook with a tab for every entity — departments, designations, employees, salary structures, leave types, holidays, loans, and opening balances — fills in what she has, and uploads it once.

The system validates the whole workbook, shows her a single cross-module preview, and configures nothing until she approves. Because she is joining part-way through the year, she also brings each employee's opening balances so the first payroll run continues cleanly instead of resetting year-to-date totals to zero.

Later, when she just needs to correct one module or add a batch of new hires, she uses the standard single-module import. And every month she exports reports for payroll reviews, finance, and auditors.

Happy Path

### Import & Start Working — the guided onboarding (one workbook)

### Single-module import (top-ups and corrections)

### Export

  • Download the all-in-one workbook: an Instructions sheet plus one sheet per module, ordered so each step builds on the last.
  • Fill only the sheets you have data for; leave the rest blank.
  • Upload once — every sheet is validated and merged into a single combined report and preview.
  • Review per-module results; rows that need attention are flagged but never block the valid rows.
  • Approve, then apply — nothing is written before approval. Modules are created in dependency (topological) order, e.g. departments before employees, employees before salary structures and opening balances.
  • Opening balances seed mid-year year-to-date figures (pensionable/insurable earnings, CPP/EI, provident fund) so statutory caps continue from the real position.
  • Statutory tax setup is provisioned automatically from the country pack on apply (Bangladesh income tax; Canada CPP/EI + federal/provincial) — there is no separate tax file to upload.
  • Download a single-module template (CSV or XLSX) with the exact columns required.
  • Fill it offline, upload, run validation, then execute after validation passes.
  • Track long-running imports through progress status with detailed row-level feedback.
  • Uploading a file you have imported before is fine, including after deleting what it created: validation always re-checks against your current data, and existing rows are skipped instead of duplicated.
  • Generate report and operational-data exports in CSV or PDF.
  • Long exports run in the background with clear status; download when complete.

Failure Modes

FailureWhat the user seesWhat happens next
Workbook sheet has invalid format or a renamed/reordered headerRow- and sheet-level validation errors in the combined reportFix the flagged cells (or re-download the template) and re-upload
Some rows are invalid but others are fine"X created, Y failed" per module, with a downloadable error reportValid rows still apply; fix the failed rows and re-apply
Apply stops part-way (e.g. a later module errors)Session marked PARTIAL/FAILED; already-applied modules stayRe-apply resumes from the first incomplete module — earlier modules are not re-created
Statutory provisioning hiccups during applyApply still completes; the statutory step is reported as failedRe-apply — statutory setup re-runs idempotently and seeds the rows
A module references another that is not in the file yet (e.g. an employee's department)Row-level "not found" error for that referenceInclude the referenced rows, or import that module first
Single-module CSV has duplicate rowsRows skipped or corrected per the module's unique keyDe-duplicate and retry

Edge Cases

ScenarioBehaviorWhy
Nothing is applied before approvalValidate and preview only stage data; approval flips the gateThe guarantee: you see every change before it touches your workspace
Mid-year onboarding with opening balancesYTD seeds carry into the first payroll run; statutory caps continue, not resetA joiner part-way through the tax year withholds correctly
Re-importing the same opening balances or existing loansRe-import corrects in place rather than duplicatingImports key on stable unique fields and are idempotent
Records created by an import are deleted, then the same file is uploaded againValidation is recomputed against the current database and the rows are written againThe check is against live data, not against the upload log — deleting the rows changes exactly what a cached answer was describing
The same file is uploaded twice with nothing deleted in betweenThe stored copy is reused, the rows that already exist are skipped, and pressing Execute Import twice does not import twiceRepeating an upload should be free of consequence, not free of checking
A deliberate clean slate is wanted for a file uploaded beforeTick Force re-import before uploading: it ignores everything staged from the earlier attemptRarely needed, but there when you want no shared state with the previous try
An attendance file writes Check In as 09:00Read as 9 AM in the company's timezone, set on the company profileA wall-clock time means the wall where your people work, not wherever the server happens to be
An attendance row runs 22:0006:00The checkout lands on the next day and the day is eight hours longImported days go through the same calculation as punched ones, which knows a shift can cross midnight
An attendance row leaves Shift Name blankThe employee's effective shift assignment is used, then the company defaultA blank cell is the file declining to say, not the employee having no schedule — and with no shift there is nothing to measure lateness or overtime against
An attendance row leaves Status blankStatus is derived from the punches: an arrival past the grace period imports as Late, not PresentThe file states facts; the system draws the conclusions, the same way it does for a live punch
An attendance file fills Late Minutes and also has a Check InThe punches win and Late Minutes is recomputedA row that states both can contradict itself; the derived figure is the one every other day in the table was measured with. Files with no punches still use the column
Existing (already-disbursed) loansImported as active with paid installments already marked, so they are never re-deductedOnboarded loans reflect real outstanding state, not a fresh schedule
Combined workbook vs single templateBoth are offered on the Import Center; the workbook is the guided full setup, single templates are top-upsOne file for go-live, focused files for day-to-day corrections
Large export generationJobs move through PENDING → PROCESSING → COMPLETED/FAILEDVisibility for long-running background tasks