{
  "tool_id": "art-550-reg-e-remittance-disclosure-check",
  "note": "Vectors computed directly from the shipped kernel. Covers a disclosed recipient amount that matches the recomputed identity exactly, a disclosed amount that does not (discrepancy detected), and the missing-required-fields finite gate (REGE_INPUTS_INSUFFICIENT, recomputed fields null, never NaN).",
  "vectors": [
    {
      "name": "disclosure-consistent",
      "description": "send $500.00, fees $15.00, rate 0.85, disclosed recipient $412.25 -- matches the recomputed identity exactly.",
      "policy_parameters": {
        "as_of": "2026-08-01",
        "send_amount_cents": 50000,
        "total_fees_disclosed_cents": 1500,
        "exchange_rate_disclosed_e6": 850000,
        "amount_recipient_disclosed_cents": 41225
      },
      "output_payload": {
        "as_of": "2026-08-01",
        "send_amount_cents": 50000,
        "total_fees_disclosed_cents": 1500,
        "exchange_rate_disclosed_e6": 850000,
        "exchange_rate_disclosed_display": "0.850000",
        "amount_recipient_disclosed_cents": 41225,
        "amount_recipient_recomputed_cents": 41225,
        "amount_recipient_recomputed_display": "412.25",
        "disclosure_consistent": true,
        "discrepancy_amount_cents": 0,
        "discrepancy_amount_display": "0.00",
        "regulatory_basis": "12 CFR §1005.31 (Reg E Subpart B, implementing Dodd-Frank §1073), disclosure arithmetic identity: amount_received = (send_amount - total_fees) x exchange_rate",
        "rejected_inputs": [],
        "rationale": [
          "Disclosed: send 500.00, total fees 15.00, exchange rate 0.850000, recipient amount 412.25.",
          "amount_received_recomputed = (send 500.00 - fees 15.00) x rate 0.850000 = 412.25.",
          "Disclosed recipient amount matches the recomputed identity exactly. disclosure_consistent = true.",
          "This is a deterministic recompute of the disclosed arithmetic identity, never a live rate lookup and never a fresh disclosure generator (see art-248-compute-remittance-disclosure for that). It issues no verdict on whether the provider must re-disclose -- only whether the numbers already disclosed are internally consistent.",
          "12 CFR §1005.31 (Reg E Subpart B, implementing Dodd-Frank §1073), disclosure arithmetic identity: amount_received = (send_amount - total_fees) x exchange_rate"
        ],
        "note": "Deterministic recompute of the Reg E Subpart B (12 CFR 1005.31) disclosure arithmetic identity amount_received = (send_amount - total_fees) x exchange_rate against a caller-disclosed recipient amount. Zero live rate calls; verifies internal consistency of numbers already disclosed, never generates a fresh disclosure."
      },
      "compliance_flags": [
        "REGE_DISCLOSURE_CONSISTENT"
      ],
      "golden_hash": "82814addaf5b588c2708a0fe241c013dbc683bc6cd137da79ca496630f0ec7bc"
    },
    {
      "name": "disclosure-discrepancy",
      "description": "send $1000.00, fees $30.00, rate 1.25, disclosed recipient $1250.00 -- recomputed is $1212.50, a $37.50 discrepancy.",
      "policy_parameters": {
        "as_of": "2026-08-01",
        "send_amount_cents": 100000,
        "total_fees_disclosed_cents": 3000,
        "exchange_rate_disclosed_e6": 1250000,
        "amount_recipient_disclosed_cents": 125000
      },
      "output_payload": {
        "as_of": "2026-08-01",
        "send_amount_cents": 100000,
        "total_fees_disclosed_cents": 3000,
        "exchange_rate_disclosed_e6": 1250000,
        "exchange_rate_disclosed_display": "1.250000",
        "amount_recipient_disclosed_cents": 125000,
        "amount_recipient_recomputed_cents": 121250,
        "amount_recipient_recomputed_display": "1212.50",
        "disclosure_consistent": false,
        "discrepancy_amount_cents": 3750,
        "discrepancy_amount_display": "37.50",
        "regulatory_basis": "12 CFR §1005.31 (Reg E Subpart B, implementing Dodd-Frank §1073), disclosure arithmetic identity: amount_received = (send_amount - total_fees) x exchange_rate",
        "rejected_inputs": [],
        "rationale": [
          "Disclosed: send 1000.00, total fees 30.00, exchange rate 1.250000, recipient amount 1250.00.",
          "amount_received_recomputed = (send 1000.00 - fees 30.00) x rate 1.250000 = 1212.50.",
          "Disclosed recipient amount 1250.00 does not match the recomputed 1212.50; discrepancy = 37.50.",
          "This is a deterministic recompute of the disclosed arithmetic identity, never a live rate lookup and never a fresh disclosure generator (see art-248-compute-remittance-disclosure for that). It issues no verdict on whether the provider must re-disclose -- only whether the numbers already disclosed are internally consistent.",
          "12 CFR §1005.31 (Reg E Subpart B, implementing Dodd-Frank §1073), disclosure arithmetic identity: amount_received = (send_amount - total_fees) x exchange_rate"
        ],
        "note": "Deterministic recompute of the Reg E Subpart B (12 CFR 1005.31) disclosure arithmetic identity amount_received = (send_amount - total_fees) x exchange_rate against a caller-disclosed recipient amount. Zero live rate calls; verifies internal consistency of numbers already disclosed, never generates a fresh disclosure."
      },
      "compliance_flags": [
        "REGE_DISCLOSURE_DISCREPANCY"
      ],
      "golden_hash": "3c71e0760cbe2dcff41559da4608e1affb65409eb192b7a57ed0b8415cf3fe22"
    },
    {
      "name": "inputs-insufficient",
      "description": "Missing total_fees_disclosed_cents, exchange_rate_disclosed_e6, amount_recipient_disclosed_cents: finite gate returns REGE_INPUTS_INSUFFICIENT, never NaN, recomputed fields null.",
      "policy_parameters": {
        "as_of": "2026-08-01",
        "send_amount_cents": 50000
      },
      "output_payload": {
        "as_of": "2026-08-01",
        "send_amount_cents": 50000,
        "total_fees_disclosed_cents": 0,
        "exchange_rate_disclosed_e6": null,
        "exchange_rate_disclosed_display": null,
        "amount_recipient_disclosed_cents": null,
        "amount_recipient_recomputed_cents": null,
        "amount_recipient_recomputed_display": null,
        "disclosure_consistent": null,
        "discrepancy_amount_cents": null,
        "discrepancy_amount_display": null,
        "regulatory_basis": "12 CFR §1005.31 (Reg E Subpart B, implementing Dodd-Frank §1073), disclosure arithmetic identity: amount_received = (send_amount - total_fees) x exchange_rate",
        "rejected_inputs": [
          {
            "where": "total_fees_disclosed_cents",
            "reason": "absent or not a non-negative integer number of cents",
            "supplied": null
          },
          {
            "where": "exchange_rate_disclosed_e6",
            "reason": "absent or not a positive integer exchange rate scaled by 1e6",
            "supplied": null
          },
          {
            "where": "amount_recipient_disclosed_cents",
            "reason": "absent or not an integer number of cents",
            "supplied": null
          }
        ],
        "rationale": [
          "One or more required declared inputs is missing or malformed; see rejected_inputs. No disclosure identity can be recomputed against undeclared amounts or rate.",
          "This is a deterministic recompute of the disclosed arithmetic identity, never a live rate lookup and never a fresh disclosure generator (see art-248-compute-remittance-disclosure for that). It issues no verdict on whether the provider must re-disclose -- only whether the numbers already disclosed are internally consistent.",
          "12 CFR §1005.31 (Reg E Subpart B, implementing Dodd-Frank §1073), disclosure arithmetic identity: amount_received = (send_amount - total_fees) x exchange_rate"
        ],
        "note": "Deterministic recompute of the Reg E Subpart B (12 CFR 1005.31) disclosure arithmetic identity amount_received = (send_amount - total_fees) x exchange_rate against a caller-disclosed recipient amount. Zero live rate calls; verifies internal consistency of numbers already disclosed, never generates a fresh disclosure."
      },
      "compliance_flags": [
        "REGE_INPUTS_INSUFFICIENT"
      ],
      "golden_hash": "ad49d3f494e6b6818b1955ae3bf6734dc554250a9bc23943e604076780319b9c"
    }
  ]
}
