Audience: Legal, Admins, Product, Authors
Outcomes: Faster drafting; billable, enforceable terms
Templates
Structure: Header (title, parties), Clauses (scope, IP, confidentiality, liability, payment)
Variables:
{{company_name}}
,{{daily_rate}}
,{{currency}}
Conditionals: include clause if
{{is_retainer}} == true
Sample (YAML)
name: Service Agreement - Standard vars: company_name: "" daily_rate: 0 currency: "USD" is_retainer: false clauses: - id: scope text: "Provider delivers design services as per attached SOW." - id: payment text: "Rate: {{daily_rate}} {{currency}} per day. Deposit due on signature." - id: retainer when: "{{is_retainer}} == true" text: "Monthly retainer billed in advance; unused hours do not roll over."
Clause library
Pre-approved blocks with owner and last-review date
Mark mandatory vs optional; only Admins/Legal can publish
Pricing models (short reference)
Model | When to use | Notes |
Flat price | One-off project | Single milestone or deposit + final |
Per-seat | SaaS seats | Qty × seat price |
Tiered | Volume discounts | Graduated vs. volume |
Usage | Pay-as-you-go | Metering + report schedule |
Map to orders
Convert
paymentTerms
→ milestones (deposit %, deliverable gates)Example:
{ "deposit": 30000, "milestones":[ {"name":"M1 - Design","amount":60000,"acceptance":"Figma sign-off"}, {"name":"M2 - Delivery","amount":60000,"acceptance":"Live site published"} ], "lateFees":{"afterDays":7,"ratePct":1.5} }
Edge cases
Zero-decimal currencies ⇒ no /100
Contract currency ≠ settlement currency ⇒ store applied FX rate
QA checklist
Mandatory clauses enforced by policy (see Approvals)
Payment terms generate correct milestone totals
Runbook: “Template change not reflected”
Check template version referenced by draft; update draft to new version