# M0 Code- und Prozessinventar Stand: 2026-07-11 Dieses Inventar basiert auf statischer Sichtung des Legacy-Codes im Repository. Das echte Datenbankschema muss noch mit `schema-export.sql` verifiziert werden. ## App-Struktur | Datei | Rolle | Wichtige Beobachtung | | --- | --- | --- | | `config.php` | AD-/DB-Konfiguration | Erstellt globale SQL-Server-Verbindung `$conn` | | `functions.php` | Auth-/User-Helper | Liest `$_SERVER['AUTH_USER']`, inkludiert LDAP, prüft `kl_Mitarbeiter` | | `functionsLDAP.php` | LDAP-Mailauflösung | Ermittelt `$mailadress` aus AD | | `header.php` | HTML-Head und Hinweisbanner | Lädt `assets/css/main.css`, liest `kl_hinweise` | | `footer.php` | App-Sidebar und JS | Enthält die sichtbare Navigation und Admin-Menüs | | `nav.php` | Navigation | Aktuell praktisch leer | | `headerline.php` | Headerfragment | Enthält NUL-Zeichen, fachlich unklar | | `assets/css/main.css` | Hauptdesign | HTML5-UP Editorial, grüner Akzent, Tabellen, Buttons, Sidebar | | `DataTables/` | Tabellen-Assets | Wird teilweise eingebunden, aber nicht konsequent initialisiert | | `PHPMailer/` | Mailversand | Für Rundmails/Jahresauswertung genutzt | | `TCPDF/` | PDF-Export | Für Kaffeelisten-Export genutzt | ## Fachliche Kernseiten | Datei | Prozess | Tabellen | | --- | --- | --- | | `index.php` | Persönliches Dashboard, Saldo, Jahreswerte, eigene Striche, PayPal-Links | `kl_Mitarbeiter`, `kl_Einzahlungen`, `kl_Kaffeeverbrauch`, `kl_config` | | `kaffeeliste.php` | Admin-Gesamtübersicht mit Salden | `kl_Mitarbeiter`, `kl_Einzahlungen`, `kl_Kaffeeverbrauch` | | `stricheintragen.php` | Sammelerfassung von Strichen | `kl_Mitarbeiter`, `kl_Kaffeeverbrauch`, `kl_config` | | `einzahlung.php` | Sammelerfassung von Einzahlungen | `kl_Mitarbeiter`, `kl_Einzahlungen`, `kl_Kaffeeverbrauch` | | `mitarbeiterverwalten.php` | Mitglieder anlegen, bearbeiten, aktivieren, deaktivieren | `kl_Mitarbeiter` | | `namenanpassen.php` | Anzeigenamen ändern | `kl_Mitarbeiter` | | `letzteneintraege.php` | Letzte Buchungen anzeigen und löschen | `kl_Einzahlungen`, `kl_Kaffeeverbrauch`, `kl_Mitarbeiter` | | `csvupload.php` | Zahlungs-CSV importieren | `kl_Mitarbeiter`, `kl_Einzahlungen` | | `exportKaffeeliste.php` | PDF-/Listenexport | `kl_Mitarbeiter`, `kl_Kaffeeverbrauch`, `kl_Einzahlungen`, `kl_config` | | `mailausgebe.php` | Mailausgabe/Adressliste | `kl_Mitarbeiter` | | `mailversenden.php` | Massenmail mit aktuellem Stand | `kl_Mitarbeiter`, `kl_Einzahlungen`, `kl_Kaffeeverbrauch` | | `hinweise.php` | Hinweise pflegen | `kl_hinweise` | | `faq.php` | FAQ | Keine fachlichen Schreibzugriffe | | `jahresauswertung.php` | Jahresgutschriften und Mailversand | `kl_Mitarbeiter`, `kl_Kaffeeverbrauch`, `kl_Einzahlungen` | | `umfrage.php` | Umfrage | `CoffeeSurveyVotedEmails`, `CoffeeSurveyResponses` | | `umfrageergebnisse.php` | Umfrageauswertung | `CoffeeSurveyVotedEmails`, `CoffeeSurveyResponses` | ## Abgeleitete Tabellen und Spalten Diese Spalten sind aus dem Code abgeleitet und müssen mit dem echten DB-Schema abgeglichen werden. | Tabelle | Abgeleitete Spalten | | --- | --- | | `kl_Mitarbeiter` | `MitarbeiterID`, `Name`, `Email`, `aktiv`, `admin`, `paypalname` | | `kl_Einzahlungen` | `EinzahlungsID`, `MitarbeiterID`, `Betrag`, `Datum` | | `kl_Kaffeeverbrauch` | `VerbrauchID`, `MitarbeiterID`, `AnzahlStriche`, `Kosten`, `KostenproStrich`, `Datum`, `Eintragsart` | | `kl_config` | `KostenproStrich`, `paypaluse`, `paypallink`, `strichperweb` | | `kl_hinweise` | `id`, `nachricht`, `gueltig_bis` | | `CoffeeSurveyVotedEmails` | `EmailNorm` | | `CoffeeSurveyResponses` | diverse `Q*_`-Antwortspalten, siehe Umfragecode | ## Prozesslandkarte ### Authentifizierung 1. Seite inkludiert `functions.php`. 2. `functions.php` liest `$_SERVER['AUTH_USER']`. 3. `functionsLDAP.php` ermittelt Mailadresse aus LDAP. 4. Zugriff wird über `kl_Mitarbeiter.Email`, `aktiv` und `admin` geprüft. M0-Feststellung: Login-Konto, Kaffee-Teilnehmer und Rolle sind im Legacy-Modell gekoppelt. Für SaaS müssen `users`, `participants` und `tenant_memberships` getrennt werden. ### Persönliches Dashboard Quelle: `index.php`. Berechnungen: - Mitarbeiter per E-Mail suchen. - Gesamteinzahlung: Summe `kl_Einzahlungen.Betrag`. - Gesamtausgabe: Summe `kl_Kaffeeverbrauch.Kosten`. - Gesamtstriche: Summe `kl_Kaffeeverbrauch.AnzahlStriche`. - Aktueller Stand: Einzahlungen minus Ausgaben. - Jahreswerte: dieselben Summen für aktuelles Jahr. - Bei aktivem `strichperweb`: eigener Strich-Eintrag. - Bei aktivem `paypaluse`: PayPal-Links anzeigen. ### Sammelerfassung Striche Quelle: `stricheintragen.php`. Berechnungen: - Preis pro Strich aus `kl_config.KostenproStrich`. - Pro Mitarbeiter eine Anzahl erfassen. - Kosten = Anzahl Striche mal Kosten pro Strich. - Neue Zeile in `kl_Kaffeeverbrauch`. - Filter `vorderseite`/`rueckseite` anhand der letzten 100 Tage und mindestens 10 Strichen. ### Sammelerfassung Einzahlungen Quelle: `einzahlung.php`. Berechnungen: - Pro Mitarbeiter Betrag erfassen. - Neue Zeile in `kl_Einzahlungen`. - Filter `vorderseite`/`rueckseite` anhand der letzten 100 Tage und mindestens 10 Strichen. ### Mitgliederverwaltung Quelle: `mitarbeiterverwalten.php`. Aktionen: - Mitglied anlegen. - Name/E-Mail/aktiv/admin bearbeiten. - Mitglied aktivieren/deaktivieren. M0-Feststellung: Das `admin`-Flag ist fachlich eine Rolleninformation und sollte in der SaaS-App in `tenant_memberships.role` wandern. ### Korrektur letzter Einträge Quelle: `letzteneintraege.php`. Aktionen: - Letzte 100 Einzahlungen anzeigen. - Einzahlung hart löschen. - Letzte 100 Strich-Einträge anzeigen. - Strich-Eintrag hart löschen. M0-Feststellung: Finanznahe Korrekturen sollten im Zielmodell nicht hart löschen, sondern als Storno/Reversal mit Audit-Trail gespeichert werden. ### CSV-Import Quelle: `csvupload.php`. Ablauf: - Datei hochladen. - CSV mit Komma-Trennung lesen. - Name aus Spalte 3, Betrag aus Spalte 7, Datum aus Spalte 0. - Mitarbeiter per Name oder `paypalname` finden. - Dublette anhand Mitarbeiter, Betrag und Datumstag prüfen. - Einzahlung einfügen. - Ergebnis in Erfolg/Fehler klassifizieren. ### Jahresauswertung Quelle: `jahresauswertung.php`. Ablauf: - Gesamtstriche des aktuellen Jahres je aktivem Mitarbeiter berechnen. - Konstante Anzahl neuer Striche/Gutschrift proportional verteilen. - Einzahlung je Mitarbeiter einfügen. - Mail an Mitarbeiter senden. M0-Feststellung: Das ist ein Job/Skript mit direktem Schreibzugriff und Mailversand. Für SaaS braucht es Dry-Run, Audit, Tenant-Scope und expliziten Operator. ## Offene Schemafragen - Gibt es Primary Keys, Foreign Keys und Indizes für die `kl_`-Tabellen? - Sind Datentypen für Geldwerte `decimal`, `money`, `float` oder etwas anderes? - Gibt es historische Spalten, die im Code nicht sichtbar sind? - Gibt es Trigger oder Stored Procedures? - Gibt es weitere Jobs außer `jahresauswertung.php`? - Sind Umfragetabellen produktiv relevant oder Archiv/Randmodul? ## Technische Legacy-Inkonsistenzen - `csvupload.php` sucht in `getMitarbeiterID` nach `Name = ? or paypalname = ?`, übergibt aber nur einen Parameter. Das sollte vor der Übernahme des CSV-Flows verifiziert werden. - `einzahlung.php` prüft auf `$_GET["action"]`, die Buttons erzeugen aber URLs mit `aktion=...`. Der Vorderseite-/Rückseite-Filter kann dadurch abweichend vom erwarteten Verhalten laufen. - `exportKaffeeliste.php` referenziert `tcpdf/tcpdf.php`, während der Ordner im Repository `TCPDF/` heißt. Auf case-sensitiven Dateisystemen kann das brechen. - `headerline.php` ist fachlich leer beziehungsweise mit NUL-Zeichen gefüllt. Vor der neuen App-Shell sollte geklärt werden, ob die Datei entfernt werden kann.