gute
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user