erster versuch der KI mit Plan
This commit is contained in:
1 parent
c697c64f3a
commit
2faa1689dd
20 files changed
+1749
No files matched your search
@@ -0,0 +1,60 @@
|
||||
# Copilot Plan: Attendance PDF Generator
|
||||
|
||||
## Ziel
|
||||
Kombiniertes Python-CLI-Tool, das Anwesenheitsdaten aus einer Excel-Datei liest
|
||||
und für jeden Teilnehmer eine ausgefüllte PDF-Datei erzeugt.
|
||||
|
||||
## Architektur
|
||||
|
||||
```
|
||||
generate.py # Click CLI entry point
|
||||
config.json # Konfiguration (antragsnummer, ort, month_mapping, ...)
|
||||
schema.json # JSON-Schema der Konfiguration (Dokumentation)
|
||||
requirements.txt # openpyxl, pypdf, click
|
||||
requirements-dev.txt # + pytest
|
||||
src/
|
||||
__init__.py
|
||||
exceptions.py # Custom Exception-Hierarchie
|
||||
models.py # Datenklassen: Person, AttendanceDate, MonthlyAttendance
|
||||
config_loader.py # config.json laden & validieren
|
||||
excel_reader.py # Excel → MonthlyAttendance-Objekte
|
||||
pdf_filler.py # MonthlyAttendance → ausgefüllte PDF
|
||||
validators.py # Pre-Generation Validierung + Konsolenvorschau
|
||||
template/ # PDF-Template (sab.pdf, wird separat bereitgestellt)
|
||||
output/ # Ausgabeverzeichnis für generierte PDFs
|
||||
tests/
|
||||
__init__.py
|
||||
test_excel_reader.py
|
||||
test_pdf_filler.py
|
||||
test_validators.py
|
||||
```
|
||||
|
||||
## Datenfluss
|
||||
Excel-Datei → excel_reader → MonthlyAttendance → pdf_filler → PDF-Datei
|
||||
|
||||
## Entwurfsentscheidungen
|
||||
- `plan.N` = immer `"6"` (mind. 6h), unabhängig von tatsächlichen Stunden
|
||||
- Sheet-Auswahl: manuell via `--sheet <name>` (z.B. `--sheet Feb`)
|
||||
- Output-Benennung: `(n) Nachname, Vorname.pdf` (n = lfd. Nummer aus Spalte A)
|
||||
- `pauschale.N` = `"8,60"` wenn anwesend (X), sonst leer
|
||||
- PDF-Template liegt in `./template/sab.pdf`
|
||||
|
||||
## Excel-Struktur
|
||||
- Spalte A (Index 0): lfd. Nummer
|
||||
- Spalte B (Index 1): Name (Format: "Nachname, Vorname")
|
||||
- Spalten J–AN (Index 9–39): Tageswerte (Tag 1–31)
|
||||
- Numerischer Wert → anwesend (X), Wert = Ist-Stunden
|
||||
- "K" → Krank
|
||||
- "KK" → Kindkrank
|
||||
- "F" → unentschuldigtes Fehlen
|
||||
- "E" → entschuldigtes Fehlen
|
||||
- "P" → Praktikum
|
||||
- "U" → Urlaub
|
||||
- Leer → Zeile überspringen
|
||||
|
||||
## PDF-Feld-Mapping (pro Zeile N, max 23 Zeilen)
|
||||
| Excel-Zelle | datum.N | anwesend.N | ist.N | plan.N | pauschale.N |
|
||||
|---|---|---|---|---|---|
|
||||
| Numerisch | DD.MM.YYYY | X | Wert (dt. Format) | "6" | "8,60" |
|
||||
| "K"/"KK"/etc| DD.MM.YYYY | Code | leer | leer | leer |
|
||||
| Leer | (überspringen) | — | — | — | — |
|
||||
@@ -0,0 +1,40 @@
|
||||
# Copilot Tasks: Attendance PDF Generator
|
||||
|
||||
## Phase 1: Projekt-Setup
|
||||
- [x] Task 1.1: .github/copilot-plan.md erstellen
|
||||
- [ ] Task 1.2: requirements.txt + requirements-dev.txt erstellen
|
||||
- [ ] Task 1.3: config.json erstellen (mit Platzhaltern für antragsnummer, ort)
|
||||
- [ ] Task 1.4: schema.json erstellen
|
||||
- [ ] Task 1.5: Verzeichnisse anlegen (src/, output/, template/, tests/)
|
||||
|
||||
## Phase 2: Datenmodell & Konfiguration
|
||||
- [ ] Task 2.1: src/exceptions.py implementieren
|
||||
- [ ] Task 2.2: src/models.py implementieren (Person, AttendanceDate, MonthlyAttendance)
|
||||
- [ ] Task 2.3: src/config_loader.py implementieren
|
||||
|
||||
## Phase 3: Excel Reader
|
||||
- [ ] Task 3.1: src/excel_reader.py implementieren
|
||||
- extract_year_from_filename()
|
||||
- get_sheet_names()
|
||||
- extract_persons()
|
||||
- extract_attendance()
|
||||
|
||||
## Phase 4: PDF Filler
|
||||
- [ ] Task 4.1: src/pdf_filler.py implementieren
|
||||
- build_field_dict()
|
||||
- fill_pdf()
|
||||
|
||||
## Phase 5: Validierung & Vorschau
|
||||
- [ ] Task 5.1: src/validators.py implementieren (9 Checks)
|
||||
- [ ] Task 5.2: Konsolenvorschau + j/N-Prompt
|
||||
|
||||
## Phase 6: CLI
|
||||
- [ ] Task 6.1: generate.py mit Click implementieren
|
||||
- generate --file --sheet [--out]
|
||||
- validate --file --sheet
|
||||
|
||||
## Phase 7: Tests
|
||||
- [ ] Task 7.1: tests/test_excel_reader.py
|
||||
- [ ] Task 7.2: tests/test_pdf_filler.py
|
||||
- [ ] Task 7.3: tests/test_validators.py
|
||||
- [ ] Task 7.4: pytest ausführen, Fehler beheben
|
||||
Reference in new issue
Block a user