33[ ![ CI] ( https://github.com/Mavengence/einvoice-mcp/actions/workflows/ci.yml/badge.svg )] ( https://github.com/Mavengence/einvoice-mcp/actions/workflows/ci.yml )
44[ ![ Python 3.11+] ( https://img.shields.io/badge/python-3.11%2B-blue.svg )] ( https://www.python.org/downloads/ )
55[ ![ License: MIT] ( https://img.shields.io/badge/License-MIT-green.svg )] ( LICENSE )
6- [ ![ Tests] ( https://img.shields.io/badge/tests-543 %20passed-brightgreen.svg )] ( #compliance-proof )
6+ [ ![ Tests] ( https://img.shields.io/badge/tests-617 %20passed-brightgreen.svg )] ( #compliance-proof )
77[ ![ Coverage] ( https://img.shields.io/badge/coverage-100%25-brightgreen.svg )] ( #module-coverage )
88
99** MCP-Server for German e-invoice compliance — XRechnung 3.0 & ZUGFeRD 2.x**
@@ -20,7 +20,7 @@ Germany mandated e-invoice reception for B2B as of January 2025 (BMF 2024-11-15)
2020
2121## Compliance Proof
2222
23- ** 543 tests | 100% coverage (2106 stmts) | 0 failures | lint clean (ruff + mypy strict)**
23+ ** 617 tests | 100% coverage (2106 stmts) | 0 failures | lint clean (ruff + mypy strict)**
2424
2525* Run ` make test ` to verify.*
2626
@@ -254,25 +254,26 @@ Every mandatory Business Term is tested in generated XML output:
254254
255255### Module Coverage
256256
257- | Module | Stmts | Miss | Coverage |
258- | --------| -------| ------| ----------|
259- | ` config.py ` | 16 | 0 | ** 100%** |
260- | ` errors.py ` | 36 | 0 | ** 100%** |
261- | ` models.py ` | 314 | 0 | ** 100%** |
262- | ` prompts/guides.py ` | 20 | 0 | ** 100%** |
263- | ` resources/schemas.py ` | 12 | 0 | ** 100%** |
264- | ` resources/reference_data.py ` | 11 | 0 | ** 100%** |
265- | ` resources/compliance_data.py ` | 9 | 0 | ** 100%** |
266- | ` services/invoice_builder.py ` | 335 | 0 | ** 100%** |
267- | ` services/invoice_data_builder.py ` | 37 | 0 | ** 100%** |
268- | ` services/kosit.py ` | 80 | 0 | ** 100%** |
269- | ` services/pdf_generator.py ` | 182 | 0 | ** 100%** |
270- | ` services/xml_parser.py ` | 709 | 0 | ** 100%** |
271- | ` tools/compliance.py ` | 217 | 0 | ** 100%** |
272- | ` tools/generate.py ` | 50 | 0 | ** 100%** |
273- | ` tools/parse.py ` | 39 | 0 | ** 100%** |
274- | ` tools/validate.py ` | 33 | 0 | ** 100%** |
275- | ** TOTAL** | ** 2106** | ** 0** | ** 100%** |
257+ | Module | Lines | Description |
258+ | --------| -------| -------------|
259+ | ` config.py ` | 16 | Pydantic settings |
260+ | ` errors.py ` | 36 | Custom exceptions |
261+ | ` models/ ` | 600+ | Pydantic models (invoice, party, line items, results, enums) |
262+ | ` prompts/guides.py ` | 633 | 14 German tax scenario prompts |
263+ | ` prompts/guides_advanced.py ` | 241 | 4 advanced prompts (EU trade, recurring invoices) |
264+ | ` resources/ ` | 600+ | 17 resources (schemas, reference codes, compliance) |
265+ | ` services/invoice_builder.py ` | 576 | CII XML generation via drafthorse |
266+ | ` services/invoice_data_builder.py ` | 320 | Flat parameter builder |
267+ | ` services/cii_extractors.py ` | 457 | Party, item, attribute extraction |
268+ | ` services/kosit.py ` | 80 | KoSIT HTTP client |
269+ | ` services/pdf_generator.py ` | 182 | Visual PDF + factur-x embed |
270+ | ` services/xml_parser.py ` | 720 | CII/ZUGFeRD XML parser |
271+ | ` tools/compliance.py ` | 217 | Compliance orchestration |
272+ | ` tools/compliance_checks.py ` | 767 | BR-DE/BR-CO field checks |
273+ | ` tools/arithmetic_checks.py ` | 113 | BR-CO-10/14/15/16 math checks |
274+ | ` tools/generate.py ` | 50 | Generate tools |
275+ | ` tools/parse.py ` | 39 | Parse tool |
276+ | ` tools/validate.py ` | 33 | Validation tools |
276277
277278* ` server.py ` excluded — FastMCP Context cannot be unit-tested; helpers tested in ` test_server_helpers.py ` .*
278279
@@ -323,6 +324,14 @@ Every mandatory Business Term is tested in generated XML output:
323324| ` typecode_entscheidungshilfe ` | Entscheidungshilfe: Welcher TypeCode für welchen Anlass? |
324325| ` b2b_pflicht_2027 ` | Checkliste: B2B E-Rechnungspflicht ab 2027 vorbereiten |
325326| ` steuerprüfung_checkliste ` | E-Rechnungen für Betriebsprüfung vorbereiten (GoBD, §147 AO) |
327+ | ` kleinunternehmer_guide ` | Kleinunternehmer (§19 UStG) — E-Rechnung ohne Umsatzsteuer |
328+ | ` bauleistungen_13b_guide ` | Bauleistungen / §13b UStG — Reverse Charge im Baugewerbe |
329+ | ` differenzbesteuerung_25a_guide ` | Differenzbesteuerung (§25a UStG) für Gebrauchtwarenhändler |
330+ | ` stornobuchung_workflow ` | Stornierung: 381 vs 384 vs neue 380 — Entscheidungsbaum |
331+ | ` reiseleistungen_25_guide ` | Reiseleistungen (§25 UStG) — Margenbesteuerung |
332+ | ` innergemeinschaftliche_lieferung_guide ` | Innergemeinschaftliche Lieferung (§4 Nr. 1b / §6a UStG) |
333+ | ` dauerrechnung_guide ` | Dauerrechnung / Monatsrechnung für wiederkehrende Leistungen |
334+ | ` steuernummer_vs_ustidnr_guide ` | Steuernummer vs. USt-IdNr. — Entscheidungshilfe (BR-DE-26) |
326335
327336---
328337
0 commit comments