Zum Inhalt springen
megapromotingLassen Sie uns sprechen

Lösungen · Zahnärztliche Kliniken

Die Dienstleistungsliste mit Kennzeichnung der Deckung durch die Pflichtversicherung, von der Rezeption bearbeitbar — kein per E-Mail gesendetes PDF mit Preisen.

Eine Website für eine Zahnklinik wird an einem einzigen Punkt gemessen: ob der Mensch die Dienstleistung findet, die er braucht, mit ihrem Preis und ihrer Einheit — pro Zahn, pro Kiefer, pro Sitzung — und ob er weiß, ob sie in die Versicherung fällt oder nicht. Der Rest ist Dekor. Wir bauen die Struktur, die das trägt, und das Panel, aus dem das Personal es selbst ändert.

Bereits gebautLucrarea se poate verifica din exterior chiar acum: datele publice ale unui centru stomatologic raional pe care îl administrăm sunt servite ca fișier structurat — 89 de servicii, fiecare cu categorie, subcategorie, denumire, preț, unitate de măsură și un indicator de eligibilitate pentru asigurarea obligatorie, dintre care 27 marcate ca eligibile; 7 categorii și 10 subcategorii, verificate de noi pe 06.09.2026. A doua parte a dovezii e securizarea, cu diff în istoric: la preluare, parola de administrator era comparată în browser și ajungea în pachetul JavaScript public, iar scrierile pe interfața de programare se puteau face de oricine de pe internet. Precizarea corectă, ca să nu ne atribuim mai mult decât e al nostru: prima variantă a site-ului nu e a noastră. Contribuția care se poate arăta cu diff e preluarea, securizarea, tipurile, integrarea continuă și igiena dependințelor.

Eine Zahnklinik verkauft keine „Dienstleistungen“. Sie verkauft eine sehr lange Liste von Tarifpositionen mit Einheiten, die mit nichts aus einem anderen Bereich vergleichbar sind: pro Zahn, pro Kiefer, pro Extraktion, pro behandeltem Fall, pro Sitzung, pro Besuch, pro Eingriff. Der Mensch, der im Internet sucht, sucht nicht die Klinik, sondern seine Position: wie viel eine Extraktion kostet, ob pro Zahn oder pro Besuch bezahlt wird, ob sie von der Versicherung gedeckt ist. Eine Website, die darauf antwortet, ist nützlich; eine, die eine Seite „Preise“ mit angehängtem PDF hat, nicht.

Das zweite, was die Realität einer Klinik verlangt, ist, dass die Liste ohne Programmierer änderbar ist. Tarife ändern sich, Ärzte wechseln, der Bereitschaftsdienst wird im Winter anders angekündigt. Wenn jede Änderung über einen Entwickler läuft, bleibt die Liste alt und in ein paar Monaten kommen die Patienten mit dem Preis vom letzten Jahr. Die Struktur, die wir bauen, hält die öffentlichen Daten — Dienstleistungen und Team — in strukturierten Dateien, die sowohl von der Programmierschnittstelle als auch direkt vom sichtbaren Teil der Website gelesen werden, und das Personal bearbeitet sie über ein Panel.

Das dritte, was in keinem Briefing verlangt wird und am meisten zählt, ist, wer in diese Liste schreiben kann. Bei der Übernahme des Projekts, über das wir hier schreiben, konnte jeder aus dem Internet einen Schreibvorgang an die Programmierschnittstelle senden, und das Passwort des Panels gelangte in das JavaScript-Paket, das dem Browser ausgeliefert wurde — weil seine Prüfung im Browser erfolgte. Wir haben die Prüfung auf den Server verlagert: Das Passwort verlässt den Server nicht mehr, es wird ein signiertes, zwölf Stunden gültiges Token zurückgegeben, mit einer Grenze von acht Versuchen pro fünfzehn Minuten und IP-Adresse sowie Vergleichen in konstanter Zeit; die Schnittstelle lauscht nur auf der lokalen Adresse, also ist der Webserver der einzige öffentliche Weg.

Die Kennzeichnung der Abdeckung durch die obligatorische Versicherung verdient einen eigenen Satz, weil sie das Feld mit dem größten Wert für den Patienten und dem größten Risiko für die Klinik ist: Es ist eine Aussage mit Folgen. Deshalb lebt sie als von der Institution bearbeitete Daten, nicht als von uns auf einer Seite geschriebener Text; wir bauen das Feld, die Anzeige und die Möglichkeit, es in einer Minute zu korrigieren.

Was dazugehört

Was sich konkret in Zahnkliniken ändert

Jede Leistung ist eine Position mit ihrer Einheit, nicht eine Zeile in einer Preistabelle

Die Datenstruktur jeder Leistung umfasst Kategorie, Unterkategorie, Bezeichnung, Preis, Maßeinheit und Kennzeichen der Berechtigung für die obligatorische Versicherung. Die Einheiten sind die tatsächlichen des Bereichs — Zahn, Kiefer, Extraktion, behandelter Fall, Sitzung, Besuch, Konsultation, Anästhesie, Verfahren, Untersuchung, Eingriff — denn ein Preis ohne Einheit erzeugt genau die Gesprächssituation, die die Rezeption vermeiden will.

Die Taxonomie auf zwei Ebenen, damit die lange Liste übersichtlich bleibt

Kategorie und Unterkategorie, keine flache Liste. In der Arbeit, über die wir schreiben: 7 Kategorien und 10 Unterkategorien über 89 Leistungen. Die Größenordnung ist wichtig — bei unter hundert Positionen reicht eine Taxonomie auf zwei Ebenen; bei mehreren Hundert wird die Struktur zu einer anderen Diskussion, und das sagen wir vorher, nicht nachher.

Die Kennzeichnung der Abdeckung durch die Versicherung als Daten der Institution

Der Berechtigungsindikator steht bei jeder Leistung in den öffentlichen Daten und kann von der Klinik bearbeitet werden. In der zitierten Arbeit sind 27 von 89 Leistungen als berechtigt markiert. Wir schreiben nicht selbst, was in die Versicherung fällt, und leiten es nicht ab: Es ist eine Aussage der Institution mit Folgen für den Patienten und muss von ihr jederzeit korrigiert werden können.

Getrennte Bildschirme für Notfälle, Kieferorthopädie, Implantate, Kinderzahnheilkunde

Keine einzige Seite „Leistungen“. Die Website hat 22 Bildschirme, von Leistungen und Preisen bis zu Notfällen, Kieferorthopädie, Implantaten, Kinderzahnheilkunde, Transparenz und Feedback. Der Grund ist praktisch: Wer am Sonntagabend nach „zahnärztlicher Notfall“ sucht, will keine allgemeine Seite, und eine Abschnittsseite hat etwas über den Zeitplan und darüber zu sagen, was dort gemacht wird.

Das Personal bearbeitet, der Entwickler ist nicht in der Kette

Leistungen und Team werden über ein Panel bearbeitet, und Schreibvorgänge erfordern ein gültiges Token; Lesevorgänge bleiben öffentlich, damit die Website ohne Authentifizierung funktioniert. Die Folge für die Klinik: Eine Tarifänderung greift am selben Tag, nicht in der nächsten Entwicklungsiteration.

Das Passwort verlässt den Server nicht, und die Versuche sind begrenzt

Die Authentifizierung erfolgt auf dem Server und gibt ein mit HMAC-SHA256 signiertes Token zurück, 12 Stunden gültig, mit maximal 8 Versuchen pro 15 Minuten pro IP-Adresse und Vergleichen in konstanter Zeit. Das Signier-Secret wird selbst generiert, in einer Datei mit eingeschränkten Rechten, außerhalb des Repositoriums aufbewahrt. Das sind Zahlen aus dem Code, keine allgemeinen Prinzipien — sie können gelesen und angefochten werden.

Die Programmierschnittstelle ist nicht direkt im Internet exponiert

Sie lauscht nur auf der lokalen Adresse, also ist der Webserver davor der einzige öffentliche Weg; die Liste der erlaubten Domains ist explizit, und der Umfang der Anfragen ist auf 1 MB begrenzt. Schreibvorgänge erfordern ein Token, Lesevorgänge nicht. Es ist eine gewöhnliche Konfiguration — das Problem ist, dass man sie von außen nicht sieht, bis zu dem Tag, an dem jemand sie findet.

Die Continuous Integration lehnt das Paket ab, wenn sie ein Secret darin findet

Die Prüfung, die kompiliert und die Typen überprüft, macht auch etwas, das nur wenige Projekte tun: Sie sucht im gebauten Paket nach Secrets und schlägt fehl, wenn sie eines findet. Das ist direkt mit dem bei der Übernahme behobenen Fehler verbunden — ein Passwort war im öffentlichen Paket gelandet, gerade weil nichts das geprüft hatte. Darüber hinaus wöchentliche Abhängigkeitsaktualisierungen.

Was eine Website einer Zahnklinik nicht macht

Sie bestätigt keinen Termin von selbst: Sie sammelt die Anfrage, und die Bestätigung erfordert entweder eine Person oder eine Verbindung zum Termin-System der Klinik — eine separate Arbeit mit eigenen Bedingungen. Sie veröffentlicht keine von uns geschriebene klinische Information: Der Inhalt zu Behandlungen liegt in der Verantwortung der Fachleute. Und sie entscheidet nicht, was in die Versicherung fällt.

Traseul

Wie eine Anfrage durch das System läuft.

01

Wir inventarisieren das Nomenklator vor dem Design

Die erste Lieferung ist die Liste der Tarifpositionen mit der Einheit jeder Position und mit der Kennzeichnung der Abdeckung, in der Form, in der die Klinik sie führt. Wenn die Liste nicht in einer strukturierten Form existiert — und gewöhnlich existiert sie als Kalkulationsdatei oder als Dokument — strukturieren wir sie, und die Klinik bestätigt sie. Das Design kommt danach, weil es davon abhängt, wie viele Positionen es gibt.

02

Wir bauen die öffentliche Struktur und das Panel in derselben Phase

Die öffentlichen Bildschirme und das Panel, aus dem editiert wird, werden nicht getrennt erstellt, weil sonst angezeigte Felder erscheinen, die nicht bearbeitet werden können. Wir liefern die Website mit den geladenen echten Daten, nicht mit Füllinhalt — eine Website einer Klinik voller vorläufigem Text kann von niemandem bewertet werden.

03

Wir schließen die Schreibrechte und prüfen von außen

Serverseitige Authentifizierung, signiertes Token, Versuchslimit, Programmierschnittstelle nur auf der lokalen Adresse, Liste erlaubter Domains, Obergrenze für den Anfragekörper. Wir liefern das Ergebnis einer von außen durchgeführten Prüfung: was ohne Authentifizierung gelesen werden kann und was nicht geschrieben werden kann.

04

Wir übergeben mit Schulung für die Person, die editiert, nicht nur mit Passwörtern

Wir übergeben die Zugänge, das Inbetriebnahmedokument und eine kurze Schulung für die Person, die die Tarife und das Team ändern wird. Die Übergabe gilt nicht als abgeschlossen, bis jemand aus der Klinik selbstständig eine Änderung vorgenommen hat, die auf der Website erscheint.

1Server web în față2pachet static construit3interfață de programare doar pe adresa locală4fișiere structurate cu serviciile și echipaCitirile trec public; scrierile cer un jeton semnat, valabil 12 ore.
4 straturi

Die Daten

Was wir anfassen, wo die Daten liegen und wie lange sie bleiben

Die Regeln unterscheiden sich von Branche zu Branche. Dies sind die, die in Zahnkliniken gelten.

Was öffentlich ist und was nicht, auf der Website einer Klinik
Öffentlich: die Liste der Leistungen mit Einheit und Kennzeichnung der Abdeckung, das Team, der Zeitplan, die Kontakte der Einrichtung. Nicht öffentlich: alles, was aus einem Formular kommt. Der Unterschied scheint offensichtlich, bis jemand auf die Feedback-Seite eine Nachricht mit seinem Namen und seinem Problem setzt — deshalb teilen Formulare und öffentliche Anzeige niemals dieselbe Quelle.
Der Terminwunsch enthält Daten über die Gesundheit
„Mir tut der untere linke Weisheitszahn weh“ ist eine Information über die Gesundheit einer identifizierbaren Person aus einer strengeren Kategorie. Die praktischen Folgen werden bei der Implementierung festgelegt: wer Zugriff auf die eingegangenen Nachrichten hat, wie lange sie aufbewahrt werden, über welchen Kanal sie eingehen und was im Formular niemals abgefragt wird.
Die Preise und die Kennzeichnung der Abdeckung gehören der Einrichtung
Wir bauen sie als Struktur und als Panel; ihr Inhalt gehört der Klinik und wird auf ihre Entscheidung hin geändert. Wir veröffentlichen in unseren Materialien keine einzige Tarifzahl als Beispiel, auch nicht zu Illustrationszwecken — ein aus dem Kontext gelöster Tarif wird zu einer Aussage über die Klinik.
Wer in die öffentlichen Daten schreiben kann
Nur wer ein gültiges Token hat, das durch Authentifizierung auf dem Server mit einer Versuchslimitierung erhalten wurde. Die Lesezugriffe sind öffentlich, weil sie es sein müssen. Der Unterschied zwischen diesen beiden Sätzen ist genau der Fehler, den wir bei der Übernahme des zitierten Projekts behoben haben.
Was im Repository-Verlauf bleibt
Ein Projektverlauf enthält fast immer Daten, die niemand absichtlich dort abgelegt hat: eine Telefonnummer, eine E-Mail-Adresse, den Namen des Content-Administrators. Wir behandeln sie entsprechend — sie werden nicht in öffentliche Materialien übernommen und auf Wunsch des Kunden aus dem Inhalt entfernt.

Ein Fall

Ein Administratorpasswort, das in dem an den Browser gelieferten Paket landete

Die Ausgangslage

Bei der Übernahme einer Website eines Zahnzentrums hatte das Administrationspanel zwei Probleme, die nur von innen sichtbar waren. Erstens: Das Passwort wurde im Browser verglichen und gelangte daher in das öffentliche JavaScript-Paket. Zweitens: Schreibanfragen an die Programmierschnittstelle konnten von jedem im Internet gestellt werden, und der Port war direkt freigegeben.

Was wir gebaut haben

Wir haben die Prüfung auf den Server verlegt: Die Authentifizierung gibt ein mit HMAC-SHA256 signiertes Token zurück, 12 Stunden gültig, mit einem Limit von 8 Versuchen pro 15 Minuten pro IP-Adresse und Vergleichen in konstanter Zeit; das Signiergeheimnis wird selbst erzeugt, mit eingeschränkten Rechten, außerhalb des Repositories. Die Programmierschnittstelle blieb nur auf der lokalen Adresse lauschen, mit dem Webserver davor, einer Liste erlaubter Domänen und einem auf 1 MB begrenzten Request-Body. Schreibvorgänge an Dienste und an das Team erfordern ein Token; Lesezugriffe sind öffentlich geblieben. Darüber hinaus Continuous Integration, die kompiliert, Typen prüft und das Paket ablehnt, wenn sie darin ein Geheimnis findet.

Was dabei herauskam

Die öffentlichen Daten der Klinik lassen sich auch heute von außen überprüfen: 89 Dienste, jeweils mit Kategorie, Unterkategorie, Preis, Einheit und Kennzeichen für den Versicherungsschutz, davon 27 als berechtigt markiert. Geändert hat sich, wer darin schreiben kann.

Was der Fall nicht sagt

Wir haben die erste Version der Website nicht selbst gebaut. Aus dem Repository-Verlauf stammen einige Commits von externen Entwicklern. Unser Beitrag, den wir mit einem Diff zeigen können, ist die Übernahme: Sicherheit, Continuous Integration, Typen, Abhängigkeiten.

Fragen

Was jemand aus Zahnkliniken fragt

Können wir die Preise selbst ändern, ohne Sie anzurufen?

Ja — das ist die Hälfte der Arbeit. Dienste und Team werden aus einem Panel heraus bearbeitet; Schreibvorgänge erfordern Authentifizierung, Lesezugriffe bleiben öffentlich. Unsere Empfehlung: Bei der Übergabe sollte die Person, die sich darum kümmert, die Änderung vor uns vornehmen, damit wir wissen, dass es aus ihrer Hand funktioniert und nicht aus unserer.

Wie zeigen wir, was in die obligatorische Versicherung fällt?

Als Kennzeichen bei jedem Dienst, in denselben Daten, die Sie bearbeiten. In der Arbeit, auf die wir uns beziehen, sind 27 von 89 Diensten als berechtigt markiert. Wir bauen das Feld und die Anzeige; was genau berechtigt ist, ist die Aussage der Institution, weil sie Folgen für den Patienten und für die Klinik hat.

Warum ist die Maßeinheit bei einem Preis wichtig?

Weil der Preis in der Zahnmedizin nicht pro Besuch gilt. Er ist pro Zahn, pro Kiefer, pro Extraktion, pro behandeltem Fall, pro Sitzung. Ein Preis ohne Maßeinheit führt genau zu dem Gespräch, das die Rezeption zehnmal am Tag führt, und noch schlimmer, zum Gefühl des Patienten, dass ihm am Telefon etwas anderes gesagt wurde.

Kann die Website Termine machen?

Sie kann die Anfrage erfassen. Die Bestätigung eines Termins erfordert entweder eine Person, die den Kalender prüft, oder eine Anbindung an das Terminplanungssystem der Klinik — das ist eine separate Arbeit, mit Kompatibilitätsprüfung im Voraus. Ein Formular, das eine E-Mail sendet, nennen wir nicht „Online-Terminvereinbarung“.

Wer schreibt die Texte über Behandlungen?

Die Spezialisten der Klinik. Wir schreiben keine klinischen Informationen und „optimieren“ sie nicht für die Suche, weil das bedeuten würde, medizinische Aussagen im Namen einer medizinischen Einrichtung zu formulieren. Wir strukturieren, stellen die Fragen, die der Text beantworten muss, und veröffentlichen ihn nach der Bestätigung.

Ich habe bereits eine von jemand anderem erstellte Website. Können Sie sie übernehmen?

Ja, und die Arbeit, über die wir hier schreiben, ist genau das. Was wir bei einer Übernahme zuerst machen: Wir sehen uns an, was von außen geschrieben werden kann, wo die Passwörter liegen und was in dem Paket landet, das an den Browser ausgeliefert wird. Im zitierten Fall gelangte das Administratorpasswort in das öffentliche Paket, und die Schreibvorgänge konnten von jedem vorgenommen werden. Wir haben die Prüfung auf den Server verlagert und die Schreibvorgänge geschlossen.

Wie schnell ist eine Tarifänderung sichtbar?

Sofort nachdem sie gespeichert wurde, weil die öffentlichen Daten aus derselben Quelle gelesen werden, die Sie bearbeiten. Was wir nicht versprechen, ist die Geschwindigkeit, mit der die Ergebnisse in den Suchmaschinen aktualisiert werden — das hängt nicht von uns ab und wir können es nicht garantieren.

Was passiert mit den Daten aus dem Kontaktformular?

Das wird bei der Implementierung festgelegt: wohin sie gelangen, wer sie sieht, wie lange sie gespeichert werden und was im Formular niemals abgefragt wird. In einer Klinik enthält die Nachricht oft eine Beschreibung eines Gesundheitsproblems, also ist es nicht „ein Lead“, sondern eine Datenkategorie mit strengem Regime — und der Umgang damit wird in der veröffentlichten Richtlinie der Klinik festgehalten.

Wird die Website sagen, dass sie von Ihnen gemacht wurde?

Nur wenn Sie es möchten. Einige unserer Arbeiten tragen eine Kennzeichnung im Footer, andere nicht — das hängt vom Kunden ab. Wir erwähnen das, weil es eine Frage ist, die Kliniken stellen, und weil wir uns, wenn die Website keine Kennzeichnung trägt, auch nicht ohne ihre Zustimmung als Autoren vorstellen.

Was sollte bei Ihnen besser laufen?

Erzählen Sie uns von Ihrem Prozess. Gemeinsam legen wir fest, was sich zu bauen lohnt, was wir anbinden können und wie wir das Ergebnis prüfen.

Lassen Sie uns sprechen