Interne Verwaltungssoftware

KHB Verwaltung

Liegenschaften, Einheiten, Mietverträge, Zahlungen, Nebenkosten, Wartungen & Dokumente — zentral in einem Filament-Panel.

Roadmap — Hausverwaltungs-Software

Status: ✅ fertig · 🚧 teilweise · 🔜 offen. Reihenfolge grob nach Nutzen/Aufwand.

✅ Fundament (steht)

  • Stammdaten — Liegenschaften, Gebäude, Einheiten, Eigentümer, Gesellschafter, Mieter, Mietverträge (Filament-Panel /admin).
  • Zahlungen — Mietzahlungen + Miet-Checkliste (monatlich manuell abhaken, Teilzahlung, Fortschritt).
  • Betriebs-/Nebenkosten — Erfassung + Abrechnungs-Datensätze (Stammdaten via Seeder).
  • Instandhaltung — Wartungen und Ticketsystem (Aufgaben, Prioritäten, Reminder-Command, Wiederholung, Sofort-Notification bei Zuweisung).
  • Dokumente — polymorph; Grundriss-Upload (Stufe 1) je Liegenschaft/Einheit + Beispiel-Seed.
  • Exposé-Export (PDF) — Einzelobjekt + Portfolio, Renditekennzahlen, Logo + Objektbilder (Dummy).
  • Nutzer & Rechte — UserResource, Ticket-Zuweisung, Rollen via Filament Shield.

🚧 Angefangen / lückenhaft

  • Echte E-Mail — Reminder/Notifications brauchen konfiguriertes MAIL_* (sonst nur In-App).
  • Schedulertickets:erinnerungen nur live mit laufendem Cron / schedule:work.
  • Nebenkostenabrechnung — Datensätze ja, aber keine echte Berechnung/Verteilung auf Einheiten + Mieter-PDF.
  • Dokument-Resource — globaler DokumentResource hat noch Stub-Felder (rohe Textfelder, kein FileUpload); nur der Grundriss-Tab nutzt echten Upload.
  • Grundriss — nur Upload; kein Editor, keine 3D-Begehung (Matterport-Einbettung = kleiner nächster Schritt).
  • Bilder/Logo im Exposé — Platzhalter; echte Objektfotos/Firmenlogo noch nicht angebunden.

🔜 Empfohlen als Nächstes (hoher Nutzen)

  1. Mahnwesen — offene/überfällige Mietzahlungen → Mahnstufen + Mahnschreiben-PDF. Baut direkt auf Miet-Checkliste auf.
  2. Echte Nebenkostenabrechnung — Umlageschlüssel (Fläche/Personen/Verbrauch), Verteilung, Mieter-PDF, Nachzahlung/Guthaben.
  3. Dashboard-Widgets — KPIs: Leerstand, offene Forderungen, fällige Tickets/Wartungen, Vertragsende-Fristen.

🔜 Mietverwaltung-Ausbau

  • Vertragsfristen — Kündigung/Befristung → automatische Erinnerungen (analog Ticket-Reminder).
  • Mietanpassungen — Staffel-/Indexmiete, Mieterhöhung mit Historie.
  • Kautionsverwaltung — Konto, Verzinsung, Rückzahlung.
  • Zahlungsabgleich — SEPA-Lastschrift-Export + Bank-Import (CAMT/MT940) statt rein manuell.

🔜 Instandhaltung / Tickets

  • Foto-Anhänge an Tickets (Dokument-morph existiert schon).
  • Handwerker-Stammdaten + Angebote/Aufträge, Kostenverfolgung.
  • Wartungspläne — wiederkehrende Pflichtprüfungen zentral (Rauchmelder, Heizung, Aufzug); Ticket-Wiederholung als Basis vorhanden.

🔜 Dokumente & Kommunikation

  • Serienbrief/Vorlagen — Mietvertrag, Kündigung, Mahnung als PDF generieren (Exposé-Engine wiederverwendbar).
  • Grundriss Stufe 2/3 — Matterport-/Pano-Link je Einheit (klein) bzw. 2D-Editor (groß).
  • Verbrauchserfassung — Zählerstände (Strom/Wasser/Heizung) für verbrauchsbasierte Umlage.

🔜 Plattform / Technik

  • Mieter-/Eigentümer-Portal — zweites Filament-Panel, eingeschränkte Sicht (Zahlungen, Dokumente, Tickets melden).
  • Audit-Log — Aktivitätsverlauf wer/was/wann.
  • Buchhaltungs-Export — DATEV / CSV.
  • CI + Test-Coverage ausbauen.

⚠️ Tech-Debt (sollte mitlaufen)

  • Auto-generierte Resource-Bugs beheben: DokumentForm/WartungForm titel->tel(), MietzahlungsTable zeigt mietvertrag.id statt sinnvoller Labels, dokumentierbar als rohe Textfelder.
  • Smoke-Test rot — seit Shield liefern Resources 403 (Test-User ohne Rolle); Test auf Shield-Setup anpassen.
  • Shield-Rollen feinschleifen (Sachbearbeiter vs. Admin, Grundriss-/Exposé-Permissions).

Hausverwaltungs-Software

Verwaltungssoftware für eine hausverwaltende Gesellschaft. Bildet Liegenschaften, Gebäude, Einheiten, Mieter, Mietverträge, Zahlungen, Betriebs- und Nebenkosten, Wartungen, Tickets und Dokumente ab.

Reine interne Admin-Anwendung über ein einziges Filament-Panel unter /admin — kein öffentliches Frontend, keine API.

Tech-Stack

  • PHP 8.4 · Laravel 13
  • Filament 5 (Admin-Panel, Livewire 4 / Alpine.js / Tailwind 4)
  • Autorisierung: Filament Shield (bezhansalleh/filament-shield) + spatie/laravel-permission
  • PDF: barryvdh/laravel-dompdf (Exposés, Abrechnungen)
  • Build: Vite 8 · Tests: PHPUnit 12
  • DB: standardmäßig SQLite (.env anpassbar)

Setup

composer run setup        # composer install, .env, key:generate, migrate, npm build
php artisan migrate:fresh --seed   # DB neu aufbauen inkl. Demo-Bestand

Anwendung wird lokal über Laravel Herd unter https://hausverwaltungs-software.test ausgeliefert.

Entwicklung

composer run dev          # Server + Queue + Pail-Logs + Vite parallel
npm run build             # Frontend-Assets (bei „Vite manifest"-Fehler)

Tests

php artisan test --compact                         # alle Tests
php artisan test --compact tests/Feature/AdminPanelSmokeTest.php   # eine Datei
php artisan test --compact --filter=test_login_page_loads          # ein Test

AdminPanelSmokeTest iteriert alle registrierten Filament-Resources und prüft, dass Index- und Create-Seiten HTTP 200 liefern. Nach Anlegen/Ändern einer Resource zuerst laufen lassen.

Codestil

vendor/bin/pint --dirty --format agent   # Formatierung geänderter PHP-Dateien (vor Abschluss pflicht)

Domänenmodell

Tabellen, Models und Beziehungen sind durchgängig deutsch benannt. Jedes Model setzt explizit protected $table (z. B. liegenschaften, gebaeude, einheiten, mietvertraege).

Hierarchie:

  • Liegenschaft (Grundstück) → Gebäude, Einheiten, Betriebskosten, Wartungen
  • Gebaeude → gehört zu Liegenschaft, hat Einheiten
  • Einheit (Wohnung/Gewerbe) → gehört zu Liegenschaft, Gebäude, Eigentümer; hat Mietverträge
  • Mietvertrag → gehört zu Einheit; viele Mieter (Pivot mieter_mietvertrag); Mietzahlungen, Nebenkostenabrechnungen
  • Mieter → viele Mietverträge
  • Eigentuemer → viele Einheiten
  • Gesellschafter → Anteilseigner der Verwaltung (eigenständige Stammdaten)
  • Betriebskosten → gehört zu Liegenschaft + Betriebskostenart
  • Nebenkostenabrechnung → gehört zu Mietvertrag
  • Wartung, Ticket → operative Vorgänge je Liegenschaft/Einheit
  • Dokument → polymorph an Liegenschaft, Einheit, Mietvertrag, Mieter

Status (z. B. Vertrag 'aktiv') wird als String gespeichert — keine Enums.

Rollen & Rechte

Vier Rollen via RoleSeeder, Permissions im Schema Aktion:Entity (z. B. Create:Liegenschaft):

Rolle Rechte
Administrator super_admin, Gate-Bypass über alles
Verwalter volle Domain-CRUD, kein User-/Rollen-Management
Buchhaltung Finanzdaten voll, Rest lesend
Nur-Lesen nur View

Rollenverwaltung unter /admin/shield/roles. Nach neuer Resource php artisan shield:generate --all ausführen.

Projektstruktur

  • Resources folgen dem Filament-v5-Split: Resource.php + Schemas/<Name>Form.php + Tables/<Name>Table.php + Pages/
  • Panel-Konfiguration: app/Providers/Filament/AdminPanelProvider.php
  • Policies: app/Policies/
  • Seeder: DatabaseSeederBetriebskostenartSeeder (Referenzdaten) + DemoDataSeeder (Demo-Bestand)