docs: plan odoo agent integration (D25)

This commit is contained in:
2026-09-17 00:02:44 +02:00
parent 5090f07880
commit e1a6e9e0b2
3 changed files with 155 additions and 4 deletions
+61 -4
View File
@@ -5,10 +5,39 @@ Rollender Übergabe-Log für agent-Threads. Workflow: `.agents/SKILL.md`
## Current focus
Automatischer Index-Bootstrap, detailliertes Q&A-Audit und Antwortbewertungen
(D22) sind umgesetzt; das externe Zielnetz ist auf `ollama_default` korrigiert.
Offen bleibt der Zielhost-Build/Smoke-Test samt Verifikation des Ollama-DNS-
Alias; danach kann der dünne Odoo-Client folgen.
D24 ist validiert (beide 500-Euro-Fragen verifiziert beantwortet; think-Fix
aktiv; Offline-Eval Recall@8 0,95; 95 Unit-Tests). M4-Richtung mit User
geklärt (D25-Vorentscheidung): Odoo orchestriert und rechnet (System of
Record), der Agent konsumiert nur das vorgegebene Ergebnis und prüft
Plausibilität gegen die KB. Die Aufweichung der Privacy-Regel 8 (keine
Lohndaten im Prompt) passiert bewusst erst im Rahmen der Odoo-Implementierung;
der Test-Agent bleibt `knowledge_base_only`. Odoo-Modul-Bestand wird vom User
verlinkt; danach D25/M4-Planung.
## Completed (2026-09-16, Modul-Review/D25-Planung)
- **`.oddo-module/` verlinkt** (Symlink → ../odoo-at-payroll/addons, in
`.gitignore` aufgenommen). Review gegen M4: Odoo 19.0 (Kern 19.0.10.0.0 auf
`hr_payroll`, Privat 19.0.17.0.0, Gemeinde-Bgld, Dokumente), LGPL-3,
~22k Zeilen Python / ~7,5k XML / ~25 Testdateien.
**Kein HTTP-/Controller-/Agenten-Code vorhanden** — M4 startet bei null.
Tenant-Isolation via `ir.rule` (company_ids), Feldgruppen
`group_hr_payroll_user`. Rechenkern: sozialversicherung.py (§-49-Ausschal-
tungen mit Jahres-Kumulative `_l10n_at_sv49_ytd`, WF-Satzvektor Bundesland
×Jahr, DAG), lohnsteuer.py (§ 66/67/68 mit YTD-Freibetragsverbrauch),
payslip_private (KommSt/DZ/FLAF-DB/SZ), sachbezuege/reisekosten. Parameter
aus ÖGK-TASY-Export gegen offiziellen Report gespiegelt; 2027-Rahmen.
KV-Katalog `l10n.at.payroll.kv` mit versionierten `kv.wert`, Gruppen/Stufen,
CSV-Import-Wizard (Sprungwarnung >10 %) und `library_variant_id` auf die
KV-Library (SI-2203/SI-2748). D25-Planung steht in `planung.md`
Abschnitt 14: neues Modul `l10n_at_payroll_agent`, ir.config_parameter plus
eigene Gruppe, serverseitiger Client, hart kodierte Kontext-Whitelist
(facts key/value/note, keine Personendaten), Pilot-Workflow
Plausibilitätsprüfung einer geplanten Auszahlung (Odoo rechnet auf dem
Draft-Payslip, Agent liefert strukturiertes Verdict), Agent-M4.2:
`mode=review` plus context-Schema, drei Beweisklassen, Injection-Abgrenzung
und Feature-Flag `PV_REVIEW_MODE` (default aus). Nicht-Ziele fixiert.
Offen: Mapping Odoo-KV-SI-Codes ↔ KB kv-kvt-IDs.
## Completed (2026-09-14)
@@ -473,6 +502,31 @@ Alias; danach kann der dünne Odoo-Client folgen.
`python -m agent.cli audit --limit 20`. Offline-Suite **93 Tests**; Compose-
Validierung, Image-Rebuild und unprivilegierter read-only Bootstrap-Smoke-Test
gegen den bestehenden vollständigen Index bestanden.
- **D23 (Antwortkommentare, 2026-09-16):** Zusätzlich zu `up|down` besitzt
jede protokollierte Antwort eine immer sichtbare Kommentarbox. Der
authentisierte Endpunkt `/v1/comments` speichert mehrere, jeweils datierte
Kommentare pro Request-ID in der separaten Audit-Tabelle `comments`; leere
Texte werden abgewiesen, Maximallänge 2.000 Zeichen. `agent.cli audit` gibt
Kommentare gemeinsam mit Interaktion und Bewertung aus. Bei deaktivierter
Inhaltsprotokollierung bleiben Kommentarereignis und ID sichtbar, der Text
wird weder in SQLite noch stdout gespeichert.
- **D24 (Kostenaufstellung + think-Fix, 2026-09-16):** (a)
`is_decision_support` matcht auf `normalize_text(question)`; die Regex deckt
neben NFKD-Folding (gunstig/losung) auch ue-Schreibweisen (guenstigste
loesung) ab — vorher liefen solche Fragen in den generischen LLM-Planer und
wurden verweigert. (b) Neue Trigger: "einmalig ... auszah", "bar auszah",
"wieviel/wie viel ... kostet", "kostet mich", "mitarbeiterpra(e)m". (c)
COST_INTENT: deterministischer Plan ergänzt `cost_tax` (einmalige Bezüge,
Jahressechstel 6 %, 620 — trifft lb-son-04) und `cost_lnk` (Beitragssätze DN
+ Dienstgeberanteil, DB/DZ, KommSt — trifft lb-sva-06, lb-lnk-02/07); bei
Kostennnabsicht fällt Zukunftssicherung weg (Slots), Cap 4 Queries. (d) Regel
11: konkrete Eckdaten → Arbeitgeberkosten Schritt für Schritt aus belegten
Sätzen rechnen, Annahmen nennen, Rückfrage nur bei wesentlichem Fehlen.
(e) generate.chat(): OllamaError bei think=true (leerer content, Antwort nur
im thinking-Feld) → einmaliger Retry ohne thinking. (f) Goldset q-128/q-129
(beide recall=1,00). Offline-Eval 56 Fragen: Hit-Rate 0,98 · Recall@8 0,95 ·
MRR 0,67. Real-Läufe: Q1 (günstigste) verified, 1 Regen; Q2 (Kosten) verified
mit AG-SV-Rechnung; PV_THINK=true verified (281 s).
- **Bake-off-Protokoll** (Skill): Modellwechsel nur über dokumentierten
Goldset-Vergleich; Kriterium: Zitier-Präzision > Verweigerungs-
korrektheit > Latenz.
@@ -482,6 +536,9 @@ Alias; danach kann der dünne Odoo-Client folgen.
- `planung.md` — Plan + Entscheidungspunkte (Abschnitt 12) + Stand.
- `.agents/skills/pv-rag-agent/SKILL.md` — verbindliche Regeln.
- `agent/README.md` — Betrieb, Konfiguration, Host-Schritte.
- `.oddo-module/` (Symlink) — Odoo-19-Addon-Bestand; `planung.md` Abschnitt 14
— M4/D25-Planung; `l10n_at_hr_payroll_private/models/kollektivvertrag.py`
KV-Katalog mit `library_variant_id` (Brücke zu KB).
- `docs/API.md` — v1-Vertrag, Authentisierung, Privacy-Grenze und Odoo-Aufruf.
- `agent/api.py` — versionierte Service-Oberfläche, UI-Auslieferung und Sicherheitsgrenzen.
- `web/` — dependency-freies Test-Frontend.