Kartenmodule ergaenzen
Phase 6: alles, was einen Ort hat — Loeschwasser, Objekte mit Feuerwehrplan, die Lagekarte eines Einsatzes und die geplante Foerderstrecke. Keine Kacheln aus dem Netz. Wo eine Wehr ausrueckt und wo ihre Hydranten liegen, ist niemandes Geschaeft; der Kartenserver laeuft selbst (tileserver-gl im Compose-Profil "karte"). Ohne ihn zeigt die Karte einen leeren Grund und sagt das auch — Punkte, Entfernungen und Umkreissuche funktionieren trotzdem. Dasselbe gilt fuer einen eingetragenen, aber nicht erreichbaren Server. Die Umkreissuche laeuft ueber PostGIS: ST_DWithin auf der Geografie mit GiST-Index rechnet in Metern und nutzt den Index. Gefragt wird waehrend der Fahrt, und bei tausend Hydranten waere alles andere ein vollstaendiger Tabellendurchlauf. Der Import aus GeoJSON und Stadtwerke-CSV ist nachsichtig, aber ehrlich: er erkennt "DN 100", deutsche Kommazahlen, Datumsangaben und vertauschte Achsen — raet aber nichts. Fehlt die Position, wird die Zeile uebersprungen; ohne Statusangabe steht "ungeprueft", nicht "einsatzbereit". 22 taktische Zeichen nach FwDV 102 selbst gezeichnet, die Lagekarte gleicht ueber denselben Ereignisstrom ab wie die Atemschutzueberwachung. Die Wasserfoerderung rechnet Reibung, Hoehe und Pumpenzahl; das Ergebnis wird nie gespeichert, sondern bei jeder Anzeige neu gerechnet. Geht eine Strecke nicht auf, sagt die Ausgabe das. Behoben: die Reibungsbeiwerte lagen im ersten Wurf um den Faktor zehn daneben. Aufgefallen ist es nur, weil die Tests gegen die Tabellenwerte der Ausbildung pruefen und nicht gegen die eigene Implementierung. Dazu ein Abruf fuer abgelegte Dateien (/api/dateien/[id]) — bis hierher gab es nur den Upload. 59 neue Tests (48 Unit, 11 E2E je Browser). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
e1480c0c3e
commit
1c1e141666
+173
-9
@@ -1,9 +1,10 @@
|
||||
# Anleitung
|
||||
|
||||
Bedienung von FLORIAN, Stand Phase 5 (Version 0.6.0). Die Bilder zeigen die
|
||||
Bedienung von FLORIAN, Stand Phase 6 (Version 0.7.0). Die Bilder zeigen die
|
||||
Beispielwehr aus dem Seed und werden mit `npm run screenshots` neu erzeugt.
|
||||
|
||||
> Die Kartenmodule kommen in Phase 6 dazu. Siehe [ROADMAP.md](ROADMAP.md).
|
||||
> Benachrichtigungen, lokale KI und die Kassenverwaltung kommen in den
|
||||
> folgenden Phasen dazu. Siehe [ROADMAP.md](ROADMAP.md).
|
||||
|
||||
---
|
||||
|
||||
@@ -602,7 +603,7 @@ Bericht — wird später nachgetragen. Der Einsatz bekommt sofort eine
|
||||
fortlaufende Nummer im Format `JJJJ-NNNN`.
|
||||
|
||||
**Koordinaten** lassen sich über „Koordinaten suchen" ermitteln, wenn die Wehr
|
||||
einen eigenen Nominatim betreibt (Kapitel 34). Ohne den bleibt das Feld leer —
|
||||
einen eigenen Nominatim betreibt (Kapitel 38). Ohne den bleibt das Feld leer —
|
||||
das ist in Ordnung, die Karte kommt in Phase 6.
|
||||
|
||||
---
|
||||
@@ -1100,7 +1101,165 @@ weiter einsetzbar, aber es wird Zeit für einen Termin.
|
||||
|
||||
---
|
||||
|
||||
## 34. Adressen zu Koordinaten (Nominatim)
|
||||
## 34. Die Karte
|
||||
|
||||

|
||||
|
||||
Die Karte beantwortet die Frage, die auf der Anfahrt gestellt wird: **Was liegt
|
||||
in der Nähe, und was gibt es her?**
|
||||
|
||||
### Kartenhintergrund einrichten
|
||||
|
||||
FLORIAN lädt **keine** Kacheln aus dem Netz. Wo Ihre Wehr ausrückt und wo Ihre
|
||||
Hydranten liegen, ist niemandes Geschäft — es gibt deshalb keinen Rückfall auf
|
||||
einen öffentlichen Kartendienst. Der Kartenserver läuft selbst:
|
||||
|
||||
```bash
|
||||
docker compose --profile karte up -d
|
||||
```
|
||||
|
||||
Dafür brauchen Sie eine MBTiles-Datei Ihres Ausrückegebiets; woher, steht in
|
||||
`docker/karten/LIESMICH.md`. Danach in der `.env`:
|
||||
|
||||
```
|
||||
KARTE_STIL_URL=http://localhost:8085/styles/basic/style.json
|
||||
```
|
||||
|
||||
> **Ohne Kartenserver funktioniert alles außer den Straßen.** Punkte liegen an
|
||||
> der richtigen Stelle, Entfernungen stimmen, die Umkreissuche rechnet. Die
|
||||
> Karte sagt oben, dass der Hintergrund fehlt — sie tut nicht so, als wäre
|
||||
> nichts.
|
||||
|
||||
### Was auf der Karte liegt
|
||||
|
||||
| Ebene | Farbe |
|
||||
|---|---|
|
||||
| **Löschwasser** | grün einsatzbereit, gelb eingeschränkt, rot defekt, grau ungeprüft |
|
||||
| **Objekte** | blau, mit Verweis auf den Feuerwehrplan |
|
||||
|
||||
Beide lassen sich einzeln ab- und anschalten: wer Löschwasser sucht, will keine
|
||||
Objekte sehen und umgekehrt.
|
||||
|
||||
### Umkreissuche
|
||||
|
||||
**In die Karte tippen** — rechts steht, was in 500 Metern erreichbar ist, nach
|
||||
Entfernung sortiert, mit Nennweite und Durchfluss. Findet sich nichts, steht
|
||||
das ausdrücklich da: eine Angabe, die man vor dem Einsatz wissen will, nicht
|
||||
währenddessen.
|
||||
|
||||
---
|
||||
|
||||
## 35. Hydranten pflegen und importieren
|
||||
|
||||
### Import — der übliche Weg
|
||||
|
||||
Die Stadtwerke oder das Landratsamt haben die Liste. FLORIAN nimmt sie in zwei
|
||||
Formaten:
|
||||
|
||||
- **GeoJSON** (aus QGIS, vom Landratsamt, aus einem OSM-Auszug)
|
||||
- **CSV** — mit den Spaltennamen, die eben drinstehen
|
||||
|
||||
Erkannt werden unter anderem `Nummer`, `Bauart`, `DN`, `Lage`, `Latitude`,
|
||||
`Pruefdatum`, `Versorger` und ihre Geschwister. Auch „DN 100" in der
|
||||
Zahlenspalte, „48,5031" mit Komma und „24.05.2026" als Datum. Sind Breite und
|
||||
Länge vertauscht, wird das erkannt und zurückgedreht.
|
||||
|
||||
Der Import läuft **in zwei Schritten**:
|
||||
|
||||
1. Datei wählen — FLORIAN zeigt, was herauskäme: wie viele Hydranten gefunden
|
||||
wurden, welche Zeilen übersprungen werden und warum.
|
||||
2. Erst dann „übernehmen".
|
||||
|
||||
> **Zweimal importieren ist ungefährlich.** Hydranten mit einer Nummer des
|
||||
> Versorgers werden aktualisiert, nicht doppelt angelegt. Fehlt die Nummer,
|
||||
> sagt der Import das vorher.
|
||||
|
||||
Was FLORIAN **nicht** tut: raten. Fehlt die Position, wird die Zeile
|
||||
übersprungen — ein Hydrant ohne Ort ist kein Hydrant. Und ohne Statusangabe
|
||||
steht „ungeprüft", nicht „einsatzbereit".
|
||||
|
||||
### Einzeln erfassen
|
||||
|
||||
In die Karte tippen setzt den Ort, darunter kommen Bezeichnung, Art, Zustand
|
||||
und Nennweite. Für den einen Hydranten, der beim Neubaugebiet dazugekommen ist.
|
||||
|
||||
---
|
||||
|
||||
## 36. Objekte und Feuerwehrpläne
|
||||
|
||||

|
||||
|
||||
Für jedes Objekt, für das es einen Feuerwehrplan gibt oder geben sollte:
|
||||
Schule, Pflegeheim, Aussiedlerhof, Betrieb.
|
||||
|
||||
Die Detailseite ist so sortiert, wie auf der Anfahrt gelesen wird:
|
||||
|
||||
| Block | Was hineingehört |
|
||||
|---|---|
|
||||
| **Zufahrt** | Tordurchfahrt, Höhenbegrenzung, Aufstellfläche, Schranke |
|
||||
| **Gefahren** | Photovoltaik, Gasflaschen, Silo, Tiere, Personen |
|
||||
| **Schlüsseldepot** | Wo der FSD hängt und was er aufsperrt |
|
||||
| **Löschwasser am Objekt** | Wandhydranten, Steigleitung, Sprinklerzentrale |
|
||||
|
||||
Darunter die **Ansprechpartner** — mit der einzigen Angabe, die im Einsatz
|
||||
zählt: wer nachts ans Telefon geht. Die Nummern lassen sich antippen.
|
||||
|
||||
Und die **Planblätter nach DIN 14095** mit Art und Stand. Der Stand gehört
|
||||
dazu: ein Feuerwehrplan von 2009 ist eine Vermutung.
|
||||
|
||||
Gesucht wird über alles — Name, Straße, Gefahrenstichwort, Ansprechpartner. Wer
|
||||
im Einsatz sucht, weiß selten, wie das Objekt im System heißt, aber oft, was
|
||||
dort ist: „Photovoltaik" findet die Schule.
|
||||
|
||||
---
|
||||
|
||||
## 37. Lagekarte und Wasserförderung
|
||||
|
||||
### Lagekarte
|
||||
|
||||
Jeder Einsatz hat eine, unterhalb der Einsatzdaten. 22 taktische Zeichen nach
|
||||
FwDV 102: Fahrzeuge, Einheiten, Führung, Stellen, Gefahren, Maßnahmen.
|
||||
|
||||
**Ein Werkzeug, ein Klick**: Zeichen antippen, in die Karte tippen. Dazu
|
||||
Linienzüge (Schlauchleitung, Absperrung), Flächen (Bereitstellungsraum) und
|
||||
freie Beschriftungen.
|
||||
|
||||
Was einer einträgt, sehen die anderen — auch auf einem zweiten Tablet. Oben
|
||||
steht, ob der Abgleich läuft; steht er nicht, sehen Sie eine ältere Lage und
|
||||
wissen das.
|
||||
|
||||
Eingetragenes lässt sich **zurücknehmen**, nicht löschen: was um 14:12
|
||||
eingezeichnet wurde, gehört zur Mitschrift, auch wenn es um 14:20 nicht mehr
|
||||
stimmte.
|
||||
|
||||
### Wasserförderung
|
||||
|
||||

|
||||
|
||||
Die Rechnung, die sonst mit Tabelle und Bleistift auf der Motorhaube entsteht.
|
||||
Punkte in die Karte tippen — der erste ist die Entnahmestelle, der letzte die
|
||||
Einsatzstelle —, dann Schlauchdurchmesser und Fördermenge einstellen.
|
||||
|
||||
Sofort steht da:
|
||||
|
||||
- **wie viele Pumpen** gebraucht werden und wo ein Verstärker stehen muss,
|
||||
- **wie viele Schlauchlängen** je Abschnitt,
|
||||
- **welcher Druck** am Ende ankommt.
|
||||
|
||||
Zwei Dinge kosten Druck: die Reibung im Schlauch (steigt mit dem **Quadrat** der
|
||||
Fördermenge — doppelte Menge, vierfacher Verlust) und die Steigung (zehn Meter
|
||||
sind ein bar). Wo die Höhe bekannt ist, sollte sie eingetragen werden; ohne
|
||||
rechnet FLORIAN mit ebenem Gelände, und das ist im Zweifel zu günstig.
|
||||
|
||||
Geht eine Strecke nicht auf, sagt die Ausgabe das — statt eine Zahl
|
||||
auszuwerfen, die niemand halten kann.
|
||||
|
||||
> **Es bleibt eine Planungshilfe.** Was zählt, ist der Druck am Verteiler — und
|
||||
> den liest jemand ab.
|
||||
|
||||
---
|
||||
|
||||
## 38. Adressen zu Koordinaten (Nominatim)
|
||||
|
||||
FLORIAN löst Einsatzadressen nur auf, wenn die Wehr einen **eigenen** Nominatim
|
||||
betreibt:
|
||||
@@ -1120,7 +1279,7 @@ GEOCODING_LAENDER=de,at,ch
|
||||
Ohne Konfiguration bleibt die Suche leer. Koordinaten lassen sich dann von Hand
|
||||
eintragen oder weglassen.
|
||||
|
||||
## 35. Rollen und was sie dürfen
|
||||
## 39. Rollen und was sie dürfen
|
||||
|
||||
Neun Rollen, jede mit einem festen Satz Rechte. Die Zuordnung steht zentral in
|
||||
`src/lib/authz.ts` und wird beim Seed in die Datenbank gespiegelt — eine Wehr
|
||||
@@ -1149,7 +1308,7 @@ Das Terminal selbst ist nur die Tür.
|
||||
|
||||
---
|
||||
|
||||
## 36. Anmeldung über authentik einrichten
|
||||
## 40. Anmeldung über authentik einrichten
|
||||
|
||||
authentik läuft **getrennt** von FLORIAN und ist nicht Teil dieses Stacks.
|
||||
|
||||
@@ -1202,7 +1361,7 @@ ganze Wehr aus.
|
||||
|
||||
---
|
||||
|
||||
## 37. PIN und Ausweiskarte verwalten
|
||||
## 41. PIN und Ausweiskarte verwalten
|
||||
|
||||
Wie sich am Terminal angemeldet wird, steht in Kapitel 24. Hier geht es darum,
|
||||
was dahinter liegt.
|
||||
@@ -1225,7 +1384,7 @@ Huber), PIN `471203`.
|
||||
|
||||
---
|
||||
|
||||
## 38. Was protokolliert wird
|
||||
## 42. Was protokolliert wird
|
||||
|
||||
Jede schreibende Änderung erzeugt einen Eintrag mit Zeitpunkt, Person,
|
||||
betroffenem Datensatz und den geänderten Feldern im Vorher-Nachher-Vergleich.
|
||||
@@ -1250,7 +1409,7 @@ jeweiligen Detailseite sichtbar.
|
||||
|
||||
---
|
||||
|
||||
## 39. Wenn etwas nicht geht
|
||||
## 43. Wenn etwas nicht geht
|
||||
|
||||
| Beobachtung | Wahrscheinliche Ursache | Was hilft |
|
||||
|---|---|---|
|
||||
@@ -1274,6 +1433,11 @@ jeweiligen Detailseite sichtbar.
|
||||
| Die Überwachung lässt sich nicht beenden | Ein Trupp ist noch nicht als draußen gemeldet | Trupp abmelden, dann beenden. Die Meldung nennt die Anzahl |
|
||||
| Oben steht „Verbindung unterbrochen", obwohl das Netz da ist | Der Ereignisstrom wurde von einem Proxy gepuffert oder gekappt | Die Ansicht arbeitet weiter; bei einem Reverse Proxy `X-Accel-Buffering: no` durchreichen |
|
||||
| Das Atemschutzprotokoll fehlt | Die Überwachung ist noch nicht beendet | Ein Protokoll entsteht erst mit dem Ende — vorher wäre es unvollständig und sähe vollständig aus |
|
||||
| Die Karte zeigt keinen Hintergrund | Kein Kartenserver eingerichtet oder nicht erreichbar | `docker compose --profile karte up -d`, MBTiles nach `docker/karten/`, `KARTE_STIL_URL` setzen. Ohne läuft alles außer den Straßen |
|
||||
| Der Import überspringt alle Zeilen | Keine Spalte wurde als Breite und Länge erkannt | Spalten umbenennen (`lat`/`lon`, `Breitengrad`/`Längengrad`) — die erkannten Namen stehen in `lib/karte/hydrant-import.ts` |
|
||||
| Nach dem Import steht überall „ungeprüft" | Die Quelle hat keine Statusspalte | Absicht: ohne Angabe wird nicht „einsatzbereit" behauptet. Zustand nachpflegen |
|
||||
| Die Lagekarte gleicht nicht ab | Der Ereignisstrom ist unterbrochen | Steht oben in der Lagekarte. Bei einem Reverse Proxy `X-Accel-Buffering: no` durchreichen |
|
||||
| Die Förderstrecke braucht unerwartet viele Pumpen | Fördermenge zu hoch für den Durchmesser | Der Verlust steigt im Quadrat: 800 statt 400 l/min kostet die vierfache Reibung. Größeren Schlauch wählen oder weniger fördern |
|
||||
|
||||
Zustand aller Randsysteme auf einen Blick:
|
||||
|
||||
|
||||
@@ -297,7 +297,7 @@ Was bleibt, ist ein Satz neben dem Namen, und der ist im Einsatz mehr wert.
|
||||
|
||||
## Phase 6 — Kartenmodule
|
||||
|
||||
**Vergleichsaufwand: 14–18 PT**
|
||||
**Vergleichsaufwand: 14–18 PT** · **Tatsächlich: 2:50 h Sitzungszeit**
|
||||
|
||||
| Baustein | PT |
|
||||
|---|---:|
|
||||
@@ -313,6 +313,30 @@ Das SVG-Set für die taktischen Zeichen ist Fleißarbeit, aber unvermeidbar —
|
||||
fertige Sets sind selten frei verwendbar. Die Wasserförderungsberechnung ist
|
||||
Physik mit klaren Formeln und deshalb gut testbar.
|
||||
|
||||
**Rückblick.** Beide Sätze stimmen. Das Zeichenset war Fleißarbeit — 22 Zeichen
|
||||
als SVG-Pfade, keine davon schwierig, alle zusammen eine Stunde. Und die
|
||||
Wasserförderung war tatsächlich der am besten testbare Teil des ganzen
|
||||
Projekts: 21 Tests, die alle etwas über die Physik aussagen statt über den Code.
|
||||
|
||||
Dabei fiel auf, dass die Beiwerte im ersten Wurf um den Faktor zehn danebenlagen
|
||||
— aufgefallen ist es nur, weil die Tests gegen die **Tabellenwerte der
|
||||
Ausbildung** prüfen und nicht gegen das, was die Funktion gerade ausrechnet.
|
||||
Ein Test, der die eigene Implementierung bestätigt, hätte hier fröhlich grün
|
||||
gemeldet.
|
||||
|
||||
Billiger als angesetzt war die Umkreissuche. 3,0 PT für „Hydranten mit PostGIS,
|
||||
Cluster, Filter, Umkreissuche" — davon entfiel der Löwenanteil auf eine einzige
|
||||
SQL-Abfrage mit `ST_DWithin` und einen GiST-Index. PostGIS war seit Phase 0 im
|
||||
Container; genutzt wurde es erst jetzt.
|
||||
|
||||
Teurer war die Frage, was passiert, wenn es **keine Karte** gibt. Eine MBTiles-
|
||||
Datei des Ausrückegebiets ist hunderte Megabyte groß, gehört niemandem außer
|
||||
der Wehr und kann nicht im Repository liegen. Das heißt: der Normalfall beim
|
||||
ersten Start ist eine Karte ohne Hintergrund — und sie muss trotzdem etwas
|
||||
taugen. Aus dieser Anforderung kam der leere Stil mit Hinweis, die Erkennung
|
||||
eines nicht erreichbaren Servers und die Zusicherung im E2E-Test, dass genau
|
||||
das ehrlich angezeigt wird. In der Aufstellung steht davon keine Zeile.
|
||||
|
||||
## Phase 7 — Benachrichtigungen und Termine
|
||||
|
||||
**Vergleichsaufwand: 10–13 PT**
|
||||
|
||||
+81
-1
@@ -17,7 +17,87 @@ Die aufgewendete Zeit wandert nach jedem Abschnitt in die Spalte
|
||||
| Phase 3 — Einsätze und Übungen | 2:10 h | 1 | 03.09.2026 |
|
||||
| Phase 4 — Kiosk-PWA im Gerätehaus | 3:00 h | 1 | 03.09.2026 |
|
||||
| Phase 5 — Atemschutz nach FwDV 7 | 2:40 h | 1 | 03.09.2026 |
|
||||
| **Summe** | **13:20 h** | **7** | |
|
||||
| Phase 6 — Kartenmodule | 2:50 h | 1 | 04.09.2026 |
|
||||
| **Summe** | **16:10 h** | **8** | |
|
||||
|
||||
---
|
||||
|
||||
## 2026-09-04 · Phase 6 — Kartenmodule
|
||||
|
||||
**22:10 – 01:00 · 2:50 h · Version 0.7.0**
|
||||
|
||||
### Was entstanden ist
|
||||
|
||||
Alles, was einen Ort hat: Löschwasser, Objekte mit Feuerwehrplan, die Lagekarte
|
||||
eines Einsatzes und die geplante Förderstrecke.
|
||||
|
||||
| Bereich | Dateien |
|
||||
|---|---|
|
||||
| Rechnen | `lib/karte/wasserfoerderung.ts`, `hydrant-import.ts`, `taktische-zeichen.ts` |
|
||||
| Server | `server/routers/karte/hydrant.ts`, `objekt.ts`, `lagekarte.ts` |
|
||||
| Karte | `components/karte/karte.tsx` (MapLibre), `api/lagekarte/strom` |
|
||||
| Oberfläche | `app/(app)/karte/` mit Karte, Hydranten, Objekten, Wasserförderung; Lagekarte im Einsatz |
|
||||
| Betrieb | tileserver-gl im Compose-Profil `karte`, `docker/karten/LIESMICH.md` |
|
||||
| Tests | 48 Unit, 11 E2E je Browser |
|
||||
|
||||
### Entscheidungen
|
||||
|
||||
**Kein öffentlicher Kartendienst — auch nicht als Rückfall.** Wo eine Wehr
|
||||
ausrückt und wo ihre Hydranten liegen, ist niemandes Geschäft. Die Kacheln
|
||||
kommen aus dem eigenen tileserver-gl. Ohne ihn zeigt die Karte einen leeren
|
||||
Grund **und sagt das**; Punkte, Entfernungen und Umkreissuche funktionieren
|
||||
weiter. Ein stiller leerer Kasten wäre die schlechtere Lösung gewesen: er sieht
|
||||
aus wie ein Fehler, ohne einer zu sein.
|
||||
|
||||
**Die Umkreissuche gehört in die Datenbank.** `ST_DWithin` auf der Geografie
|
||||
mit GiST-Index rechnet in Metern und nutzt den Index. In der Anwendung wäre es
|
||||
ein vollständiger Tabellendurchlauf mit Grad-Arithmetik — und gefragt wird
|
||||
während der Fahrt.
|
||||
|
||||
**Der Import rät nicht.** Er erkennt viel („DN 100", „48,5031", „24.05.2026",
|
||||
vertauschte Achsen), aber wo die Position fehlt, wird die Zeile übersprungen
|
||||
statt geschätzt. Und ohne Statusangabe steht „ungeprüft" — nicht
|
||||
„einsatzbereit". Eine Liste, die tausend Hydranten als geprüft ausweist, weil
|
||||
die Spalte fehlte, wäre schlimmer als keine Liste.
|
||||
|
||||
**Ein Ereignisstrom für beides.** Die Lagekarte benutzt denselben Hook wie die
|
||||
Atemschutzüberwachung aus Phase 5, nur mit anderer Adresse. Zwei Ströme mit
|
||||
unterschiedlichem Verhalten wären ein Ort mehr, an dem sich ein Fehler
|
||||
verstecken kann.
|
||||
|
||||
**Das Ergebnis der Wasserförderung wird nicht gespeichert.** Nur die Eingaben.
|
||||
Eine gespeicherte Zahl neben geänderten Eingaben wäre falsch, ohne falsch
|
||||
auszusehen.
|
||||
|
||||
### Wo es gehakt hat
|
||||
|
||||
| Problem | Ursache | Lösung |
|
||||
|---|---|---|
|
||||
| Der Druckverlust lag um den Faktor zehn daneben | Die Beiwerte waren aus dem Kopf gegriffen statt aus der Formel abgeleitet: gebraucht wird `verlust = beiwert × (menge/100)²`, also 0,0234 für den B-Schlauch, nicht 0,23 | Beiwerte aus den Tabellenwerten zurückgerechnet. Aufgefallen ist es nur, weil die Tests gegen die Ausbildungstabelle prüfen und nicht gegen die eigene Implementierung |
|
||||
| Ein nicht erreichbarer Kartenserver ließ die Karte kaputt aussehen | Der Hinweis „kein Hintergrund" hing an `stilUrl === null`, nicht daran, ob der Stil geladen wurde | MapLibre meldet den Fehlschlag; die Karte fällt jetzt in denselben ehrlichen Zustand wie ohne Server |
|
||||
| Die Klicks in die Karte gingen im E2E-Test ins Leere | Die Lagekarte liegt unten auf der Einsatzseite, außerhalb des Fensters. `page.mouse` klickt in Fensterkoordinaten | Karte vor dem Klick ins Bild holen |
|
||||
| Prisma wollte wieder die Volltextindizes abräumen | Bekannt seit Phase 1 | DropIndex-Block aus der Migration entfernt, im Kopf vermerkt |
|
||||
|
||||
### Abweichung von der Vorgabe
|
||||
|
||||
**Keine Cluster-Darstellung.** Phase-6.md nennt sie. Bei 24 Löschwasserstellen
|
||||
im Beispiel und einigen hundert in einer echten Wehr sind Cluster eine Lösung
|
||||
für ein Problem, das erst bei Zehntausenden entsteht — und sie verstecken genau
|
||||
das, was man sehen will: die Lücke im Netz. Nachrüstbar, wenn eine Wehr mit
|
||||
großem Ausrückegebiet es vermisst.
|
||||
|
||||
**Kein Höhenprofil aus einem Geländemodell.** Die Höhe je Punkt wird von Hand
|
||||
eingetragen. Ein Höhenmodell (SRTM, DGM) wäre ein weiterer Datensatz von
|
||||
hunderten Megabyte, den jede Wehr selbst beschaffen müsste. Die Rechnung ist
|
||||
ohne Höhe zu günstig — und das steht auch so an der Eingabe.
|
||||
|
||||
### Nachweise
|
||||
|
||||
- `npx tsc --noEmit` — ohne Ausgabe
|
||||
- `npm run test` — 354 Tests grün
|
||||
- `npx playwright test tests/e2e/karte.spec.ts` — 22 grün (Desktop und Tablet)
|
||||
- `npm run build` — 44 Routen
|
||||
- `npm run db:seed` — 24 Löschwasserstellen, 3 Objekte, Standorte verortet
|
||||
|
||||
---
|
||||
|
||||
|
||||
+5
-4
@@ -15,7 +15,7 @@ Phase 2 ████████████████████ fertig
|
||||
Phase 3 ████████████████████ fertig 0.4.0
|
||||
Phase 4 ████████████████████ fertig 0.5.0
|
||||
Phase 5 ████████████████████ fertig 0.6.0
|
||||
Phase 6 ░░░░░░░░░░░░░░░░░░░░ offen 0.7.0
|
||||
Phase 6 ████████████████████ fertig 0.7.0
|
||||
Phase 7 ░░░░░░░░░░░░░░░░░░░░ offen 0.8.0
|
||||
Phase 8 ░░░░░░░░░░░░░░░░░░░░ offen 0.9.0
|
||||
Phase 9 ░░░░░░░░░░░░░░░░░░░░ offen 0.10.0
|
||||
@@ -135,19 +135,20 @@ eine dokumentierte Freigabe durch den Kommandanten voraussetzt.
|
||||
**Danach kann die Wehr:** die Überwachung digital mitführen — parallel zur
|
||||
analogen, bis die Wehr ausdrücklich anders entscheidet.
|
||||
|
||||
## Phase 6 — Kartenmodule · als Nächstes
|
||||
## Phase 6 — Kartenmodule · fertig
|
||||
|
||||
- MapLibre GL mit selbst gehosteten Kacheln fürs Ausrückegebiet
|
||||
- Hydranten mit Typ, Nennweite, Durchfluss, letzter Prüfung; Import aus
|
||||
GeoJSON und Stadtwerke-CSV
|
||||
- Objekte und Feuerwehrpläne nach DIN 14095, vom Einsatz aus erreichbar
|
||||
- Lagekarte mit taktischen Zeichen nach FwDV 102, Echtzeit-Sync
|
||||
- Lagekarte mit taktischen Zeichen nach FwDV 102, Abgleich über denselben
|
||||
Ereignisstrom wie der Atemschutz
|
||||
- Wasserförderung: Druckverlust, Verstärkerpumpen, druckbares Schema
|
||||
|
||||
**Danach kann die Wehr:** auf der Anfahrt sehen, wo der nächste Hydrant liegt
|
||||
und was ihn hergibt.
|
||||
|
||||
## Phase 7 — Benachrichtigungen und Termine
|
||||
## Phase 7 — Benachrichtigungen und Termine · als Nächstes
|
||||
|
||||
- Kanäle: E-Mail, Telegram, ntfy, Web-Push. WhatsApp bewusst nicht.
|
||||
- Vorlagen mit Platzhaltern, je Ereignis und Rolle konfigurierbar
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 216 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 223 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 160 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 162 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 201 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 206 KiB |
Reference in New Issue
Block a user