AI Adoption GuideFinanceReport
ESG disclosure draft
LLM compiles CSRD and SEC climate reports from operational and financial source data.
Finance processPlanBudgetInvoiceCollectPayCloseReportAudit
By Don, DoneThat’s AI coach · updated
What a usable ESG draft contains
A usable ESG disclosure draft is a paragraph that names the metric, the source system, and the reporting period, or it is blank. It is not a completed filing. CSRD sustainability statements and SEC climate-related disclosures still go out under the disclosure owner's name. The model compiles language from operational and financial extracts that already exist. If a figure is not in those extracts, the corresponding sentence stays empty. Inventing an emissions number so the narrative looks finished is a quality failure, not a drafting success.
Controllers and sustainability-finance leads already live with the split between source systems and narrative documents. This workflow keeps them joined: every drafted claim re-pullable from a named system and period; every missing claim visible as a gap.
The same bar applies when a board-pack narrative draft refuses to explain a variance the ledger has not closed. ESG copy is not a special exception to sourced language.
Load sourced metrics before any sentence is written
Do not start with a template and hunt for numbers to fill it. Start with the extracts.
Pull the period-locked metrics the report is supposed to cover: energy, water, waste, headcount, and the financial line items that CSRD or SEC climate text has to sit next to. Those extracts typically come from the same class of operational and financial systems controllers already run, including Workday, SAP, Vena, and Datarails, plus whatever carbon or EHS ledger the company actually uses. Treat them as systems of record as a class. Do not assume any one of them calculates scope 3, stores a CSRD datapoint catalogue, or hosts the filing.
Lock the period before the draft runs. A fiscal-year extract from the ERP is not interchangeable with a trailing-twelve-month file from planning. If two systems disagree on the same metric for the same period, stop and reconcile the extract. Do not average them in prose.
Map each required disclosure line to a source field, not to a hoped-for sentence. A line with a populated field for the locked period is eligible for drafting. A line with no field, a null, or a stale period is not eligible. That mapping is the control. Skip it and the model will write fluent gaps.
The same retrieval habit that a control-evidence retrieval agent uses for SOX artifacts applies here: fetch the evidence first, then write. Do not write, then attach a citation that looks plausible.
Confirm the extract grain matches the disclosure grain. Site-level kWh cannot be drafted as a group total unless the extract already contains that total or a documented consolidation; the consolidation file is then the named source.
Draft only what the extract can support
Once the extract is loaded, generate paragraphs that do three things in the open: state the fact the source contains, name the system it came from, and name the period. A reviewer who is not the author should be able to re-pull the same figure.
Illustrative walkthrough, not a measured result: a sustainability-finance lead is assembling the owned-operations energy section for a CSRD draft covering one fiscal year. The ERP extract includes site electricity for owned facilities for that year and contains nothing for purchased-goods emissions. The acceptable energy paragraph restates the electricity figure the extract actually holds, names the ERP energy extract, and names the fiscal year. The purchased-goods paragraph is not drafted. It stays empty, with the missing source and period visible to the owner. The model does not borrow the prior year's scope 3, does not scale revenue into an emissions factor, and does not turn a peer benchmark into the company's number.
Citation belongs in the paragraph, not only in a footnote a filer can miss. Naming Workday, SAP, Vena, or Datarails (whichever system actually supplied the field) plus the period is part of the quality bar. A polished paragraph without that cite is not done.
Do not let the model complete a section because neighboring sentences exist. Fluency is not completeness. Completeness is every required line either sourced or explicitly blank.
Do not add a CSRD datapoint ID or an SEC item caption the extract does not carry.
Empty stays empty when the source is missing
The failure mode that wrecks these drafts is filling a missing metric. It shows up as a scope-3 sentence that was never in the carbon ledger, a workforce claim taken from an outdated HR snapshot, or a climate-risk dollar that planning never booked.
If the source is missing, leave the sentence empty. Do not write "data not available" as if it were a measured fact unless the control framework requires that exact phrase and the owner has approved it as something that may be filed. An empty line plus a comment to the owner (system, period, field) is safer than a clause that reads like a number.
Inventing a scope-3 number is the sharpest version of this failure. Scope 3 is often incomplete by construction. Categories arrive late, suppliers fail to report, and emission factors change. A model that interpolates a category so the value-chain section still reads as a story has created a figure nobody can defend in review. The owner then spends the reporting cycle unwinding prose instead of collecting the missing extract.
A stale period is a missing source. A prior-year carbon inventory is not a source for the current-year sentence. Treat it as absent. Roll-forward language belongs only if the extract itself contains a documented roll-forward.
This is closer to SOX control narrative drafting than to brochure copy: if the control did not operate, the narrative does not claim it did.
The owner files; the draft does not
Treating the draft as filed is the second operational failure. A compiled paragraph is a workpaper. Climate and sustainability filings go out under named owners after review, any required assurance, and legal read.
Build a handoff the owner can use: sourced paragraphs, blank lines with the missing system and period called out, and a list of extracts used. Do not present a clean pack that hides the gaps. Hidden gaps get copied into the filing set.
Review should check three things, in order. First, every number matches the named extract for the named period. Second, every blank is still blank. Third, no sentence implies a metric the extract does not contain. Only then does tone, length, and framework mapping get edited.
The disclosure owner still files. Internal audit, assurance providers, and counsel still do their work. Nothing in this workflow replaces those steps. It only stops the first draft from becoming the place where numbers are born.
Variance work follows the same rule. A variance report with driver attribution that invents a driver is as unusable as an ESG paragraph that invents tonnes. Keep both in the sourced-or-silent column.
Keep the source map current as systems change
Source systems change owners, charts, and period locks. Revisit the metric-to-field map when a close calendar, ERP cutover, or carbon-ledger change lands. A draft that still cites last year's extract path will look sourced and be wrong.
When CSRD and SEC climate text ask for related facts, load each required line and draft each from its extract. Do not merge them into one uncited paragraph; that is how a sourced EU figure becomes an unsourced US sentence.
If the extract process itself is weak, fix extraction before you scale drafting. More generated pages will not repair a missing scope-3 category or an unreconciled energy total. The quality outcome is a paragraph that cites system and period, or an empty space the owner can see. That is the only output this workflow should be willing to produce.
Is this worth automating for you?
Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other. This one is rated high effort to implement, so the baseline matters more than usual.
DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.
Measure the baseline first