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.
related_portfolio_concentrationRelated-portfolio concentration
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
- The set of portfolios the rule covers, with an accepted snapshot for each
- Market values for every holding in every member portfolio
- Consistent instrument, issuer, issuer-group or counterparty keys across portfolios
- The aggregation dimension and the hard maximum
Rule parameters
Maximum weight of any instrument, issuer group or counterparty group measured across the whole set of related portfolios.
| Parameter | In the platform | Options and help |
|---|---|---|
| dimension | Aggregation dimension |
Bounds the rule must set: hardMax
Methodology choices
- The denominator is the COMBINED value of every portfolio in scope, not each portfolio's own NAV.
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%
| Portfolio | Holding | Issuer | Market value |
|---|---|---|---|
| Account A | A1 | ISS-1 | 200 |
| Account A | A2 | ISS-2 | 300 |
| Account B | B1 | ISS-1 | 100 |
| Account B | B2 | ISS-2 | 400 |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| 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%
| Portfolio | Holding | Issuer | Market value |
|---|---|---|---|
| Account A | A1 | ISS-1 | 100 |
| Account A | A2 | ISS-2 | 400 |
| Account B | B1 | ISS-1 | 100 |
| Account B | B2 | ISS-2 | 400 |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| 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%
| Portfolio | Holding | Issuer | Market value |
|---|---|---|---|
| Account A | A1 | ISS-1 | 200 |
| Account A | A2 | ISS-2 | 300 |
| Account B | B1 | ISS-1 | 100 |
| Account B | B2 | ISS-2 | – |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| 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
| Code | State | Meaning | What to do |
|---|---|---|---|
| WITHIN_LIMITS ✓ | Compliant | The measured value sits inside every approved bound. | – |
| ABOVE_HARD_MAXIMUM ✓ | Breach | The measured value exceeds the approved hard maximum, beyond any stated tolerance. | Remediate the exposure, or record an approved waiver against the case. |
| NOT_IN_SCOPE | Not applicable | This 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_ACCEPTED | Not evaluated: data quality | A 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 quality | One 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_ACCEPTED | Not evaluated: data quality | The 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_REJECTED | Not evaluated: data quality | The portfolio's newest snapshot was rejected, so there is no authoritative data to measure. | Load a corrected file. |
| STALE_POSITIONS | Not evaluated: data quality | The newest snapshot is older than the organisation's staleness threshold. | Load current positions, or revisit the threshold on Data & Quality ▸ Policy. |
| STALE_PRICES | Not evaluated: data quality | A 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_DATA | Pending external data | An 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_SUPPORTED | Not evaluated: unsupported | The 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_ERROR | Not evaluated: system error | The 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.
Acclimetry evaluates the combined weight of each instrument, issuer or counterparty group across a defined set of portfolios, over the set's combined value. It needs an accepted snapshot and a value for every holding in every member. It does not decide which entities belong to the household, and this template does not look through funds.
The free Limit Checker runs this same template in your browser against a CSV of holdings. Nothing is uploaded.
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.