{
  "tool_id": "art-563-mt9xx-camt-statement-migration-mapper",
  "tool_version": "1.0.0",
  "display_name": "Swift MT9xx to camt Statement Migration Mapper",
  "mcp_name": "map_mt9xx_to_camt",
  "mandate_type": "compliance_mandate",
  "wave": 85,
  "gpu": false,
  "url": "https://ainumbers.co/chaingraph/art-563-mt9xx-camt-statement-migration-mapper.html",
  "description": "Maps a pasted Swift MT900/910/940/942/950 statement or notification message to a camt.052/053/054-shaped JSON mapping object, plus a fidelity report (truncation findings, unmappable tags, and a 60F + sum(61) = 62F balance-consistency check for statement types). Swift retires these MT9xx messages in the 2027-28 coexistence window, receive-capability for the camt equivalents is mandated from November 2027, and Swift itself provides no MT-to-ISO 20022 conversion tool -- the translation burden lands on the receiving corporate or treasury. Field vocabulary (MT tag to camt element path) is reused from the tools/402 MT/MX field decoder. Kernel output stays JSON only; camt XML serialization from that JSON happens page-side. Distinct from the tools/565 camt.053 reconciliation workbench, which reconciles already-mapped camt.053 data against a ledger rather than mapping the message format.",
  "input_schema_ref": "chaingraph/art-563-mt9xx-camt-statement-migration-mapper.html#manifest",
  "consumes": [],
  "feeds": [],
  "status": "live",
  "conformance_fixtures": true,
  "compute_capability": "server",
  "compute_images": [
    {"system":"sha256-source","image_id":"sha256:79089ccf4a9ef55d91ff82ddba35cc5faa5878ec105312739ff7a2518a33f0f5","valid_from":"2026-07-10"},
    {"system":"risc0","image_id":"sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6","valid_from":"2026-08-07"}
  ],
  "export_capability": [
    "json"
  ],
  "compute_proof_ready": "ready",
  "compute_proof": {
    "type": "ZkVmReceipt",
    "system": "risc0",
    "receiptFormat": "groth16-bn254",
    "imageId": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
    "seal": "C+o+1OL5gfbjy+83b15bLdOQL6yopWU9aWsQfPffJxwWH7PgiBj5Go0kDnxpFZpc/DJ4JKvUfJAM3tWL/V3h3g0mWDsvDyePtdbt1oZ+tRG9W604A2J1Y/k/VN7wxm1lElxKkQ5oeOP+2b+64av++tUGeO1ukGTwwzcxNQQqKnUcjywmHhIRWWn2EYr8kDatx7gOnHCne7c+C8uDUc2JJhMCc7ME7nW7H60/iSGUGHpLD04P6cX+Ar3Mt5beNSg1Kg2P/leNLSY+IALuA3Xa2t09bOrjCQF5l1T/vfZzXhkn64zNP/yI1bDUMIu16lMza8Oc4pUt3GqPUmKV4Nfngg==",
    "journal": {
      "chaingraph_version": "0.4.0",
      "kernel_digest": "sha256:79089ccf4a9ef55d91ff82ddba35cc5faa5878ec105312739ff7a2518a33f0f5",
      "output": {
        "account_id": "DE89370400440532013000",
        "camt_message_root": "BkToCstmrStmt/Stmt",
        "coexistence_note": "Swift MT900/910/940/942/950 retirement runs the 2027-28 coexistence window; camt receive-capability is mandated from 2027-11 (dated observation, not a compliance-deadline claim by this tool).",
        "default_target": "camt.053",
        "disambiguation": "map_mt9xx_to_camt maps a pasted MT900/910/940/942/950 statement/notification message to a camt.052/053/054-shaped JSON mapping object plus a fidelity report (truncation, unmappable tags, 60F+61=62F balance check). It reuses tools/402's MT-to-camt field vocabulary but does not duplicate art-565-camt053-reconciliation-workbench's bank-vs-ledger reconciliation semantics -- this node maps message format, art-565 (tools/565) reconciles already-mapped camt.053 data against a ledger.",
        "fidelity_report": {
          "balance_check": {
            "actual_closing_signed_cents": 10350000,
            "currency_consistent": true,
            "discrepancy_cents": 0,
            "expected_closing_signed_cents": 10350000,
            "opening_signed_cents": 10000000,
            "pass": true,
            "sum_entries_signed_cents": 350000
          },
          "data_loss_warnings": [],
          "truncation_findings": [],
          "unmappable_tags": []
        },
        "mapping": [
          {
            "camt_path": "BkToCstmrStmt/GrpHdr/MsgId",
            "mt_tag": "20",
            "transform": "direct",
            "value": "STMT2026080601"
          },
          {
            "camt_path": "BkToCstmrStmt/Stmt/Acct/Id/IBAN or Othr",
            "mt_tag": "25",
            "transform": "IBAN direct; non-IBAN to Othr/Id",
            "value": "DE89370400440532013000"
          },
          {
            "camt_path": "BkToCstmrStmt/Stmt/StmtPgntn or LglSeqNb",
            "mt_tag": "28C",
            "transform": "split statement/sequence number",
            "value": "5/1"
          },
          {
            "camt_path": "BkToCstmrStmt/Stmt/Bal[Tp/CdOrPrtry/Cd=OPBD]",
            "mt_tag": "60F",
            "transform": "balance field parse",
            "value": "C260801USD100000,00"
          },
          {
            "camt_path": "BkToCstmrStmt/Stmt/Bal[Tp/CdOrPrtry/Cd=CLBD]",
            "mt_tag": "62F",
            "transform": "balance field parse",
            "value": "C260803USD103500,00"
          },
          {
            "camt_path": "BkToCstmrStmt/Stmt/Ntry",
            "mt_tag": "61",
            "transform": "composite MT61 parse to structured Ntry[]",
            "value": "2 statement line(s)"
          }
        ],
        "message_id": "STMT2026080601",
        "mt_type": "940",
        "mt_type_conflict": false,
        "no_swift_endorsement": "This mapping is produced by AINumbers.co and carries no Swift endorsement. Swift does not provide MT-to-ISO 20022 conversion tooling.",
        "notification": null,
        "pii_note": "Statement/notification data may include real account numbers and counterparty references if a caller pastes a genuine message. This tool is zero-egress and computes entirely client-side or server-side per compute_mode; goldens ship synthetic statements only.",
        "rejected_inputs": [],
        "statement": {
          "closing": {
            "amount_cents": 10350000,
            "currency": "USD",
            "date_iso": "2026-08-03",
            "dc": "C",
            "signed_cents": 10350000
          },
          "entries": [
            {
              "amount_cents": 150000,
              "bank_reference": "BANKREF01",
              "camt_path": "BkToCstmrStmt/Stmt/Ntry",
              "customer_reference": "REF12345",
              "dc": "D",
              "entry_date_mmdd": "0802",
              "funds_code": null,
              "narrative": "Payment to vendor ABC invoice 1234",
              "signed_cents": -150000,
              "transaction_type_code": "NTRF",
              "value_date_iso": "2026-08-02"
            },
            {
              "amount_cents": 500000,
              "bank_reference": "BANKREF02",
              "camt_path": "BkToCstmrStmt/Stmt/Ntry",
              "customer_reference": "REF67890",
              "dc": "C",
              "entry_date_mmdd": "0803",
              "funds_code": null,
              "narrative": "Incoming wire from customer XYZ",
              "signed_cents": 500000,
              "transaction_type_code": "NTRF",
              "value_date_iso": "2026-08-03"
            }
          ],
          "opening": {
            "amount_cents": 10000000,
            "currency": "USD",
            "date_iso": "2026-08-01",
            "dc": "C",
            "signed_cents": 10000000
          },
          "seq_number": "1",
          "stmt_number": "5"
        },
        "target": "camt.053",
        "target_overridden": false,
        "verdict": "CLEAN"
      }
    }
  }
}
