---
id: JNY-ACC-TRX-003
title: Collect a phone payment and resolve a missing response
feature: FEAT-ACC-TRX-03
product_area: accounting
module: transactions
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes:
  - ACT-ACC-0302
  - ACT-ACC-0318
  - ACT-ACC-0361
  - ACT-ACC-0362
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
actor: ACT-ACC-012
goal: Retain one card capture and one receipt even if the processor response is interrupted.
capabilities:
  - CAP-ACC-TRX-007
  - CAP-ACC-TRX-009
  - CAP-ACC-TRX-008
screens:
  - '/console/{tenantId}/accounting/payments/receive'
  - '/console/{tenantId}/accounting/payments/{paymentId}'
steps:
  - 'n': 1
    surface: '/console/{tenantId}/accounting/payments/receive'
    action: 'Select the customer, invoice, card method and merchant destination, then open hosted entry.'
    capability: CAP-ACC-TRX-007
    expected: The selected processor supplies its collection fields.
    provenance: test
    source: 'react-console:acceptance/accounting/playwright/journeys/payments/ACT-ACC-0361.spec.ts#ACT-ACC-0361'
  - 'n': 2
    surface: '/console/{tenantId}/accounting/payments/receive'
    action: Enter the instrument through the processor and confirm payment.
    capability: CAP-ACC-TRX-007
    expected: The attempt precedes capture and successful money becomes a numbered receipt.
    provenance: test
    source: 'react-console:acceptance/accounting/playwright/journeys/payments/ACT-ACC-0302.spec.ts#ACT-ACC-0302'
  - 'n': 3
    surface: '/console/{tenantId}/accounting/payments/{paymentId}'
    action: Inspect the resulting payment.
    capability: CAP-ACC-TRX-008
    expected: Instrument display context accompanies its application and the settled invoice.
    provenance: test
    source: 'react-console:acceptance/accounting/playwright/journeys/payments/ACT-ACC-0302.spec.ts#ACT-ACC-0302'
alternates:
  - from_step: 2
    condition: The capture response is lost after external success.
    path: Repeat the original request or allow scheduled lookup to establish the outcome.
    outcome: The existing capture becomes one receipt without another charge.
    provenance: test
    source: >-
      services-accounting:modules/transactions/tests/integration/services/payments/tender.integration.spec.js#it
      answers the payment to a replay of the same key, from what the processor holds, with no second charge
  - from_step: 2
    condition: All scheduled lookups remain inconclusive.
    path: An attention item asks staff to verify and decide failure or settlement.
    outcome: Definite failure permits another attempt and confirmed settlement records the receipt once.
    provenance: test
    source: >-
      services-accounting:modules/transactions/tests/integration/services/payments/lost-answers.integration.spec.js#it
      frees the invoice and the card for a new attempt under a new key, charged once
failures:
  - from_step: 2
    condition: The processor definitely declines.
    path: The dialog explains the response and retry starts fresh hosted entry.
    outcome: Debt remains outstanding and another instrument can be tried.
    provenance: test
    source: 'react-console:acceptance/accounting/playwright/journeys/payments/ACT-ACC-0362.spec.ts#ACT-ACC-0362'
  - from_step: 1
    condition: The merchant account became inactive after page load.
    path: Financial validation stops the attempt before charging.
    outcome: No collected money results.
    provenance: test
    source: 'react-console:acceptance/accounting/playwright/journeys/payments/ACT-ACC-0324.spec.ts#ACT-ACC-0324'
rules_in_play:
  - BR-CAP-ACC-TRX-007-01
  - BR-CAP-ACC-TRX-007-02
  - BR-CAP-ACC-TRX-007-03
  - BR-CAP-ACC-TRX-007-04
  - BR-CAP-ACC-TRX-007-05
  - BR-CAP-ACC-TRX-007-06
  - BR-CAP-ACC-TRX-007-07
  - BR-CAP-ACC-TRX-007-08
assertions:
  - id: AS-JNY-ACC-TRX-003-01
    statement: One attempt cannot create duplicate captured receipts.
    provenance: test
    source: >-
      services-accounting:modules/transactions/tests/integration/services/payments/tender.integration.spec.js#it
      replays the same key and body as the same payment, charging nothing more
  - id: AS-JNY-ACC-TRX-003-02
    statement: A definite decline retains debt without recording payment.
    provenance: test
    source: >-
      services-accounting:modules/transactions/tests/integration/services/payments/tender.integration.spec.js#it
      refuses processor_declined and fails the intent with the processor’s code, writing no payment
  - id: AS-JNY-ACC-TRX-003-03
    statement: Uncertain response recovery queries the prior attempt rather than charging again.
    provenance: test
    source: >-
      services-accounting:modules/transactions/tests/integration/services/payments/tender.integration.spec.js#it
      answers the payment to a replay of the same key, from what the processor holds, with no second charge
  - id: AS-JNY-ACC-TRX-003-04
    statement: Successful capture supplies payout-reconciliation evidence.
    provenance: test
    source: >-
      services-accounting:modules/transactions/tests/integration/services/payments/tender.integration.spec.js#it
      records the capture as one eligible settlement item keyed payment:<id>:capture, on Stripe’s timing (the
      account names no processor)
e2e_policy: required
e2e_reason: >-
  Hosted instrument entry needs browser proof; interrupted-response recovery is proved through service
  integration because the development stand-in does not retain cross-process lookup state.
proved_by: []
---

# Collect a phone payment and resolve a missing response

## Story

Staff help a member pay by phone using the processor’s hosted entry. Accounting retains the attempt before collection and follows success to the receipt and paid bill. Definite refusal leaves the debt and permits fresh entry. A missing response instead starts lookup of the original attempt. When lookup cannot decide, staff receive review work and confirm the processor outcome before resolving the money.
