{
  "tool_id": "art-369-run-rate-shock-ladder",
  "note": "golden_hash filled by golden-parity.test.mjs --update. Vector 1: full parallel ladder + both declared non-parallel presets, hand-computed. Vector 2: parallel ladder only (no presets), liability-sensitive gap (negative sum), hand-computed. Vector 3: zero-gap degenerate edge (finite gate) -- every scenario resolves to 0, not NaN.",
  "vectors": [
    {
      "name": "asset_sensitive_full_ladder_with_presets",
      "description": "Asset-sensitive repricing gap (net positive sum(gap*midpoint) = 2,504,000) with a 300k 12-month NII gap and both a steepener (-50/+100bp) and flattener (+100/-50bp) preset declared. Hand-computed: worst scenario is parallel_up_400bp at delta_eve -100160.",
      "policy_parameters": {
        "repricing_gaps": {
          "on_1m": 100000,
          "m1_y1": 250000,
          "y1_y3": -150000,
          "y3_y5": 200000,
          "y5_y10": -50000,
          "y10_plus": 150000
        },
        "nii_12m_gap": 300000,
        "shock_presets": [
          {
            "name": "steepener",
            "short_bps": -50,
            "long_bps": 100
          },
          {
            "name": "flattener",
            "short_bps": 100,
            "long_bps": -50
          }
        ]
      },
      "output_payload": {
        "ladder": {
          "parallel_up_100bp": {
            "shock_bps": 100,
            "delta_eve": -25040,
            "delta_nii": 3000
          },
          "parallel_down_100bp": {
            "shock_bps": -100,
            "delta_eve": 25040,
            "delta_nii": -3000
          },
          "parallel_up_200bp": {
            "shock_bps": 200,
            "delta_eve": -50080,
            "delta_nii": 6000
          },
          "parallel_down_200bp": {
            "shock_bps": -200,
            "delta_eve": 50080,
            "delta_nii": -6000
          },
          "parallel_up_300bp": {
            "shock_bps": 300,
            "delta_eve": -75120,
            "delta_nii": 9000
          },
          "parallel_down_300bp": {
            "shock_bps": -300,
            "delta_eve": 75120,
            "delta_nii": -9000
          },
          "parallel_up_400bp": {
            "shock_bps": 400,
            "delta_eve": -100160,
            "delta_nii": 12000
          },
          "parallel_down_400bp": {
            "shock_bps": -400,
            "delta_eve": 100160,
            "delta_nii": -12000
          }
        },
        "preset_shocks": {
          "steepener": {
            "short_bps": -50,
            "long_bps": 100,
            "delta_eve": -27605,
            "delta_nii": null
          },
          "flattener": {
            "short_bps": 100,
            "long_bps": -50,
            "delta_eve": 15085,
            "delta_nii": null
          }
        },
        "worst_scenario": "parallel_up_400bp",
        "worst_delta_eve": -100160,
        "total_net_gap": 500000,
        "nii_12m_gap": 300000,
        "buckets_used": [
          "on_1m",
          "m1_y1",
          "y1_y3",
          "y3_y5",
          "y5_y10",
          "y10_plus"
        ],
        "magnitudes_bps": [
          100,
          200,
          300,
          400
        ],
        "convention": "US OCC/FDIC parallel rate-shock ladder"
      },
      "compliance_flags": [
        "RSL_LADDER_CALCULATED",
        "RSL_WORST_SCENARIO_IS_DECLINE",
        "RSL_NONPARALLEL_PRESETS_DECLARED"
      ],
      "golden_hash": "d3028584b6ed5727710bc0249d4a92c26b8fd3521e00ca574530ac8ae7599b26"
    },
    {
      "name": "liability_sensitive_ladder_no_presets",
      "description": "Liability-sensitive gap (net negative sum(gap*midpoint) = -1,652,000) with a negative 12-month NII gap, no non-parallel presets declared. Hand-computed: worst scenario flips to parallel_down_400bp at delta_eve -66080.",
      "policy_parameters": {
        "repricing_gaps": {
          "on_1m": -50000,
          "m1_y1": 100000,
          "y1_y3": 300000,
          "y3_y5": -200000,
          "y5_y10": 100000,
          "y10_plus": -150000
        },
        "nii_12m_gap": -80000,
        "shock_presets": []
      },
      "output_payload": {
        "ladder": {
          "parallel_up_100bp": {
            "shock_bps": 100,
            "delta_eve": 16520,
            "delta_nii": -800
          },
          "parallel_down_100bp": {
            "shock_bps": -100,
            "delta_eve": -16520,
            "delta_nii": 800
          },
          "parallel_up_200bp": {
            "shock_bps": 200,
            "delta_eve": 33040,
            "delta_nii": -1600
          },
          "parallel_down_200bp": {
            "shock_bps": -200,
            "delta_eve": -33040,
            "delta_nii": 1600
          },
          "parallel_up_300bp": {
            "shock_bps": 300,
            "delta_eve": 49560,
            "delta_nii": -2400
          },
          "parallel_down_300bp": {
            "shock_bps": -300,
            "delta_eve": -49560,
            "delta_nii": 2400
          },
          "parallel_up_400bp": {
            "shock_bps": 400,
            "delta_eve": 66080,
            "delta_nii": -3200
          },
          "parallel_down_400bp": {
            "shock_bps": -400,
            "delta_eve": -66080,
            "delta_nii": 3200
          }
        },
        "preset_shocks": {},
        "worst_scenario": "parallel_down_400bp",
        "worst_delta_eve": -66080,
        "total_net_gap": 100000,
        "nii_12m_gap": -80000,
        "buckets_used": [
          "on_1m",
          "m1_y1",
          "y1_y3",
          "y3_y5",
          "y5_y10",
          "y10_plus"
        ],
        "magnitudes_bps": [
          100,
          200,
          300,
          400
        ],
        "convention": "US OCC/FDIC parallel rate-shock ladder"
      },
      "compliance_flags": [
        "RSL_LADDER_CALCULATED",
        "RSL_WORST_SCENARIO_IS_DECLINE"
      ],
      "golden_hash": "5786cafd71b19113434597e6515486d9453f820c6021ae091f67e3083d843a82"
    },
    {
      "name": "zero_gap_edge",
      "description": "All repricing buckets and the NII gap are zero -- every ladder scenario resolves to 0, not NaN (finite gate). Ties on delta_eve keep the first-declared scenario key as worst_scenario.",
      "policy_parameters": {
        "repricing_gaps": {
          "on_1m": 0,
          "m1_y1": 0,
          "y1_y3": 0,
          "y3_y5": 0,
          "y5_y10": 0,
          "y10_plus": 0
        },
        "nii_12m_gap": 0,
        "shock_presets": []
      },
      "output_payload": {
        "ladder": {
          "parallel_up_100bp": {
            "shock_bps": 100,
            "delta_eve": 0,
            "delta_nii": 0
          },
          "parallel_down_100bp": {
            "shock_bps": -100,
            "delta_eve": 0,
            "delta_nii": 0
          },
          "parallel_up_200bp": {
            "shock_bps": 200,
            "delta_eve": 0,
            "delta_nii": 0
          },
          "parallel_down_200bp": {
            "shock_bps": -200,
            "delta_eve": 0,
            "delta_nii": 0
          },
          "parallel_up_300bp": {
            "shock_bps": 300,
            "delta_eve": 0,
            "delta_nii": 0
          },
          "parallel_down_300bp": {
            "shock_bps": -300,
            "delta_eve": 0,
            "delta_nii": 0
          },
          "parallel_up_400bp": {
            "shock_bps": 400,
            "delta_eve": 0,
            "delta_nii": 0
          },
          "parallel_down_400bp": {
            "shock_bps": -400,
            "delta_eve": 0,
            "delta_nii": 0
          }
        },
        "preset_shocks": {},
        "worst_scenario": "parallel_up_100bp",
        "worst_delta_eve": 0,
        "total_net_gap": 0,
        "nii_12m_gap": 0,
        "buckets_used": [
          "on_1m",
          "m1_y1",
          "y1_y3",
          "y3_y5",
          "y5_y10",
          "y10_plus"
        ],
        "magnitudes_bps": [
          100,
          200,
          300,
          400
        ],
        "convention": "US OCC/FDIC parallel rate-shock ladder"
      },
      "compliance_flags": [
        "RSL_LADDER_CALCULATED"
      ],
      "golden_hash": "dd0046feadaa88f6f387dd11a4d4e210b3472bcc0ccfbdeba1168918f49d3d85"
    }
  ]
}
