# Elterndienstplaner Automatische Zuteilung von Elterndiensten im Kinderladen unter Berücksichtigung von Fairness und Präferenzen. ## Verwendung ```bash ./elterndienstplaner.py [] ``` **Parameter:** - `eingabe.csv`: Benötigte Dienste und Eltern-Präferenzen für den Planungsmonat - `eltern.csv`: Dienstfaktoren der Eltern (Anzahl betreuter Kinder) - `ausgabe.csv`: Hier wird die Zuteilung geschrieben - `vorherige-ausgaben.csv` (optional): Historische Daten für Fairness über das Jahr ## Dienste - **F** - Frühstücksdienst (täglich, 1 Person) - **P** - Putznotdienst (täglich, 1 Person) - **E** - Essensausgabenotdienst (täglich, 1 Person) - **K** - Kochen (ca. alle 2 Wochen, 1 Person) - **A** - Elternabend (nach Bedarf, 2 Personen) Die Planung erfolgt für einen Kalendermonat. ## Eingabedateien ### eingabe.csv Informationen zu benötigten Diensten und Verfügbarkeit/Präferenzen der Eltern. **Format:** ``` Datum,Wochentag,Dienste,Eltern1,Eltern2,... 2025-01-06,Montag,FPE,F+,x,... 2025-01-07,Dienstag,FPE,P-,F+P+,... ``` **Spalten:** 1. Datum (ISO-Format: YYYY-MM-DD) 2. Wochentag (zur Information) 3. Benötigte Dienste (z.B. "FPE" für Frühstück, Putzen, Essen) 4-n. Für jeden Elternteil: - `x` = nicht verfügbar - `F+` = Frühstücksdienst bevorzugt - `P-` = Putznotdienst nur notfalls - Mehrere Präferenzen kombinierbar: `F+P-E+` - Leer = verfügbar, keine Präferenz ### eltern.csv Dienstfaktoren (= Anzahl betreuter Kinder) pro Elternteil und Zeitraum. **Format:** ``` Eltern,Beginn,Ende,Faktor,Beginn,Ende,Faktor,... Müller,2024-09-01,2025-07-31,2 Schmidt,2024-09-01,2024-12-31,1,2025-01-01,2025-07-31,0 ``` **Spalten:** 1. Elternname (Kind-Name zur Identifikation) 2-4. Zeitraum 1: Beginn, Ende, Dienstfaktor 5-7. Zeitraum 2: Beginn, Ende, Dienstfaktor (optional) ... **Hinweise:** - Bei überlappenden Zeiträumen gilt der letzte Eintrag - Außerhalb definierter Zeiträume: Faktor = 0 (keine Dienstpflicht) - Faktor = 0 bedeutet: Befreiung (z.B. durch Vorstandsamt) ### vorherige-ausgaben.csv (optional) Frühere Ausgaben des Programms zur Berechnung der Jahres-Fairness. **Format:** Wie `ausgabe.csv` (siehe unten). **Verwendung:** - Zu Beginn des Kita-Jahres (September): Keine Datei nötig - Ab Oktober: Vorherige Ausgaben anhängen für kumulative Fairness - Im Jahresverlauf sammeln sich die Ausgaben an ## Ausgabe ### ausgabe.csv Zugeteilte Dienste pro Tag. **Format:** ``` Datum,Wochentag,Frühstücksdienst,Putznotdienst,Essensausgabenotdienst,Kochen,Elternabend 2025-01-06,Montag,Müller,Schmidt,Weber,, 2025-01-07,Dienstag,Weber,Müller,Schmidt,, ``` ## Constraints ### Harte Constraints (müssen erfüllt sein) - **C1**: Pro Eltern und Dienst maximal **einmal pro Woche** (Mo-So) - **C2**: Pro Eltern maximal **ein Dienst pro Tag** - **C3**: Nur **verfügbare** Eltern einteilen - **C4**: Alle **benötigten Dienste** müssen besetzt werden ### Weiche Constraints (werden optimiert) **Fairness** (nach Priorität): - **F1 (Global)**: Dienste proportional zum Dienstfaktor über das **ganze Jahr** - Berücksichtigt historische Dienste aus `vorherige-ausgaben.csv` - Gewichtung: 40% (zu Jahresbeginn) → 60% (zu Jahresende) - **F2 (Lokal)**: Dienste proportional zum Dienstfaktor im **aktuellen Monat** - Nur aktueller Planungszeitraum - Gewichtung: 60% (zu Jahresbeginn) → 40% (zu Jahresende) - **F3 (Dienstübergreifend)**: Gleiche Gesamtanzahl über alle Diensttypen - Verhindert Häufung bei einzelnen Eltern **Präferenzen** (niedrigere Priorität): - **P1**: Bevorzugte Dienste (`+`) werden bevorzugt zugeteilt - **P2**: Abgelehnte Dienste (`-`) werden vermieden ### Fairness-Logik **Beispiel:** Familie Müller hat 2 Kinder, Familie Schmidt 1 Kind. **Lokale Fairness (F2):** - Im Januar sollen beide verfügbar sein - Müller sollte 2× so viele Dienste bekommen wie Schmidt - Verhindert: Müller bekommt alle Dienste auf einmal **Globale Fairness (F1):** - Müller war im Dezember im Urlaub → 0 Dienste - Im Januar sollte Müller aufholen - Über das Jahr: 2:1 Verhältnis wird ausgeglichen **Gewichtung im Jahresverlauf:** - **September-November**: F2 (lokal) stärker → sanftes Einführen - **Dezember-Mai**: Ausgewogen - **Juni-Juli**: F1 (global) stärker → Jahresausgleich ## Ausgabe-Statistiken Das Programm zeigt nach der Optimierung: 1. **Dienste pro Eltern**: Übersicht der zugeteilten Dienste 2. **Dienstfaktoren**: Summe im Planungszeitraum 3. **Verteilungsvergleich**: Soll (lokal/global) vs. Ist mit Abweichungen 4. **Präferenz-Verletzungen**: Wie oft wurden Ablehnungen ignoriert ## Troubleshooting **"Keine optimale Lösung gefunden":** - Zu viele Eltern nicht verfügbar - Nicht genug Eltern für alle Dienste - Widersprüchliche Präferenzen **"Unfaire Verteilung":** - Prüfen Sie die Dienstfaktoren in `eltern.csv` - Stellen Sie sicher, dass `vorherige-ausgaben.csv` korrekt ist - Mehr Eltern verfügbar machen