Skip to content

CAP-ACC-REC-015Investigate and resolve reconciliation concerns

Markdown

CAP-ACC-REC-015

Investigate and resolve reconciliation concerns

Markdown
  • DocumentDraft
  • Product intentConfirmed
  • ImplementationObserved

KindCapabilityProduct areaAccountingModuleReconciliationRevision2

Read atservices-accounting f47cb263react-console baf6dae3

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
Repeated detection does not duplicate an active concern.Missing settlement cannot receive an unsupported resolution.Responsibility holders receive required blocker attention.
Surfaces
consoleapi
Intent sources
services-accounting:docs/milestones/plans/ACCT-M8-plan.md#D6 (architecture §3.4 U10)services-accounting:docs/milestones/plans/ACCT-M8-plan.md#D9 (attention items for the holders of the reconciliation responsibility)services-accounting:docs/milestones/ACCT-M8-payout-reconciliation.md#Built (WP-B4: as_of on exception resolve)

Controls

27 controls apply, from the corpus control catalogue.

TC-IAM-001 TC-IAM-002 TC-IAM-004 TC-IAM-005 TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-AZ-006 TC-TEN-001 TC-TEN-002 TC-TEN-003 TC-DAT-001 TC-DAT-004 TC-LOG-002 TC-LOG-003 TC-LOG-004 TC-AVL-001 TC-AVL-004 TC-MON-001 TC-MON-002 TC-MON-004 TC-PI-001 TC-PI-002 TC-PI-003 TC-PI-004 TC-PI-005

Permissions

KeyChecked atScope
accounting.reconciliation-exceptions.readapitenant
accounting.reconciliation-exceptions.updateapitenant
accounting.reconciliation-exceptions.updateconsoletenant

Business Rules

12 rules, 11 to be proved before approval. A rule's product intent is derived from its origin: 12 confirmed by a product decision, the rest inheriting this capability's confirmed.

IdRuleKindEnforced atProvenance
01must prove
Confirmed
A manual problem records its unit, blocker or warning severity, title, description and one to fifty local subjects, optionally an amount, period anchor, owner and up to twenty steps, and receives a number.
validationapi, service, databasetest
02must prove
Confirmed
Every exception subject supplies a navigation target for opening its record in the console.
policyservicetest
03must prove
Confirmed
Detectors suppress an already open, investigating or accepted condition, reopen a resolved condition’s existing problem and clear open problems when their condition disappears.
origin: services-accounting:docs/milestones/plans/ACCT-M8-plan.md#D6 (architecture §3.4 U10: detectors with dedupe keys)
policyservice, databasetest
04must prove
Confirmed
People can assign an owner and move between open and investigating at the current version, while resolved or accepted exceptions reject those edits and reopening belongs to detectors.
origin: services-accounting:docs/milestones/plans/ACCT-M8-plan.md#D6 (architecture §3.4 U10: not any status to any status)
lifecycleservicetest
05must prove
Confirmed
Notes record their author, cannot be edited or deleted, allow four thousand characters each and stop at two hundred per exception.
validationservice, databasetest
06must prove
Confirmed
Checklist completion records the person and time and supports undo, with at most twenty steps.
lifecycleservice, databasetest
07must prove
Confirmed
Resolution requires written explanation and an open problem; an overdue exception fails while the item remains overdue and unclaimed on the supplied date or today.
origin: services-accounting:docs/milestones/plans/ACCT-M8-plan.md#D6 (architecture §3.4 U10: resolution text required)
validationservicetest
services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-exceptions.integration.spec.js#refuses to resolve as of 2026-10-06, when the item is overdue then (409, `condition_still_holds`); services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-exceptions.integration.spec.js#refuses to resolve an overdue-settlement exception while its item is still overdue and unclaimed (409, `condition_still_holds`); services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-exceptions.integration.spec.js#resolves an overdue-settlement exception once its item is claimed, recording `exception.resolved`; services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-exceptions.integration.spec.js#resolves as of 2026-10-05, when the item is only late then, though it is overdue today; services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-exceptions.integration.spec.js#resolves an exception whose item was written off, as of a later date too (200); services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-exceptions.integration.spec.js#refuses to resolve a closed exception (409, `exception_closed`); services-accounting:modules/reconciliation/tests/e2e/outstanding.e2e.spec.js#refuses a body without a resolution with 400
08must prove
Confirmed
Open blockers publish required attention for the unit’s reconciliation responsibility, resolution or acceptance closes attention, and the hourly repair sweep republishes missing items and clears stale ones.
origin: services-accounting:docs/milestones/plans/ACCT-M8-plan.md#D9 (raising attention items for the holders of the reconciliation responsibility)
policyservicetest
09must prove
Confirmed
Exception pages sort by descending number and support status, severity, kind, unit, owner and subject filters.
policyservicetest
10must prove
Confirmed
Closed exceptions require a resolution and retain their original kind and condition key.
invariantdatabasetest
11must prove
Confirmed
Exception read governs inspection, update governs ordinary problem work and cross-workspace records are absent.
permissionapitest
services-accounting:modules/reconciliation/tests/e2e/outstanding.e2e.spec.js#refuses a principal without accounting.reconciliation-exceptions.update with 403; services-accounting:modules/reconciliation/tests/e2e/outstanding.e2e.spec.js#lets a principal with the read keys alone list exceptions; services-accounting:modules/reconciliation/tests/e2e/outstanding.e2e.spec.js#refuses a principal without accounting.reconciliation-exceptions.read with 403; services-accounting:modules/reconciliation/tests/e2e/outstanding.e2e.spec.js#refuses tenant A’s exception in tenant B with 404
12
Confirmed
The console lists active and resolved exceptions, changes investigation status, appends notes and submits a written resolution, but cannot create problems or update checklist steps.
policyconsoleobserved

Scenarios

IdGivenWhenThenProvenance
01A controller suspects a deposit needs investigation.Record and assign its concern, work the checklist and notes, then resolve.History preserves responsible work and closed status prevents further ordinary edits.test
services-accounting:modules/reconciliation/tests/e2e/outstanding.e2e.spec.js#answers 200 with the exception open, numbered, of kind manual
02An overdue capture still has no settlement explanation.Attempt to resolve its exception.The missing-money condition prevents resolution.test
services-accounting:modules/reconciliation/tests/e2e/outstanding.e2e.spec.js#refuses an overdue-settlement exception whose item is still overdue with 409 condition_still_holds

Edge Cases

IdGivenWhenThenProvenance
03The item was only late on an earlier review day.Resolve using that earlier day.The earlier-day condition permits resolution despite today’s overdue state.test
services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-exceptions.integration.spec.js#resolves as of 2026-10-05, when the item is only late then, though it is overdue today

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.