Raw EDC to SDTM, ADaM, and TFL, double-programmed in R
A worked CDISC submission pipeline on a fictional Phase 1 study. Every layer is built in Python and independently re-derived in R; the two are compared to zero differences.
Phase 1 · Gene therapy
18 subjects · 3 cohorts
SDTMIG 3.4 · ADaMIG 1.3
Synthetic data · demo
Starting from a fictional Phase 1 protocol and its SAP, the pipeline maps the raw EDC into SDTM tabulation datasets, derives the ADaM analysis datasets, and produces the TFL tables. Each layer is built in Python and independently re-programmed in R, then compared cell by cell.
50
27 SDTM + 7 ADaM datasets + 16 TFL tables
18
subjects · 3 cohorts · 19 EDC forms
0
QC differences (228,191 values compared)
1
real defect caught (lossy CSV float parser)
The pipeline
01Protocol & SAP
02Raw EDC (19 forms)
03SDTM · 27 datasets
04SDTM QC (R)
05ADaM · 7 datasets
06ADaM QC (R)
07TFL · 16 tables
08TFL QC (R)
Each layer reads the one before it: raw EDC → SDTM → ADaM → TFL. The red steps are the independent R QC — a second implementation that must agree to the cell.
Scope. The data is synthetic, built for this demo. The build follows CDISC SDTMIG 3.4 and ADaMIG 1.3 with a generated define.xml 2.1 and conformance checks at each layer. QC is independent double programming in R (diffdf for datasets, cell-by-cell for tables). The AE/CM/MH coding is a synthetic stand-in, not licensed MedDRA/WHODrug.
Source documents
The pre-specified inputs the whole pipeline is built from.
Source
Clinical Study Protocol
The fictional Phase 1, single-arm, 3-cohort dose-escalation protocol.
The 27 SDTM datasets, built from the 19 raw EDC forms to SDTMIG 3.4. A single metadata spec drives the XPT labels/types, the define.xml 2.1, and the dataset spec, so all three stay consistent.
27
datasets (XPT + CSV)
118,078
values written
0
conformance errors
27/27
datasets pass R QC
Notable derivations. Custom Findings domains ZE (echocardiography) and PE are added where no standard domain exists. AE EPOCH is derived from each event's start date against the subject's elements, not the CRF collection folder (all AEs are logged on one Day-1 form). Baseline flags, study days, and --SEQ follow the documented keys so the R build reproduces them exactly.
Adverse events, subject 1001 (SDTM AE)
Subject
Reported term
Dictionary term
Start
Epoch
Grade
1001
Catheterization site haematoma
Catheter site haematoma
2026-06-15
TREATMENT
1
1001
Pyrexia
Pyrexia
2026-06-15
TREATMENT
1
Verbatim term plus synthetic-coded preferred term, with the derived analysis epoch and CTCAE grade.
Domain inventory
Special Purpose
Domain
Label
Rows
Vars
DM
Demographics
18
24
SE
Subject Elements
70
10
SV
Subject Visits
255
10
Interventions
Domain
Label
Rows
Vars
CM
Concomitant Medications
111
18
EX
Exposure
18
16
Events
Domain
Label
Rows
Vars
AE
Adverse Events
57
22
CE
Clinical Events
21
12
DS
Disposition
118
13
MH
Medical History
71
11
Findings
Domain
Label
Rows
Vars
EG
ECG Test Results
726
17
FT
Functional Tests
201
18
IS
Immunogenicity Specimen Assessments
573
18
LB
Laboratory Test Results
2131
24
PE
Physical Examination (Custom)
138
13
QS
Questionnaires
235
16
VS
Vital Signs
991
18
ZE
Echocardiography (Custom)
268
19
Trial Design
Domain
Label
Rows
Vars
TA
Trial Arms
12
10
TE
Trial Elements
4
6
TI
Trial Inclusion/Exclusion Criteria
14
5
TS
Trial Summary
16
7
TV
Trial Visits
15
9
Relationship
Domain
Label
Rows
Vars
RELREC
Related Records
8
7
SUPPAE
Supplemental Qualifiers for AE
57
10
SUPPDS
Supplemental Qualifiers for DS
2
10
SUPPEX
Supplemental Qualifiers for EX
108
10
SUPPPE
Supplemental Qualifiers for PE
20
10
ADaM analysis datasets
The 7 ADaM datasets, derived from SDTM to ADaMIG 1.3. ADSL is the subject-level hub carrying treatment and population flags; the BDS datasets add analysis values with baseline, change, and visit windowing.
Dataset
Label
Class
Rows
ADSL
Subject-Level Analysis Dataset
Adsl
18
ADAE
Adverse Events Analysis Dataset
Occurrence Data Structure
57
ADEX
Exposure Analysis Dataset
Basic Data Structure
54
ADLB
Laboratory Analysis Dataset
Basic Data Structure
1834
ADVS
Vital Signs Analysis Dataset
Basic Data Structure
830
ADIMG
Imaging Analysis Dataset
Basic Data Structure
67
ADEFF
Efficacy Analysis Dataset
Basic Data Structure
335
Analysis structure. Population flags ENRLFL / SAFFL / FASFL / DLTFL follow the SAP analysis-set definitions. The shared BDS engine derives AVISIT windowing, ABLFL, BASE, CHG/PCHG, and ANL01FL. Dates are stored as SAS numeric days so the R build compares exactly.
Change from baseline in LVEF, subject 1001 (ADIMG, central reader)
Analysis visit
AVAL
BASE
CHG
ABLFL
ANL01FL
Baseline
28.9
28.9
Y
Y
Month 3
32.6
28.9
3.7
Y
Month 6
29.0
28.9
0.1
Y
Month 12
28.4
28.9
-0.5
Y
Baseline row highlighted. CHG = AVAL − BASE; LVEF improves over the 12-month follow-up. These analysis-ready values feed the efficacy tables directly.
Define & data explorer
Browse every SDTM and ADaM dataset in the browser — the rows (Data) or the variable-level metadata (Define) — or download the submission-format files. The define metadata is rendered from the same build manifest that produces define.xml.
SDTM
SDTM metadata
Browse the define-XML as a themed page, or download the raw define.xml and the SDTM specification workbook.
Row data loads on demand from the CSV; the metadata view needs no fetch. Downloads above are the XPT-package metadata; per-dataset CSV/XPT downloads sit in the header when a dataset is selected.
Populated tables
All 16 tables from the mock-shell inventory, generated directly from the QC'd ADaM datasets (RTF, fixed-width text, and CSV). The text shown here is the generator's actual output. Pick a table.
Table 14.1.1
Demographics and Baseline Characteristics
Analysis Population: Safety Set
Cohort 1 (Low) Cohort 2 (Mid) Cohort 3 (High) Total
(N=6) (N=6) (N=6) (N=18)
------------------------------------------------------------------------------------------------------------------
Age (years)
n 6 6 6 18
Mean (SD) 58.7 (14.19) 60.0 (10.73) 60.5 (4.89) 59.7 (10.04)
Median 54.5 59.0 61.0 59.0
Min, Max 43.0, 76.0 43.0, 75.0 53.0, 66.0 43.0, 76.0
Age Group, n (%)
<65 years 4 (66.7) 4 (66.7) 4 (66.7) 12 (66.7)
>=65 years 2 (33.3) 2 (33.3) 2 (33.3) 6 (33.3)
>=75 years 2 (33.3) 1 (16.7) 0 (0.0) 3 (16.7)
Sex, n (%)
Male 4 (66.7) 3 (50.0) 4 (66.7) 11 (61.1)
Female 2 (33.3) 3 (50.0) 2 (33.3) 7 (38.9)
Race, n (%)
White 3 (50.0) 3 (50.0) 3 (50.0) 9 (50.0)
Black Or African American 2 (33.3) 2 (33.3) 1 (16.7) 5 (27.8)
Asian 1 (16.7) 1 (16.7) 2 (33.3) 4 (22.2)
Ethnicity, n (%)
Hispanic Or Latino 3 (50.0) 1 (16.7) 1 (16.7) 5 (27.8)
Not Hispanic Or Latino 3 (50.0) 5 (83.3) 5 (83.3) 13 (72.2)
Height (cm)
n 6 6 6 18
Mean (SD) 171.2 (11.18) 179.1 (4.81) 171.8 (7.89) 174.0 (8.68)
Median 172.3 179.7 169.9 175.4
Min, Max 159.1, 183.9 171.0, 184.3 163.8, 186.5 159.1, 186.5
Weight (kg)
n 6 6 6 18
Mean (SD) 78.8 (13.61) 76.1 (9.55) 90.3 (8.73) 81.7 (12.00)
Median 74.9 76.3 91.8 78.0
Min, Max 62.7, 102.9 63.0, 91.5 76.8, 100.4 62.7, 102.9
BMI (kg/m2)
n 6 6 6 18
Mean (SD) 26.9 (3.51) 23.9 (4.21) 30.6 (2.39) 27.1 (4.30)
Median 27.8 24.0 30.5 28.2
Min, Max 22.6, 30.4 19.1, 31.3 27.4, 33.3 19.1, 33.3
------------------------------------------------------------------------------------------------------------------
Source: ADSL
[a] SD = Standard Deviation; BMI = Body Mass Index.
[a] Percentages are based on N in the column heading.
Table 14.1.2
Participant Disposition
Analysis Population: Enrolled Set
Cohort 1 (Low) Cohort 2 (Mid) Cohort 3 (High) Total
(N=6) (N=6) (N=6) (N=18)
------------------------------------------------------------------------------------------------------------------
Enrolled 6 (100.0) 6 (100.0) 6 (100.0) 18 (100.0)
Treated 6 (100.0) 6 (100.0) 6 (100.0) 18 (100.0)
Completed Study 6 (100.0) 5 (83.3) 5 (83.3) 16 (88.9)
Discontinued Study 0 (0.0) 1 (16.7) 1 (16.7) 2 (11.1)
Primary Reason for Discontinuation, n (%)
Death 0 (0.0) 1 (16.7) 0 (0.0) 1 (5.6)
Withdrawal by Subject 0 (0.0) 0 (0.0) 1 (16.7) 1 (5.6)
------------------------------------------------------------------------------------------------------------------
Source: ADSL
[a] Percentages are based on the number enrolled in each column.
Table 14.1.3
Extent of Exposure (Dose Administered)
Analysis Population: Safety Set
Cohort 1 (Low) Cohort 2 (Mid) Cohort 3 (High) Total
(N=6) (N=6) (N=6) (N=18)
------------------------------------------------------------------------------------------------------------------
Duration of Exposure (days)
n 6 6 6 18
Mean (SD) 1.0 (0.00) 1.0 (0.00) 1.0 (0.00) 1.0 (0.00)
Median 1.0 1.0 1.0 1.0
Min, Max 1.0, 1.0 1.0, 1.0 1.0, 1.0 1.0, 1.0
Total Dose Administered (vg)
n 6 6 6 18
Mean (SD) 30000000000000.0 (0.00)100000000000000.0 (0.00)300000000000000.0 (0.00)143333333333333.3 (117723504574964.84)
Median 30000000000000.0 100000000000000.0 300000000000000.0 100000000000000.0
Min, Max 30000000000000.0, 30000000000000.0100000000000000.0, 100000000000000.0300000000000000.0, 300000000000000.030000000000000.0, 300000000000000.0
Number of Doses
n 6 6 6 18
Mean (SD) 1.0 (0.00) 1.0 (0.00) 1.0 (0.00) 1.0 (0.00)
Median 1.0 1.0 1.0 1.0
Min, Max 1.0, 1.0 1.0, 1.0 1.0, 1.0 1.0, 1.0
------------------------------------------------------------------------------------------------------------------
Source: ADEX
[a] Duration calculated as (last dose date - first dose date + 1).
[a] HF-1002 is administered as a single intracoronary infusion.
Table 14.2.1.1
Change from Baseline in LVEF (Central Reader) at Months 3, 6, 12
Analysis Population: Full Analysis Set
Cohort 1 (Low) Cohort 2 (Mid) Cohort 3 (High) Total
(N=6) (N=6) (N=6) (N=18)
------------------------------------------------------------------------------------------------------------------
Baseline
n 6 6 6 18
Mean (SD) 23.2 (4.76) 24.3 (6.59) 22.7 (2.95) 23.4 (4.74)
Median (Q1, Q3) 21.7 (20.7, 27.1) 24.6 (18.7, 29.9) 23.2 (20.8, 24.9) 22.0 (20.3, 27.0)
Month 3
Mean (SD) 23.9 (5.00) 26.1 (5.82) 26.8 (2.26) 25.5 (4.61)
Change from Baseline - Mean (SD) 0.7 (1.95) 1.7 (2.00) 3.2 (0.31) 1.8 (1.88)
Month 6
Mean (SD) 25.2 (4.85) 27.9 (5.18) 28.2 (2.07) 27.1 (4.26)
Change from Baseline - Mean (SD) 0.9 (2.02) 3.5 (1.87) 4.6 (1.32) 3.0 (2.29)
Month 12
Mean (SD) 25.1 (4.80) 28.1 (6.82) 29.6 (2.33) 27.4 (5.06)
Change from Baseline - Mean (SD) 1.9 (1.46) 4.4 (2.29) 6.1 (1.44) 4.0 (2.45)
------------------------------------------------------------------------------------------------------------------
Source: ADIMG
[a] LVEF read by an independent central reader.
Table 14.2.1.2
Change from Baseline in Peak VO2 (CPET) at Months 3, 6, 12
Analysis Population: Full Analysis Set
Cohort 1 (Low) Cohort 2 (Mid) Cohort 3 (High) Total
(N=6) (N=6) (N=6) (N=18)
------------------------------------------------------------------------------------------------------------------
Baseline
n 6 6 6 18
Mean (SD) 14.0 (1.80) 14.6 (1.36) 13.9 (1.58) 14.2 (1.53)
Median (Q1, Q3) 13.7 (12.6, 15.5) 14.7 (13.8, 15.0) 13.6 (13.0, 14.3) 14.1 (12.9, 15.0)
Month 3
Mean (SD) 14.3 (1.68) 15.4 (1.75) 15.4 (1.84) 15.0 (1.72)
Change from Baseline - Mean (SD) 0.3 (0.67) 0.8 (0.63) 1.2 (0.48) 0.7 (0.67)
Month 6
Mean (SD) 14.0 (1.53) 15.3 (1.89) 16.2 (2.07) 15.2 (1.94)
Change from Baseline - Mean (SD) 0.3 (0.31) 0.8 (0.71) 1.9 (0.83) 1.0 (0.92)
Month 12
Mean (SD) 15.0 (2.03) 16.5 (1.09) 16.6 (1.66) 16.0 (1.74)
Change from Baseline - Mean (SD) 1.0 (0.46) 1.5 (0.53) 2.4 (0.20) 1.6 (0.73)
------------------------------------------------------------------------------------------------------------------
Source: ADEFF
Table 14.2.2.2
Change from Baseline in 6MWT Distance at Months 3, 6, 12
Analysis Population: Full Analysis Set
Cohort 1 (Low) Cohort 2 (Mid) Cohort 3 (High) Total
(N=6) (N=6) (N=6) (N=18)
------------------------------------------------------------------------------------------------------------------
Baseline
n 6 6 6 18
Mean (SD) 327.5 (38.65) 281.0 (32.92) 328.7 (34.66) 312.4 (40.41)
Median (Q1, Q3) 328.0 (314.0, 356.2)270.5 (257.0, 297.5)334.0 (320.5, 354.2)320.0 (271.2, 343.5)
Month 3
Mean (SD) 329.7 (43.44) 291.3 (45.99) 351.2 (31.92) 322.5 (46.33)
Change from Baseline - Mean (SD) 2.2 (7.17) 10.3 (15.28) 28.2 (11.26) 12.7 (15.47)
Month 6
Mean (SD) 344.2 (38.67) 313.0 (36.41) 365.8 (34.75) 339.2 (41.01)
Change from Baseline - Mean (SD) 25.2 (6.72) 32.0 (6.54) 42.8 (9.88) 33.2 (10.25)
Month 12
Mean (SD) 344.7 (38.39) 326.6 (27.46) 384.4 (23.80) 351.4 (37.81)
Change from Baseline - Mean (SD) 17.2 (3.82) 46.2 (11.65) 61.4 (12.68) 40.1 (21.40)
------------------------------------------------------------------------------------------------------------------
Source: ADEFF
Table 14.2.3.1
NYHA Functional Class
Analysis Population: Full Analysis Set
Cohort 1 (Low) Cohort 2 (Mid) Cohort 3 (High) Total
(N=6) (N=6) (N=6) (N=18)
------------------------------------------------------------------------------------------------------------------
Baseline, n (%)
Class II 0 (0.0) 0 (0.0) 0 (0.0) 0 (0.0)
Class III 6 (100.0) 6 (100.0) 6 (100.0) 18 (100.0)
Class IV 0 (0.0) 0 (0.0) 0 (0.0) 0 (0.0)
Month 3, n (%)
Class II 1 (16.7) 1 (16.7) 4 (66.7) 6 (33.3)
Class III 5 (83.3) 5 (83.3) 1 (16.7) 11 (61.1)
Class IV 0 (0.0) 0 (0.0) 0 (0.0) 0 (0.0)
Month 6, n (%)
Class II 3 (50.0) 4 (66.7) 4 (66.7) 11 (61.1)
Class III 2 (33.3) 1 (16.7) 1 (16.7) 4 (22.2)
Class IV 0 (0.0) 1 (16.7) 0 (0.0) 1 (5.6)
Month 12, n (%)
Class II 5 (83.3) 3 (50.0) 5 (83.3) 13 (72.2)
Class III 1 (16.7) 2 (33.3) 0 (0.0) 3 (16.7)
Class IV 0 (0.0) 0 (0.0) 0 (0.0) 0 (0.0)
------------------------------------------------------------------------------------------------------------------
Source: ADEFF
[a] Lower NYHA class indicates better functional status.
Table 14.2.4.1
Change from Baseline in MLHFQ Total Score at Months 3, 6, 12
Analysis Population: Full Analysis Set
Cohort 1 (Low) Cohort 2 (Mid) Cohort 3 (High) Total
(N=6) (N=6) (N=6) (N=18)
------------------------------------------------------------------------------------------------------------------
Baseline
n 6 6 6 18
Mean (SD) 53.8 (7.03) 54.7 (5.50) 51.3 (6.50) 53.3 (6.16)
Median (Q1, Q3) 52.5 (48.5, 59.5) 56.0 (52.2, 56.8) 50.0 (47.8, 50.8) 51.0 (48.5, 56.8)
Month 3
Mean (SD) 53.8 (9.85) 48.7 (6.74) 41.2 (8.58) 48.3 (9.50)
Change from Baseline - Mean (SD) 0.0 (4.00) -6.0 (2.28) -10.2 (3.83) -5.1 (5.34)
Month 6
Mean (SD) 46.8 (5.36) 45.8 (7.68) 38.6 (8.26) 43.9 (7.69)
Change from Baseline - Mean (SD) -7.8 (3.56) -8.8 (4.40) -12.8 (1.92) -9.8 (3.94)
Month 12
Mean (SD) 44.2 (4.83) 40.8 (6.98) 31.4 (6.02) 39.1 (7.84)
Change from Baseline - Mean (SD) -9.7 (4.27) -13.4 (2.19) -20.0 (2.24) -14.1 (5.32)
------------------------------------------------------------------------------------------------------------------
Source: ADEFF
[a] Lower MLHFQ scores indicate better quality of life.
Table 14.2.4.2
Change from Baseline in KCCQ Overall Summary Score at Months 3, 6, 12
Analysis Population: Full Analysis Set
Cohort 1 (Low) Cohort 2 (Mid) Cohort 3 (High) Total
(N=6) (N=6) (N=6) (N=18)
------------------------------------------------------------------------------------------------------------------
Baseline
n 6 6 6 18
Mean (SD) 46.6 (3.74) 46.5 (6.64) 47.8 (3.14) 47.0 (4.51)
Median (Q1, Q3) 46.1 (43.4, 50.0) 47.7 (42.4, 51.6) 48.0 (45.8, 48.6) 47.9 (43.9, 50.5)
Month 3
Mean (SD) 49.3 (8.49) 51.5 (7.08) 53.0 (3.61) 51.2 (6.62)
Change from Baseline - Mean (SD) 2.7 (5.99) 4.9 (4.93) 5.3 (3.90) 4.2 (4.90)
Month 6
Mean (SD) 53.9 (7.93) 56.5 (10.19) 58.5 (6.05) 56.3 (8.04)
Change from Baseline - Mean (SD) 6.5 (4.72) 9.9 (5.42) 10.7 (4.99) 9.1 (5.07)
Month 12
Mean (SD) 53.3 (7.55) 59.8 (9.56) 64.9 (3.46) 59.0 (8.46)
Change from Baseline - Mean (SD) 6.6 (5.44) 12.3 (2.90) 17.2 (4.50) 11.7 (6.15)
------------------------------------------------------------------------------------------------------------------
Source: ADEFF
[a] Higher KCCQ scores indicate better quality of life.
Table 14.3.1.1
Overall Summary of Treatment-Emergent Adverse Events
Analysis Population: Safety Set
Cohort 1 (Low) Cohort 2 (Mid) Cohort 3 (High) Total
(N=6) (N=6) (N=6) (N=18)
------------------------------------------------------------------------------------------------------------------
Subjects with any TEAE 6 (100.0) 6 (100.0) 6 (100.0) 18 (100.0)
Subjects with any related TEAE 6 (100.0) 6 (100.0) 6 (100.0) 18 (100.0)
Subjects with any serious TEAE 0 (0.0) 1 (16.7) 1 (16.7) 2 (11.1)
Subjects with any Grade >=3 TEAE 1 (16.7) 1 (16.7) 1 (16.7) 3 (16.7)
Subjects with a dose-limiting toxicity 1 (16.7) 0 (0.0) 1 (16.7) 2 (11.1)
TEAE leading to death 0 (0.0) 1 (16.7) 0 (0.0) 1 (5.6)
------------------------------------------------------------------------------------------------------------------
Source: ADAE
[a] A TEAE is any AE with onset on or after the HF-1002 infusion.
[a] Subjects are counted once per row.
Table 14.3.1.2
Treatment-Emergent Adverse Events by System Organ Class and Preferred Term
Analysis Population: Safety Set
Cohort 1 (Low) Cohort 2 (Mid) Cohort 3 (High) Total
(N=6) (N=6) (N=6) (N=18)
------------------------------------------------------------------------------------------------------------------
Subjects with any event 6 (100.0) 6 (100.0) 6 (100.0) 18 (100.0)
General disorders and administration site 6 (100.0) 6 (100.0) 6 (100.0) 18 (100.0)
Catheter site haematoma 6 (100.0) 6 (100.0) 6 (100.0) 18 (100.0)
Chills 2 (33.3) 1 (16.7) 4 (66.7) 7 (38.9)
Pyrexia 3 (50.0) 3 (50.0) 1 (16.7) 7 (38.9)
Fatigue 1 (16.7) 1 (16.7) 0 (0.0) 2 (11.1)
Investigations 2 (33.3) 2 (33.3) 3 (50.0) 7 (38.9)
Transaminases increased 2 (33.3) 2 (33.3) 3 (50.0) 7 (38.9)
Hepatic enzyme increased 1 (16.7) 0 (0.0) 0 (0.0) 1 (5.6)
Gastrointestinal disorders 2 (33.3) 2 (33.3) 2 (33.3) 6 (33.3)
Nausea 2 (33.3) 2 (33.3) 2 (33.3) 6 (33.3)
Injury, poisoning and procedural complicat 1 (16.7) 2 (33.3) 1 (16.7) 4 (22.2)
Infusion related reaction 1 (16.7) 2 (33.3) 1 (16.7) 4 (22.2)
Nervous system disorders 0 (0.0) 1 (16.7) 2 (33.3) 3 (16.7)
Headache 0 (0.0) 1 (16.7) 2 (33.3) 3 (16.7)
Cardiac disorders 0 (0.0) 1 (16.7) 1 (16.7) 2 (11.1)
Cardiac failure 0 (0.0) 1 (16.7) 0 (0.0) 1 (5.6)
Myocarditis 0 (0.0) 0 (0.0) 1 (16.7) 1 (5.6)
------------------------------------------------------------------------------------------------------------------
Source: ADAE
[a] MedDRA system organ class and preferred term (synthetic demo coding).
[a] Subjects with multiple events within a row are counted once.
Table 14.3.2.1
Serious Adverse Events by System Organ Class and Preferred Term
Analysis Population: Safety Set
Cohort 1 (Low) Cohort 2 (Mid) Cohort 3 (High) Total
(N=6) (N=6) (N=6) (N=18)
------------------------------------------------------------------------------------------------------------------
Subjects with any event 0 (0.0) 1 (16.7) 1 (16.7) 2 (11.1)
Cardiac disorders 0 (0.0) 1 (16.7) 1 (16.7) 2 (11.1)
Cardiac failure 0 (0.0) 1 (16.7) 0 (0.0) 1 (5.6)
Myocarditis 0 (0.0) 0 (0.0) 1 (16.7) 1 (5.6)
------------------------------------------------------------------------------------------------------------------
Source: ADAE
[a] Serious TEAEs only.
[a] Subjects with multiple events within a row are counted once.
Table 14.3.3.1
Dose-Limiting Toxicities by Cohort
Analysis Population: DLT-Evaluable Set
Cohort 1 (Low) Cohort 2 (Mid) Cohort 3 (High) Total
(N=6) (N=6) (N=6) (N=18)
------------------------------------------------------------------------------------------------------------------
Subjects with any DLT 1 (16.7) 0 (0.0) 1 (16.7) 2 (11.1)
Hepatic enzyme increased 1 (16.7) 0 (0.0) 0 (0.0) 1 (5.6)
Myocarditis 0 (0.0) 0 (0.0) 1 (16.7) 1 (5.6)
------------------------------------------------------------------------------------------------------------------
Source: ADAE
[a] DLT assessed through the Week 4 DLT window.
Table 14.3.4.1
Summary of Deaths
Analysis Population: Safety Set
Cohort 1 (Low) Cohort 2 (Mid) Cohort 3 (High) Total
(N=6) (N=6) (N=6) (N=18)
------------------------------------------------------------------------------------------------------------------
Deaths 0 (0.0) 1 (16.7) 0 (0.0) 1 (5.6)
------------------------------------------------------------------------------------------------------------------
Source: ADSL
[a] Deaths during the study (primary observation and long-term follow-up).
Table 14.3.5.1
Summary of Laboratory Parameters at Month 12
Analysis Population: Safety Set
Cohort 1 (Low) Cohort 2 (Mid) Cohort 3 (High) Total
(N=6) (N=6) (N=6) (N=18)
------------------------------------------------------------------------------------------------------------------
Alkaline Phosphatase (U/L)
Baseline - Mean (SD) 70.5 (23.16) 101.0 (13.39) 95.0 (21.15) 88.8 (22.94)
Month 12 - Mean (SD) 89.2 (13.33) 66.6 (15.57) 77.6 (16.36) 78.5 (16.98)
Month 12 Change from Baseline - Mean (SD 18.7 (19.19) -38.0 (25.43) -14.2 (35.79) -9.3 (35.10)
Alanine Aminotransferase (U/L)
Baseline - Mean (SD) 27.0 (11.08) 30.2 (5.78) 28.3 (8.26) 28.5 (8.23)
Month 12 - Mean (SD) 23.8 (9.62) 24.6 (5.64) 30.4 (7.60) 26.1 (7.98)
Month 12 Change from Baseline - Mean (SD -3.2 (17.34) -4.4 (10.43) 3.4 (8.79) -1.5 (12.72)
Aspartate Aminotransferase (U/L)
Baseline - Mean (SD) 23.7 (5.47) 28.7 (5.96) 28.5 (7.26) 26.9 (6.36)
Month 12 - Mean (SD) 27.8 (8.06) 26.4 (6.27) 25.0 (8.46) 26.5 (7.26)
Month 12 Change from Baseline - Mean (SD 4.2 (12.02) -1.2 (7.19) -3.0 (13.45) 0.2 (10.98)
Total Bilirubin (mg/dL)
Baseline - Mean (SD) 0.8 (0.23) 0.8 (0.18) 0.5 (0.15) 0.7 (0.22)
Month 12 - Mean (SD) 0.8 (0.24) 0.7 (0.22) 0.5 (0.09) 0.7 (0.21)
Month 12 Change from Baseline - Mean (SD 0.0 (0.23) -0.1 (0.27) 0.0 (0.16) -0.0 (0.22)
Complement C3 (mg/dL)
Baseline - Mean (SD) 117.0 (22.05) 120.8 (18.69) 98.8 (21.30) 112.2 (21.84)
Month 12 - Mean (SD) 112.5 (12.34) 129.8 (30.26) 135.9 (33.28) 125.2 (26.45)
Month 12 Change from Baseline - Mean (SD -4.5 (27.11) 10.8 (40.28) 40.9 (45.91) 14.5 (40.27)
Complement C4 (mg/dL)
Baseline - Mean (SD) 23.8 (4.91) 20.2 (5.64) 20.3 (3.99) 21.5 (4.89)
Month 12 - Mean (SD) 31.0 (5.70) 27.4 (6.26) 30.6 (4.99) 29.7 (5.54)
Month 12 Change from Baseline - Mean (SD 7.2 (8.16) 7.9 (4.93) 9.8 (3.53) 8.3 (5.77)
Creatinine (mg/dL)
Baseline - Mean (SD) 1.0 (0.26) 1.2 (0.29) 1.1 (0.28) 1.1 (0.28)
Month 12 - Mean (SD) 1.1 (0.26) 1.2 (0.20) 1.2 (0.27) 1.2 (0.24)
Month 12 Change from Baseline - Mean (SD 0.1 (0.48) 0.0 (0.40) 0.1 (0.35) 0.1 (0.40)
Hemoglobin (g/dL)
Baseline - Mean (SD) 14.1 (1.42) 13.8 (1.49) 13.9 (1.06) 13.9 (1.26)
Month 12 - Mean (SD) 13.1 (1.60) 14.0 (1.40) 13.3 (0.90) 13.5 (1.32)
Month 12 Change from Baseline - Mean (SD -1.0 (1.96) 0.1 (2.92) -0.5 (0.84) -0.5 (1.99)
Neutrophils (10^9/L)
Baseline - Mean (SD) 4.0 (1.43) 4.7 (1.54) 5.1 (0.70) 4.6 (1.29)
Month 12 - Mean (SD) 4.4 (1.31) 4.9 (1.39) 5.1 (0.86) 4.8 (1.18)
Month 12 Change from Baseline - Mean (SD 0.4 (2.33) 0.3 (1.79) 0.2 (1.07) 0.3 (1.72)
NT-proBNP (pg/mL)
Baseline - Mean (SD) 2257.0 (736.39) 1967.0 (504.22) 2471.2 (863.60) 2231.7 (706.27)
Month 12 - Mean (SD) 2032.0 (720.59) 1490.6 (436.13) 1781.6 (537.82) 1784.6 (595.18)
Month 12 Change from Baseline - Mean (SD -225.0 (139.32) -387.0 (99.34) -868.8 (373.79) -476.8 (354.44)
Platelets (10^9/L)
Baseline - Mean (SD) 246.0 (50.84) 227.2 (47.94) 260.8 (66.03) 244.7 (54.03)
Month 12 - Mean (SD) 223.0 (46.25) 233.2 (78.68) 283.4 (54.96) 245.1 (62.46)
Month 12 Change from Baseline - Mean (SD -23.0 (53.98) 18.8 (57.36) 13.2 (112.63) 1.4 (74.95)
Troponin I (ng/mL)
Baseline - Mean (SD) 0.0 (0.00) 0.0 (0.01) 0.0 (0.00) 0.0 (0.01)
Month 12 - Mean (SD) 0.0 (0.00) 0.0 (0.01) 0.0 (0.01) 0.0 (0.01)
Month 12 Change from Baseline - Mean (SD 0.0 (0.01) 0.0 (0.01) 0.0 (0.01) 0.0 (0.01)
Leukocytes (10^9/L)
Baseline - Mean (SD) 8.0 (2.23) 8.8 (0.98) 7.3 (1.79) 8.0 (1.75)
Month 12 - Mean (SD) 7.8 (1.84) 7.1 (1.91) 7.6 (2.28) 7.5 (1.90)
Month 12 Change from Baseline - Mean (SD -0.2 (3.41) -1.7 (1.86) -0.1 (1.91) -0.6 (2.51)
------------------------------------------------------------------------------------------------------------------
Source: ADLB
[a] Standardized results. Baseline is the last value on/before first dose.
Table 14.3.6.1
Summary of Vital Signs at Month 12
Analysis Population: Safety Set
Cohort 1 (Low) Cohort 2 (Mid) Cohort 3 (High) Total
(N=6) (N=6) (N=6) (N=18)
------------------------------------------------------------------------------------------------------------------
Diastolic Blood Pressure (mmHg)
Baseline - Mean (SD) 73.3 (7.97) 71.8 (4.88) 74.8 (7.33) 73.3 (6.56)
Month 12 - Mean (SD) 74.5 (9.09) 73.2 (5.89) 66.0 (4.30) 71.4 (7.51)
Month 12 Change from Baseline - Mean (SD 1.2 (9.13) 0.4 (9.21) -7.0 (6.20) -1.6 (8.65)
Pulse Rate (beats/min)
Baseline - Mean (SD) 84.5 (7.82) 70.3 (8.26) 82.3 (8.69) 79.1 (10.07)
Month 12 - Mean (SD) 67.3 (8.73) 74.8 (9.26) 79.8 (10.83) 73.6 (10.42)
Month 12 Change from Baseline - Mean (SD -17.2 (13.24) 3.0 (16.02) -3.0 (14.46) -6.4 (16.19)
Respiratory Rate (breaths/min)
Baseline - Mean (SD) 15.0 (2.97) 17.3 (1.97) 15.0 (2.37) 15.8 (2.58)
Month 12 - Mean (SD) 16.0 (2.61) 15.4 (2.97) 15.4 (2.30) 15.6 (2.47)
Month 12 Change from Baseline - Mean (SD 1.0 (4.86) -2.2 (2.28) 0.2 (3.90) -0.2 (3.91)
Systolic Blood Pressure (mmHg)
Baseline - Mean (SD) 115.3 (15.36) 124.7 (18.13) 121.5 (12.08) 120.5 (15.00)
Month 12 - Mean (SD) 118.7 (14.17) 113.0 (13.93) 116.8 (7.95) 116.3 (11.89)
Month 12 Change from Baseline - Mean (SD 3.3 (27.91) -15.6 (19.93) -4.4 (18.12) -5.0 (22.77)
Temperature (C)
Baseline - Mean (SD) 36.9 (0.29) 36.7 (0.28) 36.7 (0.34) 36.8 (0.30)
Month 12 - Mean (SD) 36.8 (0.31) 36.6 (0.28) 36.8 (0.44) 36.7 (0.34)
Month 12 Change from Baseline - Mean (SD -0.1 (0.54) 0.0 (0.34) 0.2 (0.41) 0.0 (0.43)
------------------------------------------------------------------------------------------------------------------
Source: ADVS
[a] Standardized results. Baseline is the last value on/before first dose.
Columns are the three dose cohorts plus Total; populations follow the SAP. Every cell was independently reproduced in R (see QC).
Independent QC, in R
Every layer was re-programmed from scratch in R — reading the same inputs but sharing no code — and compared against the Python production. Datasets are compared with diffdf (the PROC COMPARE equivalent); the tables are compared cell by cell. Result across all three layers: zero differences.
27/27
SDTM datasets pass
7/7
ADaM datasets pass
16/16
TFL tables pass (cell-by-cell)
1
real defect caught and fixed
Coverage
Layer
Comparison method
Scope
Result
SDTM
diffdf dataset compare
27 datasets
27/27 PASS
ADaM
diffdf dataset compare
7 datasets
7/7 PASS
TFL
cell-by-cell compare
16 tables · 1,365 cells
16/16 PASS
The defect double-programming caught
Lossy float parsing. The first TFL QC run flagged two table cells. Root cause: pandas.read_csv's default float parser is lossy (off by ~1 ULP) and parsed 19.799999999999997 as 19.800000000000001, diverging from R's correct parser exactly at a rounding boundary — so the Python tables rounded two cells the wrong way. Fixed by reading with float_precision="round_trip". A single-implementation build, and a structural check, would both have missed this; only a second independent implementation disagreeing surfaced it.
Each QC harness was validated with a negative control — injecting a wrong value or dropping a row makes the comparison fail — so an all-pass result is meaningful, not trivial. Reports: sdtm_out/qc/, adam_out/qc/, tfl_out/tfl_qc/.
Demonstration. Protocol HF-1002-CL-101 (fictional) · Phase 1 gene therapy · synthetic data · SDTMIG 3.4 / ADaMIG 1.3 · not for clinical or submission use