2025-12-25 21:43:29 +01:00
2025-12-23 22:44:41 +01:00
2025-12-25 21:43:29 +01:00
2025-12-25 19:58:48 +01:00
2025-12-25 21:43:29 +01:00
2025-12-25 21:43:29 +01:00
2025-12-25 21:43:29 +01:00
2025-12-25 21:43:29 +01:00

Elterndienstplaner

Automatische Zuteilung von Elterndiensten im Kinderladen unter Berücksichtigung von Fairness und Präferenzen.

Verwendung

./elterndienstplaner.py <eingabe.csv> <eltern.csv> <ausgabe.csv> [<vorherige-ausgaben.csv>]

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
Description
No description provided
Readme 299 KiB
Languages
Python 99.7%
Shell 0.3%