Contracts Module
Sales contract-tracking module on the frozen platform. Mirrors the Opportunities / Quotations notes/timeline/assignment pattern, kept lean (no line items — a contract is a single signed agreement record).
Hard dependency: Contracts requires the Opportunities module — Marketplace install is blocked until Opportunities is entitled. Contracts may optionally link a Quotation once the Quotations module is also entitled.
Guides
| Audience | Document |
|---|---|
| Operators / workspace users | contracts.md |
| Engineers | contracts.md |
| Production / ops | contracts.md |
| Module Development Standard | module-development.md |
| Reference blueprint | opportunities.md · quotations.md |
| Tenant API | ../api/tenant-v1-contracts.md |
Capabilities
- Contract fields: opportunity (required; gated New when
opportunities.create), optional quotation link, title, party name, start date (required), optional end date, value, currency, rich-text description and notes - Status workflow:
draft → sent | active | terminated;sent → active | expired | terminated;active → expired | terminated(POST /contracts/{id}/send,.../accept,.../status) - Download contract PDF (workspace-branded; description, notes, party, value, dates)
- Email customer after Send (
POST /contracts/{id}/email,contracts.send) — optional PDF attachment; for Sent contracts, appends a one-time customer sign link; default recipient from the opportunity’s contact/company; recordsemailedtimeline + tenant email log - Customer e-signature (v1) — public accept page (
/#/accept/contracts/{token}); staff can Copy accept link; signer name/email/IP recorded on accept → status Active - Staff may still Activate without signature from Draft (
contracts.update) without issuing a customer link - Create invoice (
POST /contracts/{id}/convert) — repeatable draft CustomerInvoice from an active contract when Invoices is entitled (soft check). Confirming in the UI acknowledges repeat billing (acknowledge_repeat_billing); the API requires that flag for the second and later invoices from the same contract. - Assignment with assignee scoping via
contracts.assign - Notes + domain activity timeline (mirrors Opportunities / Quotations)
- Trash filtering plus Restore and Delete permanently
- Module licensing (
module:contracts) + Spatie permissions — free Marketplace opt-in (Sales category) - Audit + activity logging; assignment notification
Permissions
contracts.view · create · update · delete · restore · force.delete · assign · send · accept · convert
Enable Contracts from Marketplace (free) once Opportunities is installed. Catalog: slug contracts, category sales, is_default_included = false, is_billable = false, sort_order = 60, version 1.5.0.
Related modules
Hard dependency: Opportunities (see Module Dependencies). Optional: Quotations — the quotation picker on a contract only appears (and validates) when Quotations is entitled. Optional: Invoices — create-invoice is hidden until Invoices is entitled.
Explicitly deferred
- Multi-signer / countersign / third-party e-sign providers (DocuSign, Adobe Sign)
- Drawn signature image capture on the PDF
- Renewal reminders
- Multi-currency conversion