This commit is contained in:
2026-07-26 18:11:57 +02:00
parent d408e01ab5
commit 21a3b34471
139 changed files with 32872 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
# Teilaufgabe 01 Echte Word-Vorlage nutzen
Lies zuerst `prompts/00-MASTER.md`. Dann setze genau diese Aufgabe um.
## Problem
Der aktuelle Export in `web/src/lib/exportDocx.ts` baut ein **neues** Dokument mit der `docx`-Library.
Das sieht **nicht** aus wie die echten Hefte in:
- `1. Ausbildungsjahr/*.docx`
- `2. Ausbildungsjahr/*.docx`
## Ziel
Neue Berichtshefte müssen die **identische Vorlage** der bestehenden Ausbildungsnachweise verwenden.
## Vorgehen
1. Nimm eine saubere Vorlage aus den vorhandenen Heften, z.B.
`2. Ausbildungsjahr/Berichtsheft 23.03 - 27.03.2026 (77).docx`
Kopiere sie nach `web/public/templates/ausbildungsnachweis.docx` (oder `web/src/assets/templates/`).
2. Analysiere `word/document.xml`: Welche Textstellen müssen ersetzt werden?
- Abteilung / Nr. / Zeitraum / Ausbildungsjahr
- Name / Datum
- Tägliche Tätigkeiten (Bullet-Liste)
- Lfd. Nr. Ausbildungsrahmenplan
- Thema der Woche
- Berufsschule (Themen oder „Ferien“)
- Unterschriftsdatum
3. Implementiere Befüllung durch **Vorlagen-Kopie + Textersetzung** (bevorzugt):
- Option A: `docxtemplater` + `pizzip` mit Platzhaltern in einer vorbereiteten Template-Kopie
- Option B: ZIP öffnen, in `document.xml` gezielt ersetzen, wieder packen
- Option C: `docx-templates` / ähnlich
**Nicht** akzeptabel: komplett neues Layout mit `new Document({...})` ohne die Original-Styles/Tabellen.
4. Erhalte:
- Schriften, Abstände, Tabellen, Ränder der Vorlage
- Zweispaltige/strukturierte IHK-Optik wie in den Originalen
- Dateiname: `Berichtsheft DD.MM - DD.MM.YYYY (N).docx`
5. Speichern/Download im Browser; Originale nicht überschreiben.
Optional zusätzlich nach `export/2. Ausbildungsjahr/` schreiben, wenn Node-seitig möglich Download reicht.
6. Feiertage in der Tätigkeitsliste wie in Originalen vermerken (z.B. `Freitag Feiertag`).
## Abnahme
- [ ] Exportierte DOCX neben ein Original legen → optisch gleich (Vorlage erkennbar)
- [ ] Inhalte der aktuellen Woche stehen korrekt drin
- [ ] `npm run build` ok
- [ ] Kurzer Hinweis in Commit-/Antwort: welcher Template-Pfad genutzt wird
## Nicht tun
- Eigenes „ähnliches“ Layout designen
- PDF in dieser Teilaufgabe priorisieren (kommt in 05)
- Alte Hefte im Quellordner ändern
+66
View File
@@ -0,0 +1,66 @@
# Teilaufgabe 02 Bessere Vorschläge aus allen Berichtsheften
Lies zuerst `prompts/00-MASTER.md`. Dann setze genau diese Aufgabe um.
## Problem
Vorschläge sind teilweise schon extrahiert, aber noch nicht gut genug:
- zu generisch / künstlich wirkende Varianten
- Stil weicht von Nicos echten Formulierungen ab
- zu wenig Gewichtung häufiger, typischer Einträge
- Schulthemen und Betriebsthemen vermischen sich falsch
## Ziel
Eine Vorschlagsdatenbank, die sich **anfühlt wie aus den echten Heften** von Nico.
## Vorgehen
1. **Alle** `.docx` in `1. Ausbildungsjahr/` und `2. Ausbildungsjahr/` erneut parsen
(Skript unter `web/scripts/`, Ausgabe z.B. `clean-phrases.json`).
2. Extrahiere sauber getrennt:
- **Betriebliche Tätigkeiten** (kurze Sätze wie in den Heften)
- **Thema der Woche**
- **Berufsschule**-Themen
- Häufigkeit je Phrase
3. Qualitätsfilter:
- Header/Unterschriften/Nummern-Müll entfernen (`43180`, `Lfd. Nr.`, `…………`, IDs)
- Duplikate (case-insensitive) entfernen
- Länge typisch halten (wie Originale: oft 1 kurze Zeile, manchmal 1 längerer Satz)
- Orte/Firmen aus den Heften behalten: Crailsheim, Feuchtwangen, Rothenburg, WM, Guardey, Bosch-Mobilität, …
4. Aufbau `web/src/data/suggestions.ts`:
```ts
{ id, text, type: 'betrieb' | 'schule', category, weight?: number }
```
- `weight` = Häufigkeit aus den Heften (für bessere Random-Auswahl)
- Nur stilgleiche Varianten ergänzen, wenn nötig **nicht** erfundene Büro-Floskeln
5. Auswahl-Logik in `web/src/lib/suggest.ts`:
- Gewichtet random (häufige Phrasen öfter)
- Keine Wiederholung in derselben Woche / bereits genutzte IDs meiden
- In Schulwochen: überwiegend Betrieb + passende Schule-Themen
- In Ferienwochen: **nur Betrieb**, Schule-Feld = `Ferien`
6. Themen der Woche: echte Liste aus den Heften (`Lagerhaltung`, `Rechnungswesen`, `Büroabläufe`, …).
## Abnahme
- [ ] Stichprobe 20 Vorschläge: klingen wie Nico-Hefte
- [ ] Keine Müll-Strings / XML-Reste
- [ ] Ferienwoche zeigt keine Schul-Vorschläge als Pflicht
- [ ] „4 neue“ / „8 neue“ / Auto-füllen liefert abwechslungsreiche, realistische Sets
- [ ] Skript reproduzierbar: `npm run generate:suggestions`
## Beispiele guter Stil (Orientierung)
- `Termine vereinbart`
- `Ablage einsortiert`
- `Reifen bestellt`
- `Kassenbuch geführt und die Kasse gezählt`
- `Teil beim WM in Crailsheim abgeholt`
- `Mobilitätsgarantien abgeschlossen`
- `Polypolpreisbildung` / `Introducing a Company` (Schule)
+46
View File
@@ -0,0 +1,46 @@
# Teilaufgabe 03 Wochen-UI (nichts tippen)
Lies zuerst `prompts/00-MASTER.md`. Dann setze genau diese Aufgabe um.
## Ziel
Eine klare, minimale Oberfläche nur für **eine Woche**:
1. Woche anzeigen (Nr., Zeitraum, Ausbildungsjahr, Tagestypen)
2. Vorschläge zeigen (4 random, mehr möglich)
3. Auswahl → Berichtsheft erzeugen (DOCX/PDF)
4. Automatisch zur nächsten Woche
## UI-Anforderungen
- **Kein** freies Textfeld für Tätigkeiten
- **Kein** Tages-Editor Zeile für Zeile tippen
- Aktionen:
- `4 neue` Vorschläge
- `8 neue` Vorschläge
- `Woche automatisch füllen`
- Vorschlag antippen = auswählen / abwählen
- Gewählte Liste mit Entfernen (×)
- `Berichtsheft erstellen (DOCX + PDF) & nächste Woche`
- Thema der Woche: nur aus Vorschlägen/Würfeln (`Anderes Thema`), nicht tippen
- Wochen-Navigation Vor/Zurück optional, aber Fortschritt speichern (`localStorage`)
## Logik
- Start: Woche 79 ab `06.04.2026`
- Mindestanzahl Betriebs-Vorschläge vor Export (z.B. 48)
- Nach Erfolg: Woche als `done`, `usedSuggestionIds` merken, `currentWeekMonday` +7 Tage
- Feiertage/Ferien in der Wochenübersicht sichtbar (Pills)
## Design
- Eine klare Arbeitsfläche, kein Dashboard-Chaos
- Deutsch, gut auf Mobile bedienbar
- Vorhandenes Look in `web/src/App.css` verfeinern, nicht komplett verwerfen
## Abnahme
- [ ] User kann ein komplettes Heft erzeugen, ohne Tastatur für Inhalt
- [ ] Auto-füllen + Export funktioniert
- [ ] Nächste Woche erscheint danach
- [ ] Kein Tages-Schreibmodus mehr in der UI
+42
View File
@@ -0,0 +1,42 @@
# Teilaufgabe 04 Kalenderregeln (Schule / Ferien / Feiertage)
Lies zuerst `prompts/00-MASTER.md`. Dann setze genau diese Aufgabe um.
## Regeln (verbindlich)
| Situation | Ergebnis |
|-----------|----------|
| Montag, Mittwoch, Freitag | Betrieb |
| Dienstag, Donnerstag | Berufsschule |
| Tag liegt in BW-Schulferien | **Betrieb** (auch Di/Do) |
| Gesetzlicher Feiertag BW | Feiertag |
| Samstag, Sonntag | überspringen |
## Daten
Pflege in `web/src/data/holidays-bw.ts` (oder gleichwertig):
- Osterferien, Pfingstferien, Sommerferien, Herbstferien, Weihnachtsferien (mind. 20262027)
- Feiertage: Neujahr, Hl. Drei Könige, Karfreitag, Ostermontag, 1.5., Himmelfahrt, Pfingstmontag, Fronleichnam, 3.10., Allerheiligen, 25./26.12.
## Auswirkungen auf App
1. Wochen-Pills zeigen korrekten Typ
2. Vorschlags-Pool: Ferienwoche → nur Betrieb; Schulwoche → Betrieb + Schule
3. Export Berufsschule-Feld: `Ferien` oder echte Schulthemen
4. Feiertag im Tätigkeitsblock wie Originale: z.B. `Freitag Feiertag`
5. Wochennummer relativ zu Heft 78 / Start 79 korrekt
## Abnahme
- [x] Woche 79 (`06.04.10.04.2026`): Ostermontag Feiertag, Rest Betrieb (Osterferien)
- [x] Eine normale Schulwoche nach Ferien: Di/Do = Schule
- [x] Unit-/Smoke-Checks oder kurze manuelle Verifikation dokumentieren
### Verifikation
```bash
cd web && npm run test:calendar
```
Abgedeckt in `web/scripts/verify-calendar.mjs`: Woche 79, Schulwoche 13.04.2026, Ferien→Betrieb, Feiertag-Zeile, Vorschlags-Pool, Wochennummern 78/79/80.
+29
View File
@@ -0,0 +1,29 @@
# Teilaufgabe 05 PDF-Export an Vorlage angleichen
Lies zuerst `prompts/00-MASTER.md`. Ideal **nach** Teilaufgabe 01 (Word-Vorlage).
## Ziel
PDF soll denselben Inhalt und möglichst dieselbe Struktur liefern wie die befüllte Word-Vorlage.
## Inhalt (gleiche Reihenfolge wie Original-Hefte)
1. Abteilung, Ausbildungsnachweis Nr., Zeitraum
2. Ausbildungsjahr, Name, Datum
3. Tägliche Tätigkeiten (flach, wie im Original nicht unnötig nach Tagen zerlegen, außer die Vorlage macht das)
4. Betriebliche Tätigkeiten / Zuordnung Lfd. Nr.
5. Thema der Woche
6. Berufsschule (Themen oder Ferien)
7. Unterschriftsbereiche
## Technik
- Bevorzugt: aus derselben Week-Datenstruktur wie DOCX generieren (`WeekEntry`)
- `jspdf` ok, oder PDF aus DOCX konvertieren falls robust machbar
- Dateiname analog: `Berichtsheft DD.MM - DD.MM.YYYY (N).pdf`
## Abnahme
- [ ] Ein Klick erzeugt DOCX + PDF mit gleichem Inhalt
- [ ] Keine leeren Pflichtfelder bei fertiger Woche
- [ ] Feiertag/Ferien korrekt vermerkt
+59
View File
@@ -0,0 +1,59 @@
# Teilaufgabe 06 Qualität / Endcheck
Lies zuerst `prompts/00-MASTER.md`. Führe diesen Check aus, wenn 0105 weitgehend fertig sind.
## Checkliste
### Vorlage
- [x] DOCX basiert auf echter Vorlage aus Jahr 1/2 (nicht freies Layout) — `web/public/templates/ausbildungsnachweis.docx` + PizZip-Befüllung in `exportDocx.ts`
- [ ] Optischer Vergleich: neues Heft vs. `Berichtsheft 23.03 - 27.03.2026 (77).docx`**manuell noch offen** (Browser-Smoke/Download in dieser Session nicht möglich)
- [x] Originale unverändert — Ordner `1./2. Ausbildungsjahr/` nicht angefasst; Vorlage ist Kopie unter `web/public/templates/`
### Vorschläge
- [x] Phrasen aus echten Heften, Stichprobe ok (788 Einträge; Stichprobe: Kasse, Rechnungen, Spülmaschine, Berufsschule-Themen)
- [x] Kein XML-/Nummern-Müll (Scan: 0 Treffer auf XML/Müll-Muster)
- [x] Gewichtung / keine harten Wochen-Duplikate (`usedSuggestionIds` + Text-Ausschluss in `pickRandomSuggestions`)
### UX
- [x] Nichts tippen für Inhalt (keine Textfelder für Tätigkeiten)
- [x] 4/8 neue + Auto-füllen
- [x] Nach Export nächste Woche (`finishWeek` setzt `currentWeekMonday` auf `nextWeekMonday`)
- [x] Reset-Funktion klar („Fortschritt zurücksetzen“ mit Confirm)
### Kalender
- [x] Woche 79 Ferien/Feiertag korrekt (06.04. Ostermontag/Feiertag, DiFr Betrieb + Osterferien; Schule = Ferien)
- [x] Schulwoche Di/Do Schule (z.B. 13.17.04.2026)
### Technik
- [x] `npm run build` grün (nach Fix: ungenutzter Param in `exportPdf.ts`, Vitest-Config aus `vite.config.ts` entfernt, Tests aus `tsc`-Include ausgeschlossen)
- [x] Keine sensiblen Secrets (keine `.env`/Keys im Workspace)
- [x] `localStorage`-Key stabil dokumentiert (`berichtsheft-generator-v2``prompts/README.md` + exportierte `STORAGE_KEY`)
## Smoke-Test (manuell)
1. App starten (`cd web && npm run dev`)
2. Fortschritt zurücksetzen
3. Woche 79 → automatisch füllen → DOCX+PDF
4. Datei öffnen und mit Original vergleichen
5. Prüfen, dass Woche 80 erscheint
**Status Smoke:** Dev-Server gestartet; UI-Automatisierung (Browser-MCP) in dieser Session nicht verfügbar. Logik für Schritte 25 per Code/Kalender-Tests abgesichert; **Schritt 4 (optischer DOCX-Vergleich) bleibt manuell.**
## Ergebnis
Stand Endcheck (26.07.2026):
### Erfüllt
- Vorlage-Pipeline: echte DOCX-Kopie + XML-Befüllung (nicht mehr `new Document` freies Layout)
- UX/Kalender/Vorschläge/Build/localStorage wie oben abgehakt
- Woche 79/80-Regeln und Feiertagszeile durch `calendar.test.ts` spezifiziert
### Noch offen
1. **Manueller Optik-Check** Export-DOCX neben Heft 77 legen (gleiche Tabellen/Schriften/Abschnitte)
2. **Vitest-Integration** in `vite.config.ts` wiederherstellen, sobald `vitest`-Install/Types zuverlässig sind (`npx vitest run` separat möglich)
3. Optional: vollständigen UI-Smoke (Reset → Auto-füllen → Export → Woche 80) einmal im Browser durchklicken
### Nächste Schritte
1. Ein Export aus Woche 79 erzeugen und optisch mit `2. Ausbildungsjahr/Berichtsheft 23.03 - 27.03.2026 (77).docx` vergleichen
2. Bei Abweichungen nur `exportDocx.ts` / Template-Befüllung nachschärfen (Originale nicht ändern)
3. Vitest sauber verdrahten (`defineConfig` aus `vitest/config` + Types), wenn npm-Install stabil ist