In active development · built MVP-first

From raw clinical signals to trusted, AI-ready data.

A governed medallion lakehouse that ingests messy, multi-source health data and turns it into three trusted outputs — analytics marts, an ML feature store, and a vector index for retrieval.

The problem

Healthcare data is the messiest data there is.

Many source systems, competing vocabularies, silent unit drift, PHI everywhere, and free text where coded values belong. Left unmodeled, it produces silently-biased analytics and unreliable models.

many source systemscompeting vocabulariesmg/dL ↔ mmol/L driftPHI everywherefree text where codes belong
The medallion

One pipeline, three consumption shapes.

Bronze → silver → gold, with a healthcare layer overlaid — the part a generic ETL project doesn't have.

Bronze
Raw & messy
FHIR / Synthea
Claims 837/835
Wearables · Kafka stream
PRO surveys
Clinical notes
Silver
De-identified & conformed
De-id · HIPAA Safe Harbor
Flatten FHIR resources
ICD-10 · SNOMED · LOINC · RxNorm
OMOP CDM + DQ contracts
Gold
Three trusted stores
Analytics martsdbt star + semantic layer
Feature storeFeast offline + online
Vector indexpgvector · RAG
de-identification at the silver boundary · standardized to OMOP CDM · DQ contracts gate every stage
Real, reproducible results — 600 synthetic patients, seeded
0.748
ROC-AUC · surgery-risk model, tracked in MLflow
0/14
Great Expectations checks pass — DQ gate in CI
0%
conditions coded to ICD-10 in silver (from 81.3%)
0
wearable events streamed — file == Kafka parity
Why three gold stores

Analytics, classical ML, and LLM/RAG each need a different shape of the same clean data.

Analytics marts

dbt (Kimball star) + MetricFlow

Dimensional fct_/dim_ models plus a semantic layer — one metric definition shared by BI, cohorts, and ad-hoc queries. The trusted serving layer.

Feature store

Feast · offline + online

20 time-windowed features across four source types. Online store for low-latency inference; offline for leakage-safe training joins. Both parity-checked.

Vector index

pgvector · bge-small 384-d

390 clinical notes indexed with HNSW cosine, TF-IDF fallback when Docker is down. Retrieval-only — it proves the data is AI-ready.

The healthcare layer

The part a generic ETL project doesn't have.

De-id at silver

PHI is tagged and access-gated at bronze; silver is the de-identified boundary — HIPAA Safe Harbor plus per-patient date-shifting to preserve temporal order.

Standard vocabularies

ICD-10, SNOMED CT, LOINC and RxNorm mapped into a recognizable OMOP Common Data Model on the way in.

DQ contracts

Validity, completeness, unit consistency, uniqueness and timeliness enforced as contracts at the silver gate — and the gate runs in CI, exiting non-zero on any violation.

Built with
DatabricksDelta + Unity CatalogdbtAirflowPySparkStructured StreamingKafkaFeastpgvectorMLflowGreat ExpectationsTerraform