diff --git a/kimi.md b/kimi.md
index c263c0a..c356733 100644
--- a/kimi.md
+++ b/kimi.md
@@ -189,6 +189,25 @@ tar -czf mp-dist.tar.gz -C dist .
## 8. Verlauf / offene Punkte
+**Erledigt 04.10. (v1.15):** Struktur „1 Haus → mehrere Wohneinheiten" in der
+Verwaltung verankert + Bugfix Haus-Umbenennung. BUGFIX (wichtig): der FK
+`costs_building_fkey` aus v1.14 hatte kein ON UPDATE CASCADE → jede
+Haus-Umbenennung (PATCH /api/buildings/:name) schlug mit FK-Verletzung fehl
+(„Interner Serverfehler"), sobald Kostenpositionen existieren. Fix in db.js:
+Constraint per DO-Block idempotent auf ON UPDATE CASCADE neu gesetzt (DROP +
+ADD; SCHEMA läuft als eine Simple-Query ohne Parameter, DO-Blöcke sind darin
+erlaubt). E2E-Rundreise verifiziert: Umbenennen zieht units + meters +
+costs mit, Rückbenennung sauber. UI (Bestand.tsx komplett überarbeitet):
+Haus-Karten enthalten jetzt die 1:n-Struktur sichtbar – pro Haus
+Belegungsfortschritt (Balken „X von Y Wohneinheiten angelegt", amber bei
+Über-Soll, Hinweistext), eingebettete sortierte Wohnungsliste (Etage, dann
+Nummer numerisch) mit Status/Mieter/Warmmiete/Bearbeiten, „+ Wohnung"
+direkt pro Haus (festesHaus-Prop → Haus-Select vorbelegt und disabled,
+Dialogtitel passt sich an). Globaler „Neue Wohnung"-Button oben bleibt mit
+freier Hauswahl. Verwaiste Wohnungen (Haus existiert nicht) werden separat
+mit Korrekturhinweis gelistet. Server: unverändert – POST/PATCH /api/units
+prüft bereits, dass das Ziel-Haus in buildings existiert.
+
**Erledigt 04.10. (v1.14):** Steuermodul „Steuer & Kosten" (/kosten, Nav zwischen
Zählerstände und Dokumente, für beide Rollen sichtbar). Neue Tabelle `costs`
(building NOT NULL → buildings.name, unit_id NULL = hausweite Position, jahr,
diff --git a/server/src/db.js b/server/src/db.js
index cb31565..c68b7fb 100644
--- a/server/src/db.js
+++ b/server/src/db.js
@@ -153,6 +153,17 @@ CREATE TABLE IF NOT EXISTS costs (
);
CREATE INDEX IF NOT EXISTS idx_costs_building ON costs(building);
CREATE INDEX IF NOT EXISTS idx_costs_unit ON costs(unit_id);
+-- FK hausweit: Umbenennung eines Hauses muss costs.building automatisch
+-- mitziehen (sonst bricht jede Haus-Umbenennung mit FK-Verletzung ab,
+-- sobald Kostenpositionen existieren). Constraint idempotent neu setzen.
+DO $$
+BEGIN
+ IF EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'costs_building_fkey') THEN
+ ALTER TABLE costs DROP CONSTRAINT costs_building_fkey;
+ END IF;
+ ALTER TABLE costs ADD CONSTRAINT costs_building_fkey
+ FOREIGN KEY (building) REFERENCES buildings(name) ON UPDATE CASCADE;
+END $$;
`
async function init() {
diff --git a/src/pages/Bestand.tsx b/src/pages/Bestand.tsx
index f01934f..1106531 100644
--- a/src/pages/Bestand.tsx
+++ b/src/pages/Bestand.tsx
@@ -1,5 +1,5 @@
import { useMemo, useState } from 'react'
-import { Building2, Home, MapPin, CalendarDays, ArrowUpDown, LayoutGrid, Ruler, Pencil, Plus, Users } from 'lucide-react'
+import { Building2, Home, MapPin, CalendarDays, ArrowUpDown, LayoutGrid, Ruler, Pencil, Plus, Users, DoorOpen } from 'lucide-react'
import { Button } from '@/components/ui/button'
import { Badge } from '@/components/ui/badge'
import {
@@ -102,7 +102,7 @@ function HausDialog({ haus }: { haus?: Building }) {
setEtagenhoehe(e.target.value)} />