Add lifecycle date fields: execution_date, effective_date, initial_term_end_date, renewal_date, expiry_date, termination_notice_deadline (derived: expiry_date minus notice_period_days).
Include financial fields: contract_value, currency, payment_schedule (array of {due_date, amount}), and a budget_owner reference.
Add obligation fields: auto_renewal (boolean), notice_period_days (integer), governing_law (jurisdiction string), dispute_resolution (enum: arbitration, litigation, mediation), and a clauses array of {clause_type, summary, page_ref}.
Add operational metadata: status (enum: draft, active, expired, terminated, under_review), storage_uri (pointer to the PDF in your document store), audit_log (array of {timestamp, actor, change}).
Version the schema from the start (schema_version field) and write a migration plan for adding fields without breaking existing records.
Known gotchas
Dates stored without timezone context cause renewal alert miscalculations across jurisdictions; store all dates as ISO 8601 with explicit UTC offset or as date-only with a governing_law_timezone field.
Treating contract_value as a single scalar breaks for multi-currency or milestone-based contracts; model it as a structured object from the start.
Auto-renewal logic that reads only expiry_date without accounting for notice_period_days will fire alerts too late to act; always compute and store the action_required_by date as a first-class field.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp