The audit trail¶
Every result is an envelope with four parts:
{
"method": "dcf.fcff",
"value": { "value_of_operations": "1421.48…", "equity_value": "1221.48…", "...": "..." },
"explain": {
"formula": "Value of operations = Σ FCFF_k × DF_k + TV_N × DF_TV; ...",
"conventions": ["timing: end of period (flow k discounted at t = k)", "..."],
"steps": [ { "label": "Period 1: discount factor", "formula": "1 / (1 + 0.10)", "value": "0.909…" } ]
},
"meta": { "engine_version": "…", "method_version": "3", "input_hash": "b963…", "arithmetic": "decimal…" }
}
valueholds the results, exact, as decimal strings.explain.stepslists each intermediate calculation with the actual numbers substituted. An analyst can recompute any step by hand; an agent cites them instead of recomputing.explain.conventionsstates every choice that changes the number (timing, terminal value discounting). Conventions are never implicit.metamakes the result reproducible: the sameinput_hashwith the same versions always yields the same value.
In Python, result.explain_markdown() renders a methodology note for reports.