{
  "tool_id": "art-346-compute-experience-mod",
  "note": "golden_hash filled by golden-parity.test.mjs --update. Synthetic worked examples (hand-verified arithmetic) -- split point, expected losses, expected primary losses, weighting value, and ballast value are licensed NCCI/state table values supplied as inputs, never vendored. Vector 1: multi-claim debit mod. Vector 2: single small claim credit mod. Vector 3: zero-denominator edge (finite gate).",
  "vectors": [
    {
      "name": "debit_mod_multi_claim",
      "description": "3 claims (25000, 8000, 40000) split at a 15000 split point -> Ap=38000, Ae=35000. Expected losses 60000, expected primary 24000, W=0.25, B=12000. Mod = (38000 + 0.25*35000 + 0.75*36000 + 12000) / (24000+12000) = 85750/36000 = 2.38.",
      "policy_parameters": {
        "claims": [
          {
            "incurred_losses": 25000
          },
          {
            "incurred_losses": 8000
          },
          {
            "incurred_losses": 40000
          }
        ],
        "split_point": 15000,
        "expected_losses": 60000,
        "expected_primary_losses": 24000,
        "weighting_value": 0.25,
        "ballast_value": 12000
      },
      "output_payload": {
        "mod": 2.38,
        "rating_class": "debit",
        "actual_primary_losses": 38000,
        "actual_excess_losses": 35000,
        "actual_total_losses": 73000,
        "expected_losses": 60000,
        "expected_primary_losses": 24000,
        "expected_excess_losses": 36000,
        "split_point": 15000,
        "weighting_value": 0.25,
        "ballast_value": 12000,
        "claim_count": 3,
        "regulatory_basis": "NCCI Experience Rating Plan Manual (published national experience rating formula: Mod = (Ap + W×Ae + (1-W)×Ee + B) / (Ep + B))",
        "note": "Split point, expected losses, expected primary losses, weighting value, and ballast value are licensed NCCI/state rating-bureau table values supplied by the caller from their own NCCI experience rating worksheet -- this kernel never vendors or reproduces those tables, only the published per-claim split and mod formula."
      },
      "compliance_flags": [],
      "golden_hash": "5cdc7d9eeac3acbf4d025d25603ce6d1f0641defcf9db1552eaef207c8c2e12f"
    },
    {
      "name": "credit_mod_single_small_claim",
      "description": "1 claim (3000, below split point) -> Ap=3000, Ae=0. Expected losses 50000, expected primary 45000, W=0.30, B=10000. Mod = (3000 + 0 + 0.7*5000 + 10000) / (45000+10000) = 16500/55000 = 0.30.",
      "policy_parameters": {
        "claims": [
          {
            "incurred_losses": 3000
          }
        ],
        "split_point": 15000,
        "expected_losses": 50000,
        "expected_primary_losses": 45000,
        "weighting_value": 0.3,
        "ballast_value": 10000
      },
      "output_payload": {
        "mod": 0.3,
        "rating_class": "credit",
        "actual_primary_losses": 3000,
        "actual_excess_losses": 0,
        "actual_total_losses": 3000,
        "expected_losses": 50000,
        "expected_primary_losses": 45000,
        "expected_excess_losses": 5000,
        "split_point": 15000,
        "weighting_value": 0.3,
        "ballast_value": 10000,
        "claim_count": 1,
        "regulatory_basis": "NCCI Experience Rating Plan Manual (published national experience rating formula: Mod = (Ap + W×Ae + (1-W)×Ee + B) / (Ep + B))",
        "note": "Split point, expected losses, expected primary losses, weighting value, and ballast value are licensed NCCI/state rating-bureau table values supplied by the caller from their own NCCI experience rating worksheet -- this kernel never vendors or reproduces those tables, only the published per-claim split and mod formula."
      },
      "compliance_flags": [],
      "golden_hash": "b5c406a2c9c23c0711956020e0ad143fb6d657a71262ae6100ffc17d3c97bd6f"
    },
    {
      "name": "zero_denominator_edge",
      "description": "No expected primary losses and no ballast (denominator zero) -- finite gate must return mod 0 and flag EXPMOD_ZERO_DENOMINATOR instead of dividing by zero.",
      "policy_parameters": {
        "claims": [
          {
            "incurred_losses": 5000
          }
        ],
        "split_point": 15000,
        "expected_losses": 0,
        "expected_primary_losses": 0,
        "weighting_value": 0.25,
        "ballast_value": 0
      },
      "output_payload": {
        "mod": 0,
        "rating_class": "undetermined",
        "actual_primary_losses": 5000,
        "actual_excess_losses": 0,
        "actual_total_losses": 5000,
        "expected_losses": 0,
        "expected_primary_losses": 0,
        "expected_excess_losses": 0,
        "split_point": 15000,
        "weighting_value": 0.25,
        "ballast_value": 0,
        "claim_count": 1,
        "regulatory_basis": "NCCI Experience Rating Plan Manual (published national experience rating formula: Mod = (Ap + W×Ae + (1-W)×Ee + B) / (Ep + B))",
        "note": "Split point, expected losses, expected primary losses, weighting value, and ballast value are licensed NCCI/state rating-bureau table values supplied by the caller from their own NCCI experience rating worksheet -- this kernel never vendors or reproduces those tables, only the published per-claim split and mod formula."
      },
      "compliance_flags": [
        "EXPMOD_ZERO_DENOMINATOR"
      ],
      "golden_hash": "c0e97d5872e3a581479273fa60c0ff07eb3cfb55c36622003bf0c588fa90f275"
    }
  ]
}
