2025-12-23 22:28:03 +01:00
2025-12-22 21:31:25 +01:00
2025-12-23 22:28:03 +01:00
2025-12-22 01:06:11 +01:00
2025-12-22 01:06:11 +01:00
2025-12-23 22:28:03 +01:00

Elterndienstplaner

syntax: ./elterndienstplaner.py <eingabe.csv> <eltern.csv> <ausgabe.csv> { <vorherige-ausgaben.csv> }

Der Elterndienstplaner hilft bei der Zuteilung von Elterndiensten zu Eltern. Zur Identifizierung der Eltern dient der Name des Kindes/der Kinder.

Es gibt diese Dienste:

  • F: Frühstücksdienst (täglich)
  • P: Putznotdienst (täglich)
  • E: Essensausgabenotdienst (täglich)
  • K: Kochen (alle 2 wochen, Datum manuell festgelegt)
  • A: Elternabend (2 Eltern, Datum manuell festgelegt)

Die Planung erfolgt immer für einen Kalendermonat.

Die Eltern geben an, an welchen Tagen sie abwesend sind, also nicht zur Verfügung stehen. Zudem können sie für jede Tag-Dienst-Kombination angeben, ob sie den Dienst an diesen Tag bevorzugt (+) oder nur notfalls (-) machen wollen.

Die Eingabe erfolgt über eine CSV-Datei eingabe.csv und eltern.csv

eingabe.csv

Informationen zu notwendigen Diensten eines Monats und Zeiten/Praeferenzen der Eltern

  1. Spalte: Datum in ISO-Format
  2. Spalte: Wochentag (Hilfsinformation)
  3. Spalte: Benötigte Dienste als aneinandergereihte Dienstkürzel Folgende Spalten: Für alle Eltern: Verfügbarkeit und Präferenz:
  • x, falls nicht verfügbar
  • <Dienstkürzel>+, wenn Dienst an dem Tag bevorzugt.
  • <Dienstkürzel>-, wenn Dienst an dem Tag abgelehnt. Es können mehrere Präferenzen pro Tag angegeben werden.
  1. Zeile header folgende Zeilen je Tag.

eltern.csv:

Informationen zur Diestpflicht der Eltern. Die Dienstpflicht besteht, wenn Eltern Kinder im Kinderladen betreuen lassen. Der Dienstfaktor entspricht der Anzahl der betreuten Kinder der Eltern. Wenn Eltern ein Vorsandsamt im Kinderladen übernehmen, werden sie von der Dienstpflicht befreit.

  1. Spalte Zeitraum Beginn
  2. Spalte Zeitraum Ende
  3. Spalte Dienstfaktor
  4. Spalte ... nächster Zeitraum
  5. Zeile Header folgende Zeilen Eltern

Bei sich überschneidenden Zeiträumen gilt der letzte Eintrag. An Tagen außerhalb der angegebenen Zeiträume ist der Dienstfaktor 0.

Die Datei eltern.csv enthält ggf. mehr Eltern als die Eingabe.csv, da Kinder dazukommen oder den KiLa verlassen, die eltern.csv aber nur anwächst.

ausgabe.csv

  1. Spalte: Datum
  2. Spalte: Wochentag
  3. Spalte ... Dienste Zeilen: für jeden Tag die zugeteilten Eltern in den jeweiligen Dienstspalten

vorherige-ausgaben.csv

Hier werden die von früheren Läufen des Programms generierten ausgabe.csv-Datein wiedereingespielt. Das Format entspricht der ausgabe.csv

Constraints

Harte Constraints: C1: Je Eltern und Dienst, Dienst nur einmal die Woche C2: Je Eltern nur einen Dienst am Tag C3: Dienste nur verfügbaren Eltern zuteilen

Weiche Constraints:

  • F1: Alle Eltern erhalten Dienste im Verhältnis ihres Dienstfaktors (Gesamter vorliegender Zeitraum)
  • F2: Alle Eltern erhalten Dienste im Verhältnis ihres aktuellen Dienstfaktors (Aktueller Monat)
  • P1: Eltern erhalten bevorzugte Dienste
  • P2: Eltern erhalten keine abgelehnten Dienste.

F1 und F2 sind Fairnessconstraints und gelten pro Dienst. P1 und P2 sind Präferenzconstraints. Sie wiegen schwächer als die Fairnessconstaints.

Die vorherige-ausgaben.csv der vergangenen Monate dienen auch als Eingabe. Sie werden für die Fairnessconstraints verwendet. Im Laufe eines Kinderladenjahrs sammeln sich die Ausgaben der Monate an. F2 stellt die Fairness im aktuellen Monat sicher -> lokale Fairness F1 stellt die Fairness für das gesamte Jahr sicher -> globale Fairness

Wenn z.B. Eltern eine zeitlang nicht verfügbar sind, sollen sie nicht sofort alle Dienste "nachholen" müssen (lokale Fairness stellt das sicher), aber im Jahresverlauf die Dienste trotzdem nachholen (globale Fairness stellt das sicher).

F1 und F2 werden mit Faktoren gewichtet. Zu Beginn des Kinderladenjahrs ist F2 stärker, zum Ende des Kinderladenjahres F1.

Description
No description provided
Readme 299 KiB
Languages
Python 99.7%
Shell 0.3%