Skip to main content
DoneThat

AI Adoption GuideGovernmentReport

Legislative compliance report assembler

Agentic AI extracts mandatory reporting fields from operational systems and assembles statutory reports on schedule, with a human review step before submission.

Government processPlanFundAuthorizeDeliverInspectEnforceReportClose

By Don, DoneThat’s AI coach · updated

A cited cell or an empty cell

A statutory report cell is ready when it names two things: the source system field the value came from, and the statutory line that value is meant to fill. If that field is missing, null, or not closed for the period, the cell stays empty. The assembler does not invent a figure.

That is the quality bar. A complete-looking grid is not the goal. A defensible grid is. Every populated cell carries both cites. Every gap is still a gap. A person still submits.

Reporting leads already know the counter-pressure: put something in so the packet can move. A blank is a control. A guessed number is a statement to a legislature, an overseer, or a statutory form that you cannot unwind without amending a filing.

Map statute lines to system fields before extraction

Do not start by asking an agent to "build the compliance report" from the ERP. Start with a line map a reviewer can sign.

Inventory the current instruction. List every line, schedule, footnote, and breakout the statute or form requires. For each item, record the printed label, the definition (what is in scope, which fund or program, expended versus obligated, which period), the primary system of record, and the exact field or a derivation that is written down and owned. The source is a field in an operational system. It is not last quarter's PDF. It is not an analyst workbook unless that workbook is the designated record.

Hold one illustrative example in the map and use it as the test row. A quarterly legislative expenditure schedule includes a line labeled "personnel services, general fund, current quarter." The map points that line to the financial or payroll system's general-fund personnel object for the closed quarter, with the instruction's meaning of expended or obligated written on the row. It does not point at a headcount dashboard, a budget-versus-actual sheet that mixes encumbrances, or a management total that should be close. If payroll has not posted for the quarter, the mapped field is empty, so the report cell stays empty. That empty cell is a successful assembly, not a failed job.

Add a sign-off column. The reporting lead confirms the statutory definition. The system owner confirms the field actually holds that definition. Unsigned rows do not go into extraction.

When two systems could answer the same line, the map names a primary and a conflict rule. Finance, HR, permitting, case, and grants data often sit across Microsoft, OpenGov, Tyler, and Salesforce Government Cloud environments, plus older ledgers. Treat those products as a class of systems of record. The map chooses the field. The model does not shop for a friendlier number. If the primary is empty, the cell stays empty. Do not substitute an operational total from a second system because the first one is late.

Version the map. When the form or statute changes a definition, cut a new version and keep the old one with the filing that used it. Do not silently retarget a historical line.

Fill from the map, cite every value, leave gaps blank

Run extraction on the close calendar, not on the filing deadline. For each mapped line, write a cell package: the value or a blank, the source cite (system, object or table, field, period, as-of time), and the statutory line identifier.

A filled cell with no source is not a filled cell. Strip the value or block it from review. Keep the cite on the cell. A separate appendix of sources that can drift from the grid is how uncited numbers survive.

Derived lines use the same rule. If the statute wants a total of three lines, the total is the sum of cited components. If one component is blank, the total is blank or marked incomplete. Inventing a statutory total from two of three lines, or from a rounded management figure so the schedule adds up, is still an invented figure.

Empty stays empty. Carrying forward last period, dropping in a budget amount, averaging peer programs, or writing a reasonable estimate all invent a figure. They turn a close problem or a mapping gap into a number the institution must defend.

Produce a gap list with the draft: which lines are blank, which mapped field was empty, which close had not posted. Circulate that packet. Circulation is not filing. Keep status words exact: assembled, reviewed, submitted.

Three ways a draft becomes a misstatement

These three look like progress when time is short.

A filled cell with no source. The grid looks done. After a restatement, nobody can reproduce the number from a field. Require the source field and the statutory line ID on the cell, or treat the cell as empty.

Treating the draft as filed. Assembly can run on a schedule and drop a packet in a queue. That packet remains a draft until a person with filing authority submits it through the channel the statute or overseer requires: portal, upload, clerk, or paper. A job marked filed when the draft lands trains people to stop at the comfortable step.

Inventing a statutory total. Totals, percentages, and breakouts invite helpful arithmetic. If a cell needed for the computation is empty, do not back into the total from a narrative target or from a dashboard KPI. An anomaly-surfacing dashboard can flag an unexpected swing after cited numbers exist. It is not a source for a missing statutory line.

Do not write a story into the number cell. A reviewer note can say why a field is late. A variance explainer can discuss movement once two cited periods exist. Neither replaces a blank with a substitute figure.

Review the packet, then a person files

Build the review for checking. For each line, show the statutory label, mapped source, value or blank, cite, and any close or mapping exception. Sort exceptions to the top so blanks and uncited values are not buried under clean rows.

The reviewer confirms four things: the map version matches the current instruction, no value remains without a source cite, blanks are still blank, and totals are complete computations or explicitly incomplete. Then a person submits. The agent does not. Whatever the channel, the name on the filing is a human's.

After submission, retain the draft, the map version, the cites, the reviewer identity, and the submission artifact. Wire that retention to an audit trail auto-documenter. The assembler shows how a cell was built. The trail shows who signed the map, who reviewed, and when the packet left.

Keep the filed cites for variance, audit, and public copy

Do not re-extract a better number for explanations or public copy after a period is filed. A variance explainer should start from the filed cites. A public-facing data summarizer should summarize filed, cited figures, not the pre-review draft and not a later ledger pull. Mixing those layers is how a public figure and a statutory schedule diverge.

The next cycle reuses the same map unless the instruction changed. The quality bar does not move. A cell cites the source system field and the statutory line it fills. Empty stays empty if the field is missing. A person still submits.

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