Skip to content
Back to skills

Honorar Mahnwesen

ASecurity

Wertet offene Posten (OPOS-CSV oder EXTF-Buchungsstapel) deterministisch aus — offener Restbetrag, Tage seit Fälligkeit, konfigurierbare Mahnstufen, Priorisierung (Betrag × Alter) — und draftet daraus interne Zahlungserinnerungen/Mahnungen der Kanzlei an eigene Mandanten. Triggert bei Mahnwesen, offene Rechnungen, Zahlungserinnerung, überfällige Forderungen, offene Posten, OPOS.

  • 6 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 23, 2026
ai-agentspythongobashaws

Works with

  • cli

Security analysis

A100/100

Pro scans all 10 files and shows the line behind each finding

Scanned September 23, 2026

npx -y skills add eliasreiche/legal-ops-germany --skill honorar-mahnwesen --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Honorar Mahnwesen?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Honorar Mahnwesen
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/eliasreiche-honorar-mahnwesen/badge)](https://www.skillsdirectory.com/skills/eliasreiche-honorar-mahnwesen)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: honorar-mahnwesen
description: "Wertet offene Posten (OPOS-CSV oder EXTF-Buchungsstapel) deterministisch aus — offener Restbetrag, Tage seit Fälligkeit, konfigurierbare Mahnstufen, Priorisierung (Betrag × Alter) — und draftet daraus interne Zahlungserinnerungen/Mahnungen der Kanzlei an eigene Mandanten. Triggert bei Mahnwesen, offene Rechnungen, Zahlungserinnerung, überfällige Forderungen, offene Posten, OPOS."
status: beta
welle: 4
bereich: zeit-abrechnung
rdg_einordnung: "Internes Forderungsmanagement der Kanzlei in eigener Sache (eigene Honorarforderungen gegen eigene Mandanten) — keine Inkasso-Dienstleistung für Dritte und keine Rechtsdienstleistung i. S. d. § 2 RDG. Der Skill trifft keine rechtliche Verzugsentscheidung (§ 286 BGB) und berechnet keine Verzugszinsen (§ 288 BGB); er ordnet nur kalendarisch nach Tagen seit Fälligkeit ein. Ob, wann und wie gemahnt wird, entscheidet die Kanzlei."
daten_hinweis: "Zahlungsdaten von Mandanten (Rechnungsnummern, Beträge, ggf. Namen/Aktenzeichen, § 203 StGB / DSGVO). Verarbeitung nur innerhalb des dokumentierten Speicher-Perimeters (D10: Kanzleisoftware, lokal verschlüsseltes Kanzlei-Gerät oder der ohnehin die Mandantendaten hostende/das Modell betreibende Server, z. B. AWS Bedrock Frankfurt) — kein neuer Speicherort. Der Executor arbeitet rein lokal, ohne Netzwerkzugriff."
haftung: "Zweitkontrolle, zwingend: Beträge, offene Restbeträge, Fälligkeitstage und Mahnstufen stammen aus dem Executor; jeder Entwurf ist vor Versand durch die Kanzlei zu prüfen (insb. ob die Forderung besteht, Fälligkeit/Verzug rechtlich vorliegen und der richtige Mandant adressiert ist). Verzugszinsen (§ 288 BGB) und die rechtliche Verzugsfeststellung (§ 286 BGB) sind bewusst NICHT enthalten und bleiben Kanzleisache. Versand entscheidet ausschließlich die Kanzlei."
---

# honorar-mahnwesen

> **Status: `beta`** — automatisierte Tests (Parser-Round-Trip gegen den
> EXTF-Writer, OPOS-Auswertung, CLI-Reject-Matrix) laufen grün in CI. Noch
> **nicht** händisch abgenommen; `status: getestet` vergibt allein der
> Maintainer nach einer Live-Abnahme (Reifegrad-Leiter, CONVENTIONS.md).

## Zweck

Wertet offene Honorarforderungen der Kanzlei aus und bereitet interne
Mahn-/Erinnerungsschreiben vor. Der deterministische Kern
[`core/calc/opos/`](../../core/calc/opos/README.md) berechnet je Posten:

- **offener Restbetrag** = Rechnungsbetrag − bereits gezahlt (`Decimal`, nie `float`),
- **Tage seit Fälligkeit** = Stichtag − Fälligkeitsdatum (reine Kalenderdifferenz),
- **Mahnstufe** aus konfigurierbaren Tagesschwellen (Default: Erinnerung ab
  Fälligkeit, 1. Mahnung ab 14 Tagen, 2. Mahnung ab 30 Tagen),
- **Priorität** = offener Restbetrag × Tage seit Fälligkeit (Sortierung der Arbeitsliste).

**Berufsrechts-Grenze (RDG):** internes Forderungsmanagement **in eigener
Sache** — kein Inkasso für Dritte, keine Rechtsdienstleistung. Der Skill sagt
nicht, ob rechtlich Verzug eingetreten ist; „Tage seit Fälligkeit" ist eine
kalendarische Größe, keine Verzugsfeststellung (§ 286 BGB).

**Bewusst zurückgestellt (v1):**
- **Verzugszinsen (§ 288 BGB)** — bräuchten gepflegte Basiszinssatz-Stammdaten
  (Halbjahres-Sätze der Deutschen Bundesbank); erscheinen im Report als
  **Hinweis-Lücke**, nie als Zahl.
- **Rechtliche Verzugsfeststellung (§ 286 BGB)** — u. a. verbraucherabhängig
  (Verzug ohne Mahnung erst 30 Tage nach Fälligkeit *und* Hinweis bei
  Verbrauchern, § 286 Abs. 3 BGB); bleibt ausdrücklich Kanzleisache.

## Eingaben (Datei-Kontrakt, P2)

Genau **eine** Quelle je Lauf (vollständiges Schema: [`schema/README.md`](schema/README.md)):

| Quelle | Flag | Format | Charakter |
|---|---|---|---|
| OPOS-Liste | `--opos-csv` | `.csv` (Semikolon, Komma-Dezimal, Kopfzeile) | **Normalweg und präzise Primärquelle** — je Zeile ein Posten mit Fälligkeitsdatum |
| Buchungsstapel | `--extf` | DATEV-EXTF (Format 700, Kategorie 21) | **Sonderweg, nur bei DATEV-Anbindung** — vereinfachte Belegfeld-1-Aggregation, kein Fälligkeitsdatum im EXTF |

> **EXTF ist der Sonderweg, keine gleichwertige Zweitquelle.** EXTF-Buchungs-
> stapel entstehen nur dort, wo eine DATEV-Anbindung besteht (Export aus DATEV
> bzw. vom Steuerberater). Kleine Kanzleien ohne DATEV haben so eine Datei
> schlicht nicht — für sie ist die OPOS-/Debitorenliste als CSV der reguläre
> Weg. Liegt kein echtes EXTF vor: keins nachbauen, sondern `--opos-csv`
> nutzen.

Zusätzlich immer `--stichtag JJJJ-MM-TT` (Bezugstag für „Tage seit
Fälligkeit" — aus der Eingabe, **nie** aus der Wall-Clock, damit gleiche
Eingabe denselben Report liefert). Optional `--mahnstufen-config <config.json>`
(Tagesschwellen überschreiben) und `--zahlungsziel-tage <N>` (nur `--extf`,
Default 14).

Die EXTF-Quelle liest der strikte Parser
[`core/calc/extf/parser.py`](../../core/calc/extf/parser.py) (das getestete
Gegenstück zum `datev-export`-Writer). Fehlende Angaben (Mandant/Fälligkeit
im EXTF, Buchungen ohne Belegfeld 1) werden als **Lücke** bzw. unter
`nicht_zuordenbar` ausgewiesen — nie geraten.

## Ablauf

1. **Claude ruft den Executor auf** (kein eigenes Rechnen/Formatieren):

   ```bash
   # Präzise Quelle (OPOS-CSV):
   python3 ${CLAUDE_PLUGIN_ROOT}/skills/honorar-mahnwesen/executor.py \
     --opos-csv <posten.csv> --stichtag 2026-07-16 \
     --output <report.json>

   # Ergänzende Quelle (EXTF-Buchungsstapel):
   python3 ${CLAUDE_PLUGIN_ROOT}/skills/honorar-mahnwesen/executor.py \
     --extf <stapel.csv> --stichtag 2026-07-16 --zahlungsziel-tage 14 \
     --output <report.json>
   ```

2. **Bei Exit 0**: Claude liest den JSON-Report und stellt die nach Priorität
   sortierte Arbeitsliste zusammen (Rechnungsnummer, Mandant, offener Rest,
   Tage seit Fälligkeit, Mahnstufe) — und weist **immer** auf die
   Zurückstellungen hin: keine Verzugszinsen (§ 288 BGB), keine
   Verzugsfeststellung (§ 286 BGB), Versand ist Kanzlei-Entscheidung.
3. **Schreiben-Entwürfe (optional):** Auf Wunsch draftet Claude je Posten eine
   **Zahlungserinnerung/Mahnung** — ausschließlich aus Executor-Werten. Jeder
   Betrag, jedes Datum und jede „Tage seit Fälligkeit"-Angabe im Entwurf ist
   ein Executor-Ergebnis; Claude erfindet keine Beträge/Fristen und trägt
   keine Verzugszinsen ein. Bausteine siehe unten. Der Entwurf geht nie ohne
   Kanzlei-Freigabe hinaus.
4. **Bei Exit 2** (Eingabe-/Formatfehler): Claude gibt die Fehlermeldung
   unverändert wieder und korrigiert die Eingabe bzw. fragt nach — er rät
   keinen Ersatz-Betrag, kein Ersatz-Datum und erzeugt keine Teil-Datei.

## Output-Format

Ein JSON-Report aus [`executor.py`](executor.py) / [`core/calc/opos/rechner.py`](../../core/calc/opos/rechner.py) (P3):

- `zusammenfassung` (Anzahl offen, Summe offen, ausgeglichen, nicht zuordenbar),
- `offene_posten` — nach Priorität absteigend; je Posten offener Rest, Tage
  seit Fälligkeit, Mahnstufe, Priorität, `verzugszins_hinweis` (immer Lücke,
  nie Zahl), `hinweise[]`,
- `ausgeglichene_posten`, `nicht_zuordenbar` (EXTF-Buchungen ohne Belegfeld 1),
- alle Zahlen als Decimal-Strings (keine float-Rundung).

Beispiel-Eingabe: [`schema/beispiel-opos.csv`](schema/beispiel-opos.csv).
Deterministik-Grenze (P3): jeder Zahlen-/Datums-/Geldwert stammt aus dem
Executor und ist als solcher markiert (`meta.deterministik`).

## Schreiben-Bausteine (Entwurf, kein Template-Engine)

Claude setzt den Entwurf aus diesen Bausteinen zusammen und füllt **nur**
Executor-Werte ein (Platzhalter in `{}`):

- **Zahlungserinnerung** (freundlich): „Sehr geehrte/r {mandant}, zu unserer
  Rechnung {rechnungsnummer} vom {rechnungsdatum} ist ein Betrag von
  {offener_rest} € offen (fällig seit {faelligkeitsdatum}, {tage} Tage). Wir
  bitten um Ausgleich bis {…, von der Kanzlei zu setzen}."
- **1./2. Mahnung** (bestimmter): zusätzlich Verweis auf die vorherige
  Erinnerung; **keine** Zinsforderung durch den Skill (§ 288 BGB bleibt
  Kanzleisache), **keine** Verzugsbehauptung.

Jeder Norm-Verweis im Entwurf trägt einen 3-Zustands-Marker
(CONVENTIONS.md): § 286 BGB ⚠️ (nicht prüfbar — der Executor prüft keinen
Verzug), § 288 BGB ⚠️ (bewusst nicht berechnet).

## Grenzen (bewusst)

- **Keine Verzugszinsen** (§ 288 BGB ⚠️) und **keine** rechtliche
  Verzugsfeststellung (§ 286 BGB ⚠️) — nur „Tage seit Fälligkeit".
- **EXTF ist Sonderweg und vereinfacht** — er setzt eine DATEV-Anbindung
  voraus (ohne die es keinen Buchungsstapel gibt) und rechnet mit
  Belegfeld-1-Saldo und Zahlungsziel-Annahme statt echtem Fälligkeitsdatum.
  Normalweg und präzise Quelle ist die OPOS-CSV.
- **Kein Inkasso, keine Rechtsdienstleistung** — nur eigenes
  Forderungsmanagement der Kanzlei.
- **Kein Versand** — der Skill erzeugt Entwürfe; Mahnung/Versand entscheidet
  die Kanzlei.
- **`status: getestet` erst nach Live-Abnahme** durch den Maintainer — nie
  durch automatisierte Tests allein.

Files in this skill

  • SKILL.md8.8 KB
  • executor.py5.2 KB
  • schema/README.md5.8 KB
  • schema/beispiel-opos.csv370 B
  • tests/fixtures/beispiel-buchungsstapel.csv801 B
  • tests/fixtures/beispiel-opos.csv370 B
  • tests/test_honorar_mahnwesen_binaerguard.py1.1 KB
  • tests/test_honorar_mahnwesen_extf_parser.py9.7 KB
  • tests/test_honorar_mahnwesen_opos.py12.5 KB
  • tests/test_honorar_mahnwesen_opos_csv_binaerguard.py1.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.