Cadence¶
Tier: Motion · Requirement module: Compliance Calendar · Status: ✅ Prototyped (spine)
Purpose¶
Cadence knows who owes what, when. It materialises an obligation for every combination of licence, obligation rule, and reporting period (or once-off assignment), pins the return template version in force, computes the due date, and will drive reminders and late escalation.
An obligation is the spine of the platform. A submission exists to satisfy one; a review decides one; a breach is recorded against one.
Vocabulary (locked)¶
| Term | Meaning |
|---|---|
obligation_rule |
Studio config: what must be done, how often, which licence category, which templates |
obligation |
Runtime instance for a firm / licence / period (or once-off due date) |
| Cadence | Engine BC that materialises and lists obligations — not a table named “schedule” |
Do not introduce obligation_schedule as a third noun. Recurring vs once-off are two deliberate
Studio menus over the same obligation_rule aggregate (rule_type).
Scope¶
| Capability | Status | Notes |
|---|---|---|
| Recurring rules (Studio) | ✅ | One licence category + many return templates (one primary) |
| Once-off / ad-hoc rules (Studio) | ✅ | Category-wide or explicit firms; materialise on save |
| Materialise recurring periods | ✅ | Active licences × active recurring rules; current + previous period |
| Pin template + version on instance | ✅ | Effective-dated return_template_version at generation |
| Due-date from days after period end | ✅ | Recurring; once-off uses rule effective / due date |
| Reminder / notification fatigue | ⬜ | Tables exist (notification_rule, obligation_notification); engine later |
| Holiday calendar adjustment | ⬜ | Still designed; not yet applied in materialise |
| Extension requests | ⬜ | Firm requests, supervisor grants |
| Penalty calculation hooks | ⬜ | Recommendation for Docket only |
| Calendar export | ⬜ | iCal feed |
Obligation rule shape¶
Configured under Studio → Obligations (two menus so the path is deliberate):
- Recurring rules —
rule_type = RECURRING, frequencyMONTHLY|QUARTERLY|ANNUAL - Once-off rules —
rule_type = ADHOC, frequencyONCE
Each rule links to:
- One licence category (searchable) when targeting by category
- Many return templates via
obligation_rule_template(is_primary,sort_order) - Explicit firms only for once-off when
applies_to = EXPLICIT_FIRMS
flowchart LR
OR[obligation_rule]
OR --> ORC[obligation_rule_category]
OR --> ORT[obligation_rule_template]
OR --> ORF[obligation_rule_firm]
ORT --> RT[return_template]
RT --> RTV[return_template_version]
OR -->|materialise| O[obligation]
Due-date arithmetic¶
Stated explicitly because it is the figure most likely to be challenged.
period end 2026-06-30 (from the rule frequency and the period)
+ days after period end 15 (obligation_rule.days_after_period_end)
= due date 2026-07-15
(calendar adjustment and extensions — not yet applied in the spine)
overdue when now > due date AND status still OPEN
Every step will be stored, not just the answer, once holiday calendars and extensions land.
Obligation states (spine today)¶
Implemented statuses: OPEN, OVERDUE, SUBMITTED, ACCEPTED, WAIVED.
Full forecast / escalation graph remains the design target; the spine materialises OPEN /
OVERDUE only.
Owns¶
- Obligation instances and their states
- Materialisation from recurring and once-off rules
- Pinned template / template version on each instance
- Notification rule and delivery log schema (engine later)
Does not own¶
- Obligation rule definitions — Licensing / Studio config (
obligation_rule) - Licence categories and firm licences — Registry + Licensing config
- Return template content — Licensing / Return Studio spine (
return_template) - Submissions — Strata
- Penalties — Cadence recommends, Docket decides
Open questions¶
- Event-driven returns. R08 STR logs and R29 change notifications have no period and no due date; they are triggered by an event at the firm. Once-off rules cover deliberate supervisor assignments; true event-driven obligations may need a further kind.
- Retrospective calendar changes. A public holiday gazetted after obligations were materialised must shift due dates already computed. Policy must be labelled before enabling.
Related¶
- Registry — licences that recurring rules apply to
- Licensing — adjacent grant workflows (parked); Studio config for categories / rules lives in the licensing package today
- KD-012
- Strata — submissions satisfy obligations
- Architecture doctrine — deadlines are computed