As a clinical trial statistician or programmer, answer two short questions in Your review: the task and the inputs and outputs. Agreeing with both approves this benchmark; disagreeing with either needs a comment. Propose a fix with the Edit button on any source file, or add it to your comments.
We suggest spending no more than 5 minutes on a review. The other tabs beside Your review are background for assessment, not under review.
Summary
README.mdPublic entries: Python and R. Passing coverage requires an installed inventory.
Goal: demonstrate a study level changing details inside inherited
columns - AVAL, ANRIND, and PARCAT1.
Input: three spec files, read root-first:
spec_organization.yamlturns the laboratory test code, result, and reference range indicator intoPARAMCD,AVAL,ANRIND, andPARCAT1, reading the indicator without regard to letter case; it marksAVALas the analysis value and checks that it is not negative;spec_compound.yamladds the low reference range wording the organization does not list, and notes thatAVALcomes from the central laboratory;spec_study.yamlis the entry: it applies one corrected result, marksAVALas adjudicated and checks that it is never missing, leaves an unrecognized indicator empty, statesPARCAT1as the one category this study collects, and declares the complete output.
Each level names the one level above it, so the chain reads organization, then compound, then study, and a later level wins where two levels state the same detail.
Note: a later level composes a column detail by detail. The added
reference range wording joins the two the organization already lists,
the three annotations on AVAL accumulate, and the case-insensitive
reading survives a level that never mentions it. A level naming a
different way to produce a value replaces it whole instead, which is
why PARCAT1 stops reading the test code. Lists never accumulate: the
study's own check on AVAL replaces the organization's.
Inputs
Under review1 source fileinput/lb.csv
Edit4 rows| USUBJID | LBTESTCD | LBSTRESN | LBSTRESU | LBNRIND |
|---|---|---|---|---|
| ALT | 12.5 | U/L | n | |
| AST | -1.0 | U/L | h | |
| ALT | 21.0 | U/L | l | |
| AST | 30.0 | U/L | x |
Expected output
Under review4 expected rowsexpected/adlb.csv
Edit4 rows| USUBJID | PARAMCD | AVAL | ANRIND | PARCAT1 |
|---|---|---|---|---|
| ALT | 12.5 | NORMAL | CHEMISTRY | |
| AST | 31 | HIGH | CHEMISTRY | |
| ALT | 21 | LOW | CHEMISTRY | |
| AST | 30 | — | CHEMISTRY |
Human review and assessment
| Dataset Name | Variable Name | Variable Label | Type | Codelist/Controlled Terms | Core | Computational Method | Origin |
|---|---|---|---|---|---|---|---|
| ADLB | AVAL | If USUBJID = '01' AND PARAMCD = 'AST' then "31.0"; otherwise "LB.LBSTRESN". | Derived | ||||
| ADLB | ANRIND | Recode None: ; missing or unlisted values stay missing. | Derived | ||||
| ADLB | PARCAT1 | Set constant value "CHEMISTRY". | Assigned |
| Version | Date | Author | Description | Reviewer | Sign-off |
|---|---|---|---|---|---|
| 1.7 | 2026-10-20 | yamaa docs build | Read a specification in the 1.0 surface as its 0.5 counterpart; state that missing values stay missing where a mapping declares no missing handler, and leave out a declared missing answer that restates a handler's default | ||
| 1.6 | 2026-10-17 | yamaa docs build | Describe collected date parts written as ISO 8601 date text and times of day counted in seconds since midnight | ||
| 1.5 | 2026-10-17 | yamaa docs build | Name collected precision in words instead of letter codes; state imputation fallbacks, minimum source precision, bounds ignored outside the collected period, and invalid text with no handler as an error; describe date and datetime shifts, imputation flag codes, and partial text giving no date part | ||
| 1.4 | 2026-10-15 | yamaa docs build | State datetime precision codes through the hour and minute, and complete only the time parts a collected datetime lacks | ||
| 1.3 | 2026-09-29 | yamaa docs build | Show study codelist names, external dictionaries, and ISO 8601 formats in variable rows; list the document's codelist values and metadata | ||
| 1.2 | 2026-09-29 | yamaa docs build | Classify ADaM copies from a declared input as Predecessor and recodes as Derived, and SDTM recodes of locally derived columns as Derived | ||
| 1.1 | 2026-09-29 | yamaa docs build | Resolve lookups into the donor record they select, and give every derivation shape a plain-language rule instead of its raw YAML | ||
| 1.0 | yamaa docs build | Initial generation from spec.yaml |
yamaa