Generated mechanically: the dataset inventory, the validation-findings table, the programs-submitted list, and the assembly of the SDRG/ADRG document.
Left to a human, deliberately: every narrative section, and every sponsor explanation of a finding. Findings with no explanation are only flagged (needs_explanation = TRUE) – never filled in, guessed or auto-worded.
section_findings() now takes the Pinnacle 21 report column schema – Dataset, Variable, Rule ID, Message, Records affected, Severity – instead of the previous ad-hoc finding/severity/count columns, and returns those columns in snake_case (rule_id, message, records_affected, …). Column names are matched case- and separator-insensitively; a missing required column is an error naming it. The shape is a data contract, not a package dependency: anything that emits those columns works, and no validator package is imported.explanations is now keyed by rule ID first and message text second (a data frame needs explanation plus Rule ID or Message).section_datasets() gains a key_source column, so every existing consumer sees one extra column.section_datasets() gains a metadata argument: declared key variables are taken from a metacore object (via its ds_vars table) or any data frame with dataset, variable and key_seq columns, in key_seq order. The name-pattern heuristic remains the fallback when a dataset has no declared keys, and key_source records "declared" or "heuristic" for every row.dataset_keys.csv holds the declared keys from the CDISCPILOT01 ADaM define.xml, and findings.csv holds findings from a real Pinnacle 21 run against the CDISCPILOT01 SDTM data.STUDYID, USUBJID, DOMAIN, SUBJID, PARAMCD, VISITNUM, VISIT, AVISIT, anything ending SEQ/ID, else the first two variables. It can miss a real key and invent one; key_source == "heuristic" marks every such row.#, *, /* */) within the first 60 lines, collapsed and truncated at 300 characters. A header below a licence banner or an options/library block gives NA; a stale header is reported verbatim; inputs, outputs and macros are never inspected. No parser was written on purpose – a wrong parse is worse than an honest NA. Now documented in ?section_programs, the README and the vignette rather than only in a source comment.render_guide() needs rmarkdown (a Suggests) and pandoc; without rmarkdown it stops with The package "rmarkdown" is required to render a guide file. before writing anything. Nothing else in the package needs it.guide_spec() / new_guide() / validate_guide(): the guide object holding study-level metadata and an ordered list of sections.section_datasets(): dataset inventory from a named list of data frames or a metadata table.section_findings(): validation-findings table, flagging findings with no sponsor explanation.section_programs(): inventory of a programs directory, with each program’s leading comment block as its description.add_section() / add_narrative(): attach generated sections and hand-written narrative to a guide.render_guide(): render an sdrg/adrg guide to HTML or Markdown via rmarkdown, from the section skeletons shipped in inst/templates.print.reviewerguider_guide(): shows a guide’s sections and which are still empty.