---
id: CAP-ACC-BKS-001
title: Establish a separate set of books for each business unit
feature: FEAT-ACC-BKS-01
product_area: accounting
module: books
revision: 1
status: draft
product_intent: confirmed
implementation_evidence: observed
supersedes:
  - CAP-ACC-CFG-001
  - CAP-ACC-CFG-018
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
  - 'services-accounting:docs/milestones/plans/ACCT-M1-plan.md#2. Scope'
  - 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D3'
  - 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D12'
  - 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R12'
  - 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R28'
purpose: >-
  Finance staff give each organization that keeps separate books its own
  accounting context.
outcomes:
  - >-
    Separate bookkeeping organizations have distinct units whose founding
    currency and fiscal month remain stable.
  - A newly saved unit already has the current and following fiscal years.
  - Staff start unit-specific work with an eligible selected context.
concepts:
  - CON-ACC-BKS-001
  - CON-ACC-BKS-003
actors:
  - ACT-ACC-001
  - ACT-ACC-002
  - ACT-ACC-003
surfaces:
  - console
  - api
preconditions: []
postconditions: []
permissions:
  - key: accounting.business-units.read
    where_checked: api
    scope: tenant
  - key: accounting.business-units.create
    where_checked: api
    scope: tenant
  - key: accounting.business-units.update
    where_checked: api
    scope: tenant
  - key: accounting.business-units.delete
    where_checked: api
    scope: tenant
  - key: accounting.business-units.query
    where_checked: service
    scope: tenant
rules:
  - id: BR-CAP-ACC-BKS-001-01
    proved_by: [ATS-ACC-BKS-001-01, ATS-ACC-BKS-001-12, TST-ACC-BKS-046]
    statement: >-
      Creating a unit requires a name, an offered base currency and a fiscal
      start month between 1 and 12; an omitted identifier is generated from the
      name and remains fixed.
    kind: validation
    enforced_at:
      - api
      - service
      - database
    must_prove: true
    provenance: test
    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
    origin: none
    examples:
      positive: A valid configuration completes the stated operation.
      negative: A conflicting configuration receives the stated refusal.
  - id: BR-CAP-ACC-BKS-001-02
    proved_by: [ATS-ACC-BKS-001-02, ATS-ACC-BKS-001-17, TST-ACC-BKS-046, TST-ACC-BKS-063, TST-ACC-BKS-074]
    statement: >-
      A saved unit retains its original base currency and fiscal start month,
      and replacing either is refused with the field identified.
    kind: invariant
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#answers
      409 to a change of the base currency, naming the column
    origin: 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D2'
    examples:
      negative: A conflicting configuration receives the stated refusal.
  - id: BR-CAP-ACC-BKS-001-03
    proved_by: [ATS-ACC-BKS-001-03, ATS-ACC-BKS-001-11, ATS-ACC-BKS-001-14, ATS-ACC-BKS-001-16, ATS-ACC-BKS-016-12, TST-ACC-BKS-054, TST-ACC-BKS-087]
    statement: >-
      Unit creation and generation of the fiscal year containing the workspace’s
      current date and the following year succeed together or are rolled back
      together.
    kind: lifecycle
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/books/tests/integration/services/persistence/fiscal-years.integration.spec.js#gives
      the new unit exactly its two years, the one containing today and the next
    origin: 'services-accounting:docs/milestones/plans/ACCT-M1-plan.md#D12'
  - id: BR-CAP-ACC-BKS-001-04
    proved_by: [ATS-ACC-BKS-001-04, TST-ACC-BKS-046, TST-ACC-BKS-074]
    statement: >-
      Unspecified creation settings default to accrual accounting, no inventory
      costing, direct write-off against bad-debt expense, summary downloads,
      Other software, no project inheritance, active status and single-currency
      operation.
    kind: policy
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#gives
      every setting the request left out its default
    origin: none
  - id: BR-CAP-ACC-BKS-001-05
    proved_by: [ATS-ACC-BKS-001-05, ATS-ACC-BKS-001-15, ATS-ACC-BKS-001-18, ATS-ACC-BKS-004-11, TST-ACC-BKS-002, TST-ACC-BKS-074]
    statement: >-
      A replacement preserves supported currencies, multicurrency enablement,
      direct write-off treatment and fee settings when their respective inputs
      are omitted, and applies their replacement semantics when supplied.
    kind: policy
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/books/tests/integration/services/persistence/business-units.integration.spec.js#keeps
      the supported currencies when the replacement does not state them
    origin: none
  - id: BR-CAP-ACC-BKS-001-06
    proved_by: [ATS-ACC-BKS-001-06, ATS-ACC-BKS-001-11, TST-ACC-BKS-074, TST-ACC-BKS-080]
    statement: >-
      Unit deletion identifies and refuses remaining GL accounts, bank accounts,
      merchant accounts or projects; otherwise owned currencies, defaults,
      departments and fiscal years are removed, subject to other restricting
      references.
    kind: lifecycle
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/books/tests/integration/services/persistence/business-units.integration.spec.js#refuses
      a unit with GL, bank and merchant accounts, naming all three
    origin: 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D3'
    examples:
      negative: A conflicting configuration receives the stated refusal.
  - id: BR-CAP-ACC-BKS-001-07
    proved_by: []
    statement: >-
      Unit lists sort by ascending priority with unspecified priorities last,
      then name, and support activity filters and searches on name or
      identifier.
    kind: policy
    enforced_at:
      - api
      - service
    must_prove: false
    provenance: test
    source: >-
      services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#answers
      every unit by priority, lowest first and none last, then by name
    origin: none
  - id: BR-CAP-ACC-BKS-001-08
    proved_by: [ATS-ACC-BKS-001-07, ATS-ACC-BKS-001-19, TST-ACC-BKS-001, TST-ACC-BKS-198]
    statement: >-
      The console remembers an active working unit or selects the first active
      unit in list order, initializes scoped lists and new records with it
      rather than All Business Units, and offers newly created units without a
      reload.
    kind: policy
    enforced_at:
      - console
    must_prove: true
    provenance: documented
    source: 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R28'
    origin: 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R28'
  - id: BR-CAP-ACC-BKS-001-09
    proved_by: []
    statement: >-
      The read-only business-unit query dataset exposes identifier, name, active
      state and base currency under its own query permission and supports
      transaction queries without writing units.
    kind: policy
    enforced_at:
      - database
      - service
    must_prove: false
    provenance: test
    source: >-
      services-accounting:modules/books/tests/integration/db/business-units-view.integration.spec.js#refuses
      the reader a column of the table the dataset does not describe
    origin: none
scenarios:
  - id: SC-CAP-ACC-BKS-001-01
    given: A Pacific chapter begins its fiscal year in July.
    when: The controller opens its books in US dollars.
    then: >-
      The new unit has fiscal years 2026–2027 and 2027–2028 and appears in the
      working-unit choices.
    provenance: test
    source: >-
      react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0001.spec.ts#ACT-ACC-0001
  - id: SC-CAP-ACC-BKS-001-02
    given: An incorrectly denominated unit already owns a GL account and project.
    when: The controller requests removal of the unit.
    then: >-
      The refusal identifies both dependencies; after removal of those
      dependencies the unit and its departments and calendar can be deleted.
    provenance: test
    source: >-
      react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0004.spec.ts#ACT-ACC-0004
edge_cases: []
constraints: []
depends_on: []
related:
  - CAP-ACC-BKS-002
  - CAP-ACC-BKS-003
  - CAP-ACC-BKS-009
  - CAP-ACC-BKS-016
journeys:
  - JNY-ACC-BKS-001
  - JNY-ACC-BKS-002
open_questions: []
evidence:
  - >-
    Verified source file:
    react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0001.spec.ts
  - >-
    Verified source file:
    react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0004.spec.ts
  - 'Verified source file: services-accounting:aws/accounting.service.ts'
  - >-
    Verified source file:
    services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md
  - >-
    Verified source file:
    services-accounting:docs/milestones/plans/ACCT-M1-plan.md
  - >-
    Verified source file:
    services-accounting:modules/books/db/business-units.table.ts
  - >-
    Verified source file:
    services-accounting:modules/books/db/business-units.view.ts
  - >-
    Verified source file:
    services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js
  - >-
    Verified source file:
    services-accounting:modules/books/tests/e2e/fiscal-years.e2e.spec.js
  - >-
    Verified source file:
    services-accounting:modules/books/tests/integration/db/business-units-view.integration.spec.js
  - >-
    Verified source file:
    services-accounting:modules/books/tests/integration/db/configuration-records.table.integration.spec.js
  - >-
    Verified source file:
    services-accounting:modules/books/tests/integration/services/persistence/business-units.integration.spec.js
  - >-
    Verified source file:
    services-accounting:modules/books/tests/integration/services/persistence/business-units.queries.integration.spec.js
  - >-
    Verified source file:
    services-accounting:modules/books/tests/integration/services/persistence/departments.integration.spec.js
  - >-
    Verified source file:
    services-accounting:modules/books/tests/integration/services/persistence/fiscal-years.integration.spec.js
  - >-
    Verified source file:
    services-accounting:modules/books/tests/unit/business-units-schemas.spec.js
  - >-
    Verified source file:
    services-accounting:modules/books/tests/unit/slice0-repairs.spec.js
controls: [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-005, TC-AZ-006, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-TEN-004, TC-DAT-001, TC-DAT-004, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-PI-001, TC-PI-003, TC-PI-005]
exercised_by: [FAS-ACC-BKS-01-01, FAS-ACC-BKS-01-02, FAS-ACC-BKS-01-03, FAS-ACC-BKS-01-04, FAS-ACC-BKS-01-05]
suites: [TST-ACC-BKS-001, TST-ACC-BKS-002, TST-ACC-BKS-046, TST-ACC-BKS-054, TST-ACC-BKS-063, TST-ACC-BKS-074, TST-ACC-BKS-080, TST-ACC-BKS-087, TST-ACC-BKS-198]
---

# Establish a separate set of books for each business unit

## Purpose

Finance staff give each organization that keeps separate books its own accounting context.

## How It Works

An accounting administrator opens Business Units and records the organization whose books need to be kept separately. The saved unit becomes the context for later setup. The administrator adds accounts and reviews the generated calendar before entering transactions. Other staff encounter the unit through the working context and record selectors. A mistake in a founding choice requires a replacement unit rather than a conversion of existing books. Removing a unit can fail because other accounting records still depend on it. The refusal tells staff which dependencies need attention.

## Relationships

Accounts, fiscal calendars and document choices use this unit as their accounting context.
