USDM's ten model areas
CDISC's own training materials group every USDM class into ten functional model areas. This is the fastest way to get oriented before diving into the full UML diagram:
Study, Titles & Identifiers
Study, StudyIdentifier, StudyTitle, Organization.
Amendments
StudyAmendment, StudyAmendmentReason, StudyAmendmentImpact.
Roles & Responsibilities
StudyRole, AssignedPerson, Masking.
Study Design, Arms & Epochs
StudyDesign, StudyArm, StudyEpoch, StudyCell, StudyElement.
Population & Eligibility Criteria
StudyDesignPopulation, StudyCohort, EligibilityCriterion.
Objectives / Endpoints / Estimands
Objective, Endpoint, Estimand, IntercurrentEvent, AnalysisPopulation.
Detailed Study Logic / Timelines
ScheduleTimeline, ScheduledActivityInstance, ScheduledDecisionInstance, Timing.
Procedures / Biomedical Concepts
Activity, Procedure, BiomedicalConcept, BiomedicalConceptCategory.
Interventions
StudyIntervention, Administration, AdministrableProduct, MedicalDevice.
Unstructured Content
NarrativeContent, NarrativeContentItem, SyntaxTemplate.
These ten areas map fairly directly onto ICH M11 protocol sections too — which is by design. See USDM Implementation Guide Explained for that mapping.
The backbone, one more time, in depth
Walking the backbone with real attribute-level detail: Study.versions → one
or more StudyVersion (each a distinct amendment/version). StudyVersion.studyDesigns → one or more StudyDesign
(interventional or observational). From StudyDesign, everything fans out: arms, epochs, elements, studyCells, encounters, scheduleTimelines, activities, population, objectives, estimands, studyInterventions, eligibilityCriteria, and biospecimenRetentions.
Standard attributes every class shares
USDM enforces a consistent naming convention across the entire model:
| Attribute | Meaning |
|---|---|
id |
Unique identifier for an instance, scoped to a single study version. Every class has one. |
name |
The literal, logical identifier of an instance. Must be unique within the class. Not intended for display. |
description |
A narrative representation of the instance. |
label |
The short, display-friendly designation — e.g. a timing label like "Day 5" shown in a Schedule of Activities. |
notes |
A relationship to CommentAnnotation, holding freeform notes tied to the instance. |
Not every class uses every one of these — they're employed only where they're actually required.
Complex datatypes
Beyond plain strings and numbers, USDM defines a small set of reusable complex datatypes used throughout the model:
- Code — a code/decode pair plus the code system and its version. The universal way any controlled term (CDISC, SNOMED, LOINC, or other) is referenced.
- AliasCode — a standard code plus zero or more alias codes, for cross-linking multiple coding systems to the same concept.
- Quantity — a value plus an optional unit (itself an AliasCode).
- Range — a minValue and maxValue (both Quantity), with an isApproximate flag.
- QuantityRange — an abstract class inherited by either Quantity or Range.
- Duration — refers to a QuantityRange, with durationWillVary / reasonDurationWillVary flags.
- CommentAnnotation — a general-purpose note, optionally coded against a custom codelist.
- PersonName — aligned with the FHIR HumanName datatype (given names, family name, prefixes, suffixes).
The Biomedical Concept sub-model
One of the richest corners of the object model is the Biomedical Concept group, because it's the seam that connects USDM to CDISC 360i automation:
An Activity can point to any mix of a BiomedicalConceptCategory (a named grouping, e.g. "Vital Signs"), individual BiomedicalConcepts (e.g. "Systolic Blood Pressure," backed by a CDISC C-code), or a
BiomedicalConceptSurrogate — a placeholder used when no standard BC
definition exists yet, holding just a name, description, and optional reference URL. Each real BC decomposes
further into BiomedicalConceptProperty instances (result, unit, body position,
method …), each of which can be flagged required/enabled and constrained to specific ResponseCode values.
See it as JSON — the Biomedical Concept example below shows exactly this Activity → Category → Concept → Property → ResponseCode chain.
Abstract classes: the model areas rely on a small set of shared parents
A detail that clarifies a lot of otherwise-confusing repetition in the model: several USDM classes are abstract — they're never instantiated directly, but exist purely so multiple concrete classes can inherit a common set of attributes and relationships. Recognizing the abstract classes makes the ten model areas click into place faster:
| Abstract class | Inherited by | Shared capability |
|---|---|---|
ScheduledInstance |
ScheduledActivityInstance, ScheduledDecisionInstance | epoch reference, defaultCondition, timeline placement |
PopulationDefinition |
StudyDesignPopulation, StudyCohort | plannedAge, plannedSex, criteria, enrollment numbers |
SyntaxTemplate |
Objective, Endpoint, EligibilityCriterionItem, Characteristic, Condition, IntercurrentEvent | tagged text, dictionary reference for reusable structured content |
QuantityRange |
Quantity, Range | a common parent so any attribute expecting "a value or a range" can be typed consistently |
Every time you see the same attribute name (criteria, plannedAge, text, dictionary)
show up on multiple, seemingly unrelated classes, check whether they share one of these abstract parents
before assuming it's a coincidence — it almost never is.
How the model areas map onto a real protocol's table of contents
Because USDM v4.0 was explicitly aligned to ICH M11's CeSHarP structure, the ten model areas roughly track the sections of a modern harmonised protocol:
- Study, Titles & Identifiers → the M11 title page and identifiers table.
- Amendments → the M11 Amendment Details / Overview of Changes sections.
- Study Design, Arms & Epochs and Detailed Study Logic/Timelines → M11 Section 4 (Trial Design) and the Schedule of Activities.
- Population & Eligibility Criteria → M11 Section 5 (Trial Population).
- Objectives/Endpoints/Estimands → M11 Section 3 (Trial Objectives and Associated Estimands).
- Interventions → M11 Section 6 (Trial Intervention and Concomitant Therapy).
- Procedures/Biomedical Concepts → M11 Section 8 (Trial Assessments and Procedures).
This alignment is exactly why a well-formed USDM study design can, in principle, generate large parts of an M11-conformant protocol document automatically — see USDM Implementation Guide Explained for the document-generation mechanics.
Quick reference: which class do I need?
| "I need to model…" | Class |
|---|---|
| A treatment pathway | StudyArm |
| A named time period | StudyEpoch |
| What happens in one arm during one epoch | StudyCell + StudyElement |
| A visit | Encounter |
| The full visit-by-visit schedule | ScheduleTimeline + ScheduledActivityInstance
|
| A branch or loop in the schedule | ScheduledDecisionInstance + ConditionAssignment
|
| What's measured at a visit | Activity → BiomedicalConcept |
| An inclusion/exclusion rule | EligibilityCriterion + EligibilityCriterionItem
|
| A treatment effect of interest | Objective + Endpoint + Estimand |
| A footnote | Condition |
How class count has grown across versions
USDM's object model has grown additively rather than being rewritten between versions. The most visible recent growth was the v4.0 IDMP-aligned intervention expansion (AdministrableProduct, Ingredient, Substance, Strength, MedicalDevice, and related identifier/property classes) — see USDM Version 4.0 Explained for the full list. Earlier growth included the estimand-related classes (Estimand, IntercurrentEvent, AnalysisPopulation) added to align with ICH E9(R1), and the syntax template mechanism added to support reusable, tagged eligibility and objective text. Knowing this growth pattern is useful when reading older training material or example files: a v1.0-era example simply won't contain classes introduced in v3.0 or v4.0, which is not an error in the example, just a version-scope difference.
Frequently asked questions
Is the USDM object model the same as the USDM UML diagram?
Yes — the UML class diagram is the normative, authoritative form of the USDM object model. Everything else (API, data dictionary, controlled terminology) is derived from or aligned to that UML model.
How many classes does USDM have?
USDM v4.0 has well over 100 classes across ten model areas. The exact count changes slightly between versions; the authoritative source is the USDM_CT.xlsx 'DDF Entities & Attributes' sheet and the published UML diagram on CDISC's GitHub.
What are the standard attributes every USDM class has?
Most classes share id (a unique identifier scoped to the study), name (a unique, logical identifier, not for display), label (a short display-friendly designation), and notes (a link to CommentAnnotation). Not every class uses every one of these.
What is the difference between a class 'attribute' and a 'relationship' in USDM?
An attribute holds a value directly on the class (a string, code, or complex datatype like Quantity). A relationship links to a separate instance of another class, using singular names for one-to-one links and plural names for one-to-many links.