As a clinical trial statistician or programmer, challenge anything in this benchmark: describe a problem in Comments, or propose a fix with the Edit button on any source file.
- Task: Is this a specification error a study team could realistically make, and should the build stop on it rather than continue?
- Inputs: Do they trigger the failure for the reason the summary gives?
- Expected failure: Is this the right error, raised at the right point, and would it tell the programmer what to fix?
The other tabs beside Comments are background for assessment, not under review.
Summary
README.mdGoal: carry the analysis date (ADT), study day (ADY), and
measured value (AVAL) through from a pre-derived ADVS slice
(ADVS_RAW), placing each record in the analysis window its study
day falls in.
Input: pre-derived ADVS slice carrying analysis date (ADT),
study day (ADY), and measured value (AVAL).
Variables:
AVISITwould be the analysis window the study day falls in:SCREENINGbefore day 0,BASELINEon days 0 and 1,WEEK 2on days 2 to 21,WEEK 4on days 22 to 42, andPOST-TREATMENTfrom day 43; blank when the study day is missing, so the record belongs to no window.
Note: a record is identified here by study, subject, parameter, and analysis window. With nothing else choosing the rows, those identities are the rows, so they are settled before any other value is computed. The window is placed from the study day, which is one of those other values, so the run is rejected before any data is read and no artifact is accepted. Even if the window read the slice's study day directly, a record with no study day would have no window and so no identity. The expected file shows the intended rows, not an accepted result.
How to fix
Decide which keys the dataset is on. If it is one record per analysis visit, every record must fall in a window. Recover the analysis date in the governed source where it is available. Where it is not, keep the record out of the dataset rather than give it a place it does not have. A row template selects the records that become rows, and each row then comes from one kept record, so its window can be placed from its study day. Move one column's derivation into it and leave the rest where they are:
columns:
- name: AVAL
type: float
rows:
- id: windowed
filter: "ADVS_RAW.ADY IS NOT NULL"
derivations:
AVAL:
source: ADVS_RAW.AVAL
If it is one record per collected record, identify rows by the collected record instead, and a record with no window keeps an empty one:
keys: [STUDYID, USUBJID, PARAMCD, VSSEQ]
Do not label the record into a placeholder window such as NOT ASSIGNED. That
keeps the row by asserting an analysis visit the data does not support, and a
second such record collides with the first.
Expected failure
Editthe run is rejected; no artifact is acceptedexpected/error.yaml- phase
- validation
- condition
- key_dependency
- requirement
- REQ-0074
expected/error.yaml
phase: validation
condition: key_dependency
spec_paths:
- columns.AVISIT.derivation
requirement: REQ-0074
context:
column: AVISIT
dependency: ADY
Inputs
Under review1 source fileinput/advs_raw.csv
Edit9 rows| STUDYID | USUBJID | PARAMCD | VSSEQ | ADT | ADY | AVAL |
|---|---|---|---|---|---|---|
| YAMAA-01 | SYSBP | 1 | 2025-01-08 | 1 | 132 | |
| YAMAA-01 | SYSBP | 2 | 2025-01-22 | 15 | 138 | |
| YAMAA-01 | SYSBP | 3 | 2025-02-05 | 29 | 130 | |
| YAMAA-01 | SYSBP | 4 | 2025-02-19 | 43 | 128 | |
| YAMAA-01 | SYSBP | 1 | 2025-02-08 | 1 | 118 | |
| YAMAA-01 | SYSBP | 2 | 2025-02-21 | 14 | 122 | |
| YAMAA-01 | SYSBP | 3 | — | — | 120 | |
| YAMAA-01 | SYSBP | 1 | 2025-01-02 | -5 | 140 | |
| YAMAA-01 | SYSBP | 2 | 2025-01-07 | 0 | 136 |
Unexpected Output
Under review9 rows presented to the failing check - not an accepted artifactexpected/advs.csv
Edit9 rows| STUDYID | USUBJID | PARAMCD | VSSEQ | ADT | ADY | AVAL | AVISIT |
|---|---|---|---|---|---|---|---|
| YAMAA-01 | SYSBP | 1 | 2025-01-08 | 1 | 132 | BASELINE | |
| YAMAA-01 | SYSBP | 2 | 2025-01-22 | 15 | 138 | WEEK 2 | |
| YAMAA-01 | SYSBP | 3 | 2025-02-05 | 29 | 130 | WEEK 4 | |
| YAMAA-01 | SYSBP | 4 | 2025-02-19 | 43 | 128 | POST-TREATMENT | |
| YAMAA-01 | SYSBP | 1 | 2025-02-08 | 1 | 118 | BASELINE | |
| YAMAA-01 | SYSBP | 2 | 2025-02-21 | 14 | 122 | WEEK 2 | |
| YAMAA-01 | SYSBP | 3 | — | — | 120 | — | |
| YAMAA-01 | SYSBP | 1 | 2025-01-02 | -5 | 140 | SCREENING | |
| YAMAA-01 | SYSBP | 2 | 2025-01-07 | 0 | 136 | BASELINE |
Comments and assessment materials
| Dataset Name | Variable Name | Variable Label | Type | Codelist/Controlled Terms | Core | Computational Method | Origin |
|---|---|---|---|---|---|---|---|
| ADVS | STUDYID | Study Identifier | character | Copy value from ADVS_RAW.STUDYID. | Predecessor | ||
| ADVS | USUBJID | Unique Subject Identifier | character | Copy value from ADVS_RAW.USUBJID. | Predecessor | ||
| ADVS | PARAMCD | Parameter Code | character | Copy value from ADVS_RAW.PARAMCD. | Predecessor | ||
| ADVS | VSSEQ | Sequence Number | numeric | Copy value from ADVS_RAW.VSSEQ. | Predecessor | ||
| ADVS | ADT | Analysis Date | numeric | ISO 8601 | Copy value from ADVS_RAW.ADT. | Predecessor | |
| ADVS | ADY | Analysis Relative Day | numeric | Copy value from ADVS_RAW.ADY. | Predecessor | ||
| ADVS | AVAL | Analysis Value | numeric | Copy value from ADVS_RAW.AVAL. | Predecessor | ||
| ADVS | AVISIT | Analysis Visit | character | Band ADY at 0, 2, 22, 43 into "SCREENING", "BASELINE", "WEEK 2", "WEEK 4" and "POST-TREATMENT", intervals closed on the left; a missing source → blank. | Derived |
| Version | Date | Author | Description | Reviewer | Sign-off |
|---|---|---|---|---|---|
| 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
Comments
Signed in with GitHub; saved in repository Discussions