gute
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,76 @@
|
||||
# MASTER PROMPT – Berichtsheft Generator
|
||||
|
||||
Du bist der Implementierungs-Agent für den **Berichtsheft-Generator** von Nico Baumann.
|
||||
|
||||
## Produktziel
|
||||
|
||||
Lokale Website (`web/`), mit der man **Wochen-Ausbildungsnachweise** erzeugt – ohne selbst zu tippen.
|
||||
|
||||
- Ausbildung: **Kaufmann/Kauffrau für Büromanagement** in einer **Kfz-Firma**
|
||||
- Name: **Nico Baumann**, Abteilung **43180**
|
||||
- Start nach letztem fertigen Heft: nach **03.04.2026** → Woche **Nr. 79** (`06.04.–10.04.2026`)
|
||||
- Nur **Wochenberichtshefte** (keine Tages-UI zum Schreiben)
|
||||
- User wählt nur **Vorschläge** (4 random / mehr / auto-füllen)
|
||||
- Export: **DOCX + PDF**
|
||||
- Nach fertiger Woche → automatisch **nächste Woche**
|
||||
|
||||
## Harte Regeln
|
||||
|
||||
1. **Echte Word-Vorlage nutzen**
|
||||
Die bestehenden Dateien in `1. Ausbildungsjahr/` und `2. Ausbildungsjahr/` sind die Vorlage.
|
||||
Nicht ein eigenes, „ähnliches“ Layout erfinden.
|
||||
Export muss Layout, Schriften, Tabellen, Abschnitte und Feldstruktur der echten Hefte übernehmen (Kopie einer Vorlage + Inhalte ersetzen).
|
||||
|
||||
2. **Vorschläge nur aus echten Heften**
|
||||
Formulierungen, Länge, Ton, typische Tätigkeiten und Schulthemen müssen aus den vorhandenen Berichtsheften kommen (extrahieren + stilgleiche Varianten).
|
||||
Keine generischen Büro-Klischees, die in den Heften nicht vorkommen.
|
||||
|
||||
3. **Nichts tippen**
|
||||
Keine freien Textfelder für Tätigkeiten. Nur Vorschläge antippen / neu würfeln / auto-füllen.
|
||||
|
||||
4. **Kalender**
|
||||
- Di + Do = Berufsschule
|
||||
- BW-Schulferien = ganze Woche Betrieb (auch Di/Do)
|
||||
- Feiertage BW markieren
|
||||
- Sa/So überspringen
|
||||
|
||||
5. **Bestehende Hefte nicht überschreiben**
|
||||
Originale in `1. Ausbildungsjahr/` / `2. Ausbildungsjahr/` bleiben unangetastet.
|
||||
Neue Exporte z. B. nach `export/2. Ausbildungsjahr/`.
|
||||
|
||||
6. **Sprache**
|
||||
UI und Nutzerkommunikation auf Deutsch. Code/Kommentare klar und knapp.
|
||||
|
||||
7. **Plan-Datei**
|
||||
`.cursor/plans/*.plan.md` nicht editieren, außer der User verlangt es.
|
||||
|
||||
## Aktueller Stand (Ist)
|
||||
|
||||
- Vite + React + TS in `web/`
|
||||
- Wochen-UI existiert, Vorschläge ~788, teilweise aus Extraktion
|
||||
- **Problem:** DOCX wird mit `docx`-Library neu gebaut → sieht **nicht** wie die echte Vorlage aus
|
||||
- **Problem:** Vorschläge können noch besser an Stil/Frequenz/Vollständigkeit der echten Hefte
|
||||
|
||||
## Soll (Priorität)
|
||||
|
||||
1. Word-Export = echte Vorlage befüllen
|
||||
2. Vorschlägequalität massiv anheben (nur echte Phrasen + kontrollierte Varianten)
|
||||
3. UI weiter vereinfachen (Woche → Vorschläge → Export)
|
||||
4. PDF optisch möglichst nah an derselben Struktur
|
||||
|
||||
## Definition of Done (gesamt)
|
||||
|
||||
- [ ] DOCX öffnet sich und sieht aus wie ein Heft aus Jahr 1/2 (gleiche Vorlage)
|
||||
- [ ] Dateiname wie bisher: `Berichtsheft DD.MM - DD.MM.YYYY (N).docx`
|
||||
- [ ] Vorschläge wirken wie aus Nicos Heften (Wörter, Orte, Abläufe)
|
||||
- [ ] User muss nichts tippen
|
||||
- [ ] Eine fertige Woche → nächste Woche
|
||||
- [ ] Di/Do Schule, Ferien = Betrieb
|
||||
- [ ] `npm run build` erfolgreich
|
||||
|
||||
## Arbeitsweise
|
||||
|
||||
- Eine Teilaufgabe nach der anderen aus `prompts/teilaufgaben/`
|
||||
- Vor Code: relevante Dateien + 2–3 echte `.docx` ansehen
|
||||
- Nach Änderung: build prüfen, kurz manuell testen
|
||||
- Keine unnötigen Markdown-Dateien außerhalb von `prompts/`
|
||||
@@ -0,0 +1,52 @@
|
||||
# Prompts – Berichtsheft Generator
|
||||
|
||||
Diese Prompts steuern die Weiterentwicklung der App.
|
||||
**Immer zuerst den Master-Prompt laden**, danach genau **eine** Teilaufgabe.
|
||||
|
||||
## Nur Suggestions (beste Vorschläge)
|
||||
|
||||
→ eigener Pack: [`suggestions/`](suggestions/)
|
||||
Start: [`suggestions/START-HIER.md`](suggestions/START-HIER.md)
|
||||
|
||||
## Reihenfolge (empfohlen)
|
||||
|
||||
1. [`00-MASTER.md`](00-MASTER.md) – Kontext + Regeln (immer mitgeben)
|
||||
2. [`teilaufgaben/01-word-vorlage.md`](teilaufgaben/01-word-vorlage.md) – echte `.docx`-Vorlage nutzen
|
||||
3. [`teilaufgaben/02-vorschlaege.md`](teilaufgaben/02-vorschlaege.md) – Vorschläge aus allen Heften
|
||||
4. [`teilaufgaben/03-wochen-ui.md`](teilaufgaben/03-wochen-ui.md) – reine Wochen-UI, nichts tippen
|
||||
5. [`teilaufgaben/04-kalender.md`](teilaufgaben/04-kalender.md) – Di/Do Schule, BW-Ferien
|
||||
6. [`teilaufgaben/05-export-pdf.md`](teilaufgaben/05-export-pdf.md) – PDF parallel zur Word-Vorlage
|
||||
7. [`teilaufgaben/06-qualitaet.md`](teilaufgaben/06-qualitaet.md) – Endcheck / Feinschliff
|
||||
|
||||
## So nutzen
|
||||
|
||||
In Cursor/Chat:
|
||||
|
||||
```
|
||||
Lies prompts/00-MASTER.md und führe prompts/teilaufgaben/01-word-vorlage.md aus.
|
||||
```
|
||||
|
||||
Oder komplett:
|
||||
|
||||
```
|
||||
Lies prompts/00-MASTER.md. Arbeite die Teilaufgaben 01–06 der Reihe nach ab.
|
||||
Stoppe nach jeder Teilaufgabe kurz mit Status, dann weiter.
|
||||
```
|
||||
|
||||
## Wichtige Pfade
|
||||
|
||||
| Was | Pfad |
|
||||
|-----|------|
|
||||
| App | `web/` |
|
||||
| Echte Hefte (Vorlage + Stil) | `1. Ausbildungsjahr/`, `2. Ausbildungsjahr/` |
|
||||
| Word-Vorlage (Kopie) | `web/public/templates/ausbildungsnachweis.docx` |
|
||||
| Aktueller Export-Code | `web/src/lib/exportDocx.ts`, `exportPdf.ts`, `weekExport.ts` |
|
||||
| Vorschläge | `web/src/data/suggestions.ts` |
|
||||
| Extraktion | `web/scripts/` |
|
||||
| Fortschritt (localStorage) | Key `berichtsheft-generator-v2` (Konstante `STORAGE_KEY` in `web/src/lib/storage.ts`); Legacy `berichtsheft-generator-v1` wird beim Reset mitgelöscht |
|
||||
|
||||
## localStorage
|
||||
|
||||
- **Aktuell:** `berichtsheft-generator-v2` – speichert `currentWeekMonday`, `weeks`, `usedSuggestionIds`
|
||||
- **Nicht ändern**, solange `AppState` kompatibel bleibt; bei Breaking Changes neuen Key (`…-v3`) und Migration/Reset-Hinweis
|
||||
- UI-Reset: „Fortschritt zurücksetzen“ löscht v2 + v1 und lädt den Default (Woche 79)
|
||||
@@ -0,0 +1,37 @@
|
||||
# Copy-Paste: Alles der Reihe nach
|
||||
|
||||
```
|
||||
Lies und befolge strikt:
|
||||
|
||||
1) prompts/00-MASTER.md
|
||||
2) Dann nacheinander:
|
||||
- prompts/teilaufgaben/01-word-vorlage.md
|
||||
- prompts/teilaufgaben/02-vorschlaege.md
|
||||
- prompts/teilaufgaben/03-wochen-ui.md
|
||||
- prompts/teilaufgaben/04-kalender.md
|
||||
- prompts/teilaufgaben/05-export-pdf.md
|
||||
- prompts/teilaufgaben/06-qualitaet.md
|
||||
|
||||
Wichtigste Mängel jetzt:
|
||||
- Word-Export nutzt NICHT die echte Vorlage der Hefte in „1. Ausbildungsjahr“ / „2. Ausbildungsjahr“.
|
||||
- Vorschläge müssen besser werden (nur Stil/Inhalt aus allen echten Berichtsheften).
|
||||
|
||||
Regeln:
|
||||
- Plan-Datei nicht editieren.
|
||||
- Originale .docx nicht überschreiben.
|
||||
- Nach jeder Teilaufgabe kurz Status, dann weiter bis Definition of Done.
|
||||
```
|
||||
|
||||
# Copy-Paste: Nur Word-Vorlage
|
||||
|
||||
```
|
||||
Lies prompts/00-MASTER.md und führe prompts/teilaufgaben/01-word-vorlage.md aus.
|
||||
Nutze eine echte .docx aus „2. Ausbildungsjahr“ als Template und befülle sie – kein selbstgebautes Layout.
|
||||
```
|
||||
|
||||
# Copy-Paste: Nur bessere Vorschläge
|
||||
|
||||
```
|
||||
Lies prompts/00-MASTER.md und führe prompts/teilaufgaben/02-vorschlaege.md aus.
|
||||
Parse alle Berichtshefte erneut und ersetze die Suggestions durch echte Formulierungen mit Gewichtung.
|
||||
```
|
||||
@@ -0,0 +1,83 @@
|
||||
# MASTER PROMPT – Beste Suggestions
|
||||
|
||||
Du arbeitest **nur** an den Vorschlägen (Suggestions) für den Berichtsheft-Generator.
|
||||
Kein Word-Template, kein UI-Redesign, kein PDF – außer es ist zwingend nötig, damit Suggestions gespeichert/geladen werden.
|
||||
|
||||
## Ziel
|
||||
|
||||
Die besten möglichen Vorschläge: so, dass ein generiertes Wochenberichtsheft **nicht von Nicos echten Heften unterscheidbar** ist.
|
||||
|
||||
## Quelle der Wahrheit
|
||||
|
||||
Nur diese Ordner:
|
||||
|
||||
- `1. Ausbildungsjahr/*.docx`
|
||||
- `2. Ausbildungsjahr/*.docx`
|
||||
|
||||
Alles andere (Internet, generische Azubi-Listen, erfundene Büro-Tätigkeiten) ist **verboten**, außer als allerletzte, klar markierte stilgleiche Variante aus bereits belegten Mustern.
|
||||
|
||||
## Kontext Person / Betrieb
|
||||
|
||||
- Nico Baumann, Büromanagement, Kfz-Firma, Abt. 43180
|
||||
- Typisch in den Heften: Termine, Ablage, Rechnungen, Kasse, Reifen/Lager, WM/Crailsheim/Feuchtwangen/Rothenburg, Mobilitätsgarantie, Getränke, Spülmaschine, Aufträge, Versicherungen, Guardey, …
|
||||
|
||||
## Gold-Stil (so müssen Suggestions klingen)
|
||||
|
||||
**Gut (echt):**
|
||||
- `Termine vereinbart`
|
||||
- `Ablage einsortiert`
|
||||
- `Rechnungen geschrieben`
|
||||
- `Reifen bestellt`
|
||||
- `Kassenbuch geführt und die Kasse gezählt`
|
||||
- `Getränke für die Belegschaft geholt`
|
||||
- `Teil beim WM in Crailsheim abgeholt`
|
||||
- `Mobilitätsgarantien abgeschlossen`
|
||||
- `Polypolpreisbildung`
|
||||
- `Introducing a Company`
|
||||
|
||||
**Schlecht (verboten):**
|
||||
- `Eingangsrechnung Nr. 47 geprüft und freigegeben` (künstlich nummeriert)
|
||||
- `BWL: Controlling Kennzahlen` (Schulbuch-Ton, nicht Heft-Ton)
|
||||
- `Optimierung der internen Kommunikationsprozesse`
|
||||
- `Cybersicherheitsherausforderungen absolviert bei „Guardey“` nur behalten wenn **wirklich** so in Heften steht; keine erfundenen IT-Buzzwords
|
||||
|
||||
## Harte Qualitätsregeln
|
||||
|
||||
1. **Original first** – echte Phrasen aus den Heften haben Vorrang
|
||||
2. **Häufigkeit = Qualitätssignal** – oft vorkommende Formulierungen höher gewichten
|
||||
3. **Kurzer Ton** – wie in den Heften (meist 3–12 Wörter, manchmal 1 längerer Satz)
|
||||
4. **Kein Müll** – keine XML-IDs, keine `……`, keine Header (`Abteilung`, `Lfd. Nr.`, `Unterschrift`)
|
||||
5. **Typ trennen** – `betrieb` vs `schule` strikt getrennt
|
||||
6. **Varianten sparsam** – nur leichte Umformulierungen echter Muster, nie neue Themen erfinden
|
||||
7. **Orte/Eigennamen nur wenn belegt** – WM, Crailsheim, Feuchtwangen, Rothenburg, Guardey, Bosch, …
|
||||
8. **Ausgabe** – `web/src/data/suggestions.ts` (+ ggf. Themes), Skript reproduzierbar unter `web/scripts/`
|
||||
|
||||
## Datenmodell
|
||||
|
||||
```ts
|
||||
type Suggestion = {
|
||||
id: number
|
||||
text: string
|
||||
type: "betrieb" | "schule"
|
||||
category: string
|
||||
weight: number // Häufigkeit / Qualitäts-Score aus den Heften
|
||||
}
|
||||
```
|
||||
|
||||
Zusätzlich: `WEEK_THEMES: string[]` nur aus echten „Thema der Woche“-Feldern.
|
||||
|
||||
## Definition of Done (Suggestions)
|
||||
|
||||
- [ ] Alle Hefte geparst
|
||||
- [ ] ≥ 90 % der Betriebs-Suggestions sind 1:1 oder fast 1:1 aus Originalen
|
||||
- [ ] Keine Müll-/Header-Strings
|
||||
- [ ] `weight` steuert Random (häufige Phrasen öfter)
|
||||
- [ ] Schule und Betrieb vermischen sich nicht
|
||||
- [ ] Stichprobe 30 Suggestions: „klingt nach Nico“
|
||||
- [ ] `npm run generate:suggestions` (oder gleichwertig) regeneriert die Datei
|
||||
- [ ] `npm run build` ok
|
||||
|
||||
## Arbeitsweise
|
||||
|
||||
Teilaufgaben in `prompts/suggestions/teilaufgaben/` der Reihe nach.
|
||||
Nach jeder Teilaufgabe: kurze Statusmeldung + was sich in welchen Dateien geändert hat.
|
||||
@@ -0,0 +1,28 @@
|
||||
# Suggestions-Prompts (Master)
|
||||
|
||||
Nur für **beste Vorschläge**. Word-Vorlage/UI liegen absichtlich außerhalb.
|
||||
|
||||
| Datei | Zweck |
|
||||
|-------|--------|
|
||||
| [00-MASTER.md](00-MASTER.md) | Regeln, Stil, DoD |
|
||||
| [START-HIER.md](START-HIER.md) | Copy-Paste |
|
||||
| [teilaufgaben/01-extrahieren.md](teilaufgaben/01-extrahieren.md) | Alle Hefte parsen |
|
||||
| [teilaufgaben/02-saeubern-dedupe.md](teilaufgaben/02-saeubern-dedupe.md) | Müll weg, dedupe |
|
||||
| [teilaufgaben/03-kategorisieren-gewichten.md](teilaufgaben/03-kategorisieren-gewichten.md) | category + weight |
|
||||
| [teilaufgaben/04-varianten-sparsam.md](teilaufgaben/04-varianten-sparsam.md) | max. 30 % Varianten |
|
||||
| [teilaufgaben/05-auswahl-algorithmus.md](teilaufgaben/05-auswahl-algorithmus.md) | weighted random / Woche |
|
||||
| [teilaufgaben/06-qualitaetstor.md](teilaufgaben/06-qualitaetstor.md) | Auto-Check + Stichprobe |
|
||||
|
||||
## Regenerieren / Qualitätstor
|
||||
|
||||
```bash
|
||||
cd web
|
||||
npm run generate:suggestions # Extrakt → Clean → Score → suggestions.ts → verify
|
||||
npm run check:suggestions # nur Qualitätstor
|
||||
```
|
||||
|
||||
## Einstieg
|
||||
|
||||
```
|
||||
Lies prompts/suggestions/START-HIER.md und führe den Block „Alles der Reihe nach“ aus.
|
||||
```
|
||||
@@ -0,0 +1,40 @@
|
||||
# Copy-Paste – Nur Suggestions (beste Qualität)
|
||||
|
||||
## Alles der Reihe nach
|
||||
|
||||
```
|
||||
Du arbeitest NUR an Suggestions.
|
||||
|
||||
Lies und befolge strikt:
|
||||
1) prompts/suggestions/00-MASTER.md
|
||||
2) Dann nacheinander:
|
||||
- prompts/suggestions/teilaufgaben/01-extrahieren.md
|
||||
- prompts/suggestions/teilaufgaben/02-saeubern-dedupe.md
|
||||
- prompts/suggestions/teilaufgaben/03-kategorisieren-gewichten.md
|
||||
- prompts/suggestions/teilaufgaben/04-varianten-sparsam.md
|
||||
- prompts/suggestions/teilaufgaben/05-auswahl-algorithmus.md
|
||||
- prompts/suggestions/teilaufgaben/06-qualitaetstor.md
|
||||
|
||||
Ziel: Vorschläge müssen klingen wie Nico Baumanns echte Berichtshefte
|
||||
(Büro + Kfz: Termine, Ablage, Rechnungen, Reifen, WM/Crailsheim, Kasse, …).
|
||||
|
||||
Verboten: generische KI-Bürofloskeln, nummerierte Kunstsätze, Themen die nie in den Heften vorkommen.
|
||||
Mindestens 70 % Betrieb-Suggestions = exakte Originale aus den .docx.
|
||||
Nach jeder Teilaufgabe kurzer Status, dann weiter bis Definition of Done.
|
||||
```
|
||||
|
||||
## Nur Extraktion + Clean
|
||||
|
||||
```
|
||||
Lies prompts/suggestions/00-MASTER.md und führe
|
||||
01-extrahieren.md + 02-saeubern-dedupe.md aus.
|
||||
Parse alle Berichtshefte in 1. und 2. Ausbildungsjahr.
|
||||
```
|
||||
|
||||
## Nur Auswahl besser machen
|
||||
|
||||
```
|
||||
Lies prompts/suggestions/00-MASTER.md und führe
|
||||
05-auswahl-algorithmus.md aus.
|
||||
Weighted random, Diversität, Ferien = nur Betrieb.
|
||||
```
|
||||
@@ -0,0 +1,31 @@
|
||||
# S01 – Alle Hefte extrahieren
|
||||
|
||||
Lies `prompts/suggestions/00-MASTER.md`. Nur Extraktion – noch keine Varianten erfinden.
|
||||
|
||||
## Auftrag
|
||||
|
||||
1. Parse **jede** `.docx` in `1. Ausbildungsjahr/` und `2. Ausbildungsjahr/`.
|
||||
2. Ziehe Rohtext aus `word/document.xml`.
|
||||
3. Speichere Rohdump + strukturierte Phrasen:
|
||||
- `web/scripts/extracted-all.txt` (Roh)
|
||||
- `web/scripts/raw-phrases.json` mit Feldern:
|
||||
- `sourceFile`
|
||||
- `activities[]`
|
||||
- `weekThemes[]`
|
||||
- `schoolTopics[]`
|
||||
- `frameworkRefs[]` (nur zum Filtern, nicht als Suggestion)
|
||||
|
||||
## Parsing-Hinweise
|
||||
|
||||
Abschnitte typischerweise:
|
||||
- Tätigkeiten vor „Betriebliche Tätigkeiten“ / Rahmenplan
|
||||
- „Thema der Woche …“
|
||||
- „Berufsschule …“
|
||||
|
||||
Alles was Header/Footer/Unterschrift ist → ignorieren.
|
||||
|
||||
## Abnahme
|
||||
|
||||
- [ ] Anzahl Quelldateien = Anzahl geparster Hefte (ca. 78)
|
||||
- [ ] Pro Heft mindestens ein paar Activities (außer reine Urlaubswochen)
|
||||
- [ ] JSON ist valide und nachvollziehbar
|
||||
@@ -0,0 +1,35 @@
|
||||
# S02 – Säubern + Deduplizieren
|
||||
|
||||
Lies `prompts/suggestions/00-MASTER.md`. Nutze die Ausgabe aus S01.
|
||||
|
||||
## Auftrag
|
||||
|
||||
Erzeuge `web/scripts/clean-phrases.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"activities": [{ "text": "...", "count": 14, "sources": ["..."] }],
|
||||
"themes": [{ "text": "...", "count": 5 }],
|
||||
"school": [{ "text": "...", "count": 2 }]
|
||||
}
|
||||
```
|
||||
|
||||
## Filter (muss weg)
|
||||
|
||||
- `Abteilung`, `Ausbildungsnachweis`, `Für die Zeit`, `Name`, `Datum`
|
||||
- `Lfd. Nr.`, `Unterschrift`, `Ausbilderin`, Punkte-Linien `……`
|
||||
- reine Zahlen / lange Ziffernblöcke / XML-Artefakte
|
||||
- `Ferien` als Activity (gehört nur ins Berufsschule-Feld der Woche)
|
||||
- doppelte Zeilen durch Tabellen-Duplikate in Word (gleiche Phrase 2× im selben Heft → count sinnvoll)
|
||||
|
||||
## Dedup
|
||||
|
||||
- case-insensitive
|
||||
- trim, Whitespace normalisieren
|
||||
- optionale Endpunkt-Varianten zusammenführen (`Termine geplant und vergeben.` ≈ ohne Punkt)
|
||||
|
||||
## Abnahme
|
||||
|
||||
- [ ] Top-Activities sehen aus wie echte Heftzeilen
|
||||
- [ ] `Termine vereinbart` / `Ablage …` / `Rechnungen …` sind oben, wenn häufig
|
||||
- [ ] Kein sichtbarer Müll in den Top 50
|
||||
@@ -0,0 +1,49 @@
|
||||
# S03 – Kategorisieren + Gewichten
|
||||
|
||||
Lies `prompts/suggestions/00-MASTER.md`. Input: `clean-phrases.json`.
|
||||
|
||||
## Auftrag
|
||||
|
||||
Baue Suggestions mit Kategorie und Gewicht.
|
||||
|
||||
### Kategorien Betrieb (nur wenn passend)
|
||||
|
||||
- Rechnungswesen
|
||||
- Kunden
|
||||
- Lager
|
||||
- Kasse
|
||||
- Fahrzeuge
|
||||
- Fahrten
|
||||
- Organisation
|
||||
- Betrieb (Fallback)
|
||||
|
||||
### Kategorien Schule
|
||||
|
||||
- BWL
|
||||
- Buchhaltung
|
||||
- Englisch
|
||||
- Deutsch
|
||||
- IT
|
||||
- BFK
|
||||
- Gesellschaft
|
||||
- Berufsschule (Fallback)
|
||||
|
||||
Regeln an echten Wörtern aus den Phrasen ausrichten (Rechnung, Termin, Reifen, Kasse, Crailsheim, Excel, Englisch, …).
|
||||
|
||||
### weight
|
||||
|
||||
```
|
||||
weight = count // Rohhäufigkeit aus den Heften
|
||||
```
|
||||
|
||||
Optional leicht anheben (+1..2), wenn Phrase in mehreren Ausbildungsjahren vorkommt.
|
||||
|
||||
## Ausgabe
|
||||
|
||||
Zwischenfile ok, z. B. `web/scripts/scored-phrases.json`.
|
||||
|
||||
## Abnahme
|
||||
|
||||
- [ ] Jede Phrase hat `type`, `category`, `weight`
|
||||
- [ ] Schule nie als `betrieb` gelabelt (Stichprobe)
|
||||
- [ ] Hohe weights = wirklich häufige Originalphrasen
|
||||
@@ -0,0 +1,40 @@
|
||||
# S04 – Stilgleiche Varianten (sparsam)
|
||||
|
||||
Lies `prompts/suggestions/00-MASTER.md`.
|
||||
|
||||
## Ziel
|
||||
|
||||
Pool groß genug für Abwechslung – aber **ohne** Fake-Büro-Text.
|
||||
|
||||
## Erlaubt
|
||||
|
||||
Nur Varianten, die klar aus einem belegten Muster kommen:
|
||||
|
||||
| Original (belegt) | Erlaubte Variante |
|
||||
|-------------------|-------------------|
|
||||
| Termine vereinbart | Termine telefonisch vereinbart |
|
||||
| Ablage einsortiert | Ablage sortiert |
|
||||
| Rechnungen geschrieben | Rechnungen erstellt |
|
||||
| Getränke geholt | Getränke für die Belegschaft geholt |
|
||||
|
||||
## Verboten
|
||||
|
||||
- Nummerierte Kunstsätze (`Rechnung 1000+i`)
|
||||
- Neue Themen, die nie in den Heften vorkommen
|
||||
- Englische Management-Floskeln
|
||||
- Überlange KI-Sätze
|
||||
|
||||
## Mengenregel
|
||||
|
||||
- Mindestens **70 %** des finalen Betrieb-Pools = exakte Originale
|
||||
- Höchstens **30 %** stilgleiche Varianten
|
||||
- Varianten: `weight` niedriger als das Original (z. B. `max(1, originalWeight - 2)`)
|
||||
|
||||
## Schule
|
||||
|
||||
Für Schule: bevorzugt **nur Originale**. Varianten nur wenn extrem nah (z. B. Tippfehler-Korrektur).
|
||||
|
||||
## Abnahme
|
||||
|
||||
- [ ] Verhältnis Original/Variante dokumentiert (Konsolen-Log reicht)
|
||||
- [ ] 20 zufällige Varianten manuell gegen Originale haltbar
|
||||
@@ -0,0 +1,33 @@
|
||||
# S05 – Auswahl-Algorithmus (beste Random-Sets)
|
||||
|
||||
Lies `prompts/suggestions/00-MASTER.md`.
|
||||
Code vor allem in `web/src/lib/suggest.ts` (+ App nur wenn nötig).
|
||||
|
||||
## Ziel
|
||||
|
||||
Wenn der User „4 neue“, „8 neue“ oder „Woche automatisch füllen“ klickt, sollen die Vorschläge **so gut wie möglich** sein – nicht nur zufällig, sondern gewichtet und passend zur Woche.
|
||||
|
||||
## Regeln
|
||||
|
||||
1. **Weighted random** nach `weight` (häufige echte Phrasen öfter)
|
||||
2. **Keine Duplikate** in Offer + bereits gewählten Texten
|
||||
3. **usedSuggestionIds** meiden, bis Pool zu klein → dann Fallback
|
||||
4. **Ferienwoche / keine Schule:** nur `type: betrieb`
|
||||
5. **Schulwoche:** überwiegend Betrieb; 0–2 Schule-Themen in größeren Offers
|
||||
6. **Auto-füllen Woche:** ca. 8–12 Betriebseinträge, thematisch gemischt (nicht 8× nur Ablage)
|
||||
7. **Diversität:** bei Auto-füllen max. 2–3 aus derselben `category`, außer Pool zu klein
|
||||
8. **Themen der Woche:** random aus echten `WEEK_THEMES`
|
||||
|
||||
## API (orientierend)
|
||||
|
||||
```ts
|
||||
pickRandomSuggestions(monday, count, usedIds, alreadySelectedTexts)
|
||||
pickWeekSet(monday, usedIds) // für Auto-füllen: diverse, gewichtete Woche
|
||||
```
|
||||
|
||||
## Abnahme
|
||||
|
||||
- [ ] 10× „4 neue“: Phrasen klingen echt, wenig Wiederholung
|
||||
- [ ] Auto-füllen: gemischte Kategorien
|
||||
- [ ] Ferienwoche: keine Schul-Vorschläge im Offer
|
||||
- [ ] Build ok
|
||||
@@ -0,0 +1,38 @@
|
||||
# S06 – Qualitätstor „klingt nach Nico“
|
||||
|
||||
Lies `prompts/suggestions/00-MASTER.md`. Abschluss-Check nur für Suggestions.
|
||||
|
||||
## Automatische Checks (Skript)
|
||||
|
||||
Schreibe/aktualisiere ein Skript, das failt wenn:
|
||||
|
||||
- Phrase matcht Müll-Regex (Unterschrift, Lfd. Nr., `……`, lange Ziffern)
|
||||
- `type` fehlt / ungültig
|
||||
- `weight < 1`
|
||||
- Duplikate (case-insensitive)
|
||||
- Anteil exakter Originale am Betrieb-Pool < 70 % (gegen `clean-phrases.json`)
|
||||
|
||||
## Manuelle Stichprobe (du als Agent)
|
||||
|
||||
Ziehe 30 zufällige Betrieb + 15 Schule und bewerte:
|
||||
|
||||
| Kriterium | Ja/Nein |
|
||||
|-----------|---------|
|
||||
| Könnte so im echten Heft stehen | |
|
||||
| Kein KI-/Lehrbuch-Ton | |
|
||||
| Kategorie plausibel | |
|
||||
|
||||
Wenn > 3 klare Flops → zurück zu S02/S04 und nachbessern.
|
||||
|
||||
## Final schreiben
|
||||
|
||||
- `web/src/data/suggestions.ts` final generieren
|
||||
- `WEEK_THEMES` nur echte Themen
|
||||
- `npm run generate:suggestions` dokumentieren/aktualisieren
|
||||
- `npm run build`
|
||||
|
||||
## Abnahme
|
||||
|
||||
- [ ] Auto-Checks grün
|
||||
- [ ] Stichprobe bestanden
|
||||
- [ ] Kurzbericht: Anzahl Betrieb/Schule, Top-10 Phrasen, Original-Anteil
|
||||
@@ -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
|
||||
@@ -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)
|
||||
@@ -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. 4–8)
|
||||
- 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
|
||||
@@ -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. 2026–2027)
|
||||
- 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.
|
||||
@@ -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
|
||||
@@ -0,0 +1,59 @@
|
||||
# Teilaufgabe 06 – Qualität / Endcheck
|
||||
|
||||
Lies zuerst `prompts/00-MASTER.md`. Führe diesen Check aus, wenn 01–05 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, Di–Fr 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 2–5 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
|
||||
@@ -0,0 +1,25 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
scripts/.tmp-verify/
|
||||
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
.idea
|
||||
.DS_Store
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"$schema": "./node_modules/oxlint/configuration_schema.json",
|
||||
"plugins": ["react", "typescript", "oxc"],
|
||||
"rules": {
|
||||
"react/rules-of-hooks": "error",
|
||||
"react/only-export-components": ["warn", { "allowConstantExport": true }]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
# Berichtsheft-Generator (Web)
|
||||
|
||||
## Suggestions regenerieren
|
||||
|
||||
Aus den echten Heften unter `../1. Ausbildungsjahr` und `../2. Ausbildungsjahr`:
|
||||
|
||||
```bash
|
||||
npm run generate:suggestions
|
||||
```
|
||||
|
||||
Pipeline:
|
||||
|
||||
1. `scripts/extract-phrases.mjs` – `.docx` → Rohdaten
|
||||
2. `scripts/clean-phrases.mjs` → `scripts/clean-phrases.json`
|
||||
3. `scripts/score-phrases.mjs` → `scripts/scored-phrases.json` (category + weight)
|
||||
4. `scripts/build-real-suggestions.mjs` → `src/data/suggestions.ts` (`SUGGESTIONS`, `WEEK_THEMES` nur echte Themen)
|
||||
5. `scripts/verify-suggestions.mjs` – Qualitätstor: Müll-Regex, gültiger `type`, `weight ≥ 1`, keine Duplikate, ≥70 % exakte Betrieb-Originale gegen `clean-phrases.json`
|
||||
|
||||
Nur das Tor erneut prüfen:
|
||||
|
||||
```bash
|
||||
npm run check:suggestions
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# React + TypeScript + Vite
|
||||
|
||||
This template provides a minimal setup to get React working in Vite with HMR and some Oxlint rules.
|
||||
|
||||
Currently, two official plugins are available:
|
||||
|
||||
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs)
|
||||
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/)
|
||||
|
||||
## React Compiler
|
||||
|
||||
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
|
||||
|
||||
## Expanding the Oxlint configuration
|
||||
|
||||
If you are developing a production application, we recommend enabling type-aware lint rules by installing `oxlint-tsgolint` and editing `.oxlintrc.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"$schema": "./node_modules/oxlint/configuration_schema.json",
|
||||
"plugins": ["react", "typescript", "oxc"],
|
||||
"options": {
|
||||
"typeAware": true
|
||||
},
|
||||
"rules": {
|
||||
"react/rules-of-hooks": "error",
|
||||
"react/only-export-components": ["warn", { "allowConstantExport": true }]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
See the [Oxlint rules documentation](https://oxc.rs/docs/guide/usage/linter/rules) for the full list of rules and categories.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user