---
id: CAP-ACC-BAT-001
title: Collect a business unit’s documents in a new batch
feature: FEAT-ACC-BAT-01
product_area: accounting
module: batches
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes:
- inventory CAP-ACC-BAT-001 (create half)
- inventory RUL-ACC-BAT-001
- inventory RUL-ACC-BAT-002
- inventory RUL-ACC-BAT-003
- inventory RUL-ACC-BAT-004
- inventory RUL-ACC-BAT-063
- journey ACT-ACC-0501
- journey ACT-ACC-0504
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
- services-accounting:docs/migrations/transaction-processing/batches/README.md#Status as actions (job tp-batch-lifecycle,
  Andrew's UI brief of 2026-10-15)
- services-accounting:docs/migrations/transaction-processing/batches/README.md#D14 and migration 0060 (Andrew, 2026-10-16)
purpose: Finance staff establish a batch in which one business unit’s daily documents can collect before posting.
outcomes:
- Staff receive an identified collection in the appropriate unit and fiscal context.
concepts:
- CON-ACC-BAT-001
actors:
- ACT-ACC-012
- ACT-ACC-006
surfaces:
- console
- api
preconditions:
- The selected business unit has a fiscal calendar covering the requested date.
postconditions:
- Creation leaves an Open batch available for eligible document intake.
permissions:
- key: accounting.batches.create
  where_checked: api
  scope: tenant
rules:
- id: BR-CAP-ACC-BAT-001-01
  proved_by: [ATS-ACC-BAT-001-01, ATS-ACC-BAT-001-11, ATS-ACC-BAT-001-12, ATS-ACC-BAT-001-13, ATS-ACC-BAT-003-11, ATS-ACC-BAT-005-06, ATS-ACC-BAT-008-06, TST-ACC-BAT-060]
  statement: Creation through the ordinary API starts a batch in Open and rejects any supplied status.
  kind: validation
  enforced_at:
  - api
  must_prove: true
  provenance: test
  source: 'services-accounting:modules/batches/tests/e2e/batches.e2e.spec.js#refuses a create naming the status
    400: a new batch is always open'
  origin: services-accounting:docs/migrations/transaction-processing/batches/README.md#Status as actions (Andrew's
    UI brief of 2026-10-15)
  examples:
    positive: A request with unit, date and name returns an Open batch.
    negative: Supplying Closed during creation fails without a write.
- id: BR-CAP-ACC-BAT-001-02
  proved_by: [ATS-ACC-BAT-001-02, ATS-ACC-BAT-001-14, ATS-ACC-BAT-010-09, TST-ACC-BAT-064, TST-ACC-BAT-085]
  statement: Within a business unit, each batch name belongs to one batch; another unit can use the same name.
  kind: validation
  enforced_at:
  - service
  - database
  must_prove: true
  provenance: test
  source: services-accounting:modules/batches/tests/integration/services/persistence/batches.integration.spec.js#refuses
    a name another batch of the unit has 409, name_in_use, in 1.0’s sentence (D14)
  origin: services-accounting:docs/migrations/transaction-processing/batches/README.md#D14 and migration 0060 (Andrew,
    2026-10-16)
  examples:
    positive: Different units can both use the name Daily.
    negative: Reusing Daily within the same unit fails.
- id: BR-CAP-ACC-BAT-001-03
  proved_by: [ATS-ACC-BAT-001-03, TST-ACC-BAT-085]
  statement: The date determines the fiscal year and period, replacing submitted fiscal values and refusing dates
    outside the unit’s fiscal calendar.
  kind: calculation
  enforced_at:
  - service
  must_prove: true
  provenance: test
  source: services-accounting:modules/batches/tests/integration/services/persistence/batches.integration.spec.js#refuses
    a date no fiscal year of the unit holds
  origin: none
  examples:
    positive: An October date derives the October fiscal context.
    negative: A date beyond all configured fiscal years fails.
- id: BR-CAP-ACC-BAT-001-04
  proved_by: [ATS-ACC-BAT-001-04, TST-ACC-BAT-006, TST-ACC-BAT-085, TST-ACC-BAT-122]
  statement: A new batch cannot use a date in a period that is not open, and the refusal identifies that period
    without duplicating its name.
  kind: validation
  enforced_at:
  - service
  must_prove: true
  provenance: test
  source: services-accounting:modules/batches/tests/integration/services/persistence/batches.integration.spec.js#refuses
    a date in a closed period
  origin: none
  examples:
    positive: An Open October period accepts a batch dated within it.
    negative: A February date fails once that fiscal period is closed.
- id: BR-CAP-ACC-BAT-001-05
  proved_by: [ATS-ACC-BAT-001-05, TST-ACC-BAT-085]
  statement: Creation fills an omitted currency with the unit’s base currency and rejects a different currency.
  kind: validation
  enforced_at:
  - service
  must_prove: true
  provenance: test
  source: services-accounting:modules/batches/tests/integration/services/persistence/batches.integration.spec.js#refuses
    a currency other than the unit’s base currency
  origin: none
- id: BR-CAP-ACC-BAT-001-06
  proved_by: [ATS-ACC-BAT-001-06, TST-ACC-BAT-060]
  statement: A batch name must contain at least one non-space character.
  kind: validation
  enforced_at:
  - api
  - database
  - console
  must_prove: true
  provenance: test
  source: services-accounting:modules/batches/tests/e2e/batches.e2e.spec.js#refuses a create without a name 400,
    naming the field
  origin: none
- id: BR-CAP-ACC-BAT-001-07
  proved_by: [ATS-ACC-BAT-001-07, TST-ACC-BAT-085]
  statement: An automatically assigned batch reference begins with the business unit’s reference, and an existing
    reference cannot be assigned to a second batch.
  kind: validation
  enforced_at:
  - service
  must_prove: true
  provenance: test
  source: services-accounting:modules/batches/tests/integration/services/persistence/batches.integration.spec.js#refuses
    an id already in use
  origin: none
- id: BR-CAP-ACC-BAT-001-08
  proved_by: [ATS-ACC-BAT-001-08, TST-ACC-BAT-063, TST-ACC-BAT-134]
  statement: Staff creation allows transaction and legacy types, while deferred revenue and cost of goods sold types
    belong to fiscal close.
  kind: policy
  enforced_at:
  - service
  must_prove: true
  provenance: observed
  source: services-accounting:modules/batches/aws/api/batches.schemas.ts:batchRequestSchema; services-accounting:modules/batches/services/rules/batch-rules.ts:assertNotSystemType
  origin: none
- id: BR-CAP-ACC-BAT-001-09
  proved_by: [ATS-ACC-BAT-001-09, TST-ACC-BAT-027, TST-ACC-BAT-060]
  statement: The caller needs batch-create permission to create a batch.
  kind: permission
  enforced_at:
  - api
  - console
  must_prove: true
  provenance: test
  source: services-accounting:modules/batches/tests/e2e/batches.e2e.spec.js#refuses a create to a caller without
    accounting.batches.create 403
  origin: none
- id: BR-CAP-ACC-BAT-001-10
  proved_by: [ATS-ACC-BAT-001-10, TST-ACC-BAT-028, TST-ACC-BAT-060]
  statement: Creation uses the authorized workspace and rejects a body naming another workspace.
  kind: validation
  enforced_at:
  - api
  must_prove: true
  provenance: test
  source: services-accounting:modules/batches/tests/e2e/batches.e2e.spec.js#refuses a create naming another tenant
    in the body 400
  origin: none
scenarios:
- id: SC-CAP-ACC-BAT-001-01
  given: The association’s October period is Open and its base currency is US dollars.
  when: Staff submit an October receivables batch dated the twentieth.
  then: The response shows an empty Open batch in the October period and base currency.
  provenance: test
  source: 'services-accounting:modules/batches/tests/e2e/batches.e2e.spec.js#creates the batch: 200, an id of faa’s
    prefix, the fiscal period of today, faa’s base currency, open'
- id: SC-CAP-ACC-BAT-001-02
  given: The unit already holds a batch named Daily.
  when: Staff submit another Daily batch in that unit.
  then: Creation refuses the duplicate name without adding a batch.
  provenance: test
  source: services-accounting:modules/batches/tests/e2e/batch-actions.e2e.spec.js#refuses a create whose name another
    batch of the unit has 409, name_in_use, in 1.0’s sentence
- id: SC-CAP-ACC-BAT-001-03
  given: The association’s February period has closed.
  when: Staff request a batch dated in mid-February.
  then: The refusal identifies the closed period, while a request dated in a current Open period succeeds.
  provenance: documented
  source: services-accounting:docs/milestones/walkthroughs/ACCT-M3-handoff.md#Start here (step 8)
edge_cases: []
constraints:
- The unit’s configuration reference excludes hyphens, preserving an unambiguous prefix on generated batch references.
depends_on: []
related:
- CAP-ACC-BAT-003
- CAP-ACC-BAT-005
- CAP-ACC-BAT-010
journeys:
- JNY-ACC-BAT-001
- JNY-ACC-BAT-005
open_questions: []
evidence:
- 'Pinned services-accounting (f47cb263), examined sources: modules/batches/aws/api/batch-records.routes.ts (createBatch),
  batches.schemas.ts (batchRequestSchema), batches-api-mapper.ts, services/persistence/batches.ts (createBatch,
  insertBatch, settledFields), services/rules/batch-rules.ts (validateBatch, fiscalPeriodForBatch, assertBatchNameFree),
  db/batches.table.ts; tests e2e/batches.e2e.spec.js, e2e/batch-actions.e2e.spec.js, e2e/system-batches.e2e.spec.js,
  integration/services/persistence/batches.integration.spec.js, unit/defects/fiscal-period-display-name.spec.js;
  docs/migrations/transaction-processing/batches/README.md.'
- 'Pinned react-console (baf6dae3), examined sources: app/(console)/console/[tenantId]/accounting/batches/new/page.tsx,
  components/accounting/batches/new-batch-screen.tsx; acceptance/accounting/journeys/batches-posting/ACT-ACC-0500.json,
  ACT-ACC-0501.json.'
controls: [TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-IAM-006, 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-TEN-004, TC-DAT-001, TC-LOG-004, TC-LOG-005, TC-PI-001, TC-PI-003, TC-PI-005]
exercised_by: [FAS-ACC-BAT-01-01, FAS-ACC-BAT-01-02, FAS-ACC-BAT-01-03, FAS-ACC-BAT-01-04]
suites: [TST-ACC-BAT-006, TST-ACC-BAT-027, TST-ACC-BAT-028, TST-ACC-BAT-060, TST-ACC-BAT-063, TST-ACC-BAT-064, TST-ACC-BAT-085, TST-ACC-BAT-122, TST-ACC-BAT-134]
---

# Collect a business unit’s documents in a new batch

## Purpose

Finance staff establish a batch in which one business unit’s daily documents can collect before posting.

## How It Works

Staff choose a business unit, supply a name and select the accounting date. Optional description and automatic-close information accompany the request. Rhythm establishes the fiscal context from the selected date. The creation response identifies the new Open batch. Staff can then use it for document intake. A conflicting name, unsuitable period or reserved system type prevents creation and gives staff a correction to make.

## Relationships

- Related outcome: Correct batch details before posting, which addresses the connected batch work.
- Related outcome: Arrange automatic close and posting, which addresses the connected batch work.
- Related outcome: Advance a scheduled stream and post its predecessor, which addresses the connected batch work.
