The Model

USDM Object Model

USDM's object model is organized into clear class groups. This page walks through every major group and how they connect, from Study down to Timing.

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

Study StudyVersion StudyDesign StudyArm StudyEpoch Encounter ScheduleTimeline StudyCell StudyElement ScheduledActivityInstance Timing Activity • BiomedicalConcept • Procedure (linked from ScheduledActivityInstance)
USDM backbone: Study → StudyVersion → StudyDesign, with Arms, Epochs, Encounters, ScheduleTimeline, and the detailed Activity layer.

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:

ActivityVital Signs BiomedicalConceptCategoryBlood Pressure BiomedicalConcept Systolic Blood Pressure BiomedicalConcept Diastolic Blood Pressure BiomedicalConcept Heart Rate BiomedicalConceptPropertyresult, unit, position …
An Activity links to Biomedical Concepts (and optional BC Categories) — the standardized, reusable definitions of what is actually measured.

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.

usdm-biomedical-concept-example.json
Download JSON

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 ActivityBiomedicalConcept
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.