TRIALMON - Participant-Safety Screening

A visual, runnable guide to the safety-screening console

Every panel is a SCREENING lens. It flags a position for the medical monitor / SRC / DSMB. It never reports a clinical number and never adjudicates a DLT or a Hy’s-Law case. Reported safety numbers come from the validated safety database.

Run / share / read / build. This page shows the console, the run & build the Shiny app page lets you click the eDISH plot to open an evidence packet, the dashboard is a shareable snapshot, and the run-and-build page shows how it is made. Synthetic, no PHI (values are xULN multiples).

The eDISH AND-gate - why it is not just “high ALT”

The Hy’s-Law screen fires only when transaminase and bilirubin are both up. A high ALT alone is not a Hy’s position, and the screen must not cry wolf on it.

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#28344f','primaryTextColor':'#eef2fb','primaryBorderColor':'#7d9bd6','lineColor':'#aab8d6','clusterBkg':'#161d33','clusterBorder':'#3a476a','tertiaryColor':'#20406a','tertiaryTextColor':'#eef2fb','tertiaryBorderColor':'#7d9bd6','secondaryColor':'#20406a','secondaryTextColor':'#eef2fb'}}}%%
flowchart LR
  A{"ALT or AST<br/>&gt; 3x ULN?"} -->|no| G["GREEN"]
  A -->|yes| B{"TBili<br/>&gt; 2x ULN?"}
  B -->|no| N["ALT-only<br/>near-miss, GREEN"]
  B -->|yes| R["Hy's-Law position<br/>RED, notify monitor"]

In the synthetic data, CP101-014 (ALT 5.6x, TBili 3.1x) sits in the RED quadrant, while CP101-009 (ALT 4.2x, TBili 1.6x) is the near-miss the AND-gate correctly keeps green.

The live screens - computed from the data

Everything below is computed from three synthetic CSVs you can open directly: participants.csv (the per-participant screens, xULN multiples), aes.csv (the adverse-event rows), and cohorts.csv (the dose ladder). Edit those (or run the app) and these panels move.

RED
Safety status
22
Participants
2
RED flags
2
AMBER flags
1
Grade >=3 AE
2
SAEs

Severity Participant / cohort Screen Value Rule
RED CP101-014 eDISH / Hy’s-Law screen ALT 5.6x & TBili 3.1x (R 4.0 mixed) (ALT or AST >3x) AND TBili >2x
RED CP101-018 QTcF (ICH E14 screen) 503 ms, d41 QTcF >500 or dQTcF >60 ms
AMBER CP101-006 QTcF (ICH E14 screen) 486 ms, d33 QTcF >480 or dQTcF >30 ms
AMBER C4 cohort Adjudicated DLT vs 3+3 1/6 evaluable 1 DLT in cohort

Run it - and change it

shiny::runApp("sasr_monitoring_wiki/trialmon_shiny")
# needs: install.packages(c("shiny","bslib","ggplot2"))

Click a point on the eDISH plot to open that participant’s evidence packet (eDISH, QTcF, AEs, disposition, the trajectory). The run-and-build page shows how it is built from R/logic.R.

Going live: R/gen_data.R writes the CSVs so you can see the shape. Replace them with a read-only export from the validated safety database / ADaM (same columns). The dashboard never becomes the source of a number; it points a reviewer at a position.

The other formats

Mode Artifact
Run Run & build the Shiny app
Share (no R) Dashboard
Build Run-and-build walkthrough

Synthetic, no PHI. The tool flags; the medical monitor / SRC / DSMB decide.