← All standards
Open specificationDraftPublished September 2026Changelog

The Recurring Report Build Standard

How the Monday report arrives on Monday with every number traceable to the system it came from, and says so plainly when a number cannot be computed. Written so you can build it yourself.

Used by

  • Finance Manager
  • Operations Manager
  • Franchise Manager
  • Bookkeeper

10 min read · Published by AI Pathway

Using Claude? This standard installs as a skill. Guides for ServiceM8, Xero and Simpro.

How to get this live in your business

Build it for mePick a time and we scope the definitions register and the schedule on your sources.
Build it myself

DIY. The objects, the checks in order, and the pass test.

What this is

An open build standard for the report a business produces for itself, a franchisor, a lender or a board on a schedule, built from the systems of record rather than from a spreadsheet somebody updates.

The core rule

Every figure names its definition in a register, the source it was read from and the time it was read. A measure is computed once from one definition. A figure with no definition is not a figure.

What it does not do

It does not show last period's value when a source cannot be read, does not write a sentence with a number the figures do not carry, and does not change a published report in place.

The hard part

Not the query. The measure that means one thing to the owner and another to the bookkeeper, and the figure that quietly repeated last month because the feed was down.

The report said revenue was up. It was last month’s figure, because the feed had been down since Thursday and the spreadsheet kept the old cell. The commentary underneath said up eleven percent, a number nobody could find on the page. The lender read it. That is not a reporting problem. It is a report with no definitions, no sources and no way to say it did not know.

One period, definitions to published

  1. The scheduled time arrives, whether or not anything changed.
  2. Read the definitions register: one definition per measure, with the source, the query and the owner.
  3. Read each source for the period and stamp the time it was read on the figure.
  4. Build one view per audience, carrying only the measures declared for it. Any prose describes figures that exist and never states a number they do not carry.
  5. Was every source readable? If no, that figure is published as unavailable with the reason, never as last period's value, and its owner is told.
  6. If yes, the report is published on time with the source and as-of time on every figure.
  7. Is every figure inside its declared threshold against the prior period? If yes, the report and its versions are on the record. If no, a named person is told, and any correction is a new version by a person, never an edit in place.
The definition comes before the number, because a figure nobody defined cannot be wrong or right. The filled diamond is the source read: a figure that cannot be read publishes as unavailable, never as last period’s value. The loop is the correction, a new version by a named person.

Take the spec to Claude, ChatGPT or Copilot. The sentence to paste is one click away.

1. What this standard covers

Any report produced on a schedule from systems the business runs: the Monday numbers for the owner, the monthly pack for a lender, the franchisor’s return, the board paper. If the same measures are produced every period and somebody relies on them, this applies.

The rule that a measure has one definition computed once comes from the Multi-Site Conformance standard, where it stops branches computing the same thing differently. Here it stops the owner and the bookkeeper doing the same. Any sentence about what a rule requires is the Cited Answer standard’s job, with a card. The accounts admin paper is the closest argument beside it.

The failure this prevents is specific. Not a wrong number. A number nobody can trace, on a report that went out late or not at all the week it mattered, with prose underneath that said something the figures did not.

2. The definitions register

Before a report exists, a person writes the definition of each measure once: which source, which query, which period, which filters, and who owns it. Revenue is invoiced revenue from the ledger for the calendar month, excluding credit notes, owned by the bookkeeper. Jobs completed is jobs with a completion date in the week from the job system, owned by the operations manager. Most reports fall over because two people hold two of those sentences in their heads and never wrote either down.

The register is the product. The report is what it produces.

3. The objects, and what is in them

Six objects. The definition and the version are the two most reporting tools leave out, because a dashboard that refreshes looks like it has both.

For your developer. Show the fields
Definition                        # the register, written once by a person
  - id, measure, source, query_ref
  - period (week | month), filters[], owner

Figure                            # one per measure per report
  - report_id, measure
  - value (null when unavailable), unavailable_reason
  - definition_id, source, as_of   # all three required on a value

Report
  - id, period, scheduled_at, published_at
  - version, audience_id, published_by (a person, or the schedule)
  - figures[], narrative (may describe, may not invent)
  - status (published | superseded), supersedes (report id)

Threshold
  - measure, direction (up | down), amount, notify (a person)

Audience
  - id, name, measures[]           # the only measures this view carries

Version
  - report_id, version, reason, by (a person), at

A Figure with a value and no definition_id is the defect this standard exists to make unrepresentable. A Report edited after published_at with no new version is the other, and neither should be writable.

4. The checks, in order

The order is the claim. The definition is read before the source, the source before the figure, and the figure exists with its as-of time before a sentence is written about it.

  1. Every figure on the report names a definition in the register. A figure is published only from a definition written once in a definitions register: the query over the source, the period and the filters. A figure with a value and no definition is never published; a measure the register does not define publishes as unavailable with reason no_definition.
  2. One definition of every measure, computed once per period and reused. A measure is computed once per period from its one definition and the same figure is reused in every view that carries it. Two definitions for one measure, or two computations that happen to agree today, fail.
  3. Every figure carries the source it was read from and the time it was read. Each figure names the source system and the as-of time the source was read for it, taken from the read itself and never typed. A figure with a value and no source, or no as-of time, fails.
  4. The report publishes at the scheduled time whether or not anything changed. The schedule is the only trigger. The report for a period publishes when its scheduled time arrives, never before it and never because somebody remembered, and it publishes even when every figure is the same as last period. A skipped period fails; so does one published early.
  5. A figure whose source could not be read publishes as unavailable, with the reason. When a source cannot be read, the figure is published with no value and a reason, and the definition's owner is told. It is never the previous period's value shown as current, and never a blank with no reason.
  6. Prose on the report describes figures that exist and never states a number they do not carry. A sentence on the report may name a figure and say what it is. It may not state a number, a percentage or a comparison the figure list does not carry. A sentence with a number that is not on the figure list fails.
  7. A figure past its declared threshold against the prior period notifies a named person that run. A threshold is a measure, a direction, an amount and a person, set once by a person. When a figure moves past it against the prior period, the named person is notified in the same run. Where the prior period's figure is unavailable the comparison is escalated, never assumed.
  8. Each audience sees the figures declared for it and nothing else. An audience is a named recipient group with a declared list of measures. Its view of the report carries exactly those measures. A lender's view carrying staff-level detail fails; so does an owner's view missing a measure declared for it.
  9. A published figure changes only by a named person publishing a new version with the reason. A published report is never edited in place. A correction is a gate carrying the person's name and the reason, followed by a new version that supersedes the old one. The old version stays readable. Editing a published figure in place, or a version with no person or no reason, fails.
  10. For any period: the figures, definitions, sources, as-of times, versions and who published, retrievable. When the lender asks where a number came from, the record for that period shows every version of every view, each figure's definition, source and as-of time, and who published each version and why.
  11. It survives the builder. Someone other than the builder can explain what it does, and it runs on an account the business owns.
  12. The pass test passes. On real sources for two periods: one source made unreadable and its figure published as unavailable, one threshold crossed and a person notified, one correction published as a new version, and both periods published on time.

5. The five queues

QueueWhat it holdsThe rule
ScheduledThe next period and the time it publishesIt publishes at that time whether or not anything changed
PublishedThe current version for each audience, every figure with its source and as-ofNever edited. A change is a new version
Unavailable figureA measure whose source could not be read this periodShown as unavailable with the reason, and its owner told. Never last period's number
Threshold crossedA figure that moved past its declared threshold against the prior periodA named person told that run. The report still publishes
SupersededEvery earlier version, with the reason and the person who replaced itKept, readable, never deleted

Unavailable is a success. A report that says a figure could not be read this week, with the reason, is worth more than one that shows a confident number from last week. The first can be acted on. The second is read as true.

6. What a sentence on a report may say

A model may write the commentary. It may say that revenue rose against the prior period, that two figures were unavailable, that jobs completed crossed its threshold. It may not state a number, a percentage or a comparison the figures on the page do not carry. “Up eleven percent” is allowed only if eleven percent is a figure with a definition. Otherwise it is a number the model made up, printed under numbers that were not, and the reader cannot tell which is which.

The same rule this site holds itself to. A number without a source is not on the page.

7. What stays with a person

  • Every correction, published as a new version with their name and the reason.
  • Setting a threshold, and who is told when it is crossed.
  • What a figure means to a lender, a franchisor or a board.
  • Whether a report goes outside the business at all.

8. Provider: what to stub, and what not to hand-roll

No hosted step. The part not to get wrong is the schedule that publishes regardless, with its version history, on your own tenant. The register stays yours. Everything else a coding agent builds against the stub in an afternoon.

For your developer. Show the provider config
provider:
  stub:       local.mock_sources
  production: none                       # no hosted step; runs on your own systems

stays local                          # yours, and the standard
  - the register, in a file with an owner per measure
  - the source reads with an as-of time on each
  - the audience views and the thresholds

the live step
  - the schedule, on your own tenant, publishing on time whether or
    not anything changed, and the version history. There is no
    hosted product for it.

A vendor selling a dashboard is selling the refresh, which is the easy half, and is silent about what the tile shows when the feed is down. Ask them that first, then ask who defined the measure.

The pass test. On real sources, for two periods. Make one source unreadable for the second period: the figure must publish as unavailable with the reason and its owner must be told, and the report must still go out on time. Set a threshold on one measure and cross it: a named person must be told that run. Correct a published figure as a named person: a new version must exist with the reason, the old version must be readable, and nothing edited in place. Then check both periods published at their scheduled time with a source and an as-of time on every figure, and read the commentary for any number that is not on the figure list. If a stale figure showed as current, or a sentence invented one, the standard is not implemented.

9. Conformance checklist

Hold a DIY build or a vendor to this. If a box is empty, it is not in production.

  • 1. Every figure on the report names a definition in the register. A figure is published only from a definition written once in a definitions register: the query over the source, the period and the filters. A figure with a value and no definition is never published; a measure the register does not define publishes as unavailable with reason no_definition.
  • 2. One definition of every measure, computed once per period and reused. A measure is computed once per period from its one definition and the same figure is reused in every view that carries it. Two definitions for one measure, or two computations that happen to agree today, fail.
  • 3. Every figure carries the source it was read from and the time it was read. Each figure names the source system and the as-of time the source was read for it, taken from the read itself and never typed. A figure with a value and no source, or no as-of time, fails.
  • 4. The report publishes at the scheduled time whether or not anything changed. The schedule is the only trigger. The report for a period publishes when its scheduled time arrives, never before it and never because somebody remembered, and it publishes even when every figure is the same as last period. A skipped period fails; so does one published early.
  • 5. A figure whose source could not be read publishes as unavailable, with the reason. When a source cannot be read, the figure is published with no value and a reason, and the definition's owner is told. It is never the previous period's value shown as current, and never a blank with no reason.
  • 6. Prose on the report describes figures that exist and never states a number they do not carry. A sentence on the report may name a figure and say what it is. It may not state a number, a percentage or a comparison the figure list does not carry. A sentence with a number that is not on the figure list fails.
  • 7. A figure past its declared threshold against the prior period notifies a named person that run. A threshold is a measure, a direction, an amount and a person, set once by a person. When a figure moves past it against the prior period, the named person is notified in the same run. Where the prior period's figure is unavailable the comparison is escalated, never assumed.
  • 8. Each audience sees the figures declared for it and nothing else. An audience is a named recipient group with a declared list of measures. Its view of the report carries exactly those measures. A lender's view carrying staff-level detail fails; so does an owner's view missing a measure declared for it.
  • 9. A published figure changes only by a named person publishing a new version with the reason. A published report is never edited in place. A correction is a gate carrying the person's name and the reason, followed by a new version that supersedes the old one. The old version stays readable. Editing a published figure in place, or a version with no person or no reason, fails.
  • 10. For any period: the figures, definitions, sources, as-of times, versions and who published, retrievable. When the lender asks where a number came from, the record for that period shows every version of every view, each figure's definition, source and as-of time, and who published each version and why.
  • 11. It survives the builder. Someone other than the builder can explain what it does, and it runs on an account the business owns.
  • 12. The pass test passes. On real sources for two periods: one source made unreadable and its figure published as unavailable, one threshold crossed and a person notified, one correction published as a new version, and both periods published on time.
  1. 1

    Hold the build to the checklist

    The checks in this standard are what a working build looks like. Implement it yourself, hand it to a developer, or hand the page to an AI with the button below.

  2. 2

    Do not hand-roll

    There is no product for this step. Highest option: none. Checklist plus a build.

  3. 3

    If you are stuck

    Exceptions, three systems, a team that will not maintain a Zap, or an owner who wants it done. We implement when it has to survive the business.

Related reading

Want the whole thing by email?

This paper, plus the rest of the library. One click to stop them.

Run these checks yourself

Every check on this page is published as structured data. This prints them with what to inject, what to assert, and which ones can be proved on your own machine rather than against the live thing.

npx @aipathway/conformance show recurring-report-build-standard

Free and open source, CC BY 4.0. The checks are fetched from this page rather than bundled, so a correction here reaches you without a release, and you cannot end up conformant against a stale copy. The raw JSON is there if you would rather wire it into your own harness, and the package shows how to drive your build through the ports.

Built it, and one check failed?

Tell us which one. You have already read the standard and tried it, so the answer is a fixed price to finish that step, not a call to work out what you need.