Billing run

A billing run prices one client's time for one closed period, applies policies and time banks, and produces the client timesheet; runs are sequential per client and can only be undone by voiding.

Written for
admin, integration-developer
Roles
owner, admin
Requires
Owner or Admin, in the browser, with a recent re-authentication
Feature
billing

A billing run turns logged time into something a client can be invoiced for. It covers one client and one closed period: it prices every eligible billable entry, applies billing policies and time banks, rounds up per the client's rounding setting, and renders the client timesheet. SAQ does not create invoices; the run and its timesheet are the basis your invoicing system uses.

How it relates to other concepts

  • Only closed periods can be run, and a client's periods must be run in order, because bank balances depend on the sequence.
  • The run reads every unbilled entry dated up to the period end whose ticket is billed to the client, including older entries on deliverables that closed since (billing mode). There is no separate cutoff date.
  • Corrections are billed in the period they were made.
  • Each priced entry gets an outcome: charged, bank, or free. Once priced, the entry is frozen.

Rules

  • States: Preparing, Committed, Documents ready, Delivered, Voided.
  • Blockers stop a run until fixed: no consultant category on an entry; no rate on the card for the category and date; no billing description on the ticket; a policy naming a bank that does not belong to the client or project.
  • Rounding is per entry, up to the client's increment (0, 6, 15, or 30 minutes), applied cumulatively at the run and never on the entry itself.
  • A run with nothing to bill still posts the period's bank rollover.
  • Committing is an Owner or Admin action in the browser with a recent re-authentication. It is refused to every API token and to MCP.
  • Each run carries an idempotency key; repeating a commit with the same key returns the recorded run instead of creating another.
  • Undo is void, and only the client's latest non-voided run can be voided. Voiding reverses every bank ledger row the run posted, voids its documents, and cancels queued deliveries. Both commit and void are audited.
  • Money is per currency and never summed across currencies.

Example

September is closed. An Admin starts a run for Nordic Retail, fixes one blocker (a missing billing description on ACME-184), reviews 42 charged hours, 7 bank hours, and 1 free hour, re-authenticates, and commits. Two PDF timesheets are rendered and emailed to the client's billing recipients.