Skip to content

NicoUnterburger/ArbeitszeitReport

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Arbeitszeit-Analyzer

Python-Tools zur automatischen Analyse und Visualisierung von Arbeitszeitdaten mit PDF-Report und Timeline-Generierung. Timeline

📑 Inhaltsverzeichnis

🚀 Features

📊 PDF-Report (generateReport.py)

  • Übersichtsdiagramme: Arbeitsstunden pro Monat, Durchschnitte nach Wochentag, Überstunden-Analyse
  • Gestapelte Balkendiagramme: Visualisierung aller Arbeitsarten (Anwesenheitszeit, Urlaub, Krankenstand, Feiertage, Zeitausgleich)
  • Detaillierte Monatsberichte: Tägliche Stundenübersicht mit Statistiken
  • CSV-Export: Tagesreport als CSV-Datei
  • Konsolenausgabe: Übersichtliche Zusammenfassung im Terminal

🗓️ Timeline-Visualisierung (generateTimeline.py)

  • Großformatige Timeline (5000x1000 Pixel): Jahresübersicht aller Buchungen
  • Gestapelte Tagesbalken: Alle Arbeitsarten in einem durchgehenden Diagramm
  • Monatliche Delta-Anzeige: Über-/Minusstunden pro Monat mit Urlaubs-, Kranken- und Zeitausgleichstagen
  • Wochenend-Markierung:
    • Grauer Hintergrund bei keiner Arbeit
    • Transparenter oranger Balken bei Wochenendarbeit
  • Feiertags-Markierung: Transparenter oranger Balken bei Arbeit an Feiertagen
  • Referenzlinien:
    • Rote gestrichelte Linie für Soll-Stunden
    • Braune gestrichelte Linie bei 10h-Grenze
  • Statistikboxen:
    • Links oben: Lange Arbeitstage (Gesamt, FT/WE-Tage, >9h, >10h)
    • Rechts oben: Jahresstatistik (Delta, Urlaub, Zeitausgleich, Krankenstand)
  • Monats-Labels: Monatsnamen mit Trennlinien
  • Montags-Achse: Zusätzliche X-Achse mit Montags-Daten

🎯 Berechnungslogik

  • Anwesenheit: Anwesenheitszeit + Urlaub + Krankenstand + Feiertage (für Soll-Vergleich)
  • Tatsächliche Arbeitszeit: Nur Anwesenheitszeit (für Überstunden-Berechnung)
  • Feiertage: Automatische Ergänzung an Werktagen ohne Einträge
    • Montag-Donnerstag: 8,5h
    • Freitag: 5,0h
    • Wochenende: nicht berücksichtigt
  • Bundesland-spezifisch: Unterstützung aller deutschen Bundesländer via holidays library

📦 Installation

Voraussetzungen

  • Python 3.8+
  • pip (Python Package Manager)

Dependencies installieren

pip install pandas matplotlib numpy holidays

💻 Verwendung

Kommandozeilen-Optionen

Beide Tools unterstützen folgende Parameter:

# Grundlegende Verwendung
python generateReport.py [INPUT_FILE] [--bundesland BUNDESLAND] [-m] [-c]
python generateTimeline.py [INPUT_FILE] [--bundesland BUNDESLAND]

# Beispiele
python generateReport.py                                      # Standard: ./2025.csv, Bundesland: BY
python generateReport.py 2024.csv                             # Eigene Datei mit Standard-Bundesland
python generateReport.py 2024.csv --bundesland BW             # Baden-Württemberg
python generateReport.py 2025.csv -m                          # Mit Monatsdiagrammen
python generateReport.py 2024.csv -c                          # Mit CSV-Export
python generateReport.py 2024.csv --bundesland BW -m -c       # Alles kombiniert
python generateTimeline.py 2025.csv --bundesland HE           # Hessen

# Hilfe anzeigen
python generateReport.py --help
python generateTimeline.py --help

Parameter

Parameter Tool Beschreibung Standard Pflicht
INPUT_FILE Beide CSV-Datei mit Arbeitszeitdaten ./fake.csv Nein
--bundesland Beide Bundesland-Kürzel für Feiertage BY Nein
-m, --create-monthly-charts Report Erstelle einzelne Monatsdiagramme False Nein
-c, --create-csv Report Erstelle CSV-Export der Tagesdaten False Nein

Verfügbare Bundesländer

Kürzel Bundesland
BY Bayern (Standard)
BW Baden-Württemberg
BE Berlin
BB Brandenburg
HB Bremen
HH Hamburg
HE Hessen
MV Mecklenburg-Vorpommern
NI Niedersachsen
NW Nordrhein-Westfalen
RP Rheinland-Pfalz
SL Saarland
SN Sachsen
ST Sachsen-Anhalt
SH Schleswig-Holstein
TH Thüringen

📁 CSV-Datei Format

Die Eingabedatei muss folgende Spalten enthalten:

Spalte Beschreibung Format Beispiel
Art Arbeitsart Text Anwesenheitszeit, Urlaub, Krankenstand, Zeitausgleich
Start Startzeit DD.MM.YYYY HH:MM 01.01.2025 08:00
Ende Endzeit DD.MM.YYYY HH:MM 01.01.2025 17:00
Dauer Dauer in Stunden Komma als Dezimaltrenner 8,5
Pause Pausenzeit in Minuten Zahl 30
Notiz Optional Text -
Status Optional Text -

Beispiel CSV:

Art,Notiz,Start,Ende,Dauer,Pause,Status
Anwesenheitszeit,,02.01.2025 08:00,02.01.2025 17:00,"8,50",30,Veraenderbar
Urlaub,,03.01.2025 00:00,03.01.2025 00:00,"8,50",0,Veraenderbar
Krankenstand,,06.01.2025 00:00,06.01.2025 00:00,"8,50",0,Veraenderbar

📁 Output-Struktur

Nach der Ausführung werden folgende Dateien erstellt:

main/
├── report/
│   ├── report.pdf          # Vollständiger PDF-Report (generateReport.py)
│   ├── timeline.png        # Timeline-Visualisierung (generateTimeline.py)
│   ├── tages_report.csv    # CSV-Export der Tagesdaten (nur mit -c)
│   ├── januar.png          # Monatsdiagramm (nur mit -m)
│   ├── februar.png         # Monatsdiagramm (nur mit -m)
│   └── ...                 # Weitere Monatsdiagramme

Output-Beschreibung

  • report.pdf: Vollständiger Report mit:

    • Zusammenfassungsseite (Gesamtübersicht, Monatsübersicht, Wochentagsübersicht)
    • Visualisierungsseiten (4 Hauptdiagramme)
    • Detaillierte Monatsseiten mit Statistiken
  • timeline.png: Große Timeline-Visualisierung (5000x1000 Pixel) mit:

    • Durchgehende Jahresübersicht
    • Monatliche Delta-Boxen
    • Statistikboxen für Jahresübersicht und lange Arbeitstage
    • Referenzlinien und Markierungen
  • tages_report.csv (nur mit -c): Tägliche Zusammenfassung aller Buchungen

  • Monatsdiagramme (nur mit -m):

    • Einzelne PNG-Diagramme pro Monat (300 DPI)
    • Dateinamen: januar.png, februar.png, maerz.png, etc.
    • Speicherort: report/ Verzeichnis
    • Detaillierte Tagesansicht mit Statistiken pro Monat

🔧 Konfiguration

Alle Einstellungen sind zentral in der config.py organisiert. Dies ermöglicht einfache Anpassungen ohne Änderungen am Hauptcode.

Verfügbare Konfigurationen

Die config.py ist in folgende Sektionen unterteilt:

1. SOLL-Arbeitszeiten

SOLL_STUNDEN_TAG = {
    'Monday': 8.5,
    'Tuesday': 8.5,
    'Wednesday': 8.5,
    'Thursday': 8.5,
    'Friday': 5.0,
    'Saturday': 0,
    'Sunday': 0
}
SOLL_STUNDEN_MONAT = 169

2. Farben für Visualisierungen

COLORS = {
    'Anwesenheitszeit': 'steelblue',
    'Urlaub': 'darkgreen',
    'Krankenstand': 'gray',
    'Feiertag': 'orange',
    'Zeitausgleich': 'purple'
}

# Soll/Ist-Vergleiche
SOLL_LINE_COLOR = 'red'
IST_BAR_COLOR = 'steelblue'
POSITIVE_COLOR = 'green'
NEGATIVE_COLOR = 'red'

3. Transparenz-Einstellungen

ALPHA_BARS = 0.9              # Balkendiagramme
ALPHA_BOXES = 0.7             # Statistikboxen
ALPHA_WEEKEND_WORK = 0.25     # Wochenendarbeit-Overlay
ALPHA_SOLL_LINE = 0.75        # Soll-Linie

4. Linien-Einstellungen

SOLL_LINE_WIDTH = 2.5
TEN_HOUR_LINE_WIDTH = 2.5
MONTH_LINE_WIDTH = 1.5

5. Timeline-Einstellungen

TIMELINE_WIDTH = 5000         # Pixel
TIMELINE_HEIGHT = 1000        # Pixel
TIMELINE_DPI = 100

6. PDF-Report Einstellungen

CHART_WIDTH_A4 = 8.27         # A4 Breite in Inches
CHART_HEIGHT_STANDARD = 5     # Standard Chart-Höhe
DPI_EXPORT_PNG = 300          # Hohe Auflösung

7. Schriftgrößen

TITLE_FONTSIZE_PDF = 24
SUBTITLE_FONTSIZE_PDF = 12
DELTA_BOX_FONTSIZE = 11
LEGEND_FONTSIZE = 16

8. Output-Verzeichnisse

REPORT_DIR = './report'
MONTHLY_DIR = './monthly'

Anpassungen vornehmen

Um Einstellungen zu ändern, bearbeiten Sie einfach die config.py:

# Beispiel: Farben ändern
nano config.py
# oder
vim config.py

Wichtig: Nach Änderungen in config.py müssen die Skripte neu gestartet werden

📊 Beispiel-Workflow

# 1. Daten für 2024 analysieren (Bayern)
python generateReport.py 2024.csv

# 2. Timeline für 2024 erstellen
python generateTimeline.py 2024.csv

# 3. Daten für 2025 mit anderem Bundesland und Monatsdiagrammen
python generateReport.py 2025.csv --bundesland NW -m
python generateTimeline.py 2025.csv --bundesland NW

# 4. Mit CSV-Export und Monatsdiagrammen
python generateReport.py 2024.csv -m -c

# 5. Nur CSV-Export
python generateReport.py 2024.csv -c

🎨 Visualisierungs-Features

Alle visuellen Einstellungen werden über config.py zentral gesteuert.

Timeline-Spezifische Features

  • Abmessungen: 5000x1000 Pixel (konfigurierbar: TIMELINE_WIDTH, TIMELINE_HEIGHT)
  • Balkenbreite: 1.0 - keine Lücken zwischen Tagen (konfigurierbar: BAR_WIDTH)
  • Transparenz (konfigurierbar):
    • Wochenend-/Feiertagsarbeit: 25% (ALPHA_WEEKEND_WORK)
    • Statistikboxen: 70% (ALPHA_BOXES)
    • Soll-Linie: 75% (ALPHA_SOLL_LINE)
  • Farben (konfigurierbar):
    • Wochenendarbeit: Orange (WEEKEND_WORK_COLOR)
    • Soll-Linie: Rot (SOLL_LINE_COLOR)
    • 10h-Grenze: Braun (TEN_HOUR_LINE_COLOR)
  • Z-Order Management (konfigurierbar): Korrekte Überlagerung von Elementen
    • Statistikboxen: ZORDER_STATISTICS (20)
    • Delta-Boxen: ZORDER_DELTA_BOX (15)
    • Monatslinien: ZORDER_MONTH_LINES (10)
    • Soll-Linie: ZORDER_SOLL_LINE (5)
    • 10h-Linie: ZORDER_TEN_HOUR_LINE (2)
  • Schriftgrößen (konfigurierbar):
    • Delta-Boxen: 11pt (DELTA_BOX_FONTSIZE)
    • Statistikboxen: 9pt (STATS_BOX_FONTSIZE)
    • Legende: 16pt (LEGEND_FONTSIZE)

Report-Spezifische Features

  • PDF-Format: A4 (8.27 x 11.69 Inches) - konfigurierbar: PDF_WIDTH_A4, PDF_HEIGHT_A4
  • Chart-Größen (konfigurierbar):
    • Standard-Charts: 8.27 x 5 Inches (CHART_WIDTH_A4, CHART_HEIGHT_STANDARD)
    • Monatsdiagramme: 8.27 x 7 Inches (CHART_HEIGHT_MONTHLY)
  • DPI-Einstellungen (konfigurierbar):
    • Monatsdiagramm-Export: 300 DPI (DPI_EXPORT_PNG)
    • Eingebettete Charts: 150 DPI (DPI_EMBED_PNG)
  • Farbcodierung (konfigurierbar):
    • Positive Deltas: Grün (POSITIVE_COLOR)
    • Negative Deltas: Rot (NEGATIVE_COLOR)
    • Ist-Balken: Steelblue (IST_BAR_COLOR)
  • Linienbreiten (konfigurierbar):
    • Soll-Linie: 2.5pt (SOLL_LINE_WIDTH)
    • Monatsdiagramm Soll-Linie: 2.0pt (MONTHLY_SOLL_LINE_WIDTH)
  • Transparenz (konfigurierbar):
    • Balken: 90% (ALPHA_BARS)
    • Statistikboxen: 70% (ALPHA_BOXES)

🐛 Troubleshooting

Häufige Fehler

Problem: ModuleNotFoundError: No module named 'holidays'

pip install holidays

Problem: Feiertage werden nicht angezeigt

  • Prüfen Sie das Bundesland-Kürzel
  • Für 2024/2025 unterstützt die holidays library alle deutschen Bundesländer

Problem: Timeline ist zu groß/zu klein

  • Passen Sie die Werte in config.py an:
    TIMELINE_WIDTH = 5000   # Breite in Pixel
    TIMELINE_HEIGHT = 1000  # Höhe in Pixel
    TIMELINE_DPI = 100      # Auflösung

Problem: Farben/Schriftgrößen ändern

  • Alle visuellen Einstellungen sind in config.py zentral konfigurierbar
  • Ändern Sie die entsprechenden Konstanten und starten Sie das Skript neu

Problem: CSV wird nicht gelesen

  • Prüfen Sie das Format (Komma als Delimiter, Semikolon in Dauer)
  • Stellen Sie sicher, dass alle Pflicht-Spalten vorhanden sind

Problem: ImportError: cannot import name 'XXX' from 'config'

  • Stellen Sie sicher, dass config.py im selben Verzeichnis liegt
  • Prüfen Sie, ob die Konstante in config.py definiert ist

About

Analyse Tool für die Arbeitszeiterfassung

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages