# Report

object type

A Report (📊; THE REPORT ENGINE, program 3 of THE OFFICE FIX PROGRAM 2): a SAVED REPORT DEFINITION — a validated ReportSpec (the reportRun grammar VERBATIM: a plan + columns, or a plan + groupBy/measures, an optional sort) kept as JSON text (specJson, at most 12288 characters) with its words (describeReport, at most 4096 characters) and the family its rows or groups are made of (terminalFamily). It stores NO result: every run executes as THE RUNNER under the runner's own list rights through reportRun(reportId) (rows on screen, now) or startExportJob(reportId, format) (a file, in the background); the saved spec is RE-VALIDATED at every run (a roster that moved since the save refuses in the teaching voice — edit the spec); only an active definition runs. The definition is the question, never an answer. NOT searchable (no filter roster until the report builder lands).

## Fields

| Field | Type | Notes |
| --- | --- | --- |
| `id` | [ID](/types/#scalars) `ID!` | The record’s id — a UUID the platform assigned when the record was created; every reference to this record uses it. |
| `sysId` | [String](/types/#scalars) `String!` | The group-scoped human-facing system id (RO-…). |
| `type` | [String](/types/#scalars) `String!` | The kind of record — always `Report` here. |
| `caption` | [String](/types/#scalars) `String!` | The record’s display name — what people see it called. |
| `status` | [String](/types/#scalars) `String!` | The FSM state: active \| inactive \| doomed. |
| `parentId` | [ID](/types/#scalars) `ID!` | The parent org group; for a Report parentId === rootId. |
| `rootId` | [ID](/types/#scalars) `ID!` | The org-group family root. |
| `createdAt` | [String](/types/#scalars) `String!` | When the record was created, as a UTC timestamp. |
| `updatedAt` | [String](/types/#scalars) `String!` | When the record last changed, as a UTC timestamp. |
| `revisionNum` | [Int](/types/#scalars) `Int!` | How many times this record has been edited; the first save is 0. |
| `revision` | [ID](/types/#scalars) `ID!` | The OCC revision token — supply it on every mutation of this record; rotates on every write. |
| `refCaptions` | [RefCaption](/types/RefCaption/) `[RefCaption!]!` | The server-composed captions of this record's declared references (the referenced-caption rule) — one row per referenced id; see RefCaption. |
| `specJson` | [String](/types/#scalars) `String!` | The validated ReportSpec as JSON text (the planJson idiom — the receiver parses; at most 12288 characters); replaced WHOLESALE by updateReport(spec) and re-validated at every run. |
| `words` | [String](/types/#scalars) `String!` | The spec in words (describeReport; at most 4096 characters — cut with a trailing … past it) — derived at write; what the list shows before anything runs. |
| `terminalFamily` | [String](/types/#scalars) `String!` | The family the rows or groups are made of (the plan’s last hop’s family, or the start’s) — derived at write, never caller-supplied. |
| `description` | [String](/types/#scalars) | What the report is for — a sentence or three (at most 512 characters); optional, set-only. |

## Used by

- [createReport](/reference/report/createReport/)
- [deactivateReport](/reference/report/deactivateReport/)
- [doomReport](/reference/report/doomReport/)
- [reactivateReport](/reference/report/reactivateReport/)
- [report](/reference/report/report/)
- [updateReport](/reference/report/updateReport/)
