- Python 82.3%
- Jinja 17.7%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| img | ||
| zeigersprung | ||
| manage.py | ||
| README.md | ||
| requirements.txt | ||
Zeigersprung Dienstplan-Parser/Kalender/Archiv
Grundannahmen
Schichten
- Ein Kalendertag enthält maximal eine Schicht.
- Eine Schicht kann sich über Mitternacht hinaus in den Folgetag erstrecken.
- Eine Schicht kann maximal 23:59 Stunden dauern.
- Eine Schicht kann einen Anfangs- und einen Endort haben.
Dienstpläne
- Ein Dienstplan hat einen Stand (Veröffentlichungs-/Exportdatum).
- Der Zeitpunkt des Imports wird nur bei Gleichstand oder fehlendem Veröffentlichungs-/Exportdatum berücksichtigt.
- Es gelten die Schichten (oder Löcher, i.e. nicht verplanten Tage) aus dem Dienstplan mit dem neuesten Stand.
Export-Formate
Kalenderfeed (…/export/, …/export/2025/, …/export/2025/12/)
Kalender im standardisierten iCalendar-Format.
- Eintragstitel (SUMMARY) = Schichtnummer/-kürzel, ggf mit Zusatzinformationen zu Start/End-Zeit/Ort für ortsbezogene Tätigkeiten.
- Eintragsbeschreibung (DESCRIPTION) = Zusatzinformationen/Kommentare, z.B. Erklärung des Schichtkürzels, zugeordnete:r Ausbilder:in.
- Start- und Endzeit = Beginn und Ende der Schicht. (Start/End-Zeit/Ort für ortsbezogene Tätigkeiten (sofern bekannt) werden separat behandelt).
- Ort (LOCATION) = Start- und (ggf) Endort der Schicht, laut Plan, sofern bekannt.
Aufeinanderfolgende identische Ganztages-Schichten (z.B. Urlaub) werden im Export zusammengefasst.
CSV-Export (…/csv/, …/csv/2025/, …/csv/2025/12/)
Unterstützte Import-Formate
IVU ICS-Export
- Summary ➔ Schichtnummer oder Dienstart; wird als Titel des Kalendereintrags gesetzt
- Description ➔ enthält ggf. ausführlichere Beschreibung der Dienstart; wird als Beschreibung des Kalendereintrags gesetzt
- Location ➔ wird derzeit nicht übernommen (eines der zwischengeschalteten Datenmodelle war nur für einfache Dienstkalender gedacht und speichert diese Information daher nicht)
IVU PDF-Export
- Ist-Planung (obere Zeile) ➔ Schichtnummer oder Dienstart; wird als Titel des Kalendereintrags gesetzt
- Soll-Planung (untere Zeile) ➔ enthält z.B. Vorgabe aus dem Langzeitplan oder Name des:der zugeordneten Trainer:in; wird als Beschreibung des Kalendereintrags gesetzt
IVU PDF-Ausdruck (Tabellenansicht)
- erste Zeile des Tages ➔ Schichtnummer
- Zeiten/Orte, sofern vorhanden ➔ werden in den Kalendereintrag gespeichert
Sonderfall Bestätigungshaken/-glocke:
Falls irgendwo im Plan ein Haken oder ein Glocke vorkommt, werden nur Dienste 1-zu-1 übernommen, die selbst durch einen Haken oder Glocke als "aktuell gültig" gekennzeichnet sind.
Bei alle anderen Diensten wird die Schichtnummer leer gespeichert; stattdessen wird der (mangels Haken/Glocke "nicht verlässliche") Eintrag als Kommentar (Beschreibung des Kalendereintrags) gespeichert.
Sonderfall mehrere Schichten pro Tag:
Bei mehreren Schichten am selben Tag wird nur die (im PDF) letzte gespeichert. (Das ist programmatisch die simpelste Lösung, und da bisher bei allen Dopplungen die früheren Einträge ein Ruhe-Überhang aus dem Vortag waren, sollte dadurch i.d.R. nichts Wichtiges verloren gehen.)
(Noch) nicht unterstützte Import-Formate
IVU PDF-Ausdruck (Listenansicht)
Wird voraussichtlich nicht unterstützt werden — enthält die selben Informationen wie die Tabellenansicht, aber umfasst i.d.R. mehrere PDF-Seiten und ist dadurch umständlicher zu verarbeiten.
Import per Commandline
Für übersichtlichere Uploads per Kommandozeile kann der Request-Header accept: text/plain gesetzt werden.
Mehrere gleichzeitige Uploads sind möglich.
% curl -s -F "file=@Dienstplan_Mai_2026 (1).ics" -F "file=@Dienstplan_Mai_2026 (1).ics" http://localhost:8000/eb8cf1cb-39e0-45f4-b7c0-a883e3e44beb/upload/ -H 'accept: text/plain'
# Zeigersprung eb8cf1cb-39e0-45f4-b7c0-a883e3e44beb: Upload
## [NOOP] Dienstplan_Mai_2026 (1).ics
Die soeben übermittelte Datei wurde bereits importiert. Sie wurde daher nicht erneut verarbeitet.
## [NOOP] Dienstplan_Mai_2026 (1).ics
Die soeben übermittelte Datei wurde bereits importiert. Sie wurde daher nicht erneut verarbeitet.




