---
id: FAS-PFM-INT-03
title: Gateway calls and settlement acceptance
feature: FEAT-PFM-INT-03
product_area: platform
module: integrations
revision: 2
status: proposed
product_intent: proposed
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  macroservice-libraries: 54536a441935c6e09fdb7f96f0bec71c52ba4e03
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
capabilities:
  - CAP-PFM-INT-007
  - CAP-PFM-INT-008
  - CAP-PFM-INT-009
  - CAP-PFM-INT-010
  - CAP-PFM-INT-011
  - CAP-PFM-INT-012
scenarios:
  - id: FAS-PFM-INT-03-01
    title: Select an account and trace the resulting operation
    kind: behaviour
    exercises:
      - CAP-PFM-INT-007
      - CAP-PFM-INT-008
      - CAP-PFM-INT-009
      - CAP-PFM-INT-011
      - CAP-PFM-INT-012
    relies_on:
      - ATS-PFM-INT-007-01
      - ATS-PFM-INT-008-01
      - ATS-PFM-INT-009-04
      - ATS-PFM-INT-011-01
      - ATS-PFM-INT-012-04
    preconditions: A verified test account supports the requested capability.
    steps: >-
      Create a scoped binding, Explain it, invoke, inspect execution detail and make a direct Library
      test.
    expected: Scoped work uses the configured choice and both call paths retain inspectable execution evidence.
    negative: false
    data_needs: 'Run-owned declarations, records and role fixtures in an isolated workspace.'
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-platform:modules/integrations/tests/integration/services/persistence/integration-bindings.integration.spec.js#leaves
        one active binding at the scope
      - >-
        services-platform:modules/integrations/tests/unit/services/binding-resolution.spec.ts#asks every
        scope the policy allows and the context names, most specific first
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/invoke-capability.integration.spec.js#records
        the execution succeeded, with its digest, summaries, reference and one attempt
      - >-
        services-platform:modules/integrations/tests/e2e-adapters/gateway-dummy.adapters.spec.js#lets the
        tenant read the execution, its attempts and its stored response
      - >-
        services-platform:modules/integrations/tests/e2e/connection-try.e2e.spec.js#records an execution
        of that connection by the calling application library_try on behalf of the person, with no
        binding
  - id: FAS-PFM-INT-03-02
    title: Admission and uncertainty preserve the original processor
    kind: interaction
    exercises:
      - CAP-PFM-INT-008
      - CAP-PFM-INT-009
      - CAP-PFM-INT-010
      - CAP-PFM-INT-011
    relies_on:
      - ATS-PFM-INT-008-07
      - ATS-PFM-INT-009-07
      - ATS-PFM-INT-010-01
      - ATS-PFM-INT-011-05
    preconditions: A money operation has a selected processor and another eligible processor exists.
    steps: >-
      Invoke with the selected circuit open, then invoke after reset with a post-send timeout and
      investigate it.
    expected: >-
      Admission does not switch processors; the uncertain operation is looked up and can be resolved
      without a second send.
    negative: false
    data_needs: 'Run-owned declarations, records and role fixtures in an isolated workspace.'
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-platform:modules/integrations/tests/unit/services/binding-resolution.spec.ts#resolves a
        payment whose processor’s circuit is open rather than refusing it binding_ineligible
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/invoke-capability.integration.spec.js#refuses
        with 503 provider_unavailable while the circuit is open, and releases the key
      - >-
        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/integration/services/executions/reconciler.integration.spec.js#lets
        an operator resolve a needs_attention execution by hand, audited, with no call to the provider
  - id: FAS-PFM-INT-03-03
    title: An overdue asynchronous operation reaches a final finding
    kind: lifecycle
    exercises:
      - CAP-PFM-INT-009
      - CAP-PFM-INT-010
      - CAP-PFM-INT-011
    relies_on:
      - ATS-PFM-INT-009-09
      - ATS-PFM-INT-010-04
      - ATS-PFM-INT-011-05
    preconditions: An asynchronous operation remains unanswered beyond its budget.
    steps: 'Run timeout and lookup passes until attention is required, then record a noted finding.'
    expected: The same execution reaches one recorded outcome and one applicable completion.
    negative: false
    data_needs: 'Run-owned declarations, records and role fixtures in an isolated workspace.'
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/invoke-capability.integration.spec.js#answers
        202 accepted and queues the first attempt with the execution, calling no adapter
      - >-
        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/integration/services/executions/reconciler.integration.spec.js#lets
        an operator resolve a needs_attention execution by hand, audited, with no call to the provider
  - id: FAS-PFM-INT-03-04
    title: Inspection does not grant provider or operator effects
    kind: permission
    exercises:
      - CAP-PFM-INT-007
      - CAP-PFM-INT-008
      - CAP-PFM-INT-009
      - CAP-PFM-INT-011
      - CAP-PFM-INT-012
    relies_on:
      - ATS-PFM-INT-007-10
      - ATS-PFM-INT-008-09
      - ATS-PFM-INT-009-02
      - ATS-PFM-INT-011-02
      - ATS-PFM-INT-012-02
    preconditions: 'A reader, integration manager, authorized application and execution operator are available.'
    steps: >-
      Read bindings and Explain as a reader, attempt invocation and resolution without their authority,
      then use the authorized roles.
    expected: >-
      Unauthorized effects leave records unchanged and each authorized role acts only through its own
      permission boundary.
    negative: true
    data_needs: 'Run-owned declarations, records and role fixtures in an isolated workspace.'
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-platform:modules/integrations/tests/e2e/integration-bindings.e2e.spec.js#is refused a
        reader of integrations (403)
      - 'services-platform:modules/integrations/tests/e2e/integration-bindings.e2e.spec.js#may explain'
      - >-
        services-platform:modules/integrations/tests/unit/services/gateway-refusals.spec.ts#refuses a
        service principal naming another application, access_denied
      - >-
        services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#is refused every route
        that changes something (403)
      - >-
        services-platform:modules/integrations/tests/e2e/connection-try.e2e.spec.js#is refused 403 and no
        execution or audit row is recorded
  - id: FAS-PFM-INT-03-05
    title: A repeated uncertain request does not resend
    kind: regression
    exercises:
      - CAP-PFM-INT-009
      - CAP-PFM-INT-010
    relies_on:
      - ATS-PFM-INT-009-03
      - ATS-PFM-INT-010-01
    preconditions: An authorization times out after possible provider receipt.
    steps: 'Send the identical request while reconciliation is pending, then perform its due lookup.'
    expected: >-
      The repeat identifies the same pending execution and lookup contacts its original account without a
      second authorization.
    negative: true
    data_needs: 'Run-owned declarations, records and role fixtures in an isolated workspace.'
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-platform:modules/integrations/tests/integration/services/executions/invoke-capability.integration.spec.js#replays
        a settled execution’s stored answer for the same key and request, without calling the adapter
        again
      - >-
        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
evidence:
  - >-
    The feature, its capabilities and the detailed scenarios listed in each reliance are examined at the
    pinned revisions.
---
# Gateway calls and settlement: Feature Acceptance Suite

## What the Feature Must Do as a Whole

The suite follows account selection through invocation, inspection and settlement. Acceptance checks that the selected connection and the recorded execution remain consistent when a provider answer is uncertain or arrives after the original request.

## Interactions Between Capabilities

Admission, replay and operator recovery meet at the retained execution. The composed cases follow that execution through lookup and a final finding, inspecting completion without assuming that retrying a request or changing a binding establishes a new provider operation.

The reliance links identify detailed capability scenarios. None of these composed acceptance sequences has a verified executable binding at the pinned revisions; the corresponding coverage finding remains open.

## Regression Record

| Revision | Change | Scenarios | Reason |
|---|---|---|---|
| 1 | Initial | All | Establish the cumulative acceptance sequences and initial regression cases. |
| 2 | Testing examination continuation | All | Clarify the feature boundary and preserve proposed status for unbound composed sequences. |
