---
id: ADR-COM-ORD-002
title: Accounting owns the money; the order mirrors it
product_area: commerce
module: orders
revision: 1
status: proposed
design_intent: confirmed
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
  macroservice-libraries: 54536a441935c6e09fdb7f96f0bec71c52ba4e03
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
decision: >-
  Leave receivables, payments, credits, refunds and schedules in Accounting, retaining order links, attempt
  history and a derived financial projection in Commerce.
constrains:
  - DOM-COM-ORD-002
  - SVC-COM-ORD-orders
  - WF-COM-ORD-003
  - WF-COM-ORD-004
  - WF-COM-ORD-008
  - RESP-COM
origin: >-
  services-commerce:docs/milestones/plans/COMM-M2-plan.md#A1 and #A11 (approved: commerce-orders decision 2,
  ADR-05; never card data in Commerce)
alternatives:
  - option: Maintain an independent payment ledger in Commerce
    why_not: Maintaining a second financial ledger introduces another position that can disagree with Accounting.
  - option: Require live Accounting lookup for each display
    why_not: A remote dependency on every list row would weaken local read availability.
consequences:
  - The projection can remain behind Accounting until a fact or scheduled refresh is processed.
  - Position reads depend on the shared schema-access arrangement.
  - Payment card numbers stay outside Commerce.
supersedes: []
evidence:
  - >-
    services-commerce at c8b66a98: modules/orders/services/mirror/*.ts; services/accounting/*.ts;
    db/orders.table.ts (MoneyMirror).
---

# Accounting owns the money; the order mirrors it

## Context

Acceptance and display depend on financial facts, but Commerce is not the financial ledger.

## Decision

Accounting performs financial movements. Commerce stores the request and response links needed to process purchases and derives a local projection from the Accounting position view.

## Alternatives Considered

A second ledger would need reconciliation with the authoritative books. Reading Accounting remotely for every displayed row would make list availability depend on another service.

## Consequences

Local balances can lag. Received facts and timed refresh shorten that lag, and disagreements become operational exceptions.
