---
id: TST-ACC-BKS-046
title: Business Units API suite
kind: api-lifecycle
product_area: accounting
module: books
revision: 1
status: draft
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
repository: services-accounting
files:
  - modules/books/tests/e2e/business-units.e2e.spec.js
implements:
  - ATS-ACC-BKS-001-01
  - ATS-ACC-BKS-001-02
  - ATS-ACC-BKS-001-04
  - ATS-ACC-BKS-002-03
  - ATS-ACC-BKS-002-05
  - ATS-ACC-BKS-016-04
  - ATS-ACC-BKS-016-05
  - ATS-ACC-BKS-016-08
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 isolated workspace identities and database fixtures; cleanup
  removes only its seeded records.
assertion_bindings:
  - scenario: ATS-ACC-BKS-001-01
    source: >-
      services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#creates
      it under the id its name suggests, in the tenant of the path
  - scenario: ATS-ACC-BKS-001-01
    source: >-
      services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#answers
      400 naming name for a name of nothing but spaces
  - scenario: ATS-ACC-BKS-001-01
    source: >-
      services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#writes
      no unit for a body it refused: the id reads back 404
  - scenario: ATS-ACC-BKS-001-02
    source: >-
      services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#answers
      409 to a change of the base currency, naming the column
  - scenario: ATS-ACC-BKS-001-04
    source: >-
      services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#gives
      every setting the request left out its default
  - scenario: ATS-ACC-BKS-002-03
    source: >-
      services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#answers
      400 to a supported currency named twice, in Rhythm 1.0’s words
  - scenario: ATS-ACC-BKS-002-03
    source: >-
      services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#answers
      400 to the base currency among the supported ones, in Rhythm 1.0’s words
  - scenario: ATS-ACC-BKS-002-05
    source: >-
      services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#answers
      409 naming the currency, the unit and the kinds of account that use it
  - scenario: ATS-ACC-BKS-016-04
    source: >-
      services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#answers
      400 to a body whose tenant_id is not the path’s
  - scenario: ATS-ACC-BKS-016-05
    source: >-
      services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#answers
      400 to a replacement without sys_version
  - scenario: ATS-ACC-BKS-016-05
    source: >-
      services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#answers
      409 StaleObject to a replacement at the version before the last
  - scenario: ATS-ACC-BKS-016-05
    source: >-
      services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#answers
      400 to a property the contract does not carry
  - scenario: ATS-ACC-BKS-016-08
    source: >-
      services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#answers
      a page of the limit with the cursor of the next page
  - scenario: ATS-ACC-BKS-016-08
    source: >-
      services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#answers
      400 to a limit above 200
  - scenario: ATS-ACC-BKS-016-08
    source: >-
      services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#answers
      400 to a cursor the list never answered
unmapped: false
evidence:
  - provenance: test
    source: 'services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js'
execution_notes: >-
  The file exists at the pinned revision; this registration records no execution
  result.
---

# Business Units API suite

## Verification Boundary

The suite sends requests through the local Accounting handler and enforcing route dispatcher. PostgreSQL stores the run-owned configuration and applies its database safeguards.

## What This Suite Proves

The individual assertion references identify the acceptance outcomes this file exercises. When a scenario spans several suites, this file supplies only its listed assertions; qualification must include the other bindings and any recorded coverage finding.

## What It Does Not Prove

Local database execution does not prove deployed infrastructure, external provider availability or console behavior. No result is claimed for the pinned revision until the suite runs and its evidence is reviewed.

## Real Dependencies and Test Doubles

PostgreSQL, migrations and the exercised persistence paths are real. Test-owned execution contexts, clocks and local Platform records supply deterministic setup; the file’s imports and fixtures identify any additional doubles.

## Must Not Be Doubled

The database constraints, transaction paths and production persistence functions named by the assertions must remain real. A memory store cannot establish the recorded database proof.
