# Schema-Wünsche aus Dashboard und Kontakten Diese Datei sammelt, was beim Bauen von `/heute` und den Kontakten aufgefallen ist. `prisma/schema.prisma` wurde **nicht** geändert – alles hier ist ein Vorschlag für eine spätere Migration, mit der Begründung daneben. --- ## 1. `Heimkostenmonat`: Kostenseite und Deckungsseite überschneiden sich **Was ich gebaut habe.** Die Kennzahl „Deckungslücke“ rechnet exakt nach der Gruppierung im Schema: ``` Gesamtkosten = pflegeEigenanteil + unterkunftVerpflegung + investitionskosten + ausbildungsumlage + zusatzleistungen Deckung = pflegekasse + leistungszuschlag + rente + sonstigeEinkuenfte + sozialhilfe + eigenmittel Deckungslücke = Gesamtkosten − Deckung ``` **Das Problem.** `pflegeEigenanteilCent` heißt „Eigenanteil“. Der einrichtungseinheitliche Eigenanteil ist definitionsgemäß **schon um die Leistung der Pflegekasse nach § 43 SGB XI gekürzt**. Steht in derselben Zeile zusätzlich `pflegekasseCent` als Deckung, wird dieser Betrag doppelt gezählt, und das Dashboard weist eine Überdeckung aus, die es nicht gibt. Dasselbe gilt für `leistungszuschlagCent` (§ 43c SGB XI), der den Eigenanteil ebenfalls mindert. **Wunsch.** Entweder - den Kommentar am Feld schärfen: „`pflegeEigenanteilCent` ist der **Brutto**-Pflegesatz; `pflegekasseCent` und `leistungszuschlagCent` werden davon abgezogen" – dann stimmt die Rechnung oben; oder - ein Feld `heimrechnungGesamtCent` ergänzen, das schlicht die Summe der Heimrechnung trägt, und die Aufteilung nur noch informativ führen. Solange das offen ist, sollte das Heim-Modul entweder den Bruttosatz oder `pflegekasseCent = 0` erfassen – konsequent das eine oder das andere. Wer die Kachel zum ersten Mal sieht und einen absurden Wert findet, weiß mit dieser Notiz, woran es liegt. --- ## 2. `Kontaktprotokoll.datum` könnte `@db.Date` sein **Was ich gebaut habe.** Das Feld ist `DateTime`. Die Schnellerfassung kennt nur einen Tag, keine Uhrzeit; gespeichert wird deshalb bewusst **12:00 UTC**. Um die Mittagszeit herum verschiebt keine Zeitzone den Eintrag auf den Vor- oder Folgetag, und die Auswertung („an wie vielen Tagen bestand persönlicher Kontakt?") zählt zuverlässig. **Wunsch.** `datum DateTime @db.Date` – dann verschwindet die 12:00-Konvention, und der Typ sagt, was gemeint ist. Fachlich zählt beim Jahresbericht nach § 1863 BGB der Tag, nicht die Uhrzeit. Falls die Uhrzeit später doch gebraucht wird (Zeiterfassung für die Vergütung), wäre ein zusätzliches `beginnUhrzeit String?` sauberer als das Datumsfeld doppelt zu belegen. --- ## 3. `Kontakt`: kein Feld für „nicht mehr zuständig" Sachbearbeiter wechseln. Heute bleibt nur der Papierkorb – dann ist aber auch die Gesprächshistorie aus dem Verzeichnis verschwunden, obwohl sie für den Jahresbericht und für Rückfragen weiter gebraucht wird. **Wunsch.** `aktivBis DateTime? @db.Date` oder `aktiv Boolean @default(true)`. Das Verzeichnis würde inaktive Kontakte einklappen statt löschen, und die Historie bliebe sichtbar. Ein `nachfolgerId String?` auf denselben Typ wäre die Kür: „Frau Krämer, jetzt Herr Sandner". --- ## 4. `Nachforderung`: kein `betreuteId` `Nachforderung` hängt nur über `antrag` an der betreuten Person. Jede Abfrage muss deshalb über die Beziehung filtern: ```ts where: { antrag: { betreuteId, geloeschtAm: null }, geloeschtAm: null } ``` Das funktioniert, ist aber die einzige Stelle im Dashboard, an der die Zugriffsprüfung nicht direkt auf einer Spalte sitzt. Bei einer späteren Row-Level-Security in Postgres wäre eine denormalisierte `betreuteId` (wie bei `DokumentVerknuepfung`) die einfachere Grundlage. --- ## 5. `Vermoegensposten`: kein Kennzeichen „zählt nicht in die Summe" Die Kachel „Vermögen" summiert je Posten den jüngsten `Wertstand` und zieht `VERBINDLICHKEIT` ab. Posten ohne jeden Wertstand werden gesondert gezählt und ausgewiesen („2 Posten haben noch keinen Wert und fehlen in dieser Summe") – stillschweigend als 0 zu führen wäre in einer Rechnungslegung nach § 1865 BGB falsch. Offen bleibt der Fall „bewusst nicht bewertbar" (Hausrat, persönliche Gegenstände). Heute sieht er aus wie „vergessen". **Wunsch.** `ohneWertBegruendung String?` – analog zu `belegFehltBegruendung` bei `Buchung`. Dann kann die Kachel zwischen „fehlt noch" und „bewusst ohne Wert" unterscheiden. --- ## 6. Kein Modell für die Sachstandsanfrage Die Kachel „Wartet auf andere" verlinkt auf `/vorgaenge/?aktion=sachstandsanfrage`. Ob daraus ein Schreiben wird, entscheidet das Vorgangsmodul. Wird eine Anfrage verschickt, sollte `Vorgang.letzterKontaktAm` fortgeschrieben werden – sonst bleibt der Vorgang für immer rot, obwohl gerade nachgefasst wurde. Das ist kein Schema-Wunsch, sondern eine Verabredung zwischen den Modulen; sie steht hier, damit sie nicht verloren geht.