Chapter 6

Chapter 6: Protocol — Trial Lifecycle, State Transitions, Monitoring and Regulatory Submission

How the records of Chapters 3 and 4 move through time: the order in which trial data is allowed to exist, the states a trial, a subject, a visit and a submission pass through, the monitoring rhythm that watches them, and the dossiers they finally feed.

The earlier chapters treated clinical trial data as shapes: a trial registration object, a subject with visits, an adverse event with its MedDRA code and seriousness flags. Shapes alone do not make a trial. A laboratory value is only admissible if the subject had consented before the blood was drawn; a randomization is only valid if the subject was eligible and the trial was open; a database can only be locked when every serious case has been processed. In other words, clinical data has a protocol in the networking sense as well as the clinical one: a set of ordering rules that decide which message may follow which.

WIA-BIO-010 v1.0 speaks to this layer in three places. §5.5 and §9 describe safety monitoring and stopping rules, §6 lists the regulatory dossiers for the United States, the European Union and Japan together with ICH-GCP essential documents, and the TypeScript types encode four status vocabularies: TrialStatus, the enrollment status of PatientEnrollment, the visit status of PatientVisit and the status of RegulatorySubmission. What v1.0 does not provide is the transition logic between those states. The reference SDK creates records in their first state (planned, enrolled, draft) and never moves them; of the ten error codes it declares, the only one it actually throws is B005 for statistical inputs. This chapter therefore does two jobs: it explains the lifecycle that the standard presupposes, and it proposes the transition tables and guards an implementer has to write, marking clearly which parts are the book's proposal rather than normative text.

6.1 The end-to-end data protocol

Ten steps, one direction

A single-country, two-arm drug trial passes through the same sequence regardless of indication. Each step produces records that the next step depends on, and each step has a gate that should be checked by software rather than by memory.

  1. Registration and approvals. The protocol is finalized, the trial is entered in the sponsor's system (the §7.1 object) and in a public registry, ethics approval and regulatory authorization are obtained.
  2. Informed consent. Each candidate receives the approved informed consent form (ICF); the signed, dated form must precede any study-specific procedure, including screening tests.
  3. Screening and enrollment. Eligibility criteria are checked; eligible subjects are enrolled and receive a subject identifier.
  4. Randomization. The subject is allocated to an arm, possibly within strata, and the allocation is concealed as the protocol requires.
  5. Scheduled visits. Visits occur on target study days within tolerance windows; measurements, laboratory results and vital signs are captured through EDC.
  6. Adverse event capture. AEs are recorded as they occur and coded, graded and assessed as described in Chapter 4; serious cases start their own clocks.
  7. Safety review. Sponsor safety staff and, where one exists, the DSMB review accumulating data on a schedule and on triggers.
  8. Database lock. After the last subject's last visit, open queries are resolved, coding is finalized, and the database is locked; for a blinded trial the allocation is revealed only after lock.
  9. Tabulation and analysis. Locked data is converted to SDTM and ADaM (Chapter 3), and the pre-specified analyses of Chapter 2 are run.
  10. Submission. Datasets and reports are assembled into the dossier the target regulator expects.

The direction matters. Data may be corrected after it is entered, with an audit trail, but the order of events it describes cannot be rearranged: a consent date later than the first procedure is a finding, not a typo to be quietly edited. For that reason, the gates below compare dates carried in the records rather than the order in which the records happened to reach the database.

StepRecord producedWIA-BIO-010 carrierGate before the next stepError code if the gate fails
1 RegistrationTrial record, protocol version§7.1 object / ClinicalTrialEthics approval and authorization on fileB009 (proposed use)
2 ConsentSigned ICF, version, dateconsentDate onlyConsent dated on or before first procedureB006
3 EnrollmentSubject identifier, demographicsPatientEnrollmentTrial in recruiting; eligibility confirmedB001 / B003
4 RandomizationArm, strata, randomization numberRandomizationSubject enrolled, consent validB006 / B002
5 VisitsVisit dataPatientVisit, collectPatientDataSubject in an active state; visit day inside windowB002 / B008
6 AE captureAE record, coding, grade, causalityAdverseEventSerious cases processed within their clocksB004
7 Safety reviewReview minutes, DSMB recommendationNot modelled in v1.0Recommendation recorded before status change—
8 Database lockLock record, final coding versionsNot modelled in v1.0No open queries, no unreported serious casesB004 / B003
9 TabulationSDTM, ADaM datasetsSDTMRecordTraceability checks passB003
10 SubmissionDossier recordRegulatorySubmissionRequired components presentB009

Two rows stand out. Steps 7 and 8, safety review and database lock, are events that every regulator will ask about, yet v1.0 has no object for either. An implementation needs at least a decision record (who reviewed what data, when, and what was recommended) and a lock record (timestamp, the dictionary versions frozen at lock, the person who authorized it). The error code column also shows that B007–B010, which the SDK added beyond the six codes in spec §8.4, are useful once an implementer attaches them to concrete gates. The table uses B009 "regulatory non-compliance" for missing approvals; that is the book's proposed use, since neither the spec nor the SDK says when B009 is raised.

6.2 State machines from the types

A status field without transition rules is a free-text field with a restricted alphabet. Any code path can write completed over planned, and nothing in the record shows how the value got there. The remedy is conventional: define the allowed transitions explicitly, check the guard conditions at each one, and write every transition to the audit trail with the reason. The four vocabularies in types.ts are sufficient to do this, with a few interpretive choices that are spelled out below.

Trial status

TrialStatus is 'planned' | 'recruiting' | 'active' | 'suspended' | 'completed' | 'terminated'. The spec never defines the difference between recruiting and active. The reading adopted here follows common registry practice (ClinicalTrials.gov, for instance, distinguishes "Recruiting" from "Active, not recruiting"): recruiting means subjects are being enrolled; active means enrollment has closed while treatment and follow-up continue. suspended is a temporary halt, whether imposed by the sponsor, an ethics committee or a regulator (a clinical hold, in US terms). completed means the trial ended as planned; terminated means it ended early for any reason. Both are terminal.

Subject, visit and submission status

Enrollment status runs enrolled → randomized → active → completed, with withdrawn reachable from every non-terminal state. active is best read as "has started study treatment", which separates subjects who were randomized but never dosed; that distinction matters for defining the safety population. Note what the vocabulary lacks: there is no screened or screen-failed. Screening failures still need to be counted for the CONSORT-style flow of a trial report, so they should be kept in a separate screening log or in the SDTM DS (disposition) domain rather than forced into withdrawn, which would inflate the dropout figure used in Chapter 2's sample-size inflation.

Visit status is 'scheduled' | 'completed' | 'missed' | 'unscheduled'. A scheduled visit moves once, to completed or missed; an unscheduled visit is created directly in its final form (typically after an AE or an abnormal result). Submission status is draft → submitted → under-review → approved | rejected; in practice regulators also request additional information during review, which the vocabulary does not represent, so implementations tend to keep the correspondence log outside this field.

Trial (TrialStatus) planned recruiting active completed suspended terminated approvals any stop Subject (PatientEnrollment.status) enrolled randomized active completed withdrawn B006 1st dose
Figure 6.1 Proposed transitions for the two most important status fields. Green boxes are normal terminal states, red boxes early-exit states; suspended can return to the state it came from. The transitions are the book's reading of types.ts; v1.0 does not define them.

Guards and the error codes they raise

TransitionGuard conditionError on failure
trial planned → recruitingEthics approval and regulatory authorization recorded; protocol version fixedB009
trial recruiting → activeEnrollment closed (target reached or recruitment ended by decision)B003
trial → suspended / backDecision record with reason; resumption needs the same approvals as the original startB009
trial active → completedLast subject's last visit done; no unreported serious cases; database lockedB004 / B003
subject enrolled → randomizedConsent dated on or before randomization; eligibility confirmed; trial recruitingB006 / B003
any data write for a subjectSubject exists and is not in a state that forbids new dataB002
subject → withdrawnReason and date recorded; decision on use of data already collected documentedB003
visit scheduled → completedVisit day inside window, or deviation raisedB008 (recorded, not blocking)
submission draft → submittedRequired components for the agency and type presentB009

Two design choices hide in this table. First, B008 is recorded, not thrown: a visit outside its window is a real event that happened, and refusing to store it would lose data. The visit is saved and a deviation is raised against it. Second, withdrawal does not delete anything. A subject who withdraws consent for further participation has not necessarily withdrawn permission to use data already collected, and regulations generally require keeping it; what changes is that no new data may be written, which is exactly the B002 guard.

A transition function you can test

The following TypeScript encodes the trial and subject tables. It imports the error class and codes that the package exports through its types subpath; the function bodies are the book's code, not part of @wia/bio-010.

import { ClinicalTrialError, ClinicalTrialErrorCode as E } from '@wia/bio-010/types';
import type { TrialStatus } from '@wia/bio-010/types';

type EnrollmentStatus = 'enrolled' | 'randomized' | 'active' | 'withdrawn' | 'completed';

const TRIAL_NEXT: Record<TrialStatus, TrialStatus[]> = {
  planned:    ['recruiting', 'terminated'],
  recruiting: ['active', 'suspended', 'terminated'],
  active:     ['suspended', 'completed', 'terminated'],
  suspended:  ['recruiting', 'active', 'terminated'],
  completed:  [],
  terminated: [],
};

const SUBJECT_NEXT: Record<EnrollmentStatus, EnrollmentStatus[]> = {
  enrolled:   ['randomized', 'withdrawn'],
  randomized: ['active', 'withdrawn'],
  active:     ['completed', 'withdrawn'],
  withdrawn:  [],
  completed:  [],
};

interface TrialContext {
  ethicsApproval?: string;          // ISO date of IRB/EC approval
  regulatoryAuthorization?: string; // ISO date of authorization
  openSeriousCasesUnreported: number;
}

export function moveTrial(from: TrialStatus, to: TrialStatus, ctx: TrialContext): TrialStatus {
  if (!TRIAL_NEXT[from].includes(to)) {
    throw new ClinicalTrialError(E.VALIDATION_FAILURE, `Illegal trial transition ${from} -> ${to}`);
  }
  if (to === 'recruiting' && (!ctx.ethicsApproval || !ctx.regulatoryAuthorization)) {
    throw new ClinicalTrialError(E.REGULATORY_NONCOMPLIANCE,
      'Recruitment needs ethics approval and regulatory authorization on file');
  }
  if (to === 'completed' && ctx.openSeriousCasesUnreported > 0) {
    throw new ClinicalTrialError(E.SAE_NOT_REPORTED,
      `${ctx.openSeriousCasesUnreported} serious case(s) still unreported`);
  }
  return to;
}

export function moveSubject(from: EnrollmentStatus, to: EnrollmentStatus,
                            s: { consentDate?: string; eventDate: string }): EnrollmentStatus {
  if (!SUBJECT_NEXT[from].includes(to)) {
    throw new ClinicalTrialError(E.PATIENT_NOT_ENROLLED, `Illegal subject transition ${from} -> ${to}`);
  }
  // ISO dates compare correctly as strings
  if (to === 'randomized' && (!s.consentDate || s.consentDate > s.eventDate)) {
    throw new ClinicalTrialError(E.MISSING_CONSENT, 'No valid consent dated on or before randomization');
  }
  return to;
}

Five calls exercise the guards: opening recruitment with only an ethics approval, reopening a completed trial, completing a trial with one unreported serious case, randomizing a subject whose consent is dated the day after randomization, and the same subject with a correct consent date. The output is:

fail B009 Recruitment needs ethics approval and regulatory authorization on file
fail B003 Illegal trial transition completed -> active
fail B004 1 serious case(s) still unreported
fail B006 No valid consent dated on or before randomization
ok   randomized

In production the function would also append an audit entry (old value, new value, user, timestamp, reason) inside the same database transaction as the status update, so that a status can never change without a trace. Chapter 7 develops the audit record itself.

6.3 Visit windows and protocol deviations

Study days

PatientVisit carries two optional integers: visitWindow, commented as "days from baseline", and visitDay, "actual visit day". The comment makes visitWindow look like a target day rather than a window, and the type has no field for the tolerance. A usable schedule needs three numbers per planned visit: the target study day and the permitted days before and after it. In SDTM these belong to the trial design: the TV (Trial Visits) domain describes planned visits and their start and end rules, and the SV (Subject Visits) domain records the visits that actually took place. Implementers are well advised to keep the schedule in a table of that shape and to treat visitWindow only as the target day.

The day count itself needs a convention, and the SDTM one is the safest to adopt everywhere: the reference start date (usually first dose or randomization, as defined in the protocol) is Day 1, the day before it is Day −1, and there is no Day 0. A visit "at Week 12" therefore has target Day 85, not 84, because 84 days have elapsed since Day 1. Off-by-one mistakes here are among the most common causes of spurious deviations.

Worked example

For illustration, take a subject whose reference start date is 3 March 2025 and a protocol that allows ±7 days around the Week 12 visit. Target Day 85 falls on 26 May 2025, and the window runs from Day 78 to Day 92 (19 May to 2 June 2025). The function below computes the study day and classifies the visit.

interface ScheduleEntry { visitName: string; targetDay: number; before: number; after: number }

// SDTM-style study day: Day 1 = reference start date, no Day 0
function studyDay(refStart: string, date: string): number {
  const diff = (Date.parse(date) - Date.parse(refStart)) / 86_400_000;
  return diff >= 0 ? diff + 1 : diff;
}

function classifyVisit(e: ScheduleEntry, refStart: string, visitDate: string) {
  const day = studyDay(refStart, visitDate);
  const lo = e.targetDay - e.before, hi = e.targetDay + e.after;
  const inWindow = day >= lo && day <= hi;
  return { visitName: e.visitName, visitDay: day, window: `${lo}-${hi}`,
           deviation: inWindow ? null : { code: 'B008', daysOutside: day < lo ? day - lo : day - hi } };
}

const week12: ScheduleEntry = { visitName: 'Week 12', targetDay: 85, before: 7, after: 7 };
for (const d of ['2025-05-26', '2025-05-30', '2025-06-06']) {
  console.log(JSON.stringify(classifyVisit(week12, '2025-03-03', d)));
}
{"visitName":"Week 12","visitDay":85,"window":"78-92","deviation":null}
{"visitName":"Week 12","visitDay":89,"window":"78-92","deviation":null}
{"visitName":"Week 12","visitDay":96,"window":"78-92","deviation":{"code":"B008","daysOutside":4}}

The third visit is stored with visitDay: 96 and a deviation four days late. The date parsing relies on date-only ISO strings being read as UTC midnight, which is what JavaScript does; if timestamps with local times are ever passed in, they must be reduced to the local calendar date of the site first, or a visit late in the evening can shift by a day.

Deviation tracking

A protocol deviation is any departure from the approved protocol: a visit out of window, a missed assessment, a dose given outside the specified range, a subject enrolled who did not meet an eligibility criterion, a procedure done before consent. Spec §9.2 lists "protocol deviation tracking" under real-time monitoring, and the SDK reserves B008 PROTOCOL_DEVIATION for it, but neither defines a deviation record. A minimal one contains the subject, the visit or date, a category, a description, whether it is classified as important (likely to affect data reliability or subject safety), the date identified, and the corrective and preventive action. The distinction between important and other deviations is the one that ends up in the clinical study report, so it should be assigned by a person according to a written plan, not inferred from the category. A deviation detected automatically, like the late visit above, starts life as a candidate and is confirmed or dismissed in review.

Deviations also feed back into analysis. The per-protocol population of Chapter 2 is defined by excluding subjects with important deviations, so the classification has to be complete and frozen before database lock and before unblinding, otherwise the choice of who is excluded could be influenced by knowing who received which treatment.

6.4 The safety monitoring cadence

Real-time signals

Spec §9.2 defines four continuous checks: vital-sign alerts at more than 2 SD "from normal", laboratory alerts at CTCAE Grade 3 or higher, immediate SAE notification, and protocol deviation tracking. They sit at different levels of precision.

A real-time alert is a request for human attention, not a decision. Every alert therefore needs an owner, an acknowledgement time and a disposition (for example "clinically not significant", "AE recorded", "query raised"), and those three fields are what an inspector will sample.

Periodic reviews

Cadence (spec §9.2)Typical reviewerInput dataOutput record
Weekly — SAE reviewSponsor safety physician, medical monitorNew and updated serious cases, coding, causality, expectednessCase assessments; expedited reports where required
Monthly — safety data reviewStudy team (usually blinded)AE listings by SOC/PT, lab shifts, vital-sign trends, deviationsReview minutes, signals for follow-up
Quarterly — DSMB meetingIndependent DSMBUnblinded or partially unblinded tables prepared by an independent statisticianRecommendation: continue, modify, pause or stop
Annually — regulatory safety reportSponsor pharmacovigilanceCumulative safety across the development programmeAnnual report, e.g. the ICH E2F Development Safety Update Report (DSUR) or the US IND annual report

The frequencies are the spec's defaults. A protocol may justify others: a small Phase I trial may review cohort by cohort, while a long outcomes trial with a slowly accruing event may have its DSMB meet twice a year. What must not vary is that the cadence is written down before the trial begins and that each review leaves a dated record.

DSMB triggers

Spec §5.5 adds three event-driven triggers for DSMB review: enrollment milestones at 25 %, 50 % and 75 %, pre-specified time points, and a breach of an SAE threshold. For the §7.1 example trial with 600 planned subjects, the milestones fall at the 150th, 300th and 450th subject enrolled. Two cautions apply. First, "enrolled" should be counted by the randomization date, not by record creation date, so late data entry does not delay a meeting. Second, if any of these reviews includes a formal efficacy comparison, it is an interim analysis in the sense of Chapter 2 and must be accounted for in the α spending; a safety-only review of unblinded data is still possible, but the charter must say which kind of review each trigger initiates.

Independence is the reason a DSMB exists. Its members do not run the trial, the unblinded reports are prepared by a statistician outside the study team, and the sponsor sees recommendations, not comparative data. A software implementation supports this by keeping the unblinded outputs in a separately permissioned area and logging every access.

6.5 Stopping rules and how decisions are documented

The three kinds of rule in v1.0

Safety. Spec §9.3 states three conditions: stop if the probability that the experimental treatment is worse than control exceeds 0.95, if the SAE rate exceeds a pre-specified threshold, or if the benefit–risk balance is unfavourable. §5.5 expresses the first as "P(treatment safer than control | data) < 0.05". For a continuous posterior the two statements are the same condition seen from opposite sides; implementers should nevertheless choose one wording and one definition of "worse" (a higher rate of which events?) and write it in the DSMB charter.

Efficacy. Stopping early for benefit uses a group-sequential boundary. §5.5 names O'Brien–Fleming. As Chapter 2 showed, the spec's list of nominal levels for three looks is not internally consistent; for three equally spaced looks with overall two-sided α = 0.05, the O'Brien–Fleming nominal levels are about 0.0005, 0.014 and 0.045, and those are the figures to use.

Futility. §9.3 gives conditional power below 20 % and a Bayesian predictive probability of success below 10 %. These thresholds are common conventions, not regulatory requirements. Because futility stopping only ever reduces the chance of a positive result, it does not inflate type I error, but a binding futility rule (one the sponsor commits to follow) does affect the efficacy boundaries and must be declared as such in the statistical analysis plan.

A worked safety posterior

To see what the 0.95 rule means in numbers, consider an illustrative interim look with 100 subjects per arm. Model each arm's SAE probability with a uniform Beta(1, 1) prior, so that after observing x events in 100 subjects the posterior is Beta(1 + x, 101 − x). The quantity the rule needs is P(pE > pC | data), which can be estimated by drawing from both posteriors and counting how often the experimental draw is larger. With four million draws per arm:

SAEs experimental / control (n = 100 each)P(experimental worse | data)Rule at 0.95
10 / 5≈ 0.90Not crossed
12 / 5≈ 0.96Crossed
15 / 5≈ 0.99Crossed

Two lessons follow. The rule is sensitive near the threshold: two additional events move the result across it, which is why the charter should require that a crossing prompts review rather than automatic termination. And the answer depends on the prior and on which events are counted; a different prior or an event definition restricted to treatment-related SAEs would give different numbers. The prior, the event definition and the look schedule belong in the charter before any unblinded data is seen.

Who decides

A DSMB recommends; the sponsor decides. The sponsor may accept, modify or, rarely and with documented justification, decline a recommendation. Ethics committees and regulators must be informed of a suspension or early termination, and in many jurisdictions within a fixed period; investigators must inform their subjects and arrange follow-up. In data terms each decision produces a chain of records: the DSMB recommendation (date, data cut-off, rule triggered, recommendation), the sponsor decision (who, when, rationale), the resulting trial status change (active → suspended or → terminated, with the decision record as its reason), and the notifications sent.

{
  "decisionId": "DSMB-2025-03",
  "trialId": "NCT12345678",
  "dataCutoff": "2025-09-30",
  "meetingDate": "2025-10-14",
  "trigger": "enrollment-50-percent",
  "rulesEvaluated": [
    { "rule": "safety-posterior", "threshold": 0.95, "value": 0.90, "crossed": false },
    { "rule": "futility-conditional-power", "threshold": 0.20, "value": 0.41, "crossed": false }
  ],
  "recommendation": "continue-unchanged",
  "sponsorDecision": { "decision": "accepted", "by": "sponsor-medical-lead", "date": "2025-10-16" },
  "statusChange": null
}

The record above is an illustrative extension, not a v1.0 object; all values in it are invented for the example. Its point is structural: a status change without a linked decision record, or a decision record whose rules and thresholds differ from those in the charter, is the kind of inconsistency that audits find first.

6.6 Regulatory submission protocols

Spec §6 lists the dossiers for three regions and the ICH-GCP essential documents. The SDK models a submission as a RegulatorySubmission record with an agency (FDA, EMA, PMDA, NMPA, MHRA, OTHER), a format (CDISC, eCTD, NeeS, SEND), a type (IND, NDA, BLA, CTA, MAA, OTHER), the list of included datasets and a status. generateSubmission returns such a record in draft and builds nothing; the CLI's generate-submission command only prints text. Both are bookkeeping for a dossier that must be assembled by other tools. Note also that the format values mix levels: eCTD and NeeS are dossier formats, whereas CDISC SDTM/ADaM and SEND are dataset standards that travel inside an eCTD. A record typically needs both, which the single field cannot express.

United States: IND and NDA

An Investigational New Drug application is required before a new drug is given to humans in a US trial. Spec §6.1 lists its components in the order of 21 CFR 312.23: the cover sheet (Form FDA 1571), a table of contents, an introductory statement and general investigational plan, the investigator's brochure, the clinical protocol, chemistry, manufacturing and controls information, pharmacology and toxicology information, and previous human experience. Under 21 CFR 312.40 a trial may begin 30 days after FDA receives the IND unless FDA imposes a clinical hold earlier, which is the regulatory counterpart of the suspended status above. After the trials, a New Drug Application (or a Biologics License Application for biologics) presents the evidence for approval, and it is organized as a Common Technical Document.

CTD moduleContentWhere WIA-BIO-010 data ends up
Module 1Regional administrative information and prescribing information (not part of the harmonized CTD proper)Forms, labelling; no trial datasets
Module 2CTD summaries: quality overall summary, nonclinical and clinical overviews and summariesClinical summaries of efficacy and safety draw on ADaM results
Module 3Quality (chemistry, manufacturing and controls)None
Module 4Nonclinical study reportsSEND datasets for animal studies, outside this standard's scope
Module 5Clinical study reports and related informationClinical study reports, SDTM and ADaM datasets with define.xml and reviewer guides

European Union: from EudraCT to CTIS

Spec §6.2 describes the EU application as a Clinical Trial Application with a EudraCT number and an Investigational Medicinal Product Dossier (IMPD) covering quality, non-clinical and clinical information. That describes the regime under the former Clinical Trials Directive. Under Regulation (EU) No 536/2014, which now applies to EU trials, applications are submitted through the Clinical Trials Information System (CTIS), which replaced EudraCT for new trials. The application is assessed in two parts: Part I, the scientific and product-related aspects assessed jointly by the member states concerned, and Part II, national and ethical aspects such as informed consent and site suitability, assessed by each member state. The IMPD remains part of the Part I dossier. The trial record therefore needs a field for the EU trial number issued by CTIS; the old EudraCT number remains relevant only for trials that started under the previous rules.

Japan and other jurisdictions

For Japan, spec §6.3 lists a Clinical Trial Notification with basic, quality, non-clinical and clinical information and a risk management plan. The notification is filed with the regulatory authority, and PMDA carries out the review; the precise content should be confirmed against current PMDA guidance, because the spec's list is a summary rather than a regulatory checklist. The SDK's agency list also includes China's NMPA and the UK's MHRA, for which v1.0 gives no content at all. For Korean readers, the analogous step is approval of the clinical trial plan by the Ministry of Food and Drug Safety (식약처) under the Korean GCP rules; this chapter mentions it for orientation only, since v1.0 does not address it.

ICH-GCP essential documents

Essential documents are those that, individually and together, allow the conduct of a trial and the quality of its data to be evaluated. ICH E6(R2) listed them by stage in its section 8; the revision E6(R3), finalized in 2025, keeps the concept as essential records but applies it in a more risk-proportionate way. Spec §6.4 gives a short stage-based list, which the table below extends slightly and links to the records of this book. Together these documents make up the trial master file (TMF) at the sponsor and the investigator site file at each site.

Trial stageEssential documents (spec §6.4 and common practice)Link to the data protocol
Before initiationProtocol and amendments; investigator's brochure; ethics committee approval; regulatory authorization; approved ICF versions; randomization and code-break proceduresGate for planned → recruiting; protocol and ICF versions referenced by every later record
During the trialSource documents; completed CRFs; SAE reports; monitoring visit reports; deviation log; DSMB recommendations; audit certificates where audits occurVisit data, AE records, decision records, audit trail
After completionFinal clinical study report; documentation of the statistical analysis; database lock record; treatment allocation and decoding documentation; notification of trial endLock record, SDTM/ADaM, RegulatorySubmission

The practical consequence for software is that each item in the table needs a place to live and a date, and the status gates of section 6.2 should check them. A trial should not be able to leave planned while the ethics approval document is missing from the TMF index, and a submission should not leave draft while the lock record is absent.

6.7 Chapter checklist and known gaps

CheckBasisWhat "done" looks like
Transition tables for trial, subject, visit and submission statustypes.ts status unionsEvery status change goes through one function with an allowed-transition table
Guards attached to error codesSpec §8.4, SDK B001–B010B002, B004, B006, B008, B009 each raised at a named gate
Consent checked against dates, not arrival orderSpec §9.1, B006No randomization or data write before the consent date
Visit schedule with target day and windowvisitWindow, visitDay, SDTM TV/SVStudy day computed with no Day 0; out-of-window visits stored and flagged
Deviation record with important/other classificationSpec §9.2, B008Classification complete before database lock
Documented definitions for real-time alertsSpec §9.2The "2 SD" reference chosen and written in the safety plan
DSMB charter with triggers, rules, priorsSpec §5.5, §9.3Recommendation and sponsor decision records linked to status changes
Correct efficacy boundariesChapter 2, §5.5O'Brien–Fleming nominal levels ≈0.0005/0.014/0.045 for three looks
Submission record distinguishes dossier format from dataset standardRegulatorySubmissioneCTD plus SDTM/ADaM recorded separately
EU trials recorded under CTISRegulation (EU) No 536/2014EU trial number field; EudraCT only for legacy trials

Known gaps in the v1.0 reference material (lifecycle and submission)

With the lifecycle in place, the pieces of the book can be put together into a working system. Chapter 7 does that: it takes the five components required by spec §8.1, wires the SDK into them, and adds what the reference code leaves out, namely persistence, the Part 11 audit trail, edit checks and access control.