---
id: TST-ACC-BAT-073
title: Batch integration reverse system batch
kind: integration
product_area: accounting
module: batches
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
repository: services-accounting
files:
  - >-
    modules/batches/tests/integration/services/close/reverse-system-batch.integration.spec.js
implements:
  - ATS-ACC-BAT-020-04
  - ATS-ACC-BAT-020-05
  - ATS-ACC-BAT-020-06
environment: local
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 5
isolation: >-
  The suite owns its test workspace or fixed integration fixtures in the
  prepared local database.
assertion_sources:
  - scenario: ATS-ACC-BAT-020-04
    provenance: test
    source: >-
      services-accounting:modules/batches/tests/integration/services/close/reverse-system-batch.integration.spec.js#leaves
      nothing once the caller rolls back: two entries, the posting unreversed,
      the batch posted
  - scenario: ATS-ACC-BAT-020-05
    provenance: test
    source: >-
      services-accounting:modules/batches/tests/integration/services/close/reverse-system-batch.integration.spec.js#writes
      a reversing entry for each entry, debits and credits swapped, and keeps
      the originals
  - scenario: ATS-ACC-BAT-020-05
    provenance: test
    source: >-
      services-accounting:modules/batches/tests/integration/services/close/reverse-system-batch.integration.spec.js#marks
      the posting reversed and the batch open, with no count or posting time
  - scenario: ATS-ACC-BAT-020-06
    provenance: test
    source: >-
      services-accounting:modules/batches/tests/integration/services/close/reverse-system-batch.integration.spec.js#refuses
      a transaction batch's posting (`not_a_system_batch`)
  - scenario: ATS-ACC-BAT-020-06
    provenance: test
    source: >-
      services-accounting:modules/batches/tests/integration/services/close/reverse-system-batch.integration.spec.js#answers
      a second call by the posting id as not reversed, writing nothing
evidence:
  - provenance: observed
    source: >-
      services-accounting:modules/batches/tests/integration/services/close/reverse-system-batch.integration.spec.js
    note: >-
      The executable file is inspected at the pinned revision; duration is an
      unmeasured planning estimate.
  - provenance: documented
    source: >-
      services-accounting:modules/batches/tests/integration/services/close/reverse-system-batch.integration.spec.js#suite
      header
    note: >-
      Real: the integration database, the configuration services, the close
      functions and the persistence services, and the close job's
  - provenance: documented
    source: >-
      services-accounting:modules/batches/tests/integration/services/close/reverse-system-batch.integration.spec.js#suite
      header
    note: >-
      `set_period_status`, which moves the periods' statuses
      (`support/close-world.js`, `setPeriodStatus`). Doubled: nothing.
unbound_scope: null
---

# Batch integration reverse system batch

## Verification Boundary

This suite exercises the imported batch services or storage against the prepared local database. It does not imply that a deployed workflow is contacted.

## What This Suite Proves

Fiscal recovery appends mirrored entries, retains originals and rolls back with its caller transaction when that transaction fails. The assertion anchors identify the supported portions of the bound scenarios.

## What It Does Not Prove

Local assertions do not establish deployment configuration, remote delivery guarantees, or unasserted lifecycle and concurrency paths.

## Real Dependencies and Test Doubles

PostgreSQL and the exercised persistence or accounting functions are real. Controlled clocks, imported test fixtures and any suite-specific doubles delimit the asserted behavior.

## Must Not Be Doubled

The database constraints, transaction boundaries and exercised accounting functions must remain real when qualifying the asserted persistence or generation behavior.
