One Source of Truth
One trial. Five systems. No shared IDs.
Cross-system answers for clinical trial operations — every number traceable to the source row it came from.
HackRU Fall 2026
Regeneron: Improve Clinical Trials
Dhruv Sethi, Ritvik Sajeev, Nakul Mittal, Tanmay Agarwal
One hospital. Five systems. Five identifiers.
None of them match, so no question can cross all five.
2
EDC — TRIAL DATABASE
SITE-0701
CTMS — SITE MANAGEMENT
701
IRT — DRUG SUPPLY
S701
SAFETY DATABASE
PT_01-701-1015
FINANCE
AHEPA Gen Univ Hosp of Thessal
THE SAME REAL HOSPITAL
"AHEPA" General University Hospital
Thessaloniki, Greece
1 of 17 trial sites
"Which sites have an open safety case AND low drug supply AND overdue payments?"
Three weeks of manual spreadsheet matching — and the answer still isn't traceable.
Concordance · HackRU Fall 2026
Who this is for
Four roles inside clinical development, each needing a different slice of the same data.
3
Study Manager
Owns trial delivery. Needs the cross-system view: which sites are in trouble, and why.
Site Monitor
Oversees site conduct and drug supply. No business seeing financial terms.
Finance Analyst
Tracks site payments. Must not see patient or safety data at all.
Data Steward
Owns identity matching and data quality. Sees structure, not patient detail.
Role changes four things: which screens exist, which questions can be asked, which columns return, and how far lineage can be traced.
Concordance · HackRU Fall 2026
What Concordance does
Five disagreeing feeds in. One canonical, auditable view out.
4
01
Ingest
Five system exports, every row stamped with its source file and row number at read time
02
Harmonise
Identifiers resolved deterministically where possible, by fuzzy match where not, by a human where neither is safe
03
Graph
Sites, patients, aliases and one node per source row, so lineage is a single hop
04
Answer
Cross-system questions in plain English, with the generated SQL and the source rows both on screen
Concordance · HackRU Fall 2026
Measured, not asserted
We corrupt the feeds deliberately before loading and commit the answer key to the repository.
5
AUTO-MATCHED
96%
ESCALATED TO A HUMAN
3
DEFECTS CAUGHT
11 / 11
FAIR CRITERIA
10 / 10
DEFECTS PLANTED BEFORE INGEST
100% auto-matching would be the weaker result: a matcher that never escalates has not shown it can recognise ambiguity.
Concordance · HackRU Fall 2026
Identity resolution, with a human where it matters
A wrong site merge silently corrupts every downstream number, and nobody finds out.
6
Automatic
≥ 0.95 confidence
Deterministic ID normalisation and high-confidence name matches. 67/70 identifiers.
Review queue
0.60 – 0.95
Both records side by side with the score. A person decides in seconds. 3 of 70.
No match
< 0.60
Flagged as an orphan and raised on the data health screen.
A REAL CASE FROM THE REVIEW QUEUE
Finance: AHEPA Gen Univ Hosp of Thessal
CTMS: "AHEPA" General University Hospital of Thessaloniki
0.759
confidence
Concordance · HackRU Fall 2026
Every number traces back. Every decision is on the record.
Lineage is graph structure, not a separate system. The audit log is append-only.
7
LINEAGE
Every source row becomes a node, stamped with its file and row number at ingest. Entities carry derived_from edges back to the rows that produced them.
~2,000 nodes · ~3,500 edges
Site 701 assembled from 301 source rows
Known by 4 identifiers across 4 systems
AUDIT TRAIL
Every decision records who made it and when. A revert supersedes the original rather than deleting it — in regulated work you cannot erase a record of who decided what.
Sana Qureshi (Data Steward)
revert
in effect
Admin (Study Manager)
confirm
superseded
Concordance · HackRU Fall 2026
Where the model belongs and where it does not
Gemini writes the query. The database returns the numbers. No figure passes through the model.
8
Question
plain English
→
Gemini
writes SQL only
→
DuckDB
returns the numbers
→
Screen
with the SQL shown
WHAT IT GETS RIGHT
WHAT IT REFUSES
The schema Gemini receives is already filtered by role, so it cannot write a query against data the user is not cleared to see.
Concordance · HackRU Fall 2026
Access control lives in the service layer
A denied column is removed before the response is built, so it never reaches the browser.
9
web/
React, Vite, Tailwind, Renders only, never reads the database
api.py
FastAPI, Translates HTTP to Python, No rules of its own
services.py
Business logic and access control. Every function takes a role.
repository.py
The only module that touches stored data
database/
Raw feeds, harmonised output, knowledge graph, FAIR catalog
Storage is isolated behind one module, so moving from files to Postgres is a single file and an environment variable.
Concordance · HackRU Fall 2026
Real public data where it exists
Synthetic where no public source publishes it — documented either way.
10
REAL
EDC — patients, adverse events
CDISC SDTM/ADaM pilot study CDISCPILOT01 · 306 patients, 1,191 adverse events
REAL
Facility names
ClinicalTrials.gov API v2 · 109 facilities across 47 recruiting studies
REAL
Adverse event terminology
openFDA FAERS · 80 MedDRA reaction terms by reporting frequency
SYNTHETIC
IRT, finance, operational fields
Derived from the same sites, so a correct answer exists and can be measured
No individual is identifiable: the clinical data is de-identified and every person name is generated.
The identifier divergence is introduced deliberately. No public dataset publishes that inconsistency. Iit can be measured against a known answer key.
Concordance · HackRU Fall 2026
Built to the field’s own standards
Not invented conventions. The ones clinical data management already uses.
11
FAIR
Wilkinson et al. 2016, Scientific Data 3:160018
Persistent identifiers, column-level metadata, per-dataset licence and provenance, a searchable catalog. Metadata stays visible where the data itself is restricted.
10 / 10 criteria met
CDISC SDTM
Clinical Data Interchange Standards Consortium
Clinical feeds map to SDTM domains — DM for demographics, AE for adverse events — rather than ad hoc column names.
2 domains mapped
OHDSI / OMOP
The Book of OHDSI, chapter 6
Identity resolution follows the source_to_concept_map pattern and is exposed in that shape, so an OMOP practitioner reads it without translation.
70 mappings exposed
Concordance · HackRU Fall 2026
What's real, what isn't, and what's next
Stated plainly, because a reviewer will find these anyway.
12
HONEST LIMITATIONS
NEXT
Live demo
one-source-of-truth-877947191010.us-east1.run.app
Repository
github.com/sethidhruv188/one-source-of-truth-HackRU-2026
MIT licensed · Runs from a clean clone · Deployed on Cloud Run
Concordance · HackRU Fall 2026