# How to Let AI Draft the Monthly Report and Know Where Every Number Came From

> An AI assistant can write the month's commentary and get the sums right. Kept to figures from a calculation you rerun, causes from a log your team writes and disagreements left inside the report, it drafts a report your controller can check and sign.

By Vlad Shvets, Partner @ Qvery · Published 2026-10-28 · Updated 2026-10-28 · 15 min read
Canonical: https://qvery.ai/blog/ai-financial-reporting/

At a lender, a credit union or a wealth manager of a few hundred people, the monthly management report rests on two systems that have to agree. The servicing or portfolio system holds every loan, lease or account, and the general ledger holds the money.

A budget workbook sits beside them, and when the books close, the controller writes what moved and why, line by line, for the people who run the company.

An AI assistant can draft that commentary from the month's exports in a few minutes now, and it does the arithmetic in code while it writes.

We built one month for an invented equipment lender, with the problems an experienced controller would catch, and had assistants write its commentary fifteen times, three different ways.

The **sums came back right**, and the reports still misled. Handed the raw exports, every assistant put one system's figure in the report where the two systems disagreed, and moved the disagreement outside it.

The fix is a split: **figures from a calculation** you rerun every month, **causes from a log** your team keeps, and the assistant **writing only the words**, with every disagreement left inside the report.

It is one invented month and two families of assistants, Claude and Gemini, so read the counts below as what to check in your own month, not as a rate.

A monthly report is the kind of job we build agents for at Qvery: the same files every month, a calculation that never changes, and a person who signs.

## A Lender's Monthly Report Rests on Two Systems That Have to Agree

The report has two halves. The portfolio half comes from **the servicing system**: principal outstanding, originations, loans past due, charge-offs. The money half comes from **the ledger**: interest and fee income, interest expense, the provision for credit losses, operating costs, each against budget and against last month.

Before anyone explains either half, the two have to agree on the one figure they share. The servicing system's total principal has to equal the loan account in the ledger. That check is **the tie-out**, and when it fails, every portfolio sentence after it describes a number **nobody has settled**.

A wealth manager and a fund administrator have their own pairs: the custodian's records of client assets beside the ledger, the fund's records beside its books. The figures they share differ, and the rule is the same: they agree before anyone explains them. So is the shape of the agent that runs the check.

AI agents for finance: https://qvery.ai/industries/finance/

Our month belongs to Larkfield Equipment Finance, an invented lender with about 6,400 contracts and $612 million of principal. Its controller starts September's report with what any controller has:

**What Larkfield's controller has at month end**

| File | What it holds |
|---|---|
| Ledger account summaries, August and September | every account's activity, debits positive and credits negative |
| September budget | one figure per report line, in thousands of dollars |
| Servicing system portfolio summary | contracts, principal, originations, days past due, charge-offs, by product |
| The controller's close notes | what the team knows about why lines moved |
| August's commentary | the format the report keeps |

And it has five things an experienced controller would catch:

- **Professional fees nearly doubled** against budget, and nothing in the notes says why.
- A **$42,000 correction** moved two months of software costs from one expense line to another.
- The provision for credit losses came in **$108,000 under budget** in a month when loans past due went up.
- The servicing system shows **$225,500 more principal** than the ledger, and nobody has explained it.
- A sales email calls the month a record, at $41.2 million of originations. The servicing system shows $38.6 million.

Writing all this up comes at the end of the close. In APQC's benchmarking the median organization takes 6 calendar days from the first trial balance to finished statements, and its close checklist puts variance analysis in the final days of that window[^1].

**Price your own month** before deciding anything. Say your controller spends 16 hours and an analyst 24 hours of close week drafting, checking and rewriting the commentary. Those hours are an assumption: replace them with one counted month.

At the national median wages for financial managers, which include controllers, and for accountants, $80.08 and $40.23 an hour,[^2] that is **$2,246.80 a month**, about $27,000 a year in wages, before benefits and before the cost of a sentence that is wrong.

## Handed the Raw Exports, the Assistants Got the Sums Right and the Report Wrong

We started with the plain request. Three Claude models and Gemini got the raw files and the words a controller would type: write the commentary for the September report, in the same format as last month.

**The arithmetic held.** Between them, the four Claude runs worked out **47 figures** that no system and no calculation of the controller's had produced: allowance ratios, the monthly cost of a rate change, lines without the correction. **One was wrong**, an August ratio of 1.645% written as 1.64%.

The Claude runs also caught what a good analyst catches. They used the system's $38.6 million for originations and dropped the word "record". They saw that the $42,000 correction explained both expense lines it touched.

Two of them asked a question nobody had asked them: whether a dealer show paid in September belongs in October's books.

The failures were in what the reports said and where they said it.

The report **picked a number** in silence. All five runs printed the ledger's principal, **$612.2 million**, in the report. The servicing system said **$612.4 million**.

Four runs mentioned the $225,500 gap only in a note to the user below the report, under headings like "Items to resolve before you send".

![The end of an assistant's September commentary: Watch items, a rule, then a list titled Items to resolve before you send, where item 3 names the $225,500 gap.](https://qvery.ai/blog/ai-financial-reporting/screenshot-r1-answer-end.webp)

*The end of one run's answer on the raw files: the report's last section, then a list addressed to the user.*

The gap is item 3, after the report has ended. The fifth run never mentioned it. Copy the report into the reporting package, and the disagreement stays behind in the chat.

The report carried **figures nobody asked for**. Each Claude run added **10 to 14 figures** of its own, and every one of them is a figure the controller has to work out again before the report goes out.

Two runs worked out the same one, delinquency without the trucking account that fell behind this month, and got **2.88% and 2.89%**, both defensible. A report should carry one, computed one way, every month.

The report **borrowed a cause**. The close notes say one account was fully reserved in June, so its charge-off in September needed no new provision. Every one of the five runs put that sentence right after the provision's favorable variance, as the reason it came in under budget.

The note explains one charge-off. It does not explain why the month's provision ran under plan while delinquency rose, and nothing on file does.

The obvious trap caught no one. Every one of the fifteen runs left professional fees unexplained rather than invent a reason for them. The invention that got through was quieter: a true sentence used as the reason for the wrong figure.

## Keep Every Figure in a Calculation You Rerun, and Let the Assistant Write the Words

Decide where the figures come from **before the assistant** sees them. The assistants' arithmetic held up, one rounding slip aside, but the decisions around it did not.

The runs show why that order matters. Which figure stands when two systems disagree is a decision, and it belongs to a person.

Every figure worked out in a chat is [one more figure whoever signs must work out again](https://qvery.ai/blog/ai-verification-tax/). And a figure computed fresh each month can come out a different way each time.

![Exports feed a saved calculation beside the team's driver log; the assistant writes only the commentary, sources and questions; a named person settles the tie-out and signs.](https://qvery.ai/blog/ai-financial-reporting/illustration-the-split.webp)

*Each figure in the report traces to one of the calculation's tables, and each cause to a line in the log.*

The split, job by job, as the drawing shows it:

**Who does what in the monthly report**

| Job | Who does it |
|---|---|
| Variances against budget and last month, each marked favorable or unfavorable | the saved calculation |
| The tie-out between the servicing system and the ledger | the saved calculation, before anything else |
| Which lines and portfolio measures are material enough to need a reason | the saved calculation, from thresholds the controller sets |
| Each line without the items the team has explained, such as a correction or a timing item | the saved calculation, from the amounts in the driver log |
| Why each line moved | the controller's team, in a driver log (the next section) |
| The commentary, a table of sources for every figure, and the questions | the assistant |
| The answers, the call between two systems, and the signature | named people |

The saved calculation can be a workbook your team already trusts, a query in your reporting tool, or a short script an assistant writes once and you keep.

Claude[^3] and ChatGPT[^4] both run Python on uploaded files, and OpenAI's own help page tells users to review the generated code before relying on the result.[^4]

Do that once, against a month your team closed by hand, and again whenever the calculation changes. After that it runs the same way every month, and **the tie-out** tells you when the two systems stop agreeing.

Run all of it on your company's business plan, not a personal account: Anthropic[^5] and OpenAI[^6] both say they do not train their models on business-plan data by default.

Keep each month in one folder: the exports, the calculation's tables, the driver log, the prompt, the draft, the questions with their answers, and who signed. A question next spring about September gets answered from it, and the same folder is what an agent would later work from.

Have Us Build Your Monthly Reporting Pack and Its Agent: https://calendly.com/qvery-vlad/30min

## Write Every Driver Down With Its Amount, or the Report Will Borrow One

The causes are the part only your team knows. A variance table says what moved. Why it moved lives in invoices, journal entries, the collections file and the heads of the people who closed the month, and an assistant can only repeat what someone wrote down.

That is **the driver log**: one line per known driver.

**A driver log: three lines from Larkfield's September**

| id | line | driver | amount | source |
|---|---|---|---|---|
| D4 | Marketing | dealer show booth and travel paid in September; the budget has the show in October | $52,000 | AP invoice |
| D5 | Technology; Other operating expense | correction of July and August software costs coded to the wrong account | $42,000 | journal entry |
| D3 | Portfolio, past due | one trucking customer, 12 contracts, behind over a fuel-card dispute | $3,200,000 | collections file |

Two columns do the work. **The line column** ties each driver to the figure it explains, so a sentence about one account cannot drift into the reason for another line, which is exactly how the provision got its borrowed cause.

**The amount column** turns each driver into a number the calculation can use, so it can produce Technology without the correction, $134,200 and $800 under budget, and nobody subtracts anything in a chat.

A driver with no amount, like the note that the bank raised the rate on the company's own credit line on September 1, explains a direction, not a size, and the commentary should say no more than that.

The log is still evidence a person owns: the rules stop the assistant from inventing a cause, not the team from writing a wrong one. In Larkfield's month the sales email's originations were off, and the only thing that caught them was the servicing system's own figure.

## Asking the Assistant to Flag Everything Buries the Questions That Matter

Our first strict prompt gave the assistant the computed tables and the log, and told it to use only figures from the tables, cite every one, give a reason only from the log, and list every disagreement for the controller.

It fixed most of what it was meant to fix. **All five runs** put the $225,500 gap first in the portfolio section, inside the report, and **four of the five** kept the June reserve out of the provision's explanation. The fifth, Gemini, borrowed it as the raw-export runs had.

It also returned **8 to 12 questions** per report, including what drove fee income $9,050 over budget. Every figure in the prose carried a bracketed citation, which no one would send to the owners.

And four of the five runs flagged the dealer show as a disagreement: the log said $52,000, the marketing variance was $48,200, so which was right? Both figures were: the show cost $52,000 and the rest of marketing ran $3,800 under budget.

A rule that said "a figure that disagrees with a table" read a partial explanation as a conflict.

**The same invented month, three ways, five runs each**

| Version, five runs each | The $225,500 gap stated in the report | The June note given as the provision's reason | A driver called a disagreement | Questions for the controller, per report |
|---|---|---|---|---|
| Raw exports, plain request | 0 of 5 | 5 of 5 | not asked to list any | 0 to 6 |
| Computed tables, first strict prompt | 5 of 5 | 1 of 5 | 4 of 5 | 8 to 12 |
| Computed tables, final prompt | 5 of 5 | 0 of 5 | 0 of 5 | 4 |

Two small changes made the last row. The calculation writes **a materiality column**: a line needs a reason when it is $50,000 or more off budget, or $25,000 and 10%.

And the questions are limited to material lines with no driver, differences in the tie-out, and figures for the same measure that differ, such as originations in the sales email and in the system. The citations moved out of the sentences into a table after them.

## The Prompt That Keeps the Disagreements in the Report

Assistants such as Claude or ChatGPT read the four tables and last month's commentary and write the new commentary in its format. This prompt makes them write only from those tables, keep any disagreement inside the report, and hand back only the questions a person has to answer.

**The prompt**

```
You are drafting the commentary for our monthly management report. Attached: the variance table, the portfolio figures, the tie-out between our servicing system and the general ledger, the driver log, and last month's commentary for the format.

1. Every number must come from the attached tables, copied as shown or rounded to last month's precision. Do not calculate anything yourself. If you want a number that is not in a table, leave it out and add it to the questions.
2. Explain a movement only with a driver from the driver log. If a line marked material has no driver, write "Driver not on file." Do not explain lines that are not marked material.
3. If the tie-out shows a difference, the first sentence of the portfolio section gives the amount and says it is unreconciled. Do not suggest a cause, and do not present either figure as the right one.
4. If the driver log gives a figure for the same measure as a table (for example, originations) and the two differ, use the table's figure and list the difference in the questions.
5. Where a percentage shows n/m, give the amounts only. Use Fav and Unfav exactly as the table marks them.
6. Keep last month's sections and length. Write the commentary without citations.
7. After the commentary, add two sections. "Sources": a table of every number you used, with the table, line and column it came from. "Questions for the controller": one line each, only for material lines with no driver, tie-out differences, and figures that disagree.
```

What comes back is last month's sections with the gap in the first sentence of the portfolio section, a Sources table listing every figure with the table, line and column it came from, and a short list of questions.

In our five runs of this version the list held **the same four items** every time: the provision, professional fees, the tie-out and the sales email's originations. Each is a point in Larkfield's month that only a person can settle.

Rule 7 narrows rule 1: a number the assistant wanted but could not find becomes a question only when it touches one of the three kinds rule 7 names. Widen rule 7 if you want every missing number asked.

Answer the questions, check the Sources table against the calculation's tables, and the draft is ready for review. Save the prompt where everyone who builds the report runs the same one.

This version was written after watching the first strict one fail, and tested on five fresh runs of the same month. Your next month is the test that counts.

## The Controller Still Reads the Portfolio and Signs the Report

The shorter question list has a price. **None of the five** runs of the final prompt asked about loans 90 or more days past due rising from **0.42% to 0.58%** of principal, which nine of the other ten runs had flagged.

The portfolio table carried no materiality mark, so the rule had nothing to ask about. Mark delinquency, charge-offs and originations with thresholds the controller sets, as the decision table above does. We did not rerun the month with those marks, so until your own month shows them working, read the portfolio yourself.

None of the runs held to the tables asked whether the $52,000 show belongs in October's books either, a question two runs on the raw files raised on their own. Held to the tables, the assistant stops questioning the accounting, so that question stays with whoever reads the draft.

What a person still does, in order:

1. **Read the tie-out line first** If it shows a difference, nothing in the portfolio section is final until someone settles it.
2. **Check the Sources table against the calculation's tables** Every figure, every month, until your own parallel months show the draft clean; then a sample plus every material line, and every figure again whenever the calculation, the exports or the prompt change.
3. **Hold each cause in the commentary against the driver log** 
4. **Answer the questions, or leave them in the report as open** 
5. **Read the portfolio movements, which the questions do not cover** 
6. **A named person signs** 

After a late entry, rerun the calculation and the draft rather than patching the commentary by hand. And whoever writes the month's drivers should not also be the one who changes the calculation, the materiality line or the prompt.

## Run Next Month Twice Before the Assistant Writes It Alone

Next month, write the commentary the way you do now and run the tables, the log and the prompt beside it. Count four things: figures in the draft that tie to the calculation's tables, causes that match the log, questions that were real, and [the hours each way](https://qvery.ai/blog/workflow-mapping-ai-agents/).

If drafting turns out to be half of each person's hours in the example above, that is **$13,480.80 a year** in wages, before benefits and before the time the driver log and the review add back.

The parallel month also shows the other count, the one wages miss: how often your report was about to go out carrying a disagreement nobody had settled.

Our finance playbook counts reporting packs the same way, in staff minutes per pack and figures caught before a report went out, beside the other finance jobs agents take first.

Industry Playbook: https://qvery.ai/industry-playbooks/ai-agents-for-finance/

The same job as an agent, as we would propose it: it picks up the exports when the close is marked done and runs the saved calculation. It stops and tells the controller if the tie-out fails.

Otherwise it drafts the commentary, the Sources table and the questions, posts the questions to the controller, and holds the report until a named person approves it.

It reads only your systems' exports and writes only the draft. It is counted in the drafting hours it removes and the disagreements it stops before the report goes out.

Before any of that, take last month's exports and run the tie-out. If the two systems agree to the dollar, start the parallel month. If they don't, that difference is the first question for your controller, before anyone writes a word.

Plan the AI Transformation of Your Finance Back Office: https://calendly.com/qvery-vlad/30min

## Frequently asked questions



### Which parts of a monthly report can AI draft safely?

The commentary, the table of where each figure came from, and the questions for the controller. The figures come from a calculation you save and rerun, and the causes from a log your team keeps. The choice between two systems that disagree, the answers to the questions and the signature stay with people.

### How do I check AI commentary for wrong numbers?

Ask for a Sources table that names the table, line and column of every figure, and check it against the calculation's own tables: every figure until your own months show the draft clean, then a sample plus every material line. Read the tie-out line before anything else.

### Should the AI do the reconciliation itself?

It can do the arithmetic. In our month it did. Keep the tie-out in the saved calculation anyway: which figure stands when two systems disagree is a decision for a person, and the check has to run the same way every month.

### Who is accountable when AI helps prepare the report?

Whoever signs it. Name that person, keep the assistant's questions with the report until they are answered, and keep each month's folder so anyone can see what the draft was given and what was changed.

### Is it safe to give an assistant the ledger exports?

Use your company's business plan, not a personal account. Anthropic says it does not train its models on inputs or outputs from its commercial products by default, and OpenAI says the same of its business plans and API unless you opt in. Your own data policy still decides what leaves the building.

## Sources

[^1]: APQC, "How Can You Improve the Month-End Closing Process?" (2026), https://www.apqc.org/How-Can-You-Improve-the-Month-End-Closing-Process
[^2]: U.S. Bureau of Labor Statistics, "Occupational Outlook Handbook: Financial Managers; Occupational Employment and Wage Statistics, May 2025" (2026), https://www.bls.gov/ooh/management/financial-managers.htm
[^3]: Anthropic (Claude Help Center), "Create and edit files with Claude" (2026), https://support.claude.com/en/articles/12111783-create-and-edit-files-with-claude
[^4]: OpenAI Help Center, "Data analysis with ChatGPT" (2026), https://help.openai.com/en/articles/8437071-data-analysis-with-chatgpt
[^5]: Anthropic Privacy Center, "Is my data used for model training?" (2026), https://privacy.claude.com/en/articles/7996868-is-my-data-used-for-model-training
[^6]: OpenAI, "Enterprise privacy at OpenAI" (2026), https://openai.com/enterprise-privacy/
