When completing a job bills the client

Finishing a job can mean four different billing outcomes, chosen per client: draft an invoice for each job as it completes, accrue and consolidate a period into one invoice, hold until the period's last scheduled job completes and bill then, or never auto-bill. The completion event carries the decision; the cadence setting decides what happens.

Completing a job doesn't have one billing meaning — it has four, and which one applies is set per client. The same recurring service can bill one client per visit and another once a month, because the cadence lives on the client, not the service. Here are the four outcomes a completion can produce.

The four cadences

  • Per job, on completion. Each completed job immediately drafts its own invoice. Best for one-off or ad-hoc work where the client expects to be billed as things are done.
  • Period, consolidated. Completed jobs accrue across a period (say a month) and are drafted as a single invoice for that period — one line per visit. Best for clients who want one tidy bill, not a stream of them.
  • Last job of the period triggers it. The invoice drafts automatically when the final scheduled job of the period is completed. The schedule itself is the trigger: when the work for the month is finished, the bill exists. This is the powerful one for monthly contracts — there is no separate "run month-end billing" step to forget, because finishing the work is the month-end step.
  • Manual. Completion never auto-bills. The operator raises invoices by hand. Best where billing is negotiated, milestone-based, or handled outside the normal flow.

The most under-appreciated option is the third: let the act of finishing the last visit be the thing that bills the month. The event you already emit becomes the trigger you'd otherwise have to schedule.

How the decision is actually made

Completion emits an event — the canonical signal that a job is done. A cadence-aware handler reads the client's setting and decides: draft now, accrue for later, hold until the period's last job, or do nothing. Nothing about the completion changes between clients; only the handler's response to the event differs.

That design is why getting the write path right matters so much. If a job is completed through a path that doesn't emit the event — see one write path, many callers — none of these cadences fire, and the most visible symptom is a completed job that never bills. And if the handler is implemented but never subscribed, you get the same silence for a different reason: a handler nothing subscribes to does nothing.

Why per-client, not per-platform

Billing preference is a relationship fact, not a software fact. A property manager with twenty sites wants one consolidated monthly invoice; a one-off storm-damage cleanup wants billing the day it's done. Forcing both into a single platform-wide cadence would mean working around the tool for half your clients. Making cadence a per-client setting keeps the software out of the way of the commercial relationship. The schedule that produces these jobs is described in scheduling jobs by the day.

Related

Last updated 2026-06-26