Quality / templates

Report Templates

Report Template Library — evidence

ICH E3 encoded as data — the 16-section skeleton, assembly slots, 14.x numbering, and the auto-generated 16.1.9 provenance appendix.

25reviewed requirementstemplates.md
30test recordsjs-unit · r-unit
0failing30 passing
100%requirement coverage25/25 evidenced

Requirements

IDAreaRequirementEvidence typeResult
RPT-MODEL-001The model carries all sixteen ICH E3 top-level sections, numbered 1 to 16, with E3's own headings.1 passing
RPT-MODEL-002The Section 14 substructure reproduces E3: 14.1 demographic, 14.2 efficacy, 14.3 safety, and 14.3.1 to 14.3.4 (AE displays, death and SAE listings, narratives, abnormal laboratory listings). 14.3.3 is modelled as prose, because in E3 it is.1 passing
RPT-MODEL-003Section 16 carries the full appendix structure: 16.1.1 to 16.1.12, 16.2.1 to 16.2.8, 16.3.1 to 16.3.2 and 16.4.1 passing
RPT-MODEL-004Section 16.1.9 (Documentation of Statistical Methods) is declared as accepting generated provenance content — the slot E3 reserved in 1995 that open.csr fills mechanically.1 passing
RPT-MODEL-005Section numbers and slugs are each unique, every number is well formed, and every subsection names a parent that exists in the model.1 passing
RPT-MODEL-006Every declared content type comes from the closed vocabulary text, in_text_display, post_text_index, generated_provenance; a structural heading declares none.1 passing
RPT-MODEL-007Section level, parent and document ordering are derived from the dotted number, so 9.10 sorts after 9.2 and no ordering metadata is stored redundantly.1 passing
RPT-ASM-001Every slot targets a section that exists in the document model and that accepts the content the slot supplies.1 passing
RPT-ASM-002Every text block named by a slot exists in the Text Library.1 passing
RPT-ASM-003Section 14 display numbers are assigned from post_text order at build time and appear nowhere in the source; reordering a slot renumbers the displays without touching a slug.1 passing
RPT-ASM-004An assigned display number that would collide with a section number in the document model fails the build, because such a collision makes every cross-reference in the document ambiguous.1 passing
RPT-ASM-005A display may occupy at most one post-text position, and no two displays may be assigned the same number.1 passing
RPT-ASM-006A slot naming an unknown section, an unknown text block, or content the section does not accept is rejected with the reason.1 passing
RPT-ASM-007The demonstration assembly claims only the sections it populates, names the study, its data cut-off and its analysis set, and states its scope limits — including the absence of efficacy data (design D12).1 passing
RPT-ASM-008The assembler places in_text display variants in narrative sections and post_text variants only under Section 14, and assigns each post-text display its derived number.1 passing
RPT-ASM-009A display placed both in-text and post-text renders both variants from the same ARD file — one analysis, two renderings, never re-authored.1 passing
RPT-ARD-001Every display in the assembly resolves to a real ARD — the pipeline output pointed at by outputs/<slug>/current.json where one exists, a committed fixture otherwise — and the assembled document records which, so a report built from fixtures can never be mistaken for one built from a pipeline run.1 passing
RPT-PROV-001Section 16.1.9 is generated from the provenance envelope of every ARD in the report: specification and display hashes, input dataset hashes with row counts and source package versions, the R and package versions, and the source commit. It is generated, never authored.1 passing
RPT-OUT-001assemble() emits docs/assembled/csr.json in the documented opencsr/csr/v1 shape: study, template, flat sections, display index, text blocks, provenance appendix and gate report.1 passing
RPT-OUT-002The section list is flat and in document order, and every section that names a parent names one that is present — the site builder can nest it without a second pass.1 passing
RPT-OUT-003A build with any structural error, unresolved binding, unresolved cross-reference or numeric-fidelity violation reports ok: false and exits non-zero; the shipped configuration builds clean.1 passing
RPT-OUT-004The assembled document contains the full E3 skeleton, with sections the demonstration does not fill marked unpopulated rather than dropped — the numbering is what makes the artifact recognisable as a CSR.1 passing
RPT-OUT-005docs/assembled/csr.html contains resolved values and never a raw binding token or an unresolved marker.1 passing
RPT-OUT-006csr.html is self-contained: no external host, no script, no external stylesheet, no font or image fetched at view time.1 passing
RPT-OUT-007The rendered document shows the assigned display numbering, the per-block gate report and the generated provenance appendix, so a reader can see the evidence for the numbers beside them.1 passing

Test records

ResultSuiteTestRequirementsFile
passjs-unitAssembled CSR document model RPT-ARD-001: every display resolves to a real ARD, and the source is recorded as outputs or fixture (#1)RPT-ARD-001tests/unit/assemble-document.test.js
passjs-unitAssembled CSR document model RPT-ASM-008: in-text displays land in narrative sections and post-text displays only under Section 14 (#1)RPT-ASM-008tests/unit/assemble-document.test.js
passjs-unitAssembled CSR document model RPT-ASM-009: the same display appears in-text and post-text from a single ARD (#1)RPT-ASM-009tests/unit/assemble-document.test.js
passjs-unitAssembled CSR document model RPT-OUT-001: assemble() emits the documented csr.json shape (#1)RPT-OUT-001tests/unit/assemble-document.test.js
passjs-unitAssembled CSR document model RPT-OUT-002: the section list is flat, in document order, and every child names a parent that is present (#1)RPT-OUT-002tests/unit/assemble-document.test.js
passjs-unitAssembled CSR document model RPT-OUT-003: the build has no errors and every gate passes (#1)RPT-OUT-003tests/unit/assemble-document.test.js
passjs-unitAssembled CSR document model RPT-OUT-004: the full E3 skeleton is present, with unpopulated sections flagged rather than dropped (#1)RPT-OUT-004tests/unit/assemble-document.test.js
passjs-unitAssembled CSR document model RPT-PROV-001: Section 16.1.9 is generated from the ARD provenance envelopes, not authored (#1)RPT-PROV-001tests/unit/assemble-document.test.js
passjs-unitAssembled CSR document model TXT-APPR-005: draft generated blocks are excluded from the assembled report but still reported (#1)TXT-APPR-005tests/unit/assemble-document.test.js
passjs-unitAssembled CSR document model TXT-TRACE-001: every rendered block carries its resolved bindings back to an ARD row (#1)TXT-TRACE-001tests/unit/assemble-document.test.js
passjs-unitAssembled CSR document model TXT-XREF-003: every cross-reference in the assembled document resolved (#1)TXT-XREF-003tests/unit/assemble-document.test.js
passjs-unitAssembled CSR rendering RPT-OUT-005: csr.html is written and contains resolved numbers, never a raw binding (#1)RPT-OUT-005tests/unit/assemble-document.test.js
passjs-unitAssembled CSR rendering RPT-OUT-006: csr.html is self-contained — no external host, script or stylesheet (#1)RPT-OUT-006tests/unit/assemble-document.test.js
passjs-unitAssembled CSR rendering RPT-OUT-007: the rendered document shows the numbering, the gate report and the provenance appendix (#1)RPT-OUT-007tests/unit/assemble-document.test.js
passjs-unitAssembly configuration RPT-ASM-001: every slot targets a section that exists and accepts the content it is given (#1)RPT-ASM-001tests/unit/assemble-template.test.js
passjs-unitAssembly configuration RPT-ASM-002: every text block named by a slot exists in the Text Library (#1)RPT-ASM-002tests/unit/assemble-template.test.js
passjs-unitAssembly configuration RPT-ASM-003: 14.x numbers are assigned from post_text order, not written in the source (#1)RPT-ASM-003tests/unit/assemble-template.test.js
passjs-unitAssembly configuration RPT-ASM-004: an assigned display number that would collide with a section number fails the build (#1)RPT-ASM-004tests/unit/assemble-template.test.js
passjs-unitAssembly configuration RPT-ASM-005: a display may not occupy two post-text positions, and positions may not repeat (#1)RPT-ASM-005tests/unit/assemble-template.test.js
passjs-unitAssembly configuration RPT-ASM-006: a slot pointing at an unknown section, an unknown block or the wrong content type is rejected (#1)RPT-ASM-006tests/unit/assemble-template.test.js
passjs-unitAssembly configuration RPT-ASM-007: the assembly claims only sections the demonstration populates, and declares its scope (#1)RPT-ASM-007tests/unit/assemble-template.test.js
passjs-unitICH E3 document model RPT-MODEL-001: sections.yaml carries all sixteen top-level ICH E3 sections in order (#1)RPT-MODEL-001tests/unit/assemble-template.test.js
passjs-unitICH E3 document model RPT-MODEL-002: the Section 14 substructure matches ICH E3, including 14.3.1 to 14.3.4 (#1)RPT-MODEL-002tests/unit/assemble-template.test.js
passjs-unitICH E3 document model RPT-MODEL-003: Section 16 carries 16.1.1 to 16.1.12, 16.2.1 to 16.2.8, 16.3 and 16.4 (#1)RPT-MODEL-003tests/unit/assemble-template.test.js
passjs-unitICH E3 document model RPT-MODEL-004: 16.1.9 is the auto-generated provenance slot (#1)RPT-MODEL-004tests/unit/assemble-template.test.js
passjs-unitICH E3 document model RPT-MODEL-005: section numbers and slugs are unique and every subsection has a defined parent (#1)RPT-MODEL-005tests/unit/assemble-template.test.js
passjs-unitICH E3 document model RPT-MODEL-006: every content type comes from the closed vocabulary (#1)RPT-MODEL-006tests/unit/assemble-template.test.js
passjs-unitICH E3 document model RPT-MODEL-007: section level, parent and document ordering derive from the dotted number (#1)RPT-MODEL-007tests/unit/assemble-template.test.js
passr-unitDSP-ALL-001: every display renders a table that actually contains numbers (#1)DSP-ALL-001test-displays.R
passr-unitDSP-ALL-002: every display declares a regulatory identifier and a source line (#1)DSP-ALL-002test-displays.R

Traceability

No generated output yet, so the data → ARD → display chain is empty.

Provenance

Generated
2026-07-27T04:44:02.378Z
Environment
os Darwin 23.6.0 · node v24.14.0 · vitest 2.1.9 · r 4.3.3
CI run
Not recorded for this evidence set