Investment restriction

Household and related-portfolio concentration

A related-portfolio concentration limit caps exposure to one issuer, instrument or counterparty across a set of portfolios, such as a family's accounts. A typical clause reads ‘across all family entities, no more than 10% in one company’. Acclimetry adds the holdings across the set and divides by the set's combined value, not by each portfolio's own value.

Rule template
related_portfolio_concentration
Related-portfolio concentration
Measured in
% of portfolio value
Worked examples, run by the engine
3

How policies word it

Family wealth is usually spread across trusts, holding companies, foundations and personal accounts, often with different managers. Each account can be inside its own limit while the family as a whole is concentrated. The concentration often sits in the family business or a few large positions.

  • Issuer: across all family entities, no more than 10% in one company.
  • Legacy holding: combined exposure to the family's operating company may not exceed 30% of investable assets.
  • Counterparty: no more than 20% of family assets with any one banking group.

The clause must say which entities belong to the set. That choice is an author decision, recorded with the rule.

  • Across all family entities, no more than 10% of combined assets in any one company.
  • Combined exposure to the family's operating business, across all trusts and companies, may not exceed 30% of investable assets.
  • No more than 20% of the family's combined assets may be held with any one banking group.
  • Holdings of any single listed issuer across the family's discretionary mandates are limited to 5%.

How it is measured

The rule measures a defined set of portfolios as one book. For each instrument, issuer, issuer group or counterparty group, holdings are added across every member.

The denominator is the combined value of every portfolio in scope, not each portfolio's own NAV. An issuer held at 200 in one 500 account and 100 in another is 30% of the combined 1,000.

Each group gets its own result, with its combined weight, headroom and the holdings from each portfolio that contribute most. The Analysis view shows the same roll-up by dimension for an entity or household.

When it is breached and what follows

A combined weight above the hard maximum is a breach for the set. Breaches can be passive: a concentrated holding rises, or distributions shrink the other portfolios.

The whole set must be measurable. One unvalued holding in any member, or a member whose latest snapshot is not accepted, means no aggregate is stated.

Breaches join a case with assignment, escalation and service-level clocks. A planned sell-down of a legacy holding can be covered by a time-bound waiver, approved within delegated authority.

Data the check reads

Rule parameters

Maximum weight of any instrument, issuer group or counterparty group measured across the whole set of related portfolios.

ParameterIn the platformOptions and help
dimensionAggregation dimension

Bounds the rule must set: hardMax

Methodology choices

Parameter names, methodology text and result-code meanings are shown exactly as the platform states them.

Worked examples, run by the engine

An issuer held as 200 in one 500 account and 100 in another is 300 of the combined 1,000, or 30%, over a 25% cap

Rule template: related_portfolio_concentration

dimension: issuer
Bounds: hard max 25%

Holdings
PortfolioHoldingIssuerMarket value
Account AA1ISS-1200
Account AA2ISS-2300
Account BB1ISS-1100
Account BB2ISS-2400
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
ISS-1 Breach 30% ≤ 25% -5% ABOVE_HARD_MAXIMUM
ISS-2 Breach 70% ≤ 25% -45% ABOVE_HARD_MAXIMUM
  • ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.

Largest contributors: ISS-1 → A1 20%, B1 10% · ISS-2 → B2 40%, A2 30%

These are the product's own test cases for this template, evaluated by the Acclimetry rule engine (backend commit 8197063). The build fails if any result changes.

The same issuer at 100 in each of two 500 accounts is 20% of the combined set, inside a 25% cap

Rule template: related_portfolio_concentration

dimension: issuer
Bounds: hard max 25%

Holdings
PortfolioHoldingIssuerMarket value
Account AA1ISS-1100
Account AA2ISS-2400
Account BB1ISS-1100
Account BB2ISS-2400
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
ISS-1 Compliant 20% ≤ 25% 5% WITHIN_LIMITS
ISS-2 Breach 80% ≤ 25% -55% ABOVE_HARD_MAXIMUM
  • WITHIN_LIMITS: The measured value sits inside every approved bound.
  • ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.

Largest contributors: ISS-1 → A1 10%, B1 10% · ISS-2 → A2 40%, B2 40%

These are the product's own test cases for this template, evaluated by the Acclimetry rule engine (backend commit 8197063). The build fails if any result changes.

One unvalued holding in any member makes the whole set unmeasurable — a group limit read off part of the set is not a compliance statement

Rule template: related_portfolio_concentration

dimension: issuer
Bounds: hard max 25%

Holdings
PortfolioHoldingIssuerMarket value
Account AA1ISS-1200
Account AA2ISS-2300
Account BB1ISS-1100
Account BB2ISS-2–
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
2 portfolio(s) Not evaluated: data quality – ≤ 25% – MISSING_POSITION_DATA
  • MISSING_POSITION_DATA: One or more positions had no readable value, and the partial numbers do not prove the outcome either way.

These are the product's own test cases for this template, evaluated by the Acclimetry rule engine (backend commit 8197063). The build fails if any result changes.

Interpretation traps

The combined denominator changes the answer

A holding can breach in one account and pass for the family, or the reverse. Policies that set both limits need two rules: one per portfolio and one for the set.

One gap blocks the set

A single unvalued holding, or one member without an accepted snapshot, stops the aggregate. A partial set produces no compliance statement.

Keys must match across custodians

Holdings aggregate by the keys the data carries. The same company recorded under different keys at two custodians is not added together, and issuer groups need parent data.

Who is in the set

A set whose membership criteria match nothing measures nothing and is not applicable. Review membership when entities are added or wound up.

Result codes this check can return

CodeStateMeaningWhat to do
WITHIN_LIMITS ✓CompliantThe measured value sits inside every approved bound.–
ABOVE_HARD_MAXIMUM ✓BreachThe measured value exceeds the approved hard maximum, beyond any stated tolerance.Remediate the exposure, or record an approved waiver against the case.
NOT_IN_SCOPENot applicableThis rule version does not apply to this portfolio — the portfolio is outside the version's stated scope. Recorded so that "considered and out of scope" can be told from "never run".–
AGGREGATE_MEMBER_NOT_ACCEPTEDNot evaluated: data qualityA portfolio in the measured set has no authoritative snapshot, so the set-level number cannot be stated.Accept the named portfolios' snapshots. A partial set produces no aggregate.
MISSING_POSITION_DATA ✓Not evaluated: data qualityOne or more positions had no readable value, and the partial numbers do not prove the outcome either way.Supply the missing valuations. The platform will not fabricate a zero to produce a reading.
SNAPSHOT_NOT_ACCEPTEDNot evaluated: data qualityThe portfolio's newest snapshot awaits data-quality review; only accepted data may produce an authoritative result.Accept, override or reject the snapshot on Data & Quality.
SNAPSHOT_REJECTEDNot evaluated: data qualityThe portfolio's newest snapshot was rejected, so there is no authoritative data to measure.Load a corrected file.
STALE_POSITIONSNot evaluated: data qualityThe newest snapshot is older than the organisation's staleness threshold.Load current positions, or revisit the threshold on Data & Quality ▸ Policy.
STALE_PRICESNot evaluated: data qualityA holding had no price on the position file and its approved price was older than the organisation's price-staleness threshold, so it was left unvalued.Load a current price for the holding, price it on the position file, or revisit the threshold on Data & Quality ▸ Policy.
AWAITING_EXTERNAL_DATAPending external dataAn approved input is late but still inside the organisation's grace window. This is not a pass and not an exception.None yet. If the delivery does not arrive, this becomes a data-quality exception.
METHOD_NOT_SUPPORTEDNot evaluated: unsupportedThe rule version asks for a measurement method this engine does not implement. Declared rather than approximated.Choose a supported methodology, or treat this limit as a manual obligation until the method ships.
EVALUATOR_ERRORNot evaluated: system errorThe evaluator raised an error. Surfaced as a visible result rather than as silence.Report it. A system error is never a pass and never a compliant reading.

✓ seen in the worked examples. The rest come from the platform registry’s own scan of the template source.

Try it on your own holdings

The free Limit Checker runs this same template in your browser against a CSV of holdings. Nothing is uploaded.

Open the Limit Checker

Questions

Why does the family-level weight differ from each account's weight?

Because the denominator is the combined value of the set. A large holding in a small account can be a modest share of the family's total. A position spread across many accounts can add up to a large one.

What happens if one custodian's data is late?

No aggregate is stated. Inside the organisation's grace window the result is pending external data; after it, the gap becomes a data-quality exception.

Can the rule look through funds held in the accounts?

Not this template; it measures direct holdings. Fund look-through is the separate look-through exposure limit, applied portfolio by portfolio.

Updated: 12 October 2026Acclimetry · Foreranger Ltd