Files
dejanandClaude Opus 5 1896d2772b Einbau in HiveGrid vorbereiten: Anleitung, Ticket-Docs, i18n-Inventar
Die Uebergabe geht an einen Dev, der den Einbau mit einem Coding-Agenten
macht. Dafuer reicht "hier ist das Repo" nicht. Vier neue Artefakte, alle
gegen das Zielsystem geprueft, nicht aus dem Gedaechtnis geschrieben.

**EINBAU.md** ist der Einstieg. Der wichtigste Satz darin steht ganz oben:
Das Dashboard in HiveGrid ist kein leeres Blatt. Route, Widget-Registry,
Rollen-Layouts, Drilldown, Export, Live-Updates und Layout-Speicherung sind
gebaut. Wer dort eine neue Seite anlegt, wirft funktionierende Software weg.
Das ist nicht meine Einschaetzung: Der Brief P30 im Zielsystem sagt woertlich
"Delta-Phase, kein Neubau ... Dashboard/Widget-Registry voll gebaut". Analytics
dagegen gibt es noch nicht und wird nach dem Muster von leads.analytics.tsx neu
gebaut. Dazu eine Tabelle, welche Datei wohin wandert, und eine zweite, was
ausdruecklich nicht mitwandert und warum.

**docs/port/TICKET-ANALYTICS.md und TICKET-DASHBOARD.md** sind im Format von
.planning/ticket-docs/ geschrieben, mit Header-Tabelle, Abhaengigkeiten,
Definition of Done, Technischen Bausteinen, Quellen und Dev-Nachzug. Sie
koennen dorthin kopiert werden; dann greift der bestehende Ablauf, statt dass
wir einen zweiten danebenstellen.

**docs/port/i18n-*.json plus TEXTE.md.** pnpm run verify:i18n ist in HiveGrid
ein Gate: keine hartkodierten Strings. Dieser Prototyp ist zu 100 %
hartkodiertes Deutsch. 185 Texte mit Schluesselvorschlag und Fundstelle, dazu
derselbe Inhalt als einfuegbarer Baum. Erzeugt von scripts/i18n-inventar.py
(npm run i18n:inventar), damit das Inventar nicht auseinanderlaeuft, wenn sich
am Prototyp noch etwas aendert.

Dabei gefunden: app.dashboard.widgets.* enthaelt bereits 17 Widgets, darunter
genau fuenf, die dieser Prototyp gestaltet (receivables, orderIntake,
daysToPayment, winRate, stageDistribution) und genau die drei, die er als
reserviert markiert (myTasks, scheduleToday, hrRequests). Neue Schluessel
dafuer waeren Dubletten; die acht sind in TEXTE.md einzeln aufgefuehrt. Die
Anrede stimmt ebenfalls schon ueberein, HiveGrid duzt.

**CLAUDE.md** als Einstiegspunkt, den Claude Code beim Oeffnen des Repos von
selbst liest: was dieses Repo ist, die drei Dinge, an denen ein Einbau sonst
scheitert, und wo was steht.

Jeder in den Dokumenten genannte Pfad wurde in beiden Repos nachgeprueft. Ein
Fehler dabei gefunden und behoben: der Designer-Brief heisst
P11-suche-dashboard.md, nicht P11.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QPeZNwSeU7qG3RRCwaxEZX
2026-08-31 21:35:27 +02:00

118 lines
4.4 KiB
Markdown

# Texte und Übersetzungsschlüssel
`pnpm run verify:i18n` ist in HiveGrid ein Gate: keine hartkodierten Strings.
Dieser Prototyp ist zu 100 % hartkodiertes Deutsch, weil er allein lauffähig
sein muss. Damit ist die Übersetzung der größte mechanische Posten am Einbau.
Diese drei Dateien nehmen ihn ab.
| Datei | Wofür |
|---|---|
| `i18n-inventar.json` | 185 Einträge: Schlüssel, deutscher Text, Fundstelle im Prototyp |
| `i18n-de.json` | dieselben Texte als Baum, nach `apps/web/public/locales/de/translations.json` einfügbar |
| diese Datei | Namensschema, Grenzen, und was in HiveGrid schon existiert |
---
## 1. Zuerst prüfen: vieles gibt es schon
`app.dashboard.widgets.*` in HiveGrid enthält bereits 17 Widgets. Fünf davon
sind genau die Kacheln, die dieser Prototyp gestaltet, drei weitere genau die,
die er als „kommt noch" markiert:
| Schlüssel in HiveGrid | Deutscher Text dort | Entspricht im Prototyp |
|---|---|---|
| `receivables` | Offene Posten | Kennzahl „Offene Forderungen", Finanzen-Diagramm |
| `orderIntake` | Auftragseingang | Aufträge-Seite, Säulendiagramm |
| `daysToPayment` | Zahlungsdauer | Kennzahl in der Statistikzeile |
| `winRate` | Auftragsquote | Trichter-Übergangsquote |
| `stageDistribution` | Offene Projekte nach Phase | Vertriebstrichter |
| `myTasks` | Meine Aufgaben | reservierte Kachel |
| `scheduleToday` | Heute | reservierte Kachel „Termine heute" |
| `hrRequests` | HR-Anträge | reservierte Kachel |
**Für diese acht keine neuen Schlüssel anlegen.** Die Vorschläge im Inventar
sind dann zu verwerfen und durch den bestehenden Schlüssel zu ersetzen.
Die Anrede passt bereits zusammen: HiveGrid duzt („Termine und Buchungen für
deinen Tag"), dieser Prototyp seit dem 31.08. auch.
---
## 2. Namensschema der Vorschläge
```
app.<bereich>.<gruppe>.<kurzform>
app.analytics.finanzen.umsatzNachGewerk
app.dashboard.page.handlungsbedarf
app.shared.chart.keineDatenGewaehlten
```
`<bereich>` ist `analytics`, `dashboard` oder `shared`, `<gruppe>` die Seite
oder der Baustein. Die Kurzform ist maschinell aus dem deutschen Text gebildet
und **ausdrücklich ein Vorschlag**. Sie ist eindeutig und kollisionsfrei, aber
kein Ersatz für einen Blick. Wo HiveGrid schon eine bessere Benennung hat, gilt
die.
Verteilung:
| `app.dashboard.page.*` | 28 |
| `app.analytics.auftraege.*` | 26 |
| `app.analytics.kunden.*` | 26 |
| `app.analytics.finanzen.*` | 24 |
| `app.analytics.team.*` | 22 |
| `app.analytics.alerts.*` | 13 |
| `app.analytics.nav.*` | 12 |
| `app.analytics.uebersicht.*` | 8 |
| `app.shared.chart.*` | 6 |
| `app.analytics.filter.*` | 5 |
| `app.analytics.actions.*` | 5 |
| `app.analytics.shell.*` | 4 |
| `app.shared.table.*` | 3 |
| `app.shared.alerts.*` | 1 |
| `app.shared.kpi.*` | 1 |
| `app.dashboard.widget.*` | 1 |
| `app.shared.state.*` | 1 |
---
## 3. Was das Inventar nicht abdeckt
**Texte mit Zahlen darin.** Sätze wie „25 überfällige Rechnungen" oder
„Ältester seit 99 Tagen fällig" entstehen im Prototyp durch
String-Interpolation in `data/calculations.ts`. Sie brauchen in HiveGrid
i18next-Platzhalter und teils Pluralformen:
```json
"ueberfaelligeRechnungen": "{{count}} überfällige Rechnung",
"ueberfaelligeRechnungen_other": "{{count}} überfällige Rechnungen"
```
Im Inventar stehen sie mit der Musterzeichenkette, nicht mit Platzhaltern.
Betroffen ist vor allem `app.analytics.alerts.*` (13 Einträge).
**Die Bausteingalerie.** `pages/KomponentenSeite.tsx` ist bewusst
ausgenommen, sie wird nicht portiert.
**Zahlen- und Datumsformate.** Die stecken in `utils/formatters.ts` und sind
keine Übersetzung, sondern Formatierung. HiveGrid hat dafür eigene Helfer unter
`apps/web/app/locale/format.ts`; die des Prototyps sind zu vergleichen, nicht
zu übernehmen.
---
## 4. Wie das Inventar entstanden ist
Maschinell, mit `npm run i18n:inventar` (`scripts/i18n-inventar.py`): alle
Zeichenketten in den Text tragenden Props (`titel`, `untertitel`,
`beschreibung`, `label`, `hinweis`, `zusatz`, `aktion`, …) und alle Textknoten
in JSX. Kommentare, die Bausteingalerie und die Daten-Attrappen sind
ausgenommen.
Der Befehl ist wiederholbar: Ändert sich am Prototyp noch etwas, erzeugt er
beide Dateien neu, statt dass sie auseinanderlaufen.
Das heißt auch: **Vollständigkeit ist wahrscheinlich, aber nicht bewiesen.**
Der verlässliche Nachweis ist `pnpm run verify:i18n` in HiveGrid. Was das
Inventar übersieht, findet dieses Gate.