Portiere¶
Local-first clinical data mapping with human-in-the-loop review — PHI never leaves your machine.
Portiere maps clinical source data to OMOP CDM, FHIR R4, HL7 v2, and OpenEHR through a 5-stage pipeline — profiling, schema mapping, concept mapping, ETL generation, and validation — running entirely on your own infrastructure. AI assistance (embeddings, reranking, optional BYO-LLM verification) is a feature you control, not a cloud dependency.
pip install "portiere-health[polars,quality]"
portiere quickstart # offline end-to-end demo
portiere doctor --assert-no-egress # prove nothing can leave the machine
Why Portiere¶
- Data sovereignty, verifiable. The no-egress guarantee is executable:
offline=Truehard-fails any remote-provider configuration, andportiere doctorreports the egress posture of every component. See the threat model and COMPLIANCE.md. - Human-in-the-loop by design. Confidence routing (auto / review / manual) plus a Streamlit review UI — the tool assists your terminologists; it doesn't pretend to replace them.
- Honest numbers. We publish benchmarks including configurations where we lose, with reproduction commands.
- No vendor lock-in. Generated ETL scripts (Spark/Polars/Pandas) run without Portiere installed.
- Value-level PHI scrubbing. Detect and scrub emails, phones, MRNs, national IDs, and dates in values — not just column names.
Start here¶
| I want to… | Go to |
|---|---|
| Run the demo | Quickstart |
| Set up SNOMED / CPT vocabularies (licensing) | Vocabulary setup |
| Understand where data can go | Threat model & data flow |
| Configure a local or BYO-LLM stack | LLM integration |
| Review mappings with my team | Mapping Review UI |
| See accuracy numbers | Benchmarks |
Docker¶
docker compose run --rm portiere quickstart
docker compose run --rm portiere profile-report /data/your.csv -o /data/report
The compose file sets PORTIERE_OFFLINE=true — the container is structurally
incapable of sending data out.