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.

Rule template
custom_field_band
Custom field band
Measured in
ratio
Worked examples, run by the engine
7

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

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.

ParameterIn the platformOptions and help
fieldCodeField codeThe code of the governed numeric custom field to measure.
scopeLevelMeasure perportfolio (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.
aggregateAggregatesum (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.
exemptClassNamesExempt classesClasses the field does not apply to, left out of every group.

Methodology choices

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: SCORE
scopeLevel: portfolio
aggregate: sum
Bounds: hard max 100

Holdings
HoldingMarket valueSCORE
A50060
B50070
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
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: SCORE
scopeLevel: portfolio
aggregate: weighted_average
Bounds: hard max 20

Holdings
HoldingMarket valueSCORE
A30010
B70020
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
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: SCORE
scopeLevel: class
aggregate: sum
Bounds: hard max 10

Holdings
HoldingClassMarket valueSCORE
B1Bonds1005
B2Bonds1006
S1Stocks1002
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
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: SCORE
scopeLevel: portfolio
aggregate: sum
Bounds: hard max 100

Holdings
HoldingMarket valueSCORE
A50060
B500(blank)
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
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: SCORE
scopeLevel: portfolio
aggregate: max
Bounds: hard max 100

Holdings
HoldingMarket valueSCORE
A500120
B500(blank)
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
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: SCORE
scopeLevel: portfolio
aggregate: min
Bounds: hard min 5

Holdings
HoldingMarket valueSCORE
A5003
B500(blank)
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
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: SCORE
scopeLevel: asset
aggregate: sum
Bounds: hard min 10 · warn min 20 · warn max 80 · hard max 100

Holdings
HoldingMarket valueSCORE
A50015
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
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_SCORE
scopeLevel: portfolio
aggregate: weighted_average
exemptClassNames: Equities, Cash
Bounds: warn max 6.5 · hard max 7

Holdings
HoldingClassMarket valueRATING_SCORE
UK Treasury 2031 (AA)Bonds200,0003
Utility bond 2030 (A)Bonds300,0006
Industrial bond 2032 (BBB-)Bonds500,00010
Global equity fundEquities400,000(blank)
Sterling depositCash50,000(blank)
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
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

CodeStateMeaningWhat to do
WITHIN_LIMITS ✓CompliantThe measured value sits inside every approved bound.–
ABOVE_WARNING_MAXIMUMWarningThe 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 ✓WarningThe 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 ✓BreachThe 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 ✓BreachThe 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_DATABreachData 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_PORTFOLIONot applicableThe portfolio held no positions at the evaluation moment.–
NO_MEASURED_POSITIONSNot applicableNo position in the portfolio fell inside this rule's measured population.–
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.
MISSING_POSITION_DATA ✓Not evaluated: data qualityOne 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_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.

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.

Updated: 12 October 2026Acclimetry · Foreranger Ltd