Investment restriction
Cash minimum and maximum
A cash minimum and maximum keeps the share of portfolio value held in cash between a floor and a ceiling. The floor covers known outflows; the ceiling limits cash drag. Acclimetry adds the positions in the named cash classes, optionally including cash held inside funds, and compares that weight with the approved band.
cash_rangeCash minimum / maximum
How policies word it
Cash rules take two forms. One is a band, such as between 2% and 10% in cash. The other is a floor in spending terms, such as six months’ expenditure, which must be converted to a percentage first.
The floor protects known outflows: grants, distributions, capital calls and fees. The ceiling stops a manager sitting out of the market against the agreed strategy. The Charity Commission suggests that a charity’s investment policy cover its liquidity needs (CC14).
- The portfolio will hold between 2% and 10% in cash and cash equivalents.
- A minimum of six months’ budgeted expenditure will be held in cash.
- Cash should not exceed 5% of the portfolio except during rebalancing.
- Uninvested cash held by the manager is limited to 3% of the mandate.
How it is measured
The rule lists the class names that count as cash, such as ‘Cash & Equivalents’. The engine adds the market value of positions in those classes and divides it by portfolio value. The weight is compared with the hard minimum and maximum and with any warning bounds.
With look-through switched on, each fund in the named fund classes is expanded through its newest usable composition. The fund’s cash-class entries join the cash weight at fund weight times entry weight: a 500 fund that is 40% money market adds 200.
A fund with no composition, a stale one or a cycle is not expanded and is disclosed. If a composition covers less than 100%, the residual counts as unknown exposure, which stops the rule from proving compliance.
When it is breached and what follows
Cash below the floor is often the more urgent case, because an outflow may not be covered. A warning minimum, say 3% against a 2% floor, gives notice before the hard limit. Cash above the ceiling is usually a passive breach after a sale, a maturity or an income payment.
Each breach opens a case with assignment, escalation and service-level clocks. A grace period in days, if the rule version has one, delays the clocks, not the breach. Data-quality problems such as stale prices or an unaccepted snapshot are cases too, and the rule is not evaluated until they are resolved.
Data the check reads
- Market value of every position
- The class names that count as cash, such as ‘Cash & Equivalents’
- For look-through: the fund class names, and a dated composition for each fund
- A staleness limit in days for compositions, if older ones should not be used
- The band as percentages of portfolio value (a spending-based floor must first be converted)
Rule parameters
The portfolio weight held in cash classes — optionally including the cash sleeves of funds, read through their compositions — must stay inside the approved band.
| Parameter | In the platform | Options and help |
|---|---|---|
| cashClassNames | Cash class names | |
| includeLookThroughCash | Look through funds for cash | Count the cash sleeve of each fund with a recorded composition (its entries in a cash class) toward the cash weight. A fund with no usable composition stays as it is and is disclosed. |
| fundClassNames | Fund class names to look through | |
| compositionStaleAfterDays | Composition stale after (days) | A composition older than this is not used; the fund is disclosed as unexpanded. |
Methodology choices
- Direct cash: positions whose asset class is one of the named cash classes.
- Look-through cash: with the option on, each fund in the named fund classes is expanded through its newest usable composition and the entries whose class is a cash class join the cash weight at fund weight × entry weight.
- A fund with no composition, a stale composition or a cycle is not expanded and is disclosed; a composition covering less than 100% leaves the residual as unknown exposure, which blocks a compliant-side proof.
Parameter names, methodology text and result-code meanings are shown exactly as the platform states them.
Worked examples, run by the engine
Cash at exactly the hard maximum is compliant with zero headroom
Rule template:cash_range cashClassNames: Cash
Bounds: hard max 10%
| Holding | Class | Market value |
|---|---|---|
| CASH | Cash | 100 |
| EQ | Stocks | 900 |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Cash | Compliant | 10% | ≤ 10% | 0% | WITHIN_LIMITS |
WITHIN_LIMITS: The measured value sits inside every approved bound.
Largest contributors: Cash → CASH 10%
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 hair over the maximum breaches — the boundary is exceeded, not reached
Rule template:cash_range cashClassNames: Cash
Bounds: hard max 10%
| Holding | Class | Market value |
|---|---|---|
| CASH | Cash | 100.01 |
| EQ | Stocks | 899.99 |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Cash | Breach | 10% | ≤ 10% | -0% | ABOVE_HARD_MAXIMUM |
ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.
Largest contributors: Cash → CASH 10%
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.
Look-through cash: 100 direct cash plus 40% of a 500 fund that is cash-class in its composition is 300 of 1,000, inside a 20–40% band
Rule template:cash_range cashClassNames: CashincludeLookThroughCash: truefundClassNames: Funds
Bounds: hard min 20% · hard max 40%
| Holding | Class | Market value |
|---|---|---|
| CASH | Cash | 100 |
| FUND1 | Funds | 500 |
| EQ | Stocks | 400 |
| Fund | Underlying sleeves | As of |
|---|---|---|
| FUND1 | Money market: 40% (Cash); Equities: 60% (Stocks) | 14 October 2026 |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Cash (including look-through) | Compliant | 30% | 20% – 40% | 10% | WITHIN_LIMITS |
WITHIN_LIMITS: The measured value sits inside every approved bound.
Largest contributors: Cash (including look-through) → Money market (via FUND1) 20%, CASH 10%
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.
Cash at 2.5% is above the 2% floor but below the 3% warning minimum, so the band reads warning before any breach.
Rule template:cash_range cashClassNames: Cash & Equivalents
Bounds: hard min 2% · warn min 3% · hard max 10%
| Holding | Class | Market value |
|---|---|---|
| Sterling deposit | Cash & Equivalents | 25,000 |
| Global equities | Equities | 600,000 |
| UK gilts | Bonds | 375,000 |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Cash | Warning | 2.5% | 2% – 10% warning ≥ 3% | 0.5% -0.5% to warning | BELOW_WARNING_MINIMUM |
BELOW_WARNING_MINIMUM: The measured value has crossed the early-warning minimum but not the hard limit.
Largest contributors: Cash → Sterling deposit 2.5%
Computed at build time by the Acclimetry rule engine (backend commit 8197063); the same code runs in the product.
Interpretation traps
Spending floors are not percentages
‘Six months’ expenditure’ moves with the budget and with the portfolio’s value. Convert it to a percentage at each budget review, and approve a new rule version when the figure changes. Otherwise the rule keeps testing last year’s number.
Cash inside funds
Without look-through, a fund’s cash sleeve counts as part of the fund, not as cash. With it, a fund missing a usable composition stays unexpanded and is disclosed, and any uncovered residual blocks a compliant result; see fund look-through.
What counts as cash
Money market funds, deposits and short-dated bills may sit in different classes. Only the named classes count, so list every class the policy treats as cash.
On the boundary
A weight exactly on a bound is inside it: 10% against a 10% maximum is compliant with zero headroom. A hair over, such as 10.001%, is a breach.
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. |
| 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 deposits limit: 20% with one body (COLL 5.2.11R; Art 52(1))
- Charity Commission CC14: liquidity needs in a charity’s investment policy
Acclimetry evaluates the market-value weight of the named cash classes against a band, optionally adding the cash sleeves of funds from their recorded compositions. It does not forecast cash flows or spending, or convert a spending floor into a percentage. A fund it could not expand is disclosed, never treated as cash.
The free Limit Checker runs this same template in your browser against a CSV of holdings. Nothing is uploaded.
Questions
Does a money market fund count as cash?
Only if its class is one of the cash classes the rule names, or if look-through is on and its composition shows cash-class entries.
Can the floor be ‘six months of spending’?
Not directly, because the band is a percentage of portfolio value. Convert the amount at each budget review and approve a new rule version when it changes.
Sources
- Charity Commission, Investing charity money: a guide for trustees (CC14), updated 1 August 2023 · OGL v3.0 · Read on12 October 2026
- FCA Handbook, COLL 5.2 (UK UCITS schemes), read 12 October 2026; pending FCA API snapshot · © FCA, OGL v3.0 · Read on12 October 2026