Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

FDA Technical Conformance Guide

The FDA Study Data Technical Conformance Guide (TCG) defines requirements for electronic study data submissions. This page covers XPT-specific requirements.

Submission Types

XPT files are required for these FDA submission types:

Submission TypeDescriptionXPT Required
NDANew Drug ApplicationYes
ANDAAbbreviated NDA (Generics)Yes
BLABiologics License ApplicationYes
INDInvestigational New DrugConditional

File Size Requirements

graph LR
    subgraph "File Size Limits"
        A[Single XPT] --> B{">5 GB?"}
        B -->|Yes| C[Split into parts]
        B -->|No| D[Single file OK]
        C --> E[ae_001.xpt<br/>ae_002.xpt<br/>...]
    end

Automatic File Splitting

xportrs automatically handles file splitting:

#![allow(unused)]
fn main() {
use xportrs::Xpt;

// Automatically splits if dataset would exceed 5GB
Xpt::writer(large_dataset)
.max_file_size_gb(5.0)  // Optional, 5.0 is default
.finalize() ?
.write_path("ae.xpt") ?;  // May create ae_001.xpt, ae_002.xpt, ...
}

Character Encoding

[!IMPORTANT] FDA requires **ASCII-only ** characters in variable names and labels. Extended characters may cause validation failures.

ASCII Validation

#![allow(unused)]
fn main() {
use xportrs::{Agency, Xpt};

let validated = Xpt::writer(dataset)
.agency(Agency::FDA)  // Enforces ASCII validation
.finalize() ?;

// Non-ASCII characters will generate errors
for issue in validated.issues() {
if format ! ("{}", issue).contains("ASCII") {
eprintln ! ("ASCII violation: {}", issue);
}
}
}

Variable Requirements

Naming Conventions

RequirementFDA TCG Sectionxportrs Validation
1-8 charactersSection 4.1.5Error if violated
Uppercase onlySection 4.1.5Auto-converted
Start with letterSection 4.1.5Error if violated
A-Z, 0-9, underscore onlySection 4.1.5Error if violated

Label Requirements

RequirementFDA TCG Sectionxportrs Validation
0-40 charactersSection 4.1.5Error if >40
ASCII onlySection 4.1.5Error if non-ASCII
Recommended for all variablesSection 4.1.5Warning if missing

Numeric Precision

XPT files use IBM floating-point format with specific precision limits:

Data TypeIEEE 754 PrecisionIBM Float PrecisionNotes
IntegerExact to 2^53Exact to ~10^14Safe for IDs
Decimal~15-17 digits~14-16 digitsSlight loss
DateVariesSAS epoch-basedUse date formats

[!NOTE] For maximum precision, consider using the DATE9. or DATETIME20. formats for date/time values rather than storing as plain numerics.

Date Handling

FDA expects dates in specific formats:

ISO 8601 Character Dates

#![allow(unused)]
fn main() {
// Preferred: Store as ISO 8601 character string
Column::new("AESTDTC", ColumnData::String(vec![Some("2024-01-15".into())]))
.with_label("Start Date/Time of Adverse Event")
.with_format(Format::character(19))
}

SAS Numeric Dates

#![allow(unused)]
fn main() {
// Alternative: Store as SAS date number
// Days since January 1, 1960
let sas_date = 23_391.0;  // 2024-01-15

Column::new("AESTDT", ColumnData::F64(vec![Some(sas_date)]))
.with_label("Start Date")
.with_format_str("DATE9.") ?
}

Study Data Reviewer’s Guide

FDA recommends including a Reviewer’s Guide with submissions. The guide should reference:

  • Dataset locations and naming conventions
  • Variable naming patterns
  • Any deviations from CDISC standards
  • Data transformation documentation

eCTD Placement

XPT files are placed in specific eCTD module locations:

m5/
├── datasets/
│   ├── tabulations/
│   │   ├── sdtm/
│   │   │   ├── ae.xpt
│   │   │   ├── dm.xpt
│   │   │   └── define.xml
│   │   └── send/  (nonclinical)
│   └── analysis/
│       └── adam/
│           ├── adsl.xpt
│           ├── adae.xpt
│           └── define.xml

Validation Checklist

Before submission, verify:

  • All XPT files ≤5GB (or properly split)
  • Variable names ≤8 characters, uppercase
  • Variable labels ≤40 characters, ASCII only
  • Dataset names ≤8 characters
  • Character variable lengths ≤200 bytes
  • define.xml present and valid
  • Pinnacle 21 validation passed (or issues documented)

Resources