{
  "generatedFrom": "Payments Signal canonical architecture registry",
  "notice": "SYNTHETIC / TRAINING ONLY",
  "blueprintId": "architecture-payment-hub",
  "versionLabel": "Reference architecture v1",
  "reviewDate": "2026-07-23",
  "traces": [
    {
      "id": "hub-credit-transfer",
      "label": "Process one new payment",
      "summary": "Follow a new instruction through identity, controls, posting, and network release.",
      "viewId": "component",
      "steps": [
        {
          "id": "ingress",
          "title": "Accept the request",
          "nodeId": "hub-ingress",
          "plainExplanation": "The hub authenticates the source and separates acceptance from completion.",
          "businessState": "RECEIVED"
        },
        {
          "id": "identity",
          "title": "Prove it is new",
          "nodeId": "hub-dedup",
          "interfaceId": "hub-accept",
          "plainExplanation": "Identity controls decide whether this is a new payment or a repeat.",
          "businessState": "IDENTIFIED"
        },
        {
          "id": "record",
          "title": "Create the payment record",
          "nodeId": "hub-canonical",
          "interfaceId": "hub-record",
          "plainExplanation": "One durable record now owns the lifecycle and its references.",
          "businessState": "ACCEPTED"
        },
        {
          "id": "validate",
          "title": "Validate and enrich",
          "nodeId": "hub-validation",
          "interfaceId": "hub-validate",
          "plainExplanation": "The hub checks profile and product rules and resolves authorised reference data.",
          "businessState": "VALIDATED"
        },
        {
          "id": "orchestrate",
          "title": "Start controlled processing",
          "nodeId": "hub-orchestrator",
          "interfaceId": "hub-start",
          "plainExplanation": "The state machine decides which commands are now permitted.",
          "businessState": "PROCESSING"
        },
        {
          "id": "screen",
          "title": "Obtain control decisions",
          "nodeId": "hub-screening",
          "interfaceId": "hub-control",
          "plainExplanation": "The screening adapter submits every governed field and records the result.",
          "businessState": "CONTROLLED",
          "controlEvidence": "Screening result, configuration version, and case reference if held"
        },
        {
          "id": "route",
          "title": "Choose the route",
          "nodeId": "hub-routing",
          "interfaceId": "hub-route",
          "plainExplanation": "The routing service records why this rail and profile fit the instruction.",
          "businessState": "ROUTED"
        },
        {
          "id": "post",
          "title": "Record value once",
          "nodeId": "hub-ledger-adapter",
          "interfaceId": "hub-post",
          "plainExplanation": "The adapter uses one posting key and returns journal evidence.",
          "businessState": "POSTED",
          "ledgerEffect": "Balanced entries with an immutable posting reference"
        },
        {
          "id": "transform",
          "title": "Build the network message",
          "nodeId": "hub-transform",
          "interfaceId": "hub-build",
          "plainExplanation": "Canonical data becomes the exact versioned profile required by the selected route.",
          "businessState": "ASSEMBLED",
          "messageIds": [
            "pacs-008"
          ]
        },
        {
          "id": "send",
          "title": "Release through the gateway",
          "nodeId": "hub-network-adapter",
          "interfaceId": "hub-send",
          "plainExplanation": "The secured connection transmits the message and returns network evidence.",
          "businessState": "SENT",
          "messageIds": [
            "pacs-008"
          ]
        },
        {
          "id": "evidence",
          "title": "Publish the evidence",
          "nodeId": "hub-observability",
          "interfaceId": "hub-adapter-evidence",
          "plainExplanation": "Operations can now trace the payment without changing it.",
          "businessState": "TRACKED"
        }
      ],
      "evidence": [
        {
          "ref": {
            "sourceId": "payments-signal-editorial",
            "label": "simplified-educational-illustration",
            "locator": "Payment-hub trace",
            "simplifications": "The sequence is a vendor-neutral state model; real products may parallelise or combine steps."
          },
          "verifiedDate": "2026-07-23",
          "versionContext": "Payments Signal reference architecture v1"
        },
        {
          "ref": {
            "sourceId": "iso20022-catalogue",
            "label": "official-requirement",
            "locator": "Payments message definitions"
          },
          "verifiedDate": "2026-07-23",
          "versionContext": "ISO 20022 catalogue — select the implementation community and message version in force"
        }
      ]
    }
  ],
  "stressCases": [
    {
      "id": "hub-conflicting-duplicate",
      "label": "Conflicting duplicate",
      "trigger": "The same idempotency key arrives with a changed amount or beneficiary.",
      "divergesAfterStepId": "identity",
      "traceId": "hub-credit-transfer",
      "affectedNodeIds": [
        "hub-ingress",
        "hub-dedup",
        "hub-canonical",
        "hub-ops-case"
      ],
      "affectedInterfaceIds": [
        "hub-accept",
        "hub-record"
      ],
      "lastConfirmedState": "The original payment remains authoritative; the new request is a conflict.",
      "settlementState": "The conflict creates no new settlement instruction.",
      "fundsState": "No second reservation or posting is permitted.",
      "owner": "Payment-platform operations",
      "safeAction": "Reject the changed reuse and return the original correlation reference without creating another payment.",
      "requiredEvidence": [
        "Idempotency key",
        "Original payload fingerprint",
        "New payload fingerprint",
        "Original payment state"
      ],
      "recoverySteps": [
        "Preserve the original",
        "Reject the conflict",
        "Investigate the caller if repeated"
      ],
      "evidence": [
        {
          "ref": {
            "sourceId": "payments-signal-editorial",
            "label": "simplified-educational-illustration",
            "locator": "Duplicate-control stress case",
            "simplifications": "Idempotency windows and economic-identity rules are institution-specific."
          },
          "verifiedDate": "2026-07-23",
          "versionContext": "Payments Signal reference architecture v1"
        }
      ]
    },
    {
      "id": "hub-control-timeout",
      "label": "Screening service timeout",
      "trigger": "The screening adapter receives no decision within its time budget.",
      "divergesAfterStepId": "screen",
      "traceId": "hub-credit-transfer",
      "affectedNodeIds": [
        "hub-orchestrator",
        "hub-screening",
        "hub-ops-case"
      ],
      "affectedInterfaceIds": [
        "hub-control",
        "hub-exception"
      ],
      "lastConfirmedState": "The payment is validated but has no control clearance.",
      "settlementState": "No network release or interbank settlement has occurred.",
      "fundsState": "Any reservation remains under the bank’s documented hold treatment.",
      "owner": "Financial-crime technology and payment operations",
      "safeAction": "Apply the approved failure posture and keep control evidence explicit.",
      "requiredEvidence": [
        "Control request",
        "Timeout timestamp",
        "Service health",
        "Fallback or hold authority"
      ],
      "recoverySteps": [
        "Hold or queue",
        "Restore the control service",
        "Re-screen",
        "Resume once under the same payment identity"
      ],
      "evidence": [
        {
          "ref": {
            "sourceId": "bis-cpmi-pfmi",
            "label": "official-requirement",
            "locator": "Principle 17 — operational risk"
          },
          "verifiedDate": "2026-07-23",
          "versionContext": "CPMI-IOSCO Principles for financial market infrastructures",
          "asOf": "2012-04-16"
        }
      ]
    },
    {
      "id": "hub-unknown-posting",
      "label": "Unknown ledger outcome",
      "trigger": "The ledger connection fails after it may have accepted the posting.",
      "divergesAfterStepId": "post",
      "traceId": "hub-credit-transfer",
      "affectedNodeIds": [
        "hub-orchestrator",
        "hub-ledger-adapter",
        "hub-ops-case",
        "hub-observability"
      ],
      "affectedInterfaceIds": [
        "hub-post",
        "hub-exception",
        "hub-evidence"
      ],
      "lastConfirmedState": "The payment passed controls; the posting response is unknown.",
      "settlementState": "Network release remains blocked.",
      "fundsState": "The ledger may contain the reservation or debit.",
      "owner": "Payment-platform and ledger operations",
      "safeAction": "Query by posting key and adopt the proven result before any retry.",
      "requiredEvidence": [
        "Posting command",
        "Idempotency key",
        "Ledger journal",
        "Payment event history"
      ],
      "recoverySteps": [
        "Query",
        "Correlate",
        "Adopt or retry",
        "Record the recovery decision"
      ],
      "evidence": [
        {
          "ref": {
            "sourceId": "payments-signal-editorial",
            "label": "simplified-educational-illustration",
            "locator": "Unknown-posting stress case",
            "simplifications": "The exact query and reversal interfaces depend on the ledger."
          },
          "verifiedDate": "2026-07-23",
          "versionContext": "Payments Signal reference architecture v1"
        }
      ]
    }
  ]
}
