Alle Projekte

Case Study08

Praxisnetz Nürnberg Süd Terminplattform

Regionale Terminvermittlung für Arztpraxen mit fachbezogener Suche, sicherer Buchung und automatisierter Abrechnung

GesundheitswesenPraxisnetz Nürnberg Süd e.V.
Praxisnetz Nürnberg Süd Terminplattform, Ansicht 1
Ansicht 01

Partner

Praxisnetz Nürnberg Süd e.V.

Branche

Gesundheitswesen

Kerntechnologien

React · Express · PostgreSQL

Auf einen Blick

Für das Praxisnetz Nürnberg Süd e.V. hat DuoByte eine geschlossene Webplattform entwickelt, über die Mitgliedspraxen freie Termine untereinander anbieten und für ihre Patienten buchen. Jede Buchung löst Bestätigungen an beide Praxen und zwei PDF-Rechnungen mit fortlaufender Nummer aus. Zugang erhalten Mitglieder erst nach bestätigter E-Mail-Adresse und Freigabe durch einen Administrator.

Unsere Rolle: DuoByte hat die Plattform als Gesamtsystem entwickelt: Datenmodell, Backend, Frontend, Rechnungserstellung und automatisierte Bereitstellung.

Projektarbeit

Von der Anforderung zur belastbaren Lösung.

Wie das Projekt entstanden ist: vom Kontext und den Anforderungen über die Umsetzung bis zum heutigen Stand.

01

Ausgangslage

Ein Verbund aus Haus- und Fachärzten im Nürnberger Süden

Das Praxisnetz Nürnberg Süd e.V. wurde 1998 als Verein gegründet und verbindet Haus- und Fachärzte sowie weitere Gesundheitsanbieter in Nürnberg und Umgebung. Der Verein organisiert Fortbildungen und Qualitätszirkel, entwickelt gemeinsame Versorgungspfade und arbeitet mit Kliniken, Apotheken und anderen Netzen zusammen.

Auf der Terminplattform treffen Arztpraxen, Psychotherapeuten, Medizinische Versorgungszentren (MVZ) und Krankenhäuser aufeinander. Termine zwischen diesen Einrichtungen wurden bisher telefonisch oder über einzelne persönliche Kontakte abgestimmt. Ob eine andere Praxis gerade Kapazität frei hatte, ließ sich so nur durch Nachfragen herausfinden.

02

Herausforderung

Freie Termine teilen, ohne Doppelbuchungen und mit sauberer Abrechnung

Gefragt war eine geschlossene Plattform, auf der Praxen freie Zeitfenster veröffentlichen und andere Mitglieder sie für konkrete Patienten buchen. Dafür braucht es klare Regeln: Ein Termin darf nur einmal vergeben werden, auch wenn zwei Praxen im selben Moment zugreifen. Eine Praxis darf keine überlappenden Zeitfenster anbieten und ihre eigenen Termine nicht selbst buchen.

Jede erfolgreiche Vermittlung ist außerdem abrechnungsrelevant. Für beide beteiligten Praxen muss eine eigene Rechnung mit fortlaufender Nummer entstehen, deren Inhalt sich nachträglich nicht mehr verändert, auch wenn eine Praxis später ihre Adresse oder Bankverbindung aktualisiert.

Weil die Plattform Patientennamen und Bankdaten der Praxen verarbeitet, darf nicht jeder mit einer E-Mail-Adresse Zugang erhalten. Neue Mitglieder müssen ihre Adresse bestätigen und vom Netz freigegeben werden. Patientennamen eines gebuchten Termins sehen nur die beiden beteiligten Praxen, eine Rechnung nur ihr Empfänger.

03

Lösung

Terminbörse, Buchung und Rechnungsstellung in einer Webanwendung

Praxen legen freie Termine mit Datum, Uhrzeit und Dauer an und ordnen ihnen eine oder mehrere Terminarten zu. Neben den zentral gepflegten Terminarten kann jede Praxis eigene Bezeichnungen vergeben, etwa „Akutsprechstunde“. Das System speichert sie als persönliche Vorlagen für spätere Termine.

Die Terminsuche zeigt alle offenen, zukünftigen Termine anderer Praxen als Liste, Wochen- oder Monatsansicht. Gefiltert wird nach Zeitraum, Uhrzeitfenster, Fachrichtung, Terminart oder Freitext. Zu jedem Angebot sieht die suchende Praxis Namen, Fachrichtungen und Kontaktdaten der anbietenden Praxis.

Beim Buchen gibt die Praxis den Namen des Patienten an und wählt eine der vom Anbieter freigegebenen Terminarten. Beide Seiten erhalten sofort eine E-Mail mit Datum, Uhrzeit, Terminart und den Kontaktdaten der jeweils anderen Praxis, die Rechnung hängt als PDF an. Unter „Meine Termine“ sieht jede Praxis ihre angebotenen und gebuchten Termine, ihre Rechnungen liegen in einem eigenen Bereich zum Download.

Wird ein Mitglied deaktiviert, sagt das System dessen offene Termine automatisch ab. Die Praxis erhält per E-Mail eine Excel-Liste ihrer bereits gebuchten Termine mit den Kontaktdaten der Gegenseite, damit keine Absprache verloren geht. Für die Netzverwaltung gibt es eigene Funktionen:

  • Freigabe neuer Mitglieder, sobald deren E-Mail-Adresse bestätigt ist
  • Anlegen von Mitgliedern mit Willkommens-E-Mail und temporärem Passwort
  • Pflege von Fachrichtungen, Terminarten und Stammdaten des Rechnungsstellers
  • Deaktivieren und Reaktivieren von Mitgliedskonten
04

Umsetzung

Transaktionen gegen Doppelbuchungen, geprüfte Eingaben und Container-Deployment

Das Frontend ist eine React-19-Anwendung mit TypeScript, Vite und Tailwind CSS, TanStack Query hält die Daten aus der API aktuell. Das Backend basiert auf Express 5 und TypeScript, Prisma bildet das Datenmodell in PostgreSQL ab. Jede Anfrage wird mit Zod-Schemas geprüft, bevor sie die Geschäftslogik erreicht.

Die Buchung ist als bedingte Aktualisierung umgesetzt: Die Datenbank setzt einen Termin nur dann auf „gebucht“, wenn er in diesem Moment noch offen ist. Greifen zwei Praxen gleichzeitig zu, erhält die zweite eine verständliche Meldung statt einer Doppelbuchung. Beim Anlegen prüft das Backend, ob sich der neue Termin mit offenen oder gebuchten Terminen derselben Praxis überschneidet.

Rechnungsnummern stammen aus einem Zähler pro Kalenderjahr, der in derselben Datenbanktransaktion hochgezählt wird, in der die Rechnung entsteht. Jede Rechnung speichert eine Momentaufnahme von Empfänger- und Ausstellerdaten, das mit PDFKit erzeugte PDF liegt unverändert in der Datenbank. Eine Eindeutigkeitsregel verhindert, dass für dieselbe Buchung und Rolle eine zweite Rechnung entsteht.

Die Rechnung weist den Einzug per SEPA-Lastschrift aus und zeigt die IBAN nur maskiert, bei der Registrierung prüfen Frontend und Backend deutsche IBANs anhand ihrer Prüfziffer. Passwörter liegen nur als Hash vor, kurzlebige Zugriffstoken werden über Refresh-Token erneuert, die bei jeder Erneuerung ausgetauscht werden. Anmeldung, Passwort-Reset und Adresssuche sind durch Rate Limits begrenzt, und die Adressvervollständigung über OpenRouteService läuft über das Backend, sodass der API-Schlüssel nie im Browser landet.

Ein mehrstufiger Docker-Build erzeugt ein gemeinsames Image für Frontend und Backend, beim Start spielt der Container ausstehende Prisma-Migrationen ein. GitHub Actions verteilt Änderungen getrennt auf eine Entwicklungs- und eine Produktivumgebung, Nginx übernimmt TLS und Reverse Proxy. Die Logs erfassen Methode, Pfad, Status und Antwortzeit, aber keine Anfrageinhalte.

05

Ergebnis

Freie Termine des Netzes an einem Ort, Abrechnung inklusive

Mitglieder des Praxisnetzes sehen freie Termine anderer Praxen an einem Ort und buchen sie direkt für ihre Patienten. Bestätigung und Rechnung entstehen mit der Buchung selbst, ohne zusätzlichen Schritt in der Verwaltung.

Die Netzverwaltung steuert Mitgliedschaften, Fachrichtungen, Terminarten und Rechnungsstellerdaten in derselben Oberfläche. Datenmodell, Migrationen und Deployment sind versioniert im Repository abgelegt, sodass sich die Plattform nachvollziehbar weiterentwickeln lässt.

Systemarchitektur

Die technische Basis, klar gegliedert.

Technologien wurden passend zur Aufgabe, zum Betriebsmodell und zur langfristigen Wartbarkeit kombiniert.

01

Frontend

React 19TypeScriptViteTailwind CSSTanStack Query
02

Backend

Express 5TypeScriptPrismaZodPDFKitExcelJS
03

Datenbank

PostgreSQL
04

Integrationen

OpenRouteServiceSMTP
05

Infrastruktur

Docker ComposeNginxGitHub Actions

Weiter entdecken

Nächste Case Study

Komplify BFSG-Compliance-Plattform

Komplify BFSG-Compliance-Plattform

Ihr Projekt

Aus einer komplexen Aufgabe wird ein klarer nächster Schritt.

Erzählen Sie uns, was Ihr System leisten muss. Wir bringen Struktur in Anforderungen, Architektur und Umsetzung.

Projekt besprechen