aufgaben-triage
Status: beta — automatisierte Tests laufen grün in CI (tests/),
noch keine händische Live-Abnahme durch den Maintainer. Keine
Produktions-Garantie — Zweitkontrolle bleibt Pflicht (siehe
CONVENTIONS.md, Reifegrad-Leiter).
Zweck
Aus dem Pilot-Call: eine Steuerkanzlei ohne Ticketsystem. Mails werden
„manche auch einfach nicht" bearbeitet, DATEV-Aufgaben werden händisch
priorisiert, Erledigtes wird vergessen auszutragen. Dieser Skill macht aus
dem Posteingang eine Vorschlagsliste:
- Wem gehört die Mail? Mandanten-Zuordnung über Absender-Domain,
Mandantennummer (beide wörtlich,
treffer), Name/Alias gegen
Absender-Name und Betreff (core/calc/matching, Stufen S1-S4). Kein
Treffer über der Schwelle oder ein Gleichstand zwischen zwei Mandanten
-> unzugeordnet (nie geraten).
- Ist es eine Aufgabe, eine Info oder eine Rückfrage? Regelbasierte
Grobklassifikation (
aufgabe/info/rueckfrage/unklar) — die
Feinklassifikation und der Aufgabentitel in natürlicher Sprache sind
Sache von Claude (Schritt 3 im Ablauf unten), der Executor liefert nur
den regelbasierten Rohvorschlag.
- Wie dringend? Steuerliche Fristindikatoren (Katalog unten) plus —
nur bei einem Steuerbescheid mit erkennbarem Bescheiddatum — die über
core/calc/ao_fristen berechnete
Einspruchsfrist. Priorität = Matrix aus Indikator-Dringlichkeit und
Restfrist: sofort (< 3 Werktage oder Vollstreckung), hoch, normal,
info — als RechenSchritt-Kette mit Begründung.
Bewusste Annahme: das Bescheiddatum wird als Datum der Aufgabe zur
Post behandelt (§ 122 Abs. 2 Nr. 1 AO) — in der Praxis meist zutreffend,
aber nicht zwingend; ein bestätigtes Zustelldatum geht vor.
- Ist eine offene Aufgabe vermutlich erledigt? Wenn eine gesendete Mail
an denselben Mandanten per
thread_id/in_reply_to oder normalisiertem
Betreff (ohne AW:/Re:/WG:) nach dem Anlage-Datum der Aufgabe verknüpft
ist — nur als Vorschlag mit Beleg (welche Mail), kein automatisches
Austragen.
Deterministik-Grenze (P1/P3): Zuordnung, Indikator-Erkennung,
Fälligkeitsberechnung und Priorität kommen vollständig aus dem Executor
core/calc/triage/ — Claude rechnet nie selbst.
Aus dem Text extrahierte Werte (Bescheiddatum, Steuernummer-Muster
\d{2,3}/\d{3}/\d{4,5}) laufen durchs Provenienz-Gate
(core/verify/provenienz.py, P3) gegen den Quelltext der Mail, bevor sie
in den Report übernommen werden — nicht belegte Werte werden verworfen,
nie stillschweigend übernommen.
Kein Mail-Server-Zugriff im Executor (P4). Claude holt Mails und
gesendete Mails über vorhandene M365-MCP-Server und übergibt sie als
JSON-Datei. Ziel für To-dos ist Outlook/Microsoft To Do über MCP — nicht
DATEV-Aufgaben (dafür gibt es keine API, siehe „Nicht abgedeckt").
Ablauf
Claude holt den Posteingang über MCP (M365-Connector) und baut die
Eingabedatei nach schema/README.md — Mails,
Mandantenliste (oder CSV-Pfad), optional offene Aufgaben und bereits
gesendete Mails.
Claude ruft den Executor auf (kein eigenes Rechnen):
python3 ${CLAUDE_PLUGIN_ROOT}/core/calc/triage/executor.py \
--input <anfrage.json> --output <report.json>
Claude ergänzt Titel/Klasse als Entwurf: der Executor liefert einen
groben, regelbasierten aufgabentitel_vorschlag (Kategorie + Betreff)
und eine Grobklassifikation. Claude formuliert daraus einen
verständlichen Aufgabentitel in natürlicher Sprache — als Entwurf,
nie als Behauptung über den Sachverhalt selbst (P3: kein Sachverhalt
wird gewürdigt, siehe stberg_einordnung).
Der Mensch bestätigt die Vorschlagsliste (Zuordnung, Klasse,
Priorität, Erledigt-Vorschläge) — nichts wird automatisch übernommen.
Erst nach Freigabe: To-dos über MCP in Outlook/Microsoft To Do
anlegen bzw. bestätigt-erledigte Aufgaben dort austragen. Dieser Skill
selbst legt nichts an und trägt nichts aus (P2).
Eingabe (Datei-Kontrakt, P2)
Vollständiges Schema und Beispiel: schema/README.md,
schema/beispiel-eingabe.json (8
synthetische Mails, keine echten Personen).
| Feld |
Pflicht |
Bedeutung |
mails |
ja |
Liste {id, datum, von, betreff, text, thread_id?, in_reply_to?, anhaenge?} |
mandanten |
ja |
Liste {name, kuerzel?, mandantennummer?, aliasse?} oder Pfad zu einer ;-getrennten CSV (Spalten name;kuerzel;mandantennummer;aliasse, Aliasse mit | getrennt), relativ zur Eingabedatei |
bundesland |
ja |
für die § 108 Abs. 3 AO-Verschiebung der Einspruchsfrist |
heute |
ja |
ISO-Datum, Bezugspunkt der Restfrist-Berechnung |
offene_aufgaben |
nein |
Liste {id, mandant, titel, angelegt, thread_id?, betreff?} |
gesendet |
nein |
Liste {datum, an, betreff, thread_id?, in_reply_to?} |
Fristindikatoren-Katalog
Substring-Suche (case-insensitiv) gegen
core/calc/triage/indikatoren.json
— längster/spezifischerer Begriff gewinnt, verhindert z. B., dass ein
Vorauszahlungsbescheid zusätzlich als generischer Steuerbescheid einsortiert
wird. Nur die Kategorie bescheid_einspruch erhält eine über
core/calc/ao_fristen berechnete Fälligkeit (Einspruchsfrist); alle
anderen Kategorien tragen nur ihre Standard-Dringlichkeit zur
Prioritäts-Matrix bei.
| Kategorie |
Beispiel-Begriffe |
Norm |
Standard-Dringlichkeit |
bescheid_einspruch |
„Steuerbescheid", „Bescheid" |
§ 355 Abs. 1 AO |
hoch (+ berechnete Fälligkeit) |
pruefungsanordnung |
„Prüfungsanordnung", „Außenprüfung" |
§ 196 AO |
normal |
anhoerung |
„Anhörung", „Gelegenheit zur Stellungnahme" |
§ 91 AO |
hoch |
mahnung_vollstreckung |
„Mahnung", „Vollstreckungsankündigung" |
§ 259 AO |
sofort |
vorauszahlungsbescheid |
„Vorauszahlungsbescheid" |
§ 37 Abs. 3 EStG |
normal |
erinnerung_schaetzung |
„Erinnerung zur Abgabe", „Schätzungsandrohung" |
§ 162 AO |
hoch |
fragebogen |
„Fragebogen zur steuerlichen Erfassung" |
§ 138 AO |
normal |
lohn_sozialversicherung_pruefung |
„Betriebsprüfung der Deutschen Rentenversicherung", „Sozialversicherungsprüfung" |
§ 28p SGB IV |
normal |
ust_nachschau |
„Umsatzsteuer-Nachschau", „Nachschau" |
§ 27b UStG |
sofort (unangekündigt) |
ust_sonderpruefung |
„Umsatzsteuer-Sonderprüfung", „USt-Sonderprüfung" |
§ 193 AO i. V. m. § 196 AO |
normal (wie Prüfungsanordnung) |
Output-Format
JSON-Report: vorschlaege[] (je Mail: mail_id, mandant,
zuordnung_stufe, klasse_vorschlag, indikatoren[], faelligkeit,
faelligkeit_unklar, prioritaet, erkannte_steuernummern, rechenkette,
aufgabentitel_vorschlag), erledigt_vorschlaege[] und unzugeordnet[].
Vollständiges Schema und Beispiel:
schema/README.md,
schema/beispiel-report.json. Exit-Codes:
0 Report erzeugt, 1 fachlicher Fehler/Schema-Verstoß, 2 Eingabefehler
(CONVENTIONS.md).
Nicht abgedeckt
- DATEV-Aufgaben — keine API, dieser Skill spricht nur MCP-Ziele
(Outlook/Microsoft To Do). Ein DATEV-Abgleich ist Kanzleisache.
- Automatisches Austragen — Erledigt-Vorschläge sind immer nur
Vorschläge mit Beleg; das Austragen (in DATEV oder Microsoft To Do)
bestätigt der Mensch.
- Bewertung des Bescheidinhalts — der Skill prüft nicht, ob ein
Einspruch inhaltlich sinnvoll ist, nur ob und wann die Frist läuft.
- Datumsextraktion bei Mehrdeutigkeit — mehrere/uneindeutige
Datumsangaben im Umfeld von „Bescheid vom"/„Datum" ergeben
[unklar],
nie ein geratenes Datum; Priorität wird dann zwingend auf hoch gesetzt.
- Fälligkeit für andere Kategorien als
bescheid_einspruch — z. B.
eine in einem Anhörungsschreiben genannte Frist wird nicht ausgerechnet,
nur als „hoch" markiert; die konkrete Frist liest die Kanzlei aus dem
Schreiben.
- Aktenzeichen-Extraktion — das Mandanten-Schema dieses Skills führt
kein Aktenzeichen-Feld (anders als
email-akten-zuordnung in
legal-ops-germany); die Zuordnung läuft über Domain/Mandantennummer/
Name/Alias/Betreff.
Quellenstand
Alle Normen des Fristindikatoren-Katalogs sind einzeln gegen
gesetze-im-internet.de geprüft,
geprueft_am: 2026-09-08 (siehe
indikatoren.json). Die
Einspruchsfrist-Berechnung selbst kommt unverändert aus
ao-fristenrechner — dortiger
Quellenstand und „Nicht abgedeckt" (Dreitagesfiktion vor 2025,
Fiktionstag-Verschiebung) gelten hier unverändert mit.
1---2name: aufgaben-triage3description: Priorisiert den Posteingang einer Steuerkanzlei: ordnet Mails deterministisch Mandanten zu (Domain/Mandantennummer/Name/Alias/Betreff, core/calc/matching S1-S4), erkennt Fristindikatoren (Steuerbescheid, Prüfungsanordnung, Anhörung, Mahnung/Vollstreckung, Vorauszahlungsbescheid, Schätzungsandrohung, Fragebogen, SV-Prüfung, USt-Nachschau, USt-Sonderprüfung), berechnet bei Steuerbescheiden die Einspruchsfrist über core/calc/ao_fristen und schlägt vor, welche offenen Aufgaben durch eine gesendete Antwort vermutlich erledigt sind. Triggert bei Posteingang priorisieren, Aufgaben-Triage, E-Mails sortieren, welche Mail ist dringend, offene Aufgaben abgleichen. Reine Organisationsvorschläge — keine Fristenkontrolle, kein Autoversand, kein automatisches Austragen.4---56# aufgaben-triage78> **Status: `beta`** — automatisierte Tests laufen grün in CI (`tests/`),9> noch keine händische Live-Abnahme durch den Maintainer. Keine10> Produktions-Garantie — Zweitkontrolle bleibt Pflicht (siehe11> [CONVENTIONS.md](https://github.com/eliasreiche/tax-ops-germany/blob/main/CONVENTIONS.md), Reifegrad-Leiter).1213## Zweck1415Aus dem Pilot-Call: eine Steuerkanzlei ohne Ticketsystem. Mails werden16„manche auch einfach nicht" bearbeitet, DATEV-Aufgaben werden händisch17priorisiert, Erledigtes wird vergessen auszutragen. Dieser Skill macht aus18dem Posteingang eine **Vorschlagsliste**:1920- **Wem gehört die Mail?** Mandanten-Zuordnung über Absender-Domain,21 Mandantennummer (beide wörtlich, `treffer`), Name/Alias gegen22 Absender-Name und Betreff (`core/calc/matching`, Stufen S1-S4). Kein23 Treffer über der Schwelle oder ein Gleichstand zwischen zwei Mandanten24 -> `unzugeordnet` (nie geraten).25- **Ist es eine Aufgabe, eine Info oder eine Rückfrage?** Regelbasierte26 Grobklassifikation (`aufgabe`/`info`/`rueckfrage`/`unklar`) — die27 Feinklassifikation und der Aufgabentitel in natürlicher Sprache sind28 Sache von Claude (Schritt 3 im Ablauf unten), der Executor liefert nur29 den regelbasierten Rohvorschlag.30- **Wie dringend?** Steuerliche Fristindikatoren (Katalog unten) plus —31 nur bei einem Steuerbescheid mit erkennbarem Bescheiddatum — die über32 [`core/calc/ao_fristen`](../../core/calc/ao_fristen/) berechnete33 Einspruchsfrist. Priorität = Matrix aus Indikator-Dringlichkeit und34 Restfrist: `sofort` (< 3 Werktage oder Vollstreckung), `hoch`, `normal`,35 `info` — als `RechenSchritt`-Kette mit Begründung.36 **Bewusste Annahme**: das Bescheiddatum wird als Datum der Aufgabe zur37 Post behandelt (§ 122 Abs. 2 Nr. 1 AO) — in der Praxis meist zutreffend,38 aber nicht zwingend; ein bestätigtes Zustelldatum geht vor.39- **Ist eine offene Aufgabe vermutlich erledigt?** Wenn eine gesendete Mail40 an denselben Mandanten per `thread_id`/`in_reply_to` oder normalisiertem41 Betreff (ohne AW:/Re:/WG:) nach dem Anlage-Datum der Aufgabe verknüpft42 ist — nur als Vorschlag mit Beleg (welche Mail), **kein automatisches43 Austragen**.4445**Deterministik-Grenze (P1/P3):** Zuordnung, Indikator-Erkennung,46Fälligkeitsberechnung und Priorität kommen vollständig aus dem Executor47[`core/calc/triage/`](../../core/calc/triage/) — Claude rechnet nie selbst.48Aus dem Text extrahierte Werte (Bescheiddatum, Steuernummer-Muster49`\d{2,3}/\d{3}/\d{4,5}`) laufen durchs Provenienz-Gate50(`core/verify/provenienz.py`, P3) gegen den Quelltext der Mail, bevor sie51in den Report übernommen werden — nicht belegte Werte werden verworfen,52nie stillschweigend übernommen.5354**Kein Mail-Server-Zugriff im Executor (P4).** Claude holt Mails und55gesendete Mails über vorhandene M365-MCP-Server und übergibt sie als56JSON-Datei. Ziel für To-dos ist Outlook/Microsoft To Do über MCP — **nicht**57DATEV-Aufgaben (dafür gibt es keine API, siehe „Nicht abgedeckt").5859## Ablauf60611. **Claude holt den Posteingang über MCP** (M365-Connector) und baut die62 Eingabedatei nach [`schema/README.md`](schema/README.md) — Mails,63 Mandantenliste (oder CSV-Pfad), optional offene Aufgaben und bereits64 gesendete Mails.652. **Claude ruft den Executor auf** (kein eigenes Rechnen):6667 ```bash68 python3 ${CLAUDE_PLUGIN_ROOT}/core/calc/triage/executor.py \69 --input <anfrage.json> --output <report.json>70 ```71723. **Claude ergänzt Titel/Klasse als Entwurf**: der Executor liefert einen73 groben, regelbasierten `aufgabentitel_vorschlag` (Kategorie + Betreff)74 und eine Grobklassifikation. Claude formuliert daraus einen75 verständlichen Aufgabentitel in natürlicher Sprache — als **Entwurf**,76 nie als Behauptung über den Sachverhalt selbst (P3: kein Sachverhalt77 wird gewürdigt, siehe `stberg_einordnung`).784. **Der Mensch bestätigt** die Vorschlagsliste (Zuordnung, Klasse,79 Priorität, Erledigt-Vorschläge) — nichts wird automatisch übernommen.805. **Erst nach Freigabe**: To-dos über MCP in Outlook/Microsoft To Do81 anlegen bzw. bestätigt-erledigte Aufgaben dort austragen. Dieser Skill82 selbst legt nichts an und trägt nichts aus (P2).8384## Eingabe (Datei-Kontrakt, P2)8586Vollständiges Schema und Beispiel: [`schema/README.md`](schema/README.md),87[`schema/beispiel-eingabe.json`](schema/beispiel-eingabe.json) (888synthetische Mails, keine echten Personen).8990| Feld | Pflicht | Bedeutung |91|---|---|---|92| `mails` | ja | Liste `{id, datum, von, betreff, text, thread_id?, in_reply_to?, anhaenge?}` |93| `mandanten` | ja | Liste `{name, kuerzel?, mandantennummer?, aliasse?}` **oder** Pfad zu einer `;`-getrennten CSV (Spalten `name;kuerzel;mandantennummer;aliasse`, Aliasse mit `\|` getrennt), relativ zur Eingabedatei |94| `bundesland` | ja | für die § 108 Abs. 3 AO-Verschiebung der Einspruchsfrist |95| `heute` | ja | ISO-Datum, Bezugspunkt der Restfrist-Berechnung |96| `offene_aufgaben` | nein | Liste `{id, mandant, titel, angelegt, thread_id?, betreff?}` |97| `gesendet` | nein | Liste `{datum, an, betreff, thread_id?, in_reply_to?}` |9899## Fristindikatoren-Katalog100101Substring-Suche (case-insensitiv) gegen102[`core/calc/triage/indikatoren.json`](../../core/calc/triage/indikatoren.json)103— längster/spezifischerer Begriff gewinnt, verhindert z. B., dass ein104Vorauszahlungsbescheid zusätzlich als generischer Steuerbescheid einsortiert105wird. Nur die Kategorie `bescheid_einspruch` erhält eine über106`core/calc/ao_fristen` berechnete Fälligkeit (Einspruchsfrist); alle107anderen Kategorien tragen nur ihre Standard-Dringlichkeit zur108Prioritäts-Matrix bei.109110| Kategorie | Beispiel-Begriffe | Norm | Standard-Dringlichkeit |111|---|---|---|---|112| `bescheid_einspruch` | „Steuerbescheid", „Bescheid" | [§ 355 Abs. 1 AO](https://www.gesetze-im-internet.de/ao_1977/__355.html) | hoch (+ berechnete Fälligkeit) |113| `pruefungsanordnung` | „Prüfungsanordnung", „Außenprüfung" | [§ 196 AO](https://www.gesetze-im-internet.de/ao_1977/__196.html) | normal |114| `anhoerung` | „Anhörung", „Gelegenheit zur Stellungnahme" | [§ 91 AO](https://www.gesetze-im-internet.de/ao_1977/__91.html) | hoch |115| `mahnung_vollstreckung` | „Mahnung", „Vollstreckungsankündigung" | [§ 259 AO](https://www.gesetze-im-internet.de/ao_1977/__259.html) | sofort |116| `vorauszahlungsbescheid` | „Vorauszahlungsbescheid" | [§ 37 Abs. 3 EStG](https://www.gesetze-im-internet.de/estg/__37.html) | normal |117| `erinnerung_schaetzung` | „Erinnerung zur Abgabe", „Schätzungsandrohung" | [§ 162 AO](https://www.gesetze-im-internet.de/ao_1977/__162.html) | hoch |118| `fragebogen` | „Fragebogen zur steuerlichen Erfassung" | [§ 138 AO](https://www.gesetze-im-internet.de/ao_1977/__138.html) | normal |119| `lohn_sozialversicherung_pruefung` | „Betriebsprüfung der Deutschen Rentenversicherung", „Sozialversicherungsprüfung" | [§ 28p SGB IV](https://www.gesetze-im-internet.de/sgb_4/__28p.html) | normal |120| `ust_nachschau` | „Umsatzsteuer-Nachschau", „Nachschau" | [§ 27b UStG](https://www.gesetze-im-internet.de/ustg_1980/__27b.html) | sofort (unangekündigt) |121| `ust_sonderpruefung` | „Umsatzsteuer-Sonderprüfung", „USt-Sonderprüfung" | [§ 193 AO](https://www.gesetze-im-internet.de/ao_1977/__193.html) i. V. m. [§ 196 AO](https://www.gesetze-im-internet.de/ao_1977/__196.html) | normal (wie Prüfungsanordnung) |122123## Output-Format124125JSON-Report: `vorschlaege[]` (je Mail: `mail_id`, `mandant`,126`zuordnung_stufe`, `klasse_vorschlag`, `indikatoren[]`, `faelligkeit`,127`faelligkeit_unklar`, `prioritaet`, `erkannte_steuernummern`, `rechenkette`,128`aufgabentitel_vorschlag`), `erledigt_vorschlaege[]` und `unzugeordnet[]`.129Vollständiges Schema und Beispiel:130[`schema/README.md`](schema/README.md),131[`schema/beispiel-report.json`](schema/beispiel-report.json). Exit-Codes:1320 Report erzeugt, 1 fachlicher Fehler/Schema-Verstoß, 2 Eingabefehler133(CONVENTIONS.md).134135## Nicht abgedeckt136137- **DATEV-Aufgaben** — keine API, dieser Skill spricht nur MCP-Ziele138 (Outlook/Microsoft To Do). Ein DATEV-Abgleich ist Kanzleisache.139- **Automatisches Austragen** — Erledigt-Vorschläge sind immer nur140 Vorschläge mit Beleg; das Austragen (in DATEV oder Microsoft To Do)141 bestätigt der Mensch.142- **Bewertung des Bescheidinhalts** — der Skill prüft nicht, ob ein143 Einspruch inhaltlich sinnvoll ist, nur ob und wann die Frist läuft.144- **Datumsextraktion bei Mehrdeutigkeit** — mehrere/uneindeutige145 Datumsangaben im Umfeld von „Bescheid vom"/„Datum" ergeben `[unklar]`,146 nie ein geratenes Datum; Priorität wird dann zwingend auf `hoch` gesetzt.147- **Fälligkeit für andere Kategorien als `bescheid_einspruch`** — z. B.148 eine in einem Anhörungsschreiben genannte Frist wird nicht ausgerechnet,149 nur als „hoch" markiert; die konkrete Frist liest die Kanzlei aus dem150 Schreiben.151- **Aktenzeichen-Extraktion** — das Mandanten-Schema dieses Skills führt152 kein Aktenzeichen-Feld (anders als `email-akten-zuordnung` in153 legal-ops-germany); die Zuordnung läuft über Domain/Mandantennummer/154 Name/Alias/Betreff.155156## Quellenstand157158Alle Normen des Fristindikatoren-Katalogs sind einzeln gegen159[gesetze-im-internet.de](https://www.gesetze-im-internet.de/) geprüft,160`geprueft_am: 2026-09-08` (siehe161[`indikatoren.json`](../../core/calc/triage/indikatoren.json)). Die162Einspruchsfrist-Berechnung selbst kommt unverändert aus163[`ao-fristenrechner`](../ao-fristenrechner/SKILL.md) — dortiger164Quellenstand und „Nicht abgedeckt" (Dreitagesfiktion vor 2025,165Fiktionstag-Verschiebung) gelten hier unverändert mit.