Investment restriction

Permitted and prohibited investments

Permitted and prohibited investments define what a portfolio may hold: a permitted list names the allowed universe, a prohibited list names what is excluded. Acclimetry tests either form: in prohibited mode any listed holding is a breach, and in permitted mode any holding outside the list is. The result names the offending holdings and their weight.

Rule template
instrument_list
Permitted / prohibited list
Measured in
% of portfolio value
Worked examples, run by the engine
3

How policies word it

Most written policies carry a section headed ‘Permissible investments’, ‘Eligible instruments’ or ‘Kinds of investments to be held’. Many add an ‘expressly prohibited’ list, such as margin purchases, unregistered stock or direct derivatives.

Trustees of UK occupational pension schemes must invest predominantly in assets admitted to trading on regulated markets. They may use derivatives only to reduce risk or for efficient portfolio management.

The two forms fail differently. A permitted list fails closed: anything new is outside it until added. A prohibited list fails open: anything not named is allowed.

  • Permissible investments: listed equities, investment-grade bonds, regulated collective investment schemes and cash deposits.
  • The following are expressly prohibited: commodities, unlisted securities and structured products.
  • No direct investment in cryptocurrencies.
  • The manager may not invest in securities denominated in currencies other than sterling, US dollars or euros.
  • No holdings in issuers domiciled in the countries listed in Schedule 2.

How it is measured

A holding can be listed by instrument id, issuer id, class name or identifier (ISIN, CUSIP, SEDOL or FIGI). It can also be listed by listing country, currency, counterparty, issuer domicile or a governed field value written CODE=value, such as SECTOR=Tobacco. Country matching is case-insensitive.

Prohibited mode breaches on any listed holding; permitted mode breaches on any holding outside the allowed universe. The result names the offending positions and reports their combined weight of portfolio value. A portfolio with no offending holding is compliant at zero.

When it is breached and what follows

A prohibited holding is usually an active breach: someone bought it. It can also arise passively, when a list update, a reclassification or a corporate action brings an existing holding within the list. The result is the same either way, and the case opens at once.

What follows is set by the policy: divest, or record a time-bound waiver naming the holding. Before a purchase, Trade Impact can check the proposed order against the list.

Data the check reads

Rule parameters

Prohibited mode breaches on any listed holding; permitted mode breaches on any holding outside the allowed universe. A holding is listed by instrument, issuer, class, identifier, listing country, currency, counterparty, issuer domicile or a governed field value (CODE=value).

ParameterIn the platformOptions and help
modeModeprohibited (Prohibited — breach on any listed holding) · permitted (Permitted — breach on any holding outside the list)
assetKeysAsset ids
issuerKeysIssuer ids
classNamesClass names
identifiersInstrument identifiers (ISIN, CUSIP, SEDOL, FIGI)
countriesCountries
currenciesCurrencies
counterpartyKeysCounterparty ids (or group keys)
issuerCountriesIssuer countries (domicile)
fieldMatchesGoverned field values (CODE=value)

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

Worked examples, run by the engine

A book holding nothing on the prohibited list is compliant at zero offending weight

Rule template: instrument_list

mode: prohibited
assetKeys: BANNED

Holdings
HoldingMarket value
A600
B400
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Prohibited holdings Compliant 0% – – NO_PROHIBITED_HOLDINGS
  • NO_PROHIBITED_HOLDINGS: Returned by the engine; the registry’s reason-code dictionary has no entry for it.

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 prohibited country matches case-insensitively, and the 300 listed holding of a 1,000 book breaches at 30% offending weight

Rule template: instrument_list

mode: prohibited
countries: ru

Holdings
HoldingCountryMarket value
RU1RU300
GB1GB700
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Prohibited holdings Breach 30% – – PROHIBITED_HOLDING_PRESENT
  • PROHIBITED_HOLDING_PRESENT: Returned by the engine; the registry’s reason-code dictionary has no entry for it.

Largest contributors: Prohibited holdings → RU1 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.

In permitted mode a 250 holding outside the allowed classes breaches at 25% of the 1,000 book

Rule template: instrument_list

mode: permitted
classNames: Stocks

Holdings
HoldingClassMarket value
EQStocks750
BTCCrypto250
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Eligibility Breach 25% – – HOLDING_OUTSIDE_PERMITTED_UNIVERSE
  • HOLDING_OUTSIDE_PERMITTED_UNIVERSE: Returned by the engine; the registry’s reason-code dictionary has no entry for it.

Largest contributors: Eligibility → BTC 25%

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.

In permitted mode, a structured note worth 3% of the portfolio sits outside the allowed classes, so the rule breaches and names it.

Rule template: instrument_list

mode: permitted
classNames: Listed equities, Government bonds, Cash

Holdings
HoldingClassMarket value
UK listed equitiesListed equities620,000
UK Treasury 2032Government bonds300,000
Sterling depositCash50,000
Structured note 2028Structured notes30,000
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Eligibility Breach 3% – – HOLDING_OUTSIDE_PERMITTED_UNIVERSE
  • HOLDING_OUTSIDE_PERMITTED_UNIVERSE: Returned by the engine; the registry’s reason-code dictionary has no entry for it.

Largest contributors: Eligibility → Structured note 2028 3%

Computed at build time by the Acclimetry rule engine (backend commit 8197063); the same code runs in the product.

Interpretation traps

Permitted lists fail closed

In permitted mode, a new asset type is a breach until the list changes. That is the intended reading of ‘only the following’, but every new class then needs an approved new rule version.

Match on stable keys

Names change; identifiers and governed fields change less. Prefer ISINs, issuer ids or a governed field over free-text class names, and keep the classification current.

Funds hide holdings

The list tests the positions the portfolio holds. A fund that owns a prohibited security is not caught unless the fund itself matches; look-through applies to exposure limits, not to this list.

Allowances are caps

Some policies allow a small amount, such as ‘unlisted securities up to 5%’. That is a weight cap, not a list: an asset allocation range with a maximum on the class tests it.

Result codes this check can return

CodeStateMeaningWhat to do
NO_PROHIBITED_HOLDINGS ✓CompliantReturned by the engine; the registry’s reason-code dictionary has no entry for it.–
HOLDING_OUTSIDE_PERMITTED_UNIVERSE ✓BreachReturned by the engine; the registry’s reason-code dictionary has no entry for it.–
PROHIBITED_HOLDING_PRESENT ✓BreachReturned by the engine; the registry’s reason-code dictionary has no entry for it.–
EMPTY_PORTFOLIONot applicableThe portfolio held no positions at the evaluation moment.–
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.
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.

Regulatory analogues

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

How is this different from an exclusion screen?

This list matches the holdings you name. The exclusion screen applies ESG, ethical or sanctions exclusions from an approved data source and discloses the weight it could not screen.

Does a 0.1% prohibited holding still breach?

Yes. Any listed holding breaches in prohibited mode, whatever its weight. The result reports the weight so the case can size the remedy.

Sources

Updated: 12 October 2026Acclimetry · Foreranger Ltd