Data Migration & Bulk Asset Upload
Move your existing asset register from Excel — with dry-run validation, row-level error reporting, and the ability to reverse an entire batch if something isn't right.
The Challenge
Switching to a new system means moving thousands of asset records. Manual re-entry is impractical. One-off scripts risk importing bad data that undermines the new register from day one.
Typical CSV imports offer no validation — duplicate asset IDs, missing mandatory fields, and wrong depreciation figures go undetected until an auditor finds them.
Once a bad import is committed, there is no structured way to undo it. Organisations either live with incorrect data or start over.
How We Address This
Three Operation Modes
The bulk engine handles three scenarios in a single upload. Create: new assets with auto-generated IDs. Update: modify allowed fields on existing records (immutable fields like classification and quantity are blocked). Adjust: proportional quantity reduction with financial recalculation. The mode is determined automatically from each row's data.
Dry-Run Validation
Two validation levels before any data is written. File validation checks structure, columns, and data types — no database writes. Row-level validation runs the full pipeline in read-only mode and returns per-row pass/fail with specific error codes. Validate first, commit when confident.
40+ Validation Rules
Each row passes through a rule engine: mandatory fields, forbidden system-generated fields, data type checks, immutability enforcement on updates, financial field gating (amounts only editable when blank), quantity guards, and owner-to-department derivation. Every failure returns a specific error code with a human-readable message.
Row-Level Atomicity
Each row commits or rolls back independently. A single bad row does not block the other 4,999 rows in the batch. Success and failure counts are tracked, and failed rows are exportable as CSV for correction and re-upload.
Guided Templates
Downloadable Excel templates with colour-coded headers (gold for mandatory, blue for set-once fields), embedded dropdown validation, numeric constraints, and an Instructions sheet with a complete field reference. Separate templates for Create vs Update — each shows only the relevant fields.
Batch Reversal
Made a mistake? Reverse an entire batch — all assets created in that upload are soft-deleted. Guard checks prevent reversal if assets are already referenced by purchase requisitions, have child records, have physical tags, or were created via procurement posting.
Automatic Computations
The system derives values you shouldn't have to enter manually.
Total Amount
Computed as basic amount + GST amount. No manual totalling needed.
End of Useful Life
Computed from useful life years + capitalisation date. Updates automatically if useful life changes.
Department
Auto-derived from the owner's department assignment. No separate department column needed in the upload.
Asset Nature
Derived from classification (Fixed Asset, Inventory, Consumable). Set automatically — cannot be manually overridden.
Audit Trail & Format Support
Per-Row Audit
Full Traceability
Every processed row generates an audit record: raw payload, before-state, after-state, field-level deltas, outcome, and the business rule applied.
Batch Tracking
Metadata Preserved
Each upload is recorded with timestamp, uploader, filename, row counts (total, success, failed), and error details. Batches are listed and retrievable at any time.
File Formats
CSV, XLSX, XLSM
Standard CSV (UTF-8), Excel workbooks, and macro-enabled workbooks. Date parsing handles YYYY-MM-DD, DD/MM/YYYY, DD-MM-YYYY, MM/DD/YYYY, and Excel serial dates.
Null Semantics
Explicit Control
Empty cell means "no change" on updates. The text "null" means "explicitly clear this field." No ambiguity about whether a blank was intentional.
Ready to Migrate Your Asset Register?
Migration can be handled end-to-end by us, or your team can use the bulk upload engine directly — with templates, dry-run validation, and row-level error reporting.