AI for Biometrics

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

The one rule, before anything else. Every colored cell, pill, chip and flag on this dashboard is a screening prompt for a human — never a determination, diagnosis, adjudication, or reportable number. A RED tile means “a person should look at this now,” not “this is a finding.” The medical monitor, the Safety Review Committee (SRC), pharmacovigilance, and the covering biostatistician decide. The dashboard only shows you what to look at first.

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.

A key concept: the validated backbone, made visible. The numbers and flags here mirror what the validated monitoring job already computes; the dashboard adds pixels, not logic. That is why a hard backward-compatibility invariant holds throughout: each per-visit series’ worst on-treatment value equals the original summary value, so the new per-visit panels can never contradict the headline eDISH or QTcF plots. See the FAQ for how to confirm that yourself.

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.

Practical: because the data is seeded, the file you open today and the file a colleague opens next quarter show the identical picture. That makes it safe to reference a specific participant or cell in an email or a training session — the coordinates are stable.

How this wiki is organized

Read top to bottom the first time; after that, jump by need.

SectionWhat you’ll find
A 60-second tourThe first screen, walked through in order — status band, KPI strip, sub-nav, the attention worklist, and click-to-drill.
GovernanceThe non-negotiable rules: screening-not-determination, approved Hy’s-Law language, severity vs seriousness, where validated numbers live.
Data & provenanceThe synthetic CP-101 design, the seed, the per-visit model, and the backward-compat invariant.
OverviewKPI tiles, the attention worklist, the data-freshness/SLA panel, and the study heatmap.
HepaticeDISH with history trails, LFT trajectories, the R-ratio strip, and the peak/baseline table.
CardiacQTcF (Fridericia) trajectories and the ICH E14 categorical screening census.
Labs & vitalsThe baseline→worst lab-shift grid, hematology and renal panels, and the orthostatic/PCS board.
AE & DLTThe 3+3 escalation ladder, the SOC×grade AE matrix, and the AE onset/duration swimlane.
DispositionThe enrollment funnel, RBQM KRI tiles, the deviation log, and the visit-compliance matrix.
ParticipantsThe sortable roster and the per-participant evidence-packet modal.
Planted signalsThe honest-by-design teaching cases — including the AND-gate near-miss and the multivariate-only participant.
From dashboard to productionHow this view relates to the validated %tm_* job and the real pipeline.
ReferenceThresholds, formulas (Fridericia, CKD-EPI 2021, R-ratio), and controlled vocabularies.
FAQThe 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

  1. 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) and CP101-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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
The fastest correct path: read the freshness chips → glance at the status pill → drop into the attention worklist → click the top row → read its evidence packet. That sequence answers “can I trust this, is anything open, what’s worst, and is the prompt real” in under a minute — and it never asks you to over-read a single cell.
One honest caveat for the tour. The worklist showing a participant is the start of work, not the end of it. A RED row means “a human should look,” and the evidence packet helps that human look well — but the determination (is this Hy’s Law, is this related, is this serious, does this meet a DLT) is made by the medical monitor and SRC, never by the row turning red. Carry that into every click. See Governance.

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.

The one rule under all the others. The TRIALMON Dashboard is a screening instrument. It produces prompts for a human. It never produces a determination, a diagnosis, an adjudication, a causality assessment, a grade, an interval, or a reportable number. Everything below is an elaboration of that single sentence.

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.

Screening vs. determination, made concrete. Compare two participants from the planted teaching set. 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.

Approved phrasings (and only these) for the AND-gate region.
  • “potential Hy’s-Law quadrant”
  • “Hy’s-Law screening position”
  • “AND-gate position, pending confirmation”
These all describe a position on a plot awaiting human work — never a property of the patient.
Say thisNever thisWhy
“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.
The near-miss is the proof the language matters. 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.

Source-of-truth rule. Every reported, regulated, or submitted number originates only from validated tooling: Phoenix WinNonlin for PK and concentration-QTc, Pinnacle 21 for CDISC conformance, and the validated SDTM/ADaM pipeline with its central-read intervals and adjudicated assessments. The TRIALMON Dashboard contributes zero reportable values. Any panel that mirrors a regulated table carries the standing label “SCREENING CENSUS — NOT THE VALIDATED TABLE.”

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.
How to phrase it in a memo. Write “the screening view flags 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.

Two axes, never merged. The dashboard displays severity (CTCAE grade) and seriousness (ICH SAE criteria) as independent attributes. It never infers one from the other, never colors a high grade as “serious,” and never colors a serious event as necessarily high-grade. The AE & DLT matrix keeps the grade axis and the seriousness attribute visibly distinct for exactly this reason.
“Grade” on a single lab value is a screening band, not an AE grade. When the lab-shift grid shows a value in a “CTCAE-style” band, that is a deterministic severity band applied to one number — a screening convenience so the picture reads in familiar units. It is not an adjudicated adverse-event grade. An adjudicated AE grade reflects the investigator’s clinical assessment of the whole event over time, not a single threshold crossing. We even cap the hemoglobin value-band at Grade 3, because a true clinical Grade 4 anemia call requires monitor assessment that a value alone cannot supply.

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.
The 3+3 ladder computes a trigger; it never makes a decision. The 3+3 state ladder may display, for cohort C4, “2 of 6 evaluable DLTs — MTD-exceeded TRIGGER.” That is an arithmetic statement about the recorded count against the rule. The dashboard does not escalate, expand, de-escalate, or declare an MTD. The SRC decides. And note the design fact the ladder reads straight from the protocol: C3 was designed N=6; it was never “expanded from 3.” The DLT observation window is 28 days, also read from the design, not inferred.
Why TEAE and 3+3 are the only derivations. Both are pure functions of recorded inputs with no clinical judgment: TEAE is a date comparison; the 3+3 branch is a lookup keyed on an already-adjudicated count and a fixed design. Neither asks the tool to assess a patient. The moment a computation would require judgment about a patient — is this related? is this serious? is this a DLT? — it leaves the dashboard’s authority and becomes a displayed, human-recorded value.

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-014 and CP101-013 (the two C4 DLTs) and CP101-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.

The green-on-stale-data rule. If a feed’s load age exceeds its SLA, any GREEN content state riding on that feed is escalated to RED on the Data-Freshness / SLA panel. A clean screen does not earn trust unless the data under it is current.
Two independent questions. Pipeline freshness asks “is the data current?” — load recency vs. SLA, shown as per-feed age plus a load-tick history. Content QC asks “is the data, as of its last load, clean?” — the threshold crossings and screening flags. A feed can be perfectly clean and dangerously stale; the freshness panel is the only thing that catches that combination, which is why it sits on the Overview with first-class status alongside the KPI tiles.

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.

Hard constraints on what the dashboard may contain.
  • 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.
Why the no-narrative rule is load-bearing. A free-text narrative is where re-identification and inadvertent unblinding creep in, and where a screening tool would be most tempted to editorialize into a determination. By restricting every field to a controlled vocabulary, the dashboard physically cannot tell a story about a patient — it can only point. That is by design and it is consistent with rule 1.

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.

RoleOwns the decision the dashboard prompts
Medical monitorClinical 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 biostatisticianOperational 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.
What this buys you. Because the dashboard never crosses into determination, a medical monitor can trust it without auditing every pixel: a flag is always “look here,” never “I’ve decided.” The worklist’s silences (like 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.

Synthetic, by design — and labelled as such everywhere. The data is illustrative, not a record. No real participants; no PHI; no randomization, kit, or IXRS codes; no identity-narrowing fields; no free-text case narratives (controlled vocabularies only); and no Grade 5 / no death — the most severe outcomes are intentionally excluded because they belong to medical-monitor adjudication, not a screening illustration. Small cohorts (N = 3–6) mean every rate carries an instability caveat; a 1/6 and a 2/6 are two people, not a percentage you should quote. Nothing here is a claim that any signal is real or robust.

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, status missed). CP101-003 misses C2D1 — 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-014 and CP101-013 discontinued 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.rand is 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:

The hard backward-compatibility invariant. For every per-visit series, the worst on-treatment value equals the original summary value (same SEED). The peak ALT in 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.

How to sanity-check the invariant yourself. Open any participant's evidence packet and read the sparkline peak against the headline value on the relevant domain page (Hepatic eDISH or Cardiac QTcF). They will match to the displayed precision. If they ever didn't, the longitudinal panels would have to be treated as a separate, untrusted source — the invariant is what lets them sit on the same page as the validated backbone.

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.

Screening census, not the validated table. Any panel here that resembles a regulatory output — the ICH E14 categorical outlier counts on Cardiac, the AE incidence matrix on AE & DLT, the disposition funnel on Disposition — is a screening census on synthetic data, labelled as such. The reported, regulated numbers (incidence tables, the actual E14 table, central-read intervals, concentration–QTc, MTD, final disposition) come only from validated tools (Phoenix WinNonlin, Pinnacle 21, the validated SDTM/ADaM pipeline) — never from this view. See Governance for the full rule set and From illustration to production for how the live version is wired.

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.

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.

TileWhat it rolls upColour / jump
EnrolledCount of enrolled participants (22), with completed and discontinued sub-counts beneath. The denominator for everything else.Neutral
Open RED flagsCount 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 AMBERCount of AMBER worklist rows — QTcF >480/Δ>30 and a 1-DLT cohort. The same-day-review tier.AMBER if >0 · jumps to worklist
Serious AEsCount of participants with an investigator-recorded serious AE. Seriousness is displayed, never derived here.RED if >0 · jumps to AE & DLT
Adjudicated DLTCount of participants carrying an SRC-adjudicated DLT flag. A displayed adjudication, not a dashboard determination.AMBER if >0 · jumps to AE & DLT
EnrollmentEnrolled / planned as a percentage (22 of planned). Operational progress, not safety.Neutral · jumps to Disposition
Data feedsOK 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-014 sits 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 is watch, 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) and CP101-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.

CellMeaningHow it renders
RRED — an action-tier screening flag at this visit (e.g. the AND-gate fired, or QTcF crossed the E14 RED line)RED fill
AAMBER — same-day-review tierAMBER fill
wwatch — below the action threshold; context only, not in the workliststeel fill
bbaseline-watch — already in the watch band at baseline; ringed to mark it as pre-existing, not a drug effectringed cell
hatched / ·missed or absent visit — an operational data-completeness gaphatched, 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 rule that governs this entire section. No participant, point, region, or quadrant on this dashboard is ever a “Hy’s-Law case.” The only approved language is potential Hy’s-Law quadrant, Hy’s-Law screening position, or AND-gate position pending confirmation. A true Hy’s-Law determination requires confirmatory repeat testing, R-ratio / ALP cholestasis exclusion, and the affirmative ruling-out of viral hepatitis, biliary obstruction, alcohol, concomitant hepatotoxins, and underlying liver disease — a medical adjudication this dashboard cannot and does not perform. The plot points; the human decides.

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.

QuadrantPositionScreening meaning on this dashboard
Lower-leftALT <3×, TBili <2×Normal range / no aminotransferase or bilirubin signal. Most participants live here.
Lower-rightALT ≥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-leftALT <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-rightALT ≥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.
Why both axes, and why the AND. Hy’s original observation was that drug-induced hepatocellular injury severe enough to also raise bilirubin — i.e. enough hepatocyte loss that the liver can no longer clear bilirubin, in the absence of cholestasis or obstruction — predicts roughly a 10–50% risk of fatal or transplant-level outcomes. Neither axis alone carries that weight: ALT elevations are common and often benign (the liver adapts), and bilirubin elevations alone have many non-hepatocellular causes. The danger lives in the conjunction. That is why the screening logic is an AND-gate, not an OR.

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.

What the gate does NOT do. Firing the AND-gate is not a diagnosis, a causality assessment, or a reportable count. It does not de-challenge, re-challenge, or adjudicate. It does not exclude Gilbert’s syndrome, hemolysis, sepsis, or a co-administered hepatotoxin — those exclusions are the medical monitor’s work. The gate’s entire job is to guarantee that a hepatocellular-plus-bilirubin position is seen by a human fast, with the lab trajectory and provenance attached. See AE & DLT for how the recorded serious AE and DLT adjudication — which the dashboard only displays, never derives — sit alongside this flag.

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

A trail is a record of where a participant HAS BEEN. It is not a forecast of where they are going. The dashboard deliberately avoids all directional and velocity language — no “trending toward,” no “trajectory pointing to,” no “rate of rise,” no extrapolation arrows. Those are inferences about the future; this deterministic backbone reports observed past values only and leaves any forward clinical judgement to the medical monitor.

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).
This is the operational reason the backbone went longitudinal. The hard backward-compat invariant — every per-visit series’ worst on-treatment value equals the original headline summary — means the trajectories can never contradict the eDISH peak you see in the scatter. The small-multiples add the time dimension underneath the same numbers, so a monitor gets both “how high” (the dot) and “what shape” (the curve) without the two views ever disagreeing.

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 valuePatternInterpretation
R ≥ 5HepatocellularAminotransferase-dominant injury — the pattern most relevant to Hy’s-Law reasoning.
2 < R < 5MixedBoth aminotransferase and cholestatic features present.
R ≤ 2CholestaticALP-dominant — raises bilirubin by a cholestatic/obstructive mechanism, which is the differential that can mimic, and must be excluded from, a Hy’s pattern.
The near-ULN instability guard. R is a ratio of two ratios, so when ALT and ALP both sit close to their own ULN, tiny absolute movements produce wild swings in R — an artifact, not a signal. The strip therefore carries an explicit “unstable near ULN” guard: when the inputs are near baseline the computed pattern is flagged as unreliable rather than reported as a clean hepatocellular/mixed/cholestatic call. A confident pattern label requires meaningfully elevated inputs.
014’s R≈4.0 (MIXED) is NOT reassurance. A reader might be tempted to treat “mixed, not pure hepatocellular” as downgrading the concern. It does not. 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.

This is exactly why 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-014CP101-009
Peak ALT5.6×ULN4.2×ULN
Peak TBili3.1×ULN (lags ALT by one visit)1.6×ULN (never reaches 2×)
eDISH quadrantUpper-right — potential Hy’s-Law quadrantLower-right — Temple’s Corollary
AND-gateFires RED at the crossing visitCorrectly 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
WorklistHighest-severity open REDIntentionally 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.

“Trend” here is a description of observed values — it is NOT a de-challenge assessment. A “recovering” tag means the last few measured points are lower than the peak. It does not assert that stopping the drug caused the improvement, does not establish causality, and is not a positive de-challenge. De-challenge and re-challenge are medical determinations the investigator and monitor record; the dashboard only shows the curve they would look at. Conflating “the numbers came down” with “the drug was the cause and removing it fixed it” is precisely the inferential leap the backbone refuses to make.
How to read this section in practice. Start at the eDISH scatter to see who is in or near the upper-right quadrant. For any participant of interest, follow the history trail to see the path and the ALT/bilirubin lag, then drop to the LFT trajectory small-multiples to read rising-vs-plateaued-vs-recovering, glance at the R-ratio strip for the injury pattern (respecting the near-ULN guard), and confirm onset and baseline in the peak/baseline table. Then — for any RED — open the participant’s evidence packet, which assembles the deterministic flags, the sparkline trajectories, and provenance into the one-page hand-off a covering biostatistician would route to the medical monitor. Remember throughout: everything you are reading is a screening position. The reportable hepatic numbers come only from the validated pipeline, never from this view.

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.

Hard rule — this is a screening census, NOT the ICH E14 table. Every count, band, and outlier label on this section is a deterministic prompt computed from seeded synthetic per-visit values. The regulated ICH E14 categorical outlier table, the central-read intervals, and any concentration–QTc (C-QTc) exposure-response analysis come ONLY from the validated analysis and the central cardiologist over-read — never from this dashboard. The census tile is labelled in-product “SCREENING CENSUS — NOT THE ICH E14 TABLE” for exactly this reason.

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.
Key concept — the correction is part of the case definition. A “QTc >500 ms” statement is meaningless without naming the correction. Mixing QTcB thresholds with QTcF values (or vice-versa) is one of the most common ways a cardiac screening pipeline generates phantom flags. The dashboard hard-codes Fridericia so that the band a participant lands in is always comparable across visits and across participants. If you ever see a value here that disagrees with a study-lab printout, check the correction first — nine times out of ten that is the discrepancy.

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 tierAbsolute QTcFΔQTcF (change from own baseline)What the tile is telling a human
(below watch)≤450 ms≤30 msNo 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 msOpen prompt — route to the medical monitor.
RED>500 ms>60 msHighest-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.

Honest caveat — bands are bins, not biology. A participant at 501 ms and a participant at 480 ms are one millisecond and one heartbeat of measurement noise apart, but they land in different tiers because categorical bands have hard edges. The tier is a routing decision, not a clinical verdict. Single-timepoint QTcF on a synthetic value carries the same instability as any single ECG: it should be confirmed on repeat tracings before anyone reasons about a drug effect. The dashboard never confirms; it only prompts.

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.

ParticipantBaseline QTcFOn-treatment peakScreening tierWhy it reads this way
CP101-018462 ms (watch at baseline)503 msREDStarted in watch-band, but the >500 ms crossing is on treatment — that delta is the prompt, not the absolute alone.
CP101-006453 ms (watch at baseline)486 msAMBERAlready >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.

How to read a baseline-watch participant in practice. Open the trajectory first, not the census. Ask: (1) Where did they start? (2) Is the threshold crossing on a post-dose visit? (3) Is it a single spike or a sustained separation from the cohort median? (4) Is there a plausible ΔQTcF, not just an absolute? Only after those four does the prompt mean “drug-relatedness is on the table” — and even then the answer is “get a confirmatory ECG and a cardiologist,” never a determination from this view.

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.

The census is a mirror, not the table. Because it looks like the E14 outlier table, it is the panel most likely to be mistaken for a reportable number. It is not. The counts are participant-incidence over synthetic per-visit screening values; they include baseline-watch crossings flagged as such; they have not been through central-read adjudication, manual over-read of borderline tracings, or the validated derivation. Do not paste a census count into a slide, a DSMB pack, or a regulatory document. The validated E14 table and C-QTc analysis are the only citable cardiac deliverables.

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 on CP101-011 in 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.

Hard rule — a screening BAND is not an AE GRADE. Every “Grade” label in this section is a deterministic CTCAE-style screening band applied to a single synthetic lab value by a fixed cutoff. It is NOT an adjudicated CTCAE adverse-event grade, NOT a reportable lab abnormality, and NOT an AE. An adjudicated grade requires clinical context, repeat confirmation, attribution, and a human assessment of whether the abnormality is even an adverse event. The band tells you “this value is in the range a Grade-X cutoff would describe” — the grade tells you “a clinician evaluated this and recorded it.” The dashboard only ever does the first.

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.
Why hemoglobin is capped at Grade-3 in the value-band. CTCAE Grade-4 anemia is defined by life-threatening consequences / urgent intervention indicated — a clinical state, not a hemoglobin number. There is no Hgb value that, by itself, “is” Grade-4; that determination needs a monitor looking at the whole picture. So the deterministic value-band tops out at Grade-3. A participant whose Hgb falls into the severe range is banded Grade-3 and routed to a human; the dashboard refuses to assert Grade-4 because it cannot, by construction, know whether the clinical Grade-4 criteria are met. This is the single most important example of the band-vs-grade distinction made concrete.

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:

Why fold-rise over own baseline catches what an in-range value hides. A young, muscular, or simply low-baseline participant can double their creatinine — a clear acute-kidney-injury (AKI) staging signal — while the absolute value is still inside the population reference range. Screen against the reference range alone and you miss the early AKI entirely. Screen against the participant’s own baseline (the KDIGO-style 1.5× / 2× / 3× fold-rise logic) and the rise surfaces immediately, exactly when a monitor can still act. The panel is built around this relative view on purpose.

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.

Why vitals carry no tier. A PCS vitals reading is enormously context-dependent — posture, timing relative to dose, recent activity, hydration, anxiety, cuff size, a missed rest period. Banding it into RED/AMBER would imply a determination the value cannot support and would flood the worklist with operational noise. So the vitals board is presented as operational context that sits next to the clinical domains and informs how a monitor reads them, but never as a tier and never as a worklist-driving flag on its own. It answers “what was this participant’s hemodynamic state around the visit,” not “is this an abnormality of severity X.”

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

Two doors to the same room. The lab-shift grid (this section) and the AE incidence matrix in AE & DLT are independent sources. A lab abnormality may appear as a banded shift here AND as a recorded AE there — or it may appear in only one. The two are NOT the same record and must not be summed. The monitor’s job is to deduplicate: confirm whether a banded lab shift corresponds to an already-recorded AE, a not-yet-recorded one, or a clinically-not-significant value that needs no AE at all. The grid is a screening prompt to check the AE record, not a second AE count. Treating it as additive double-counts and inflates apparent incidence.

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.

The one rule that governs this whole section. The dashboard NEVER makes the escalation decision. It reads the planned cohort size from the protocol design, displays the SRC-adjudicated DLT count, and labels which 3+3 branch that count satisfies (for example “2 of 6 → MTD-exceeded TRIGGER”). That label is a prompt to convene, not an action. Escalation, expansion, de-escalation, MTD declaration, and dose-decision are SRC determinations recorded outside this tool. A screenshot of this ladder is not a dose decision and must never be filed as one.

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.

QuantityOriginDashboard’s role
TEAE flag (treatment-emergent: onset on/after first dose)Deterministic rule on recorded onset date vs first-dose dateDerives by auditable rule
3+3 state label (trigger / decision-pending branch)Deterministic rule on planned N + adjudicated DLT countDerives by auditable rule
DLT (yes/no, which event)SRC adjudication against protocol DLT definitionDisplays only
Causality / relationship to study drugInvestigator-recorded assessmentDisplays only
Seriousness (ICH E2A criteria)Investigator/PV-recorded assessmentDisplays only
CTCAE grade on a reported AEInvestigator-assigned per CTCAE v5Displays only
Reported AE incidence table, MTD, RP2DValidated SDTM/ADaM pipeline + SRCNever produced here
A note on the word “grade.” Elsewhere in this dashboard — in the Labs & Vitals shift grid, for instance — a “CTCAE band” is a deterministic screening band placed on a single lab value, not an adjudicated AE grade. In this section the grade shown in the AE matrix is the investigator-assigned CTCAE v5 grade on a reported adverse event. Same vocabulary, two different objects. The matrix shows recorded AE grades; the lab grid shows screening bands. Do not pool them.

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.
Grade-5 is structurally zero. This is synthetic illustrative data with no death and no Grade-5 event anywhere. The Grade-5 column exists so the reader can see that it is empty — the absence is part of the teaching, and it keeps the matrix shape honest against a real CTCAE table. If you ever see a non-zero Grade-5 cell here, the data has been tampered with.

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 A — severe but not serious. A Grade-3 (severe) laboratory or symptomatic AE that resolves with supportive care and meets no E2A criterion is severe, not serious. The matrix will show it in a Grade-3 cell; the seriousness flag stays off. A high grade does not automatically promote an event to serious.

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:

  1. Treat 3 participants at a dose. 0/3 DLTs → the design permits escalation to the next dose (SRC decides).
  2. 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.
  3. ≥2/3 DLTs at first pass → dose exceeded; the SRC typically declares the prior dose the MTD after expanding/confirming it.
DLT window = 28 days. A participant is “evaluable for DLT” only after completing the protocol-defined DLT observation window (here 28 days) or experiencing a DLT within it. The “evaluable” count on each rung reflects this. A cohort can be fully enrolled yet not fully evaluable — the ladder shows both numbers so you never mistake enrollment for assessability.

Planned N is read from the design — C3 was designed N=6

Planned N is a protocol fact, not a dashboard inference. The ladder reads each cohort’s planned size from the study design. Cohort 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.

The label reads TRIGGER, not MTD exceeded. The dashboard computes that the count satisfies the MTD-exceeded branch of the 3+3 rule. It does not declare that the MTD has been exceeded, does not nominate the prior dose as the MTD, and does not stop or de-escalate the cohort. Those are SRC actions taken in a convened review, recorded in the validated system — not here. The trigger’s job is to make sure the SRC is convened, not to pre-empt it.

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.

Small-N instability, stated plainly. With 3–6 participants per cohort, a single adjudication flips a branch. “2 of 6” is 33% with a confidence interval that spans most of the unit interval. The ladder shows the count, not a rate, precisely so no one over-reads a stable-looking percentage. Every rate derived from these denominators carries the small-N caveat, and the ladder is a convening prompt — not an estimate of the true toxicity rate.

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.

How a monitor reads it. Clustering of events shortly after a dose, and especially inside the 28-day DLT window, is the temporal pattern that raises the question of drug-relatedness — it is how monitors reason, not how they conclude. Late, isolated, or pre-dose-anchored events read differently. The swimlane shows the timing; the investigator records the relationship. Read the C4 DLTs’ bars against the shaded window to see why they were adjudicated within it.

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.

Operational only — no PHI, no reportable safety numbers, no adjudication. Disposition reasons, deviation severities, and KRI bands shown here are recorded or banded, never adjudicated. The final disposition table, the audited deviation classification, and any reportable figure come from the validated pipeline and the clinical-operations system of record — not from this dashboard. This page is a navigation aid for monitoring, not a record.

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.).
Recorded reason, not adjudicated cause. “Discontinued — AE” is the reason captured in the operational record. It is not a causality assessment, not a regulatory determination, and not a statement that the AE was drug-related. The funnel displays the recorded category; the medical monitor and PV own the interpretation. The final, reportable disposition tabulation is a validated-pipeline output — this funnel is the in-flight monitoring view, which can change as data matures.

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.

A KRI band is a “look here” prompt, not a verdict. An amber or red tile means a metric crossed a pre-specified operational threshold and warrants human attention — it does not assert that quality is compromised, that a site is non-compliant, or that any safety conclusion follows. The band routes attention; the central monitor investigates and decides. KRIs are operational-quality signals and must never be read as clinical-safety signals — those live in the safety sections and are owned by the medical monitor.
Small denominators wobble. With 22 participants and 3–6 per cohort, a single event can swing a rate-based KRI across a band boundary. The tiles show the count and the denominator alongside the band so a monitor can sanity-check whether a red is a real trend or one event against a tiny base. Treat band-crossings on small N as questions, not findings.

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.
How the dose-change case reads. 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 stateMeaningWhy it matters operationally
In-windowVisit occurred within the protocol-allowed windowEndpoint timing intact
Out-of-windowVisit occurred, but outside the allowed windowThreatens PK / ECG / NCA validity (see below)
MissedVisit did not occurPossible missing safety labs → route to a human
Out-of-window is not cosmetic — it can invalidate the science. Early-phase endpoints are timing-dependent. A PK sample drawn off-nominal corrupts the actual-time-vs-nominal-time relationship the NCA (non-compartmental analysis, computed in the validated tool — Phoenix WinNonlin, never here) depends on; an ECG read off-schedule disturbs concentration-QTc pairing. The matrix surfaces out-of-window cells so the analyst can decide whether a record needs actual-time handling, exclusion, or a protocol-deviation entry. The dashboard flags the timing; the PK scientist and statistician decide the analytic consequence.
A missed visit is never “fine” — it routes to a human. A missed visit can mean missed safety labs, which means the deterministic safety backbone has nothing to evaluate for that timepoint — an absence of a flag is not evidence of safety. The matrix shows the gap precisely so it is investigated, not silently treated as a clean record. Silence from missing data must be escalated, never interpreted as reassurance.

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:

ColumnWhat it showsSortable
ParticipantThe participant id (e.g. CP101-014) — click anywhere on the row to open the evidence packetyes
Cohort · doseCohort C1–C5 and the assigned dose level (10/30/60/120/200 mg)yes
Sex / AgeDemographics for context — never an identity-narrowing field, never a tier inputno
Peak ALTWorst on-treatment ALT ×ULN (the eDISH x-axis value)yes
Peak TBiliWorst on-treatment total bilirubin ×ULN (the eDISH y-axis value)yes
Max QTcFWorst on-treatment QTcF (ms); a (watch) annotation marks the 450–480 band that is not an action tieryes
TEAECount of treatment-emergent AEs (the one AE quantity the dashboard derives; seriousness and grade are recorded, not derived)yes
Screening flagsPer-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 014 to jump straight to CP101-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.
How to use it in a stand-up. Start with Flag state → Has RED to get the irreducible action list (this should agree, participant-for-participant, with the RED rows of the Overview worklist — they are computed from the same flags). Then switch to Clear / watch only and read it as a second list: these are the participants the backbone is deliberately not escalating, and you should be able to say why for each one.

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-012 is 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.
Silence is a finding here, not a gap. When you confirm 009 and 011 are not on the RED list, you are not finding a hole in coverage — you are confirming the backbone refuses to manufacture an action flag out of a sub-threshold value. That refusal is what makes the flags it does raise worth a human’s time. A monitor still chooses to look at a watch-band trend; the dashboard simply does not page on it.

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-014 this 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-014 you 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.

The packet is a screening dossier, not a determination. Everything in it — the flags, the bands, the trajectories — is a prompt for a human on synthetic data. None of it is a diagnosis, an adjudication, or a reportable number. Vitals and hematology are shown for context, never as a tier. Relationship/causality, seriousness, expectedness, and DLT status are investigator/SRC-recorded and only displayed. Reported numbers come only from the validated tools (Phoenix WinNonlin, Pinnacle 21, the validated SDTM/ADaM pipeline) — never this packet. The medical monitor, SRC, and pharmacovigilance decide.

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.”
  5. 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.

Honest-by-design. The point of a planted signal is not to make the dashboard look clever — it is to make its boundaries legible. The AND-gate near-miss (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

ParticipantWhat it teachesHow it behaves on the board
CP101-014The AND-gate fires — a Hy’s-Law screening position, with a MIXED (not hepatocellular) R-ratio twistRED on eDISH; in the worklist; adjudicated DLT; serious related hepatobiliary AEs; discontinued (AE)
CP101-009The AND-gate near-miss — ALT without bilirubin (Temple’s Corollary). Why one limb is not enoughGREEN on eDISH every visit; intentionally absent from the worklist despite a real Gr2 AE
CP101-018An on-treatment QTcF RED — but read the baseline firstQTcF 503 ms RED in the worklist; baseline 462 already watch-band (not a drug effect)
CP101-006An AMBER QTcF with the same baseline caveatQTcF 486 ms AMBER; baseline 453 watch-band
CP101-013The second C4 DLT — how the 3+3 trigger crossesAdjudicated DLT; with 014 → 2/6 in C4 → MTD-exceeded TRIGGER
CP101-010A single DLT in a cohort — the 1-DLT branchAdjudicated DLT; 1/6 in C3; AMBER "SRC decides" state
CP101-011Multivariate-only — coordinated drift, every univariate value sub-threshold. The deterministic backbone correctly never firesGREEN/watch on every check; absent from the worklist — correctly, because no single threshold is crossed
CP101-012A milder ambiguous co-drift — the gradient next to 011GREEN/watch on every check; also correctly silent
CP101-003A missed visit — operational gap, not a clinical signalHatched cell on the heatmap and compliance matrix; routed to a human, never "fine"
CP101-020A protocol dose change — several labs shift at once but stay sub-thresholdGREEN 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.

Approved language, even on the case that fires. 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.

The silence is the teaching point. 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.

This is the limit of univariate, threshold-based screening — and it is shown honestly. Coordinated multi-organ drift that stays below every individual threshold is, by construction, invisible to a screen that fires only when a pre-specified univariate rule is crossed. The dashboard does not pretend otherwise: it puts 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.

Baseline-watch is shown distinctly for a reason. A high on-treatment QTcF on a participant whose baseline was already elevated is not, on its face, a drug effect — it may be the participant’s own electrophysiology. The dashboard renders these baseline points distinctly (a separate marker, not a clinical tier) so the medical monitor reads the delta in context. The flag still fires — an as-collected QTcF over 500 is a prompt no matter the baseline — but the board hands you the baseline in the same glance so you do not over-read it. As always, the as-collected value is pending ECG QC and central read; see Cardiac.

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 board computes the branch; it never decides. The dashboard derives which 3+3 branch the adjudicated DLT count satisfies — that is a deterministic, auditable arithmetic on counts the SRC already adjudicated — and labels it TRIGGER or decision-pending. It does not escalate, expand, de-escalate, or declare an MTD. The SRC decides. Note also that C3 and C4 were designed at N=6; C4 is not "expanded from 3." DLT relationship and adjudication are recorded assessments the dashboard only displays. See AE & DLT and Governance.

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.

How to run the guided tour. Start on Overview and note who is — and is not — in the worklist (009 and 011 absent is the checkpoint). Open Hepatic and read 014 and 009 on the eDISH scatter side by side. Open Cardiac and read 018/006 with their baselines. Open AE & DLT and confirm the C4 trigger. Then click each participant for its evidence packet — deterministic flags first, then the sparkline trajectories that show the path, then provenance. By the end you will have exercised every rule in Governance on a concrete person.

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.

Not part of the validated safety backbone. Everything in the other seven sections is pre-specified, deterministic, validated threshold logic. This tab is none of those things: it is an unsupervised view of how participants sit relative to one another in safety-feature space. Treat it as a conversation-starter for a human, not as a check. It never fires, never reports a number, and never decides — the medical monitor, SRC and covering biostatistician own every call exactly as before.

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.

Why H₀, and why in-browser. H₀ (connected components / clustering) is the rigorous, interpretable part for “how do the participants group” — it is exact single-linkage, computed in the browser on the same seeded cohort the rest of the dashboard uses, so the picture can never disagree with the validated panels' data. Higher-dimensional persistence (H₁ loops, voids) in a production build is precomputed offline with 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

PanelWhat it showsHow to read it
PCA embeddingA 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.
β₀ curveThe 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₀ barcodeOne 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 networkSynthetic 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.

What this view cannot do, by construction. It is sensitive to which features you include and how you scale them — change the feature set and the clusters move. It has no notion of a threshold, a protocol, or a diagnosis. It cannot tell you a participant is safe or unsafe; it can only tell you a participant is near or far from the others in the particular space you chose. So it generates hypotheses for a human to pursue with the validated tools — it never closes one. That is exactly why it is fenced off in its own tab with its own banner.

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

The dashboard is the window; the job is the engine. In production, the %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

DimensionIn this demoIn the production %tm_* job
Data sourceSeeded synthetic CP-101 (SEED 20260611, mulberry32), generated in-pageReal validated SDTM/ADaM from the study’s SDTM/ADaM pipeline (LB, EG, AE, DS, EX, VS …)
ThresholdsIllustrative (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 SLAsIllustrative 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 windows8 nominal visits, illustrative in/out-of-window logicThe protocol’s actual visit schedule and windows; missed/out-of-window driven by real EDC/CTMS dates
Reported numbersNone — every count is labelled a screening census, not a tableCome 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+3DLT flags are pre-seeded; the dashboard computes the 3+3 state onlyDLT 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
DeliveryA static viewer you openA scheduled job that runs, detects, packages an evidence bundle, and pages the on-call monitor / covering biostatistician (heartbeat + dead-man’s-switch watchdog)
IdentitySynthetic ids, no PHI, no kit/randomization codesReal 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:

  1. 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.
  2. 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).
Validation here is risk-based, proportionate to what the component can get wrong. The screening logic and its scheduler are validated because a missed page or a wrong flag has safety consequences; the presentation viewer is lower-risk because it produces no reportable number and adjudicates nothing — but it still must faithfully render the validated flag table and never invent a value the job did not emit.

Where the validated analysis tools own the answer

The monitoring job and any viewer screen; they never report. The PK/concentration-QTc analysis, the ICH E14 categorical table, central-read ECG intervals, AE incidence tables, the MTD declaration, and final disposition come from the validated tools — Phoenix WinNonlin, Pinnacle 21, and the validated SDTM/ADaM pipeline — under the SAP, reviewed by the people accountable for them. The %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).

FrameworkOne-line definitionWhat 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.
The through-line. Across every row, the dashboard screens — it prompts a human to look, using thresholds derived from these standards on synthetic data. It never determines, adjudicates, or reports. The regulated table, the causality call, the AE grade, the MTD, and the reported number are owned by the medical monitor, the SRC, pharmacovigilance, and the validated tools (Phoenix WinNonlin, Pinnacle 21, the validated SDTM/ADaM pipeline). For the rules that enforce this everywhere, see The governance model; for how it maps to the live job, see From demo to production.

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.

If you remember one answer from this page: every flag is a screening prompt for a human. The dashboard tells you where to look and helps you look well; the medical monitor, SRC, and pharmacovigilance make the determination. See Governance.