Review ask

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

Lifecycle: draftEditUnder review
What this benchmark means
README.md

Public entries: Python and R. Passing coverage requires an installed inventory.

Goal: carry the actual treatment (TRT01A), age (AGE), baseline height (HEIGHTBL) and the date and time of first exposure (TRTSDT, TRTSDTM) into ADSL from a Dataset-JSON file, each value as the stored data means it.

Input: one spec.yaml reading input/adsl_raw.json, a Clinical Data Interchange Standards Consortium (CDISC) Dataset-JSON 1.1 file in its single-object form, with one subject-level record per subject. Each column of the file states its own data type.

Variables:

  • TRT01A is the actual treatment; missing when the subject was never treated, which the file stores as null.
  • AGE is the age in whole years.
  • HEIGHTBL is the baseline height in centimetres, which the file stores as decimal text; missing when not measured.
  • TRTSDT is the date of first exposure; missing when the subject was never treated.
  • TRTSDTM is the date and time of first exposure; missing when the subject was never treated.

Note: each value takes the type its column states: whole numbers stay whole, a decimal written as text is read as a number, and dates and times are read from their ISO 8601 text, a time to the minute gaining zero seconds. A null is missing. The file's labels, lengths and display formats, and its request that a receiving system convert dates to SAS numbers, decide nothing.

Inputs

Under review
1 source file

input/adsl_raw.json

Edit
{
  "datasetJSONCreationDateTime": "2026-09-30T10:15:00",
  "datasetJSONVersion": "1.1.0",
  "fileOID": "www.example.org/PILOT7/ADSL_RAW",
  "originator": "Example CRO",
  "sourceSystem": {"name": "Example EDC", "version": "5.1"},
  "studyOID": "PILOT7",
  "metaDataVersionOID": "MDV.1",
  "itemGroupOID": "IG.ADSL_RAW",
  "records": 3,
  "name": "ADSL_RAW",
  "label": "Subject-Level Source",
  "columns": [
    {"itemOID": "IT.ADSL_RAW.STUDYID", "name": "STUDYID", "label": "Study Identifier", "dataType": "string", "length": 6, "keySequence": 1},
    {"itemOID": "IT.ADSL_RAW.USUBJID", "name": "USUBJID", "label": "Unique Subject Identifier", "dataType": "string", "length": 6, "keySequence": 2},
    {"itemOID": "IT.ADSL_RAW.TRT01A", "name": "TRT01A", "label": "Actual Treatment for Period 01", "dataType": "string", "length": 7},
    {"itemOID": "IT.ADSL_RAW.AGE", "name": "AGE", "label": "Age", "dataType": "integer", "length": 3},
    {"itemOID": "IT.ADSL_RAW.HEIGHTBL", "name": "HEIGHTBL", "label": "Baseline Height (cm)", "dataType": "decimal", "displayFormat": "6.2"},
    {"itemOID": "IT.ADSL_RAW.TRTSDT", "name": "TRTSDT", "label": "Date of First Exposure to Treatment", "dataType": "date", "targetDataType": "integer", "displayFormat": "DATE9."},
    {"itemOID": "IT.ADSL_RAW.TRTSDTM", "name": "TRTSDTM", "label": "Datetime of First Exposure to Treatment", "dataType": "datetime", "targetDataType": "integer", "displayFormat": "DATETIME20."}
  ],
  "rows": [
    ["PILOT7", "P7-741", "Drug A", 24, "172.50", "2025-03-04", "2025-03-04T09:15"],
    ["PILOT7", "P7-742", "Placebo", 67, null, "2025-03-05", "2025-03-05T14:02:37"],
    ["PILOT7", "P7-743", null, 52, "165.20", null, null]
  ]
}

Expected output

Under review
3 expected rows

expected/adsl.csv

Edit
3 rows
expected/adsl.csv
STUDYIDUSUBJIDTRT01AAGEHEIGHTBLTRTSDTTRTSDTM
PILOT7Drug A24172.52025-03-042025-03-04T09:15:00
PILOT7Placebo67—2025-03-052025-03-05T14:02:37
PILOT7—52165.2——
Shaded columns are derived— = missing value

Human review and assessment

Your review

2 questions and your comments · View benchmark discussions

Mapping spec

Generated from the benchmark YAML; do not edit by hand

Dataset NameVariable NameVariable LabelTypeCodelist/Controlled TermsCoreComputational MethodOrigin
ADSLSTUDYIDStudy IdentifiercharacterCopy value from ADSL_RAW.STUDYID.Predecessor
ADSLUSUBJIDUnique Subject IdentifiercharacterCopy value from ADSL_RAW.USUBJID.Predecessor
ADSLTRT01AActual Treatment for Period 01characterCopy value from ADSL_RAW.TRT01A.Predecessor
ADSLAGEAgenumericCopy value from ADSL_RAW.AGE.Predecessor
ADSLHEIGHTBLBaseline Height (cm)numericCopy value from ADSL_RAW.HEIGHTBL.Predecessor
ADSLTRTSDTDate of First Exposure to TreatmentnumericISO 8601Copy value from ADSL_RAW.TRTSDT.Predecessor
ADSLTRTSDTMDatetime of First Exposure to TreatmentnumericISO 8601Copy value from ADSL_RAW.TRTSDTM.Predecessor
VersionDateAuthorDescriptionReviewerSign-off
1.72026-10-20yamaa docs buildRead 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.62026-10-17yamaa docs buildDescribe collected date parts written as ISO 8601 date text and times of day counted in seconds since midnight
1.52026-10-17yamaa docs buildName 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.42026-10-15yamaa docs buildState datetime precision codes through the hour and minute, and complete only the time parts a collected datetime lacks
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

yamaa code

Public calls generated from benchmark.yaml; results must match the expected output

R

Edit
3 lines
library(yamaa)yamaa_spec("spec.yaml")$run()$output

Python

Edit
3 lines
import yamaayamaa.spec("spec.yaml").run().output