---
id: ATS-PFM-INT-010
scope: CAP-PFM-INT-010
product_area: platform
module: integrations
revision: 3
status: proposed
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  macroservice-libraries: 54536a441935c6e09fdb7f96f0bec71c52ba4e03
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-PFM-INT-010-01
    title: Unknown payments use lookup instead of re-authorization
    level: api
    proves:
      - BR-CAP-PFM-INT-010-01
      - AS-JNY-PFM-INT-004-01
    preconditions: A payment lost its answer after being sent.
    steps: Run reconciliation when the first thirty-second delay expires.
    expected: Lookup uses the original connection and execution identity without another authorization.
    negative: false
    data_needs: 'Fixtures establishing the stated accounts, declarations and history in an isolated workspace.'
    bound_to:
      - TST-PFM-INT-545
      - TST-PFM-INT-481
      - TST-PFM-INT-380
    provenance: test
    source: >-
      services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#looks
      the execution up on the same connection with the contracts’ lookup shape, never repeating the
      authorize
    category: interaction
    binding_evidence:
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#looks
        the execution up on the same connection with the contracts’ lookup shape, never repeating the
        authorize
      - >-
        services-platform:modules/integrations/tests/e2e-adapters/gateway-dummy.adapters.spec.js#answers
        the invoke client unknown, never a retry
      - >-
        services-platform:modules/integrations/tests/e2e-adapters/gateway-dummy.adapters.spec.js#settles
        it succeeded by the dummy’s lookup, with what the provider did as the stored response
      - >-
        react-console:acceptance/integrations/playwright/journeys/library/INT-ACC-0039.spec.ts#INT-ACC-0039
    binding_scope: >-
      contributions: the cited tests support their own asserted outcomes. Additional setup, branches
      and combined sequences remain proposed unless the cited assertions exercise them.
  - id: ATS-PFM-INT-010-02
    title: Uncertainty follows the lookup timetable
    level: api
    proves:
      - BR-CAP-PFM-INT-010-02
    preconditions: Provider lookups cannot establish the outcome.
    steps: Use the controlled clock to run all five lookups.
    expected: >-
      Further checks wait two minutes, ten minutes, one hour and six hours, then transfer the call to
      attention with one notice.
    negative: false
    data_needs: 'Fixtures establishing the stated accounts, declarations and history in an isolated workspace.'
    bound_to:
      - TST-PFM-INT-545
    provenance: test
    source: >-
      services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#backs
      off 2 min, 10 min, 1 h and 6 h while the lookup cannot tell
    category: rule
    binding_evidence:
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#backs
        off 2 min, 10 min, 1 h and 6 h while the lookup cannot tell
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#sends
        the execution to needs_attention after the fifth lookup that cannot tell, with one notice to the
        administrators
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#writes
        the settlement of a found operation to the execution’s audit trail, once, and writes nothing for
        a lookup that settles none
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#drives
        an unknown payment to needs_attention through five lookups in one test, by offsets alone
    binding_scope: >-
      contributions: the cited tests support their own asserted outcomes. Additional setup, branches
      and combined sequences remain proposed unless the cited assertions exercise them.
  - id: ATS-PFM-INT-010-03
    title: Not found retains uncertainty until the final check
    level: api
    proves:
      - BR-CAP-PFM-INT-010-03
    preconditions: A payment and a non-sensitive record lookup each receive not-found results.
    steps: Advance through all scheduled lookups.
    expected: >-
      The payment remains unknown until manual attention, while the record lookup fails only at the final
      check.
    negative: false
    data_needs: 'Fixtures establishing the stated accounts, declarations and history in an isolated workspace.'
    bound_to:
      - TST-PFM-INT-545
    provenance: test
    source: >-
      services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#keeps
      looking through the fourth lookup, never failing a payment the provider may still show
    category: edge
    binding_evidence:
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#keeps
        looking through the fourth lookup, never failing a payment the provider may still show
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#leaves
        the execution unknown after the first lookup, the provider’s search may lag behind a charge
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#sends
        a payment to needs_attention at the last lookup, with one notice, never failing it
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#settles
        an execution of a capability that moves no money failed, not_found.lookup, at the last lookup
    binding_scope: >-
      contributions: the cited tests support their own asserted outcomes. Additional setup, branches
      and combined sequences remain proposed unless the cited assertions exercise them.
  - id: ATS-PFM-INT-010-04
    title: Lost or late work enters reconciliation
    level: api
    proves:
      - BR-CAP-PFM-INT-010-04
    preconditions: 'Prepare an accepted unfinished asynchronous call, a lost attempt and lost retry dispatch.'
    steps: Run the reconciler before and after their deadline bounds.
    expected: >-
      Nothing moves before its bound; overdue work becomes unknown with its cause and is eligible for
      later lookup.
    negative: false
    data_needs: 'Fixtures establishing the stated accounts, declarations and history in an isolated workspace.'
    bound_to:
      - TST-PFM-INT-578
      - TST-PFM-INT-545
    provenance: test
    source: >-
      services-platform:modules/integrations/tests/unit/services/execution-timeouts.spec.ts#is 24 hours
      for an async-only capability whose manifest declares none
    category: failure
    binding_evidence:
      - >-
        services-platform:modules/integrations/tests/unit/services/execution-timeouts.spec.ts#is 24 hours
        for an async-only capability whose manifest declares none
      - >-
        services-platform:modules/integrations/tests/unit/services/execution-timeouts.spec.ts#is the
        manifest’s explicit async_timeout_ms (the Dummy declares 60 s)
      - >-
        services-platform:modules/integrations/tests/unit/services/execution-timeouts.spec.ts#is never
        raised above 24 hours by the manifest
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#moves
        it to unknown past started_at plus 24 hours, unknown.async_timeout, counted by the run
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#moves
        it to unknown past them, unknown.attempt_lost
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#moves
        it to unknown past the longest queued wait, unknown.dispatch_lost
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#lets
        the adapter complete a timed-out execution before any lookup settles it
    binding_scope: >-
      contributions: the cited tests support their own asserted outcomes. Additional setup, branches
      and combined sequences remain proposed unless the cited assertions exercise them.
  - id: ATS-PFM-INT-010-05
    title: Completion emission follows one committed settlement
    level: api
    proves:
      - BR-CAP-PFM-INT-010-05
    preconditions: An adapter completes asynchronous work and lookup settles a previously unanswered immediate call.
    steps: 'Repeat completions, redeliver work and repeat lookup settlement, including a rollback.'
    expected: >-
      Each committed settlement produces one applicable completion event, repeats produce none and
      rollback loses no later completion.
    negative: false
    data_needs: 'Fixtures establishing the stated accounts, declarations and history in an isolated workspace.'
    bound_to:
      - TST-PFM-INT-542
      - TST-PFM-INT-545
    provenance: test
    source: >-
      services-platform:modules/integrations/tests/integration/services/executions/execution-settlement.integration.spec.js#is
      written once for two settlements that both read the execution running, the loser moving nothing
    category: invariant
    binding_evidence:
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/execution-settlement.integration.spec.js#is
        written once for two settlements that both read the execution running, the loser moving nothing
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/execution-settlement.integration.spec.js#is
        not written again by a redelivered queue message
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/execution-settlement.integration.spec.js#is
        not written by a second complete, which the callback refuses once the execution is settled
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/execution-settlement.integration.spec.js#rolls
        the settlement back with the event when the transaction fails after the move
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#tells
        the application once that a sync execution left unknown was settled by the lookup, and not again
        by a later pass
    binding_scope: >-
      contributions: the cited tests support their own asserted outcomes. Additional setup, branches
      and combined sequences remain proposed unless the cited assertions exercise them.
  - id: ATS-PFM-INT-010-06
    title: Callback permissions protect execution ownership
    level: api
    proves:
      - BR-CAP-PFM-INT-010-06
    preconditions: The test adapter has running asynchronous work and another provider’s connection exists.
    steps: 'Report progress and attempt invalid, foreign-connection and synchronous completions.'
    expected: >-
      Progress reports cancellation state; invalid result and unauthorized execution contexts are
      refused.
    negative: true
    data_needs: 'Fixtures establishing the stated accounts, declarations and history in an isolated workspace.'
    bound_to:
      - TST-PFM-INT-509
    provenance: test
    source: >-
      services-platform:modules/integrations/tests/integration/services/adapter-callbacks/adapter-callbacks.integration.spec.js#refuses
      a sync execution, which only the gateway settles
    category: permission
    binding_evidence:
      - >-
        services-platform:modules/integrations/tests/integration/services/adapter-callbacks/adapter-callbacks.integration.spec.js#refuses
        a sync execution, which only the gateway settles
      - >-
        services-platform:modules/integrations/tests/integration/services/adapter-callbacks/adapter-callbacks.integration.spec.js#refuses
        another adapter’s connection, AccessDenied
      - >-
        services-platform:modules/integrations/tests/integration/services/adapter-callbacks/adapter-callbacks.integration.spec.js#answers
        whether a cancellation was requested of a running execution
      - >-
        services-platform:modules/integrations/tests/integration/services/adapter-callbacks/adapter-callbacks.integration.spec.js#refuses
        a result its contract refuses, InvalidRequest
      - >-
        services-platform:modules/integrations/tests/integration/services/adapter-callbacks/adapter-callbacks.integration.spec.js#refuses
        an execution of another connection, AccessDenied
    binding_scope: >-
      contributions: the cited tests support their own asserted outcomes. Additional setup, branches
      and combined sequences remain proposed unless the cited assertions exercise them.
  - id: ATS-PFM-INT-010-07
    title: Console attention mirrors reconciliation
    level: browser
    proves:
      - BR-CAP-PFM-INT-010-07
    preconditions: A payment answer is lost after delivery.
    steps: Inspect its Activity and detail through successive checks.
    expected: >-
      It remains Settling with its next check until Platform ends reconciliation, then enters Needs
      Attention.
    negative: false
    data_needs: 'Fixtures establishing the stated accounts, declarations and history in an isolated workspace.'
    bound_to:
      - TST-PFM-INT-577
      - TST-PFM-INT-458
    provenance: test
    source: >-
      services-platform:modules/integrations/tests/unit/services/execution-settlement-wire.spec.ts#gives
      the next lookup time of an unknown execution, not in needs attention
    category: interaction
    binding_evidence:
      - >-
        services-platform:modules/integrations/tests/unit/services/execution-settlement-wire.spec.ts#gives
        the next lookup time of an unknown execution, not in needs attention
      - >-
        services-platform:modules/integrations/tests/unit/services/execution-settlement-wire.spec.ts#gives
        no next check and needs attention once Platform has given up
      - >-
        react-console:lib/integrations/settling.test.ts#reads next_check_at and in_needs_attention as
        Platform answers them
      - 'react-console:lib/integrations/settling.test.ts#calls only an unknown execution Settling'
    binding_scope: >-
      contributions: the cited tests support their own asserted outcomes. Additional setup, branches
      and combined sequences remain proposed unless the cited assertions exercise them.
  - id: ATS-PFM-INT-010-08
    level: api
    negative: false
    data_needs: Run-owned records and principals in an isolated workspace.
    bound_to: []
    provenance: proposed
    title: A manual finding settles only once
    category: interaction
    proves:
      - BR-CAP-PFM-INT-010-05
      - BR-CAP-PFM-INT-011-06
    exercises:
      - CAP-PFM-INT-010
      - CAP-PFM-INT-011
    preconditions: An uncertain asynchronous call requires attention.
    steps: Record a successful finding with a note and repeat the request while inspecting completion records.
    expected: 'One outcome and applicable completion are retained, with no provider invocation for the finding.'
    source:
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/execution-settlement.integration.spec.js#is
        written once for two settlements that both read the execution running, the loser moving nothing
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#lets
        an operator resolve a needs_attention execution by hand, audited, with no call to the provider
    workflows:
      - WF-PFM-INT-013
  - id: ATS-PFM-INT-010-09
    level: api
    negative: false
    data_needs: Run-owned records and principals in an isolated workspace.
    bound_to: []
    provenance: proposed
    title: Attention follows settlement rather than elapsed age
    category: interaction
    proves:
      - BR-CAP-PFM-INT-006-10
      - BR-CAP-PFM-INT-010-07
    exercises:
      - CAP-PFM-INT-010
      - CAP-PFM-INT-006
    preconditions: One call is still scheduled for lookup and another has exhausted investigation.
    steps: Read both execution states and open the attention view.
    expected: Only the exhausted investigation appears as a call requiring a person.
    source:
      - >-
        react-console:lib/integrations/needs-attention.test.ts#leaves a settling (unknown) execution out
        however long it has been unknown
      - >-
        services-platform:modules/integrations/tests/unit/services/execution-settlement-wire.spec.ts#gives
        the next lookup time of an unknown execution, not in needs attention
    workflows: []
  - id: ATS-PFM-INT-010-10
    level: api
    negative: false
    data_needs: Run-owned records and principals in an isolated workspace.
    bound_to: []
    provenance: proposed
    title: Settled asynchronous work reaches only its caller
    category: interaction
    proves:
      - BR-CAP-PFM-INT-010-05
      - BR-CAP-PFM-INT-015-03
    exercises:
      - CAP-PFM-INT-010
      - CAP-PFM-INT-015
    preconditions: Two applications have completion consumers and the first owns an unanswered asynchronous operation.
    steps: 'Settle the operation, route its completion and repeat settlement.'
    expected: Only the calling application receives the response and no second completion is created.
    source:
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/execution-settlement.integration.spec.js#is
        written once for two settlements that both read the execution running, the loser moving nothing
      - >-
        services-platform:modules/integrations/tests/e2e-adapters/events-dummy.adapters.spec.js#reaches
        the consumer of the application that invoked it, carrying the response
    workflows: []
  - id: ATS-PFM-INT-010-11
    level: api
    negative: false
    data_needs: Run-owned records and principals in an isolated workspace.
    bound_to: []
    provenance: proposed
    title: A post-send timeout enters lookup without another send
    category: interaction
    proves:
      - BR-CAP-PFM-INT-009-05
      - BR-CAP-PFM-INT-010-01
    exercises:
      - CAP-PFM-INT-010
      - CAP-PFM-INT-009
    preconditions: A sensitive operation times out after possible provider receipt.
    steps: 'Invoke it, run the due lookup and inspect attempts and provider operations.'
    expected: Investigation uses the same execution and account; no second authorization is sent.
    source:
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/invoke-capability.integration.spec.js#retries
        a timeout before send after the sync schedule’s first delay, with the same execution id, and
        succeeds
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/reconciler.integration.spec.js#looks
        the execution up on the same connection with the contracts’ lookup shape, never repeating the
        authorize
    workflows:
      - WF-PFM-INT-012
evidence:
  - >-
    Each binding identifies an existing source test at the pinned revision; unbound scenarios remain
    proposed proof obligations.
coverage:
  rule: covered
  transition: 'gap: FND-PFM-INT-070'
  validation: 'gap: FND-PFM-INT-070'
  permission: covered
  edge: covered
  failure: covered
  boundary: 'gap: FND-PFM-INT-070'
  concurrency: 'gap: FND-PFM-INT-070'
  invariant: covered
  interaction: covered
coverage_notes:
  covered: A designed scenario exists; executable coverage and a passing run require separate evidence.
  gaps: >-
    The finding records categories without a designed scenario and remaining permission and rule audit
    obligations.
---
# Determine the result of uncertain or overdue calls: Capability Test Specification

## Coverage

| Rule | Proved By |
|---|---|
| `BR-CAP-PFM-INT-010-01` | `ATS-PFM-INT-010-01`, `ATS-PFM-INT-010-11` |
| `BR-CAP-PFM-INT-010-02` | `ATS-PFM-INT-010-02` |
| `BR-CAP-PFM-INT-010-03` | `ATS-PFM-INT-010-03` |
| `BR-CAP-PFM-INT-010-04` | `ATS-PFM-INT-010-04` |
| `BR-CAP-PFM-INT-010-05` | `ATS-PFM-INT-010-05`, `ATS-PFM-INT-010-08`, `ATS-PFM-INT-010-10` |
| `BR-CAP-PFM-INT-010-06` | `ATS-PFM-INT-010-06` |
| `BR-CAP-PFM-INT-010-07` | `ATS-PFM-INT-010-07`, `ATS-PFM-INT-010-09` |
| `BR-CAP-PFM-INT-010-08` | `FND-PFM-INT-070` |

## Interactions With Related Capabilities

Settlement joins execution history, operator intervention and application completion. The interaction cases revisit the same execution after a timeout or uncertain provider answer and inspect the final finding and downstream notification.

The structured scenarios name the capabilities and rules involved. A bound test contributes only the outcomes it asserts; proposed transition matrices and composed interactions still require executable proof.
