R018 — High Hardcode Density
Executive Summary
Key Takeaways
- ✓ R018 evaluates a worksheet's overall hardcode density — the share of its populated cells that are typed constants rather than formulas — not any single cell in isolation.
- ✓ A sheet meeting or exceeding the density threshold is flagged as functioning as a static data table rather than a formula-driven model component, regardless of the sheet's name or intended role.
- ✓ Sheets with too few populated cells are excluded, to avoid flagging cover pages, chart-support sheets, or notes tabs with only a handful of text labels.
- ✓ R018 and R016 (Missing Assumptions Tab) can both fire on the same workbook — a sheet dense enough to trip R018's lower threshold but not R016's stricter one means the sheet is too hardcoded to be a clean model sheet, yet not recognized as a legitimate input layer either.
Purpose¶
R018 evaluates each worksheet's overall hardcode density — the proportion of its populated cells holding typed constants rather than formulas — and flags any sheet whose density meets or exceeds a threshold associated with the sheet functioning as a static data table rather than a live, formula-driven model component.
Detection Logic¶
For each worksheet with a sufficient number of populated (non-blank) cells to be meaningfully assessed, the ratio of hardcoded cells to total populated cells is computed. A sheet at or above the density threshold is flagged; sheets below the minimum populated-cell sample are excluded entirely, to avoid flagging small cover pages, chart-support sheets, or notes tabs. Confidence rises from medium to high as the density climbs further above the threshold.
Why It Matters¶
A model sheet's defining characteristic is that it calculates — its cells derive their values from formulas referencing other cells, so that a change to an input propagates through to the sheet's outputs. A sheet dominated by hardcoded constants is, functionally, a static data dump rather than a calculating component of the model, whether or not that was its intended role. This matters most when such a sheet sits inside what is otherwise presented as a live, dynamic model — a reader relying on that sheet's figures updating in response to changed assumptions elsewhere may not realize the sheet does not actually recalculate.
Evidence Produced¶
A triggered R018 finding's evidence names the sheet, the count of hardcoded cells against the total populated cell count, the resulting density percentage, and a description noting that a sheet at this density functions as a static data table rather than a formula-driven model component.
Severity¶
Medium. Weight 6.0. R018 is not one of the five critical-override rules.
Example¶
Trigger. A "Historical Actuals" worksheet has 200 populated cells, of which 170 are typed values with no formulas at all — an 85% hardcode density. R018 flags this sheet at high confidence (above the upper density band).
Non-trigger. The same sheet, but with only 55% of its populated cells hardcoded — the remainder calculated by formulas referencing other parts of the model. R018 does not fire, since the density falls below the threshold.
Recommended Remediation¶
Review the flagged sheet to confirm whether its static, hardcoded nature is intentional (a historical actuals sheet, for instance, is expected to be dominated by hardcoded values, since actuals do not recalculate) or whether business logic that should be formula-driven has instead been entered as typed values. Where the sheet's role is genuinely a live calculation component, move key assumptions to a dedicated input layer rather than embedding them across the sheet as hardcoded values.
Related Rules¶
R018 shares the Structural taxonomy category with the other Structural-category rules published in the Rule Reference, and is closely related in concept to R016 — Missing Assumptions Tab — see the Rule Taxonomy page for the full category membership.
Related Articles¶
- Hardcoded Formulas in Financial Models — the Knowledge Centre's buyer-facing technical guide to hardcoded values generally, at the individual-cell level this sheet-level rule aggregates from.
Version History¶
No version-specific changes to R018's severity, weight, or category are recorded as of engine version 2.1.0. This section will be updated in the same edit as any future change to the rule's declared attributes.
How OXXON tests thisRun a free structural check with FMAE
Frequently Asked Questions
What does FMAE rule R018 check for?
The overall share of a worksheet's populated cells that are hardcoded constants rather than formulas. A sheet meeting or exceeding a density threshold is flagged, since a genuine model sheet should be predominantly formula-driven.
Does R018 flag input or assumptions sheets?
It can, in principle — R018 evaluates every sheet in the workbook by its hardcode density, without exempting sheets that are intentionally input-heavy. A dedicated assumptions sheet is expected to have a high hardcode density by design, so a finding here should be read in that context rather than treated automatically as a defect.
How is R018 different from R016?
R016 checks whether the model has any identifiable dedicated input layer at all. R018 checks each individual sheet's own hardcode density regardless of its role. A sheet can trip R018's threshold without being dense enough to satisfy R016's stricter structural-signature threshold for what counts as a genuine input layer, so both rules can fire together on the same workbook.
Related Articles
FMAE Rule Taxonomy
Every rule in the FMAE structural rule pack declares a category attribute at the point it is defined in source — this is not a classification imposed on the rules afterward for documentation purposes, it is the classification the engine itself uses. Six categories cover all 26 rules — Structural (18 rules), Assumptions Governance (1), Integrity Controls (2), Structural Hygiene (1), Aggregation Logic (1), and Model Governance (3). This page publishes that taxonomy as the FMAE equivalent of a control catalog's classification scheme, cross-linked to the Rule Reference page for each member rule.
Finding Data Model & Confidence
Every FMAE finding carries the same fixed structure — which rule triggered it and that rule's identity at the time it ran, its evidence, a narrative explanation, and a confidence label of high, medium, or low. Confidence is a deterministic categorical label derived from how strongly a row's cells agree on a pattern, not a machine-learning probability estimate. Stating this plainly matters, since describing FMAE's confidence as AI-derived or probabilistic would overstate what the engine actually does.
R016 — Missing Assumptions Tab
R016 (Missing Assumptions Tab) checks whether the workbook has an identifiable, dedicated input or assumptions layer at all. It uses three independent tiers of detection — sheet-name keywords, a structural signature of predominantly hardcoded content, and the worksheet classifier's own classification — so that a model using a non-standard tab name is not incorrectly flagged simply because its input sheet is not named "Assumptions." The check is suppressed entirely for very small workbooks, which are too small to warrant a dedicated tab.
Hardcoded Formulas in Financial Models
A hardcoded value in a financial model is a fixed numeric value embedded directly within a formula cell, rather than being referenced from a dedicated input or assumption cell. Hardcoded values in formula cells are a structural risk because they do not update when the model's assumptions change, they are invisible during normal model navigation, and they cannot be changed consistently through the model's standard input interface. The ICAEW Financial Modelling Code and the FAST Standard both explicitly prohibit hardcoded values within formulas, requiring that all input values be entered in a dedicated input cell and referenced by formulas rather than embedded within them.