Policy Pack Specification
Alpha
DSAR is currently in alpha. APIs, package surfaces, configuration, and documentation may change as the project evolves.
This document defines the schema and evaluator contract for @dsar/policy-engine.
Policy pack schema
Policy packs are versioned, machine-readable contracts with deterministic sections:
packId,version,jurisdiction,effectiveAtsections.clocksections.representationsections.verificationsections.responsesections.deliverysections.appealssections.retentionsections.audit
Clock section
Required fields:
start:"receipt" | "verification_complete"verificationEffect:"stop_clock" | "no_stop_clock"clarificationEffect:"stop_clock" | "no_stop_clock"ackRequired:booleanackDeadlineBusinessDays?:numberresponseDeadlineDays:numberextension:{ enabled, maxAdditionalDays, requiresJustification }rules: deterministic override rules withid,precedence,when,apply
Rule precedence is deterministic:
- sort by
precedencedescending - tie-break by
idascending - apply merged rule overrides from lowest to highest precedence so highest precedence wins
Evaluator interface
evaluatePolicy(input) returns an Effect program with deterministic output.
Input envelope includes:
- policy pack payload
- jurisdiction + policy version
- request type and requestor type
- authority evidence signal
- timeline context (
receivedAt,now, pauses, extensions) - actor/context signals (
isComplex,requiresVerification)
Output envelope includes:
decision: actionable booleans (verification required, appeal eligibility, etc.)clock: base/final deadlines and applied pause/extension contributionsrequiredActionsrequiredNoticesmatchedRuleIdsexplainabilityTrace
Explainability trace contract
Every decision includes machine-readable trace entries with:
code(clock.base,clock.rule.applied,clock.pause.applied,clock.extension.applied,clock.final)message- optional
detailspayload
This enables replay and clock explain APIs to show exactly how due dates were produced.
Fixture matrix
Current fixture coverage:
uk-accesseu-clarification-pauseus-no-stop-verificationedge-repeated-clarificationsedge-extension-near-deadlineedge-partial-refusal-precedencepolicy-packs/uk-deadline-baselinepolicy-packs/eu-clarification-vs-verificationpolicy-packs/us-extension-cappolicy-packs/us-co-high-risk-verificationpolicy-packs/us-va-refusal-appeal
These vectors validate:
- deterministic outputs
- precedence behavior
- stop-clock / no-stop-clock behavior
- extension cap handling
- explainability trace shape and stable ordering
Launch catalog and known gaps
First-party launch coverage includes:
- UK baseline pack (
uk) - EU baseline pack (
eu) - Initial US set: baseline US (
us), California (us-ca), Virginia (us-va), Colorado (us-co)
Known gaps:
- Additional US state packs are not yet implemented in the launch catalog.
- State-specific refusal categories and exemptions remain future additions.
Jurisdiction hard-gate contract
Request intake now requires a top-level jurisdiction and resolves an active policy via:
- workspace/tenant scoped pin (if present)
- latest available pack for the same jurisdiction
- hard-fail with
POLICY_JURISDICTION_UNMAPPEDwhen no mapping exists
The hard-fail envelope includes structured guidance so clients can route users/admins:
subject_contact_adminadmin_register_policy_packadmin_activate_policy_pack
Custom policy lifecycle events
Custom policy authoring and activation emit dedicated policy audit events:
custom_policy_registeredcustom_policy_activatedcustom_policy_deactivated
These events are emitted by @dsar/policy-packs services and consumed by backend policy routes.