Wiki source code of Schwarmspeicher Electrify
Version 5.1 by Patrizia Gurschka on 2026/09/09 14:21
Show last authors
| author | version | line-number | content |
|---|---|---|---|
| 1 | macro:box | ||
| 2 | |||
| 3 | **Auf dieser Seite** | ||
| 4 | |||
| 5 | macro:toc | ||
| 6 | |||
| 7 | * ((( | ||
| 8 | [[🔋 Schwarmspeicher Electrify>>path:#HD83DDD0BSchwarmspeicherElectrify]] | ||
| 9 | |||
| 10 | * [[Ăśbersicht>>path:#HDCbersicht]] | ||
| 11 | * [[Technologie-Stack>>path:#HTechnologie-Stack]] | ||
| 12 | * [[Projektstruktur>>path:#HProjektstruktur]] | ||
| 13 | * ((( | ||
| 14 | [[Hauptfunktionen>>path:#HHauptfunktionen]] | ||
| 15 | |||
| 16 | * [[Dashboard>>path:#HDashboard]] | ||
| 17 | * [[Projektverwaltung>>path:#HProjektverwaltung]] | ||
| 18 | * [[Standortverwaltung>>path:#HStandortverwaltung]] | ||
| 19 | * [[Gemeinden>>path:#HGemeinden]] | ||
| 20 | * [[Kartenansicht>>path:#HKartenansicht]] | ||
| 21 | * [[Potenzialanalyse>>path:#HPotenzialanalyse]] | ||
| 22 | * [[Pipeline>>path:#HPipeline]] | ||
| 23 | * [[Meilensteinverwaltung>>path:#HMeilensteinverwaltung]] | ||
| 24 | * [[Aufgabenverwaltung>>path:#HAufgabenverwaltung]] | ||
| 25 | * [[Dokumentenverwaltung>>path:#HDokumentenverwaltung]] | ||
| 26 | * [[Standortpartner>>path:#HStandortpartner]] | ||
| 27 | * [[Stockende Projekte>>path:#HStockendeProjekte]] | ||
| 28 | * [[Forecast>>path:#HForecast]] | ||
| 29 | * [[PV Co-Location>>path:#HPVCo-Location]] | ||
| 30 | * [[Benutzerverwaltung>>path:#HBenutzerverwaltung]] | ||
| 31 | * [[Audit Log>>path:#HAuditLog]] | ||
| 32 | ))) | ||
| 33 | * [[Routing>>path:#HRouting]] | ||
| 34 | * [[Datenzugriff>>path:#HDatenzugriff]] | ||
| 35 | * [[Supabase>>path:#HSupabase]] | ||
| 36 | * [[Architektur>>path:#HArchitektur]] | ||
| 37 | * [[Server>>path:#HServer]] | ||
| 38 | ))) | ||
| 39 | |||
| 40 | |||
| 41 | |||
| 42 | = 🔋 Schwarmspeicher Electrify = | ||
| 43 | |||
| 44 | macro:info | ||
| 45 | |||
| 46 | Information | ||
| 47 | |||
| 48 | **Zweck:** Webbasiertes Projektmanagementsystem zur Verwaltung von Batterie-Großspeicherprojekten in Deutschland und Österreich — vom Standort über Genehmigungen bis zur Projektsteuerung und Dokumentation. Die aktuelle Anwendung enthält zusätzlich den eigenständigen Use-Case **PV Co-Location**. | ||
| 49 | |||
| 50 | Click and drag to move | ||
| 51 | |||
| 52 | == Ăśbersicht == | ||
| 53 | |||
| 54 | **Schwarmspeicher Electrify** unterstĂĽtzt den gesamten Projektlebenszyklus: Standortidentifikation, Pipeline, Genehmigungen, Projektsteuerung, Forecast, Aufgaben und Dokumentation. Ăśber einen Use-Case-Switcher kann zwischen **Schwarmspeicher** und **PV Co-Location** gewechselt werden. Der aktive Use-Case wird aus dem URL-Pfad abgeleitet. | ||
| 55 | |||
| 56 | == Technologie-Stack == | ||
| 57 | |||
| 58 | **Frontend:** React 18.3.1 · TypeScript 5.8.3 · Vite 5.4.19 · Tailwind CSS 3.4.17 · shadcn/ui / Radix UI · React Router DOM 6.30.1 · TanStack React Query 5.83.0 · React Hook Form 7.61.1 · Zod 3.25.76 · Leaflet 1.9.4 / React Leaflet 4.2.1 · Recharts 2.15.4 · xlsx 0.18.5 | ||
| 59 | |||
| 60 | **Backend:** Supabase — PostgreSQL, Authentication, Storage, Edge Functions, Row Level Security (RLS) | ||
| 61 | |||
| 62 | **Tests:** Vitest 3.2.4 · Playwright 1.57.0 | ||
| 63 | |||
| 64 | == Projektstruktur == | ||
| 65 | |||
| 66 | macro:code | ||
| 67 | |||
| 68 | src/ | ||
| 69 | ├── components/ UI-Komponenten und Fachkomponenten | ||
| 70 | ├── pages/ Seiten der Anwendung | ||
| 71 | ├── hooks/ Datenzugriffe und Business-Logik | ||
| 72 | ├── integrations/ Supabase Client und generierte Typen | ||
| 73 | ├── types/ TypeScript-Modelle, inkl. PV Co-Location | ||
| 74 | └── lib/ Hilfsfunktionen | ||
| 75 | |||
| 76 | supabase/ | ||
| 77 | ├── migrations/ | ||
| 78 | ├── functions/ | ||
| 79 | └── config.toml | ||
| 80 | |||
| 81 | Click and drag to move | ||
| 82 | |||
| 83 | == Hauptfunktionen == | ||
| 84 | |||
| 85 | === Dashboard === | ||
| 86 | |||
| 87 | Zentrale Ăśbersicht ĂĽber Projekte, Status, offene Aufgaben, Kennzahlen und Projektfortschritt. FĂĽr PV Co-Location existiert ein eigenes Dashboard mit Kennzahlen zu aktiven Standorten, Modulleistung, BESS-Leistung, Standortpartnern, Pipeline sowie Plan-/Ist-Werten. | ||
| 88 | |||
| 89 | === Projektverwaltung === | ||
| 90 | |||
| 91 | Verwaltung aller Batteriespeicherprojekte: anzeigen, Detailansicht, bearbeiten, Projektstatus und Meilensteine. Komponenten: ProjectTable, ProjectDetail. PV Co-Location besitzt eine eigene Projektansicht mit CoLocationProjectTable und CoLocationStandortDetail. | ||
| 92 | |||
| 93 | === Standortverwaltung === | ||
| 94 | |||
| 95 | Standorte anlegen, bearbeiten, importieren, Historie und Dokumente. Komponenten: StandortDetail, CreateStandortForm, StandortImportDialog, StandortDokumente. PV Co-Location ergänzt eigene Formulare, Import, Bulk-Edit und Detailansichten. | ||
| 96 | |||
| 97 | === Gemeinden === | ||
| 98 | |||
| 99 | Verwaltung der Gemeinden (Komponente CreateGemeindeForm). Zusätzlich existiert eine Supabase Edge Function zum Abruf von NÖ-Gemeinden (supabase/functions/fetch-noe-gemeinden). | ||
| 100 | |||
| 101 | === Kartenansicht === | ||
| 102 | |||
| 103 | Darstellung aller Standorte auf einer interaktiven Karte mit Leaflet / React Leaflet. Komponenten: ProjectMap, LocationPickerMap. PV Co-Location besitzt eine eigene Karte mit Standortselektion, Partnerfilter und Übergabe ausgewählter Standort-IDs an die Projektansicht. | ||
| 104 | |||
| 105 | === Potenzialanalyse === | ||
| 106 | |||
| 107 | Bewertung möglicher Standorte. Komponenten: PotenzialTabelle, PotenzialPage. Die Potenzialanalyse ist aktuell dem Schwarmspeicher-Use-Case zugeordnet. | ||
| 108 | |||
| 109 | === Pipeline === | ||
| 110 | |||
| 111 | Verwaltung von Vorprojekten. Komponenten: VorprojektePipeline, VorprojektTimeline. PV Co-Location besitzt eine separate Pipeline für co_vorprojekte mit Standortpartner, Kontakt, Standort-/kWp-/BESS-Potenzial, Realisierungswahrscheinlichkeit, Follow-up und nächsten Schritten. | ||
| 112 | |||
| 113 | === Meilensteinverwaltung === | ||
| 114 | |||
| 115 | Projektfortschritt über Meilensteine. Komponenten: MeilensteinMatrix, MeilensteinQuickEdit. PV Co-Location verwendet eine eigene Meilensteinmatrix und Quick-Edit-Logik. Zu den dort abgebildeten Schritten gehören u. a. Grundstücksvertrag, Netzzugangsvertrag, Fertigstellungsmeldung, BESS-Bezugsleistung und Inbetriebnahme. | ||
| 116 | |||
| 117 | === Aufgabenverwaltung === | ||
| 118 | |||
| 119 | Projektbezogene Aufgaben. Komponenten: TaskManager, TasksPage. Hook: useTasks(). PV Co-Location verwendet mit CoTaskManager, CoLocationTasksPage und useCoTasks() eine eigene, vom Schwarmspeicher getrennte Aufgabenliste. | ||
| 120 | |||
| 121 | === Dokumentenverwaltung === | ||
| 122 | |||
| 123 | Zu jedem Standort können Dokumente verwaltet werden. Komponenten: StandortDokumente, PartnerDokumente. PV Co-Location besitzt eigene Standort- und Partnerdokumente sowie den separaten Frontend-Zugriff auf den Storage-Bucket co-dokumente; Downloads werden als Signed URLs erzeugt. | ||
| 124 | |||
| 125 | === Standortpartner === | ||
| 126 | |||
| 127 | Verwaltung von Projektpartnern. Komponenten: StandortpartnerManager, StandortpartnerTable. FĂĽr PV Co-Location existieren separate Komponenten und Datenzugriffe fĂĽr Standortpartner. | ||
| 128 | |||
| 129 | === Stockende Projekte === | ||
| 130 | |||
| 131 | Erkennung von Projekten bzw. Standorten, deren definierte Lead Times zwischen Meilensteinen ĂĽberschritten sind. FĂĽr PV Co-Location sind die Lead-Time-Regeln in der UI anpassbar und werden derzeit im Browser-localStorage gespeichert. | ||
| 132 | |||
| 133 | === Forecast === | ||
| 134 | |||
| 135 | Forecast auf Basis von Monatszielen und erreichten Meilensteinen. PV Co-Location enthält Plan-/Ist-Auswertungen für Netzzugangsvertrag, BESS beantragt, BESS bewilligt und BESS in Betrieb sowie eine Jahresauswahl und editierbare Monatsziele. | ||
| 136 | |||
| 137 | === PV Co-Location === | ||
| 138 | |||
| 139 | Zweiter fachlich getrennter Use-Case mit eigenen Routen, Seiten, Hooks und Datenobjekten. Enthalten sind Dashboard, Karte, Projekte, Pipeline, stockende Standorte, Forecast und Tasks. Die Use-Case-Umschaltung erfolgt ĂĽber den Sidebar-Switcher; /pv-colocation/* aktiviert PV Co-Location, die ĂĽbrigen Anwendungspfade den Schwarmspeicher. | ||
| 140 | |||
| 141 | === Benutzerverwaltung === | ||
| 142 | |||
| 143 | Anmeldung, Passwortänderung und Rollen. Komponenten: AuthProvider, ProtectedRoute, BenutzerPage, ChangePasswordDialog. Backend: Supabase Authentication. Die Anwendung unterstützt zudem eine verpflichtende Passwortänderung über useMustChangePassword(). | ||
| 144 | |||
| 145 | === Audit Log === | ||
| 146 | |||
| 147 | Nachvollziehbarkeit von Änderungen über AuditLogPage und audit_log. Der Zugriff auf das Änderungsprotokoll ist über die vorhandenen Datenbankregeln auf Administratoren eingeschränkt. | ||
| 148 | |||
| 149 | == Routing == | ||
| 150 | |||
| 151 | |=Seite|=Beschreibung | ||
| 152 | |Dashboard|Startseite | ||
| 153 | |Projekte|ProjektĂĽbersicht | ||
| 154 | |Pipeline|Vorprojekte | ||
| 155 | |Potenziale|Standortpotenziale | ||
| 156 | |Karte|Kartenansicht | ||
| 157 | |Stockend|Stockende Projekte / Standorte | ||
| 158 | |Forecast|Forecast | ||
| 159 | |Aufgaben|Aufgabenverwaltung | ||
| 160 | |Audit Log|Änderungsprotokoll | ||
| 161 | |Benutzer|Benutzerverwaltung | ||
| 162 | |Login|Anmeldung | ||
| 163 | |||
| 164 | **Schwarmspeicher-Routen:** / · /projekte · /pipeline · /potenzial · /karte · /stockend · /forecast · /tasks · /benutzer · /historie | ||
| 165 | |||
| 166 | **PV-Co-Location-Routen:** /pv-colocation · /pv-colocation/projekte · /pv-colocation/pipeline · /pv-colocation/karte · /pv-colocation/stockend · /pv-colocation/forecast · /pv-colocation/tasks | ||
| 167 | |||
| 168 | == Datenzugriff == | ||
| 169 | |||
| 170 | Der Zugriff erfolgt ĂĽber Custom Hooks, die die Kommunikation mit Supabase kapseln. React Query ĂĽbernimmt Laden, Mutationen und Cache-Invalidierung. | ||
| 171 | |||
| 172 | macro:code | ||
| 173 | |||
| 174 | Schwarmspeicher: | ||
| 175 | useStandorte() | ||
| 176 | useGemeinden() | ||
| 177 | useVorprojekte() | ||
| 178 | useTasks() | ||
| 179 | usePotenzialDaten() | ||
| 180 | useStandortpartner() | ||
| 181 | useMonatsziele() | ||
| 182 | useDokumente() | ||
| 183 | |||
| 184 | PV Co-Location: | ||
| 185 | useCoLocationStandorte() | ||
| 186 | useCoLocationStandortpartner() | ||
| 187 | useCoVorprojekte() | ||
| 188 | useCoTasks() | ||
| 189 | useCoMonatsziele() | ||
| 190 | useCoDokumente() | ||
| 191 | |||
| 192 | Click and drag to move | ||
| 193 | |||
| 194 | == Supabase == | ||
| 195 | |||
| 196 | **Authentication:** Login, Passwortänderung, Rollenverwaltung und geschützte Routen. | ||
| 197 | |||
| 198 | **Datenbank:** Wird ĂĽber SQL-Migrationen verwaltet (supabase/migrations/). Die Migrationen definieren Tabellen, Policies und Datenbankfunktionen. | ||
| 199 | |||
| 200 | **Storage:** Der bestehende Bucket dokumente ist laut Migration privat und auf authentifizierte Zugriffe beschränkt. Das PV-Co-Location-Frontend referenziert zusätzlich den Bucket co-dokumente. | ||
| 201 | |||
| 202 | **Audit:** Änderungen werden über audit_log und Datenbank-Trigger protokolliert; die Audit-Funktion ist gegen direkte Ausführung durch PUBLIC/anon/authenticated gehärtet. | ||
| 203 | |||
| 204 | **Edge Functions:** | ||
| 205 | |||
| 206 | * fetch-noe-gemeinden — lädt Gemeinden aus Niederösterreich | ||
| 207 | * manage-users — Benutzerverwaltung | ||
| 208 | |||
| 209 | macro:info | ||
| 210 | |||
| 211 | Information | ||
| 212 | |||
| 213 | **Technischer Hinweis:** Die Frontend-Hooks referenzieren mehrere co_* Datenobjekte (u. a. co_standorte, co_prozessschritte, co_standortpartner, co_vorprojekte, co_tasks, co_monatsziele und co_dokumente) sowie den Storage-Bucket co-dokumente. Im bereitgestellten supabase/migrations-Verzeichnis und in den generierten Supabase-Typen sind diese Co-Location-Objekte nicht vollständig enthalten. Für ein reproduzierbares Deployment sollten die fehlenden Schema-, RLS- und Storage-Migrationen ergänzt und die Typen anschließend neu generiert werden. | ||
| 214 | |||
| 215 | Click and drag to move | ||
| 216 | |||
| 217 | == Architektur == | ||
| 218 | |||
| 219 | macro:mermaid | ||
| 220 | |||
| 221 | macro:velocity | ||
| 222 | |||
| 223 | macro:html | ||
| 224 | |||
| 225 | {{{flowchart TD | ||
| 226 | FE["React Frontend"] --> UC["UseCaseProvider / Router"] | ||
| 227 | UC --> SS["Schwarmspeicher Pages"] | ||
| 228 | UC --> CO["PV Co-Location Pages"] | ||
| 229 | SS --> RQ["React Query"] | ||
| 230 | CO --> RQ | ||
| 231 | RQ --> SC["Supabase Client"] | ||
| 232 | SC --> AUTH["Auth"] | ||
| 233 | SC --> DBS["Database / RLS"] | ||
| 234 | SC --> ST["Storage"] | ||
| 235 | DBS --> EF["Edge Functions"] | ||
| 236 | DBS --> AL["Audit Log / Trigger"]}}} | ||
| 237 | |||
| 238 | Click and drag to move | ||
| 239 | |||
| 240 | == Server == | ||
| 241 | |||
| 242 | Für die lokale Entwicklung nennt die aktuelle README Node.js ≥ 18 oder Bun, Docker / Docker Compose und die Supabase CLI. Der Vite-Dev-Server läuft laut README auf Port 8200, Supabase Studio auf 127.0.0.1:54323. | ||
| 243 | |||
| 244 | Die bisherige Dokumentation nennt zusätzlich den Betrieb unter /mnt/data/schwarmspeicher/schwarmspeicher-electrify_lokal in einem Docker-Compose-Stack sowie die Adresse [[http:~~/~~/schwarmspeicher.spl-tele.com:8200>>url:http://schwarmspeicher.spl-tele.com:8200]] im VPN und SPL-TELE-Netzwerk. Diese konkrete produktive Serverkonfiguration ist im bereitgestellten Quellpaket nicht enthalten und konnte daraus nicht erneut verifiziert werden. |