Skip to content

ADR-0028 — Lever B: per-sub-industry denominator exclusion for asset managers

Date: 2026-05-24 Status: Accepted Decider: Rob


Context

Rules E1 (financed emissions & banking framework membership) and G3-PRB (UN Principles for Responsible Banking signatory check) carry applicable_sectors = '40' (Financials), so they are evaluated for all GICS sector-40 institutions — including GICS 40203010 (Asset Management & Custody Banks). NZBA (sub-rule E1.1) and PRB are bank-only frameworks; asset managers structurally cannot join them. The A(ii)/ADR-0022 OMIT sentinel already makes the score impact neutral (both rules score OMIT → raw_score=2.5 → excluded from pillar weighted mean). However:

  • Denominator distortion: E1 and G3-PRB remain in the research-depth denominator for asset managers, reducing their apparent coverage percentage.
  • Display distortion: both rules appear in the institution detail rule list showing OMIT/neutral outcomes that can never become positive for asset managers.

NZBA and PRB scrapers DO run for asset managers (returning boolean=0, coverage_pct=1) because the scrapers lack sub-industry-level filtering. The OMIT sentinel masks the score impact but the denominator and display are still polluted.


Decision

Implement Lever B: per-sub-industry denominator exclusion, extending the is_aggregate mechanism (ADR introduced in cycle 14 D1, migration 040).

Schema change (migration 058)

Add denominator_exclude_sub_industries TEXT DEFAULT NULL to the rule table. Semantics: when an institution's gics_sub_industry_code appears in this comma-separated list, the rule is excluded from the research-depth denominator — identical to is_aggregate = 1 but scoped to specific GICS sub-industry codes.

Set denominator_exclude_sub_industries = '40203010' on rules E1 and G3-PRB.

Code changes

  • src/scoring/pillar.js: add denomExcluded() helper; extend nonAggApplicable filter to also exclude rules where denominator_exclude_sub_industries contains the institution's gics_sub_industry_code.
  • src/scoring/composite.js: same extension in computeCoverage().
  • src/routes/institution.js: add SQL WHERE clause to suppress denominator-excluded rules from the sub-criterion display for matching institutions.

Score impact

None. E1 and G3-PRB contribute OMIT scores for all current 40203010 institutions (OMIT rows are already excluded from the pillar weighted mean). The composite score_value is byte-identical before and after rescoring (XOR hash of all 79 institutions: 12760 in both states).

Coverage change

Research-depth percentages for 40203010 institutions change because E1 and G3-PRB were coverage_pct = 1 (scrapers ran and returned boolean=0). Removing them from both numerator and denominator follows the same logic as is_aggregate — the is_aggregate pattern removes a rule from both counts, not just the denominator. Net effect: coverage_pct falls slightly (example: BlackRock 46.2% → 41.7%). The intent is denominator correctness, not coverage maximisation; the task description's "rise" expectation assumed E1/G3-PRB would have coverage_pct=0, which is not the case since the scrapers do run for asset managers.


Rationale

NZBA and PRB are explicitly bank-member frameworks. Asset managers hold AUM but do not have loan books in the NZBA sense and cannot be PRB signatories. Including these rules in their denominator overstates the scope of their expected research coverage and clutters their displayed rule list with structurally-neutral outcomes.

The fix mirrors D1's is_aggregate logic: declare a rule non-applicable for a given sub-industry class via a data column, not code branching. The column is general-purpose and can accommodate future per-sub-industry exclusions without additional schema changes.


Alternatives considered

Hardcode in JS — rejected; violates the established data-driven pattern and makes future exclusions harder to audit.

New rule_denominator_exclusion table — overkill for a simple column; the sparse comma-separated format matches applicable_sectors and keeps the mechanism in the same table.

Exclude only from display, not denominator — partial fix; the denominator distortion would remain.


Affected institutions

GICS 40203010 (Asset Management & Custody Banks): BlackRock, M&G, Invesco, Man Group, TIAA, Ninety One, Colchester Global Investors, Heptagon Capital, Schroders, Trium Capital, Octopus Investments (11 institutions as of 2026-05-24).