<?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>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>
