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
README.mdPublic 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:
BWSEQnumbers each animal's weighings from 1 in date order, whatever order the facility exported them in.BWTESTCDisBWfor a routine weighing andTERMBWfor the terminal weighing taken before necropsy;BWTESTisBody WeightorTerminal Body Weight.BWORRESandBWORRESUare the weight and unit as collected.BWSTRESNis the collected weight as a number, andBWSTRESCthat number as text, so a collected281.0is standardized to281.BWSTRESUis the collected unit; no weight is converted.BWDTCis 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 review1 source fileinput/body_weights.csv
Edit6 rows| STUDYID | USUBJID | OCCASION | WEIGHDT | WEIGHT | UNIT |
|---|---|---|---|---|---|
| TOX01 | ROUTINE | 2026-03-02 | 245.3 | g | |
| TOX01 | ROUTINE | 2026-03-02 | 182.6 | g | |
| TOX01 | ROUTINE | 2026-03-09 | 281.0 | g | |
| TOX01 | TERMINAL | 2026-03-30 | 341.8 | g | |
| TOX01 | TERMINAL | 2026-03-30 | 226.4 | g | |
| TOX01 | ROUTINE | 2026-03-09 | 198.2 | g |
Expected output
Under review6 expected rowsexpected/bw.csv
Edit6 rows| DOMAIN | STUDYID | USUBJID | BWSEQ | BWTESTCD | BWTEST | BWORRES | BWORRESU | BWSTRESC | BWSTRESN | BWSTRESU | BWDTC |
|---|---|---|---|---|---|---|---|---|---|---|---|
| BW | TOX01 | 1 | BW | Body Weight | 245.3 | g | 245.3 | 245.3 | g | 2026-03-02 | |
| BW | TOX01 | 2 | BW | Body Weight | 281.0 | g | 281 | 281 | g | 2026-03-09 | |
| BW | TOX01 | 3 | TERMBW | Terminal Body Weight | 341.8 | g | 341.8 | 341.8 | g | 2026-03-30 | |
| BW | TOX01 | 1 | BW | Body Weight | 182.6 | g | 182.6 | 182.6 | g | 2026-03-02 | |
| BW | TOX01 | 2 | BW | Body Weight | 198.2 | g | 198.2 | 198.2 | g | 2026-03-09 | |
| BW | TOX01 | 3 | TERMBW | Terminal Body Weight | 226.4 | g | 226.4 | 226.4 | g | 2026-03-30 |
expected/define.xml
EditDefine-XMLDefine-XML 2.1.11: TOX01
Four-week oral toxicity study in rats; TOX01; SENDIG 3.1.1
| Dataset | Description | Class | Structure | Purpose | Keys | Documentation | Location |
|---|---|---|---|---|---|---|---|
| BW | Body Weight | FINDINGS | One record per test per observation time per subject | Tabulation | STUDYID, USUBJID, BWSEQ | bw.xpt |
BW
| Variable | Label / Description | Type | Role | Length or Display Format | Controlled Terms or ISO Format | Origin / Source / Method / Comment |
|---|---|---|---|---|---|---|
| DOMAIN | Domain Abbreviation | text | Identifier | 2 | Assigned; Sponsor | |
| STUDYID | Study Identifier | text | Identifier | 5 | Protocol; Sponsor | |
| USUBJID | Unique Subject Identifier | text | Identifier | 10 | Assigned; Sponsor | |
| BWSEQ | Sequence Number | integer | Identifier | 8 | Derived; Sponsor Number each animal's weighings in date order. | |
| BWTESTCD | Test Short Name | text | Topic | 6 | Assigned; Sponsor | |
| BWTEST | Test Name | text | Synonym Qualifier | 20 | Assigned; Sponsor | |
| BWORRES | Result or Findings as Collected | text | Result Qualifier | 5 | Collected | |
| BWORRESU | Unit of the Original Result | text | Variable Qualifier | 1 | Collected | |
| BWSTRESC | Standardized Result in Character Format | text | Result Qualifier | 5 | Derived; Sponsor The standardized numeric result written as text. | |
| BWSTRESN | Standardized Result in Numeric Format | float | Result Qualifier | 8 | Derived; Sponsor The collected result read as a number. | |
| BWSTRESU | Unit of the Standardized Result | text | Variable Qualifier | 1 | Derived; Sponsor The collected unit, since no result is converted. | |
| BWDTC | Date/Time Animal Weighed | date | Timing | ISO 8601 | Collected |
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>
Human review and assessment
| Variable Name | Variable Label | Type | Length | Controlled Terms or Format | Origin | Core | Conversion Definition | Variable Type | Variable Order | Comments for Define |
|---|---|---|---|---|---|---|---|---|---|---|
| DOMAIN | Domain Abbreviation | Char | 2 | Assigned | Req | Set constant value "BW". | SDTM | 1 | ||
| STUDYID | Study Identifier | Char | 20 | Protocol | Req | Copy value from WEIGHING.STUDYID. | SDTM | 2 | ||
| USUBJID | Unique Subject Identifier | Char | 40 | Assigned | Req | Copy value from WEIGHING.USUBJID. | SDTM | 3 | ||
| BWSEQ | Sequence Number | Num | 8 | Derived | Req | Number each animal's weighings in date order. | SDTM | 4 | ||
| BWTESTCD | Test Short Name | Char | 8 | Assigned | Req | Recode WEIGHING.OCCASION: "ROUTINE" → "BW", "TERMINAL" → "TERMBW"; missing values stay missing; unlisted values are errors. | SDTM | 5 | ||
| BWTEST | Test Name | Char | 40 | Assigned | Req | Recode BWTESTCD: "BW" → "Body Weight", "TERMBW" → "Terminal Body Weight"; missing values stay missing; unlisted values are errors. | SDTM | 6 | ||
| BWORRES | Result or Findings as Collected | Char | 20 | Collected | Exp | Copy value from WEIGHING.WEIGHT. | SDTM | 7 | ||
| BWORRESU | Unit of the Original Result | Char | 10 | Collected | Exp | Copy value from WEIGHING.UNIT. | SDTM | 8 | ||
| BWSTRESN | Standardized Result in Numeric Format | Num | 8 | Derived | Exp | The collected result read as a number. | SDTM | 9 | ||
| BWSTRESC | Standardized Result in Character Format | Char | 20 | Derived | Exp | The standardized numeric result written as text. | SDTM | 10 | ||
| BWSTRESU | Unit of the Standardized Result | Char | 10 | Derived | Exp | The collected unit, since no result is converted. | SDTM | 11 | ||
| BWDTC | Date/Time Animal Weighed | Char | ISO 8601 | Collected | Exp | Copy value from WEIGHING.WEIGHDT. | SDTM | 12 |
| Version | Date | Author | Description | Reviewer | Sign-off |
|---|---|---|---|---|---|
| 1.7 | 2026-10-20 | yamaa docs build | Read 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.6 | 2026-10-17 | yamaa docs build | Describe collected date parts written as ISO 8601 date text and times of day counted in seconds since midnight | ||
| 1.5 | 2026-10-17 | yamaa docs build | Name 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.4 | 2026-10-15 | yamaa docs build | State datetime precision codes through the hour and minute, and complete only the time parts a collected datetime lacks | ||
| 1.3 | 2026-09-29 | yamaa docs build | Show study codelist names, external dictionaries, and ISO 8601 formats in variable rows; list the document's codelist values and metadata | ||
| 1.2 | 2026-09-29 | yamaa docs build | Classify ADaM copies from a declared input as Predecessor and recodes as Derived, and SDTM recodes of locally derived columns as Derived | ||
| 1.1 | 2026-09-29 | yamaa docs build | Resolve lookups into the donor record they select, and give every derivation shape a plain-language rule instead of its raw YAML | ||
| 1.0 | yamaa docs build | Initial generation from spec.yaml |
yamaa