Independent and not affiliated with the FDA, MHRA, ISPE, PDA, or any agency. Get the appgoutham@madhadi.com
madhadi.comData Integrity & GxP Quality
Browse all topics -> Articles Templates & Procedures Learning paths GlossaryScenariosToolsRegulatory ReferencesLearning PathsTopics About Start here
Log Plug-and-play starting point Clinical & GCP

Log: Protocol Deviation and Analysis-Population Exclusion Classification Log

A plug-and-play per-subject log that separates the protocol-deviation decision from the analysis-population decision: source trigger, the population(s) assessed, the include/exclude call per population with its SAP-rule citation, and the pre-unblinding lock, with a filled specimen showing both a deviation-driven and a non-deviation-driven exclusion.

Document type: Log

Read and copy the template below into your own quality system. It is a generic starting point for your own internal use, provided as is, with no warranty; see the Terms and License. Adopting it does not by itself create compliance.

This is a ready-to-use log that keeps a protocol deviation and an analysis-population exclusion as the two separate decisions they actually are, and forces both to be traced to a written rule and locked before unblinding. Replace every <<FILL: ...>> placeholder, and maintain it in a queryable system rather than prose. A field guide and a filled specimen follow. This is educational reference content, not regulatory advice.

Why this log earns its place

A protocol deviation is an event: something happened that departed from the protocol. An analysis-population exclusion is a downstream statistical decision: whether a subject’s data counts in the Full Analysis Set, the Per-Protocol Set, the Safety Set, or a PK set. The two are related and they are not the same thing, and conflating them is a recurring source of both confusion and inspection findings.

A deviation can occur with no population impact at all: a visit conducted two days outside its window on a non-critical assessment gets logged, classified, and closed with no consequence for any analysis population. And a population exclusion can happen with no protocol deviation on record: a subject randomized but who withdraws consent before ever receiving a dose is excluded from the Safety Set by the plain definition of that population (analyzed by treatment received), not because anyone departed from the protocol.

The protocol deviation report and the protocol deviation trending register both carry a single line for “analysis population effect.” That is enough for the individual deviation record. It is not enough to answer the question an inspector or a reviewer actually asks at the end of the study: show me, for every subject excluded from any analysis population, exactly which rule justified it and prove the call was made before anyone knew which arm that subject was on. This log is where that proof lives, one row per subject-population decision, whether or not a deviation triggered it. See ICH E8(R1) and E9 trial design and statistics for how the estimand and the SAP’s population definitions are what this log applies, and the checklist for SAP prespecification and database-lock readiness for confirming the underlying rules themselves were locked before unblinding.

FieldEntry
Log number<<FILL: DOC-ID>>
Protocol / SAP reference and version<<FILL>>
Estimand reference<<FILL: link to the primary estimand>>
Unblinding date/time (once it has occurred)<<FILL>>
Version / date<<FILL>>
Owner<<FILL: Biostatistics>>

Prerequisite

The SAP’s analysis-population definitions (Full Analysis Set, Per-Protocol Set, Safety Set, and any PK or per-visit population) must already be finalized and version-controlled. This log applies those rules to individual subjects; it does not write them. See the estimand specification template and the SAP prespecification checklist.

Column definitions

ColumnMeaning
Entry IDUnique identifier for this log row
Subject IDID only, never a name
Source trigger typeProtocol deviation / Eligibility violation / Intercurrent-event handling / Treatment-received discrepancy / Other
Source referenceDeviation ID if one exists, or “N/A, no deviation”
Population(s) assessedFAS / PPS / Safety / PK (list every population this decision touches)
Decision per populationInclude / Exclude, one call per population
SAP rule citationSection and version of the SAP defining the rule applied
RationalePlain-language basis, tied to the cited rule, not a restatement of the deviation
Decision dateDate the classification call was made
Timing vs. unblindingPre-unblinding / Post-unblinding, with a flag if post
Assessed byBiostatistics or data management
Reviewed bySecond person, independent of the assessor

Log

Entry IDSubject IDSource triggerSource refPopulation(s)DecisionSAP ruleRationaleDateTimingAssessed byReviewed by
<<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>><<FILL>>

Timing control: the lock rule

No entry in this log may be added or changed after the unblinding timestamp without a documented, justified exception, reviewed and approved the same way a post-unblinding SAP amendment would be. A classification decided or altered after the treatment assignment is known, even if the outcome seems obviously correct in hindsight, is exactly the pattern that makes a per-protocol analysis look shaped to the result. Cross-reference item B3 of the SAP prespecification checklist.

Sign-off

RoleNameSignatureDate
Biostatistician<<FILL>>
Data management<<FILL>>
Clinical QA<<FILL>>

Acceptance criteria

  • Every row cites a specific SAP section and version, not a general reference to “the SAP.”
  • Source trigger type and source reference are populated even when there is no deviation; “N/A, no deviation” is itself an answer, not a blank.
  • Every decision’s timing relative to unblinding is recorded, and no post-unblinding entry exists without a documented exception.
  • The assessor and reviewer are different people.
  • The log’s Per-Protocol Set exclusion count reconciles exactly to the Per-Protocol Set N reported in the locked TLF package.

References

ICH E9, Statistical Principles for Clinical Trials; ICH E9(R1), Estimands and Sensitivity Analysis. ICH E6 GCP (deviation and data-quality obligations). ICH E3 (analysis populations and important protocol deviations in the CSR).

Confirm current versions before issue.


Filled specimen

Two rows, illustrative: one triggered by a protocol deviation, one with no deviation at all.

Entry IDSubject IDSource triggerSource refPopulation(s)DecisionSAP ruleRationaleDateTimingAssessed byReviewed by
APL-014-007S-014-007Protocol deviationPD-014-031FAS: Include; PPS: ExcludeFAS Include, PPS ExcludeSAP v3.0 section 9.2 (PPS excludes primary sample outside the protocol window)Primary sample drawn 4 days outside window; SAP keeps the subject in FAS (available value used regardless of timing per the treatment-policy estimand) but the same lateness fails the PPS window criterion20-Jun-2026Pre-unblindingL. Serra (Biostatistics)R. Mehta
APL-009-020S-009-020Treatment-received discrepancyN/A, no deviationSafety: Exclude; FAS: IncludeSafety Exclude, FAS IncludeSAP v3.0 section 9.1 (Safety Set = subjects with a recorded first dose)Subject withdrew consent after randomization and before the first dose; no protocol was departed from, the subject simply never entered the dosed population by the Safety Set’s own definition22-Jun-2026Pre-unblindingL. Serra (Biostatistics)R. Mehta

Row two is the case that a deviation-only view would miss entirely: there is no deviation ID because nothing went wrong against the protocol, yet the subject is legitimately excluded from one population and retained in another, on a rule that has nothing to do with deviations.

Common inspection findings this log prevents

  • A per-protocol exclusion whose only documentation is a line in a deviation report, so an inspector cannot see the full list of exclusions from one source.
  • A population classification decided or adjusted after unblinding, with the timing never recorded, so there is no way to prove it happened first.
  • A subject excluded from Safety or PK analysis with no deviation and no log entry either, because the deviation-centric process had nothing to trigger on.
  • The Per-Protocol Set count in the TLF package not reconciling to any single auditable source.
  • A rationale that restates the deviation instead of citing the SAP rule actually applied.

How to adapt this log

  1. Pre-load the SAP’s analysis-population rules as a reference sheet next to this log so the “SAP rule citation” column is a pick from a known list, not free recall.
  2. Run this log alongside, not instead of, the protocol deviation report for any row with a deviation source.
  3. Reconcile this log’s population counts to the statistical analysis and TLF package QC sign-off record before the package is released.
  4. Lock entries at unblinding the same way the SAP itself locks, and route any post-unblinding change through the same exception path as a SAP amendment.
Use madhadi.com as an app Full screen, works offline, one tap from your home screen.