f19c490f44da175485fa2bb2db863e8d0fe5574b
Seit dem 02.09.2026 legt die Telefonanlage Anfragen mit source='telefon' an. Von 309 solchen Zeilen haben 207 keine requester_person_id, weil der Anrufer nicht zugeordnet werden konnte - darunter alle 33 offenen. Saemtliche Anzeigepfade haengen per INNER JOIN an persons, wodurch genau diese Zeilen kommentarlos aus dem Ergebnis fielen. Die Ansicht "Unbeantwortete Anfragen" zeigte dadurch 2 statt 35 Eintraege. Bei mail- und portal-Anfragen konnte das nicht auffallen: die Formulare legen die Person vorher in persons an und brechen sonst ab (rezepte.php), entsprechend hat dort keine einzige Zeile eine fehlende Person. personid und userid stehen zwar auch bei mail auf 0, sind aber tote Legacy-Spalten und tragen den Personenbezug nicht. Die Anzeigepfade verwenden jetzt LEFT JOIN und zeigen ohne Treffer "Kein Patient zugeordnet" statt einer leeren Zeile: Liste, Antworten, Loesch-Dialog, Loeschen ohne Mail und Antwort einsehen. Die beiden Knoepfe, die zwingend eine Mailadresse brauchen - Antworten und Loeschen mit Mail - erscheinen nur noch mit zugeordneter Person; wer das Antwortformular direkt aufruft, bekommt einen Hinweis samt Transkript statt eines Abbruchs. "Telefonisch beantwortet" brauchte keine Aenderung, dieser Weg fragt nur die anfrageid ab. Der Mailversand in functions.inc.php und die patientenbezogene Historie behalten ihren INNER JOIN - dort ist eine Person Voraussetzung. Neu ist GetAnfrageHerkunft(). Die Liste leitete die Herkunft bisher aus sicherenachricht ab, was Telefonanfragen mangels Wert als "Mailanfrage" etikettierte. Nur dieser dritte Fall kommt aus source. Die Unterscheidung intern/Mail bleibt bewusst an sicherenachricht haengen, weil insertAnfrage() kein source setzt und 304 interne Anfragen deshalb als source='mail' in der Tabelle stehen; ueber source vergeben haette das Label 9871 Bestandszeilen umetikettiert, darunter die datenschutzrelevante Unterscheidung. Nachgeprueft gegen die Datenbank: die Ansicht liefert statt 2 nun 35 Zeilen mit allen 33 offenen Telefon-Anfragen. Der Renderblock ueber alle 12784 Zeilen simuliert, error_reporting=E_ALL als Exception, ohne Warnung; das Herkunfts-Label bleibt fuer 12475 Bestandszeilen unveraendert und aendert sich nur fuer die 309 Telefon-Zeilen. Alle fuenf von der Liste erreichbaren Aktionen laden fuer eine Zeile ohne Person. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
praxis-creutzburg-web
Languages
PHP
79.3%
JavaScript
17.5%
HTML
1.6%
CSS
0.9%
SCSS
0.6%