<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: FeasibilityproAI  Analysis</title>
    <description>The latest articles on DEV Community by FeasibilityproAI  Analysis (@feasibilityproaiai).</description>
    <link>https://dev.to/feasibilityproaiai</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4110774%2F301c5066-193b-4bb8-8043-2e986556a091.png</url>
      <title>DEV Community: FeasibilityproAI  Analysis</title>
      <link>https://dev.to/feasibilityproaiai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/feasibilityproaiai"/>
    <language>en</language>
    <item>
      <title>Human-in-the-Loop Validation for AI-Generated Financial Models</title>
      <dc:creator>FeasibilityproAI  Analysis</dc:creator>
      <pubDate>Sat, 17 Oct 2026 11:54:42 +0000</pubDate>
      <link>https://dev.to/feasibilityproaiai/human-in-the-loop-validation-for-ai-generated-financial-models-2mce</link>
      <guid>https://dev.to/feasibilityproaiai/human-in-the-loop-validation-for-ai-generated-financial-models-2mce</guid>
      <description>&lt;p&gt;An AI system can produce a spreadsheet that looks correct, contains plausible formulas, and returns a coherent financial result while still encoding the wrong assumptions.&lt;/p&gt;

&lt;p&gt;That is a difficult failure to detect because spreadsheet quality has several dimensions. A workbook may be syntactically valid but semantically wrong. Its formulas may calculate correctly while referencing the wrong inputs. Its output may be internally consistent but depend on unsupported source data.&lt;/p&gt;

&lt;p&gt;These are different failure modes, and they require different controls. For financial models, the engineering objective should not be to make a language model responsible for every step. It should be to separate interpretation, calculation, validation, and professional approval so that each can be tested independently.&lt;/p&gt;

&lt;p&gt;This article develops one possible implementation pattern for AI-assisted financial modelling. It is an educational architecture, not a description of any proprietary product.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Define what is being validated
&lt;/h2&gt;

&lt;p&gt;Before designing a validation pipeline, distinguish five objects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Input:&lt;/strong&gt; a value extracted from a document, spreadsheet, or user instruction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assumption:&lt;/strong&gt; the interpretation of that input used by the model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; the source that supports, qualifies, or contradicts the assumption.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model output:&lt;/strong&gt; a result produced by formulas under specified assumptions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Professional decision:&lt;/strong&gt; the judgment made after considering the output, uncertainty, and context.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These objects should not collapse into a single generated answer. Consider a hypothetical development feasibility model. An AI system extracts a construction cost from a project document and proposes entering it into a workbook.&lt;/p&gt;

&lt;p&gt;The extraction may be correct, but that does not establish that the figure is current, applies to the relevant asset, or uses the correct unit. Even after the assumption has been approved, the resulting calculation still needs validation.&lt;/p&gt;

&lt;p&gt;A useful validation system therefore asks separate questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Was the source read correctly?&lt;/li&gt;
&lt;li&gt;Was the value interpreted correctly?&lt;/li&gt;
&lt;li&gt;Is the assumption suitable for this model?&lt;/li&gt;
&lt;li&gt;Did the calculation execute correctly?&lt;/li&gt;
&lt;li&gt;Does the output behave as expected when inputs change?&lt;/li&gt;
&lt;li&gt;Is the result sufficiently supported for professional review?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A single confidence score cannot adequately answer all six.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Keep language interpretation separate from calculation
&lt;/h2&gt;

&lt;p&gt;Language models are useful for interpreting ambiguous instructions, extracting information, identifying relationships, and proposing structured data.&lt;/p&gt;

&lt;p&gt;They should not be the sole authority for consequential arithmetic.&lt;/p&gt;

&lt;p&gt;A safer design separates the workflow into distinct stages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source documents and workbook
            |
            v
AI-assisted extraction
            |
            v
Structured candidate assumptions
            |
            v
Schema and provenance validation
            |
            v
Human approval of material inputs
            |
            v
Deterministic calculation engine
            |
            v
Independent validation checks
            |
            v
Human review and release
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This separation creates meaningful test boundaries.&lt;/p&gt;

&lt;p&gt;For example, if a residual land value changes unexpectedly, an engineer can investigate whether the cause was an extracted input, a changed assumption, a formula defect, or a validation failure. The architecture does not guarantee that every error will be caught, but it makes errors easier to locate and investigate.&lt;/p&gt;

&lt;p&gt;The calculation engine should receive typed, validated inputs and execute explicitly defined formulas. It should not need to infer the intended mathematics from a natural-language explanation each time a calculation runs.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Make assumptions machine-readable
&lt;/h2&gt;

&lt;p&gt;A common weakness in AI-assisted workflows is treating generated prose as if it were a reliable data interface.&lt;/p&gt;

&lt;p&gt;Instead, require the model to propose structured records. The exact schema will depend on the application, but a candidate assumption might look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"construction_cost"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1250&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"currency_per_square_metre"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"source_reference"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"document_03"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"source_location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"page_12"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pending_review"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The number and unit above are illustrative, not market evidence.&lt;/p&gt;

&lt;p&gt;A production schema would normally need additional fields, such as currency, applicable area definition, source date, geographic scope, extraction status, and approval metadata where relevant.&lt;/p&gt;

&lt;p&gt;The important point is that the value is not accepted merely because the model returned valid JSON.&lt;/p&gt;

&lt;p&gt;Validation should cover several layers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structural validation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are required fields present?&lt;/li&gt;
&lt;li&gt;Are types correct?&lt;/li&gt;
&lt;li&gt;Are unexpected fields rejected or explicitly handled?&lt;/li&gt;
&lt;li&gt;Are enumerated values valid?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Semantic validation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the unit appropriate for the assumption?&lt;/li&gt;
&lt;li&gt;Is the value within a defensible range?&lt;/li&gt;
&lt;li&gt;Does the value match the intended asset and geography?&lt;/li&gt;
&lt;li&gt;Are required dates and scope definitions present?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Provenance validation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the referenced source exist?&lt;/li&gt;
&lt;li&gt;Can the reviewer locate the supporting passage or cell?&lt;/li&gt;
&lt;li&gt;Does the source actually support the proposed interpretation?&lt;/li&gt;
&lt;li&gt;Is the evidence current enough for the intended use?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A schema can enforce structure. It cannot, by itself, establish that an assumption is commercially reasonable.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Validate calculations independently
&lt;/h2&gt;

&lt;p&gt;Once assumptions are approved, calculations should run through deterministic code or a controlled spreadsheet calculation engine.&lt;/p&gt;

&lt;p&gt;Deterministic means that the same defined inputs, formulas, and calculation rules produce the same result under the same execution conditions. It does not mean the model is economically correct.&lt;/p&gt;

&lt;p&gt;Validation should include at least four categories.&lt;/p&gt;

&lt;h3&gt;
  
  
  Formula and dependency checks
&lt;/h3&gt;

&lt;p&gt;Confirm that formulas use the intended cells, units, and dependency relationships. Detect broken references, unexpected hard-coded values, circular dependencies where prohibited, and missing required formulas.&lt;/p&gt;

&lt;p&gt;Where a spreadsheet is involved, the validation layer should distinguish a formula cell from a displayed value. A cached result alone may not establish that the formula was recalculated using the latest inputs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accounting and reconciliation checks
&lt;/h3&gt;

&lt;p&gt;Where applicable, test identities and reconciliations defined by the model specification.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total costs reconcile to their component categories.&lt;/li&gt;
&lt;li&gt;Financing sources and uses reconcile.&lt;/li&gt;
&lt;li&gt;Cash flows reconcile to the specified timing and period conventions.&lt;/li&gt;
&lt;li&gt;Intermediate outputs reconcile to downstream calculations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The checks must be derived from the actual model specification. Not every financial model has the same identities or conventions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Boundary and type checks
&lt;/h3&gt;

&lt;p&gt;Reject or flag invalid inputs, incompatible units, missing required values, impossible dates, and calculations that divide by zero.&lt;/p&gt;

&lt;p&gt;A value being numeric does not mean it is valid for the model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Regression tests
&lt;/h3&gt;

&lt;p&gt;Maintain a set of known test cases. After changing formulas, extraction logic, or calculation code, compare the results with approved expected outcomes.&lt;/p&gt;

&lt;p&gt;Tests should cover normal cases, boundary conditions, missing data, and known failure scenarios. Expected results must come from independently checked calculations or approved specifications, not from the same model output being tested.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Test behavior, not just individual numbers
&lt;/h2&gt;

&lt;p&gt;A model can pass isolated formula checks while behaving badly when assumptions change.&lt;/p&gt;

&lt;p&gt;Sensitivity testing examines whether outputs respond in ways consistent with the model's defined relationships.&lt;/p&gt;

&lt;p&gt;For a hypothetical development model, useful tests might include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Increasing a cost assumption while holding other inputs constant.&lt;/li&gt;
&lt;li&gt;Delaying revenue-generating activities.&lt;/li&gt;
&lt;li&gt;Reducing expected revenue.&lt;/li&gt;
&lt;li&gt;Changing financing assumptions within permitted ranges.&lt;/li&gt;
&lt;li&gt;Combining adverse assumptions to examine downside exposure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are diagnostic tests, not universal assertions about every model.&lt;/p&gt;

&lt;p&gt;For example, increasing construction cost would generally be expected to reduce residual land value in a conventional residual valuation model when all other inputs remain fixed and the additional cost is not offset elsewhere. If the output increases instead, the system should flag the behavior for investigation.&lt;/p&gt;

&lt;p&gt;The test does not automatically prove that the model is defective. There may be a legitimate dependency or offsetting rule. The purpose is to make the behavior explicit and explainable.&lt;/p&gt;

&lt;p&gt;A practical test suite should distinguish:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Invariant checks:&lt;/strong&gt; conditions that must always hold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expected directional checks:&lt;/strong&gt; relationships that should hold under specified conditions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scenario tests:&lt;/strong&gt; outputs under deliberately changed assumptions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regression tests:&lt;/strong&gt; comparisons with previously verified cases.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Directional checks need careful design. Hard-coding intuitive rules without accounting for model dependencies can produce false alarms.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Treat human review as a defined control
&lt;/h2&gt;

&lt;p&gt;Adding a human approval button is not sufficient. The reviewer needs the information and authority required to make a meaningful decision.&lt;/p&gt;

&lt;p&gt;A useful review interface should expose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The proposed assumption and its unit.&lt;/li&gt;
&lt;li&gt;The original source and relevant location.&lt;/li&gt;
&lt;li&gt;The extraction or interpretation proposed by the AI.&lt;/li&gt;
&lt;li&gt;Any transformations applied to the source value.&lt;/li&gt;
&lt;li&gt;The downstream calculations affected.&lt;/li&gt;
&lt;li&gt;Validation failures and unresolved warnings.&lt;/li&gt;
&lt;li&gt;The difference between the current and proposed model state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Review priority should reflect materiality and uncertainty. A minor formatting issue does not require the same treatment as an unsupported assumption that materially changes a financial result.&lt;/p&gt;

&lt;p&gt;A possible approval policy is:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Condition&lt;/th&gt;
&lt;th&gt;System action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Required source missing&lt;/td&gt;
&lt;td&gt;Block the assumption&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unit or schema invalid&lt;/td&gt;
&lt;td&gt;Reject or quarantine the candidate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Material assumption lacks approval&lt;/td&gt;
&lt;td&gt;Prevent release&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Calculation reconciliation fails&lt;/td&gt;
&lt;td&gt;Block release pending investigation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sensitivity test produces an unexplained result&lt;/td&gt;
&lt;td&gt;Escalate for review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;All required checks pass&lt;/td&gt;
&lt;td&gt;Permit the next review stage&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Passing automated checks should not be treated as proof that a model is suitable for a real-world decision.&lt;/p&gt;

&lt;p&gt;The approval policy must also define who can approve an assumption, what evidence is required, how overrides are recorded, and when an approval expires or must be revisited.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Preserve an audit trail
&lt;/h2&gt;

&lt;p&gt;A useful audit trail records the sequence of changes, not just the final workbook.&lt;/p&gt;

&lt;p&gt;For each material assumption, record the source reference, extracted value, proposed interpretation, approved value, reviewer, timestamp, and reason for any override.&lt;/p&gt;

&lt;p&gt;For each calculation run, record the model version, input version, calculation version, validation results, and output version.&lt;/p&gt;

&lt;p&gt;Where AI is involved, also consider recording the model or service version and the relevant processing configuration, subject to privacy, security, and retention requirements.&lt;/p&gt;

&lt;p&gt;This is important because an identical output can arise from different assumptions, while a changed output can result from either changed inputs or changed calculation logic.&lt;/p&gt;

&lt;p&gt;Auditability requires enough information to reconstruct why a result was produced. A generated explanation that merely sounds plausible is not a substitute for that record.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Avoid common validation mistakes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Mistake 1: Treating valid JSON as correct data.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A schema proves that a response meets structural constraints. It does not prove that a source was interpreted correctly or that the value is appropriate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 2: Asking the same AI system to verify its own answer.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A second model-generated explanation may identify useful issues, but it is not independent evidence of correctness. Independent checks should use source evidence, deterministic calculations, explicit invariants, or separately established expected results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 3: Checking only the final output.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A plausible headline result can hide errors in intermediate calculations, units, timing, or assumptions. Validate the calculation chain as well as the final number.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 4: Treating human approval as a rubber stamp.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Reviewers need access to evidence and the ability to reject, amend, or escalate proposed assumptions. Otherwise, the control exists mainly on paper.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 5: Confusing model correctness with decision quality.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A model may calculate exactly as specified and still be unsuitable because its assumptions are weak, its evidence is stale, or relevant risks are omitted.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. A practical implementation sequence
&lt;/h2&gt;

&lt;p&gt;Teams building this capability can start with a narrow, testable scope.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select one model and document its calculation rules.&lt;/li&gt;
&lt;li&gt;Define a schema for a small set of material assumptions.&lt;/li&gt;
&lt;li&gt;Require source references for those assumptions.&lt;/li&gt;
&lt;li&gt;Validate types, units, required fields, and source availability.&lt;/li&gt;
&lt;li&gt;Route material assumptions for human approval.&lt;/li&gt;
&lt;li&gt;Run calculations outside the language-model interpretation step.&lt;/li&gt;
&lt;li&gt;Implement reconciliation, boundary, regression, and sensitivity checks.&lt;/li&gt;
&lt;li&gt;Record model versions, approvals, overrides, and validation outcomes.&lt;/li&gt;
&lt;li&gt;Test the workflow against deliberately introduced errors.&lt;/li&gt;
&lt;li&gt;Expand only after the failure modes and review burden are understood.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Evaluation should measure more than whether the pipeline completes. Useful measures include unsupported-assumption detection, source-traceability coverage, validation failures caught, false-positive rates, reviewer override frequency, and reproducibility across controlled test cases.&lt;/p&gt;

&lt;p&gt;These measures need explicit definitions and representative test data. No performance figure should be claimed without a documented evaluation method.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Human-in-the-loop validation is most effective when it is designed into the system rather than added at the end.&lt;/p&gt;

&lt;p&gt;AI can help interpret documents, propose structured assumptions, and explain relationships. Deterministic calculation, independent validation, source traceability, and accountable human approval address different parts of the problem.&lt;/p&gt;

&lt;p&gt;The engineering objective is not to eliminate professional judgment. It is to ensure that the judgment is applied to a result whose assumptions, evidence, calculations, and limitations can be inspected.&lt;/p&gt;

&lt;p&gt;For a financial model, a plausible number is only the beginning of the validation process.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>fintech</category>
      <category>llm</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>What Context Does an AI Spreadsheet Copilot Need Before It Can Explain a Workbook?</title>
      <dc:creator>FeasibilityproAI  Analysis</dc:creator>
      <pubDate>Fri, 09 Oct 2026 06:32:32 +0000</pubDate>
      <link>https://dev.to/feasibilityproaiai/what-context-does-an-ai-spreadsheet-copilot-need-before-it-can-explain-a-workbook-52kb</link>
      <guid>https://dev.to/feasibilityproaiai/what-context-does-an-ai-spreadsheet-copilot-need-before-it-can-explain-a-workbook-52kb</guid>
      <description>&lt;p&gt;A spreadsheet copilot can explain a number and still get the story behind it wrong. Imagine a real estate feasibility workbook showing a lower development profit than expected. The number is visible, and a language model can describe it in seconds. But explaining why it changed requires more than reading a cell. The answer may depend on construction costs, revenue assumptions, formulas across multiple worksheets, the selected scenario, or the date of the underlying data.&lt;/p&gt;

&lt;p&gt;This is where spreadsheet AI becomes an engineering problem rather than simply a language-generation problem. To explain a workbook reliably, a system must understand how its contents relate to one another, distinguish calculated outputs from assumptions, and establish whether the numbers it sees reflect the current calculation state.&lt;/p&gt;

&lt;h2&gt;
  
  
  A spreadsheet is more than its visible values
&lt;/h2&gt;

&lt;p&gt;A straightforward implementation might extract cell values, convert them into text, and send that text to a language model. For small, simple tables, this can be sufficient. The approach becomes less reliable when a workbook contains multiple worksheets, named ranges, nested formulas, imported data, scenario models, or links between calculations.&lt;/p&gt;

&lt;p&gt;Consider a simplified workbook in which Inputs!B2 contains construction cost per square metre, Model!D12 calculates total construction cost, and Summary!C8 reports development profit.&lt;/p&gt;

&lt;p&gt;If a user asks why profit has fallen, the system needs to trace the relevant calculation chain. It must determine which formulas depend on the construction-cost assumption, whether that assumption changed, and whether other inputs changed at the same time. Even then, a dependency is not automatically a complete explanation. The fact that a cost input contributes to profit does not establish that it caused the entire decline. The first requirement is a structured representation of workbook context, not a longer prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build a model of the workbook before generating an answer
&lt;/h2&gt;

&lt;p&gt;The system needs to preserve more than cell addresses and displayed values. It should capture worksheet structure, formulas, number formats, named ranges, relevant metadata, and the relationships between calculations.&lt;/p&gt;

&lt;p&gt;For each cell, a useful representation includes its worksheet and address, stored value, formula where applicable, data type, number format, workbook version, and available source information.&lt;/p&gt;

&lt;p&gt;These fields help prevent subtle interpretation errors. A value displayed as 12.5% has a different meaning from a currency amount or a quantity, while a hard-coded assumption should not be confused with a formula-generated result. Formatting can help identify the intended presentation, but it does not establish the business meaning of a number on its own.&lt;/p&gt;

&lt;p&gt;Dependencies are equally important. A cell record tells the system what is stored in a location; a dependency record tells it which other cells contribute to that calculation.&lt;/p&gt;

&lt;p&gt;For example, a simplified relationship might be:&lt;br&gt;
Inputs!B2 → Model!D12 → Summary!C8&lt;/p&gt;

&lt;p&gt;This relationship can be represented as a directed graph, allowing the system to trace upstream inputs from a requested output. Real workbooks are more complicated: formulas can branch, reference other worksheets, use named ranges, or contain constructs the extraction system cannot resolve.&lt;/p&gt;

&lt;p&gt;The system should preserve those limitations. An unresolved reference must remain unresolved rather than being silently replaced with an assumed relationship.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep extraction, calculation and explanation separate
&lt;/h2&gt;

&lt;p&gt;One architectural mistake is to ask the language model to perform every step: interpret the workbook, calculate the result, diagnose the change, and explain it. A more dependable design separates these responsibilities.&lt;/p&gt;

&lt;p&gt;The extraction layer reads workbook structure and records the available evidence. The calculation layer establishes numerical results using an appropriate spreadsheet engine or a separately verified deterministic implementation. The explanation layer uses those results to answer the user's question.&lt;/p&gt;

&lt;p&gt;This separation matters because reading a formula is not the same as evaluating it. For example, the openpyxl documentation explicitly states that openpyxl does not evaluate formulas. A system using it can inspect formula expressions, but it cannot assume that the cached result represents a freshly recalculated workbook.&lt;/p&gt;

&lt;p&gt;The calculation process should therefore expose its status to the explanation layer. The system needs to distinguish an extracted value from a recalculated result, and a recalculated result from one that has passed the relevant validation checks. These distinctions should be represented as data, not left for the language model to infer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give the language model structured evidence
&lt;/h2&gt;

&lt;p&gt;Once the workbook has been parsed and the relevant calculations established, the system can assemble a context package for the requested answer. Suppose a user asks why development profit changed. The package might identify the target cell, its formula, the relevant upstream dependencies, the selected scenario, the workbook version, and the status of the calculation. It should also identify missing evidence, such as an input whose source date is unavailable.&lt;/p&gt;

&lt;p&gt;A simplified representation could look like this:&lt;br&gt;
{&lt;br&gt;
  "workbook_version": "v17",&lt;br&gt;
  "target_cell": "Summary!C8",&lt;br&gt;
  "scenario": "Base case",&lt;br&gt;
  "formula": "=Revenue-Costs",&lt;br&gt;
  "dependencies": [&lt;br&gt;
    "Model!D12",&lt;br&gt;
    "Model!D18"&lt;br&gt;
  ],&lt;br&gt;
  "calculation_status": "verified",&lt;br&gt;
  "evidence_status": "partial",&lt;br&gt;
  "limitations": [&lt;br&gt;
    "Source provenance for one input is unavailable"&lt;br&gt;
  ]&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;This is an illustrative example, not output from an actual workbook. Its purpose is to show how a system can communicate what it knows and what remains uncertain. A schema can enforce required fields, permitted status values, and the structure of cell references. The system can then reject malformed responses or flag references that do not exist in the relevant workbook version.&lt;/p&gt;

&lt;p&gt;However, valid JSON does not prove that an explanation is correct. Structural validation can establish that an answer follows a contract; it cannot establish that the narrative accurately describes the business logic. That requires separate evidence and validation.&lt;br&gt;
Retrieve context according to the question&lt;br&gt;
Sending an entire workbook to a language model is often inefficient. Large files may contain historical worksheets, unrelated calculations, repeated formatting, and data that has no bearing on the question. Instead, context retrieval should follow the task.&lt;/p&gt;

&lt;p&gt;When a user asks what drives a particular output, the system should retrieve the target formula, its relevant dependencies, units, scenario metadata, and available source records. When the question concerns changes between workbook versions, it should compare the relevant formulas, values, and metadata across those versions.&lt;/p&gt;

&lt;p&gt;A question about whether an assumption is reliable requires a different set of evidence. The system may need the source, publication date, geography, definition, and available quality checks. The numerical value alone cannot answer that question.&lt;/p&gt;

&lt;p&gt;This is where spreadsheet context differs from ordinary text retrieval. The system is not merely searching for related passages. It must identify the correct calculation relationships and select evidence that supports the specific question. Retrieval also needs boundaries. Dependency expansion should be limited to relevant parts of the workbook, and incomplete formula chains should be reported explicitly. A system that cannot resolve every relationship should not imply that it has examined the complete model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Treat uncertainty as part of the data model
&lt;/h2&gt;

&lt;p&gt;Consider a construction-cost assumption with no recorded source date or geographic reference. The copilot may still be able to explain how the assumption affects development profit. It cannot establish from that workbook alone whether the assumption is current or appropriate for the project. Three questions must remain distinct: what the calculation produces, whether the underlying evidence is reliable, and whether the resulting project outcome is acceptable.&lt;/p&gt;

&lt;p&gt;The first can often be answered through model logic. The second requires appropriate supporting evidence. The third involves professional judgment and decision-making beyond the calculation itself. Combining all three into a single confidence score would conceal important differences. Instead, the system should report missing provenance, unresolved references, conflicting inputs, and uncertain calculation freshness in explicit terms. If the workbook does not establish something, the explanation should not invent a plausible answer to fill the gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test the failure cases, not just the successful examples
&lt;/h2&gt;

&lt;p&gt;A spreadsheet copilot may perform well on straightforward questions while failing on the cases that matter most. Testing should therefore examine whether it handles cross-sheet dependencies correctly, distinguishes hard-coded values from formulas, detects stale results, respects scenario selection, and reports missing source information.&lt;/p&gt;

&lt;p&gt;It should also be tested against renamed worksheets, broken references, formula errors, ambiguous labels, and mismatches between the workbook version and the evidence supplied to the model.&lt;/p&gt;

&lt;p&gt;These tests measure different properties. Retrieval accuracy determines whether the system found the right cells. Calculation correctness determines whether the numerical result is valid under the specified calculation process. Explanation fidelity determines whether the narrative matches the available evidence. Uncertainty handling determines whether the system acknowledges what it cannot establish. A single overall accuracy score can hide failures in any one of these areas.&lt;/p&gt;

&lt;p&gt;The implementation should begin with a limited set of workbook structures and question types. Each expansion should follow testing of the new structures and their failure cases, rather than an assumption that support for one workbook implies support for spreadsheets generally.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical engineering sequence
&lt;/h2&gt;

&lt;p&gt;A first implementation should start by extracting and normalizing workbook contents. It can then resolve supported formula references, build dependency relationships, establish calculation status, and retrieve the context needed for a particular question.&lt;/p&gt;

&lt;p&gt;Only after those steps should the language model generate an explanation. The resulting response should be checked against the supplied evidence, its schema, the relevant workbook version, and the calculation status. Material explanations should remain subject to human review before being used in consequential decisions.&lt;/p&gt;

&lt;p&gt;This sequence does not eliminate every error. It makes errors easier to detect, isolate, and investigate because extraction, calculation, retrieval, and explanation have distinct responsibilities.&lt;/p&gt;

&lt;p&gt;It also makes limitations visible. If a formula cannot be resolved, a calculation cannot be verified, or source information is missing, the system can report that specific limitation instead of producing a confident but unsupported answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The hard part of an AI spreadsheet copilot is not describing a number. It is establishing where the number came from, which assumptions affect it, whether the calculation is current, and what the available evidence can actually support.&lt;/p&gt;

&lt;p&gt;That requires structured workbook context, explicit dependency relationships, a calculation process separate from language generation, and validation that goes beyond checking whether a response is well formed.&lt;/p&gt;

&lt;p&gt;For financial modelling and real estate feasibility analysis, these distinctions are particularly important. A fluent explanation may sound convincing, but a traceable explanation gives an analyst something they can inspect, challenge, and verify. The objective should not be to make every answer sound certain. It should be to make every answer accountable to the evidence.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Structured Outputs for AI-Generated Financial Models: Schemas Before Spreadsheets</title>
      <dc:creator>FeasibilityproAI  Analysis</dc:creator>
      <pubDate>Sat, 03 Oct 2026 06:04:37 +0000</pubDate>
      <link>https://dev.to/feasibilityproaiai/structured-outputs-for-ai-generated-financial-models-schemas-before-spreadsheets-3e0h</link>
      <guid>https://dev.to/feasibilityproaiai/structured-outputs-for-ai-generated-financial-models-schemas-before-spreadsheets-3e0h</guid>
      <description>&lt;p&gt;Generating a financial model with an LLM is not primarily a spreadsheet-generation problem. It is a data-contract problem. When an LLM is asked to create a financial model directly in Excel, several important decisions can become implicit. What is an input? Which numbers are assumptions? Which values came from external evidence? Which numbers are calculated? What units are being used? Which fields are mandatory?&lt;/p&gt;

&lt;p&gt;A spreadsheet can represent all of these things, but it is not necessarily the best place to define the contract between an LLM and a financial-modeling system. A more reliable approach is to first represent the model as structured data, validate that structure, perform deterministic calculations, and only then render the result into a spreadsheet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the spreadsheet should not be the first output
&lt;/h2&gt;

&lt;p&gt;Consider a simple development model with inputs such as gross floor area, saleable area, selling price, construction cost, professional fees, financing assumptions, and development timing.&lt;/p&gt;

&lt;p&gt;A prompt such as:&lt;br&gt;
Create an Excel development feasibility model from these assumptions. may produce a workbook that looks reasonable. That does not mean the model is correct.&lt;/p&gt;

&lt;p&gt;For example, construction cost might be calculated using gross floor area:&lt;/p&gt;

&lt;p&gt;construction_cost = GFA × construction_cost_per_sqm&lt;/p&gt;

&lt;p&gt;But another implementation could use saleable area:&lt;br&gt;
construction_cost = saleable_area × construction_cost_per_sqm&lt;br&gt;
Both can result in valid Excel formulas.&lt;/p&gt;

&lt;p&gt;The difference is a modelling decision, not a spreadsheet-formatting decision. The same problem occurs with percentages, currencies, time periods, unit conversions, missing assumptions, and the distinction between user inputs and derived values.&lt;br&gt;
The system needs to represent those decisions explicitly before Excel becomes involved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with a structured model specification
&lt;/h2&gt;

&lt;p&gt;A useful intermediate representation can describe the financial model without depending on a particular spreadsheet.&lt;br&gt;
For example:&lt;br&gt;
{&lt;br&gt;
  "model": {&lt;br&gt;
    "name": "development_feasibility",&lt;br&gt;
    "currency": "USD",&lt;br&gt;
    "period": "monthly"&lt;br&gt;
  },&lt;br&gt;
  "inputs": [&lt;br&gt;
    {&lt;br&gt;
      "id": "gfa",&lt;br&gt;
      "value": 25000,&lt;br&gt;
      "unit": "sqm",&lt;br&gt;
      "source_type": "user_input"&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "id": "construction_cost",&lt;br&gt;
      "value": 1800,&lt;br&gt;
      "unit": "USD/sqm",&lt;br&gt;
      "source_type": "assumption"&lt;br&gt;
    }&lt;br&gt;
  ],&lt;br&gt;
  "calculations": [&lt;br&gt;
    {&lt;br&gt;
      "id": "construction_cost_total",&lt;br&gt;
      "formula": "gfa * construction_cost",&lt;br&gt;
      "unit": "USD"&lt;br&gt;
    }&lt;br&gt;
  ]&lt;br&gt;
}&lt;br&gt;
The representation is deliberately simple. The important part is that the model's meaning exists independently of the workbook. The application can validate the structure before any spreadsheet is generated. It can also determine whether a calculation references a known input and whether the units and expected data types are consistent.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a schema actually gives you
&lt;/h2&gt;

&lt;p&gt;JSON Schema is useful because it defines the expected structure of the data. A schema can require that value is a number, that unit is a string, and that source_type belongs to an approved set of values.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
{&lt;br&gt;
  "type": "object",&lt;br&gt;
  "properties": {&lt;br&gt;
    "id": {&lt;br&gt;
      "type": "string"&lt;br&gt;
    },&lt;br&gt;
    "value": {&lt;br&gt;
      "type": "number"&lt;br&gt;
    },&lt;br&gt;
    "unit": {&lt;br&gt;
      "type": "string"&lt;br&gt;
    },&lt;br&gt;
    "source_type": {&lt;br&gt;
      "type": "string",&lt;br&gt;
      "enum": [&lt;br&gt;
        "user_input",&lt;br&gt;
        "assumption",&lt;br&gt;
        "verified_evidence"&lt;br&gt;
      ]&lt;br&gt;
    }&lt;br&gt;
  },&lt;br&gt;
  "required": [&lt;br&gt;
    "id",&lt;br&gt;
    "value",&lt;br&gt;
    "unit",&lt;br&gt;
    "source_type"&lt;br&gt;
  ],&lt;br&gt;
  "additionalProperties": false&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;This prevents the model from returning something structurally invalid, such as a text description where a numeric value is required. Modern structured-output APIs can use JSON Schema to constrain model responses. OpenAI's current documentation also distinguishes schema-constrained structured outputs from simply requesting valid JSON. But schema validation has a clear limit.&lt;/p&gt;

&lt;p&gt;It can establish that:&lt;br&gt;
{&lt;br&gt;
  "construction_cost": 1800&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;contains a number. It cannot establish that 1800 is the correct construction-cost assumption for a particular project. That requires evidence or professional judgement. This distinction is important when designing systems for financial modelling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate structural validation from model validation
&lt;/h2&gt;

&lt;p&gt;There should be more than one validation layer. The first layer checks the structure of the response. It can validate required fields, data types, enumerations, object structure, and permitted properties.&lt;br&gt;
The second layer checks whether the proposed model makes sense. It can check units, dependencies, calculation references, period consistency, missing assumptions, sign conventions, and other modelling rules.&lt;/p&gt;

&lt;p&gt;A response can pass the first layer and still fail the second. For example, this is structurally valid:&lt;br&gt;
{&lt;br&gt;
  "gfa": 25000,&lt;br&gt;
  "construction_cost": 1800,&lt;br&gt;
  "currency": "USD"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;But if the calculation engine expects construction cost in USD per square foot, the model has a semantic problem even though every field has the correct basic data type. A schema therefore should not be treated as a financial-model validator. It is one part of the validation system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep deterministic calculations deterministic
&lt;/h2&gt;

&lt;p&gt;LLMs are useful for interpreting natural-language instructions and converting them into structured representations. They are less appropriate as the final authority for calculations that can be expressed deterministically.&lt;/p&gt;

&lt;p&gt;Suppose the model specification contains:&lt;br&gt;
gfa = 25,000 sqm&lt;br&gt;
construction_cost = 1,800 USD/sqm&lt;br&gt;
The calculation:&lt;br&gt;
25,000 × 1,800&lt;br&gt;
does not need probabilistic reasoning.&lt;/p&gt;

&lt;p&gt;The calculation engine should perform it. This separation makes the system easier to test because the calculation can be evaluated independently of the language model. It also makes changes easier to trace. If the construction-cost assumption changes, the system can identify the affected calculation rather than relying on the LLM to regenerate an entire workbook.&lt;/p&gt;

&lt;h2&gt;
  
  
  Excel becomes the presentation layer
&lt;/h2&gt;

&lt;p&gt;Excel remains useful because financial professionals can inspect formulas, modify assumptions, test scenarios, and work with a familiar interface. The important design decision is not to remove Excel. It is to avoid making Excel the only representation of the model.&lt;br&gt;
The Excel JavaScript API provides ranges for reading and writing values and formulas. Microsoft's documentation describes Range as the basic object for working with cells and contiguous blocks, with separate values and formulas properties. That means a validated model specification can be translated into a workbook in a controlled way.&lt;/p&gt;

&lt;p&gt;For example, the renderer might write an input value to a specific range and write a formula to another range.&lt;br&gt;
const inputRange = worksheet.getRange("B5");&lt;br&gt;
inputRange.values = [[25000]];&lt;/p&gt;

&lt;p&gt;const outputRange = worksheet.getRange("B10");&lt;br&gt;
outputRange.formulas = [["=B5*B6"]];&lt;/p&gt;

&lt;p&gt;The important point is that the formula is being generated from an already validated model definition. The LLM is not deciding what every spreadsheet cell should contain during workbook construction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Provenance should be part of the data
&lt;/h2&gt;

&lt;p&gt;Financial models contain different kinds of numbers. A user-provided input is not the same thing as an external market observation. An assumption is not the same thing as a calculated output. Those distinctions should remain visible in the structured representation.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
{&lt;br&gt;
  "id": "sale_price",&lt;br&gt;
  "value": 4200,&lt;br&gt;
  "unit": "USD/sqm",&lt;br&gt;
  "source_type": "verified_evidence",&lt;br&gt;
  "source_id": "market_source_017"&lt;br&gt;
}&lt;br&gt;
is materially different from:&lt;br&gt;
{&lt;br&gt;
  "id": "sale_price",&lt;br&gt;
  "value": 4200,&lt;br&gt;
  "unit": "USD/sqm",&lt;br&gt;
  "source_type": "assumption"&lt;br&gt;
}&lt;br&gt;
The numeric value is identical. The provenance is not. A system should also avoid allowing the LLM to invent source identifiers. If a source identifier represents external evidence, it should come from the evidence layer or from an explicitly supplied source. Otherwise the system can create the appearance of provenance without actually having verifiable provenance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do not make the schema a second spreadsheet
&lt;/h2&gt;

&lt;p&gt;There is a temptation to put everything into the schema.&lt;br&gt;
Every cell.&lt;br&gt;
Every formula.&lt;br&gt;
Every formatting property.&lt;br&gt;
Every Excel address.&lt;br&gt;
Every chart.&lt;br&gt;
That creates another problem.&lt;br&gt;
The schema should represent the meaning of the financial model rather than reproduce the entire workbook.&lt;br&gt;
This is useful:&lt;br&gt;
revenue = units × price_per_unit&lt;br&gt;
This is implementation detail:&lt;br&gt;
cell = H47&lt;br&gt;
formula = "=SUM(H31:H46)"&lt;br&gt;
font = "Calibri"&lt;br&gt;
font_size = 11&lt;/p&gt;

&lt;p&gt;The first describes model logic. The second describes spreadsheet presentation. Keeping those concerns separate makes the system easier to maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Schema changes should be treated like API changes
&lt;/h2&gt;

&lt;p&gt;The model schema will evolve.&lt;br&gt;
A first version might contain:&lt;br&gt;
gfa&lt;br&gt;
construction_cost&lt;br&gt;
selling_price&lt;br&gt;
A later version might introduce:&lt;br&gt;
gfa&lt;br&gt;
saleable_area&lt;br&gt;
construction_cost&lt;br&gt;
selling_price&lt;br&gt;
phasing&lt;br&gt;
If older model specifications cannot be identified or interpreted after a schema change, reproducibility becomes difficult.&lt;br&gt;
A simple version field can help:&lt;br&gt;
{&lt;br&gt;
  "schema_version": "1.2"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Schema changes can then be tested in the same way that API changes are tested. Maintain representative model fixtures and validate them whenever the schema or calculation engine changes. This is particularly important when an LLM is involved because the model may produce different structures as prompts, schemas, or model versions change.&lt;/p&gt;

&lt;h2&gt;
  
  
  What structured outputs do not solve
&lt;/h2&gt;

&lt;p&gt;Structured outputs do not make the underlying financial assumptions correct.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They do not verify market evidence.&lt;/li&gt;
&lt;li&gt;They do not determine whether a comparable is appropriate.&lt;/li&gt;
&lt;li&gt;They do not establish that a construction-cost assumption is realistic.&lt;/li&gt;
&lt;li&gt;They do not replace review of development logic.&lt;/li&gt;
&lt;li&gt;They do not make an LLM a financial analyst.&lt;/li&gt;
&lt;li&gt;Their value is more specific.&lt;/li&gt;
&lt;li&gt;They create a stronger boundary between probabilistic language generation and deterministic software.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That boundary makes the system easier to validate, test, debug, and audit.&lt;/p&gt;

&lt;h2&gt;
  
  
  The practical rule
&lt;/h2&gt;

&lt;p&gt;For AI-generated financial models, the useful principle is simple. Let the LLM interpret the request and propose a structured representation. Validate that representation before using it. Keep material calculations deterministic. Preserve the provenance of important inputs. Use Excel to expose the resulting model to the professional user. The interesting engineering question is therefore not whether an LLM can create an Excel file.&lt;/p&gt;

&lt;p&gt;It can.&lt;/p&gt;

&lt;p&gt;The more important question is whether the system can explain what each material number represents, where the number came from, how it was calculated, and which assumptions affect it. That is why structured outputs should come before spreadsheets. AI-Assisted. Human technical review required before publication.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>llm</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Human-in-the-Loop Validation for AI-Generated Financial Models</title>
      <dc:creator>FeasibilityproAI  Analysis</dc:creator>
      <pubDate>Fri, 18 Sep 2026 11:00:03 +0000</pubDate>
      <link>https://dev.to/feasibilityproaiai/human-in-the-loop-validation-for-ai-generated-financial-models-4ean</link>
      <guid>https://dev.to/feasibilityproaiai/human-in-the-loop-validation-for-ai-generated-financial-models-4ean</guid>
      <description>&lt;p&gt;AI can now generate surprisingly complete financial models. Give a sufficiently detailed prompt and a modern AI system can produce assumptions, schedules, formulas, scenario structures, and summary outputs in a fraction of the time that a traditional modelling workflow might require. That changes the bottleneck.&lt;/p&gt;

&lt;p&gt;The difficult part is no longer only building the spreadsheet. It is establishing whether the generated model actually represents the business logic that the modeller intended. This distinction matters because a financial model can be mathematically consistent and still be wrong. A formula can calculate exactly what it was written to calculate while implementing the wrong assumption, applying the wrong timing convention, referencing the wrong cell, or interpreting a business instruction incorrectly.&lt;/p&gt;

&lt;p&gt;That is why human-in-the-loop validation should be treated as part of the architecture of an AI-assisted financial modelling system rather than as a final visual inspection before someone opens the workbook. Recent guidance and research point in the same direction. ICAEW's 2026 discussion of AI-generated financial models recommends treating AI output as a draft that requires close human review, while PwC describes human-led validation as important for checking completeness, accuracy, reliability, business alignment, and source quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generation and validation are different problems
&lt;/h2&gt;

&lt;p&gt;A useful way to design these systems is to separate model generation from model validation.&lt;br&gt;
The generation process might take natural-language requirements, source documents, assumptions, or structured inputs and convert them into a financial model. The resulting workbook or structured model can then be passed through deterministic calculations and automated validation before a human reviewer examines the remaining issues.&lt;br&gt;
Conceptually, the workflow looks like this:&lt;br&gt;
Source data and requirements&lt;br&gt;
            ↓&lt;br&gt;
      AI model generation&lt;br&gt;
            ↓&lt;br&gt;
    Deterministic calculation&lt;br&gt;
            ↓&lt;br&gt;
     Automated validation&lt;br&gt;
            ↓&lt;br&gt;
       Exception review&lt;br&gt;
            ↓&lt;br&gt;
       Human validation&lt;br&gt;
            ↓&lt;br&gt;
       Approved model&lt;/p&gt;

&lt;p&gt;The important point is that the system does not ask the same component to generate the model and then declare its own output correct.&lt;/p&gt;

&lt;p&gt;The AI system can propose the model structure and logic, but independent checks should establish whether the resulting model satisfies predefined requirements. The human reviewer then deals with questions that cannot be resolved reliably through mechanical checks alone. This separation becomes especially important when the model contains assumptions about timing, business rules, accounting treatment, project phases, or scenario interpretation.&lt;/p&gt;

&lt;h2&gt;
  
  
  A model can be internally consistent and still be wrong
&lt;/h2&gt;

&lt;p&gt;Consider a simplified development model with land cost, construction cost, development period, revenue, operating expenses, financing, and an exit value. Suppose the AI generates all the formulas correctly from a syntactic perspective. Every cell contains a valid formula, there are no broken references, and the workbook recalculates without errors.&lt;/p&gt;

&lt;p&gt;That does not establish that the model is correct. Imagine the project is supposed to generate operating revenue only after completion, but the generated model begins recognizing revenue during construction. The formulas may still be perfectly valid. The spreadsheet may balance. The summary page may display plausible-looking numbers.&lt;/p&gt;

&lt;p&gt;The error is semantic rather than syntactic. The same problem can occur when an AI system interprets a cost assumption incorrectly, uses a different definition of area than the source data, applies an assumption to the wrong period, or changes the dependency between two schedules.&lt;/p&gt;

&lt;p&gt;This is one reason human review remains important. A human reviewer can ask whether the model represents the intended scenario rather than merely whether the spreadsheet executes successfully.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validation should happen at several levels
&lt;/h2&gt;

&lt;p&gt;A robust validation process should not rely on a single test. The first level is structural validation. This checks whether the generated model contains the expected components and whether those components are connected in a sensible way. Required assumptions should be present, expected schedules should exist, output sections should be populated, and unexpected hard-coded values or missing dependencies should be flagged.&lt;/p&gt;

&lt;p&gt;The second level is formula validation. Here the system checks whether formulas exist where they should, whether formulas are consistent across periods, whether references are valid, and whether unexpected changes appear in repeated calculation structures. Checks for broken references, circular references, inconsistent ranges, and formulas replaced by hard-coded values can often be automated.&lt;/p&gt;

&lt;p&gt;The third level is numerical validation. Instead of asking whether an output "looks reasonable," the system tests known relationships within the model. For example, if total revenue is defined as the sum of periodic revenue, that relationship can be tested directly. If total project cost is defined as the sum of several cost categories, the reconciliation can be performed independently of the AI that generated the workbook.&lt;/p&gt;

&lt;p&gt;The fourth level is semantic validation, and this is where human judgement becomes particularly important. The reviewer needs to establish whether the assumptions and calculations correspond to the intended business scenario. Automated tests can tell you that a formula works. They cannot always tell you that it is the right formula for the question being asked.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deterministic checks are particularly valuable
&lt;/h2&gt;

&lt;p&gt;Financial modelling contains many relationships that do not need probabilistic judgement.&lt;br&gt;
If a model specifies that:&lt;br&gt;
Total Cost = Land Cost + Construction Cost + Other Costs&lt;/p&gt;

&lt;p&gt;the validation system can calculate both sides independently and compare them.&lt;br&gt;
If:&lt;br&gt;
Cash Balance[t] =&lt;br&gt;
Cash Balance[t-1]&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cash Inflows[t]&lt;/li&gt;
&lt;li&gt;Cash Outflows[t]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;the system can test that relationship for every relevant period.&lt;br&gt;
If a revenue schedule is driven by units and price:&lt;br&gt;
Revenue[t] = Units[t] × Price[t]&lt;/p&gt;

&lt;p&gt;The validation process can independently recalculate the expected result. These tests are valuable because they establish explicit pass/fail conditions. The validation result does not depend on another language-model response saying that the number "appears reasonable."&lt;/p&gt;

&lt;p&gt;For financial models, this distinction is important. Where a calculation has a clearly defined mathematical relationship, the validation system should use that relationship as the reference rather than asking another probabilistic model to judge the answer.&lt;/p&gt;

&lt;p&gt;Recent work on financial AI validation makes a similar argument: benchmark performance alone is not sufficient evidence for a production financial AI system, because the complete system also includes data, retrieval, generation, tool use, orchestration, monitoring, and human escalation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Provenance should travel with the assumption
&lt;/h2&gt;

&lt;p&gt;Another important part of validation is provenance. When an AI-generated model contains an assumption such as a construction cost, occupancy rate, price, interest rate, or development period, the reviewer should be able to understand where that value originated.&lt;br&gt;
For example, instead of simply storing:&lt;br&gt;
Construction Cost = 125&lt;/p&gt;

&lt;p&gt;a model could maintain metadata such as:&lt;br&gt;
Value: 125&lt;br&gt;
Unit: USD / sq ft&lt;br&gt;
Source: User-provided assumption&lt;br&gt;
Status: Confirmed&lt;/p&gt;

&lt;p&gt;The exact implementation will vary between systems, but the principle is straightforward: important assumptions should be traceable. This becomes more important when AI systems transform information before placing it into a model. If an input has been extracted from a document, inferred from context, converted between units, or derived from another assumption, the validation process should make that transformation visible.&lt;/p&gt;

&lt;p&gt;The OECD's 2026 work on AI in finance similarly emphasizes traceability, validation, monitoring, and retention of model instances so that problematic behaviour can be investigated later rather than disappearing when a system is updated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do not use AI as the only validator
&lt;/h2&gt;

&lt;p&gt;One of the easiest mistakes to make is to build a workflow that looks like this:&lt;br&gt;
AI generates model&lt;br&gt;
        ↓&lt;br&gt;
AI reviews model&lt;br&gt;
        ↓&lt;br&gt;
Model approved&lt;/p&gt;

&lt;p&gt;A second AI pass can certainly be useful. It can identify missing sections, obvious inconsistencies, unusual formulas, or potential errors. But it should not be the sole approval mechanism.&lt;/p&gt;

&lt;p&gt;If the same underlying reasoning process can introduce an error, asking a similar system to validate the output does not provide the same level of independence as an external deterministic check or human review.&lt;/p&gt;

&lt;p&gt;A stronger architecture separates responsibilities:&lt;br&gt;
                 ┌─────────────────┐&lt;br&gt;
                  │  AI generation  │&lt;br&gt;
                  └────────┬────────┘&lt;br&gt;
                           ↓&lt;br&gt;
                  ┌─────────────────┐&lt;br&gt;
                  │  Calculations   │&lt;br&gt;
                  │  and rules      │&lt;br&gt;
                  └────────┬────────┘&lt;br&gt;
                           ↓&lt;br&gt;
                  ┌─────────────────┐&lt;br&gt;
                  │ Automated       │&lt;br&gt;
                  │ validation      │&lt;br&gt;
                  └────────┬────────┘&lt;br&gt;
                           ↓&lt;br&gt;
                  ┌─────────────────┐&lt;br&gt;
                  │ Human review    │&lt;br&gt;
                  └────────┬────────┘&lt;br&gt;
                           ↓&lt;br&gt;
                    Approval state&lt;/p&gt;

&lt;p&gt;This does not eliminate AI-generated errors. It creates multiple opportunities for those errors to be detected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Human review should focus on exceptions
&lt;/h2&gt;

&lt;p&gt;Human-in-the-loop does not mean that a modeller should manually inspect every cell in every generated workbook. That would remove much of the efficiency gained from automation. A better design is to automate the repeatable checks and send exceptions to a human reviewer.&lt;/p&gt;

&lt;p&gt;A validation report might therefore look like:&lt;br&gt;
Structural checks: PASS&lt;br&gt;
Formula checks: PASS&lt;br&gt;
Reconciliation checks: PASS&lt;/p&gt;

&lt;p&gt;Missing assumptions: 2&lt;br&gt;
Unexpected formula changes: 1&lt;br&gt;
Timing interpretation: REVIEW REQUIRED&lt;br&gt;
Source provenance: 1 item unresolved&lt;br&gt;
The reviewer can then concentrate on the areas where judgement is actually required.&lt;br&gt;
This is a more practical division of labour. Computers are well suited to repeating deterministic tests across thousands of cells and periods. Humans are better positioned to resolve ambiguous requirements, interpret business context, and challenge assumptions. PwC similarly recommends tailoring the level of human review to the complexity and risk of the use case, with more rigorous validation for higher-stakes financial outputs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test the model by changing its assumptions
&lt;/h2&gt;

&lt;p&gt;Validation should not stop with the base case. A useful model should respond coherently when important assumptions change. Suppose construction cost increases by 10%. The model should show the corresponding effect on total development cost and any downstream cash-flow metrics that depend on it.&lt;/p&gt;

&lt;p&gt;Suppose the development period changes. Timing-sensitive costs and revenues should move accordingly. Suppose an input is set to zero. If that input is genuinely part of the calculation chain, the relevant outputs should respond. These tests can expose broken dependencies that may not be visible when reviewing the base case alone.&lt;/p&gt;

&lt;p&gt;The purpose is not to determine whether a particular scenario is commercially attractive. The purpose is to verify that the model behaves according to its defined logic when its inputs change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Define the approval state explicitly
&lt;/h2&gt;

&lt;p&gt;Another useful design decision is to make model status explicit. A generated model should not automatically become an approved model.&lt;/p&gt;

&lt;p&gt;A simple state machine could be:&lt;br&gt;
GENERATED&lt;br&gt;
    ↓&lt;br&gt;
AUTOMATED VALIDATION&lt;br&gt;
    ↓&lt;br&gt;
 ┌───────────────┐&lt;br&gt;
 │               │&lt;br&gt;
PASS            FAIL&lt;br&gt;
 │               │&lt;br&gt;
 ↓               ↓&lt;br&gt;
HUMAN REVIEW   REPAIR&lt;br&gt;
 │               │&lt;br&gt;
 ├── APPROVED ───┘&lt;br&gt;
 │&lt;br&gt;
 └── CHANGES REQUIRED&lt;br&gt;
This creates an audit trail around the model itself. It also prevents a common operational problem: treating an AI-generated artifact as if it has already passed the organization's review process simply because it exists and produces numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The role of the human is changing
&lt;/h2&gt;

&lt;p&gt;Human-in-the-loop validation does not necessarily mean that AI has failed to automate financial modelling. It means that the nature of the human role changes.&lt;/p&gt;

&lt;p&gt;Instead of spending most of the time manually constructing repetitive formulas, a modeller may spend more time defining assumptions, establishing validation rules, reviewing exceptions, testing model behaviour, and challenging the interpretation of the generated model.&lt;/p&gt;

&lt;p&gt;That shift is consistent with recent industry research. The Financial Modeling Institute's 2026 survey of 63 financial-modelling professionals across 26 countries found that none of the respondents said they would be confident relying on an AI-generated financial model for a high-stakes business decision without independent human review.&lt;/p&gt;

&lt;p&gt;The implication is not that AI-generated modelling has no value. It is that generation and approval should be treated as different stages of the workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical validation framework
&lt;/h2&gt;

&lt;p&gt;For an AI-assisted financial modelling system, a useful validation framework can therefore combine five elements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First, validate structure.&lt;/strong&gt; Confirm that the model contains the expected inputs, schedules, calculations, and outputs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second, validate formulas and relationships.&lt;/strong&gt; Check references, repeated formulas, reconciliations, dependencies, and other deterministic relationships independently of the generation process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Third, validate provenance.&lt;/strong&gt; Make important assumptions traceable to their source and record transformations where relevant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fourth, test behaviour.&lt;/strong&gt; Change important assumptions and confirm that the model responds according to its defined logic rather than merely producing a plausible base case.&lt;/p&gt;

&lt;p&gt;Fifth, require human approval for unresolved semantic questions. The reviewer should be able to challenge assumptions, interpretation, timing, and other aspects that automated checks cannot reliably resolve. This produces a more useful definition of validation than simply checking whether a spreadsheet opens without errors.&lt;/p&gt;

&lt;h2&gt;
  
  
  The goal is controlled automation
&lt;/h2&gt;

&lt;p&gt;The strongest argument for human-in-the-loop validation is not that humans are always better than AI or that AI should never be trusted. The practical argument is that different parts of a financial modelling workflow have different verification requirements.&lt;/p&gt;

&lt;p&gt;AI can be useful for generating structures, translating requirements into model components, drafting formulas, and accelerating repetitive work. Deterministic systems can test calculations and reconciliations. Provenance mechanisms can make assumptions traceable. Automated validation can identify exceptions. Human reviewers can resolve ambiguity and determine whether the model represents the intended business logic.&lt;/p&gt;

&lt;p&gt;The result is a workflow in which the model does not become trusted merely because an AI system generated it. It becomes reviewable because its assumptions can be traced, its calculations can be tested, its behaviour can be challenged, and its unresolved questions can be presented to a human before approval. For financial modelling, that distinction is fundamental.&lt;/p&gt;

&lt;p&gt;Generation produces a model. Validation produces evidence about the model. Human review determines whether that evidence is sufficient for the intended use.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Keep the LLM Out of the Math: Deterministic Boundaries for Financial Modelling Agents</title>
      <dc:creator>FeasibilityproAI  Analysis</dc:creator>
      <pubDate>Fri, 11 Sep 2026 09:57:15 +0000</pubDate>
      <link>https://dev.to/feasibilityproaiai/keep-the-llm-out-of-the-math-deterministic-boundaries-for-financial-modelling-agents-5cl7</link>
      <guid>https://dev.to/feasibilityproaiai/keep-the-llm-out-of-the-math-deterministic-boundaries-for-financial-modelling-agents-5cl7</guid>
      <description>&lt;p&gt;Large language models are increasingly being used as interfaces to financial software. Instead of opening a spreadsheet and navigating through dozens of tabs, a user can describe a change in ordinary language and ask an AI system to identify the relevant assumption, run a scenario, compare two cases, or explain why an output changed. That interaction model is useful because financial models are often difficult to navigate even for experienced users, particularly when the underlying workbook contains many assumptions, formulas, dependencies, and scenario-specific adjustments.&lt;/p&gt;

&lt;p&gt;The architectural problem begins when the language model is also made responsible for performing the financial calculation itself.&lt;/p&gt;

&lt;p&gt;That may seem reasonable at first. The model understands the request, it has access to the relevant numbers, and modern LLMs can perform arithmetic. For a simple calculation, the distinction may not matter much. In a real financial model, however, the calculation is rarely an isolated operation. A single assumption can affect a long chain of formulas, and the correctness of the final result depends not only on arithmetic but also on which assumptions were selected, how they were interpreted, which dependencies were recalculated, and whether the resulting state is consistent with the model.&lt;/p&gt;

&lt;p&gt;This is why a financial AI system should separate language reasoning from numerical execution.&lt;/p&gt;

&lt;p&gt;The language model should be responsible for understanding the user's intent and translating that intent into a structured operation. A deterministic calculation layer should then validate the operation, execute the relevant formulas, and return structured results. The language model can come back into the process afterward to explain those results in terms that a human can understand.&lt;/p&gt;

&lt;p&gt;That division of responsibility is not about pretending that LLMs cannot do mathematics. It is about giving each part of the system a job that can be tested and trusted independently.&lt;/p&gt;

&lt;h2&gt;
  
  
  The difficult part is usually not the arithmetic
&lt;/h2&gt;

&lt;p&gt;Consider a request such as:&lt;br&gt;
What happens to the project if construction costs increase by 8%?&lt;br&gt;
The arithmetic implied by the question is straightforward. If the relevant construction cost is $10 million, an 8% increase produces $10.8 million.&lt;/p&gt;

&lt;p&gt;The difficult part is determining what the user actually means by "construction costs" in the context of the model.&lt;/p&gt;

&lt;p&gt;The workbook might contain total construction cost, construction cost per square metre, separate hard and soft costs, costs distributed across multiple development periods, or different cost assumptions for different scenarios. The model might also calculate financing costs from the timing and amount of construction expenditure. If the assumption changes, those financing costs may need to change as well. A scenario may need to be created instead of modifying the base case.&lt;/p&gt;

&lt;p&gt;None of those questions can be answered by arithmetic alone. They are interpretation and model-structure questions.&lt;/p&gt;

&lt;p&gt;Once the correct variable has been identified and the intended operation has been validated, however, there is little reason for the language model to calculate the resulting financial outputs itself. The application already has a place where those calculations can be performed deterministically.&lt;/p&gt;

&lt;p&gt;This distinction becomes particularly important because recent evaluations of spreadsheet agents show that the hard part of real financial spreadsheet work is not simply generating an individual formula. End-to-end tasks involve multiple worksheets, dependencies, debugging, formatting, and selecting the correct cells or model components. SpreadsheetBench 2, for example, evaluates agents on realistic multi-sheet business workflows and reports substantial reliability gaps in current systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  A financial agent should translate intent into an operation
&lt;/h2&gt;

&lt;p&gt;A useful way to think about the LLM is as a translation layer.&lt;br&gt;
The user speaks in terms of business intent:&lt;br&gt;
Increase construction cost by 8% and show me the effect on the project.&lt;br&gt;
The application needs something much more precise:&lt;br&gt;
{&lt;br&gt;
  "operation": "scenario_change",&lt;br&gt;
  "target": "construction_cost",&lt;br&gt;
  "change_type": "relative",&lt;br&gt;
  "change": 0.08&lt;br&gt;
}&lt;br&gt;
This structured object should not immediately be treated as a valid instruction.&lt;br&gt;
It is a proposed operation that needs to pass through validation.&lt;br&gt;
The system can check whether construction_cost exists in the model, whether the operation supports a relative change, whether the percentage is expressed in the expected format, and whether the user is asking to create a scenario or modify an existing assumption. It can then pass the validated operation to the calculation layer.&lt;/p&gt;

&lt;p&gt;This creates a useful separation:&lt;/p&gt;

&lt;p&gt;Natural-language request&lt;br&gt;
          |&lt;br&gt;
          v&lt;br&gt;
    LLM interpretation&lt;br&gt;
          |&lt;br&gt;
          v&lt;br&gt;
  Structured operation&lt;br&gt;
          |&lt;br&gt;
          v&lt;br&gt;
      Validation&lt;br&gt;
          |&lt;br&gt;
          v&lt;br&gt;
 Deterministic calculation&lt;br&gt;
          |&lt;br&gt;
          v&lt;br&gt;
    Structured result&lt;br&gt;
          |&lt;br&gt;
          v&lt;br&gt;
    LLM explanation&lt;/p&gt;

&lt;p&gt;The LLM therefore does not disappear from the workflow. It simply stops being the authority for the numerical result.&lt;/p&gt;

&lt;p&gt;That distinction is important because it gives engineers something concrete to test. The interpretation step can be evaluated against expected structured operations, while the calculation engine can be tested independently using known inputs and outputs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Structured output does not solve the reliability problem by itself
&lt;/h2&gt;

&lt;p&gt;One of the easiest mistakes to make is assuming that structured output automatically makes an AI system reliable.&lt;/p&gt;

&lt;p&gt;It does not. A model can return perfectly valid JSON that describes a completely inappropriate operation.&lt;br&gt;
For example:&lt;br&gt;
{&lt;br&gt;
  "operation": "set_assumption",&lt;br&gt;
  "target": "construction_cost",&lt;br&gt;
  "value": -5000000&lt;br&gt;
}&lt;br&gt;
The JSON is valid. The instruction may be nonsensical.&lt;/p&gt;

&lt;p&gt;The application therefore needs to distinguish between syntactic validity and semantic validity.&lt;/p&gt;

&lt;p&gt;Syntactic validation answers questions such as whether the required fields exist and whether their data types are correct. Semantic validation asks whether the operation makes sense in the context of the actual financial model.&lt;/p&gt;

&lt;p&gt;That second layer might check whether the target variable exists, whether the unit is compatible with the variable, whether the value falls within an acceptable range, whether the requested operation is supported for the current scenario, and whether changing that assumption requires additional calculations to be performed.&lt;/p&gt;

&lt;p&gt;This is also where authorization belongs. If an agent is allowed to change assumptions, the application should decide which operations the user is permitted to perform. The LLM should not determine its own authority simply because it has generated a plausible tool call.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tool design matters more than giving the model more freedom
&lt;/h2&gt;

&lt;p&gt;Agent frameworks often make it easy to expose a large collection of tools to a language model and allow the model to decide what to do next.&lt;/p&gt;

&lt;p&gt;That flexibility is useful for some applications, but financial modelling generally benefits from narrower interfaces.&lt;/p&gt;

&lt;p&gt;Imagine giving an agent a generic spreadsheet-editing function that allows it to select arbitrary cells, change their values, rewrite formulas, and modify formatting. The model may be capable of using such a tool, but every additional degree of freedom increases the number of ways in which an incorrect interpretation can become a damaging state change.&lt;/p&gt;

&lt;p&gt;A better approach is to expose operations that correspond to meaningful financial-model actions.&lt;br&gt;
For example:&lt;br&gt;
get_assumption()&lt;br&gt;
set_assumption()&lt;br&gt;
create_scenario()&lt;br&gt;
calculate_scenario()&lt;br&gt;
compare_scenarios()&lt;br&gt;
get_dependencies()&lt;br&gt;
The difference is subtle but important.&lt;br&gt;
With a generic spreadsheet tool, the model decides both what the user means and how that meaning should be implemented in the workbook.&lt;/p&gt;

&lt;p&gt;With a domain-specific interface, the model decides what operation the user appears to be requesting, while the application determines how that operation is safely executed.&lt;/p&gt;

&lt;p&gt;For example, the model might produce:&lt;br&gt;
{&lt;br&gt;
  "function": "set_assumption",&lt;br&gt;
  "arguments": {&lt;br&gt;
    "scenario": "construction_cost_upside",&lt;br&gt;
    "target": "construction_cost_per_gfa",&lt;br&gt;
    "value": 1850,&lt;br&gt;
    "unit": "USD/m2"&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
The application can then resolve construction_cost_per_gfa, verify the unit, check whether the scenario exists, validate the value, and determine which downstream calculations must be recalculated.&lt;/p&gt;

&lt;p&gt;The agent is still useful, but the financial model retains control of its own state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deterministic calculations are valuable because they can be tested
&lt;/h2&gt;

&lt;p&gt;Moving arithmetic out of the LLM is not enough on its own. The calculation layer must also be engineered properly.&lt;/p&gt;

&lt;p&gt;A deterministic function is valuable because its behaviour can be inspected and tested independently of the language model.&lt;br&gt;
For example:&lt;br&gt;
def development_margin(revenue, total_cost):&lt;br&gt;
    if revenue == 0:&lt;br&gt;
        raise ValueError("Revenue cannot be zero")&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;return (revenue - total_cost) / revenue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The important property here is not that the formula is sophisticated. It is that the function has a clearly defined contract.&lt;/p&gt;

&lt;p&gt;Given the same valid inputs, the function should produce the same result. That allows ordinary software-testing techniques to be applied.&lt;/p&gt;

&lt;p&gt;You can test expected values, invalid inputs, boundary conditions, and changes to the underlying calculation logic. You can also run regression tests against known model cases whenever the calculation engine changes. Scenario testing becomes especially useful.&lt;/p&gt;

&lt;p&gt;If construction cost increases while all other assumptions remain unchanged, the system should produce a predictable direction of change in the relevant outputs. If the model contains financing costs that depend on construction expenditure, those dependencies should be explicitly represented and tested rather than relying on the language model to remember them.&lt;/p&gt;

&lt;p&gt;The calculation engine should therefore be treated as software, not as a hidden extension of the prompt.&lt;br&gt;
Spreadsheet automation makes the distinction even more important&lt;br&gt;
The argument becomes stronger when the AI agent operates directly on spreadsheets.&lt;br&gt;
A spreadsheet is not simply a two-dimensional database of values. It is a computational environment containing formulas, references, dependencies, named ranges, formatting conventions, multiple worksheets, and often business logic that is encoded indirectly through the workbook's structure.&lt;/p&gt;

&lt;p&gt;That creates a much larger surface area for errors. Recent financial spreadsheet benchmarks reinforce this point. WorkstreamBench evaluates agents on end-to-end financial spreadsheet tasks and measures accuracy, formula quality, and format against professional standards. Its results indicate that even strong agents can degrade substantially as workflows move beyond relatively small chains of calculations.&lt;/p&gt;

&lt;p&gt;BlueFin reaches a similar conclusion from another direction. Its benchmark contains challenging professional-finance spreadsheet tasks, and frontier models perform poorly on some of the dynamic-correctness requirements.&lt;/p&gt;

&lt;p&gt;That does not mean spreadsheet agents are useless. It means that "the model can edit the spreadsheet" should not be confused with "the model can reliably maintain the financial logic of the spreadsheet." Those are different capabilities.&lt;/p&gt;

&lt;p&gt;A robust architecture should therefore make the financial model's rules explicit wherever possible and use the LLM to navigate, interpret, and communicate rather than silently becoming the spreadsheet's calculation engine.&lt;/p&gt;

&lt;h2&gt;
  
  
  The number should carry its provenance
&lt;/h2&gt;

&lt;p&gt;There is another reason to separate calculation from language generation: a financial output needs more context than its value.&lt;/p&gt;

&lt;p&gt;Suppose an agent returns:&lt;/p&gt;

&lt;p&gt;Development profit: $12.4 million&lt;/p&gt;

&lt;p&gt;The number may be correct, but a professional user will often have a more important question:&lt;br&gt;
Why is it $12.4 million?&lt;/p&gt;

&lt;p&gt;A useful system should be able to trace that result back through the assumptions and calculations that produced it.&lt;br&gt;
For example:&lt;br&gt;
Development profit&lt;br&gt;
    |&lt;br&gt;
    +-- Revenue&lt;br&gt;
    |     |&lt;br&gt;
    |     +-- Area assumptions&lt;br&gt;
    |     +-- Pricing assumptions&lt;br&gt;
    |&lt;br&gt;
    +-- Development costs&lt;br&gt;
          |&lt;br&gt;
          +-- Construction cost&lt;br&gt;
          +-- Professional fees&lt;br&gt;
          +-- Financing&lt;br&gt;
The implementation does not need to expose this exact diagram to the user, but the underlying system should preserve enough information to reconstruct the dependency chain. That may include the model version, scenario, input values, units, calculation function, source references, and validation results.&lt;/p&gt;

&lt;p&gt;The advantage is not merely auditability. It also makes debugging much easier.If the final result looks wrong, an engineer can determine whether the problem originated with the source assumption, the interpretation of the user's request, the dependency mapping, or the calculation itself.&lt;/p&gt;

&lt;p&gt;Without provenance, all of those failures collapse into one generic problem: "the AI gave the wrong answer."&lt;/p&gt;

&lt;h2&gt;
  
  
  Evidence and assumptions should not be treated as the same thing
&lt;/h2&gt;

&lt;p&gt;This becomes especially important when an AI system retrieves information from external sources.&lt;br&gt;
Imagine an agent finds a market report containing a rental figure.&lt;br&gt;
The retrieved figure is evidence.&lt;br&gt;
It is not automatically a model assumption.&lt;br&gt;
There is a chain of decisions between those two things. The system needs to know what the source actually said, which period it referred to, what geography it covered, what unit it used, and whether the figure is appropriate for the model being constructed.&lt;br&gt;
Only after that assessment should the value become an explicit modelling assumption.&lt;br&gt;
A useful representation might look like:&lt;br&gt;
{&lt;br&gt;
  "evidence": {&lt;br&gt;
    "source": "market_report.pdf",&lt;br&gt;
    "page": 18,&lt;br&gt;
    "metric": "average_rent",&lt;br&gt;
    "period": "2026-Q2",&lt;br&gt;
    "value": 42&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
The model can then contain a separate assumption:&lt;br&gt;
{&lt;br&gt;
  "assumption": {&lt;br&gt;
    "name": "monthly_rent",&lt;br&gt;
    "value": 42,&lt;br&gt;
    "unit": "currency/m2/month",&lt;br&gt;
    "source_reference": "market_report.pdf:p18"&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
The distinction allows someone reviewing the model to challenge either the evidence or the modelling decision without confusing the two.&lt;br&gt;
This is one of the areas where AI systems can otherwise become difficult to audit. A generated answer may look authoritative even though the underlying number passed through several undocumented interpretation steps.&lt;/p&gt;

&lt;h2&gt;
  
  
  The LLM becomes more useful after the calculation
&lt;/h2&gt;

&lt;p&gt;Once the calculation engine has produced a structured result, the language model can return to the workflow.&lt;br&gt;
This is where it can provide substantial value without being responsible for the underlying arithmetic.&lt;br&gt;
Suppose the calculation engine returns:&lt;br&gt;
{&lt;br&gt;
  "scenario": "construction_cost_upside",&lt;br&gt;
  "construction_cost_change": 0.08,&lt;br&gt;
  "profit_change": -1200000,&lt;br&gt;
  "margin_change": -0.047&lt;br&gt;
}&lt;br&gt;
The LLM can explain what happened in context:&lt;br&gt;
The 8% increase in construction cost reduces projected development profit by $1.2 million under this scenario. The model also shows a reduction in margin of approximately 4.7 percentage points. These changes reflect the assumptions and dependencies contained in the current model, so the scenario should be interpreted as a sensitivity to those assumptions rather than as an independent forecast.&lt;br&gt;
The difference is important.&lt;br&gt;
The LLM is not deciding that profit fell by $1.2 million.&lt;br&gt;
The calculation engine has already established that result.&lt;br&gt;
The LLM is translating the result into useful language.&lt;br&gt;
That makes the generated explanation easier to review because every important numerical statement can be traced back to structured output.&lt;/p&gt;

&lt;h2&gt;
  
  
  A good financial agent should be replayable
&lt;/h2&gt;

&lt;p&gt;A useful engineering test for an AI financial workflow is to ask whether another engineer could reproduce the calculation without asking the LLM to perform the reasoning again.&lt;br&gt;
Suppose the system records:&lt;br&gt;
{&lt;br&gt;
  "model_version": "2026.09",&lt;br&gt;
  "scenario": "construction_cost_upside",&lt;br&gt;
  "inputs": {&lt;br&gt;
    "construction_cost": 12500000,&lt;br&gt;
    "revenue": 18000000&lt;br&gt;
  },&lt;br&gt;
  "operations": [&lt;br&gt;
    {&lt;br&gt;
      "function": "apply_relative_change",&lt;br&gt;
      "target": "construction_cost",&lt;br&gt;
      "change": 0.08&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "function": "development_profit",&lt;br&gt;
      "target": "profit"&lt;br&gt;
    }&lt;br&gt;
  ]&lt;br&gt;
}&lt;br&gt;
Another process should be able to take the same model version, inputs, and operations and reproduce the result.&lt;/p&gt;

&lt;p&gt;This property is useful for much more than formal auditing. It helps with debugging, regression testing, incident investigation, and model review.There is growing research specifically around reproducibility and determinism in tool-using financial agents, including work examining whether identical inputs can produce consistent trajectories and evidence-aligned decisions.&lt;/p&gt;

&lt;p&gt;The broader engineering principle is straightforward: if a result matters, the system should retain enough information to reproduce how that result was obtained.&lt;/p&gt;

&lt;h2&gt;
  
  
  Human review becomes more meaningful when the architecture is explicit
&lt;/h2&gt;

&lt;p&gt;"Human in the loop" is often presented as a solution to AI reliability problems, but simply putting a person at the end of an opaque workflow does not necessarily make the workflow safe.&lt;/p&gt;

&lt;p&gt;A reviewer needs something meaningful to inspect.&lt;br&gt;
A well-designed financial agent can expose a chain such as:&lt;br&gt;
User request&lt;br&gt;
     ↓&lt;br&gt;
Interpreted operation&lt;br&gt;
     ↓&lt;br&gt;
Validated target&lt;br&gt;
     ↓&lt;br&gt;
Evidence / assumptions&lt;br&gt;
     ↓&lt;br&gt;
Deterministic calculation&lt;br&gt;
     ↓&lt;br&gt;
Changed outputs&lt;br&gt;
     ↓&lt;br&gt;
Generated explanation&lt;br&gt;
The reviewer can then ask the right question at the right layer.&lt;br&gt;
If the target variable is wrong, the interpretation needs attention.&lt;br&gt;
If the source assumption is unsuitable, the evidence needs attention.&lt;br&gt;
If the formula is wrong, the calculation engine needs attention.&lt;br&gt;
If the calculation is correct but the narrative overstates what it proves, the explanation needs attention.&lt;/p&gt;

&lt;p&gt;That is far more useful than asking someone to read a polished paragraph and decide whether it "looks right."&lt;br&gt;
The architecture also limits the blast radius of an AI mistake&lt;br&gt;
There is a practical reason to keep these boundaries separate. LLMs will make interpretation errors.&lt;/p&gt;

&lt;p&gt;The objective should therefore not be to build a system that assumes the model will never make a mistake. The objective should be to make sure an interpretation error does not automatically become an uncontrolled financial-model mutation.&lt;br&gt;
If the LLM proposes:&lt;br&gt;
construction_cost_per_gfa = 1850 USD/m²&lt;br&gt;
the application can reject it if the unit is incompatible, the variable does not exist, the value is outside an allowed range, or the requested scenario cannot be modified.&lt;/p&gt;

&lt;p&gt;The model has made a mistake, but the system has contained it. This is a much more realistic approach to AI reliability than trying to eliminate every possible model error.&lt;/p&gt;

&lt;h2&gt;
  
  
  The practical rule
&lt;/h2&gt;

&lt;p&gt;For financial modelling agents, the most useful rule is simple:&lt;br&gt;
If a result must be reproducible from the same inputs, the LLM should not be responsible for producing the result.&lt;br&gt;
That does not mean LLMs have no place in financial modelling.&lt;br&gt;
They can be extremely useful for interpreting requests, extracting assumptions from documents, identifying ambiguity, selecting appropriate operations, summarising scenario changes, and explaining model outputs.&lt;/p&gt;

&lt;p&gt;The calculation layer should remain responsible for arithmetic, formula execution, dependency propagation, validation, scenario calculation, and other operations where reproducibility matters.&lt;/p&gt;

&lt;p&gt;The provenance layer should preserve enough information to explain where the inputs came from and how the outputs were produced.&lt;/p&gt;

&lt;p&gt;The human reviewer should be able to inspect the chain rather than simply trusting the final prose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The interesting engineering question is not whether a language model can calculate an eight-percent increase.&lt;/p&gt;

&lt;p&gt;It can.&lt;br&gt;
The harder question is what happens when that calculation becomes one step in a financial model containing hundreds of assumptions, thousands of formulas, cross-sheet dependencies, external evidence, and scenario logic. At that point, asking the LLM to perform everything in one conversational loop creates an unnecessary reliability problem.&lt;/p&gt;

&lt;p&gt;A better architecture gives the language model responsibility for language and interpretation while giving deterministic software responsibility for numerical execution.&lt;/p&gt;

&lt;p&gt;The LLM can translate the user's request into a structured operation. The application can validate that operation against the model. A deterministic calculation engine can execute the relevant formulas. The system can preserve provenance and return structured results. Finally, the LLM can explain those results in language that makes sense to the user.&lt;/p&gt;

&lt;p&gt;The result is not an attempt to make the language model behave like a spreadsheet.&lt;/p&gt;

&lt;p&gt;It is a system in which the language model acts as an intelligent interface to a financial model whose calculations remain explicit, testable, reproducible, and reviewable. For financial AI, that boundary is not a limitation. It is part of the architecture that makes the system useful.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>architecture</category>
      <category>llm</category>
    </item>
    <item>
      <title>Why Cell-Level Citations Matter in AI-Powered Excel Tools</title>
      <dc:creator>FeasibilityproAI  Analysis</dc:creator>
      <pubDate>Sat, 05 Sep 2026 10:22:57 +0000</pubDate>
      <link>https://dev.to/feasibilityproaiai/why-cell-level-citations-matter-in-ai-powered-excel-tools-43pk</link>
      <guid>https://dev.to/feasibilityproaiai/why-cell-level-citations-matter-in-ai-powered-excel-tools-43pk</guid>
      <description>&lt;p&gt;An AI system can give you the right number and still give you a poor answer.&lt;/p&gt;

&lt;p&gt;The problem is not necessarily the calculation. It is the missing chain between the number in the workbook and the evidence that produced it.&lt;/p&gt;

&lt;p&gt;Consider a development model with a cell containing:&lt;/p&gt;

&lt;p&gt;Construction cost = 2,200 / m²&lt;/p&gt;

&lt;p&gt;A reviewer immediately has several questions:&lt;/p&gt;

&lt;p&gt;Where did 2,200 come from?&lt;br&gt;
What geography does it represent?&lt;br&gt;
What asset type?&lt;br&gt;
What date?&lt;br&gt;
Is it an actual project cost, an industry benchmark, or an assumption?&lt;br&gt;
Who entered it?&lt;br&gt;
What happens if the source changes?&lt;/p&gt;

&lt;p&gt;A conventional spreadsheet often stores the value but not enough of that context.&lt;/p&gt;

&lt;p&gt;That becomes more important when AI is involved.&lt;/p&gt;

&lt;p&gt;If an AI system extracts market information, interprets documents, proposes assumptions, and writes values into Excel, provenance cannot live only in an external log. The reviewer needs a practical way to move from the cell to the evidence.&lt;/p&gt;

&lt;p&gt;That is why cell-level citations are useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  The basic model: value is not provenance
&lt;/h2&gt;

&lt;p&gt;A useful mental model is:&lt;/p&gt;

&lt;p&gt;source&lt;br&gt;
  ↓&lt;br&gt;
extracted fact&lt;br&gt;
  ↓&lt;br&gt;
interpreted assumption&lt;br&gt;
  ↓&lt;br&gt;
Excel cell&lt;br&gt;
  ↓&lt;br&gt;
formula&lt;br&gt;
  ↓&lt;br&gt;
model output&lt;/p&gt;

&lt;p&gt;Each stage answers a different question.&lt;/p&gt;

&lt;p&gt;The source answers:&lt;/p&gt;

&lt;p&gt;What evidence did we use?&lt;/p&gt;

&lt;p&gt;The extracted fact answers:&lt;/p&gt;

&lt;p&gt;What did we take from that evidence?&lt;/p&gt;

&lt;p&gt;The assumption answers:&lt;/p&gt;

&lt;p&gt;How did we translate the evidence into a modelling input?&lt;/p&gt;

&lt;p&gt;The cell answers:&lt;/p&gt;

&lt;p&gt;Where does that assumption live?&lt;/p&gt;

&lt;p&gt;The formula answers:&lt;/p&gt;

&lt;p&gt;How does the model use it?&lt;/p&gt;

&lt;p&gt;The output answers:&lt;/p&gt;

&lt;p&gt;What does the model produce under these assumptions?&lt;/p&gt;

&lt;p&gt;AI systems often compress these stages into one response.&lt;/p&gt;

&lt;p&gt;That is convenient for generation, but inconvenient for review.&lt;/p&gt;

&lt;p&gt;A citation system should do the opposite: preserve the relationships.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a citation attached to the cell is different
&lt;/h2&gt;

&lt;p&gt;Suppose an AI workflow produces this workbook:&lt;/p&gt;

&lt;p&gt;Cell    Input&lt;br&gt;
B12 2,200&lt;br&gt;
B13 12,000&lt;br&gt;
B14 70%&lt;/p&gt;

&lt;p&gt;An external research log might say:&lt;/p&gt;

&lt;p&gt;B12 → source A&lt;br&gt;
B13 → source B&lt;br&gt;
B14 → source C&lt;/p&gt;

&lt;p&gt;That is better than nothing, but the reviewer still has to maintain two contexts.&lt;/p&gt;

&lt;p&gt;A cell-level citation puts the provenance closer to the object being reviewed.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;/p&gt;

&lt;p&gt;B12&lt;br&gt;
Construction cost&lt;br&gt;
2,200 / m²&lt;br&gt;
    │&lt;br&gt;
    └── Source:&lt;br&gt;
        report.pdf, p. 18&lt;br&gt;
        published: 2026-06&lt;br&gt;
        geography: Dubai&lt;br&gt;
        asset: residential&lt;/p&gt;

&lt;p&gt;The important idea is not the particular UI mechanism.&lt;/p&gt;

&lt;p&gt;It is locality.&lt;/p&gt;

&lt;p&gt;When a reviewer questions a number, the evidence should be discoverable from the number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Excel already has a useful primitive: comments
&lt;/h2&gt;

&lt;p&gt;Excel's object model provides comments associated with individual cells. Microsoft's current Excel JavaScript API documentation describes comments as threads tied to a single cell and supports creating, editing, deleting, resolving and reading comment metadata.&lt;/p&gt;

&lt;p&gt;For example, an add-in can create a comment thread on a specific cell:&lt;/p&gt;

&lt;p&gt;await Excel.run(async (context) =&amp;gt; {&lt;br&gt;
  const comments = context.workbook.comments;&lt;/p&gt;

&lt;p&gt;comments.add(&lt;br&gt;
    "Assumptions!B12",&lt;br&gt;
    "Source: Construction Cost Report\n" +&lt;br&gt;
    "Published: 2026-06\n" +&lt;br&gt;
    "Page: 18\n" +&lt;br&gt;
    "Geography: Dubai\n" +&lt;br&gt;
    "Asset: Residential"&lt;br&gt;
  );&lt;/p&gt;

&lt;p&gt;await context.sync();&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;The important part is not the API call.&lt;/p&gt;

&lt;p&gt;It is that Assumptions!B12 is explicitly connected to its provenance.&lt;/p&gt;

&lt;p&gt;Microsoft documents the comments API as part of the Excel JavaScript API, with comment support available from the relevant API sets.&lt;/p&gt;

&lt;p&gt;Office Scripts provides another route for workbook automation and also supports adding comments to cells.&lt;/p&gt;

&lt;h3&gt;
  
  
  But don't put the whole source system into the comment
&lt;/h3&gt;

&lt;p&gt;A tempting implementation is to dump everything into the cell comment:&lt;/p&gt;

&lt;p&gt;Source:&lt;br&gt;
URL:&lt;br&gt;
Document:&lt;br&gt;
Page:&lt;br&gt;
Paragraph:&lt;br&gt;
Extract:&lt;br&gt;
LLM:&lt;br&gt;
Prompt:&lt;br&gt;
Model:&lt;br&gt;
Timestamp:&lt;br&gt;
Hash:&lt;br&gt;
Confidence:&lt;br&gt;
Reasoning:&lt;br&gt;
...&lt;/p&gt;

&lt;p&gt;That quickly becomes unusable.&lt;/p&gt;

&lt;p&gt;The comment should be a pointer, not the entire provenance database.&lt;/p&gt;

&lt;p&gt;A better pattern is:&lt;/p&gt;

&lt;p&gt;Cell&lt;br&gt;
  ↓&lt;br&gt;
Citation ID&lt;br&gt;
  ↓&lt;br&gt;
Provenance record&lt;br&gt;
  ↓&lt;br&gt;
Source&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;B12 → SRC-00427&lt;/p&gt;

&lt;p&gt;and the provenance record might contain:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "citation_id": "SRC-00427",&lt;br&gt;
  "source": {&lt;br&gt;
    "document": "construction-cost-report.pdf",&lt;br&gt;
    "page": 18,&lt;br&gt;
    "published": "2026-06"&lt;br&gt;
  },&lt;br&gt;
  "scope": {&lt;br&gt;
    "geography": "Dubai",&lt;br&gt;
    "asset": "residential"&lt;br&gt;
  },&lt;br&gt;
  "extracted_value": 2200,&lt;br&gt;
  "unit": "USD/m²"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;This creates a useful separation:&lt;/p&gt;

&lt;p&gt;Excel stores the reference.&lt;/p&gt;

&lt;p&gt;The provenance layer stores the detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  The citation should describe evidence, not certainty
&lt;/h2&gt;

&lt;p&gt;This distinction matters.&lt;/p&gt;

&lt;p&gt;Imagine a source says:&lt;/p&gt;

&lt;p&gt;Construction costs for a particular benchmark category were reported at X.&lt;/p&gt;

&lt;p&gt;The model may subsequently use X as an assumption.&lt;/p&gt;

&lt;p&gt;The citation should not silently convert:&lt;/p&gt;

&lt;p&gt;reported benchmark&lt;/p&gt;

&lt;p&gt;into:&lt;/p&gt;

&lt;p&gt;true project cost&lt;/p&gt;

&lt;p&gt;Those are different claims.&lt;/p&gt;

&lt;p&gt;A good provenance record therefore distinguishes at least:&lt;/p&gt;

&lt;p&gt;SOURCE&lt;br&gt;
DATA PERIOD&lt;br&gt;
GEOGRAPHY&lt;br&gt;
ASSET CLASS&lt;br&gt;
EXTRACTED VALUE&lt;br&gt;
UNIT&lt;br&gt;
INTERPRETATION&lt;br&gt;
MODEL ASSUMPTION&lt;/p&gt;

&lt;p&gt;That makes it possible for a reviewer to challenge the interpretation rather than merely inspect the URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Citation IDs are more robust than URLs
&lt;/h2&gt;

&lt;p&gt;URLs change.&lt;/p&gt;

&lt;p&gt;Documents get replaced.&lt;/p&gt;

&lt;p&gt;Reports have multiple editions.&lt;/p&gt;

&lt;p&gt;A provenance record can therefore use a stable internal identifier:&lt;/p&gt;

&lt;p&gt;SRC-00427&lt;/p&gt;

&lt;p&gt;with metadata such as:&lt;/p&gt;

&lt;p&gt;Source name&lt;br&gt;
Publication date&lt;br&gt;
Data period&lt;br&gt;
Document version&lt;br&gt;
Page&lt;br&gt;
Location&lt;br&gt;
Claim&lt;br&gt;
Extraction date&lt;/p&gt;

&lt;p&gt;The workbook then carries:&lt;/p&gt;

&lt;p&gt;B12 → SRC-00427&lt;/p&gt;

&lt;p&gt;rather than attempting to encode an entire research record into the cell itself.&lt;/p&gt;

&lt;p&gt;This also makes automated validation possible.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;def validate_citation(cell, provenance):&lt;br&gt;
    citation_id = cell.metadata["citation_id"]&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if citation_id not in provenance:
    raise ValueError(
        f"Missing provenance for {cell.coordinate}"
    )
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The principle is simple:&lt;/p&gt;

&lt;p&gt;A material AI-generated input should not silently become an unexplained spreadsheet value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cell citations also help with AI failure modes
&lt;/h2&gt;

&lt;p&gt;AI systems have several failure modes that are particularly awkward in spreadsheets.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Correct source, wrong interpretation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The model finds the right report but interprets an annual figure as a monthly figure.&lt;/p&gt;

&lt;p&gt;A citation lets the reviewer return to the source.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Correct number, wrong scope&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The number is real, but it applies to office rather than residential development.&lt;/p&gt;

&lt;p&gt;Again, the citation provides the path back to the evidence.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Stale evidence&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A source may be valid but old.&lt;/p&gt;

&lt;p&gt;The citation exposes its publication date and data period.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Unsupported inference&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The AI may produce a plausible assumption without a source.&lt;/p&gt;

&lt;p&gt;That should result in:&lt;/p&gt;

&lt;p&gt;citation = missing&lt;/p&gt;

&lt;p&gt;rather than a fabricated citation.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Source substitution&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A workflow may use one source during research and a different source when generating the final workbook.&lt;/p&gt;

&lt;p&gt;A stable citation ID makes that substitution easier to detect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Provenance should be machine-readable too
&lt;/h2&gt;

&lt;p&gt;Human-readable comments are useful, but they should not be the only representation.&lt;/p&gt;

&lt;p&gt;A production design could maintain a provenance table:&lt;/p&gt;

&lt;p&gt;Citation ID Cell    Source  Page    Date    Scope&lt;br&gt;
SRC-00427   B12 Cost report 18  2026-06 Dubai residential&lt;br&gt;
SRC-00428   B13 Planning document   42  2026-05 Project&lt;br&gt;
SRC-00429   B14 Market report   11  2026-07 Residential&lt;/p&gt;

&lt;p&gt;Then validation becomes possible before the workbook leaves the system.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;required_inputs = [&lt;br&gt;
    "B12",&lt;br&gt;
    "B13",&lt;br&gt;
    "B14",&lt;br&gt;
]&lt;/p&gt;

&lt;p&gt;for address in required_inputs:&lt;br&gt;
    if address not in cited_cells:&lt;br&gt;
        raise ValueError(&lt;br&gt;
            f"Material input has no citation: {address}"&lt;br&gt;
        )&lt;/p&gt;

&lt;p&gt;The exact implementation can vary.&lt;/p&gt;

&lt;p&gt;The architectural principle is more important:&lt;/p&gt;

&lt;p&gt;material input&lt;br&gt;
      ↓&lt;br&gt;
citation required&lt;br&gt;
      ↓&lt;br&gt;
provenance record&lt;br&gt;
      ↓&lt;br&gt;
source verification&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't cite every calculated cell
&lt;/h2&gt;

&lt;p&gt;There is another trap here.&lt;/p&gt;

&lt;p&gt;If every formula cell gets a source citation, the workbook becomes noisy.&lt;/p&gt;

&lt;p&gt;A calculated output does not necessarily need its own external source.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;=B12*B13&lt;/p&gt;

&lt;p&gt;does not need a market citation if B12 and B13 already carry appropriate provenance.&lt;/p&gt;

&lt;p&gt;Instead, the dependency chain should be traceable:&lt;/p&gt;

&lt;p&gt;B12 ──┐&lt;br&gt;
      ├──→ B20&lt;br&gt;
B13 ──┘&lt;/p&gt;

&lt;p&gt;with citations attached to the material inputs.&lt;/p&gt;

&lt;p&gt;This gives a much cleaner separation:&lt;/p&gt;

&lt;p&gt;External evidence&lt;br&gt;
        ↓&lt;br&gt;
Material assumptions&lt;br&gt;
        ↓&lt;br&gt;
Deterministic formulas&lt;br&gt;
        ↓&lt;br&gt;
Model outputs&lt;/p&gt;

&lt;p&gt;The output is therefore explainable through its inputs and formulas.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical schema
&lt;/h2&gt;

&lt;p&gt;For an AI-powered Excel workflow, a minimal citation object might look like this:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "citation_id": "SRC-00427",&lt;br&gt;
  "cell": "Assumptions!B12",&lt;br&gt;
  "source": {&lt;br&gt;
    "name": "Construction Cost Report",&lt;br&gt;
    "url": "&lt;a href="https://example" rel="noopener noreferrer"&gt;https://example&lt;/a&gt; com/report pdf",&lt;br&gt;
    "published": "2026-06"&lt;br&gt;
  },&lt;br&gt;
  "location": {&lt;br&gt;
    "page": 18&lt;br&gt;
  },&lt;br&gt;
  "claim": {&lt;br&gt;
    "value": 2200,&lt;br&gt;
    "unit": "USD/m²"&lt;br&gt;
  },&lt;br&gt;
  "scope": {&lt;br&gt;
    "geography": "Dubai",&lt;br&gt;
    "asset_class": "residential"&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;In a real system, the URL would need to be an actual verified source rather than the placeholder above.&lt;/p&gt;

&lt;p&gt;The schema can also be extended with:&lt;/p&gt;

&lt;p&gt;data_period&lt;br&gt;
source_type&lt;br&gt;
extraction_method&lt;br&gt;
review_status&lt;br&gt;
assumption_status&lt;br&gt;
supersedes&lt;/p&gt;

&lt;p&gt;But the goal should remain restraint.&lt;/p&gt;

&lt;p&gt;Provenance is useful when it helps someone answer:&lt;/p&gt;

&lt;p&gt;Why is this number here?&lt;/p&gt;

&lt;h2&gt;
  
  
  What the AI should not decide
&lt;/h2&gt;

&lt;p&gt;The system should not automatically turn every extracted fact into an approved modelling assumption.&lt;/p&gt;

&lt;p&gt;A safer boundary is:&lt;/p&gt;

&lt;p&gt;AI extraction&lt;br&gt;
      ↓&lt;br&gt;
candidate evidence&lt;br&gt;
      ↓&lt;br&gt;
candidate assumption&lt;br&gt;
      ↓&lt;br&gt;
human review&lt;br&gt;
      ↓&lt;br&gt;
approved model input&lt;br&gt;
      ↓&lt;br&gt;
calculation&lt;/p&gt;

&lt;p&gt;This preserves a critical distinction between evidence and professional judgment.&lt;/p&gt;

&lt;p&gt;A source can support a number without proving that the number is appropriate for the project being analysed.&lt;/p&gt;

&lt;p&gt;That suitability decision belongs in the modelling workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real benefit is not citation. It is reviewability.
&lt;/h2&gt;

&lt;p&gt;Cell-level citations are sometimes described as a documentation feature.&lt;/p&gt;

&lt;p&gt;That understates their value.&lt;/p&gt;

&lt;p&gt;They can become part of the control layer around AI-generated spreadsheets.&lt;/p&gt;

&lt;p&gt;A reviewer can ask:&lt;/p&gt;

&lt;p&gt;Which cells came from external evidence?&lt;br&gt;
Which cells are assumptions?&lt;br&gt;
Which assumptions have citations?&lt;br&gt;
Are the sources current?&lt;br&gt;
Does the source scope match the model?&lt;br&gt;
Which outputs depend on a disputed assumption?&lt;/p&gt;

&lt;p&gt;That is a much more useful question set than:&lt;/p&gt;

&lt;p&gt;Did the AI get the answer right?&lt;/p&gt;

&lt;p&gt;Because a feasibility model is rarely just an answer.&lt;/p&gt;

&lt;p&gt;It is a chain of evidence, assumptions, formulas and outputs.&lt;/p&gt;

&lt;p&gt;AI can help construct that chain.&lt;/p&gt;

&lt;p&gt;It should not make the chain invisible.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical implementation pattern
&lt;/h2&gt;

&lt;p&gt;If I were designing this workflow, I would keep five layers separate:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Source layer&lt;br&gt;
Documents, reports, URLs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Evidence layer&lt;br&gt;
Extracted claims + source locations&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Assumption layer&lt;br&gt;
Values selected for modelling&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Workbook layer&lt;br&gt;
Cells + formulas + citation IDs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Review layer&lt;br&gt;
Human validation and overrides&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then the system can enforce simple rules:&lt;/p&gt;

&lt;p&gt;No source&lt;br&gt;
    → no evidence&lt;/p&gt;

&lt;p&gt;No evidence&lt;br&gt;
    → assumption requires review&lt;/p&gt;

&lt;p&gt;Material assumption without citation&lt;br&gt;
    → validation failure&lt;/p&gt;

&lt;p&gt;Formula output&lt;br&gt;
    → trace inputs, don't invent another citation&lt;/p&gt;

&lt;p&gt;Human override&lt;br&gt;
    → preserve the original evidence&lt;/p&gt;

&lt;p&gt;That last rule matters.&lt;/p&gt;

&lt;p&gt;If a reviewer changes 2,200 to 2,350, the system should not erase the original provenance.&lt;/p&gt;

&lt;p&gt;Instead, it should preserve:&lt;/p&gt;

&lt;p&gt;Original evidence: SRC-00427&lt;br&gt;
Original assumption: 2,200&lt;br&gt;
Reviewed assumption: 2,350&lt;br&gt;
Reviewer: human&lt;br&gt;
Reason: project-specific adjustment&lt;/p&gt;

&lt;p&gt;Now the model contains a history of judgment rather than pretending the revised value came directly from the source.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;The strongest AI-to-Excel workflows will not be the ones that merely write numbers into cells.&lt;/p&gt;

&lt;p&gt;They will make those numbers inspectable.&lt;/p&gt;

&lt;p&gt;Cell-level citations provide a practical bridge between a spreadsheet and the evidence behind it. Excel's current APIs provide mechanisms for attaching comments and related metadata to individual cells, which makes this pattern technically feasible.&lt;/p&gt;

&lt;p&gt;The larger design principle is broader than Excel:&lt;/p&gt;

&lt;p&gt;Keep evidence, assumptions, calculations and decisions separate, but make their relationships explicit.&lt;/p&gt;

&lt;p&gt;That is what turns an AI-generated workbook from a collection of plausible values into something a professional can actually review.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>excel</category>
      <category>realestate</category>
    </item>
  </channel>
</rss>
