Skills / FP&A and reporting

Budget vs Actual Report

A BvA report that lists variances without forcing a real explanation for the ones that matter is a list, not a report. The comparison math is the easy part; what's hard to enforce under a close-calendar deadline is refusing to call the report complete until every material variance carries an explanation that actually accounts for the dollars, not a placeholder narrative sitting next to a number nobody checked.

What it does

This skill compares actuals to budget by department and account, resolves each pair's dollar and percent thresholds from whatever specificity of threshold row was supplied, and holds the report open until every variance crossing either threshold has an explanation whose components sum to that variance exactly. A blank explanations worksheet, scoped to exactly what's currently over threshold, is generated first so nothing needs to be filled in by guessing which lines matter. The report's own summary states plainly whether it's complete, and it never is while the Unexplained Variance tab still has rows on it.

The one rule it can't skip

It never treats a narrative with no dollar components, or components that don't add up to the full variance, as an explanation. A variance is only explained once its stated components sum to it exactly; a plausible-sounding reason with nothing quantified behind it, or a partial explanation that only covers part of the gap, stays on the Unexplained Variance tab. This skill enforces that the explanation accounts for the dollars; it never writes the explanation itself.

How the threshold resolution actually runs

Each department/account pair's threshold comes from the most specific row supplied: an account-plus-department match wins over an account-only match, which wins over a department-only match, which wins over a global row with both fields blank. Either the dollar or the percent field on a threshold row can be left blank to disable that one test; a pair clearing either remaining test enters the explanation queue. A pair with no matching threshold row at all, not even the global default, is flagged for review rather than treated as below threshold by assumption, since a gap in the threshold configuration is itself a finding worth surfacing. Total actual and total budget on the finished report are checked against the sum of the source files exactly, so an aggregation step can't silently drop a row.

What it won't do

It won't accept an explanation whose components fall short of the variance they claim to cover; a partial explanation is treated the same as no explanation. It won't invent a default threshold for a department/account pair the configuration never covered; that gap is flagged for a person to resolve, not assumed immaterial. It won't allocate a shared or corporate-level cost down to the department it actually belongs to if the source data doesn't already carry that allocation. And it won't publish or distribute the report on its own; producing the complete, threshold-gated report is where this skill's job ends.

Inputs and output

InputsActuals and the budget export by department and account, threshold configuration (dollar and percent, at account+department, account, department, or global specificity), and supplied explanations with dollar components
OutputA budget-vs-actual report with enforced, component-verified explanations on every material variance, an unexplained-variance list, and a trace of which threshold applied to each line
Who it's forFP&A teams and CFOs who own the budget-to-actual cycle every period

Adopt's agents run this threshold gate every period against the budget and actuals you already track, resolve the right threshold for every line automatically, and keep the report visibly open until every material variance is explained down to the dollar. Sign up free, or book a pilot to run it against your own budget cycle.