Investment restriction
Custom data-field bands
A custom data-field band limits a numeric data field the organisation maintains, such as a credit-rating score, an ESG score or a risk indicator. A typical clause reads ‘average credit quality of at least A-’. Acclimetry applies the band to the field's sum, value-weighted average, maximum or minimum, over the whole portfolio or per group.
custom_field_bandCustom field band
How policies word it
Some limits rest on a number that no standard template computes. The policy names the measure and the band, and the data comes from a provider or the manager.
- Average credit quality: the value-weighted average rating score must be A- or better.
- Sustainability score: the portfolio's weighted average ESG score must be at least 6 out of 10.
- Risk indicator per fund: no fund with a risk indicator above 4 on a 1 to 7 scale.
- Total of a field: financed emissions attributed to each holding, summed, within an annual budget.
A rating clause needs a stated scale first, for example AAA = 1 to D = 22, and a direction: here lower numbers mean better quality.
- The average credit quality of the bond portfolio must be A- or better.
- The portfolio's weighted average ESG score must be at least 6 out of 10.
- No fund held may have a risk indicator above 4 on the 1 to 7 scale.
- The average credit quality of each bond mandate must be A or better.
How it is measured
The rule names one governed numeric field and one way to combine it:
- Sum: the members' values added together.
- Value-weighted average: each member's value weighted by its market value.
- Largest or smallest: the single highest or lowest member value.
The scope is the whole portfolio, each asset, or each issuer, class, sub-class, type, sub-type, strategy, currency or country. Each group is measured separately against the same band.
Exempt classes, those the field does not apply to, are left out of every group. The result is a plain number, not a percentage, with headroom and the members that contribute most.
When it is breached and what follows
A value outside the hard bounds is a breach, and warning bounds sit inside them. A downgrade or a new score from the provider can move the result without any trade.
For a sum or an average, a member without the field is a coverage gap, so the result is not evaluated. For a largest or smallest value, a known member already beyond the bound proves the breach despite the gap.
Breaches join a case with assignment, escalation and service-level clocks. Waivers are time-bound, approved within delegated authority, and never change the result.
Data the check reads
- A governed numeric field for each holding, such as a rating score or an ESG score
- The scale and direction of the field, recorded with the rule
- The aggregate (sum, value-weighted average, largest or smallest) and the scope level
- Exempt classes the field does not apply to, such as cash
- Market values, for value-weighted averages
Rule parameters
A governed numeric custom field — summed, value-weighted, or its largest or smallest member — over the whole book or per group must stay inside the approved band. The engine form of a Tolerance Manager limit.
| Parameter | In the platform | Options and help |
|---|---|---|
| fieldCode | Field code | The code of the governed numeric custom field to measure. |
| scopeLevel | Measure per | portfolio (Whole portfolio) · asset (Each asset) · issuer (Each issuer) · class (Each asset class) · subClass (Each asset sub-class) · type (Each asset type) · subType (Each asset sub-type) · strategy (Each strategy) · currency (Each currency) · country (Each country) One result row for the whole book, or one per group at this level. |
| aggregate | Aggregate | sum (Sum of the field) · weighted_average (Value-weighted average) · max (Largest member value) · min (Smallest member value) How the members' field values combine into the number the band is applied to. |
| exemptClassNames | Exempt classes | Classes the field does not apply to, left out of every group. |
Methodology choices
- sum: the field values of the members added together (the Tolerance Manager arithmetic).
- weighted_average: each member's field value weighted by its market value.
- max / min: the largest or smallest member value; a partial maximum over the ceiling or partial minimum under the floor is a proven breach even with members missing.
Parameter names, methodology text and result-code meanings are shown exactly as the platform states them.
Worked examples, run by the engine
The summed field over the whole book above the hard maximum breaches
Rule template:custom_field_band fieldCode: SCOREscopeLevel: portfolioaggregate: sum
Bounds: hard max 100
| Holding | Market value | SCORE |
|---|---|---|
| A | 500 | 60 |
| B | 500 | 70 |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Portfolio | Breach | 130 | ≤ 100 | -30 | ABOVE_HARD_MAXIMUM |
ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.
Largest contributors: Portfolio → B 70, A 60
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 value-weighted average lands between its members, weighted by market value
Rule template:custom_field_band fieldCode: SCOREscopeLevel: portfolioaggregate: weighted_average
Bounds: hard max 20
| Holding | Market value | SCORE |
|---|---|---|
| A | 300 | 10 |
| B | 700 | 20 |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Portfolio | Compliant | 17 | ≤ 20 | 3 | WITHIN_LIMITS |
WITHIN_LIMITS: The measured value sits inside every approved bound.
Largest contributors: Portfolio → B 20, A 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.
Per-class groups are measured separately, each against the same band
Rule template:custom_field_band fieldCode: SCOREscopeLevel: classaggregate: sum
Bounds: hard max 10
| Holding | Class | Market value | SCORE |
|---|---|---|---|
| B1 | Bonds | 100 | 5 |
| B2 | Bonds | 100 | 6 |
| S1 | Stocks | 100 | 2 |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Bonds | Breach | 11 | ≤ 10 | -1 | ABOVE_HARD_MAXIMUM |
| Stocks | Compliant | 2 | ≤ 10 | 8 | WITHIN_LIMITS |
ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.WITHIN_LIMITS: The measured value sits inside every approved bound.
Largest contributors: Bonds → B2 6, B1 5 · Stocks → S1 2
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 member without the field is a coverage gap, never a zero
Rule template:custom_field_band fieldCode: SCOREscopeLevel: portfolioaggregate: sum
Bounds: hard max 100
| Holding | Market value | SCORE |
|---|---|---|
| A | 500 | 60 |
| B | 500 | (blank) |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Portfolio | Not evaluated: data quality | – | ≤ 100 | – | 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 partial maximum already over the ceiling proves the breach despite a missing member
Rule template:custom_field_band fieldCode: SCOREscopeLevel: portfolioaggregate: max
Bounds: hard max 100
| Holding | Market value | SCORE |
|---|---|---|
| A | 500 | 120 |
| B | 500 | (blank) |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Portfolio | Breach | 120 | ≤ 100 | -20 | ABOVE_HARD_MAXIMUM |
ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.
Largest contributors: Portfolio → A 120
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 partial minimum already under the floor proves the breach despite a missing member
Rule template:custom_field_band fieldCode: SCOREscopeLevel: portfolioaggregate: min
Bounds: hard min 5
| Holding | Market value | SCORE |
|---|---|---|
| A | 500 | 3 |
| B | 500 | (blank) |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Portfolio | Breach | 3 | ≥ 5 | -2 | BELOW_HARD_MINIMUM |
BELOW_HARD_MINIMUM: The measured value falls below the approved hard minimum, beyond any stated tolerance.
Largest contributors: Portfolio → A 3
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 lower warning bound is crossed before the hard floor
Rule template:custom_field_band fieldCode: SCOREscopeLevel: assetaggregate: sum
Bounds: hard min 10 · warn min 20 · warn max 80 · hard max 100
| Holding | Market value | SCORE |
|---|---|---|
| A | 500 | 15 |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| A | Warning | 15 | 10 – 100 warning 20 – 80 | 5 -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: A → A 15
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.
On a scale where AAA is 1 and A- is 7, the bonds average 7.4 by value, weaker than A-, so the rule breaches; equities and cash are exempt.
Rule template:custom_field_band fieldCode: RATING_SCOREscopeLevel: portfolioaggregate: weighted_averageexemptClassNames: Equities, Cash
Bounds: warn max 6.5 · hard max 7
| Holding | Class | Market value | RATING_SCORE |
|---|---|---|---|
| UK Treasury 2031 (AA) | Bonds | 200,000 | 3 |
| Utility bond 2030 (A) | Bonds | 300,000 | 6 |
| Industrial bond 2032 (BBB-) | Bonds | 500,000 | 10 |
| Global equity fund | Equities | 400,000 | (blank) |
| Sterling deposit | Cash | 50,000 | (blank) |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Portfolio | Breach | 7.4 | ≤ 7 warning ≤ 6.5 | -0.4 -0.9 to warning | ABOVE_HARD_MAXIMUM |
ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.
Largest contributors: Portfolio → Industrial bond 2032 (BBB-) 10, Utility bond 2030 (A) 6, UK Treasury 2031 (AA) 3
Computed at build time by the Acclimetry rule engine (backend commit 8197063); the same code runs in the product.
Interpretation traps
State the scale and the direction
For ratings converted to numbers, record the mapping and whether lower is better. With lower meaning better, ‘A- or better’ is a hard maximum, not a minimum.
A sum is not an average
A sum adds field values without weighting, so it grows with the number of holdings. Use it for quantities that add up, and the weighted average for scores and intensities.
A missing value is not zero
For sums and averages, one member without the field leaves the result not evaluated. Exempt the classes the field cannot cover.
Sector is not a scope level
Bands can be set per issuer, class, sub-class, type, sub-type, strategy, currency or country. A per-sector band needs sectors held in one of those levels.
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. | – |
| NO_MEASURED_POSITIONS | Not applicable | No position in the portfolio fell inside this rule's measured population. | – |
| 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 sum, value-weighted average, largest or smallest value of one governed numeric field, for the portfolio or per group. It does not produce scores, convert rating scales or define what a score means. The field's values come from the organisation's data.
Questions
How do I test ‘average credit quality of at least A-’?
Load a numeric rating score per bond and choose the value-weighted average. If lower numbers mean better quality, set a hard maximum at the A- score. Exempt classes that carry no rating.
What is a governed data field?
A custom field the organisation defines for its holdings, such as ESG_SCORE. Rules read its approved values, and a holding without one is a gap, never a zero.
Can one rule test every fund's risk indicator?
Yes. Scope the band to each asset with a hard maximum, or take the largest value across the portfolio. Either way, one fund above the bound is a breach.