---
id: CAP-ACC-REC-004
title: Find payouts with their status and activity
feature: FEAT-ACC-REC-01
product_area: accounting
module: reconciliation
revision: 2
status: draft
product_intent: confirmed
implementation_evidence: observed
supersedes:
  - react-console acceptance inventory CAP-ACC-REC-001
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
  - 'services-accounting:docs/milestones/plans/ACCT-M8-plan.md#D10 (§2 payouts)'
  - >-
    services-accounting:docs/milestones/plans/ACCT-M8-plan.md#D6 (architecture §3.4 U13: each action follows
    the service’s permissions)
purpose: Readers need to locate deposits and understand their current explanation without changing money.
outcomes:
  - Staff can locate a deposit through its reference and financial context.
  - Read responses offer only eligible authorized actions.
  - Activity supports chronological review.
concepts:
  - CON-ACC-REC-001
actors:
  - ACT-ACC-017
  - ACT-ACC-018
  - ACT-ACC-007
surfaces:
  - console
  - api
preconditions: []
postconditions: []
permissions:
  - key: accounting.payouts.read
    where_checked: api
    scope: tenant
  - key: accounting.application.access
    where_checked: console
    scope: tenant
rules:
  - id: BR-CAP-ACC-REC-004-01
    proved_by: [ATS-ACC-REC-004-01, TST-ACC-REC-026, TST-ACC-REC-058]
    statement: >-
      Payout pages sort by descending accounting day and descending identity within that day, with at most two
      hundred records and a continuation cursor.
    kind: policy
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/e2e/reconciliation-lists.e2e.spec.js#answers 200 with
      the tenant’s payouts, newest accounting date first;
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#orders
      payouts of one accounting date by id, descending;
      services-accounting:modules/reconciliation/tests/e2e/reconciliation-lists.e2e.spec.js#pages by the
      cursor it answers, the last page answering none;
      services-accounting:modules/reconciliation/tests/e2e/reconciliation-lists.e2e.spec.js#refuses a page
      larger than 200 with 400;
      services-accounting:modules/reconciliation/tests/e2e/reconciliation-lists.e2e.spec.js#refuses a cursor
      it did not answer with 400;
      services-accounting:modules/reconciliation/tests/e2e/reconciliation-lists.e2e.spec.js#refuses a date
      that is not YYYY-MM-DD with 400
    origin: >-
      services-accounting:docs/milestones/plans/ACCT-M8-plan.md#D10 (plan approved 2026-10-22 10:40 ET; §2
      scope)
  - id: BR-CAP-ACC-REC-004-02
    proved_by: [ATS-ACC-REC-004-01, TST-ACC-REC-026, TST-ACC-REC-058]
    statement: 'The list rejects oversized pages, malformed cursors and dates outside the accepted year-month-day shape.'
    kind: validation
    enforced_at:
      - api
    must_prove: true
    provenance: observed
    source: 'services-accounting:modules/reconciliation/aws/api/reconciliation.schemas.ts:listPayoutsQuerySchema'
    origin: none
  - id: BR-CAP-ACC-REC-004-03
    proved_by: [ATS-ACC-REC-001-13, ATS-ACC-REC-004-02, TST-ACC-REC-058, TST-ACC-REC-081]
    statement: >-
      Staff can filter payout lists by unit, merchant, processor, reference, inclusive accounting dates,
      reconciliation and verification states or void status, and search an exact reference or payout number
      with an optional prefix.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#filters
      by accounting date, inclusive at both ends;
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#filters
      by merchant account;
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#filters
      by business unit;
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#filters
      by bank verification;
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#searches
      by the processor’s reference exactly;
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#searches
      by the payout’s number written PO-n;
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#filters
      the payouts no batch holds, a released link not holding one, a voided payout awaiting nothing
      (DEF-ACT-0592);
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#leaves
      the voided payouts out when asked for voided false (DEF-ACT-0592);
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#lists
      only the voided payouts when asked for voided true (DEF-ACT-0592);
      services-accounting:modules/reconciliation/tests/unit/payout-list-query.spec.js#maps voided=false to a
      filter that leaves voided payouts out;
      services-accounting:modules/reconciliation/tests/unit/payout-list-query.spec.js#refuses another value
    origin: none
  - id: BR-CAP-ACC-REC-004-04
    proved_by: [ATS-ACC-REC-004-03, ATS-ACC-REC-004-08, TST-ACC-REC-090]
    statement: >-
      Reconciliation status is calculated from active holdings: open means in reconciliation, finalized means
      reconciled, and no active holding means unreconciled.
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/unit/rules/payout-rules.spec.js#is reconciled in a
      finalized batch; services-accounting:modules/reconciliation/tests/unit/rules/payout-rules.spec.js#is
      in-reconciliation in an open batch;
      services-accounting:modules/reconciliation/tests/unit/rules/payout-rules.spec.js#is unreconciled outside
      any batch
    origin: >-
      services-accounting:docs/milestones/plans/ACCT-M8-plan.md#D10 (§4: the architecture §6 invariants hold;
      architecture §14.1)
  - id: BR-CAP-ACC-REC-004-05
    proved_by: [ATS-ACC-REC-001-13, ATS-ACC-REC-004-02, TST-ACC-REC-058, TST-ACC-REC-081]
    statement: Unreconciled results exclude voided payouts; the void filter can exclude them or select only them.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#filters
      the payouts no batch holds, a released link not holding one, a voided payout awaiting nothing
      (DEF-ACT-0592);
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#filters
      by merchant account;
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#filters
      by business unit;
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#filters
      by accounting date, inclusive at both ends;
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#filters
      by bank verification;
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#searches
      by the processor’s reference exactly;
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#searches
      by the payout’s number written PO-n;
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#leaves
      the voided payouts out when asked for voided false (DEF-ACT-0592);
      services-accounting:modules/reconciliation/tests/integration/services/persistence/payouts.queries.integration.spec.js#lists
      only the voided payouts when asked for voided true (DEF-ACT-0592);
      services-accounting:modules/reconciliation/tests/unit/payout-list-query.spec.js#maps voided=false to a
      filter that leaves voided payouts out;
      services-accounting:modules/reconciliation/tests/unit/payout-list-query.spec.js#refuses another value
    origin: none
  - id: BR-CAP-ACC-REC-004-06
    proved_by: [ATS-ACC-REC-004-04, TST-ACC-REC-025]
    statement: >-
      A payout read includes evidence, its holding reconciliation and the intersection of state-allowed and
      permission-allowed actions; a reader receives no write actions.
    kind: permission
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/e2e/payouts.e2e.spec.js#answers an editor the actions
      its keys allow, without void or verify-bank;
      services-accounting:modules/reconciliation/tests/e2e/payouts.e2e.spec.js#answers the payout with its
      evidence and the open batch holding it;
      services-accounting:modules/reconciliation/tests/e2e/payouts.e2e.spec.js#answers a reader no available
      action; services-accounting:modules/reconciliation/tests/e2e/payouts.e2e.spec.js#answers a payout in a
      finalized batch no available action
    origin: 'services-accounting:docs/milestones/plans/ACCT-M8-plan.md#D6 (architecture §3.4 U13)'
  - id: BR-CAP-ACC-REC-004-07
    proved_by: [ATS-ACC-REC-004-05, TST-ACC-REC-025, TST-ACC-REC-065]
    statement: Payout activity is paged in chronological order from the earliest event.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-events.queries.integration.spec.js#answers
      the payout’s events oldest first, each whole, two of one instant by id;
      services-accounting:modules/reconciliation/tests/e2e/payouts.e2e.spec.js#answers the payout’s history
      oldest first;
      services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-events.queries.integration.spec.js#continues
      exactly after the cursor, within one instant by id
    origin: none
  - id: BR-CAP-ACC-REC-004-08
    proved_by: [ATS-ACC-REC-004-06, ATS-ACC-REC-004-09, TST-ACC-REC-025, TST-ACC-REC-026]
    statement: A payout in another workspace is absent from both individual reads and lists.
    kind: invariant
    enforced_at:
      - api
      - database
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/e2e/payouts.e2e.spec.js#refuses tenant A’s payout in
      tenant B with 404;
      services-accounting:modules/reconciliation/tests/e2e/reconciliation-lists.e2e.spec.js#shows none of
      tenant A’s payouts in tenant B;
      services-accounting:modules/reconciliation/tests/e2e/reconciliation-lists.e2e.spec.js#refuses the payout
      list without accounting.payouts.read with 403;
      services-accounting:modules/reconciliation/tests/e2e/reconciliation-lists.e2e.spec.js#refuses a
      principal denied accounting.application.access with 403
    origin: >-
      services-accounting:docs/milestones/plans/ACCT-M8-plan.md#D10 (§4: the architecture §6 invariants hold;
      INV-01)
  - id: BR-CAP-ACC-REC-004-09
    proved_by: [ATS-ACC-REC-004-06, ATS-ACC-REC-004-09, TST-ACC-REC-025, TST-ACC-REC-026]
    statement: >-
      Payout reads require the read permission beyond Accounting access, while the console uses the selected
      business unit for its reconciliation workspace.
    kind: permission
    enforced_at:
      - api
      - console
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/e2e/reconciliation-lists.e2e.spec.js#refuses the payout
      list without accounting.payouts.read with 403;
      services-accounting:modules/reconciliation/tests/e2e/payouts.e2e.spec.js#refuses tenant A’s payout in
      tenant B with 404;
      services-accounting:modules/reconciliation/tests/e2e/reconciliation-lists.e2e.spec.js#shows none of
      tenant A’s payouts in tenant B;
      services-accounting:modules/reconciliation/tests/e2e/reconciliation-lists.e2e.spec.js#refuses a
      principal denied accounting.application.access with 403
    origin: 'services-accounting:docs/milestones/plans/ACCT-M8-plan.md#D5 (workspace-level permissions in v1)'
scenarios:
  - id: SC-CAP-ACC-REC-004-01
    given: Several payout days include a cancelled entry.
    when: Read the payout list.
    then: Descending accounting dates lead and cancellation remains marked.
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/e2e/reconciliation-lists.e2e.spec.js#answers 200 with
      the tenant’s payouts, newest accounting date first
  - id: SC-CAP-ACC-REC-004-02
    given: A person has read-only access to the payout.
    when: Inspect its record.
    then: No write action is offered.
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/e2e/payouts.e2e.spec.js#answers a reader no available
      action
edge_cases: []
constraints: []
depends_on:
  - CAP-ACC-REC-001
related:
  - CAP-ACC-REC-019
  - CAP-ACC-REC-020
journeys:
  - JNY-ACC-REC-001
open_questions: []
evidence:
  - >-
    Examined supporting service material: reconciliation.routes.ts (listPayouts), payouts.routes.ts
    (getPayout, listPayoutEvents), reconciliation.schemas.ts, services/persistence/payouts.ts (list and read),
    reconciliation-events.ts; tests e2e/reconciliation-lists.e2e.spec.js, payouts.e2e.spec.js, integration
    payouts.queries.integration.spec.js, reconciliation-events.queries.integration.spec.js,
    unit/payout-list-query.spec.js.
  - >-
    Examined supporting console material: components/accounting/reconciliation/payouts-screen.tsx,
    payouts-table.tsx; lib/accounting/reconciliation/load.ts, adapter.ts;
    e2e/mock/accounting-reconciliation.mock.spec.ts.
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-TEN-004, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-PI-001, TC-PI-005]
exercised_by: [FAS-ACC-REC-01-01, FAS-ACC-REC-01-02, FAS-ACC-REC-01-03, FAS-ACC-REC-01-04, FAS-ACC-REC-01-05]
suites: [TST-ACC-REC-025, TST-ACC-REC-026, TST-ACC-REC-058, TST-ACC-REC-065, TST-ACC-REC-081, TST-ACC-REC-090]
---

# Find payouts with their status and activity

## Purpose

Readers need to locate deposits and understand their current explanation without changing money.

## How It Works

A reader narrows the list using the deposit context or reference. Rhythm returns the matching page and the information needed to continue reading. Opening a payout exposes its evidence, holder and activity. Available actions depend on both the record and the reader’s grants. Missing access or foreign-workspace records produce refusals or absence rather than broader visibility.

## Relationships

Creation and correction supply the records, overview summarizes them and permission controls narrow the offered actions.
