Review ask

As a clinical trial statistician or programmer, answer three short questions in Your review: the task, the inputs and outputs, and the AI-assisted review. Agreeing with all three approves this benchmark; disagreeing with any 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: build one body-weight finding per weighing of an animal, carrying BWSEQ, BWTESTCD, BWTEST, the result as collected and standardized, and BWDTC, and submit it as the SAS transport file bw.xpt beside its data-definition document.

Input: the weighings the test facility's in-life data-collection system records, one row per animal per weighing, with the weighing occasion (routine or terminal), date, weight and unit.

Variables:

  • BWSEQ numbers each animal's weighings from 1 in date order, whatever order the facility exported them in.
  • BWTESTCD is BW for a routine weighing and TERMBW for the terminal weighing taken before necropsy; BWTEST is Body Weight or Terminal Body Weight.
  • BWORRES and BWORRESU are the weight and unit as collected.
  • BWSTRESN is the collected weight as a number, and BWSTRESC that number as text, so a collected 281.0 is standardized to 281.
  • BWSTRESU is the collected unit; no weight is converted.
  • BWDTC is the date the animal was weighed.

Note: the study declares the nonclinical implementation guide SENDIG 3.1.1, and the data-definition document records it. The test facility collects every result, so the document names no collecting party or annotated case report form for it; a nonclinical study identifies its test facility in its trial summary instead.

Inputs

Under review
1 source file

input/body_weights.csv

Edit
6 rows
input/body_weights.csv
STUDYIDUSUBJIDOCCASIONWEIGHDTWEIGHTUNIT
TOX01ROUTINE2026-03-02245.3g
TOX01ROUTINE2026-03-02182.6g
TOX01ROUTINE2026-03-09281.0g
TOX01TERMINAL2026-03-30341.8g
TOX01TERMINAL2026-03-30226.4g
TOX01ROUTINE2026-03-09198.2g

Expected output

Under review
6 expected rows

expected/bw.csv

Edit
6 rows
expected/bw.csv
DOMAINSTUDYIDUSUBJIDBWSEQBWTESTCDBWTESTBWORRESBWORRESUBWSTRESCBWSTRESNBWSTRESUBWDTC
BWTOX011BWBody Weight245.3g245.3245.3g2026-03-02
BWTOX012BWBody Weight281.0g281281g2026-03-09
BWTOX013TERMBWTerminal Body Weight341.8g341.8341.8g2026-03-30
BWTOX011BWBody Weight182.6g182.6182.6g2026-03-02
BWTOX012BWBody Weight198.2g198.2198.2g2026-03-09
BWTOX013TERMBWTerminal Body Weight226.4g226.4226.4g2026-03-30

expected/define.xml

Edit
Define-XML

Define-XML 2.1.11: TOX01

Four-week oral toxicity study in rats; TOX01; SENDIG 3.1.1

Datasets
DatasetDescriptionClassStructurePurposeKeysDocumentationLocation
BWBody WeightFINDINGSOne record per test per observation time per subjectTabulationSTUDYID, USUBJID, BWSEQbw.xpt

BW

BW variables
VariableLabel / DescriptionTypeRoleLength or Display FormatControlled Terms or ISO FormatOrigin / Source / Method / Comment
DOMAINDomain AbbreviationtextIdentifier2Assigned; Sponsor
STUDYIDStudy IdentifiertextIdentifier5Protocol; Sponsor
USUBJIDUnique Subject IdentifiertextIdentifier10Assigned; Sponsor
BWSEQSequence NumberintegerIdentifier8Derived; Sponsor Number each animal's weighings in date order.
BWTESTCDTest Short NametextTopic6Assigned; Sponsor
BWTESTTest NametextSynonym Qualifier20Assigned; Sponsor
BWORRESResult or Findings as CollectedtextResult Qualifier5Collected
BWORRESUUnit of the Original ResulttextVariable Qualifier1Collected
BWSTRESCStandardized Result in Character FormattextResult Qualifier5Derived; Sponsor The standardized numeric result written as text.
BWSTRESNStandardized Result in Numeric FormatfloatResult Qualifier8Derived; Sponsor The collected result read as a number.
BWSTRESUUnit of the Standardized ResulttextVariable Qualifier1Derived; Sponsor The collected unit, since no result is converted.
BWDTCDate/Time Animal WeigheddateTimingISO 8601Collected
Original source
<?xml version="1.0" encoding="UTF-8"?>
<ODM xmlns="http://www.cdisc.org/ns/odm/v1.3" xmlns:def="http://www.cdisc.org/ns/def/v2.1" xmlns:xlink="http://www.w3.org/1999/xlink" ODMVersion="1.3.2" FileType="Snapshot" FileOID="TOX01.send.Define-XML_2.1" CreationDateTime="2026-09-11T00:00:00" SourceSystem="yamaa" SourceSystemVersion="1.0" def:Context="Submission">
  <Study OID="STDY.TOX01">
    <GlobalVariables>
      <StudyName>TOX01</StudyName>
      <StudyDescription>Four-week oral toxicity study in rats</StudyDescription>
      <ProtocolName>TOX01</ProtocolName>
    </GlobalVariables>
    <MetaDataVersion OID="MDV.TOX01.send" Name="TOX01 send metadata" def:DefineVersion="2.1.11">
      <def:Standards>
        <def:Standard OID="STD.SENDIG" Name="SENDIG" Type="IG" Version="3.1.1" Status="Final"/>
      </def:Standards>
      <ItemGroupDef OID="IG.BW" Name="BW" Domain="BW" Purpose="Tabulation" SASDatasetName="BW" Repeating="Yes" IsReferenceData="No" def:Structure="One record per test per observation time per subject" def:ArchiveLocationID="LF.BW" def:StandardOID="STD.SENDIG">
        <Description>
          <TranslatedText xml:lang="en">Body Weight</TranslatedText>
        </Description>
        <ItemRef ItemOID="IT.BW.DOMAIN" OrderNumber="1" Mandatory="Yes" Role="Identifier"/>
        <ItemRef ItemOID="IT.BW.STUDYID" OrderNumber="2" Mandatory="Yes" KeySequence="1" Role="Identifier"/>
        <ItemRef ItemOID="IT.BW.USUBJID" OrderNumber="3" Mandatory="Yes" KeySequence="2" Role="Identifier"/>
        <ItemRef ItemOID="IT.BW.BWSEQ" OrderNumber="4" Mandatory="Yes" KeySequence="3" Role="Identifier" MethodOID="MT.BW.BWSEQ"/>
        <ItemRef ItemOID="IT.BW.BWTESTCD" OrderNumber="5" Mandatory="Yes" Role="Topic"/>
        <ItemRef ItemOID="IT.BW.BWTEST" OrderNumber="6" Mandatory="Yes" Role="Synonym Qualifier"/>
        <ItemRef ItemOID="IT.BW.BWORRES" OrderNumber="7" Mandatory="No" Role="Result Qualifier"/>
        <ItemRef ItemOID="IT.BW.BWORRESU" OrderNumber="8" Mandatory="No" Role="Variable Qualifier"/>
        <ItemRef ItemOID="IT.BW.BWSTRESC" OrderNumber="9" Mandatory="No" Role="Result Qualifier" MethodOID="MT.BW.BWSTRESC"/>
        <ItemRef ItemOID="IT.BW.BWSTRESN" OrderNumber="10" Mandatory="No" Role="Result Qualifier" MethodOID="MT.BW.BWSTRESN"/>
        <ItemRef ItemOID="IT.BW.BWSTRESU" OrderNumber="11" Mandatory="No" Role="Variable Qualifier" MethodOID="MT.BW.BWSTRESU"/>
        <ItemRef ItemOID="IT.BW.BWDTC" OrderNumber="12" Mandatory="No" Role="Timing"/>
        <def:Class Name="FINDINGS"/>
        <def:leaf ID="LF.BW" xlink:href="bw.xpt">
          <def:title>bw.xpt</def:title>
        </def:leaf>
      </ItemGroupDef>
      <ItemDef OID="IT.BW.DOMAIN" Name="DOMAIN" DataType="text" Length="2" SASFieldName="DOMAIN">
        <Description>
          <TranslatedText xml:lang="en">Domain Abbreviation</TranslatedText>
        </Description>
        <def:Origin Type="Assigned" Source="Sponsor"/>
      </ItemDef>
      <ItemDef OID="IT.BW.STUDYID" Name="STUDYID" DataType="text" Length="5" SASFieldName="STUDYID">
        <Description>
          <TranslatedText xml:lang="en">Study Identifier</TranslatedText>
        </Description>
        <def:Origin Type="Protocol" Source="Sponsor"/>
      </ItemDef>
      <ItemDef OID="IT.BW.USUBJID" Name="USUBJID" DataType="text" Length="10" SASFieldName="USUBJID">
        <Description>
          <TranslatedText xml:lang="en">Unique Subject Identifier</TranslatedText>
        </Description>
        <def:Origin Type="Assigned" Source="Sponsor"/>
      </ItemDef>
      <ItemDef OID="IT.BW.BWSEQ" Name="BWSEQ" DataType="integer" Length="8" SASFieldName="BWSEQ">
        <Description>
          <TranslatedText xml:lang="en">Sequence Number</TranslatedText>
        </Description>
        <def:Origin Type="Derived" Source="Sponsor"/>
      </ItemDef>
      <ItemDef OID="IT.BW.BWTESTCD" Name="BWTESTCD" DataType="text" Length="6" SASFieldName="BWTESTCD">
        <Description>
          <TranslatedText xml:lang="en">Test Short Name</TranslatedText>
        </Description>
        <def:Origin Type="Assigned" Source="Sponsor"/>
      </ItemDef>
      <ItemDef OID="IT.BW.BWTEST" Name="BWTEST" DataType="text" Length="20" SASFieldName="BWTEST">
        <Description>
          <TranslatedText xml:lang="en">Test Name</TranslatedText>
        </Description>
        <def:Origin Type="Assigned" Source="Sponsor"/>
      </ItemDef>
      <ItemDef OID="IT.BW.BWORRES" Name="BWORRES" DataType="text" Length="5" SASFieldName="BWORRES">
        <Description>
          <TranslatedText xml:lang="en">Result or Findings as Collected</TranslatedText>
        </Description>
        <def:Origin Type="Collected"/>
      </ItemDef>
      <ItemDef OID="IT.BW.BWORRESU" Name="BWORRESU" DataType="text" Length="1" SASFieldName="BWORRESU">
        <Description>
          <TranslatedText xml:lang="en">Unit of the Original Result</TranslatedText>
        </Description>
        <def:Origin Type="Collected"/>
      </ItemDef>
      <ItemDef OID="IT.BW.BWSTRESC" Name="BWSTRESC" DataType="text" Length="5" SASFieldName="BWSTRESC">
        <Description>
          <TranslatedText xml:lang="en">Standardized Result in Character Format</TranslatedText>
        </Description>
        <def:Origin Type="Derived" Source="Sponsor"/>
      </ItemDef>
      <ItemDef OID="IT.BW.BWSTRESN" Name="BWSTRESN" DataType="float" Length="8" SignificantDigits="1" SASFieldName="BWSTRESN">
        <Description>
          <TranslatedText xml:lang="en">Standardized Result in Numeric Format</TranslatedText>
        </Description>
        <def:Origin Type="Derived" Source="Sponsor"/>
      </ItemDef>
      <ItemDef OID="IT.BW.BWSTRESU" Name="BWSTRESU" DataType="text" Length="1" SASFieldName="BWSTRESU">
        <Description>
          <TranslatedText xml:lang="en">Unit of the Standardized Result</TranslatedText>
        </Description>
        <def:Origin Type="Derived" Source="Sponsor"/>
      </ItemDef>
      <ItemDef OID="IT.BW.BWDTC" Name="BWDTC" DataType="date" SASFieldName="BWDTC">
        <Description>
          <TranslatedText xml:lang="en">Date/Time Animal Weighed</TranslatedText>
        </Description>
        <def:Origin Type="Collected"/>
      </ItemDef>
      <MethodDef OID="MT.BW.BWSEQ" Name="BW.BWSEQ" Type="Computation">
        <Description>
          <TranslatedText xml:lang="en">Number each animal's weighings in date order.</TranslatedText>
        </Description>
      </MethodDef>
      <MethodDef OID="MT.BW.BWSTRESC" Name="BW.BWSTRESC" Type="Computation">
        <Description>
          <TranslatedText xml:lang="en">The standardized numeric result written as text.</TranslatedText>
        </Description>
      </MethodDef>
      <MethodDef OID="MT.BW.BWSTRESN" Name="BW.BWSTRESN" Type="Computation">
        <Description>
          <TranslatedText xml:lang="en">The collected result read as a number.</TranslatedText>
        </Description>
      </MethodDef>
      <MethodDef OID="MT.BW.BWSTRESU" Name="BW.BWSTRESU" Type="Computation">
        <Description>
          <TranslatedText xml:lang="en">The collected unit, since no result is converted.</TranslatedText>
        </Description>
      </MethodDef>
    </MetaDataVersion>
  </Study>
</ODM>
Shaded columns are derived— = missing value

Human review and assessment

Your review

3 questions and your comments · View benchmark discussions

Mapping spec

Generated from the benchmark YAML; do not edit by hand

Variable NameVariable LabelTypeLengthControlled Terms or FormatOriginCoreConversion DefinitionVariable TypeVariable OrderComments for Define
DOMAINDomain AbbreviationChar2AssignedReqSet constant value "BW".SDTM1
STUDYIDStudy IdentifierChar20ProtocolReqCopy value from WEIGHING.STUDYID.SDTM2
USUBJIDUnique Subject IdentifierChar40AssignedReqCopy value from WEIGHING.USUBJID.SDTM3
BWSEQSequence NumberNum8DerivedReqNumber each animal's weighings in date order.SDTM4
BWTESTCDTest Short NameChar8AssignedReqRecode WEIGHING.OCCASION: "ROUTINE" → "BW", "TERMINAL" → "TERMBW"; missing values stay missing; unlisted values are errors.SDTM5
BWTESTTest NameChar40AssignedReqRecode BWTESTCD: "BW" → "Body Weight", "TERMBW" → "Terminal Body Weight"; missing values stay missing; unlisted values are errors.SDTM6
BWORRESResult or Findings as CollectedChar20CollectedExpCopy value from WEIGHING.WEIGHT.SDTM7
BWORRESUUnit of the Original ResultChar10CollectedExpCopy value from WEIGHING.UNIT.SDTM8
BWSTRESNStandardized Result in Numeric FormatNum8DerivedExpThe collected result read as a number.SDTM9
BWSTRESCStandardized Result in Character FormatChar20DerivedExpThe standardized numeric result written as text.SDTM10
BWSTRESUUnit of the Standardized ResultChar10DerivedExpThe collected unit, since no result is converted.SDTM11
BWDTCDate/Time Animal WeighedCharISO 8601CollectedExpCopy value from WEIGHING.WEIGHDT.SDTM12
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_project("project.yaml")$spec("BW")$run()$output

Python

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