---
id: CAP-ACC-BAT-018
title: Inspect and report on posted ledger entries
feature: FEAT-ACC-BAT-04
product_area: accounting
module: batches
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes:
- inventory CAP-ACC-BAT-013 (the read half)
- inventory CAP-ACC-BAT-018 (the Subledger Entry Lines dataset)
- inventory RUL-ACC-BAT-048
- journey ACT-ACC-0544
- journey ACT-ACC-0548
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
- services-accounting:docs/accounting/batches.md#Subledger Entry Lines per unit (Reporting D6)
purpose: Readers trace recorded accounting back to batches and documents and use the ledger datasets for reporting.
outcomes:
- Readers can inspect current accounting entries and request applicable system reversal history.
concepts:
- CON-ACC-BAT-004
actors:
- ACT-ACC-007
- ACT-ACC-012
surfaces:
- console
- api
permissions:
- key: accounting.subledger-entries.read
  where_checked: api
  scope: tenant
- key: accounting.subledger-entry-lines.query
  where_checked: service
  scope: tenant
rules:
- id: BR-CAP-ACC-BAT-018-01
  proved_by: [ATS-ACC-BAT-018-01, TST-ACC-BAT-062]
  statement: Subledger reading requires the entry-read permission.
  kind: permission
  enforced_at:
  - api
  must_prove: true
  provenance: test
  source: services-accounting:modules/batches/tests/e2e/subledger-entries.e2e.spec.js#refuses a caller without the
    subledger entries read permission, 403
  origin: none
- id: BR-CAP-ACC-BAT-018-02
  proved_by: [ATS-ACC-BAT-018-02, ATS-ACC-BAT-018-09, TST-ACC-BAT-029, TST-ACC-BAT-062, TST-ACC-BAT-094, TST-ACC-BAT-123]
  statement: Entry listing supports batch, document kind and reference, account, unit and date filters, with a one-to-two-hundred
    limit and nonnegative offset, rejecting invalid limits and calendar dates.
  kind: validation
  enforced_at:
  - api
  must_prove: true
  provenance: test
  source: services-accounting:modules/batches/tests/e2e/subledger-entries.e2e.spec.js#refuses from_date=2026-13-01
    with a 400 naming the date, not a 500 (DEF-ACT-0507)
  origin: none
- id: BR-CAP-ACC-BAT-018-03
  proved_by: [ATS-ACC-BAT-017-09, ATS-ACC-BAT-018-03, ATS-ACC-BAT-018-08, TST-ACC-BAT-062]
  statement: Read answers include ordered lines, currency-bearing money and the source document number instead of
    using its internal reference as that number.
  kind: policy
  enforced_at:
  - api
  - service
  must_prove: true
  provenance: test
  source: services-accounting:modules/batches/tests/e2e/subledger-entries.e2e.spec.js#names the number of the document
    each entry posts, never its id (DEF-ACT-0531)
  origin: none
- id: BR-CAP-ACC-BAT-018-04
  proved_by: [ATS-ACC-BAT-016-13, ATS-ACC-BAT-018-04, ATS-ACC-BAT-018-07, TST-ACC-BAT-094]
  statement: Default lists include current postings only, while requested history adds remaining fiscal-reopen reversals;
    ordinary unposting leaves no entries in either view.
  kind: policy
  enforced_at:
  - service
  must_prove: true
  provenance: test
  source: 'services-accounting:modules/batches/tests/integration/services/persistence/subledger-entries.queries.integration.spec.js#lists
    no entry when history is asked for either: nothing is written as a reversal'
  origin: services-accounting:docs/accounting/batches.md#Unposting deletes the entries (Andrew, Reporting D7, 2026-10-21)
- id: BR-CAP-ACC-BAT-018-05
  proved_by: [ATS-ACC-BAT-018-05, TST-ACC-BAT-062]
  statement: Reading another workspace’s entry returns the same absence response as a nonexistent entry.
  kind: invariant
  enforced_at:
  - api
  - database
  must_prove: true
  provenance: test
  source: 'services-accounting:modules/batches/tests/e2e/subledger-entries.e2e.spec.js#answers an entry of another
    tenant as it answers an absent one: the same status and error type'
  origin: none
- id: BR-CAP-ACC-BAT-018-06
  proved_by: [ATS-ACC-BAT-018-06, TST-ACC-BAT-068]
  statement: The line dataset supplies one row per ledger line with batch and document numbers, unit and base currency,
    account code and name, a customer reference and reversal flags.
  kind: calculation
  enforced_at:
  - database
  must_prove: true
  provenance: test
  source: 'services-accounting:modules/batches/tests/integration/db/subledger-entry-lines-view.integration.spec.js#answers
    the unit’s name and its base currency on every row (Reporting D6): the currency of debits and credits, not the
    document’s'
  origin: services-accounting:docs/accounting/batches.md#Subledger Entry Lines per unit (Reporting D6)
- id: BR-CAP-ACC-BAT-018-07
  proved_by: [ATS-ACC-BAT-018-06, TST-ACC-BAT-068]
  statement: Dataset querying declares its separate query permission and confines each reader to their workspace’s
    lines.
  kind: permission
  enforced_at:
  - database
  - service
  must_prove: true
  provenance: test
  source: services-accounting:modules/batches/tests/integration/db/subledger-entry-lines-view.integration.spec.js#answers
    tenant B’s reader its own invoice’s lines alone
  origin: none
- id: BR-CAP-ACC-BAT-018-08
  proved_by: []
  statement: The batch console loads entries in pages of two hundred up to twenty-five pages and builds its account
    summary from those loaded entries.
  kind: policy
  enforced_at:
  - console
  must_prove: false
  provenance: observed
  source: react-console:lib/accounting/transactions/http/batch-posting.ts:MAX_SUBLEDGER_ENTRY_PAGES
  origin: none
scenarios:
- id: SC-CAP-ACC-BAT-018-01
  given: The receivables batch has posted its invoice.
  when: A reader expands the invoice entry on the batch page.
  then: The documented ledger example shows receivable debits and the corresponding revenue credits.
  provenance: documented
  source: services-accounting:docs/milestones/walkthroughs/ACCT-M3-handoff.md#Start here (step 4)
- id: SC-CAP-ACC-BAT-018-02
  given: Two October batches have posted.
  when: A reader runs the documented unit-and-period ledger report.
  then: The report groups the posted batches and presents their balanced totals.
  provenance: documented
  source: services-accounting:docs/milestones/walkthroughs/ACCT-M3-handoff.md#Start here (step 5)
edge_cases: []
constraints:
- Platform provides query execution and the surrounding report experience.
depends_on:
- CAP-ACC-BAT-017
related:
- CAP-ACC-BAT-016
journeys:
- JNY-ACC-BAT-001
open_questions: []
evidence:
- 'Pinned services-accounting (f47cb263), examined sources: aws/api/subledger-entries.routes.ts (listSubledgerEntries,
  getSubledgerEntry), subledger-entries.schemas.ts, services/persistence/subledger-entries.ts, subledger-entry-answers.ts,
  db/subledger-entry-lines.view.ts, metadata/subledger-entry-lines.object.ts, queries/subledger-entry-lines.query.ts,
  queries/recipes/subledger_entry_lines-subledger-entry-lines.recipe.json, export/subledger.dataset.ts; tests e2e/subledger-entries.e2e.spec.js,
  integration/services/persistence/subledger-entries.queries.integration.spec.js, integration/db/subledger-entry-lines-view.integration.spec.js,
  unit/defects/subledger-entry-list-query.spec.js; docs/accounting/batches.md, docs/accounting/queries.md.'
- 'Pinned react-console (baf6dae3), examined sources: components/accounting/batches/batch-entries-tab.tsx, batch-detail-tabs.tsx
  (GL Summary); journeys ACT-ACC-0544, 0547, 0548.'
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-006, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-DAT-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-PI-001, TC-PI-003, TC-PI-005]
exercised_by: [FAS-ACC-BAT-04-01, FAS-ACC-BAT-04-02, FAS-ACC-BAT-04-03, FAS-ACC-BAT-04-04, FAS-ACC-BAT-04-05]
suites: [TST-ACC-BAT-029, TST-ACC-BAT-062, TST-ACC-BAT-068, TST-ACC-BAT-094, TST-ACC-BAT-123]
---

# Inspect and report on posted ledger entries

## Purpose

Readers trace recorded accounting back to batches and documents and use the ledger datasets for reporting.

## How It Works

Readers filter the entry list to the batch, document or account they want to inspect. Each answer includes its header and ordered lines. The batch page loads those entries and derives the account summary from what it receives. Reporting uses the line dataset with the unit’s currency and document numbers. Requested history can include remaining system reversals. Ordinary unposting leaves no old entry set, and the console’s bounded loading needs clearer treatment when a batch exceeds its limit.

## Relationships

- Prerequisite: Protect ledger balance, immutability and workspace isolation, which addresses the connected batch work.
- Related outcome: Unpost a batch for correction and replacement posting, which addresses the connected batch work.
