{
  "tool_id": "art-442-nmd-behavioral-repricing-mapper",
  "tool_version": "1.0.0",
  "display_name": "NMD Behavioral Repricing Mapper",
  "mcp_name": "map_nmd_behavioral_repricing",
  "mandate_type": "analytics_mandate",
  "wave": 73,
  "gpu": false,
  "url": "https://ainumbers.co/chaingraph/art-442-nmd-behavioral-repricing-mapper.html",
  "description": "OCC 2010-1 Interagency Advisory on IRR: maps non-maturity deposit (NMD) segment balances into a bucketed net-repricing-gap schedule using a caller-declared behavioral allocation (per-bucket repricing fractions) and a deposit beta -- never a baked-in regulatory decay curve. Feeds directly into art-369's repricing_gaps input, which art-369 itself requires as a GIVEN and does not derive. Distinct from art-369 (Rate Shock Ladder Replay), which sweeps shocks over an already-bucketed gap schedule; this kernel builds that schedule from underlying deposit balances. NaN-safe. Zero network, zero PII.",
  "input_schema_ref": "chaingraph/art-442-nmd-behavioral-repricing-mapper.html#manifest",
  "consumes": [],
  "feeds": [],
  "status": "live",
  "conformance_fixtures": true,
  "compute_capability": "server",
  "compute_images": [
    {
      "system": "sha256-source",
      "image_id": "sha256:388900a314f4d9e05be9bfcf9909a1b89a67b9c482c057d9434cb200f7bef94d",
      "valid_from": "2026-07-10"
    },
    {
      "system": "risc0",
      "image_id": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
      "valid_from": "2026-07-23"
    }
  ],
  "export_capability": [
    "json"
  ],
  "compute_proof_ready": "ready",
  "compute_proof": {
    "type": "ZkVmReceipt",
    "system": "risc0",
    "receiptFormat": "groth16-bn254",
    "imageId": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
    "seal": "LH1x6Zs6trhiGPJU4cM/CFCSoYjofPXFQRWYa5IEHr4J1YFUnLGb/NpKKsyE/le9WKx4bfGC5gaIzQQkr4HIIybZJ/77jRGJb4oJg2p4tLvNQH9fTXnTXwulLNyM1wujI9LR+PpdBPTN3AaZK5v1RoYSCNqfuSTVeKsKMNG1QX0qiTslJuvV5mOzAYd/DNIRuYd65VUUD4oRqkGF4n82ThAE1RvXCvYsWS/H3nTwN7fAA/hyf4i70rSSmB2zRoVfJ26pgvQJkrOD6SYssR4IGOjxdVTeW9jaVGMA1dkAUNEwGuHwvHDDGR6m+hY9NTNP9Fj7V8DUyooC3T/r3/NFIQ==",
    "journal": {
      "chaingraph_version": "0.4.0",
      "kernel_digest": "sha256:388900a314f4d9e05be9bfcf9909a1b89a67b9c482c057d9434cb200f7bef94d",
      "output": {
        "buckets_used": [
          "on_1m",
          "m1_y1",
          "y1_y3",
          "y3_y5",
          "y5_y10",
          "y10_plus"
        ],
        "convention": "OCC 2010-1 NMD core/volatile behavioral repricing mapper (caller-declared allocation)",
        "net_repricing_gap": {
          "m1_y1": -150000,
          "on_1m": -150000,
          "y10_plus": -80000,
          "y1_y3": -20000,
          "y3_y5": -40000,
          "y5_y10": -60000
        },
        "segment_results": [
          {
            "allocation_sum": 1,
            "balance": 1000000,
            "beta": 0.2,
            "bucket_gaps": {
              "m1_y1": 0,
              "on_1m": 0,
              "y10_plus": -80000,
              "y1_y3": -20000,
              "y3_y5": -40000,
              "y5_y10": -60000
            },
            "name": "checking_core",
            "rate_sensitive_balance": 200000,
            "sums_to_one": true
          },
          {
            "allocation_sum": 1,
            "balance": 500000,
            "beta": 0.6,
            "bucket_gaps": {
              "m1_y1": -150000,
              "on_1m": -150000,
              "y10_plus": 0,
              "y1_y3": 0,
              "y3_y5": 0,
              "y5_y10": 0
            },
            "name": "savings_volatile",
            "rate_sensitive_balance": 300000,
            "sums_to_one": true
          }
        ],
        "total_balance": 1500000,
        "total_net_repricing_gap": -500000,
        "total_rate_sensitive_balance": 500000,
        "weighted_avg_beta": 0.33
      }
    }
  }
}
