{
  "tool_id": "art-445-credit-concentration-topn-sector",
  "note": "golden_hash filled by golden-parity.test.mjs --update. Vector 1: 6-name/4-sector portfolio with declared top_n=3, hand-computed single-name + sector breaches. Vector 2: 10 equal-weight names each in their own sector, no breach (every share sits exactly at the default 10% limit, not over it). Vector 3: empty exposure list -- finite gate, all outputs resolve to 0/empty/null, never NaN.",
  "vectors": [
    {
      "name": "concentrated_portfolio_with_breaches",
      "description": "Portfolio total 6,000,000 across 6 names / 4 sectors. Hand-computed: name C (Energy, 41.67%) and sector Energy (50.00%) both breach the default 10%/25% limits, along with names A (20.00%) and B (13.33%) and sector Retail (33.33%). single_name_hhi=2527.78, sector_hhi=3755.56.",
      "policy_parameters": {
        "exposures": [
          {
            "name": "A",
            "sector": "Retail",
            "amount": 1200000
          },
          {
            "name": "B",
            "sector": "Retail",
            "amount": 800000
          },
          {
            "name": "C",
            "sector": "Energy",
            "amount": 2500000
          },
          {
            "name": "D",
            "sector": "Energy",
            "amount": 500000
          },
          {
            "name": "E",
            "sector": "Tech",
            "amount": 400000
          },
          {
            "name": "F",
            "sector": "Healthcare",
            "amount": 600000
          }
        ],
        "top_n": 3
      },
      "output_payload": {
        "portfolio_total": 6000000,
        "top_n": 3,
        "single_name_limit_pct": 10,
        "sector_limit_pct": 25,
        "top_n_exposures": [
          {
            "name": "C",
            "sector": "Energy",
            "amount": 2500000,
            "pct_of_portfolio": 41.67
          },
          {
            "name": "A",
            "sector": "Retail",
            "amount": 1200000,
            "pct_of_portfolio": 20
          },
          {
            "name": "B",
            "sector": "Retail",
            "amount": 800000,
            "pct_of_portfolio": 13.33
          }
        ],
        "sector_totals": [
          {
            "sector": "Energy",
            "amount": 3000000,
            "pct_of_portfolio": 50
          },
          {
            "sector": "Retail",
            "amount": 2000000,
            "pct_of_portfolio": 33.33
          },
          {
            "sector": "Healthcare",
            "amount": 600000,
            "pct_of_portfolio": 10
          },
          {
            "sector": "Tech",
            "amount": 400000,
            "pct_of_portfolio": 6.67
          }
        ],
        "single_name_hhi": 2527.78,
        "sector_hhi": 3755.56,
        "single_name_breaches": [
          {
            "name": "C",
            "pct_of_portfolio": 41.67
          },
          {
            "name": "A",
            "pct_of_portfolio": 20
          },
          {
            "name": "B",
            "pct_of_portfolio": 13.33
          }
        ],
        "sector_breaches": [
          {
            "sector": "Energy",
            "pct_of_portfolio": 50
          },
          {
            "sector": "Retail",
            "pct_of_portfolio": 33.33
          }
        ],
        "worst_single_name": "C",
        "worst_sector": "Energy"
      },
      "compliance_flags": [
        "CONC_CALCULATED",
        "CONC_SINGLE_NAME_LIMIT_BREACH",
        "CONC_SECTOR_LIMIT_BREACH"
      ],
      "golden_hash": "554aa8fca76994df5789ce6290d377ef94475311564231270e8adab7c9f37a5c"
    },
    {
      "name": "diversified_no_breach",
      "description": "10 names of $100,000 each, each its own sector, portfolio total 1,000,000. Every share sits exactly at the default 10% single-name limit (not strictly over it, so no breach) and every sector likewise sits at 10% against the 25% sector limit. top_n defaults to 5. single_name_hhi and sector_hhi both 1000.00 (perfectly even 10-way split).",
      "policy_parameters": {
        "exposures": [
          {
            "name": "S1",
            "sector": "Sec1",
            "amount": 100000
          },
          {
            "name": "S2",
            "sector": "Sec2",
            "amount": 100000
          },
          {
            "name": "S3",
            "sector": "Sec3",
            "amount": 100000
          },
          {
            "name": "S4",
            "sector": "Sec4",
            "amount": 100000
          },
          {
            "name": "S5",
            "sector": "Sec5",
            "amount": 100000
          },
          {
            "name": "S6",
            "sector": "Sec6",
            "amount": 100000
          },
          {
            "name": "S7",
            "sector": "Sec7",
            "amount": 100000
          },
          {
            "name": "S8",
            "sector": "Sec8",
            "amount": 100000
          },
          {
            "name": "S9",
            "sector": "Sec9",
            "amount": 100000
          },
          {
            "name": "S10",
            "sector": "Sec10",
            "amount": 100000
          }
        ]
      },
      "output_payload": {
        "portfolio_total": 1000000,
        "top_n": 5,
        "single_name_limit_pct": 10,
        "sector_limit_pct": 25,
        "top_n_exposures": [
          {
            "name": "S1",
            "sector": "Sec1",
            "amount": 100000,
            "pct_of_portfolio": 10
          },
          {
            "name": "S2",
            "sector": "Sec2",
            "amount": 100000,
            "pct_of_portfolio": 10
          },
          {
            "name": "S3",
            "sector": "Sec3",
            "amount": 100000,
            "pct_of_portfolio": 10
          },
          {
            "name": "S4",
            "sector": "Sec4",
            "amount": 100000,
            "pct_of_portfolio": 10
          },
          {
            "name": "S5",
            "sector": "Sec5",
            "amount": 100000,
            "pct_of_portfolio": 10
          }
        ],
        "sector_totals": [
          {
            "sector": "Sec1",
            "amount": 100000,
            "pct_of_portfolio": 10
          },
          {
            "sector": "Sec2",
            "amount": 100000,
            "pct_of_portfolio": 10
          },
          {
            "sector": "Sec3",
            "amount": 100000,
            "pct_of_portfolio": 10
          },
          {
            "sector": "Sec4",
            "amount": 100000,
            "pct_of_portfolio": 10
          },
          {
            "sector": "Sec5",
            "amount": 100000,
            "pct_of_portfolio": 10
          },
          {
            "sector": "Sec6",
            "amount": 100000,
            "pct_of_portfolio": 10
          },
          {
            "sector": "Sec7",
            "amount": 100000,
            "pct_of_portfolio": 10
          },
          {
            "sector": "Sec8",
            "amount": 100000,
            "pct_of_portfolio": 10
          },
          {
            "sector": "Sec9",
            "amount": 100000,
            "pct_of_portfolio": 10
          },
          {
            "sector": "Sec10",
            "amount": 100000,
            "pct_of_portfolio": 10
          }
        ],
        "single_name_hhi": 1000,
        "sector_hhi": 1000,
        "single_name_breaches": [],
        "sector_breaches": [],
        "worst_single_name": "S1",
        "worst_sector": "Sec1"
      },
      "compliance_flags": [
        "CONC_CALCULATED"
      ],
      "golden_hash": "cb1685ee81f25d63e1c2021657757a190fff85ed4fd563ef658489f631e833f1"
    },
    {
      "name": "empty_portfolio_edge",
      "description": "No exposures declared -- portfolio_total, HHI values, and all lists resolve to 0/empty/null rather than NaN (finite gate).",
      "policy_parameters": {
        "exposures": []
      },
      "output_payload": {
        "portfolio_total": 0,
        "top_n": 5,
        "single_name_limit_pct": 10,
        "sector_limit_pct": 25,
        "top_n_exposures": [],
        "sector_totals": [],
        "single_name_hhi": 0,
        "sector_hhi": 0,
        "single_name_breaches": [],
        "sector_breaches": [],
        "worst_single_name": null,
        "worst_sector": null
      },
      "compliance_flags": [
        "CONC_CALCULATED",
        "CONC_EMPTY_PORTFOLIO"
      ],
      "golden_hash": "59a5b82d9d03ef7e425910af98b135792b66d623b4b53d594ba19f27379f254e"
    }
  ]
}
