How to use Time entries (CSV import + approve)
Import a timesheet, approve the rows, drop a bad batch if needed.
- Build the CSV. Header columns:
placement_ref, work_date, qtyare required.pay_code_item_ref(NORMAL/T15/…) oritem_nameidentifies which line to charge against.pay_rate/charge_rateare optional — supply them when the source system carries the historical rate (SC export); leave them blank to have FlecBase resolve via the pay code.external_refis the source-system row id; supplying it makes re-imports idempotent.
CSV columns: placement_ref, work_date, pay_code_item_ref, qty, optional rates + external_ref time-entries_csv_format.png - Dry-run. Send the file to your FlecBase administrator for a dry-run import. The dry run validates every row and reports the counts without writing — any malformed rows surface as errors before any data lands.

time:import-csv — dry-run preview before commit time-entries_import_cli.png - Commit the import. Once the dry-run is clean, your administrator runs the live import. Every row from the file shares one
import_batch_uuid— you'll be given that UUID so you can find or undo the batch later. - Approve in the UI. Open Ledger → Time Entries. Filter by placement, date range, or paste the batch UUID into the Batch filter to see just this import. Spot-check the rates and quantities, tick the rows, click Approve selected.

Time Entries list — filters for placement, status, date, batch UUID time-entries_list.png - Reject what looks wrong. Bulk action Reject selected sets status to Rejected — kept in the system for audit but never billable.

Bulk Approve action — flip imported → approved time-entries_bulk_approve.png - Recover from a bad CSV. Select any row(s) from the same batch and use the bulk action Delete whole import batch. Drops every unbilled row sharing that batch UUID — rows already on an issued invoice are protected. Re-import the corrected file.

Delete whole import batch — recover from a bad CSV time-entries_delete_batch.png

time-entries_2.png