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: show for each adverse event the reported term (AETERM), the coded term (AEDECOD), and the two safety groupings (SMQ01NAM, SMQ01CD, SMQ02NAM, SMQ02CD).

Input: collected adverse events carrying the reported term (AETERM) and the coded term (AEDECOD), plus a query dictionary carrying each coded term (TERM) under a grouping name (GRPNAME) with code (GRPID) and place (PREFIX).

Variables:

  • SMQ01NAM would be the name from the dictionary entry whose place is SMQ01 and whose term matches the coded term; blank when no entry matches.
  • SMQ01CD would be the code from that same SMQ01 entry; missing when no entry matches.
  • SMQ02NAM would be the name from the dictionary entry whose place is SMQ02 and whose term matches the coded term; blank when no entry matches.
  • SMQ02CD would be the code from that same SMQ02 entry; missing when no entry matches.

Note: one place holds one grouping. A coded term claimed by two dictionary entries in the same place has no single answer: choosing either entry would drop the other, and which one was dropped would depend on the order the dictionary happened to be stored in. The run is therefore rejected and no artifact is accepted.

How to fix

First decide how many queries the study reports. Every query the study analyses needs a place of its own, so move the second query claiming the term, Hypersensitivity, from SMQ01 to the next free place:

PREFIX,GRPNAME,GRPID,SCOPE,TERM
SMQ03,Hypersensitivity,20000214,BROAD,STEVENS-JOHNSON SYNDROME

A new place needs its own lookup and its own SMQ03NAM and SMQ03CD, because how many groupings an artifact carries is fixed when the study rules are written and not when the dictionary is read. Do not resolve the clash by keeping whichever query is stored first: it answers with a query the study did not choose, and it stops reporting the other one at all.

Expected failure

Edit
the run is rejected; no artifact is accepted
expected/error.yaml
phase
join
condition
multiple_matches
requirement
REQ-0127
expected/error.yaml
phase: join
condition: multiple_matches
spec_paths:
  - intermediates[0]
requirement: REQ-0127
context:
  intermediate: SMQ1
  dataset: QUERY
  key:
    - TERM
  intermediate_key:
    TERM: STEVENS-JOHNSON SYNDROME
  match_count: 2
  keys:
    - STUDYID: PILOT7
      USUBJID: P7-601
      AESEQ: 2

Inputs

Under review
2 source files

input/ae.csv

Edit
3 rows
input/ae.csv
STUDYIDUSUBJIDAESEQAETERMAEDECOD
PILOT71Widespread rashRASH
PILOT72Severe skin blisteringSTEVENS-JOHNSON SYNDROME
PILOT71Jaundice and dark urineHEPATITIS

input/queries.csv

Edit
4 rows
input/queries.csv
PREFIXGRPNAMEGRPIDSCOPETERM
SMQ01Severe Cutaneous Adverse Reactions20000020BROADRASH
SMQ01Severe Cutaneous Adverse Reactions20000020NARROWSTEVENS-JOHNSON SYNDROME
SMQ01Hypersensitivity20000214BROADSTEVENS-JOHNSON SYNDROME
SMQ02Hepatic Disorders20000006NARROWHEPATITIS

Unexpected Output

Under review
No artifact is produced

No fixture files in this directory.

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
ADAESTUDYIDStudy IdentifiercharacterCopy value from AE.STUDYID.Predecessor
ADAEUSUBJIDUnique Subject IdentifiercharacterCopy value from AE.USUBJID.Predecessor
ADAEAESEQSequence NumbernumericCopy value from AE.AESEQ.Predecessor
ADAEAETERMReported Term for the Adverse EventcharacterCopy value from AE.AETERM.Predecessor
ADAEAEDECODDictionary-Derived TermcharacterCopy value from AE.AEDECOD.Predecessor
ADAESMQ01NAMStandardized MedDRA Query 01 NamecharacterTake GRPNAME from the QUERY record whose TERM equals AEDECOD, where QUERY.PREFIX = 'SMQ01', and a row with no match is an error.Derived
ADAESMQ01CDStandardized MedDRA Query 01 CodenumericTake GRPID from the QUERY record whose TERM equals AEDECOD, where QUERY.PREFIX = 'SMQ01', and a row with no match is an error.Derived
ADAESMQ02NAMStandardized MedDRA Query 02 NamecharacterTake GRPNAME from the QUERY record whose TERM equals AEDECOD, where QUERY.PREFIX = 'SMQ02', and a row with no match is an error.Derived
ADAESMQ02CDStandardized MedDRA Query 02 CodenumericTake GRPID from the QUERY record whose TERM equals AEDECOD, where QUERY.PREFIX = 'SMQ02', and a row with no match is an error.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