Skip to content

Strata

Submissions as immutable layers

Tier: Record ยท Requirement module: Submission Portal ยท Status: ๐ŸŸก Designed

Purpose

Strata holds what firms filed. Every submission is a layer: immutable once submitted, addressable forever, and never overwritten by an amendment or a resubmission. The name is the model โ€” layers of record laid down in order, readable in cross-section.

This engine makes the second law true.

Scope

Capability Status Notes
Draft return ๐ŸŸก Mutable until submitted; pinned to a template version
Import from Excel/CSV โฌœ Maps to template fields and rejects on mismatch โ€” never coerces
Pre-submission validation ๐ŸŸก Same Assay rules the supervisor will run
Internal maker-checker ๐ŸŸก Certifier must differ from preparer, enforced at the API
Certification declaration โœ… Electronic declaration recorded with actor and timestamp
Submit to supervisor ๐ŸŸก Freezes the version, seals it, emits the event
Resubmit with response โœ… New version; the prior version and the query it answers both persist
Submission receipt โฌœ Signed PDF with the submission hash โ€” the firm's proof of filing
Version comparison ๐ŸŸก Field-level diff between any two versions

The version model

obligation: R02 ยท licence 873390 ยท Q2 2026
   โ”‚
   โ”œโ”€โ”€ v1.0   submitted 2026-08-11 ยท certified T. Ncube ยท sealed
   โ”‚            โ””โ”€โ”€ rejected 2026-08-12 ยท reason cited ยท M. Okonjo
   โ”‚
   โ”œโ”€โ”€ v1.1   submitted 2026-08-19 ยท amendment responding to Q-1
   โ”‚            โ””โ”€โ”€ accepted 2026-08-21 ยท M. Okonjo          โ—„โ”€โ”€ current
   โ”‚
   โ””โ”€โ”€ current pointer โ”€โ”€โ–บ v1.1

Rules of the model:

  • A draft is mutable and belongs to the firm. It is not a version.
  • Submission freezes the document, assigns a version, and seals it. From that moment it is immutable.
  • An amendment is a new version against the same obligation, always carrying a reason and, where it answers one, the query reference.
  • The current pointer identifies the operative version. Moving it is itself a sealed event.
  • Deleting a version is not implementable. There is no endpoint and no code path.

Storage shape

A submission document is jsonb keyed by template field id, validated against its template version on write. The argument for this shape โ€” and the alternatives rejected โ€” is set out in the stack.

{
  "obligationId": "OBL-873390-R02-2026Q2",
  "version": "1.1",
  "templateCode": "R02",
  "templateVersion": "2.4",
  "submittedAt": "2026-08-19T14:22:00Z",
  "preparedBy": "user:j.moyo",
  "certifiedBy": "user:t.ncube",
  "amendmentOf": "1.0",
  "respondsTo": "Q-1",
  "values": {
    "R02-X01": 512760000,
    "R02-X03": 192787505,
    "R02-X08": 0.83
  },
  "documentHash": "sha256:9f2cโ€ฆ"
}

Values for derived fields are rejected, not ignored. A document that tries to supply R02-X07 fails conformance and the submission does not happen.

Owns

  • Drafts, submissions, and their versions
  • The current-version pointer per obligation
  • Certification records (preparer, certifier, declaration, board approval date)
  • Attachment references and checksums
  • Version diffs

Does not own

  • Validation results โ€” Assay produces them; Strata stores the reference
  • Review decisions โ€” Bench
  • The audit chain โ€” Seal
  • Obligation state โ€” Cadence, which Strata notifies by event

Open questions

  • Draft template migration. A draft pinned to v2.3 when v2.4 takes effect: the firm sees a diff and accepts the migration. Unresolved whether a supervisor can force it mid-period, and what happens to values in fields the new version removed.
  • Partial submission. Large returns filed section by section over days. Currently out of scope โ€” a submission is atomic โ€” but firms filing R19 daily trading data may need streaming instead.