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: keep each collected heart rate (HR) record and add a rederived RR duration (time between successive R waves) record under the code RRR for each subject and analysis visit with a non-missing, non-zero HR result, labeled RR Duration Rederived (ms) and carrying the new result in AVAL and its unit in AVALU.

Input: collected electrocardiogram (ECG) records with heart rate results under the code HR per subject and visit, carrying the record label, result, and result unit; one subject contributes heart rate records at two visits, and other records cover a missing, a zero, and a negative heart rate. One input record already carries the code RRR.

Variables:

  • AVAL: the collected result on a kept record, or 60000 divided by the heart rate (in beats/min) on an added RRR record. A missing or zero heart rate adds no RRR record; any other value, including a negative one, still derives.
  • AVALU: the collected unit on a kept record, or milliseconds (ms) on an added RRR record. A heart rate record that contributes a result must use beats/min.

Every RRR record must be produced from a heart rate by the calculation above rather than accepted as collected, so the collected RRR record breaks the stated requirement. The completed dataset is presented to that check and rejected, and no artifact is accepted from this input. The expected file records the completed rows presented to the check.

How to fix

First confirm the RR duration should come from the heart rate rather than from the collected record: the collected RRR record is the defect, not the calculation. Delete the collected RRR input record; keep each contributing HR record with beats/min as the unit. The run then calculates the RR interval itself instead of accepting one as collected.

Expected failure

Edit
the run is rejected; no artifact is accepted
expected/error.yaml
phase
verification
condition
assert_failed
requirement
REQ-0384
expected/error.yaml
phase: verification
condition: assert_failed
spec_paths:
  - verifications[2].assert
requirement: REQ-0384
context:
  verification_id: reject-pre-existing-rrr
  failure_count: 1
  keys:
    - STUDYID: YAMAA-01
      USUBJID: YAMAA-01-105
      PARAMCD: RRR
      AVISIT: VISIT 1

Inputs

Under review
1 source file

input/adeg.csv

Edit
6 rows
input/adeg.csv
STUDYIDUSUBJIDPARAMCDPARAMAVISITAVALAVALU
YAMAA-01HRHeart RateVISIT 160.0beats/min
YAMAA-01HRHeart RateVISIT 275.0beats/min
YAMAA-01HRHeart RateVISIT 1-50.0beats/min
YAMAA-01HRHeart RateVISIT 10.0beats/min
YAMAA-01HRHeart RateVISIT 1—beats/min
YAMAA-01RRRCollected RR DurationVISIT 1750.0ms

Unexpected Output

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

expected/adeg.csv

Edit
9 rows
expected/adeg.csv
STUDYIDUSUBJIDPARAMCDPARAMAVISITAVALAVALU
YAMAA-01HRHeart RateVISIT 160beats/min
YAMAA-01HRHeart RateVISIT 275beats/min
YAMAA-01HRHeart RateVISIT 1-50beats/min
YAMAA-01HRHeart RateVISIT 10beats/min
YAMAA-01HRHeart RateVISIT 1—beats/min
YAMAA-01RRRCollected RR DurationVISIT 1750ms
YAMAA-01RRRRR Duration Rederived (ms)VISIT 11000ms
YAMAA-01RRRRR Duration Rederived (ms)VISIT 2800ms
YAMAA-01RRRRR Duration Rederived (ms)VISIT 1-1200ms
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
ADEGSTUDYIDStudy IdentifiercharacterCopy value from ADEG_RAW.STUDYID.Predecessor
ADEGUSUBJIDUnique Subject IdentifiercharacterCopy value from ADEG_RAW.USUBJID.Predecessor
ADEGPARAMCDParameter CodecharacterSet per constructed row; see the Row construction sheet.Derived
ADEGPARAMParametercharacterSet per constructed row; see the Row construction sheet.Derived
ADEGAVISITAnalysis VisitcharacterCopy value from ADEG_RAW.AVISIT.Predecessor
ADEGAVALAnalysis ValuenumericSet per constructed row; see the Row construction sheet.Derived
ADEGAVALUAnalysis Value UnitcharacterSet per constructed row; see the Row construction sheet.Derived
TemplateInclude whenPARAMCDPARAMAVALAVALU_PROVENANCE
collectedCopy ADEG_RAW.PARAMCDCopy ADEG_RAW.PARAMCopy ADEG_RAW.AVALCopy ADEG_RAW.AVALUConstant "collected"
derived_rrrADEG_RAW.PARAMCD = 'HR' AND ADEG_RAW.AVAL IS NOT NULL AND ADEG_RAW.AVAL <> 0Constant "RRR"Constant "RR Duration Rederived (ms)"Compute 60000 / NULLIF(ADEG_RAW.AVAL, 0)Constant "ms"Constant "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