---
id: ADR-ACC-REC-007
title: Ledger Requests Ride in Operational Batches; Reconciliation Never Posts
product_area: accounting
module: reconciliation
revision: 2
status: proposed
design_intent: confirmed
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
decision: >-
  Append accounting requests in the causing command, then let operational batch
  posting create their ledger entries.
constrains:
  - DOM-ACC-REC-003
  - SVC-ACC-REC-reconciliation
  - WF-ACC-REC-004
  - WF-ACC-REC-005
  - WF-ACC-REC-006
  - WF-ACC-REC-007
  - RESP-ACC
origin: >-
  ACCT-M8 plan D7 (posting generator at finalize), approved by Andrew
  2026-10-22; architecture §16.2, agreed with the batch posting owner 2026-10-17
alternatives:
  - option: Write ledger entries directly from reconciliation.
    why_not: >-
      Another posting owner would duplicate account, period and generation
      rules.
  - option: Deliver requests through a separate ledger outbox consumer.
    why_not: >-
      The recorded agreement routes execution through existing batch posting
      instead.
  - option: Choose a later posting day independently of an operational batch.
    why_not: >-
      The implemented posting source requires an accepting batch with an
      open-period date.
consequences:
  - >-
    An empty accounting plan bypasses batch selection; otherwise missing setup
    refuses the causing command.
  - Unposting makes the requests pending again through derived status.
  - Nonempty plans currently require a currency exponent of two.
supersedes: []
evidence:
  - >-
    services-accounting at f47cb263:
    modules/reconciliation/services/persistence/reconciliation-ledger-postings.ts;
    db/reconciliation-postings.table.ts;
    modules/batches/services/engine/posting-documents.ts;
    docs/reconciliation/architecture.md §16.
---
# Ledger Requests Ride in Operational Batches; Reconciliation Never Posts

## Context

Reconciliation needs accounting effects without becoming another ledger execution owner.

## Decision

Append accounting requests in the causing command, then let operational batch posting create their ledger entries.

## Alternatives Considered

Write ledger entries directly from reconciliation. Another posting owner would duplicate account, period and generation rules.

Deliver requests through a separate ledger outbox consumer. The recorded agreement routes execution through existing batch posting instead.

Choose a later posting day independently of an operational batch. The implemented posting source requires an accepting batch with an open-period date.

## Consequences

An empty accounting plan bypasses batch selection; otherwise missing setup refuses the causing command. Unposting makes the requests pending again through derived status. Nonempty plans currently require a currency exponent of two.
