Start here
The TRIALMON Dashboard is the deterministic safety-monitoring backbone of an early-phase trial, made visible. It takes the same auditable rules that the validated %tm_* monitoring job runs every load — freshness gates, screening bands, the eDISH AND-gate, the 3+3 state machine — and renders them as one self-contained, offline, click-through picture so a biostatistician or medical monitor can see where the screen is pointing before they pick up the phone. It is a teaching and illustration view. It is not a console, not a record, and not a place a reported number ever comes from.
▶ Watch the dashboard in action (~2 min)⤢ Open the interactive dashboard
What this dashboard is
It visualizes a single synthetic study, CP-101: a 22-participant, five-cohort (C1–C5, 10/30/60/120/200 mg, N=3/3/6/6/4) Phase 1 dose-escalation trial run on a classic 3+3 rhythm across eight nominal visits (Screen, C1D1, C1D8, C1D15, C2D1, C2D8, C3D1, EOT). The underlying data is longitudinal — every participant has a per-visit series for each safety parameter — and it is seeded (SEED 20260611, a mulberry32 generator), so the picture is bit-for-bit reproducible every time the file is opened. Nothing is random at view time.
What the dashboard derives is deliberately tiny and fully auditable: the treatment-emergent AE (TEAE) flag, and the per-cohort 3+3 state (a trigger / decision-pending label). Everything else — relationship, seriousness, expectedness, DLT adjudication, the screening bands themselves — is either an investigator/SRC/sponsor-recorded assessment that the dashboard merely displays, or a deterministic band computed by a published rule. It never invents a causality call and never declares an MTD.
What this dashboard is NOT
- Not a source of reported numbers. Incidence tables, the ICH E14 categorical table, central-read QT intervals, concentration–QTc analysis, AE incidence, the MTD, and final disposition come only from validated tools — Phoenix WinNonlin, Pinnacle 21, the validated SDTM/ADaM pipeline. Any count panel here that resembles a regulatory table is explicitly labelled “screening census — not the validated table.”
- Not an adjudication engine. It will show you a participant sitting in the potential Hy’s-Law quadrant; it will never call that participant “a Hy’s-Law case.” See Governance for the approved language.
- Not an interpretation engine. This is the deterministic, validated-backbone view only. It screens against pre-specified univariate thresholds and shows you what crossed; it does not attempt a model-based or multi-system “gestalt” judgement about whether several co-occurring sub-threshold values add up to something — that judgement belongs to the human reviewer, not the screen.
- Not a record and not PHI. The data is synthetic and illustrative — no real participants, no unblinding, no randomization or kit codes, no identity-narrowing fields, no free-text narratives, and no Grade-5/death events.
Why a field guide
The dashboard is dense on purpose, and a colored cell carries a lot of governance behind it. This wiki is the reference manual that sits next to it — the document that tells you not just what a panel shows, but what it is allowed to mean, which silences are intentional, and where the validated number actually lives. It is written at operating-wiki depth so that a medical monitor or covering biostatistician can read a section cold and act correctly.
It is also built to be read in more than one way — skim the callouts, read a section end-to-end, or jump straight to a participant’s evidence packet — because retention comes from being able to approach the same material from whichever direction fits the moment.
Offline, self-contained, how to open it
The dashboard is a single HTML file. The charts are hand-rolled SVG; there are no external libraries, no fonts to fetch, no analytics, no network calls of any kind. To open it: double-click the file, or drag it into any modern browser (Chrome, Edge, Firefox, Safari). It renders fully air-gapped — on a locked-down workstation, on a plane, inside a validated environment — and no data ever leaves the file. There is nothing to install and nothing to configure.
How this wiki is organized
Read top to bottom the first time; after that, jump by need.
| Section | What you’ll find |
|---|---|
| A 60-second tour | The first screen, walked through in order — status band, KPI strip, sub-nav, the attention worklist, and click-to-drill. |
| Governance | The non-negotiable rules: screening-not-determination, approved Hy’s-Law language, severity vs seriousness, where validated numbers live. |
| Data & provenance | The synthetic CP-101 design, the seed, the per-visit model, and the backward-compat invariant. |
| Overview | KPI tiles, the attention worklist, the data-freshness/SLA panel, and the study heatmap. |
| Hepatic | eDISH with history trails, LFT trajectories, the R-ratio strip, and the peak/baseline table. |
| Cardiac | QTcF (Fridericia) trajectories and the ICH E14 categorical screening census. |
| Labs & vitals | The baseline→worst lab-shift grid, hematology and renal panels, and the orthostatic/PCS board. |
| AE & DLT | The 3+3 escalation ladder, the SOC×grade AE matrix, and the AE onset/duration swimlane. |
| Disposition | The enrollment funnel, RBQM KRI tiles, the deviation log, and the visit-compliance matrix. |
| Participants | The sortable roster and the per-participant evidence-packet modal. |
| Planted signals | The honest-by-design teaching cases — including the AND-gate near-miss and the multivariate-only participant. |
| From dashboard to production | How this view relates to the validated %tm_* job and the real pipeline. |
| Reference | Thresholds, formulas (Fridericia, CKD-EPI 2021, R-ratio), and controlled vocabularies. |
| FAQ | The questions a monitor actually asks — can I report a number, why is 011 silent, is this telling me it’s Hy’s Law, and more. |
If you read only one more thing after this page, read Governance — it is the difference between using the dashboard correctly and over-reading it.
A 60-second tour
Open the file and you land on the Overview screen of a dark operations console. Everything you need to triage is on this one page, arranged top-to-bottom in the order a monitor actually reads it: is anything on fire right now (the status band), can I trust what I’m looking at (the freshness chips), what’s the shape of the study (the KPI strip), and then what specifically should I look at first (the attention worklist). This tour walks that path once, end to end.
The walk-through, in order
- The status band (top-left): the worst-of-all RAG pill. One pill summarizes the entire screen by taking the worst single state anywhere in the study — RED if any open RED flag exists, AMBER if the worst open item is amber, GREEN only if nothing is open. On CP-101 it reads RED, because participants like
CP101-014(Hy’s-Law screening position) andCP101-018(QTcF 503 ms) are open. The pill is a tripwire, not a verdict — it tells you the page is not quiet, then sends you down to find out why. - The freshness chips (top-right): can I trust the green? Next to the status band sit the per-feed freshness chips — one per data feed, each showing its age against its SLA. This is the first thing to read, because of the cardinal rule: a panel can look GREEN on its content and still be escalated to RED if the feed it rests on is stale (“green-on-stale-data”). Pipeline freshness is a separate axis from data-content QC, and it is shown first-class for exactly that reason. See Overview for the SLA panel and load-tick history.
- The KPI tile strip: the shape of the study at a glance. Across the top sits the tile strip — enrolled count, open RED flags, open AMBER flags, serious AEs, adjudicated DLTs, enrollment %, and the data-feed state. This is your orientation: how big the study is, how much is open, and whether the feed underneath everything is healthy. The numbers here are screening counts, not reported figures — see the governance note on why an incidence figure never comes off a tile.
- The section sub-nav: the seven views. Below the KPIs is the sub-nav linking the seven deep sections — Overview, Hepatic, Cardiac, Labs & vitals, AE & DLT, Disposition, and Participants — plus a clearly-fenced Exploratory ▸ structure tab (unsupervised analytics, not the validated backbone). You don’t need any of it yet; the Overview will route you.
- Your first stop: the Overview attention worklist. This is the heart of the triage. The worklist lists every open AMBER/RED screening flag, highest-severity first, each row click-to-open. It is intentionally not a list of everything interesting — watch-tier participants and operational/multivariate-only participants are deliberately excluded, and that silence is a teaching point, not an omission (more in Planted signals). Start at the top row and work down.
- The study heatmap: when did it start? Just below the worklist is the participant×visit heatmap — each cell colored by the worst deterministic screening severity at that visit. This is your “when did it start” view: scan a flagged participant’s row to see the visit the color first appears. A hatched cell is a missed/operational visit (route to a human, never “fine”); a baseline-watch cell is shown distinctly so a pre-existing finding isn’t mistaken for a drug effect.
- Two more Overview panels. The cohort signal ranking orders the dose cohorts by a composite of DLT / SAE / Gr≥3 counts — a look-here-first ordering for the SRC, never an escalation. And the scenario simulator is a what-if: pick a hypothetical overnight event (a feed failing, a 2nd DLT, a new QTcF 500 ms) and watch how the deterministic roll-up and paging would respond. It is purely illustrative and never changes the live state — it just teaches the routing logic.
- Click to drill into any participant. Click any worklist row, any heatmap cell, or any participant in the roster, and the evidence-packet modal opens: deterministic flags first, then the per-visit sparkline trajectories, then provenance. This is where you confirm the prompt with your own eyes before deciding anything.
Once you’ve done the loop once, the natural next read is Planted signals — it names the specific participants this picture was built to teach, including the ones that are correctly silent — and then the Exploratory ▸ structure tab if you want the unsupervised, topological view of the same cohort.
The Governance Model
This is the spine of the TRIALMON Dashboard, and the section to read before any other. The dashboard’s charts are persuasive — an eDISH scatter with a participant sitting in the upper-right quadrant looks like a finding. The discipline that makes this tool safe to put in front of a medical monitor is the set of hard rules below: what a flag is and is not, what language is permitted, where reportable numbers come from, and who actually decides. Every panel in Overview through Participants inherits these rules. If a panel ever seems to break one, the panel is wrong, not the rule.
1. A flag is a screening prompt, not a determination
The deterministic backbone applies fixed, auditable thresholds to per-participant, per-visit values and raises a colored flag when a value crosses an action band. That is the entire claim. A flag says, in effect, “a human should look at this participant, at this domain, now.” It does not say the participant has a condition, that a drug caused anything, that an adverse event is serious, or that a dose level has failed.
The distinction is not pedantic. Early-phase safety decisions are made by people with regulatory authority and clinical judgment — the medical monitor, the Safety Review Committee (SRC), pharmacovigilance (PV), and, when the lead biostatistician is out, the covering biostatistician. The dashboard exists to make sure those people see the right participants quickly and with full context. It does not exist to make their decisions, and it is constructed so that it cannot, even by accident, look like it has.
CP101-014 trips the hepatic eDISH AND-gate (ALT 5.6×, TBili 3.1×). The dashboard’s correct output is a RED screening flag reading “potential Hy’s-Law quadrant — route to medical monitor.” The dashboard does not say this participant is a Hy’s-Law case, because Hy’s Law is a clinical determination that requires confirmatory repeat testing, R-ratio / ALP review to exclude a cholestatic pattern, and exclusion of viral, biliary, alcohol, concomitant-drug, and underlying causes. The flag is the start of that workup, never its conclusion.This is why the Attention Worklist is deliberately quiet about certain participants. CP101-011 — the multivariate-only case — has every univariate value below its own action threshold at every visit (QTcF 474 ms is WATCH not AMBER; ALT 2.6× is under 3×; Hgb and ANC are sub-Grade-2). The deterministic backbone correctly never fires, so CP101-011 never appears on the worklist. That silence is intentional and is itself a teaching point: a screening tool screens against declared thresholds, and the honest thing to do when nothing crosses a threshold is to stay silent. Any “look harder” intuition about co-drifting values is a judgement for the human reviewer — not something this threshold-based screen asserts.
2. Approved Hy’s-Law language — say this, never that
Hepatic safety language is where well-meaning dashboards do the most damage. The phrase “Hy’s Law case” carries enormous regulatory weight: a single genuine Hy’s-Law case in a development program can change a drug’s trajectory. A screening tool must never apply that label, because the tool has not done — and cannot do — the confirmatory and differential-diagnostic work the label requires. We constrain the vocabulary explicitly.
- “potential Hy’s-Law quadrant”
- “Hy’s-Law screening position”
- “AND-gate position, pending confirmation”
| Say this | Never this | Why |
|---|---|---|
“CP101-014 is in the potential Hy’s-Law quadrant at C2D8.” | “CP101-014 is a Hy’s-Law case.” | Hy’s Law is a clinical determination requiring confirmation and exclusion of other causes; the plot position is not the determination. |
| “AND-gate position pending confirmatory repeat and cholestasis exclusion.” | “Confirmed DILI” / “drug-induced liver injury detected.” | Causality and the DILI diagnosis are physician judgments; the dashboard observes labs, not mechanism. |
| “Screening flag: ALT ≥3× ULN AND TBili ≥2× ULN co-occur.” | “The drug is hepatotoxic at 120 mg.” | An attribution to dose/drug requires the SRC’s review of the whole cohort, not one scatter point. |
| “R-ratio ≈4.0 suggests a MIXED pattern — review.” | “Hepatocellular injury.” | The R-ratio is a pattern prompt; the unstable-near-ULN guard and clinical context can overturn the naive label. |
| “Eligible for Hy’s-Law evaluation by the medical monitor.” | “Meets Hy’s Law.” | “Meets” implies the full rule (incl. excluding cholestasis and other causes) has been satisfied. It has not. |
CP101-009 reaches ALT 4.2× ULN but TBili only 1.6× (under 2×). On the eDISH plot it sits in the right region (high ALT) but low on bilirubin — Temple’s Corollary territory, ALT elevation without bilirubin involvement. The AND-gate correctly stays GREEN at every visit, and CP101-009 stays off the worklist (it carries only a non-serious Grade-2 “ALT increased” AE). If the tool used loose language — “possible Hy’s Law” the moment ALT crossed a line — it would have manufactured a false alarm on a participant the AND-gate is specifically designed to not flag. Precise vocabulary is what makes the AND-gate trustworthy.3. Reportable numbers come from validated tools — never from here
Several dashboard panels resemble tables that appear in a Clinical Study Report or a regulatory submission: an AE incidence matrix, a categorical QTc outlier census, a disposition funnel, cohort DLT counts. The resemblance is intentional — it makes the screening view legible to people who read those tables — but the numbers on the dashboard are not those numbers and must never be quoted as if they were.
Concretely, the things you must take from the validated pipeline and never from this dashboard include:
- the ICH E14 categorical QTc table — the Cardiac census is a screening tally, not the central-read E14 analysis;
- AE incidence tables by SOC and grade — the AE matrix is a participant-incidence screening view of recorded events, not the locked analysis dataset;
- the MTD and any escalation/expansion/de-escalation decision — see rule 6;
- final disposition and completion/discontinuation tallies — the funnel is a live operational picture, not the database-lock disposition;
- any PK exposure, central-read interval, or concentration-QTc relationship.
CP101-018 for QTcF in the >500 ms band; the categorical E14 counts will be confirmed from the central read.” Never write “we have 3 participants with QTcF >500 ms” with the dashboard as your citation. The dashboard tells you where to look; the validated pipeline tells you what to report.4. Severity and seriousness are kept strictly separate
This is the rule most often collapsed in casual conversation, and collapsing it has regulatory consequences. Severity (a CTCAE grade) describes the intensity of an event. Seriousness is a regulatory classification under ICH criteria — death, life-threatening, hospitalization or prolongation thereof, persistent/significant disability, congenital anomaly, or an important medical event. They are orthogonal. A Grade 3 event is not automatically serious; a Grade 2 event can be serious if it meets an ICH criterion.
5. What the dashboard DERIVES vs. what it only DISPLAYS
Drawing this boundary precisely is what lets the tool be both useful and safe. The dashboard is allowed to compute a very small number of things, by fixed deterministic auditable rules. Everything else it shows — faithfully, with provenance — but never originates.
| The dashboard DERIVES (deterministic, auditable) | The dashboard only DISPLAYS (recorded elsewhere by a human/validated system) |
|---|---|
| The TEAE flag — whether an event is treatment-emergent, by comparing onset timing to first dose, a mechanical rule. | Relationship / causality — the investigator’s drug-relatedness assessment. The dashboard never derives relatedness from timing or pattern. |
| The 3+3 state — given the recorded, adjudicated DLT count and the designed N, which 3+3 branch the count satisfies, expressed as a trigger or decision-pending label. | Seriousness (SAE status) — the ICH regulatory classification, recorded by the investigator / PV. |
| The per-visit screening severity bands applied to clinical values (the deterministic threshold crossings that color the cells). | DLT adjudication — whether a given toxicity counts as a dose-limiting toxicity. The SRC adjudicates; the dashboard reads the result. |
| The data-freshness / SLA state per feed (load recency vs. SLA) — see rule 7. | Expectedness, the ICH E14 central read, AE incidence, PK exposure, MTD, and final disposition — all from validated systems. |
6. Causality, seriousness, expectedness, and DLT adjudication are inputs, not outputs
Expanding on the right-hand column above: four assessments in particular are recorded by people with the authority and the source documents to make them, and the dashboard’s only job is to surface them next to the screening context so a human can reason. The dashboard must never appear to generate them.
- Relationship/causality is the investigator’s call. A tight cluster of AE onsets inside the DLT window (visible in the onset/duration swimlane) is how monitors reason about drug-relatedness — but the swimlane is a reasoning aid, not a verdict. The dashboard never writes “related.”
- Seriousness is the regulatory SAE determination — PV / investigator, against ICH criteria.
- Expectedness is assessed against the reference safety information — not something a screening threshold can know.
- DLT adjudication is the SRC’s. For
CP101-014andCP101-013(the two C4 DLTs) andCP101-010(one DLT in C3), the dashboard shows the adjudicated DLT and lets the ladder count it — it did not decide it was a DLT.
7. Stale-green is escalated to RED: pipeline freshness ≠ content QC
A green panel built on a feed that has not loaded recently is more dangerous than a red one, because it broadcasts “all clear” from data that may already be wrong — the safety event may have happened and simply not arrived yet. TRIALMON treats this as a first-class failure mode, not a footnote.
8. Synthetic data, no PHI, no unblinding
This dashboard is a teaching and illustration artifact. The CP-101 trial, its 22 participants, and every value are synthetic and seeded (SEED 20260611, mulberry32) so the picture is reproducible across builds. There are no real participants and no protected health information anywhere in it.
- No PHI and no real participants — synthetic, illustrative data only.
- No unblinding: no randomization codes, no kit codes, no identity-narrowing free-text fields.
- No case-narrative prose — controlled vocabularies only, never a written clinical story.
- No Grade-5 / death anywhere in the dataset.
- Small-N cohorts (N=3–6) always carry the rate-instability caveat — a “2 of 6” is not a stable percentage and must be read as counts.
9. Humans decide — the named roles
“Route to a human” is not a hand-wave. The roles are specific, and each owns a defined slice of judgment that the dashboard explicitly does not.
| Role | Owns the decision the dashboard prompts |
|---|---|
| Medical monitor | Clinical interpretation of a screening flag — e.g., taking a potential Hy’s-Law quadrant position into a real hepatic workup (confirmatory repeat, cholestasis exclusion, differential diagnosis); making the Grade-4 anemia call the value-band deliberately withholds. |
| Safety Review Committee (SRC) | DLT adjudication and all dose decisions — escalate, expand, de-escalate, declare MTD. The 3+3 ladder hands the SRC a trigger; the SRC decides. |
| Pharmacovigilance (PV) | Seriousness (SAE) determination, expectedness, and regulatory reporting obligations — the ICH classifications the dashboard only displays. |
| Covering biostatistician | Operational continuity when the lead is out — triaging the worklist, confirming a flag is real vs. a freshness artifact, and escalating to the right role above. The dashboard is built so a covering statistician can pick it up cold and route correctly. |
CP101-011) are honest, the hepatic language is precise enough to survive a regulatory reading, the reportable numbers still come from the validated pipeline, and a stale feed can never masquerade as good news. The tool earns its place precisely by knowing where it stops.Continue to the data model for how the seeded longitudinal dataset and the backward-compat invariant are constructed, or jump to the planted signals for the full catalog of teaching cases referenced throughout this section.
The synthetic data model
Everything in this dashboard is fabricated — deliberately, transparently, and reproducibly. There are no real participants, no PHI, no unblinding, and no reported numbers. What you see is a seeded synthetic trial built to make the deterministic monitoring backbone visible and teachable. This section documents how the data is generated, what the longitudinal model contains, and the one hard invariant that keeps the new per-visit panels from ever contradicting the headline plots. Read it before you trust a single pixel: knowing the data is manufactured is the whole point, and the construction is itself the lesson.
Seeded and reproducible
The dashboard draws every random quantity from a single deterministic pseudo-random generator: a mulberry32 stream initialized with SEED = 20260611. Normal deviates are produced by a Box–Muller transform over that uniform stream (rn(mean, sd)), and bounded with explicit clamp() limits so no analyte ever wanders into the physically absurd. Because the seed is fixed and the generator is deterministic, the picture is identical on every open, in every browser, on every machine — the same participants, the same trajectories, the same flags, forever. That reproducibility is not a convenience; it is what makes this a teaching artifact you can point two colleagues at and have them see exactly the same thing, and it mirrors the discipline a frozen, validated pipeline brings to a real read.
The 22 participants are generated cohort by cohort from the design table C1–C5 at doses 10 / 30 / 60 / 120 / 200 mg with planned N = 3 / 3 / 6 / 6 / 4 — a classic 3+3 rhythm. Participant identifiers are assigned in enrollment order as CP101-001 through CP101-022. A per-participant toxicity scalar (tox = dose/200) gently raises the expected number of AEs, the SAE probability, and the Grade-3 probability with dose — so the synthetic trial has a plausible dose–toxicity gradient baked in, without any single value being hand-placed except the planted teaching cases.
The longitudinal (per-visit) model
Earlier versions of this view carried only a single worst-on-study summary value per participant. The current model is longitudinal: each participant has a scaffold of 8 nominal visits — Screen, C1D1, C1D8, C1D15, C2D1, C2D8, C3D1, EOT at target study days −7, 1, 8, 15, 22, 29, 43, 53 — and most clinical and operational series are realized at every visit. This is what powers the history trails, the LFT and QTcF trajectories, the lab-shift bands, the heatmap, and the per-participant sparklines in the evidence packet.
The visit scaffold itself is modeled, not idealized:
- Windows and jitter. Early visits carry a tight ±1-day window; later visits a ±3-day window. The actual visit day is the target plus a small seeded jitter. If the realized day falls outside the window, the visit is marked out-of-window (
oow) and surfaces in the visit-compliance matrix. - Missed visits. A visit can be flagged absent (
present: false, statusmissed).CP101-003missesC2D1— an operational data-completeness gap that propagates as a null through every series, rendered as a hatched cell, never as a clinical severity. - Clinical series. Per visit, each participant carries hepatic LFTs (ALT / AST / TBili / ALP / GGT in ×ULN, plus a derived R-ratio and a recomputed AND-gate flag), an ECG record (QTcF by Fridericia, ΔQTcF, HR, PR, QRS, a tier, and a baseline-watch marker), a lab panel (Hgb, ANC, platelets, WBC, creatinine with a CKD-EPI-2021 race-free eGFR estimate, BUN, Na, K, corrected Ca), and a vitals/orthostatic record.
- Event-level AEs. Adverse events are individual records, not just counts: each carries a MedDRA-style SOC and preferred term drawn from a fixed controlled vocabulary, a CTCAE grade, onset and resolution study days, a TEAE flag, an investigator-recorded seriousness flag and seriousness criterion, a recorded relationship/causality, and an expectedness flag. The planted high-severity constellations (e.g.
CP101-014's related Grade-3 hepatobiliary cluster) are set explicitly; the rest are sampled, skewed toward Grade 1–2. - Disposition, feeds, deviations. Each participant has an enrollment day, a disposition status and recorded reason (C1–C2 completed;
CP101-014andCP101-013discontinued for AE). Two screen-failures and a short protocol-deviation log use controlled vocabularies. Five pipeline feeds (adam.adlb, adam.adeg, adam.adae, safe.sae, ixrs.rand) carry an age in hours and an SLA —ixrs.randis deliberately stale.
How the series are built — and the hard backward-compat invariant
Each per-visit series is constructed by interpolating from a baseline toward a single extreme, with the peak placed at a chosen visit and the remaining points filled either monotonically (for a clean rise) or with seeded scatter (for a noisier course). The extreme value handed to the series builder is exactly the participant's original summary value. This produces the non-negotiable invariant that governs the entire longitudinal layer:
CP101-014's trajectory is 5.6× because the summary ALT was 5.6×; the highest QTcF in CP101-018's trace is 503 ms because the summary QTcF was 503 ms; the Hgb nadir equals the summary Hgb. Nothing in a trajectory can exceed, undershoot, or otherwise disagree with the headline value.Why this matters. The signature plots a medical monitor reasons from — the eDISH scatter on Hepatic, the QTcF census on Cardiac, the AE matrix on AE & DLT — are anchored to the summary values. By forcing every new per-visit panel to peak at exactly that summary value, the longitudinal layer can add the "when did it start" story without ever introducing a contradiction. A history trail can show you the path a participant took to the eDISH corner, but the corner is in the same place it has always been. After the event-level AEs are assigned, the count rollups (nae, sae, g3) are re-derived from the events themselves, so the AE incidence panels and the worklist stay exact too. This is the same property a real validated pipeline must hold: a richer view of the data is only trustworthy if it cannot silently change the numbers a reviewer already acted on.
Thresholds, SLAs, and windows are illustrative
The numeric cut-points wired into this dashboard are reasonable, conventional, and illustrative — they are not the live limits of any specific study. The eDISH AND-gate is set at (ALT or AST >3×ULN) AND (TBili >2×ULN); QTcF tiers at >450 (watch) / >480 (AMBER) / >500 (RED) and ΔQTcF at >30 / >60 ms; the R-ratio bands at ≥5 hepatocellular / 2–5 mixed / ≤2 cholestatic with an "unstable near ULN" guard when ALT or ALP sits below 1.2×; CTCAE-style screening bands come from a single analyte-metadata table (with Hgb capped at the Grade-3 band on purpose); the DLT window is a single fixed 28-day first-cycle window; visit windows are ±1 / ±3 days; and feed SLAs are 6–24 hours. In a live deployment, every one of these reads from the protocol and the SAP — the central-lab ULN of record, the protocol-defined DLT window and evaluability rules, the pre-specified QTc correction and outlier categories, the SAP's CTCAE version, the per-visit windows in the schedule of assessments, and the data-management SLAs. The dashboard's job is to apply the study's rules deterministically and make the result visible; the rules are not the dashboard's to invent.
Overview — the day-one triage screen
The Overview is the first screen you land on and, on a quiet morning, often the only one you need. It answers a single question for the covering biostatistician or medical monitor: where, if anywhere, does a human need to look today? Four panels do that job — a KPI tile strip that rolls the whole study into seven numbers, an attention worklist that lists every open action-tier screening flag in priority order, a first-class data-freshness / SLA panel that watches the pipeline itself, and a study heatmap that shows participant × visit so you can see when a signal started. Everything here is a roll-up of the same deterministic screening flags you see in the domain sections; nothing on this page is computed independently, so nothing here can quietly disagree with the detail below it.
The Overview is a derived view, never a new source. Every tile, worklist row, and heatmap cell traces back to a per-visit deterministic flag that already exists in Hepatic, Cardiac, Labs & Vitals, AE & DLT, or the freshness feed list. The single combining operator is worst() — a pure max over a fixed severity rank (GREEN/watch/baseline-watch = 0 · AMBER = 1 · RED = 2). Because the page only ever takes the worst of values that already exist, the headline can never be greener than the worst panel underneath it. This is the structural guarantee that makes a one-glance summary safe to trust.
worst() over flags that already exist, so the summary can never disagree with the detail.The KPI tile strip
Seven tiles sit across the top of the screen. Each is a pure aggregation — a count or a worst() roll-up — with a tiny caption that names the regulatory or operational concept it stands for. Read left to right, they take you from how much trial there is to what is on fire to is the data even current.
| Tile | What it rolls up | Colour / jump |
|---|---|---|
| Enrolled | Count of enrolled participants (22), with completed and discontinued sub-counts beneath. The denominator for everything else. | Neutral |
| Open RED flags | Count of RED rows currently in the attention worklist — eDISH AND-gate REDs, QTcF >500/Δ>60 REDs, recorded serious AEs, a ≥2-DLT cohort, and the stale-feed RED. | RED if >0 · jumps to Overview worklist |
| Open AMBER | Count of AMBER worklist rows — QTcF >480/Δ>30 and a 1-DLT cohort. The same-day-review tier. | AMBER if >0 · jumps to worklist |
| Serious AEs | Count of participants with an investigator-recorded serious AE. Seriousness is displayed, never derived here. | RED if >0 · jumps to AE & DLT |
| Adjudicated DLT | Count of participants carrying an SRC-adjudicated DLT flag. A displayed adjudication, not a dashboard determination. | AMBER if >0 · jumps to AE & DLT |
| Enrollment | Enrolled / planned as a percentage (22 of planned). Operational progress, not safety. | Neutral · jumps to Disposition |
| Data feeds | OK if every feed is fresh, else STALE. In the seeded snapshot one feed is stale, so this reads STALE and forces study status to RED. | RED if any stale · jumps to freshness panel |
Why the tiles can never lie about being green. The RED and AMBER counts are literally WL.filter(...) over the very same worklist array rendered just below; the Serious-AE and DLT counts are the same flags the AE&DLT section reads; the feed tile is the same boolean the freshness panel uses. There is no second computation path that could drift. If a tile says 3 open RED, there are exactly three RED rows you can click through to evidence. This is the practical payoff of the worst()-only design: the summary and the detail are the same numbers wearing different clothes.
The five tiles that carry a meaning (RED, AMBER, SAE, DLT, feeds) are clickable and jump straight to the relevant section; Enrolled and Enrollment are read-only context. A study-status pill in the header band carries the overall worst() of the hepatic, cardiac, DLT, and freshness rails — in the seeded snapshot that pill is RED, driven by the eDISH/DLT REDs and the stale feed.
The attention worklist
This is the heart of the screen: every open AMBER or RED screening flag across all checks, sorted highest-severity first, each row click-to-open into its evidence packet. It is the queue a covering biostatistician works top-down on a Monday morning. A RED row means look today and route to the medical monitor; an AMBER row means same-day review. Each row names the participant (or cohort), the check that fired, the offending values, and — crucially — the literal threshold rule that produced it, so the reader can audit the flag without leaving the row.
The checks that can land a row here are deliberately finite and deterministic:
- eDISH / Hy’s-Law screen (RED) — the AND-gate: ALT or AST >3×ULN and total bilirubin >2×ULN, with the R-ratio and pattern shown inline. In the seeded data
CP101-014sits here. - QTcF / ICH E14 screen (RED >500 ms or Δ>60 ms; AMBER >480 or Δ>30) —
CP101-018(503 ms) is RED,CP101-006(486 ms) is AMBER. - Serious AE recorded (RED) — reflects investigator-recorded seriousness, listing the preferred terms; never computed from severity.
- Adjudicated DLT count vs 3+3 (RED at ≥2, AMBER at 1) — a cohort-level row. The C4 cohort (2/6) lands a RED here; this row reports that the count satisfies a trigger, it does not escalate, expand, or declare MTD.
- Stale feed (RED) — the green-on-stale escalation, described in the next panel.
A worklist row is a screening prompt for a human — never a determination, diagnosis, adjudication, or reportable number. The eDISH row says “potential Hy’s-Law quadrant / AND-gate position pending confirmation” — it is not a Hy’s-Law case, and the rule text on the row says exactly which inequality fired. Confirmation requires a repeat draw, R-ratio / ALP cholestasis exclusion, and ruling out viral, biliary, alcohol, concomitant-drug, and underlying causes before Hy’s-Law logic is even entertained. The medical monitor, SRC, and pharmacovigilance decide; the worklist only points. See Governance for the full approved-language and decision-authority model.
Why the worklist is action-tier only — and why the silence is the point
The worklist contains only AMBER and RED. The watch tier is excluded by design, and so are the participants who never cross any single action threshold. This is not an oversight; it is the teaching signal. Three planted cases demonstrate it — see Teaching Signals for the full roster:
CP101-009— the AND-gate near-miss. ALT runs to 4.2× but bilirubin stays at 1.6× (<2×), so the AND-gate is correctly never satisfied: GREEN on eDISH at every visit (the Temple’s-Corollary region, ALT without bilirubin). It carries a real, non-serious Grade-2 “ALT increased” AE — and it is intentionally silent here. A monitor who wants to see it goes to Hepatic; the triage queue is not the place for a flag that did not fire.CP101-011— the multivariate-only case. Every univariate value sits just below its own action threshold at every visit: QTcF 474 ms iswatch, not AMBER; ALT 2.6× is below 3×; Hgb and ANC are sub-Grade-2. The deterministic backbone correctly never fires, so it is absent from this list. Recognising whether such coordinated, sub-threshold drift is worth a closer human look is a matter for the reviewer’s judgement, not an automated flag. Its absence from the worklist is honest, not a miss.- Operational-only participants —
CP101-003(a missed C2D1 visit) andCP101-020(a protocol dose change with several sub-threshold lab shifts) are data-completeness / operational events, not clinical action items, so they live in Disposition, not here.
When the worklist is empty, that is information — not reassurance. The empty state literally says so: “No open AMBER/RED screening flags. Watch-tier QTcF and the multivariate-only / operational participants are intentionally NOT here — that silence is the point: the backbone fires only on a crossed action threshold.” A deterministic, threshold-based backbone is excellent at catching a value that crosses a pre-specified line and is, by construction, blind to a slow multi-system co-drift that never crosses any single line. The worklist tells you what the backbone caught; it cannot tell you the participant is well. That gap between “nothing crossed a line” and “the participant is well” is exactly why CP101-011 is here — to make the limit of threshold-based screening visible, and to remind the reviewer that a clean worklist is not a clean bill of health.
The data-freshness / SLA panel
This panel is the dashboard’s answer to a failure mode that is easy to overlook: a screen that is perfectly green because it is reading yesterday’s data. It is a first-class safety panel, not a footnote. It lists each upstream feed with its current age, its SLA, a ten-segment load-tick history (a quick read of recent on-time loads, with the most recent ticks greyed when a feed has gone stale), and a state chip. The five feeds in the seeded snapshot are the ADaM lab feed (adam.adlb, SLA 6 h), ADaM ECG (adam.adeg, 12 h), ADaM AE (adam.adae, 24 h), the serious-AE safety feed (safe.sae, 6 h), and the IxRS randomization feed (ixrs.rand, 24 h) — the last of which is stale at 38 h in the snapshot.
The green-on-stale-data rule. Any panel that would render GREEN while sitting on a STALE feed is forced to RED, and a dedicated RED row is pushed into the attention worklist (“Stale feed — green-on-stale → RED”). A green built on stale data is the single most dangerous state on the screen, because it invites a false “all clear.” The header band, the Data-feeds tile, the freshness panel, and the worklist all reflect the same boolean — there is exactly one stale feed in the snapshot, and it escalates the entire study status to RED even though the clinical rails would otherwise allow a lower colour.
Pipeline freshness is not data-content QC
These are two different guarantees and the panel keeps them strictly apart. Freshness answers “how recently did this feed load, and is that within SLA?” — a pipeline / load-recency property. Content QC answers “is what loaded structurally valid and conformant?” — the job of validated tooling such as Pinnacle 21, not this dashboard. A feed can be perfectly fresh and full of conformance findings, or perfectly clean but eight hours past SLA. The dashboard owns only the freshness half; it never claims to have validated content, and it never substitutes for the validated QC pipeline.
How to read it in practice. Scan the State column first. A FRESH chip with full green load-ticks means the rail beneath it can be trusted to be current. A STALE → RED chip means: do not act on that domain’s green — chase the load before you conclude anything. The age-vs-SLA columns tell you how overdue, and the load-tick strip tells you whether this is a one-off late load or a feed that has been drifting. Thresholds and SLAs shown are illustrative placeholders in the synthetic build; the live version reads them from the protocol / SAP and the ops runbook.
The study heatmap
The worklist tells you who is flagged now; the heatmap tells you when it started. It is a participant × visit grid — one row per participant, one column per nominal visit (Screen, C1D1, C1D8, C1D15, C2D1, C2D8, C3D1, EOT) — where each cell shows the worst deterministic clinical screening severity at that visit. The severity per cell is a worst() over the hepatic AND-gate position and the cardiac ICH E14 QTcF tier at that visit, so the heatmap is the temporal, per-visit view of the same flags the domain sections render.
| Cell | Meaning | How it renders |
|---|---|---|
R | RED — an action-tier screening flag at this visit (e.g. the AND-gate fired, or QTcF crossed the E14 RED line) | RED fill |
A | AMBER — same-day-review tier | AMBER fill |
w | watch — below the action threshold; context only, not in the worklist | steel fill |
b | baseline-watch — already in the watch band at baseline; ringed to mark it as pre-existing, not a drug effect | ringed cell |
| hatched / · | missed or absent visit — an operational data-completeness gap | hatched, never read as “fine” |
Reading across a row reconstructs a participant’s on-study trajectory at a glance. CP101-014 shows the canonical hepatic story: green early visits, then a cell that turns RED when the AND-gate fires (with bilirubin lagging ALT by a visit, exactly as the planted signal specifies). CP101-018 shows a b at Screen (QTcF 462 already in the watch band — ringed, so the reader knows it is baseline, not the drug) and an R at the on-treatment visit where QTcF reaches 503 ms. The distinction between b and a true on-treatment R is the difference between a pre-existing condition and a signal worth chasing — the heatmap encodes it so a monitor does not misattribute a baseline finding to the compound.
A hatched (missed) cell is never benign. A missed visit can mean missed safety labs, which means the screen has nothing to evaluate at that timepoint — that is a gap to route to a human, not an implicit “no finding.” The heatmap renders it as a visibly distinct hatched cell precisely so it cannot be mistaken for a green. CP101-003’s missed C2D1 appears here as a hatch and in the deviation log in Disposition; the two views agree because they read the same visit-presence flag.
Every cell and participant label is click-through: clicking opens the participant’s evidence packet (deterministic flags first, then per-visit sparkline trajectories, then provenance) in the Participants view, so the heatmap is also a navigation surface, not just a picture.
The backward-compatibility invariant, made visible here. The heatmap and trajectory views are per-visit, but they cannot contradict the headline plots, because the build enforces a hard rule: every per-visit series’ worst on-treatment value equals the original summary value (seed 20260611, mulberry32, reproducible). So the visit where a participant’s heatmap row turns RED is the same visit whose value drives that participant’s point on the eDISH scatter or the QTcF census. The Overview never tells a different story than the section it summarizes — it just tells the same story sooner, and shows you when it began.
A closing reminder that applies to this whole screen: every number on the Overview is a screening roll-up on synthetic, illustrative data — a prompt for a human, never a reportable number. Incidence tables, the ICH E14 categorical table, central-read intervals, MTD, and final disposition come only from validated tools (Phoenix WinNonlin, Pinnacle 21, the validated SDTM/ADaM pipeline). The Overview’s job is to make the validated backbone visible and to get the right human looking at the right row first.
Hepatic / DILI
The hepatic section is the clinical heart of the TRIALMON dashboard, and it is the one place where a single, deceptively simple two-axis picture — peak ALT against peak total bilirubin — carries more regulatory weight than any other view in early-phase safety monitoring. This is the home of the eDISH plot, the Hy’s-Law screening logic, the per-visit history trails, the LFT trajectories, the R-ratio pattern strip, and the peak/baseline/trend table. Everything here is a screening prompt for a human: the dashboard draws the position, fires the AND-gate, and stops. The medical monitor, pharmacovigilance, and the SRC decide what it means.
The eDISH construct — what the scatter actually is
eDISH (evaluation of Drug-Induced Serious Hepatotoxicity), the diagnostic-plot convention popularized by Watkins and Senior and now embedded in FDA premarketing DILI thinking, plots two peak on-treatment values per participant: peak ALT (or AST) in multiples of ULN on the x-axis against peak total bilirubin in multiples of ULN on the y-axis. The dashboard renders the classic version: a log-scaled x-axis (because aminotransferase elevations span orders of magnitude and a linear axis would crush the informative low range), a linear-ish bilirubin axis, and two reference lines — a vertical line at ALT 3×ULN and a horizontal line at TBili 2×ULN. Those two lines carve the plane into four quadrants.
| Quadrant | Position | Screening meaning on this dashboard |
|---|---|---|
| Lower-left | ALT <3×, TBili <2× | Normal range / no aminotransferase or bilirubin signal. Most participants live here. |
| Lower-right | ALT ≥3×, TBili <2× | Hepatocellular injury without hyperbilirubinemia — Temple’s Corollary region. ALT moves, bilirubin does not. This is where CP101-009 correctly stays GREEN. |
| Upper-left | ALT <3×, TBili ≥2× | Isolated hyperbilirubinemia — think Gilbert’s, hemolysis, or cholestasis. Not a hepatocellular Hy’s-Law pattern; route to a human for a different differential. |
| Upper-right | ALT ≥3× and TBili ≥2× | The potential Hy’s-Law quadrant. The AND-gate fires here. This is a screening position pending confirmation — never a case. |
CP101-014 rises into the upper-right and fires RED, while CP101-009 — the same high ALT but bilirubin under 2× — stays correctly GREEN in the benign Temple's-Corollary region.The Hy’s-Law AND-gate as a screening position
The deterministic rule the %tm_chk_hyslaw backbone implements, and that this dashboard makes visible, is:
(ALT > 3×ULN OR AST > 3×ULN) AND (TBili > 2×ULN) → eDISH AND-gate position
with the additional epidemiological qualifier that a genuine Hy’s pattern also requires ALP not markedly elevated (to exclude a cholestatic explanation for the bilirubin) — which is why the R-ratio strip below sits immediately adjacent. The dashboard evaluates this per visit on the longitudinal data, so it can tell you not just that a participant is in the quadrant but at which visit they crossed in. When the gate fires, the cell, the eDISH point, and the worklist row turn RED, and a one-page evidence packet is what a covering biostatistician would receive.
Per-visit HISTORY TRAILS — a record, not a prediction
The signature enhancement over a static eDISH dot is the history trail: for each participant, the dashboard connects their per-visit (ALT, TBili) positions in visit order, so you see the path a participant took through the plane to arrive at their peak. CP101-014 does not simply appear in the upper-right quadrant — you watch it travel: ALT climbs first, the point drifts rightward along the floor of the plot, and then, a visit later, bilirubin lifts it up into the quadrant. That visual lag is itself clinically informative and is the planted teaching signal (see Planted signals).
The reason for that discipline is not pedantry. The moment a monitoring tool says “rising” or “heading into the quadrant,” it has made a clinical prediction, and a screening tool that predicts invites the reader to act on the prediction rather than on confirmed values. Liver enzymes plateau, recover, and reverse for reasons the dashboard cannot see. So the trail draws the dots and the connecting segments and lets the human read the shape.
LFT TRAJECTORIES — the question the static dot cannot answer
A single eDISH point answers “how high did this participant get?” It cannot answer “and then what?” The per-visit LFT trajectory small-multiples — ALT, AST, total bilirubin, ALP, and GGT each plotted against visit — answer the second question, which for DILI is often the more important one. The shape of the curve distinguishes three situations the peak value alone conflates:
- Rising — the value is still climbing at the last observation. This is the configuration that most urgently warrants confirmatory repeat testing and closer monitoring, because the peak in the eDISH plot may not yet be the true peak.
- Plateaued — elevated but stable across recent visits. Adaptation versus ongoing injury is a clinical judgment, but a flat high plateau reads very differently from a still-rising curve.
- Recovering — declining from a prior peak. This is the visual substrate of what a clinician would weigh in a de-challenge assessment — but the dashboard shows the decline; it does not assert de-challenge (see the trend caveat below).
The FDA premarketing DILI guidance frames LFT monitoring in escalating tiers — a routine schedule of ALT/AST/TBili/ALP, with intensified, more frequent retesting and a defined work-up once thresholds (commonly 3×, 5×, 8×ULN with concurrent bilirubin or symptoms) are crossed, and pre-specified discontinuation criteria. The trajectory panels are the dashboard’s visual analogue of that tiered thinking: they make it obvious which participants have entered the “retest more often and start excluding alternatives” tier, without the dashboard presuming to declare the tier or trigger the protocol action itself.
The R-RATIO pattern strip
The R-ratio (sometimes the “R value”) is the CIOMS/Aithal-convention discriminator for the pattern of liver injury, computed as the ratio of the aminotransferase elevation to the alkaline-phosphatase elevation, each expressed over its own ULN:
R = (ALT / ULNALT) ÷ (ALP / ULNALP)
| R value | Pattern | Interpretation |
|---|---|---|
| R ≥ 5 | Hepatocellular | Aminotransferase-dominant injury — the pattern most relevant to Hy’s-Law reasoning. |
| 2 < R < 5 | Mixed | Both aminotransferase and cholestatic features present. |
| R ≤ 2 | Cholestatic | ALP-dominant — raises bilirubin by a cholestatic/obstructive mechanism, which is the differential that can mimic, and must be excluded from, a Hy’s pattern. |
CP101-014 still fires the eDISH AND-gate RED (ALT 5.6×, TBili 3.1×), and the R-ratio is a pattern descriptor that informs the differential — it is not a gate and it does not override the AND-gate. The R-ratio tells the medical monitor what kind of work-up to prioritize; it does not lower the priority. The screening RED stands on the AND-gate alone.Temple’s Corollary — ALT without bilirubin
Temple’s Corollary to Hy’s Law is the observation that aminotransferase elevations without accompanying hyperbilirubinemia — even substantial, frequent ALT elevations — do not carry the same grave prognosis, because the liver frequently adapts. This is the principled basis for the AND-gate being an AND: an ALT signal in the lower-right quadrant is real and worth watching, but it is a different (and far less ominous) thing than the upper-right conjunction.
CP101-009 is correctly GREEN at every visit. CP101-009 reaches ALT 4.2×ULN — clearly above the 3× vertical line — but its total bilirubin never reaches 2× (it tops out at 1.6×). On the eDISH plane it lives in the lower-right Temple’s-Corollary quadrant at every visit, so the AND-gate never fires and the participant is intentionally silent in the attention worklist. That silence is a feature: it demonstrates that a high ALT alone, correctly, does not generate a Hy’s-Law screening RED. CP101-009 still carries a recorded non-serious Grade-2 “ALT increased” AE, which the monitor sees in the participant record — but it is not a quadrant flag.The centerpiece contrast: 014 versus 009
Read side by side, these two participants are the entire teaching argument of the section:
CP101-014 | CP101-009 | |
|---|---|---|
| Peak ALT | 5.6×ULN | 4.2×ULN |
| Peak TBili | 3.1×ULN (lags ALT by one visit) | 1.6×ULN (never reaches 2×) |
| eDISH quadrant | Upper-right — potential Hy’s-Law quadrant | Lower-right — Temple’s Corollary |
| AND-gate | Fires RED at the crossing visit | Correctly GREEN every visit |
| R-ratio | ≈4.0, MIXED (does not reassure) | Hepatocellular pattern; still GREEN on the gate |
| Recorded events (displayed, not derived) | Adjudicated DLT; serious related hepatobiliary AEs; discontinued (AE) | Non-serious Grade-2 “ALT increased” AE |
| Worklist | Highest-severity open RED | Intentionally silent |
The lesson is that the same x-axis height (both above 3×) produces opposite screening outcomes solely because of the y-axis. 014 rises into the quadrant; the bilirubin lag means its history trail visibly travels right-then-up across visits. 009 has a higher-than-threshold ALT but a bilirubin that never crosses the line, so it stays in the benign Temple region. A dashboard that flagged on ALT alone would over-alert on 009 and bury the genuinely serious 014; the AND-gate is what keeps the signal clean.
The peak / baseline / time-to-peak / trend table
Beneath the graphics sits a per-participant table giving, for each LFT analyte, the baseline value, the worst on-treatment peak (in ×ULN), the time-to-peak (which visit), and a trend tag (the observed shape of the recent curve — rising / plateaued / recovering). Baseline matters because a value that was already elevated at screening is a different finding from one that climbed on treatment; time-to-peak matters because onset relative to first dose is part of how a monitor reasons about drug-relatedness; and the trend tag is the compact version of the trajectory shape.
Grounding references woven through this section: FDA Guidance for Industry: Drug-Induced Liver Injury — Premarketing Clinical Evaluation (LFT monitoring tiers and discontinuation thresholds); Hy’s Law and the eDISH diagnostic plot (Zimmerman; Watkins; Senior); and the R-ratio injury-pattern convention (CIOMS; Aithal et al.). Data shown is synthetic, seeded, and illustrative — no PHI, no real participants. See Governance for the full rule set and Planted signals for the design rationale behind 014, 009, and the other honest-by-design cases.
Cardiac / ECG
The cardiac section answers one deterministic question per participant per visit: where does this QTcF value sit relative to the pre-specified ICH E14 screening bands, and did the crossing happen on treatment? It is built around the per-visit QTcF trajectory with a cohort-median band, a categorical outlier census, and a strict separation between a screening prompt and the validated cardiac analysis. Nothing here is a central read, nothing here is a concentration–QTc estimate, and nothing here declares a cardiac safety signal. Those are the cardiologist’s and the validated analysis’s to make.
Why QTcF (Fridericia) is the pre-specified correction
The raw QT interval shortens as heart rate rises, so a rate correction is mandatory before any threshold has meaning. The two historically common corrections behave very differently at the heart rates you actually see in an early-phase healthy-volunteer or patient cohort:
- Bazett (QTcB = QT/√RR) over-corrects at high heart rate and under-corrects at low heart rate. In a stimulated or anxious Phase 1 participant sitting at 90–100 bpm, Bazett can manufacture an apparent QTc prolongation that is purely an artifact of the correction formula — a false positive that wastes a monitor’s attention and can spuriously trip a stopping discussion.
- Fridericia (QTcF = QT/RR1/3) is far flatter across the physiologic heart-rate range and is the pre-specified primary correction for CP-101. Because it is the protocol-specified correction, it is the only correction the deterministic backbone bands against. QTcB may exist in the source ECG record, but it is not what the screening logic reads.
The ICH E14 tier thresholds the backbone screens against
The deterministic logic uses the standard ICH E14 categorical thresholds — both the absolute QTcF value and the change-from-baseline (ΔQTcF). Two participants with the same absolute value can carry very different meaning depending on where they started, which is why E14 has always treated absolute and delta as complementary, not redundant.
| Screening tier | Absolute QTcF | ΔQTcF (change from own baseline) | What the tile is telling a human |
|---|---|---|---|
| (below watch) | ≤450 ms | ≤30 ms | No screening prompt. Silence is correct. |
| WATCH | >450 ms | — | Worth a glance; NOT a worklist item on its own. Often a baseline characteristic. |
| AMBER | >480 ms | >30 ms | Open prompt — route to the medical monitor. |
| RED | >500 ms | >60 ms | Highest-severity prompt — the value that gets a person on the phone. |
The 500 ms and Δ60 ms lines are the classic E14 “values of particular concern” markers; 480 ms and Δ30 ms are the intermediate categorical bins E14 asks sponsors to tabulate. The backbone takes the worse of the absolute-band and the delta-band when it assigns a per-visit tier, so a participant who is only at 470 ms absolute — which on its own is just the watch band — but who has jumped >60 ms from a low baseline still surfaces, on the delta arm.
The per-visit QTcF trajectory and the cohort-median band
The trajectory panel plots each participant’s QTcF across the eight nominal visits (Screen → C1D1 → C1D8 → C1D15 → C2D1 → C2D8 → C3D1 → EOT), overlaid on a shaded cohort-median band. This is the panel that lets you distinguish the two patterns that matter most for drug-relatedness reasoning:
- A transient spike — one visit pokes above a threshold and the next returns to baseline. Often an isolated tracing, a transcription quirk, a transient autonomic event, or a single bad lead placement. It still gets a prompt, but the shape argues for “confirm before you worry.”
- A sustained rise — the participant separates from the cohort median and stays separated, especially as dose escalates. This is the shape that genuinely concerns a cardiologist, because it tracks with exposure rather than with measurement noise.
The cohort-median band matters because an individual value is only interpretable against its peers at the same dose and visit. A participant sitting at the top of a band that has itself drifted upward cohort-wide reads very differently from a lone participant pulling away from a flat cohort. The band is a deterministic median of the cohort’s per-visit values — it is descriptive context, not a model and not a prediction.
Baseline-watch — the crossing must be on treatment
This is the single most important interpretive rule in the cardiac section, and it is why the trajectory and the census both render baseline-watch points distinctly (a separate marker style, not a flag color). A participant who is already above 450 ms at the Screen/baseline visit cannot have that value attributed to the study drug — the drug had not been given yet. A pre-existing prolonged QTc is a participant characteristic, possibly an enrollment consideration, but it is categorically NOT a treatment-emergent cardiac signal.
| Participant | Baseline QTcF | On-treatment peak | Screening tier | Why it reads this way |
|---|---|---|---|---|
CP101-018 | 462 ms (watch at baseline) | 503 ms | RED | Started in watch-band, but the >500 ms crossing is on treatment — that delta is the prompt, not the absolute alone. |
CP101-006 | 453 ms (watch at baseline) | 486 ms | AMBER | Already >450 at baseline (watch, not drug effect); the on-treatment rise into the 480s is what opens the AMBER prompt. |
For both participants the baseline value is shown as a watch-marker so that whoever opens the prompt immediately sees the starting point. The deterministic logic does not subtract the baseline silently and hide it — it shows both the absolute band and the on-treatment delta, so a human can see that, for example, CP101-018’s 503 ms is a real on-treatment crossing rather than a participant who merely walked in already prolonged. Contrast this with a hypothetical participant sitting at 455 ms at every visit including baseline: that is flat watch-band with no on-treatment movement, and the correct behavior is a quiet watch marker and no worklist entry.
The categorical outlier census
The census is a compact count panel: by cohort, how many participants ever cross QTcF >450 / >480 / >500 ms, and how many ever show ΔQTcF >30 / >60 ms. It mirrors the shape of the regulated E14 categorical outlier table on purpose — that familiarity is what makes it useful at a glance — and that is precisely why it carries the loudest disclaimer on the page.
Read positively, the census earns its place: it lets a monitor see in one tile whether QTcF crossings are concentrating in the high-dose cohorts (a dose-related pattern worth a human look) or scattered as one-off baseline-watch artifacts (reassuring). It is a where-to-look tool, the cardiac analogue of the Overview attention worklist. Like every count panel in this dashboard, small-N cohorts (N=3–6) make every count statistically unstable — one participant is 17–33% of a cohort — so the census is read as “does this deserve eyes,” never as a rate.
What the cardiac section deliberately does NOT do
- It does not compute or display concentration–QTc (C-QTc). Exposure-response is the heart of a modern E14 / E14 Q&A thorough-QT strategy and it requires paired PK and the validated analysis — see Validated & Production Tools.
- It does not produce central-read intervals or adjudicate borderline tracings. The on-screen QTcF is a screening value, not a cardiologist over-read.
- It does not declare a cardiac safety signal, a stopping decision, or an exposure threshold. Those belong to the medical monitor and the SRC — the same governance that runs through every section (Governance & Rules).
- The reasoning that several sub-threshold drifts co-occur — e.g.
CP101-011, whose QTcF sits at 474 ms (WATCH, not AMBER) while its other domains also stay sub-threshold — is a multi-system gestalt that no single univariate rule encodes. The deterministic backbone correctly stays silent onCP101-011in this section, and that silence is intentional; weighing such a pattern is the human reviewer’s call. See Planted Signals.
Grounding: ICH E14 (Clinical Evaluation of QT/QTc Interval Prolongation and Proarrhythmic Potential) and the ICH E14 Q&A documents define the categorical outlier framework (absolute & change thresholds), the “values of particular concern” (>500 ms, Δ>60 ms), and the modern concentration–QTc exposure-response approach. Those documents define what a validated cardiac analysis must do; this dashboard is the screening prompt that precedes it.
Labs & Vitals
The labs & vitals section is where the dashboard is most easily misread, because it borrows the vocabulary of CTCAE grading and renal function without producing any of the regulated artifacts those words usually imply. Read it correctly and it is a fast, honest “what shifted, and when” view across hematology, hepatic-adjacent chemistry, renal function, and vital signs. Read it carelessly and a deterministic screening band on a single synthetic value gets mistaken for an adjudicated adverse-event grade. This section exists to make that mistake impossible.
The lab-shift grid
The centerpiece is a baseline→worst lab-shift grid: for each analyte and participant, the band of the baseline value alongside the band of the worst on-treatment value, so the movement is visible, not just the endpoint. A participant who walks in at Grade-1 and worsens to Grade-3 is a very different story from one who was Grade-2 at baseline and stayed there — the shift grid makes that contrast the primary visual, exactly as a shift table does in a CSR, but as a screening prompt rather than a reportable table.
The grid uses CTCAE-style bands as the binning vocabulary because that vocabulary is what a medical monitor already thinks in. But three deliberate constraints keep it honest:
- The band is computed from a single value — the worst on-treatment observation — not from a clinical course. CTCAE grading in real life often depends on clinical consequences (transfusion, intervention, life-threatening status) that a lone number cannot capture.
- The grid is a screening prompt, deduplicated against, never merged into, the AE record. See the dedup note below.
- One analyte is capped on purpose — hemoglobin — for a reason that is itself a teaching point.
Hematology trajectories — shape is the signal
For hemoglobin and ANC the section adds per-visit trajectory panels, because with cytopenias the shape of the curve carries more information than any single worst value:
- Dip-and-recover — a nadir at one visit that rebounds by the next. Often a transient, self-limited effect; the worst value still bands and prompts, but the recovery is reassuring context a single number would hide.
- Progressive decline — each visit lower than the last, no recovery. This is the shape that concerns a monitor: it can signal cumulative marrow suppression or ongoing hemolysis and it tends to track with continued or escalating dosing.
Two participants can share an identical “worst Hgb” band and need completely different responses — one is recovering, one is still falling. The lab-shift grid alone would flatten that distinction; the trajectory restores it. The same logic applies to ANC for neutropenia. As always, the trajectory is a record of where the participant has been, not a forecast of where they are going.
The renal panel
The renal panel deliberately leads with creatinine fold-rise over the participant’s OWN baseline rather than with an absolute creatinine or a single reference range. This is the most clinically important design choice in the section:
Alongside the fold-rise the panel shows an eGFR estimate using CKD-EPI 2021 (race-free). Two firm caveats travel with it:
- It is an ESTIMATE and a screening context value — never a reported renal endpoint. The race-free 2021 equation is the current standard for estimation, but eGFR is an approximation of GFR, not a measurement of it, and it is least reliable exactly where creatinine is changing fastest (non–steady-state AKI).
- Any renal value that appears in a regulated document — a CSR renal narrative, a safety table, a DSMB renal summary — comes from the validated pipeline, not from this estimate. See Validated & Production Tools.
Vitals & orthostatic PCS — operational context, never a tier
The vitals board shows blood pressure, heart rate, and an orthostatic / potentially-clinically-significant (PCS) view — supine-to-standing changes that flag possible orthostatic hypotension. This board is deliberately the only domain in the section that does not assign a severity tier.
This mirrors the discipline used elsewhere: operational and contextual information is shown distinctly from clinical screening tiers, the same way missed visits are operational on the Overview heatmap and the way Disposition separates RBQM operational KRIs from clinical flags. CP101-020 — the protocol dose change where several labs shift at once but each stays sub-threshold — is a good case to read here: the vitals and lab context together explain a coordinated, operationally-driven drift that no single band would (or should) escalate.
The lab grid and the AE panel are independent sources — deduplicate them
This independence is a feature, not a redundancy. The lab grid catches abnormalities that may not yet be entered as AEs (the value is in the data before anyone has assessed it); the AE record carries the clinical assessment, attribution, and seriousness that the lab value alone never has. Reading them against each other — band here, recorded AE there, or a gap between them — is one of the highest-yield reconciliation tasks in safety review, and it is exactly the workflow this layout is meant to provoke.
What this section does NOT produce
- No adjudicated CTCAE grades — only deterministic value-bands using CTCAE-style cutoffs as vocabulary.
- No reportable lab abnormality counts or shift tables — those are validated-pipeline deliverables.
- No reported renal endpoints — the eGFR is a CKD-EPI-2021 estimate for screening context only.
- No severity tier on vitals — vitals are operational context by design.
- No seriousness or causality — those are investigator/SRC-recorded assessments the dashboard would only ever display, never derive (see Governance & Rules).
Grounding: CTCAE provides the grading vocabulary the bands borrow (and the Grade-4 anemia definition that justifies the Hgb cap); KDIGO provides the fold-rise-over-baseline logic for early AKI; CKD-EPI 2021 is the current race-free eGFR estimating equation. All three describe what a validated lab-safety analysis must do — this dashboard is the screening prompt that points a human toward it, on synthetic data, with no PHI and no reportable output.
AE & DLT
This section is where adverse events, dose-limiting toxicities, and the 3+3 escalation rhythm of CP-101 are made visible. It carries three panels — an AE incidence matrix (SOC × CTCAE grade), a 3+3 escalation state ladder, and an AE onset/duration swimlane — and it is the part of the dashboard most likely to be mistaken for a decision engine. It is not one. Every panel here displays recorded or auditable values and computes which 3+3 branch a DLT count satisfies; it never escalates, expands, de-escalates, or declares an MTD. The Safety Review Committee does that.
What this section derives versus what it only displays
Keeping this boundary crisp is the difference between a teaching dashboard and an unvalidated clinical decision system. The split is deliberate and narrow.
| Quantity | Origin | Dashboard’s role |
|---|---|---|
| TEAE flag (treatment-emergent: onset on/after first dose) | Deterministic rule on recorded onset date vs first-dose date | Derives by auditable rule |
| 3+3 state label (trigger / decision-pending branch) | Deterministic rule on planned N + adjudicated DLT count | Derives by auditable rule |
| DLT (yes/no, which event) | SRC adjudication against protocol DLT definition | Displays only |
| Causality / relationship to study drug | Investigator-recorded assessment | Displays only |
| Seriousness (ICH E2A criteria) | Investigator/PV-recorded assessment | Displays only |
| CTCAE grade on a reported AE | Investigator-assigned per CTCAE v5 | Displays only |
| Reported AE incidence table, MTD, RP2D | Validated SDTM/ADaM pipeline + SRC | Never produced here |
The AE incidence matrix (SOC × CTCAE grade)
The matrix is a participant-incidence table: each cell counts participants (not events) who experienced at least one AE in that System Organ Class at that worst CTCAE grade. Counting is worst-grade-per-participant-per-SOC — a participant with three Grade-1 headaches and one Grade-3 headache contributes once, to the Grade-3 Nervous-system cell. This mirrors the convention of the validated incidence table without being it.
- Rows are MedDRA-style System Organ Classes (controlled vocabulary only — no verbatim terms, no narrative prose).
- Columns are CTCAE v5 grades 1–5, plus a row/column total.
- Cells are de-duplicated participant counts at worst grade.
Severity and seriousness are different axes — with both counter-examples
This is the single most common confusion in early-phase safety review, so the dashboard keeps the two concepts on visibly separate tracks and plants a counter-example in each direction.
- SEVERITY = CTCAE v5 grade (1 mild → 5 death). It describes intensity.
- SERIOUSNESS = the ICH E2A regulatory criteria: results in death, is life-threatening, requires/prolongs hospitalization, causes persistent or significant disability/incapacity, is a congenital anomaly, or is an other important medical event. It is a regulatory category, recorded by the investigator/PV, not computed.
Counter-example B — serious but not high-grade. A Grade-2 event that nevertheless requires inpatient hospitalization is serious by E2A despite a moderate grade. The dashboard shows the serious flag on a Grade-2 row. Seriousness is not a function of grade.
Because of this, the matrix never lets a grade drive a seriousness count and never lets seriousness inflate a grade. Where seriousness is shown, it is the recorded E2A determination displayed verbatim from the data, never inferred from the grade column. The signature hepatobiliary events on CP101-014 are recorded as serious and related — both attributes are investigator/SRC-recorded and merely surfaced here.
The 3+3 escalation state ladder
The ladder is the centerpiece of this section: one rung per dose cohort, each showing planned N, the number evaluable for DLT, the SRC-adjudicated DLT count, and the 3+3 branch that count satisfies — expressed as a TRIGGER or a decision-pending label.
The classic 3+3 algorithm the ladder mirrors:
- Treat 3 participants at a dose. 0/3 DLTs → the design permits escalation to the next dose (SRC decides).
- 1/3 DLTs → expand that cohort to 6 (SRC decides). Then 1/6 permits escalation; ≥2/6 means the dose has exceeded the maximum tolerated dose.
- ≥2/3 DLTs at first pass → dose exceeded; the SRC typically declares the prior dose the MTD after expanding/confirming it.
Planned N is read from the design — C3 was designed N=6
C3 was designed at N=6; it was not “expanded from 3.” The dashboard must never render C3 as a 1/3 → expansion event. Conflating a designed-larger cohort with an algorithmic expansion would misrepresent the trial’s decision history — exactly the kind of fabricated narrative this dashboard is built to avoid.This matters because an external reader scanning a 3+3 ladder instinctively reads any N=6 cohort as “it must have had a DLT and expanded.” For C3 that inference is wrong: the larger size was pre-specified. CP101-010 contributes 1 DLT in C3, which under the algorithm is the “permits escalation” branch — not an MTD trigger — but again, the SRC decides.
The C4 centerpiece: 2 of 6 → MTD-exceeded TRIGGER
Cohort C4 (120 mg, N=6) carries two adjudicated DLTs — CP101-013 and CP101-014. Two of six satisfies the ≥2/6 branch, which the ladder labels MTD-EXCEEDED TRIGGER — SRC decision pending. This is the loudest thing the ladder will ever say, and it is still only a prompt.
Note the cross-domain coherence: CP101-014 is also the planted Hy’s-Law screening RED (ALT 5.6×, TBili 3.1×, AND-gate position) and is recorded with serious related hepatobiliary AEs, discontinued for AE. The same participant therefore appears as a hepatic screening flag, a serious-AE row in the matrix, a DLT on the C4 rung, and a discontinuation in Disposition. One participant, four faithful views — never four invented stories.
The AE onset/duration swimlane
The swimlane plots each AE as a horizontal bar against study day — onset to resolution (or ongoing) — one lane per participant or per event, with the 28-day DLT window shaded. This is the panel that lets a monitor reason about drug-relatedness through timing.
The swimlane deliberately stays in controlled vocabulary — event term, grade band, serious flag, relationship-as-recorded, onset/resolution study day. There is no case-narrative prose, no free text, nothing identity-narrowing. Timing and recorded attributes only; the human supplies the clinical story.
What this section will not tell you
- It will not give you the reported AE incidence table — that comes from the validated SDTM/ADaM pipeline and Pinnacle 21, never from this matrix. The matrix is a screening census, not the regulatory table.
- It will not declare an MTD or RP2D. The ladder triggers; the SRC declares.
- It will not adjudicate a DLT, assign causality, or set seriousness. It displays those recorded assessments.
- It will not produce a Grade-5/death — structurally absent by design.
See Planted Signals for the full roster of teaching cases (CP101-014, -013, -010, -009, -011, -018, -006), Governance for the derive-vs-display contract in full, and Hepatic for the eDISH/Hy’s-Law screening logic that feeds CP101-014’s DLT story.
Disposition & KRIs
This section is the operational backbone of CP-101 — who screened, who enrolled, who is ongoing, who left and why; the risk-based quality-management (RBQM) signals that say “look here”; and the visit-compliance grid that decides whether a missed window quietly threatens the integrity of a PK or ECG endpoint. Nothing on this page is a safety determination or a reportable number. It is the ICH E6 central-monitoring view: it surfaces operational facts and recorded reasons so a human knows where to direct attention.
The enrollment / disposition funnel
The funnel walks a participant cohort from first contact to current state: screened → screen-failed / enrolled → ongoing / completed / discontinued, with discontinuations broken out by recorded reason. For CP-101 that is 22 enrolled across cohorts C1–C5 plus the screen-failures that never entered.
- Screened — all participants who consented and entered screening.
- Screen-failed — did not meet eligibility; shown with recorded fail reason category (controlled vocabulary, no narrative).
- Enrolled — received study drug; this is the denominator that feeds the 3+3 ladder’s planned-vs-actual view.
- Ongoing / Completed / Discontinued — current state, with discontinuations split by recorded reason (AE, withdrawal of consent, lost to follow-up, protocol-specified criterion, etc.).
CP101-014 appears here as a discontinuation with recorded reason “AE,” coherent with its serious related hepatobiliary events and its C4 DLT in AE & DLT. The same participant, the same fact, displayed in the operational frame — not a second, invented story.
RBQM — KRI tiles
The key-risk-indicator tiles are the ICH E6(R2/R3) central-monitoring layer: a small set of operational metrics, each banded green / amber / red against a pre-specified threshold, that direct a monitor’s attention across participants and (in a real study) sites. Typical CP-101 KRIs include screen-failure rate, AE under-reporting proxies, query rate/aging, overdue data entry, visit out-of-window rate, and protocol-deviation density.
The protocol-deviation log
The deviation log is a controlled-vocabulary list of recorded protocol deviations: participant, category, recorded severity (e.g. minor / major as classified in the operational record), study day, and disposition. It is the granular companion to the deviation-density KRI — the KRI says “a lot of deviations are clustering,” the log says which ones.
- Severity is shown as recorded, not re-graded by the dashboard. A “major” deviation is major because the operational record classifies it so; the dashboard does not adjudicate or re-classify.
- No free-text narrative — category codes and recorded fields only, consistent with the no-PHI, no-prose constraint that runs through the whole tool.
- Dose-change deviations are first-class because they ripple into the safety picture without being safety signals themselves.
CP101-020 carries a recorded dose-change protocol deviation. It is purely operational — several of its labs shift at once around the change, but every value stays sub-threshold, so the deterministic safety backbone correctly never fires a clinical flag for it. The teaching point: a deviation can move data without being a toxicity signal. The monitor sees the deviation in this log and the coherent (sub-threshold) lab wobble in Labs & Vitals, and recognizes operational cause — not a safety event. Do not let the simultaneous lab shifts get read as a safety signal; with a recorded operational cause and every value sub-threshold, this deterministic view correctly treats it as a deviation to note, not a toxicity.The visit-compliance matrix
The matrix is participant × visit, one cell per scheduled visit, classified as in-window, out-of-window, or missed against the protocol’s 8 nominal visits (Screen, C1D1, C1D8, C1D15, C2D1, C2D8, C3D1, EOT). It is the operational twin of the Overview study heatmap: the heatmap answers “when did clinical severity start,” this answers “did the visit happen on time at all.”
| Cell state | Meaning | Why it matters operationally |
|---|---|---|
| In-window | Visit occurred within the protocol-allowed window | Endpoint timing intact |
| Out-of-window | Visit occurred, but outside the allowed window | Threatens PK / ECG / NCA validity (see below) |
| Missed | Visit did not occur | Possible missing safety labs → route to a human |
CP101-003 is the planted missed-visit case: an operational data-completeness gap, not a clinical event. It shows as a missed cell here and as a hatched/operational cell on the Overview heatmap — and crucially it is excluded from the safety Attention Worklist, because a missing visit is an operations question routed to a human, not a clinical screening flag. That deliberate silence in the safety worklist, paired with visibility here, is the teaching point.
How this section connects to the rest of the dashboard
- The funnel’s enrolled count is the denominator behind the 3+3 ladder; its discontinued-AE rows (CP101-014) are coherent with that section’s DLT and serious-AE displays.
- The missed/out-of-window cells reconcile with the Overview heatmap’s hatched operational cells and the data-freshness panel.
- The dose-change deviation (CP101-020) explains the coherent sub-threshold lab wobble seen in Labs & Vitals.
- Everything reportable — final disposition, audited deviation classifications, validated KRIs — comes from the validated pipeline, never from this page.
See Governance for the recorded-vs-adjudicated and screening-vs-reportable contracts in full, and Planted Signals for CP101-003 and CP101-020 in context.
Participant drill-down — the roster & the evidence packet
Every other view in this dashboard is a population lens: the worklist, the heatmap, the eDISH scatter, the 3+3 ladder all let you reason across participants. The Participants section is the inverse — it is where you land on one person and assemble the full deterministic story behind a flag (or behind a deliberate silence). It is two tightly coupled tools: a sortable / filterable / searchable roster that is the index of the trial, and a click-anywhere evidence-packet modal that is the screening dossier for a single participant. This is the section a covering biostatistician or medical monitor opens when someone asks “what is going on with CP101-014” — and, just as importantly, the section that lets you prove a negative: that the quiet near-misses are quiet because the backbone read them correctly, not because it missed them.
The roster — the trial’s index
The roster is a single table of all 22 participants, one row each, with the screening-relevant headline values and a set of per-domain flag chips. The columns are deliberately the smallest set that lets you triage a row without opening it:
| Column | What it shows | Sortable |
|---|---|---|
| Participant | The participant id (e.g. CP101-014) — click anywhere on the row to open the evidence packet | yes |
| Cohort · dose | Cohort C1–C5 and the assigned dose level (10/30/60/120/200 mg) | yes |
| Sex / Age | Demographics for context — never an identity-narrowing field, never a tier input | no |
| Peak ALT | Worst on-treatment ALT ×ULN (the eDISH x-axis value) | yes |
| Peak TBili | Worst on-treatment total bilirubin ×ULN (the eDISH y-axis value) | yes |
| Max QTcF | Worst on-treatment QTcF (ms); a (watch) annotation marks the 450–480 band that is not an action tier | yes |
| TEAE | Count of treatment-emergent AEs (the one AE quantity the dashboard derives; seriousness and grade are recorded, not derived) | yes |
| Screening flags | Per-domain chips — RED / AMBER / watch / clear — one per domain that has anything to say (eDISH, QTcF, DLT, serious AE) | yes (by worst flag) |
Click a column header to sort; click again to reverse. The default sort is by participant id. Sorting by Peak ALT or Max QTcF floats the most extreme values to the top; sorting by Screening flags uses a worst-flag rank (RED > AMBER > watch > ops > clear) so the action-tier participants cluster together.
Filter and search
Above the table is a filter bar with three controls that compose (they all apply at once):
- Search participant id — free-text, case-insensitive substring match on the id. Type
014to jump straight toCP101-014. - Cohort — restrict to one of C1–C5. Useful when you are reasoning about a single dose level’s 3+3 picture and want the matching participants in front of you (pairs naturally with AE & DLT).
- Flag state — the triage filter: Has RED, Has AMBER, or Clear / watch only. “Has RED” matches an eDISH RED, a QTcF RED, or a recorded serious AE; “Has AMBER” matches a QTcF AMBER or an adjudicated DLT; “Clear / watch only” is the complement — everyone with no action-tier flag, including the watch-band and the multivariate-only participants.
Confirming the near-misses are correctly silent
The roster is the natural place to verify the two planted near-misses — the cases that exist precisely to demonstrate the backbone’s discipline, that it fires on a crossed action threshold and nothing softer. (For the full catalogue of planted signals see The planted teaching signals.)
CP101-009— the eDISH AND-gate near-miss. Its Peak ALT reads 4.2× (well above the 3× you might reflexively flag on) but its Peak TBili reads 1.6×, which is below the 2× bilirubin arm of the AND-gate. So its eDISH chip is clear, not RED — it sits in the Temple’s-Corollary region (ALT without bilirubin), the lower-right of the eDISH plot. It does carry a non-serious Grade-2 “ALT increased” AE, which is real and shows in the packet, but it is intentionally silent in the worklist because no action threshold is crossed. Filtering Has RED must not surface 009; filtering Clear / watch only must.CP101-011— the multivariate-only case. Every univariate value sits below its own action threshold at every visit: QTcF 474 ms is in the watch band (not AMBER), ALT 2.6× is below 3×, Hgb and ANC are sub-Grade-2. Several organs drift together, but no single rule crosses — so the deterministic backbone correctly produces only a watch chip and never an action flag.CP101-012is a milder, more ambiguous co-drift of the same kind. The coordinated-drift question (“is this gestalt worth a closer human look even though nothing crossed?”) is left to the reviewer’s judgement — the validated backbone makes no such call, by design.
The evidence packet — one participant, the whole deterministic story
Click any participant row (or any participant point/cell anywhere else in the dashboard — the eDISH scatter, the heatmap, a swimlane) and the evidence-packet modal opens. It is laid out in a strict, deliberate order — conclusions you can act on first, raw trajectories second, provenance last — so a reviewer reads the same way every time.
1. Header & demographics
The participant id, carried with a SYNTHETIC tag (and an OPERATIONAL tag for the decoy participants like CP101-003 and CP101-020), then cohort, dose, sex, age, enrollment day, and disposition with its recorded reason. Disposition and reason are displayed as recorded — the dashboard never derives why someone discontinued.
2. Deterministic evidence (the validated backbone) — first
A compact table, one row per screening check, each with the worst/peak value and the resulting screening flag:
- eDISH / Hy’s-Law — peak ALT, AST, TBili, ALP (all ×ULN) and the computed R-ratio with its pattern label (hepatocellular / mixed / cholestatic, or unstable when values sit near ULN). For
CP101-014this is the RED AND-gate row: ALT 5.6×, TBili 3.1×, R≈4.0 = MIXED (not hepatocellular). - QTcF (ICH E14 screen) — max QTcF and ΔQTcF, banded RED (>500) / AMBER (>480) / WATCH (>450, <480). The watch row is labelled as watch so no one mistakes it for an action tier.
- Adjudicated DLT — whether the SRC recorded a candidate DLT. This is displayed, never adjudicated by the dashboard.
- AEs (TEAE / serious / Gr≥3) — the TEAE count (derived), plus whether any AE is recorded serious or recorded Grade≥3. Severity and seriousness are shown as separate facts.
This table is the part of the packet that maps one-to-one to a flag a human must act on. Everything below it is supporting context.
3. Per-visit trajectories (as-collected, single-draw) — second
Six labelled sparklines, one per key biomarker, each a small line over the nominal visit sequence with the participant’s last/worst value called out and CTCAE-style band lines drawn behind:
- ALT ×ULN and TBili ×ULN — the eDISH pair, baseline ringed. On
CP101-014you can read the planted lag directly: TBili rises a visit after ALT, which is exactly the temporal pattern a monitor wants to see before entertaining Hy’s-Law logic. - QTcF (ms) — with 450/480/500 band lines; baseline ringed so a participant who was already in the watch band at baseline (e.g.
CP101-018’s 462 ms) reads as a pre-existing finding, not a drug effect. - Hgb (g/dL) and ANC (109/L) — hematology trajectories, shown for context, not as a tier.
- Creatinine — the renal trajectory, again context.
Missing visits are not interpolated — a missing draw is drawn as a small marker on the baseline rather than a connected point, so a gap reads as a gap (see CP101-003). Because of the hard backward-compatibility invariant, each sparkline’s worst on-treatment point equals the headline peak shown in the deterministic table above it — the trajectory can never silently contradict the flag.
4. Provenance — last
If the participant carries a provenance note (every planted participant does), it appears at the foot of the packet in plain language: what the flag is, why it fired or deliberately did not, and any operational caveat. This is the “read me before you escalate” line — e.g. 009’s note explicitly states that TBili 1.6× keeps it off the AND-gate, and 011’s note explicitly states every value is sub-threshold, so the backbone correctly does not fire.
Hover tooltips — triage without opening
Throughout the dashboard, hovering a participant point (for example a dot on the eDISH scatter) raises a compact tooltip: the id, cohort · dose · sex · age, the ALT/TBili pair with its eDISH state, the QTcF/ΔQTcF with any watch annotation, an adjudicated-DLT line when present, and a “click for the evidence packet” hint. The tooltip is a one-second triage — enough to decide whether a point is worth a click — and uses the same colour grammar as the rest of the dashboard (RED / AMBER / GREEN / steel-blue watch). It carries no value the packet does not.
How to use the section in practice
- Triage from a population view, drill from the roster. When the worklist or heatmap surfaces a participant, jump to Participants, search the id, and open the packet to read the deterministic table and trajectories together before forming any view.
- Read the deterministic table before the sparklines. The flags are the actionable layer; the trajectories explain shape and timing (the TBili lag, the baseline-watch ring) but do not change the flag.
- Use “Clear / watch only” as an audit, not a dismissal. Walk that list and confirm you can name why each participant is sub-threshold — this is where 009, 011, and 012 live, and where the backbone’s discipline is checked.
- Treat a provenance note as required reading. It is the difference between “ALT 4.2×, escalate” and “ALT 4.2× but bilirubin clean, this is Temple’s Corollary, watch the repeat.”
- Never quote a packet number into a report. If a value needs to be reportable, it comes from the validated pipeline — the packet is where you decide to ask the human, not where the number is born.
Guided cases (planted signals)
A monitoring dashboard is only as trustworthy as its behavior on the hard cases — and the hardest cases are the ones where the right answer is to stay quiet. This trial is seeded with ten teaching participants, each engineered to exercise one specific reasoning step a medical monitor or covering biostatistician makes. Some of them light the board up; the two most important ones are correctly silent, and that silence is the lesson. Walk these cases and you will have walked the entire governance model in the form it actually shows up in: a real participant, a real-looking value, and a deliberate decision about whether the deterministic backbone should speak.
CP101-009) and the multivariate-only drift (CP101-011) are present specifically so you can confirm the worklist does not escalate them. If your eye expects an alert there and the board gives you nothing, the board is right and your univariate intuition needed the correction. That is the most valuable thing this view teaches.The cast at a glance
| Participant | What it teaches | How it behaves on the board |
|---|---|---|
CP101-014 | The AND-gate fires — a Hy’s-Law screening position, with a MIXED (not hepatocellular) R-ratio twist | RED on eDISH; in the worklist; adjudicated DLT; serious related hepatobiliary AEs; discontinued (AE) |
CP101-009 | The AND-gate near-miss — ALT without bilirubin (Temple’s Corollary). Why one limb is not enough | GREEN on eDISH every visit; intentionally absent from the worklist despite a real Gr2 AE |
CP101-018 | An on-treatment QTcF RED — but read the baseline first | QTcF 503 ms RED in the worklist; baseline 462 already watch-band (not a drug effect) |
CP101-006 | An AMBER QTcF with the same baseline caveat | QTcF 486 ms AMBER; baseline 453 watch-band |
CP101-013 | The second C4 DLT — how the 3+3 trigger crosses | Adjudicated DLT; with 014 → 2/6 in C4 → MTD-exceeded TRIGGER |
CP101-010 | A single DLT in a cohort — the 1-DLT branch | Adjudicated DLT; 1/6 in C3; AMBER "SRC decides" state |
CP101-011 | Multivariate-only — coordinated drift, every univariate value sub-threshold. The deterministic backbone correctly never fires | GREEN/watch on every check; absent from the worklist — correctly, because no single threshold is crossed |
CP101-012 | A milder ambiguous co-drift — the gradient next to 011 | GREEN/watch on every check; also correctly silent |
CP101-003 | A missed visit — operational gap, not a clinical signal | Hatched cell on the heatmap and compliance matrix; routed to a human, never "fine" |
CP101-020 | A protocol dose change — several labs shift at once but stay sub-threshold | GREEN on every clinical check; appears in the deviation log as operational |
The centerpiece: 014 vs 009 — the AND-gate
These two participants exist to be read together. They are the reason the eDISH plot is a scatter and not two separate bar charts, and they are the single most important pair on the board.
CP101-014 — the gate fires. Peak ALT 5.6×ULN and peak TBili 3.1×ULN. Both limbs of the AND-gate are satisfied — (ALT >3×) AND (TBili >2×) — so the participant lands in the upper-right potential Hy’s-Law quadrant of the eDISH scatter and fires a RED screening flag at the visit where both cross. On the trajectory panels you can watch how it got there: ALT rises first and TBili lags by a visit (the bilirubin peak is placed one visit later than the transaminase peak), which is exactly the temporal pattern that makes hepatocellular injury with later hyperbilirubinaemia worrying. There is a deliberate clinical twist: the R-ratio is ≈4.0, which is a MIXED pattern, not classically hepatocellular — a reminder that the eDISH position and the R-ratio pattern are two different lenses and you read both. CP101-014 is also an adjudicated DLT, carries serious, related, unexpected hepatobiliary AEs (related Grade-3 ALT increased and hyperbilirubinaemia), and is discontinued for AE. It lights up the eDISH RED flag, the worklist, the SAE row, the DLT ladder, and the disposition funnel — the full chain.
CP101-014 occupies a potential Hy’s-Law quadrant / a Hy’s-Law screening position / an AND-gate position pending confirmation. It is not a "Hy’s-Law case." The flag is a prompt to a human, and the AND-gate position is only the entry to a workup: confirmatory repeat, R-ratio / ALP cholestasis exclusion, and ruling out viral, biliary, alcohol, concomitant-drug, and underlying causes must come before Hy’s-Law logic is entertained. The dashboard displays the position; the medical monitor adjudicates the case. See Governance and Hepatic.CP101-009 — the near-miss, and why one limb is not enough. Peak ALT 4.2×ULN — clearly elevated, well past 3×. But peak TBili is 1.6×, below the 2× limb. The AND-gate requires both, so CP101-009 sits in the lower-right of the eDISH scatter — the Temple’s-Corollary region: transaminase elevation without accompanying bilirubin — and is correctly GREEN on eDISH at every visit. This is the case that disciplines a too-eager eye. A reviewer scanning ALT alone would flag it; the AND-gate does not, because isolated transaminitis without hyperbilirubinaemia carries a very different prognosis than the combination Hy described.
CP101-009 has a real adverse event — a non-serious Grade-2 "ALT increased," possible relationship — and it still does not appear in the attention worklist. That is correct. The worklist surfaces open AMBER/RED screening flags; an isolated below-gate transaminase bump with a non-serious AE is neither. If you wanted to know about it, the AE is visible on the AE & DLT matrix and in the participant’s evidence packet — the data is never hidden, it is simply not escalated. A board that screamed about CP101-009 would be a board you would learn to ignore.The other centerpiece: 011 — multivariate-only, correctly silent
CP101-011 is the subtlest and most important case on the board, because it is the one a univariate screen cannot catch — and is right not to. Every value drifts in the worrying direction, and every single one stays below its own action threshold at every visit:
- QTcF 474 ms — this is the watch band (>450), not AMBER (which needs >480). No cardiac flag.
- ALT 2.6×ULN — below the 3× eDISH limb, and TBili 1.7× below the 2× limb. No hepatic flag.
- Hgb 11.1 g/dL and ANC 1.9 — sub-Grade-2 on the screening bands. No heme flag.
- Creatinine 1.28 mg/dL — a modest fold-rise, not a threshold crossing.
So several organ systems are quietly drifting together — a pattern a thoughtful human might want to eyeball — yet no univariate rule is satisfied, and the deterministic backbone correctly does not fire. CP101-011 is absent from the worklist and shows as GREEN/watch across the heatmap.
CP101-011 here, silent on the worklist, precisely so the reviewer can see that a clean backbone is not the same as a clean participant. Whether such a gestalt is worth a closer human look is a clinical judgement for the medical monitor / covering biostatistician — the deterministic backbone makes no such call, by design.CP101-012 — the gradient. A milder version of the same idea: ALT 2.3×, TBili 1.4×, QTcF 468 ms (still watch, <480). Every value sub-threshold; GREEN/watch on every check; correctly silent. 012 sits next to 011 as the shallower point on the ambiguous-co-drift gradient — useful for seeing that "multivariate-only" is not a single magic case but a region the backbone deliberately leaves to human clinical judgement.
The cardiac pair: 018 and 006 — always read the baseline
CP101-018 records QTcF 503 ms at an on-treatment visit — over 500, a RED tier, and it appears in the worklist with a related/possible Grade-3 "Electrocardiogram QT prolonged" AE. But the baseline (screening) QTcF was already 462 ms, which is itself in the watch band. The trajectory panel and the baseline-watch marker make this explicit: a participant who starts above 450 and rises further is a different reasoning problem than one who starts normal and crosses. CP101-006 is the AMBER analogue: QTcF 486 ms (>480), baseline 453 already watch-band.
The 3+3 pair: 013, 010, and how the trigger crosses
CP101-013 and CP101-014 are the two C4 DLTs. Two adjudicated DLTs in the 6-participant C4 cohort — 2/6 — satisfies the rule that exceeds the MTD, and the 3+3 state ladder shows C4 as an MTD-exceeded TRIGGER — SRC decision pending. CP101-010 is a single DLT in C3 — 1/6 — which lands C3 in the AMBER "1 DLT, expansion/rule check, SRC decides" branch. CP101-013’s recorded events include a serious, related, hospitalisation-criterion Grade-4 neutrophil decrease; CP101-010’s a Grade-3 platelet decrease.
The operational pair: 003 and 020 — not everything that moves is clinical
CP101-003 — a missed visit. The participant misses C2D1. This is an operational data-completeness gap, not a clinical severity. It shows as a hatched/operational cell on the study heatmap and in the visit-compliance matrix, and as a Minor deviation in the log. The crucial teaching: a missed visit can mean missed safety labs, so it is routed to a human — it never means the participant is fine. The right response to a gap is to go get the data, not to assume green.
CP101-020 — a protocol dose change. A protocol-driven dose adjustment shifts several labs at one visit at once. Because all the shifted values stay sub-threshold, the participant is GREEN on every clinical check — but the simultaneous movement is logged as an operational deviation (dosing/IP). This is the operational mirror image of CP101-011: 011 is several values drifting together for an unknown reason (a pattern for a human to weigh, since no single rule crosses); 020 is several values shifting together for a known operational reason (a deviation to record, not a clinical signal). Telling those two apart is precisely the judgment a covering biostatistician brings, and the board lays out the evidence for both without pretending to make the call.
Exploratory ▸ trial-structure analytics (persistence homology)
The console's eighth tab is deliberately set apart from the seven validated views. It is exploratory structural analysis — unsupervised persistence homology over the cohort — offered for hypothesis generation, never for a determination. It produces no flag, no number, and no escalation; nothing here can change study status. This page explains what it computes, how to read each panel, and the hard line that keeps it separate from the safety backbone.
What it computes
Each participant is placed in a standardized 10-feature safety space — peak ALT, AST, total bilirubin, ALP, max QTcF, ΔQTcF, nadir haemoglobin and ANC, peak creatinine, and TEAE count — each feature z-scored so no single scale dominates. On that point cloud it runs the Vietoris–Rips H₀ filtration (single-linkage): grow a connection radius ε from zero, participants link into components, and components merge as ε grows. H₀ (“Betti-zero”) tracks how many separate components survive at each radius. A participant that stays in its own component until a large radius is a topological outlier — far from everyone else in safety-feature space.
ripser / GUDHI; it is intentionally not shown here, to avoid over-claiming on a 22-participant synthetic cohort.The four panels, and how to read them
| Panel | What it shows | How to read it |
|---|---|---|
| PCA embedding | A 2-D PCA projection of the 10-feature space; each dot a participant, coloured by its H₀ cluster at the chosen radius ε*. | Dots that sit apart from the main cloud are structurally unusual. A red ring marks a participant that already carries a deterministic screening flag — watch where those land. |
| β₀ curve | The number of components remaining as the radius ε grows, from n down to 1. | A long flat plateau means a stable cluster structure; the dashed ε* line marks where the largest gap defines the natural number of subpopulations. |
| H₀ barcode | One horizontal bar per component, length = how long it survived before merging. | The longest bars are the most-separated participants — the topological outliers. Short bars are participants that joined the crowd early. |
| Site network | Synthetic sites positioned by their participants' mean location in feature space; an edge joins similar sites; node size = enrolment. | A red-ringed node is a site holding a flagged participant. H₀ of this graph = how many disconnected groups of sites exist — how fragmented enrolment is in safety-feature space. |
The one genuinely useful read
The participants persistence homology isolates as outliers — the longest H₀ bars, the dots sitting apart in the PCA view — turn out to be the same participants the deterministic checks already flag (the Hy’s-Law and QTcF REDs). That agreement is the point worth noticing: an independent, unsupervised method arrives at the same “these participants are unusual” conclusion as the pre-specified thresholds, by a completely different route. It is a cross-check on the structure — reassuring when it agrees, worth a human glance when it disagrees — but never a second opinion that decides anything.
A note on the experimental engine: a separate research-grade predictive engine is not included here and is not part of this package. Persistence homology, used this way as an honest structural summary, is a mature method; the predictive engine is not, and it stays out.
Related: the planted signals page names the specific participants (including the multivariate-only co-drift cases the backbone correctly does not fire on) — several are interesting to locate in the PCA embedding here.
From demo to production — how this maps to the real %tm_* job
This dashboard is the validated backbone, made visible — a teaching view of what the deterministic %tm_* monitoring job produces, rendered on seeded synthetic data so the picture is reproducible and contains no PHI. It is a viewer of screening flags, not the job, not a record, and not a source of reported numbers. The job itself is the thing that runs on a schedule against real study data: it detects threshold crossings, packages the evidence, and pages a human — and the human decides. This section is the explicit crosswalk: what stays identical when you move from this illustration to the real monitoring job, and what must change.
The one-line mental model
%tm_* job runs against validated data, applies protocol/SAP-specified rules, and emits a flag table plus an evidence package. A viewer like this one renders that flag table. The logic you see here — the AND-gate, the QTcF bands, the 3+3 state machine, the freshness escalation — is the same logic; only the inputs and the thresholds’ provenance change.What changes
| Dimension | In this demo | In the production %tm_* job |
|---|---|---|
| Data source | Seeded synthetic CP-101 (SEED 20260611, mulberry32), generated in-page | Real validated SDTM/ADaM from the study’s SDTM/ADaM pipeline (LB, EG, AE, DS, EX, VS …) |
| Thresholds | Illustrative (3×/5× ALT, 2× TBili, 450/480/500 ms, CTCAE-style bands) | Protocol- and SAP-specified action thresholds, with the pre-specified QTc correction (Fridericia) and the protocol’s DILI/cardiac stopping criteria |
| Freshness SLAs | Illustrative per-feed ages and SLAs (the green-on-stale demo) | The study’s real data-transfer SLAs and load schedule, with the same escalation rule (a green built on a stale feed → RED) |
| Visit windows | 8 nominal visits, illustrative in/out-of-window logic | The protocol’s actual visit schedule and windows; missed/out-of-window driven by real EDC/CTMS dates |
| Reported numbers | None — every count is labelled a screening census, not a table | Come only from validated tools: PK/QTc from Phoenix WinNonlin, dataset conformance from Pinnacle 21, incidence/disposition/MTD from the validated SDTM/ADaM pipeline — never the job’s screening flags |
| DLT & 3+3 | DLT flags are pre-seeded; the dashboard computes the 3+3 state only | DLT status is SRC-adjudicated and recorded upstream; the job computes the same trigger/decision-pending state and still never escalates/expands/declares MTD — the SRC does |
| Delivery | A static viewer you open | A scheduled job that runs, detects, packages an evidence bundle, and pages the on-call monitor / covering biostatistician (heartbeat + dead-man’s-switch watchdog) |
| Identity | Synthetic ids, no PHI, no kit/randomization codes | Real participant keys behind the study’s access controls; same rule that no identity-narrowing free text or case-narrative prose is generated |
What stays exactly the same
- The governance model. A flag is a screening prompt for a human, never a determination. Severity and seriousness stay separate. Relationship, seriousness, expectedness, and DLT status are recorded upstream and only displayed. The full set of rules in The governance model is identical in production.
- The deterministic logic. The eDISH AND-gate (ALT≥X ×ULN and TBili≥2×ULN, with R-ratio cholestasis exclusion), the QTcF banding, the freshness escalation, the 3+3 state machine, the TEAE derivation — same auditable rules. The demo and the job are the same screening engine over different inputs.
- The role split. The job does detect / package / page; humans decide. The dashboard views the flags. Neither ever adjudicates, diagnoses, or declares MTD.
- The viewer/record distinction. Neither the demo nor any production viewer is a regulated record or a source of reported numbers. Count panels that mirror a regulatory table stay labelled “screening census — not the validated table.”
What must be validated as study programs
Moving from illustration to a monitoring job that touches real study data brings the screening logic into scope for risk-based computerized-system validation (CSV). Two things in particular are validated as study programs:
- The threshold / flag logic. The deterministic rules that turn a validated ADaM value into a screening flag — the AND-gate, the band cut-points, the R-ratio exclusion, the freshness escalation, the 3+3 state map — are specified against the protocol/SAP and tested (known-input → expected-flag cases, including the boundary and near-miss cases this demo plants). The flag table is auditable: every flag traces to a rule and a value.
- The scheduling / orchestration wrapper. The job that loads data on the SLA, runs the checks, packages the evidence, pages the human, emits a heartbeat, and is watched by an independent dead-man’s-switch. This wrapper is validated to the risk it carries (it can fail to page — a safety-relevant failure mode — so the watchdog is part of the validated design).
Where the validated analysis tools own the answer
%tm_* job’s job is to get a human to look sooner; it is not the source of the number that goes in the CSR.For the clinical and regulatory definitions behind every threshold mentioned here, see Clinical & regulatory reference.
Clinical & regulatory reference
This appendix is the standards layer under the dashboard. For each framework it gives a one-line working definition and then draws the line that runs through the whole wiki: what the dashboard does (screen) versus what the regulation or validated analysis owns (determine / report). The dashboard screens against thresholds derived from these standards; it never produces the regulated table, the adjudication, or the reportable number — those belong to the medical monitor, the SRC, pharmacovigilance, and the validated tools (Phoenix WinNonlin, Pinnacle 21, the validated SDTM/ADaM pipeline).
| Framework | One-line definition | What the dashboard does (screen) | What the regulation / validated analysis owns (determine / report) |
|---|---|---|---|
| Hy’s Law / eDISH | A drug-induced liver-injury warning pattern: hepatocellular injury (ALT/AST ≥3×ULN) with concurrent total bilirubin ≥2×ULN and no better explanation (e.g. cholestasis). eDISH is the evaluation-of-Drug-Induced-Serious-Hepatotoxicity scatter (peak ALT vs peak TBili, log scale). | Plots the eDISH scatter and fires a deterministic AND-gate screening flag when both the ALT and the ≥2× TBili arms cross at a visit. Uses only the approved language — “potential Hy’s-Law quadrant”, “Hy’s-Law screening position”, “AND-gate position pending confirmation.” Shows the R-ratio to flag cholestatic confounding (e.g. CP101-014’s MIXED pattern) and keeps the near-miss CP101-009 GREEN. |
Never calls a participant or region a “Hy’s-Law case.” Confirmation requires a repeat draw, R-ratio/ALP cholestasis exclusion, and ruling out viral/biliary/alcohol/concomitant-drug/underlying causes — a medical-monitor determination. Hy’s-Law logic is only entertained after that workup. |
| ICH E14 (QTc) | The regulatory framework for assessing drug effects on cardiac repolarization, including categorical-outlier thresholds (QTc >450/480/500 ms; ΔQTc >30/60 ms) using a pre-specified rate correction. | Renders per-visit QTcF (Fridericia) trajectories with a cohort-median band and a categorical-outlier census (counts by cohort), explicitly labelled “SCREENING CENSUS — NOT THE ICH E14 TABLE.” Bands a value RED/AMBER/WATCH; marks baseline-watch points (e.g. CP101-018 at 462 ms baseline) as not a drug effect. |
Owns the actual ICH E14 categorical table, central-read ECG intervals, and any concentration-QTc / exposure-response analysis — produced by the validated tools (Phoenix WinNonlin) under the SAP, not by this dashboard. |
| CTCAE v5 | NCI Common Terminology Criteria for Adverse Events — standardized severity grading (Grade 1–5) for AEs and lab abnormalities. | Applies CTCAE-style screening bands to single lab values (lab-shift grid, hematology), capping Hgb at Grade 3 since clinical Grade 4 needs monitor assessment. Labels these a deterministic SCREENING BAND, not an adjudicated AE grade. Keeps severity separate from seriousness; Grade-5 is absent by design. | Owns the adjudicated AE grade (an investigator/clinical assessment of the event, not a single value) and the reported AE incidence-by-grade tables — from the validated pipeline. A Grade-3 AE is not automatically serious; seriousness is a separate ICH determination. |
| 3+3 dose-escalation design | A classic rule-based escalation: enroll 3, expand to 6 on 1 DLT, declare the dose intolerable / MTD-exceeded at ≥2 DLTs in a cohort; DLTs assessed within a defined window. | Computes the 3+3 state per cohort from the recorded DLT count (planned N read from the design — C3 was designed N=6, never “expanded”) and shows a trigger / decision-pending label (e.g. C4’s 2/6 = MTD-exceeded TRIGGER). DLT window = 28 days. | Never escalates, expands, de-escalates, or declares MTD. DLT adjudication and every escalation decision are made and recorded by the SRC; the dashboard only displays the recorded DLT status and the computed state. |
| FDA DILI premarketing guidance | FDA guidance on detecting and evaluating drug-induced liver injury in premarketing clinical studies (close monitoring of ALT/AST/TBili/ALP, repeat testing, alternative-cause workup). | Operationalizes the monitoring posture: per-visit LFT trajectories (ALT/AST/TBili/ALP/GGT), the eDISH view, time-to-peak and trend, and a prompt to obtain a confirmatory repeat — i.e. it tells a human when to look harder. | Owns the causality assessment, the alternative-cause exclusion, the dechallenge/rechallenge interpretation, and any decision to discontinue — clinical determinations by the medical monitor, informed by but not made by the screen. |
| R-ratio (CIOMS) | R = (ALT/ULN) ÷ (ALP/ULN), the CIOMS pattern classifier: hepatocellular ≥5, mixed 2–5, cholestatic ≤2. | Computes R per participant and shows a pattern strip (hepatocellular / mixed / cholestatic), with an “unstable near ULN” guard when values sit too close to ULN for the ratio to be meaningful. Helps distinguish a hepatocellular signal from cholestasis (CP101-014 reads R≈4.0 = MIXED, not hepatocellular). |
Owns the clinical interpretation of the pattern and its role in the Hy’s-Law / DILI workup — R-ratio cholestasis exclusion is one input the medical monitor weighs, not a determination the dashboard makes. |
| CKD-EPI 2021 eGFR | The 2021 race-free CKD-EPI creatinine equation estimating glomerular filtration rate (mL/min/1.73m²). | Shows a renal panel: creatinine fold-rise over the participant’s own baseline plus a CKD-EPI-2021 eGFR estimate for context. Labelled an estimate; it is a screening context value, never a tier on its own. | Owns any reported renal-function analysis and clinical interpretation of renal change — the eGFR estimate is illustrative context, not a validated reportable result. |
Standards summarized for screening-design context; consult the current ICH, FDA, NCI, and CIOMS source documents for authoritative definitions and any version updates. All data in the dashboard is synthetic and illustrative.
FAQ
The questions a biostatistician or medical monitor actually asks in the first hour with this dashboard — answered plainly, with a pointer to the section that goes deeper.
Reading the numbers
Can I report a number off this dashboard?
No. Nothing here is a reportable or regulated figure. Incidence tables, the ICH E14 categorical table, central-read QT intervals, concentration–QTc, AE incidence, the MTD, and final disposition come only from validated tools — Phoenix WinNonlin, Pinnacle 21, the validated SDTM/ADaM pipeline. Any count panel that resembles a regulatory table is labelled “screening census — not the validated table” for exactly this reason. See Governance.
The cohort rates are based on 3–6 participants — aren’t those unstable?
Yes, and that’s expected. With N=3 or N=6 per cohort, a single event swings the rate enormously, so the small-N rates carry an explicit instability caveat and should be read as direction, not estimate. They are a prompt to look at the underlying participants, never a number to quote. See AE & DLT.
How do I know the per-visit data matches the summary plots?
By design: a hard backward-compatibility invariant holds — each per-visit series’ worst on-treatment value equals the original summary value. So a participant’s eDISH dot or QTcF peak is literally the worst point of its own trajectory; the per-visit panels can extend the story (when it started, the trail) but can never contradict the headline. You can confirm it on any participant by opening its evidence packet and checking the trajectory peak against the summary marker. See Data & provenance.
The flags and what they mean
Is the eDISH plot telling me a participant has Hy’s Law?
No — it is telling you a participant sits in the potential Hy’s-Law quadrant, an AND-gate position pending confirmation. Hy’s-Law logic is only entertained after a confirmatory repeat, an R-ratio/ALP cholestasis exclusion, and ruling out viral, biliary, alcohol, concomitant-drug, and underlying causes — all human work. The approved language never calls a participant or region “a Hy’s-Law case.” See Hepatic and Governance.
Why is participant CP101-011 not flagged anywhere?
Because it is the multivariate-only case: every univariate value sits below its own action threshold at every visit — QTcF 474 is WATCH not AMBER, ALT 2.6× is under the 3× band, Hgb/ANC are sub-Grade-2. The deterministic backbone is correct to stay silent. Recognising whether such coordinated, sub-threshold drift is worth a closer human look is a matter for the reviewer’s judgement, not something a univariate screen is built to flag. That silence is the teaching point, not a miss. CP101-012 is a milder version of the same co-drift. See Planted signals.
Then why is CP101-009 not in the worklist if its ALT is elevated?
Because it is the AND-gate near-miss: ALT 4.2× but TBili 1.6× (under 2×), so it is correctly GREEN on eDISH at every visit — the Temple’s-Corollary region of ALT-without-bilirubin. It carries a non-serious Grade-2 “ALT increased” AE but does not fire the AND-gate, so the worklist is right to be quiet on it. See Hepatic.
Participant CP101-018 shows QTcF 503 ms but a baseline of 462 — is that a drug effect?
The dashboard flags the 503 ms on-treatment value RED as a screening prompt, but it also shows the baseline 462 distinctly as a watch-band point — the participant was already above 450 ms before dosing. Whether the change is drug-related is a human call; the baseline-watch styling exists precisely so a pre-existing finding isn’t mistaken for a treatment effect. See Cardiac.
Does a Grade-3 screening band mean the AE is serious?
No. Severity (CTCAE grade) and seriousness (the ICH regulatory criteria) are kept strictly separate — a Grade-3 AE is not automatically serious. And the “grade” you see on a single lab value here is a deterministic screening band, not an adjudicated AE grade. Both calls belong to the investigator/SRC. See Governance and AE & DLT.
Freshness, completeness, and the pipeline
Why is a GREEN feed shown as RED?
Because the content can be clean while the pipeline is stale. If a feed is past its SLA, any GREEN built on it is escalated to RED — “green-on-stale-data” — since a healthy-looking panel resting on old data is exactly the failure mode that hides a real change. Pipeline freshness is a first-class axis, distinct from data-content QC. See Overview.
A participant has a missed visit — is that “fine”?
Never automatically. A missed visit (like CP101-003) is an operational data-completeness gap that can mean missed safety labs, so it is shown as hatched/operational and routed to a human — the dashboard will not color it GREEN and move on. See the visit-compliance matrix in Disposition.
What about the 3+3 ladder — does the dashboard decide to escalate or call the MTD?
No. It computes which 3+3 branch the adjudicated DLT count satisfies and shows a trigger / decision-pending label — for example C4 at 2/6 reads as an MTD-exceeded TRIGGER — but it never escalates, expands, de-escalates, or declares an MTD. The SRC decides. Note also that planned N is read from the design (C3 was designed N=6, never “expanded”). See AE & DLT.
The file itself
Can it run offline — does any data leave the file?
Yes, fully offline, and no. It is a single self-contained HTML file with hand-rolled SVG, no external libraries, no fonts to fetch, and no network calls of any kind. Double-click it or drag it into any modern browser; it works air-gapped and nothing leaves the page. See Start here.
Is any of this real participant data?
No. Everything is synthetic and seeded (SEED 20260611) — no PHI, no real participants, no unblinding, no randomization or kit codes, no identity-narrowing fields, no free-text narratives, and no Grade-5/death events. It is built to be safe to share, screenshot, and teach from. See Data & provenance.