USDMPlay Register Help
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

USDM classes are commonly grouped 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:

AttributeMeaning
idUnique identifier for an instance, scoped to a single study version. Every class has one.
nameThe literal, logical identifier of an instance. Must be unique within the class. Not intended for display.
labelThe short, display-friendly designation — e.g. a timing label like "Day 5" shown in a Schedule of Activities.
notesA relationship to CommentAnnotation, holding freeform notes tied to the instance.

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 BiomedicalConceptSystolic Blood Pressure BiomedicalConceptDiastolic Blood Pressure BiomedicalConceptHeart 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 classInherited byShared capability
ScheduledInstanceScheduledActivityInstance, ScheduledDecisionInstanceepoch reference, defaultCondition, timeline placement
PopulationDefinitionStudyDesignPopulation, StudyCohortplannedAge, plannedSex, criteria, enrollment numbers
SyntaxTemplateObjective, Endpoint, EligibilityCriterionItem, Characteristic, Condition, IntercurrentEventtagged text, dictionary reference for reusable structured content
QuantityRangeQuantity, Rangea 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 pathwayStudyArm
A named time periodStudyEpoch
What happens in one arm during one epochStudyCell + StudyElement
A visitEncounter
The full visit-by-visit scheduleScheduleTimeline + ScheduledActivityInstance
A branch or loop in the scheduleScheduledDecisionInstance + ConditionAssignment
What's measured at a visitActivityBiomedicalConcept
An inclusion/exclusion ruleEligibilityCriterion + EligibilityCriterionItem
A treatment effect of interestObjective + Endpoint + Estimand
A footnoteCondition

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.