diff --git a/ER_Diagramm.md b/ER_Diagramm.md index 2262814..a2718ed 100644 --- a/ER_Diagramm.md +++ b/ER_Diagramm.md @@ -7,9 +7,16 @@ erDiagram User ||--o{ FallenBird : creates User ||--o{ Costs : creates User ||--o{ Emailadress : creates + User ||--o{ Bird : creates + User ||--o{ Aviary : creates + User ||--o{ Contact : creates Bird ||--o{ FallenBird : "is type of" Bird ||--o{ BirdEmail : "has emails for" + Bird ||--o{ Costs : "can have costs" + Bird }|--|| BirdStatus : "has status" + Bird }|--|| Circumstance : "has circumstances" + Bird }|--|| Aviary : "housed in" Circumstance ||--o{ FallenBird : "describes finding" BirdStatus ||--o{ FallenBird : "has status" @@ -41,12 +48,16 @@ erDiagram string sex date date_found string place + date death_date + string cause_of_death + text notes + int created_by_id FK datetime created datetime updated - uuid find_circumstances_id FK + bigint find_circumstances_id FK string diagnostic_finding int user_id FK - int status_id FK + bigint status_id FK uuid aviary_id FK string sent_to text comment @@ -57,43 +68,90 @@ erDiagram bigint id PK string name UK richtext description + string species + string age_group + string gender + decimal weight + decimal wing_span + date found_date + string found_location + string finder_name + string finder_phone + string finder_email + uuid aviary_id FK + bigint status_id FK + bigint circumstance_id FK + text notes + int created_by_id FK + datetime created + datetime updated + boolean melden_an_naturschutzbehoerde + boolean melden_an_jagdbehoerde + boolean melden_an_wildvogelhilfe_team } BirdStatus { bigint id PK + string name string description UK } Circumstance { bigint id PK + string name string description } Aviary { uuid id PK - string description UK + string name + string location + string description + int capacity + int current_occupancy + string contact_person + string contact_phone + string contact_email + text notes + int created_by_id FK string condition date last_ward_round string comment + datetime created_at + datetime updated_at } Costs { uuid id PK + bigint bird_id FK uuid id_bird_id FK - decimal costs - date created - string comment + string description + decimal amount + string category + date date + text notes int user_id FK + datetime created + datetime updated } Contact { uuid id PK - string name - string phone + string first_name + string last_name + int created_by_id FK string email + string phone string address - string comment + string city + string postal_code + string country + text notes + boolean is_active + string name uuid tag_id_id FK + datetime created_at + datetime updated_at } ContactTag { @@ -107,6 +165,9 @@ erDiagram datetime created_at datetime updated_at int user_id FK + boolean is_naturschutzbehoerde + boolean is_jagdbehoerde + boolean is_wildvogelhilfe_team } BirdEmail { @@ -121,51 +182,78 @@ erDiagram ### Kern-Entitäten #### `FallenBird` (Patienten) -- **Zweck**: Zentrale Entität für gefundene/verletzte Vögel +- **Zweck**: Zentrale Entität für gefundene/verletzte Vögel (individuelle Patienten) - **Primärschlüssel**: UUID +- **Neue Features**: + - Todesdatum und Todesursache für verstorbene Tiere + - Erweiterte Notizen-Funktionalität + - Verbesserte Audit-Trails - **Beziehungen**: - Gehört zu einem `Bird` (Vogelart) - Hat einen `BirdStatus` (Status) - - Wird von einem `User` erstellt + - Wird von einem `User` erstellt und bearbeitet - Kann in einer `Aviary` (Voliere) untergebracht sein - Hat `Circumstance` (Fundumstände) - Kann `Costs` (Kosten) haben #### `Bird` (Vogelarten) -- **Zweck**: Katalog der verschiedenen Vogelarten +- **Zweck**: Katalog der verschiedenen Vogelarten mit umfassenden Metadaten - **Primärschlüssel**: BigInt - **Eindeutig**: Name -- **Beziehungen**: Hat viele `FallenBird` Instanzen +- **Neue Features**: + - Erweiterte physische Eigenschaften (Gewicht, Flügelspannweite) + - Finder-Informationen (Name, Telefon, E-Mail) + - Benachrichtigungseinstellungen für Behörden + - Beziehungen zu Status, Fundumständen und Volieren +- **Beziehungen**: Hat viele `FallenBird` Instanzen, kann Costs haben #### `Aviary` (Volieren) -- **Zweck**: Unterbringungsplätze für die Vögel +- **Zweck**: Unterbringungsplätze für die Vögel mit erweiterten Verwaltungsfunktionen - **Primärschlüssel**: UUID +- **Neue Features**: + - Name und Standort-Informationen + - Kapazitäts- und Belegungsmanagement + - Kontaktperson-Details (Person, Telefon, E-Mail) + - Audit-Trail (created_by, timestamps) - **Status**: Offen, Geschlossen, Gesperrt -- **Beziehungen**: Kann mehrere `FallenBird` beherbergen +- **Beziehungen**: Kann mehrere `FallenBird` beherbergen, gehört zu einem `User` ### Referenz-Tabellen #### `BirdStatus` (Patientenstatus) - **Zweck**: Status-Katalog (z.B. "In Behandlung", "Freigelassen", "Verstorben") - **Primärschlüssel**: BigInt +- **Neue Features**: Zusätzliches `name` Feld für interne Bezeichnungen +- **Eindeutig**: Description #### `Circumstance` (Fundumstände) - **Zweck**: Katalog der Fundumstände (z.B. "Verletzt gefunden", "Aus Nest gefallen") - **Primärschlüssel**: BigInt +- **Neue Features**: Zusätzliches `name` Feld für interne Bezeichnungen ### Kosten-Management #### `Costs` (Kosten) -- **Zweck**: Kostenerfassung pro Patient +- **Zweck**: Erweiterte Kostenerfassung pro Patient oder Vogelart - **Primärschlüssel**: UUID -- **Beziehungen**: Gehört zu einem `FallenBird` und wird von einem `User` erstellt +- **Neue Features**: + - Duale Beziehungen: zu `Bird` (Vogelart) und `FallenBird` (Patient) + - Kategorisierung (medizinisch, Nahrung, Ausrüstung, Transport, Sonstiges) + - Detaillierte Beschreibungen und Notizen + - Verbesserte Audit-Trails +- **Beziehungen**: Gehört zu einem `FallenBird` oder `Bird` und wird von einem `User` erstellt ### Kontakt-Management #### `Contact` (Kontakte) -- **Zweck**: Kontaktdaten (Finder, Tierärzte, etc.) +- **Zweck**: Erweiterte Kontaktdaten (Finder, Tierärzte, etc.) - **Primärschlüssel**: UUID -- **Beziehungen**: Kann mit `ContactTag` kategorisiert werden +- **Neue Features**: + - Strukturierte Namensfelder (Vor- und Nachname) + - Vollständige Adressinformationen (Stadt, PLZ, Land) + - Aktivitätsstatus für Kontakte + - Benutzer-Zuordnung und Audit-Trail +- **Beziehungen**: Kann mit `ContactTag` kategorisiert werden, gehört zu einem `User` #### `ContactTag` (Kontakt-Tags) - **Zweck**: Kategorisierung von Kontakten @@ -174,13 +262,18 @@ erDiagram ### E-Mail-System #### `Emailadress` (E-Mail-Adressen) -- **Zweck**: Verwaltung von E-Mail-Adressen +- **Zweck**: Erweiterte Verwaltung von E-Mail-Adressen mit Benachrichtigungskategorien - **Primärschlüssel**: BigInt +- **Neue Features**: + - Benachrichtigungskategorien (Naturschutzbehörde, Jagdbehörde, Wildvogelhilfe-Team) + - Automatische Zuordnung basierend auf Vogelart-Einstellungen + - Standard-Aktivierung für Naturschutz und Wildvogelhilfe - **Beziehungen**: Gehört zu einem `User` #### `BirdEmail` (Vogel-E-Mail-Verknüpfung) - **Zweck**: Many-to-Many Beziehung zwischen Vögeln und E-Mail-Adressen - **Primärschlüssel**: BigInt +- **Hinweis**: Wird durch die neuen Benachrichtigungsfelder in `Bird` und `Emailadress` ersetzt ## Datenbank-Design-Prinzipien @@ -190,22 +283,65 @@ erDiagram ### Beziehungstypen - **1:N**: Die meisten Beziehungen (User zu FallenBird, Bird zu FallenBird, etc.) -- **M:N**: `Bird` ↔ `Emailadress` über `BirdEmail` -- **Optional**: `FallenBird.aviary` (kann NULL sein) +- **M:N**: Ersetzt durch direkte Benachrichtigungsfelder in Models +- **Optional**: Viele Felder unterstützen NULL-Werte für Flexibilität +- **Duale Beziehungen**: `Costs` kann sowohl zu `Bird` als auch zu `FallenBird` gehören ### Besondere Eigenschaften -- **Soft References**: `Costs.id_bird` mit `SET_NULL` für Datenschutz -- **Audit Trail**: `created`/`updated` Felder in wichtigen Tabellen -- **Rich Text**: `Bird.description` für formatierte Beschreibungen -- **JSON/Array Fields**: Potentiell für Kosten-Historie (siehe `costs_default()` Funktion) +- **Soft References**: `Costs.id_bird` und `Costs.bird` mit `SET_NULL` für Datenschutz +- **Audit Trail**: Umfassende `created`/`updated` Felder mit Benutzer-Zuordnung +- **Rich Text**: `Bird.description` für formatierte Beschreibungen mit CKEditor 5 +- **Benachrichtigungssystem**: Automatische E-Mail-Benachrichtigungen basierend auf Vogelart und E-Mail-Kategorien +- **Kategorisierung**: Kosten-Kategorien und Kontakt-Tags für bessere Organisation +- **Flexibilität**: Duale Beziehungen ermöglichen Kosten auf Vogelart- und Patientenebene ## Geschäftslogik-Unterstützung Das Schema unterstützt folgende Geschäftsprozesse: 1. **Patientenaufnahme**: FallenBird → Bird, Circumstance, User -2. **Unterbringung**: FallenBird → Aviary -3. **Statusverfolgung**: FallenBird → BirdStatus -4. **Kostenverfolgung**: FallenBird → Costs -5. **Kontaktverwaltung**: Contact → ContactTag -6. **E-Mail-Benachrichtigungen**: Bird → BirdEmail → Emailadress +2. **Vogelartverwaltung**: Bird mit umfassenden Metadaten und Benachrichtigungseinstellungen +3. **Unterbringung**: FallenBird → Aviary mit Kapazitätsmanagement +4. **Statusverfolgung**: FallenBird → BirdStatus +5. **Erweiterte Kostenverfolgung**: FallenBird/Bird → Costs mit Kategorisierung +6. **Kontaktverwaltung**: Contact → ContactTag mit strukturierten Adressdaten +7. **Intelligente E-Mail-Benachrichtigungen**: + - Automatische Benachrichtigung basierend auf Vogelart-Einstellungen + - Kategorisierte E-Mail-Adressen (Naturschutz, Jagd, Wildvogelhilfe) + - Standard-Aktivierung für wichtige Kategorien +8. **Audit und Compliance**: Umfassende Benutzer-Zuordnung und Zeitstempel + +## Änderungsprotokoll (Stand: Juni 2025) + +### Wesentliche Erweiterungen + +#### Bird Model (Vogelarten) +- **Erweiterte Metadaten**: Hinzufügung von physischen Eigenschaften (Gewicht, Flügelspannweite) +- **Finder-Informationen**: Vollständige Kontaktdaten für Finder +- **Benachrichtigungssystem**: Automatische E-Mail-Benachrichtigungen für Behörden +- **Beziehungserweiterungen**: Verbindungen zu Status, Fundumständen und Volieren + +#### E-Mail-System +- **Kategorisierte E-Mail-Adressen**: Naturschutz, Jagd, Wildvogelhilfe-Team +- **Intelligente Standardwerte**: Naturschutz und Wildvogelhilfe standardmäßig aktiviert +- **Automatische Benachrichtigungen**: Basierend auf Vogelart-Einstellungen + +#### Kosten-Management +- **Duale Beziehungen**: Kosten können sowohl Vogelarten als auch Patienten zugeordnet werden +- **Kategorisierung**: Medizinisch, Nahrung, Ausrüstung, Transport, Sonstiges +- **Erweiterte Dokumentation**: Detaillierte Beschreibungen und Notizen + +#### Volieren-Management +- **Kapazitätsverwaltung**: Überwachung von Belegung und Kapazität +- **Kontaktinformationen**: Ansprechpartner mit vollständigen Kontaktdaten +- **Erweiterte Metadaten**: Name, Standort und detaillierte Beschreibungen + +#### Kontakt-System +- **Strukturierte Daten**: Separate Vor- und Nachnamenfelder +- **Vollständige Adressen**: Stadt, PLZ, Land-Informationen +- **Aktivitätsstatus**: Aktive/Inaktive Kontakte + +### Datenintegrität und Compliance +- **Umfassende Audit-Trails**: Benutzer-Zuordnung und Zeitstempel in allen wichtigen Tabellen +- **Flexible Beziehungen**: NULL-fähige Fremdschlüssel für optionale Beziehungen +- **Soft-Delete-Mechanismen**: SET_NULL für wichtige Beziehungen zum Datenschutz