Review ask

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.

  1. Task: Is this a specification error a study team could realistically make, and should the build stop on it rather than continue?
  2. Inputs: Do they trigger the failure for the reason the summary gives?
  3. 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

Lifecycle: reviewedEditUnder review
What this benchmark means
README.md

Goal: 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:

  • AVISIT would be the analysis window the study day falls in: SCREENING before day 0, BASELINE on days 0 and 1, WEEK 2 on days 2 to 21, WEEK 4 on days 22 to 42, and POST-TREATMENT from 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

Edit
the run is rejected; no artifact is accepted
expected/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 review
1 source file

input/advs_raw.csv

Edit
9 rows
input/advs_raw.csv
STUDYIDUSUBJIDPARAMCDVSSEQADTADYAVAL
YAMAA-01SYSBP12025-01-081132
YAMAA-01SYSBP22025-01-2215138
YAMAA-01SYSBP32025-02-0529130
YAMAA-01SYSBP42025-02-1943128
YAMAA-01SYSBP12025-02-081118
YAMAA-01SYSBP22025-02-2114122
YAMAA-01SYSBP3——120
YAMAA-01SYSBP12025-01-02-5140
YAMAA-01SYSBP22025-01-070136

Unexpected Output

Under review
9 rows presented to the failing check - not an accepted artifact

expected/advs.csv

Edit
9 rows
expected/advs.csv
STUDYIDUSUBJIDPARAMCDVSSEQADTADYAVALAVISIT
YAMAA-01SYSBP12025-01-081132BASELINE
YAMAA-01SYSBP22025-01-2215138WEEK 2
YAMAA-01SYSBP32025-02-0529130WEEK 4
YAMAA-01SYSBP42025-02-1943128POST-TREATMENT
YAMAA-01SYSBP12025-02-081118BASELINE
YAMAA-01SYSBP22025-02-2114122WEEK 2
YAMAA-01SYSBP3——120—
YAMAA-01SYSBP12025-01-02-5140SCREENING
YAMAA-01SYSBP22025-01-070136BASELINE
Shaded columns are derived— = missing value

Comments and assessment materials

Comments

Signed in with GitHub; saved in repository Discussions

Mapping spec

Generated from the benchmark YAML; do not edit by hand

Dataset NameVariable NameVariable LabelTypeCodelist/Controlled TermsCoreComputational MethodOrigin
ADVSSTUDYIDStudy IdentifiercharacterCopy value from ADVS_RAW.STUDYID.Predecessor
ADVSUSUBJIDUnique Subject IdentifiercharacterCopy value from ADVS_RAW.USUBJID.Predecessor
ADVSPARAMCDParameter CodecharacterCopy value from ADVS_RAW.PARAMCD.Predecessor
ADVSVSSEQSequence NumbernumericCopy value from ADVS_RAW.VSSEQ.Predecessor
ADVSADTAnalysis DatenumericISO 8601Copy value from ADVS_RAW.ADT.Predecessor
ADVSADYAnalysis Relative DaynumericCopy value from ADVS_RAW.ADY.Predecessor
ADVSAVALAnalysis ValuenumericCopy value from ADVS_RAW.AVAL.Predecessor
ADVSAVISITAnalysis VisitcharacterBand 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
VersionDateAuthorDescriptionReviewerSign-off
1.32026-09-29yamaa docs buildShow study codelist names, external dictionaries, and ISO 8601 formats in variable rows; list the document's codelist values and metadata
1.22026-09-29yamaa docs buildClassify ADaM copies from a declared input as Predecessor and recodes as Derived, and SDTM recodes of locally derived columns as Derived
1.12026-09-29yamaa docs buildResolve lookups into the donor record they select, and give every derivation shape a plain-language rule instead of its raw YAML
1.0yamaa docs buildInitial generation from spec.yaml