---
id: TST-ACC-REC-023
title: Approval correction and readiness routes
kind: api-lifecycle
product_area: accounting
module: reconciliation
revision: 1
status: draft
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
repository: services-accounting
files:
  - modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js
implements:
  - ATS-ACC-REC-011-01
  - ATS-ACC-REC-011-02
  - ATS-ACC-REC-011-03
  - ATS-ACC-REC-011-09
  - ATS-ACC-REC-012-01
  - ATS-ACC-REC-012-05
  - ATS-ACC-REC-013-02
  - ATS-ACC-REC-013-07
  - ATS-ACC-REC-018-01
environment: local
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 5
isolation: Suite-owned workspace fixtures and deterministic records removed by suite cleanup.
evidence:
  - 'services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js'
  - >-
    Declared test doubles: Doubled: the signing key pair, the run's own. Every call acts in tenants of the
    spec's own (`testId`), registered in the local `platform.tenants` stand-in and removed in `after`.
    proves_controls: [TC-AZ-002, TC-PI-001, TC-PI-002, TC-TEN-002]
bindings:
  - scenario: ATS-ACC-REC-011-01
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#refuses a request
        without an Idempotency-Key with 400
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#refuses a body whose
        version is not a number with 400
  - scenario: ATS-ACC-REC-011-02
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#refuses an unbalanced
        batch with 409, its code and its difference
  - scenario: ATS-ACC-REC-011-03
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#refuses the preparer
        with 403 segregation-required
  - scenario: ATS-ACC-REC-011-09
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#refuses a principal
        without accounting.reconciliation-batches.finalize with 403
  - scenario: ATS-ACC-REC-012-01
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#refuses a void
        without a reason with 400
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#refuses a finalized
        batch with 409
  - scenario: ATS-ACC-REC-012-05
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#refuses a principal
        without accounting.reconciliation-batches.delete with 403
  - scenario: ATS-ACC-REC-013-02
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#refuses a reversal
        without an Idempotency-Key with 400
  - scenario: ATS-ACC-REC-013-07
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#refuses a principal
        without accounting.reconciliation-batches.reverse with 403
  - scenario: ATS-ACC-REC-018-01
    assertions:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#answers 200 with the
        blockers, warnings, clearing lines and period of tenant A’s October
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#answers the period
        containing asOf when no period is named
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#refuses a fiscal year
        without a period number with 400
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#answers 404 for a
        unit with no such period
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#refuses a principal
        without accounting.reconciliation-batches.read with 403
---

# Approval correction and readiness routes

## Verification Boundary

This suite dispatches Accounting routes locally with enforcing security over a real test database. Its route responses and retained records form the verification boundary.

## What This Suite Proves

The executable assertions identified in the binding records supply the registered scenario observations. When a scenario names several suites, this suite supplies its listed assertions and does not independently establish every clause.

## What It Does Not Prove

Deployed infrastructure, live console behavior and shared scheduling delivery are outside this local boundary.

## Real Dependencies and Test Doubles

PostgreSQL, migrations and the exercised production code are real. Fixtures supply the financial world and caller context; deterministic setup and owner-side inspection do not replace database enforcement.

## Must Not Be Doubled

The exercised database constraints, transactional services and route enforcement remain real. Replacing them would remove the boundary this suite registers.
