Investment restriction
Look-through exposure limit (fund holdings)
A look-through exposure limit measures a group’s weight after expanding each fund into its underlying holdings, so equities inside a balanced fund count as equities. Acclimetry expands the named fund classes through their recorded compositions, up to five levels deep. It adds direct and indirect weight in the group and tests the total against the band.
look_through_exposureLook-through exposure
How policies word it
Policies rarely say ‘look-through’, but some imply it: ‘total equity exposure, including through pooled funds, no more than 70%’. A country or sector cap may also be meant to reach fund holdings. Others defer pooled funds to the funds’ own documents, as some policies in our sample do.
Regulated funds face the question from the other side, through limits on holding other funds. UK UCITS schemes may hold 20% in one scheme and 30% in non-UCITS schemes (investment in other funds). A policy should say whether each limit applies to direct holdings only or through funds.
- Total equity exposure, including equities held through pooled funds, will not exceed 70% of the portfolio.
- Limits apply on a look-through basis where fund holdings data is available.
- Exposure to any single country, directly or through funds, will not exceed 20%.
- Pooled funds are assessed against their own documents; no look-through is applied.
How it is measured
The rule names a dimension, the group it measures, the fund classes to expand and a maximum depth from 1 to 5. Each fund’s newest usable composition splits its value across its entries. Entries in the measured group join the direct holdings at fund value times entry weight.
A 500 fund that is 60% stocks adds 300 to 500 of direct stocks: 80% of a 1,000 book. The result lists direct and fund-level contributors, so it shows which fund drove the weight.
A composition older than the staleness limit is not used, and a fund with no composition is left unexpanded. Either way the fund is disclosed and the group weight is not settled; a fund caught in a cycle is treated the same. A gap never reads as compliant; see fund look-through.
When it is breached and what follows
Look-through breaches often come from a fund manager’s decisions, not yours: a balanced fund raising its equity sleeve moves your exposure. Compositions arrive monthly or quarterly, so the result can change when a new one lands rather than when markets move.
A breach opens a case at the first observation. A warning bound gives notice, and a grace period in days delays the case’s clocks where the policy allows time to switch funds. A time-bound waiver can cover an agreed transition without changing the result.
Data the check reads
- Market value of every position, including fund holdings
- The fund class names to expand
- A dated composition for each fund: entries with weights and classification, and its coverage
- The dimension and the group to measure
- A maximum depth (1 to 5) and, if wanted, a staleness limit in days for compositions
Rule parameters
Weight of the configured group with fund positions expanded through their underlying compositions.
| Parameter | In the platform | Options and help |
|---|---|---|
| dimension | Dimension | |
| group | Group measured | |
| fundClassNames | Fund class names to expand | |
| maxDepth | Max recursion depth (1-5) | |
| compositionStaleAfterDays | Composition stale after (days) |
Parameter names, methodology text and result-code meanings are shown exactly as the platform states them.
Worked examples, run by the engine
A 500 fund that is 60% stocks adds 300 to 500 direct stocks: 800 of the 1,000 book, over a 70% cap
Rule template:look_through_exposure dimension: classgroup: StocksfundClassNames: FundsmaxDepth: 3
Bounds: hard max 70%
| Holding | Class | Market value |
|---|---|---|
| EQ | Stocks | 500 |
| FUND | Funds | 500 |
| Fund | Underlying sleeves | As of |
|---|---|---|
| FUND | Equity sleeve: 60% (Stocks); Bond sleeve: 40% (Bonds) | 1 June 2026 |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Stocks | Breach | 80% | ≤ 70% | -10% | ABOVE_HARD_MAXIMUM |
ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.
Largest contributors: Stocks → EQ 50%, Equity sleeve (via FUND) 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.
A 600 fund that is half stocks adds 300 to 400 direct stocks: 700 of the 1,000 book, inside a 75% cap
Rule template:look_through_exposure dimension: classgroup: StocksfundClassNames: FundsmaxDepth: 3
Bounds: hard max 75%
| Holding | Class | Market value |
|---|---|---|
| EQ | Stocks | 400 |
| FUND | Funds | 600 |
| Fund | Underlying sleeves | As of |
|---|---|---|
| FUND | Equity sleeve: 50% (Stocks); Bond sleeve: 50% (Bonds) | 1 June 2026 |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Stocks | Compliant | 70% | ≤ 75% | 5% | WITHIN_LIMITS |
WITHIN_LIMITS: The measured value sits inside every approved bound.
Largest contributors: Stocks → EQ 40%, Equity sleeve (via FUND) 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.
A fund with no supplied composition cannot be expanded, so the group weight is not settled
Rule template:look_through_exposure dimension: classgroup: StocksfundClassNames: FundsmaxDepth: 3
Bounds: hard max 70%
| Holding | Class | Market value |
|---|---|---|
| EQ | Stocks | 500 |
| FUND | Funds | 500 |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Stocks | Not evaluated: data quality | – | ≤ 70% | – | 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.
A 500,000 balanced fund that is 55% stocks adds 275,000 to 450,000 of direct stocks: 72.5%, past the 70% warning bound and inside the 75% cap.
Rule template:look_through_exposure dimension: classgroup: StocksfundClassNames: FundsmaxDepth: 3
Bounds: warn max 70% · hard max 75%
| Holding | Class | Market value |
|---|---|---|
| Direct UK and global stocks | Stocks | 450,000 |
| Balanced fund | Funds | 500,000 |
| Sterling cash | Cash | 50,000 |
| Fund | Underlying sleeves | As of |
|---|---|---|
| BAL | Equity sleeve: 55% (Stocks); Bond sleeve: 45% (Bonds) | 1 June 2026 |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Stocks | Warning | 72.5% | ≤ 75% warning ≤ 70% | 2.5% -2.5% to warning | ABOVE_WARNING_MAXIMUM |
ABOVE_WARNING_MAXIMUM: The measured value has crossed the early-warning maximum but not the hard limit.
Largest contributors: Stocks → Direct UK and global stocks 45%, Equity sleeve (via Balanced fund) 27.5%
Computed at build time by the Acclimetry rule engine (backend commit 8197063); the same code runs in the product.
Interpretation traps
Stale compositions
A fund’s holdings report can be months old. Set a staleness limit that matches how often compositions arrive. An older one is not used and the rule is not settled, which is the safe reading.
Partial coverage
A composition covering 90% of a fund leaves 10% unknown. The unknown residual blocks a compliant result instead of being spread pro rata.
Classification must match
Composition entries must use the same classification as the group. A fund reporting ‘Equity’ against a group called ‘Stocks’ adds nothing to it.
Other limits stay direct
Templates without a look-through setting measure direct holdings. An issuer cap does not see a company held inside a fund; the cash band has its own look-through option.
Result codes this check can return
| Code | State | Meaning | What to do |
|---|---|---|---|
| WITHIN_LIMITS ✓ | Compliant | The measured value sits inside every approved bound. | – |
| ABOVE_WARNING_MAXIMUM | Warning | The measured value has crossed the early-warning maximum but not the hard limit. | No breach yet; the early-warning band exists so the position can be managed before one. |
| BELOW_WARNING_MINIMUM | Warning | The measured value has crossed the early-warning minimum but not the hard limit. | No breach yet; the early-warning band exists so the position can be managed before one. |
| 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. |
| BELOW_HARD_MINIMUM | Breach | The measured value falls below the approved hard minimum, beyond any stated tolerance. | Remediate the exposure, or record an approved waiver against the case. |
| CONSERVATIVE_MISSING_DATA | Breach | Data was missing and this rule version's approved unknown-data policy is conservative_breach, so the gap is treated as a breach rather than as Not Evaluated. | Supply the missing values; the reading is deliberately pessimistic until you do. |
| EMPTY_PORTFOLIO | Not applicable | The portfolio held no positions at the evaluation moment. | – |
| 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.
Regulatory analogues
- UCITS investment in other funds: 20% in one scheme and 30% non-UCITS (COLL 5.2.11R, 5.2.13R; Art 55)
- NURS spread limits: 35% in any one scheme (COLL 5.6.7R)
Acclimetry evaluates one group’s weight with the named fund classes expanded through their recorded compositions, up to five levels deep. It discloses the funds it could not expand and never reads them as compliant. It does not estimate holdings from a fund’s name or benchmark, or spread unknown residuals pro rata.
Questions
What if a fund publishes holdings only quarterly?
Set the staleness limit to allow for it. A composition older than the limit is not used, the fund is disclosed as unexpanded and the rule is not settled.
Can funds of funds be expanded?
Yes, up to the maximum depth set on the rule, from one to five levels. A cycle, where funds hold each other, is not expanded and is disclosed.
Sources
- FCA Handbook, COLL 5.2 (UK UCITS schemes), read 12 October 2026; pending FCA API snapshot · © FCA, OGL v3.0 · Read on12 October 2026
- FCA Handbook, COLL 5.6 (non-UCITS retail schemes), read 12 October 2026; pending FCA API snapshot · © FCA, OGL v3.0 · Read on12 October 2026
- Directive 2009/65/EC (UCITS), consolidated text of 16 April 2026, Arts 52 and 55 (EUR-Lex, source of record) · CC BY 4.0 · Read on12 October 2026