Billing

Billing workflow: from tasks to synced invoices

This guide walks through the full billing flow:

  1. Create billable tasks.
  2. Add task entries.
  3. Compile billable items.
  4. Generate invoices.
  5. Sync invoices to the integration provider.

It also explains which defaults are used when product assignments are missing at contact, membership, team, and tenant scopes.

Step 1: Create a billable task

  1. Open Tasks.
  2. Create a task with:
    • Client set to a contact.
    • Billable enabled.
    • Optional billing context such as product, price list, unit, and unit price.
  3. Save as draft, or mark done when the task has billable quantity/task entries.

Step 2: Add task entries

  1. Open the task and add time entries.
  2. Stop entries so they become eligible for billing.
  3. For mileage entries, include distance (km) and optional transport minutes when needed.

Only unbilled, stopped entries for billable tasks with a contact client are candidates for compile.

Step 3: Compile task work into billable items

  1. Open Billable Items.
  2. Run Compile.
  3. Wait for async processing to finish.
  4. Review resulting pending billable rows.

Compile converts task entries to billable items and marks source entries as billed.

Step 4: Generate invoices from billable items

  1. In Billable Items, select the rows to invoice.
  2. Run Generate invoice.
  3. Choose grouping mode as needed.
  4. Wait for async invoice operation to complete.
  5. Open Invoices and review draft invoices and invoice lines.

Step 5: Sync invoices

  1. In Invoices, trigger sync for a draft/ready invoice.
  2. Sync is queued and processed asynchronously.
  3. Monitor sync status from the invoice row or invoice page.

Product assignment resolution order

When a task entry has no explicit product, billing resolves product assignment in this priority:

  1. Task assignment
  2. Contact assignment
  3. Membership assignment
  4. Team assignment
  5. Tenant assignment

If none resolve, fallback defaults are used (see next section).

Fallback defaults when assignments are missing

If task/contact/membership/team/tenant assignment is missing, the resolver auto-creates and reuses default products per line kind:

  • task_entry -> Product: Work, Unit: hour, Default unit price: none
  • goods -> Product: Work, Unit: hour, Default unit price: none
  • expense -> Product: Work, Unit: hour, Default unit price: none
  • transport_distance -> Product: Transport, Unit: km, Default unit price: 5.0
  • transport_time -> Product: Transport Time, Unit: hour, Default unit price: 1000.0

Notes:

  • Default products are tenant-scoped and marked as auto-created metadata.
  • For transport lines, compile prefers entry snapshot price, then default product price metadata, then task unit price (when present).
  • If no pricing source is found, compile still produces zero-priced lines rather than failing silently.
  • Task has contact client and is billable.
  • Entries are stopped and unbilled before compile.
  • Billable list shows pending rows after compile.
  • Generated invoice has expected line kinds and quantities.
  • Sync status updates after invoice sync request.