v0.2.0 — FHIR R4 Simulator

ePA 3.1.3 Demo

FHIR R4 Aktensystem-Simulator für die elektronische Patientenakte nach gematik-Release ePA 3.1.3 mit dgMP, AMTS-Prüfung, IDP-Authentifizierung und Live-Dashboard

DEMO — Nicht für produktiven Einsatz
pip install -r requirements.txt && python main.py
🔥

FHIR R4 Server

Vollständiger In-Memory FHIR R4 Server mit Search, Read, Create und Delete. CapabilityStatement und $everything-Operation.

💊

Elektronische Medikationsliste

eML als FHIR Bundle mit MedicationStatements. PZN-Codes, Dosierung, Verordner und Wechselwirkungen.

👤

IDP-Simulation

OpenID Connect Discovery, Challenge/Token-Flow mit Bearer-Token. Rollen: Versicherter, Leistungserbringer, Kostenträger.

📊

Live-Dashboard

Echtzeit-Updates via SSE. Ressourcen-Übersicht, Medikationstabelle, Request-Log und Test-Aktionen.

📄

Demo-Datensatz

Realistischer FHIR-Datensatz: Patient, Practitioners, Organizations, Conditions, Documents, Allergies mit ICD-10-GM und PZN.

🔒

Opt-out Modell

Emuliert das ePA 3.0 Opt-out-Prinzip: Automatische Anlage für alle Versicherten, Widerspruch jederzeit möglich.

💉

Digital gestützter Medikationsprozess (dgMP) nach ePA 3.1.3

E-Rezept (MedicationRequest), Abgabe in der Apotheke (MedicationDispense) und elektronischer Medikationsplan (eMP) über FHIR-Referenzen verknüpft.

⚠️

AMTS-Prüfung mit Warn-Einblendungen

Demo-Regelwerk für Wechselwirkungen und Allergie-Kreuzreaktionen. Treffer erscheinen live als Einblendung im Dashboard.

🔍

Volltextsuche über Dokumente

_content-Parameter durchsucht alle FHIR-Ressourcen eines Typs, unabhängig von Groß-/Kleinschreibung.

Architektur

  Browser (Dashboard)
  ├── SSE (/api/events)              ← Live-Updates
  ├── REST (/api/status, /api/log)   ← Dashboard-Daten
  ├── AMTS (/api/amts)               ← Arzneimittel-Pruefung (dgMP)
  ├── FHIR (/fhir/*)                 ← FHIR R4 Endpunkte
  └── Auth (/auth/*)                 ← IDP-Simulation
            │
  ┌─────────▼───────────────────────────────────┐
  │       FastAPI (main.py)          Port 8700   │
  │                                              │
  │  ┌──────────────┐  ┌─────────────────────┐  │
  │  │  FhirServer  │  │    IDP-Simulator     │  │
  │  │  (server.py) │  │    (idp_sim.py)      │  │
  │  │              │  │                      │  │
  │  │  In-Memory   │  │  Challenge/Token     │  │
  │  │  FHIR Store  │  │  OpenID Connect      │  │
  │  └──────┬───────┘  └──────────────────────┘  │
  │         │                                    │
  │  ┌──────▼───────┐  ┌─────────────────────┐   │
  │  │  demo_data   │  │  amts.py            │   │
  │  │  Patient,    │  │  Wechselwirkungs-   │   │
  │  │  Condition,  │  │  und Allergie-      │   │
  │  │  Medication  │  │  Kreuzreaktions-    │   │
  │  │  Request,    │  │  Regelwerk (dgMP)   │   │
  │  │  Dispense …  │  └─────────────────────┘   │
  │  └──────────────┘                             │
  └───────────────────────────────────────────────┘

Dashboard

Patient
┌──────────────────────┐
│ Max Mustermann │
│ KVNR: X110501499 │
│ geb. 15.03.1985 │
│ IKK classic │
└──────────────────────┘

Statistiken
17 Ressourcen │ 7 Typen
4 Medikamente │ 0 Sessions
Patienten-Info und Statistiken
FHIR Ressourcen
┌────────┐ ┌────────┐
│Medicati│ │Conditi │
│on (4) │ │on (3) │
└────────┘ └────────┘
┌────────┐ ┌────────┐
│Documen │ │Allergy │
│t (4) │ │ (1) │
└────────┘ └────────┘
FHIR Ressourcen-Grid
eML — Medikationsliste

Metformin 1000mg
PZN: 01234567 │ 1-0-1
Ramipril 5mg
PZN: 02345678 │ 1-0-0
Ibuprofen 400mg
PZN: 03456789 │ bei Bedarf
Pantoprazol 20mg
PZN: 04567890 │ 1-0-0
Elektronische Medikationsliste

FHIR R4 Endpunkte

MethodePfadBeschreibung
GET/fhir/metadataCapabilityStatement
GET/fhir/Patient/$everythingAlle Daten eines Patienten
GET/fhir/MedicationStatement?status=activeeML (Medikationsliste)
GET/fhir/Patient/$medication-planeMP (Medikationsplan, dgMP)
GET/fhir/{type}?_content=…Volltextsuche über Ressourcen
GET/fhir/{type}FHIR Search mit Query-Params
GET/fhir/{type}/{id}FHIR Read
POST/fhir/{type}FHIR Create
DELETE/fhir/{type}/{id}FHIR Delete

IDP-Authentifizierung

MethodePfadBeschreibung
GET/.well-known/openid-configurationOpenID Connect Discovery
POST/auth/challengeChallenge erstellen (Nonce + Scopes)
POST/auth/tokenToken ausstellen (KVNR + Rolle)
GET/auth/sessionsAktive Sessions auflisten

Die IDP-Simulation emuliert den gematik Identity Provider. Tokens sind 5 Minuten gültig. Drei Rollen: versicherter, leistungserbringer, kostentraeger.

Demo-Datensatz (FHIR R4)

RessourceAnzahlDetails
Patient1Max Mustermann, KVNR X110501499, IKK classic
Practitioner2Dr. Becker (Allgemeinmedizin), Dr. Schneider (Innere Medizin)
Organization4IKK classic, IKK Kliniken Köln, Hausarztpraxis, Adler-Apotheke Köln
MedicationStatement4Metformin, Ramipril, Ibuprofen, Pantoprazol (mit PZN)
MedicationRequest1E-Rezept Ibuprofen 400mg (Dr. Schneider)
MedicationDispense1Abgabe durch Adler-Apotheke Köln (auf das E-Rezept bezogen)
Condition3Diabetes E11.9, Hypertonie I10.90, Kreuzschmerz M54.5
DocumentReference4Aufnahmebefund, Labor, Entlassbrief, Impfdoku (KDL-Codes)
AllergyIntolerance1Penicillin (schwere anaphylaktische Reaktion)

Tech-Stack

Python 3.10+ FastAPI Uvicorn FHIR R4 SSE OpenID Connect httpx

Systemvoraussetzungen

KomponenteMinimumBemerkung
Python3.10+Im PATH
BetriebssystemWindows 10/11, Linux, macOS—
Port8700Auto-Fallback auf 8701
BrowserChrome, Firefox, EdgeFür Dashboard

ePA 3.0 vs. ePA 2.0

MerkmalePA 2.0ePA 3.0
DatenformatProprietäre DokumenteFHIR R4
AnlageOpt-in (freiwillig)Opt-out (automatisch)
MedikationMedikationsplan (PDF)eML (strukturiert, FHIR)
ZugriffDokumentenbasiertRessourcenbasiert (FHIR REST)
AuthentifizierungKarte + PINIDP + Token
VerschlüsselungKonnektor-basiertVAU (Vertrauenswürdige Ausführungsumgebung)