IPD-Dienstplan-Parser und -Kalender
  • Python 82.3%
  • Jinja 17.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-02 17:18:28 +02:00
img Preserve former candidate images for favicon/logo 2026-06-13 00:18:25 +02:00
zeigersprung Find and link shift plans for each day in calendar 2026-09-02 17:18:28 +02:00
manage.py Django 5.2 boilerplate: Project zeigersprung, App zeigersprung 2025-10-29 19:59:18 +01:00
README.md Plaintext upload results for commandline uploads 2026-06-14 15:11:46 +02:00
requirements.txt Split file handling into storing and actual handling 2026-06-21 00:38:19 +02:00

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

Beispielbild 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

Beispielbild 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)

Beispielbild IVU PDF-Ausdruck Hochformat Beispielbild IVU PDF-Ausdruck Hochformat Beispielbild IVU PDF-Ausdruck Querformat

  • 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.