Billing
Billing workflow: from tasks to synced invoices
This guide walks through the full billing flow:
- Create billable tasks.
- Add task entries.
- Compile billable items.
- Generate invoices.
- 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
- Open Tasks.
- Create a task with:
- Client set to a contact.
- Billable enabled.
- Optional billing context such as product, price list, unit, and unit price.
- Save as draft, or mark done when the task has billable quantity/task entries.
Step 2: Add task entries
- Open the task and add time entries.
- Stop entries so they become eligible for billing.
- 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
- Open Billable Items.
- Run Compile.
- Wait for async processing to finish.
- 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
- In Billable Items, select the rows to invoice.
- Run Generate invoice.
- Choose grouping mode as needed.
- Wait for async invoice operation to complete.
- Open Invoices and review draft invoices and invoice lines.
Step 5: Sync invoices
- In Invoices, trigger sync for a draft/ready invoice.
- Sync is queued and processed asynchronously.
- 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:
- Task assignment
- Contact assignment
- Membership assignment
- Team assignment
- 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: nonegoods-> Product: Work, Unit:hour, Default unit price: noneexpense-> Product: Work, Unit:hour, Default unit price: nonetransport_distance-> Product: Transport, Unit:km, Default unit price:5.0transport_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.
Recommended validation checklist
- 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.