Reporting cycles
One durable period identity per framework and period. Cycles stamp assignments and entries and carry the methodology lock.
Reporting Boundaries adminNew cycle
Annotation · not proposed UIPM ruling 2026-08-23: variant V2 adopted, the lock-state column stays in the list.
Annotation · not proposed UIPM ruling 2026-08-23: the engine is an internal attribute fixed by framework, never user-facing. GRI cycles run on the native engine only; existing frameworks stay on their current path; there is no user choice.
| Cycle | Status | Lock state | Usage | Updated | |
|---|---|---|---|---|---|
2028 (Jan 2028 - Dec 2028) · GRI-NG-2026 [draft] Annotationforward state · reachable only after spec iii ships the vintage registry |
draft | complete | 0 assignments 0 entries |
2026-08-21 | |
2027 (Apr 2027 - Mar 2028) · GRI-NG-2026 [draft] |
draft | none | 0 assignments 0 entries |
2026-08-22 | |
2026 (Jan 2026 - Dec 2026) · GRI-NG-2026 |
active | provisional | 128 assignments 946 entries |
2026-08-20 | |
2025 (Apr 2025 - Mar 2026) · BFG-Group [backfilled] read-only stale sourceA source boundary changed after attribution. The marker is advisory; a company backfill re-run reconciles and clears it. |
active | none | 1,204 assignments 8,769 entries |
2026-08-30 | |
2024 (Apr 2024 - Mar 2025) · BFG-Group [backfilled] read-only |
active | none | 1,178 assignments 8,402 entries |
2026-08-24 | |
2023 (Jan 2023 - Dec 2023) · GRI-NG-2026 [superseded] Annotationforward state, not reachable in I1 · superseded is reserved for I3 restatements; chip and suffix shown for review only |
superseded | complete | 96 assignments 604 entries |
2026-08-15 | |
2022 (Apr 2022 - Mar 2023) · BFG-Group [archived] [backfilled] read-onlyAnnotationarchived by the run-2026-09-02-b2 re-run as now sourceless (spec 7.4) |
archived | none | 61 assignments 240 entries |
2026-09-02 | |
2019 (Jan 2019 - Dec 2020) · BFG-Group [archived] [backfilled] · 0108 read-onlyAnnotationhidden class X4 · spans two year increments, created archived, never a resolution candidate · label carries the spec 6.1 id tiebreak |
archived | none | 0 assignments 0 entries |
2026-08-24 | |
2019 (Jan 2019 - Dec 2020) · BFG-Group [archived] [backfilled] · 0110 read-onlyAnnotationthe archived duplicate that forces the id tiebreak · same period and framework, different source boundary |
archived | none | 0 assignments 0 entries |
2026-08-24 | |
1998 (Jan 1998 - Dec 1998) · GRI-NG-2026 Annotationhistorical onboarding · pre-2018, well above the 1980 floor |
active | provisional | 34 assignments 112 entries |
2026-08-18 |
Items per page
10
Demo helperpagination and items-per-page follow the product list-toolbar convention and are presentation-only · the API list contract pins the ordering and defines the three filters only
Page 1 of 1PreviousNext
Annotation · not proposed UIOrdering is pinned by the API:
period.startYear descending, then createdAt descending. Column headers are not sortable. The API defines exactly three list filters: status[], frameworkCode, startYear; the free-text search box follows the product list-toolbar convention and is presentation-only. So do the pagination and items-per-page controls under the table: no page-size control or page counter is part of the spec list contract.Annotation · not proposed UIThis whole area sits behind the per-tenant rollout flag
reportingCyclesEnabled, OFF for every legacy tenant until the PM enables it; when off, the area is hidden entirely. All routes require authentication plus an explicit admin role and are tenant-scoped from the token. This fictional tenant: reportingCyclesEnabled true · factorLibraryAvailable false (the I1 default).Annotation · not proposed UILabel rule (spec 6.1):
{startYear} ({MMM YYYY} - {MMM YYYY}) · {frameworkCode} from persisted fields only, then suffixes in order [draft] [archived] [superseded] [backfilled]; [backfilled] applies to every cycle whose provenance.source is backfill, on every screen; active adds no suffix. Identical labels among archived duplicates append the last 4 characters of _id (rows 2019 · 0108 and · 0110). The stale-source badge is not part of the label. Its meaning: a source boundary changed after attribution; the marker is advisory and a company backfill re-run reconciles and clears it.Annotation · not proposed UIError codes deliberately given no screen of their own:
409 CYCLE_STATE is the generic refusal for any illegal status transition attempted from a list or detail action (the specific refusals drawn across this set are its named siblings). 409 ENGINE_MISMATCH is not an admin-screen error at all: the NxMap-direction guard raises it on legacy sync paths before external I/O, and no remediation UI exists for it. 422 CLONE_TARGET_AMBIGUOUS belongs to the clone endpoint fix (spec 7.6), not to this area.State gallery · cycle list · annotation · not proposed UI
Status filter · multi-select drawn open
Cleared state · "All"
Status: All
draft
active
superseded
archived
Two values ticked
Status: active, draft
draft
active
superseded
archived
The status filter is a multi-select over exactly the four status values (the list query's status[]). "All" is the cleared state: no boxes ticked. Ticking values narrows the list and the trigger echoes the ticked set.
Row action menus by row state · with server refusals
Draft rows carry both Edit and Activate: activation is a separate action from create and re-verifies every precondition regardless of history. Delete exists for drafts only, refused 409 elsewhere. On archived or superseded rows, lock operations are refused 409 CYCLE_NOT_LOCKABLE and draft-only edits 409 CYCLE_IMMUTABLE. On backfilled rows every mutation is refused 409 CYCLE_BACKFILLED_READONLY.
Disabled action on a backfilled row · tooltip with the server refusal
409 CYCLE_BACKFILLED_READONLY
Backfilled cycles are read-only. Only the backfill runner mutates them, through re-runs and rollback. The refusal is server-enforced, not only a disabled button.
Backfilled cycles are read-only. Only the backfill runner mutates them, through re-runs and rollback. The refusal is server-enforced, not only a disabled button.
Read-only is a server contract (spec 2.5), so the copy attributes the refusal to the server response, never to the greyed-out control alone.
Archive confirmation with usage warning · 409 CYCLE_IN_USE without confirmation
Archive reporting cycle
2026 (Jan 2026 - Dec 2026) · GRI-NG-2026
This cycle is in use. Archiving requires explicit confirmation of the usage below.
Stamped assignments (esgmasterdatas)128
Stamped entries (dataentries)946
I confirm archiving despite this usage (confirmUsage: true)
Without confirmation the server refuses with 409 CYCLE_IN_USE. Archiving never orphans rows: stamped rows keep pointing at the archived cycle. An archived cycle is never a resolution candidate for new rows.
CancelArchive cycle
Empty state · tenant enabled, no cycles yet
No reporting cycles yet
Reporting cycles give every ESG row one durable period identity. Create the first cycle to begin. Cycles can also arrive from a company backfill, a runner operation with sign-off that derives them from existing reporting boundaries; it has no trigger on this page.
New cycle