Documentation menu

How to price a service contract

Audience: admin — the contract editor is a settings-owner surface (commercial edit plus financial:read).

A contract is one client's answer to how do we get paid for this work? The type you pick decides what the engine evaluates. Everything else on the page is the configuration that type reads.

Open Contracts (/contracts) and pick one. The editor is per-agreement: identity and lifecycle at the top, the commercial fields for the type, the child rows (blocks, caps, change orders, service credits), then a billing preview over any window you choose.

1. Pick the type that matches the deal

TypeWhat billsFields that matter
Recurringa flat price per periodprice, frequency, billing anchor
Retainera per-period base that buys included minutesprice, included minutes, overage rate, blocks
Time & materialsapproved labor off a rate carddefault hourly rate, rate card, caps, blocks, minimum
Fixed feedated schedule entriesfee schedule
Per unitprice × count, counted at evaluationprice per unit, count by devices or users
Per incidenta price per closed ticket in a priority bandprice per closed ticket, ticket band

Two rules the server enforces, so the form never offers what would be refused: prepaid blocks ride T&M and retainer only, and NTE caps are T&M-only.

2. Blocks: hours the client bought up front

A block is a prepaid balance: minutes sold at a sale price, drawn down by approved work, oldest block first. The editor's Prepaid blocks card takes a label, total minutes, sale price, an optional block rate, a rollover policy, and an expiry date.

  • Block rate is a discount against the rate card for work priced against that block. Leave it empty and draws bill at the card rate.
  • Rollover is expire (unused minutes lapse), rollover (they mint a successor block), or none (they hold, with no expiry).

Blocks are replaced wholesale when you save the card, and each save mints new rows rather than editing the old ones: a block's identity is its draw history. The balance itself is not on this page. It is on the verification workspace, which is where a period gets checked.

3. Caps: a ceiling, and what happens at it

A not-to-exceed cap puts a bound on billable work. Each cap says what reaching it does, so it is never silent:

  • Warn only — the cap rides the evaluation as a warning and the bill continues.
  • Stop at the cap — work past the ceiling is dropped.
  • Bill the overage — work past the ceiling bills at the cap's overage rate.

Scope is per period or per contract. A cap can also name one work type, which is how a cap covers remote work without capping on-site work. Save the card to replace the set. Saving an empty set removes every cap.

4. Minimums and escalators

A minimum commitment tops a short period up. A period that bills below the minimum gets a true-up line, so the contract's floor is real rather than a hope. The engine counts the labor the period consumed alongside the base, so a T&M contract carries a floor too. Clear the field and save to remove it.

An escalator lifts the base at each billing anniversary: 300 basis points is +3.0% a year. It walks anniversaries off the billing anchor, so it needs a billing frequency and only the types that have one offer it: recurring and retainer. Set the date to start the uplift, or leave it empty and the first uplift lands on the anchor's first full period. Clear it the same way as a minimum.

5. Change orders

A change order is approved scope that bills as its own line. Add one with a number, a title, an amount, and an optional description. The lifecycle is draft → approved | rejected | cancelled, and billed is run-owned: the invoice run flips an approved order to billed and links the invoice. Until it is approved, a change order prices nothing.

Approve or reject from the row. Cancelling an approved order withdraws it before it reaches an invoice. Once billed, the row is history.

6. Service credits

A service credit is what the agreement owes back when a target was missed. It needs a reason in words ("resolution target breached by 2d 4h"), an amount, and the date whose billing window it lands in. A pending credit in a run's window becomes a negative line, and that run marks the credit applied. Applied credits are immutable, so a mistake is corrected by issuing a new credit, not by editing the old one. Pending credits can be cancelled from the row.

7. The purchase-order number

One field, copied onto every invoice the contract produces. Tax is not computed here and not stored on the invoice: the boundary is deliberate and explained. A blank field leaves the stored PO alone, because a patch that sends nothing means "unchanged".

8. Read the preview before you run

The Billing preview card evaluates the contract over any window you pick: line count and total, through the same engine a run uses. The per-contract detail is on the verification workspace, which pairs that preview with the entries behind it.

What you learned

  • Blocks are prepaid balances and caps are ceilings with a typed response. Both are replaced wholesale, never edited row by row.
  • Minimums true up against base plus consumed labor. Escalators lift on the anniversary, so they need a billing frequency.
  • Change orders bill only once approved. Service credits bill once, then freeze.
  • The PO number prints on invoices while tax stays at the accounting-export boundary.

Documentation © 2026 Marula, licensed CC BY 4.0. Marula is a trademark. View source

For admin — the contract editor is a settings-owner surface.