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-617 %20passed-brightgreen.svg )] ( #compliance-proof )
6+ [ ![ Tests] ( https://img.shields.io/badge/tests-646 %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- ** 617 tests | 100% coverage (2106 stmts) | 0 failures | lint clean (ruff + mypy strict)**
23+ ** 646 tests | 100% coverage (2106 stmts) | 0 failures | lint clean (ruff + mypy strict)**
2424
2525* Run ` make test ` to verify.*
2626
@@ -126,6 +126,7 @@ Every mandatory Business Term is tested in generated XML output:
126126| BR-E-10 | Exemption reason required for TaxCategory E | ` test_compliance_missing_exemption_reason ` | PASS |
127127| BR-DE-24 | SEPA DD: mandate (BT-89) + buyer IBAN (BT-91) | ` test_dd_missing_mandate_and_iban ` | PASS |
128128| BR-DE-15 | Payment terms (BT-20) required for XRechnung | ` test_payment_terms_missing ` | PASS |
129+ | BR-DE-20 | Max one payment instruction type (no mix CT+DD) | ` test_mixed_ct_and_dd_flagged ` | PASS |
129130| CC-BT-87 | Credit card PAN required when code=48 | ` test_credit_card_missing_pan ` | PASS |
130131| REP-BT-63 | Tax rep VAT ID required when BG-11 present | ` test_tax_rep_without_tax_id ` | PASS |
131132| IBAN | IBAN format validation (ISO 13616) | ` test_invalid_iban_* ` | PASS |
@@ -260,16 +261,16 @@ Every mandatory Business Term is tested in generated XML output:
260261| ` errors.py ` | 36 | Custom exceptions |
261262| ` models/ ` | 600+ | Pydantic models (invoice, party, line items, results, enums) |
262263| ` 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) |
264+ | ` prompts/guides_advanced.py ` | 511 | 8 advanced prompts (EU trade, recurring, Schlussrechnung, Proforma, Drittland, Gutschrift ) |
265+ | ` resources/ ` | 830 + | 19 resources (schemas, reference codes, compliance, Leitweg-ID, tax decision tree ) |
265266| ` services/invoice_builder.py ` | 576 | CII XML generation via drafthorse |
266267| ` services/invoice_data_builder.py ` | 320 | Flat parameter builder |
267268| ` services/cii_extractors.py ` | 457 | Party, item, attribute extraction |
268269| ` services/kosit.py ` | 80 | KoSIT HTTP client |
269270| ` services/pdf_generator.py ` | 182 | Visual PDF + factur-x embed |
270271| ` services/xml_parser.py ` | 720 | CII/ZUGFeRD XML parser |
271272| ` tools/compliance.py ` | 217 | Compliance orchestration |
272- | ` tools/compliance_checks.py ` | 767 | BR-DE/BR-CO field checks |
273+ | ` tools/compliance_checks.py ` | 795 | BR-DE/BR-CO field checks |
273274| ` tools/arithmetic_checks.py ` | 113 | BR-CO-10/14/15/16 math checks |
274275| ` tools/generate.py ` | 50 | Generate tools |
275276| ` tools/parse.py ` | 39 | Parse tool |
@@ -309,6 +310,8 @@ Every mandatory Business Term is tested in generated XML output:
309310| ` einvoice://reference/br-de-rules ` | Deutsche Geschäftsregeln (BR-DE-1..24) mit Lösungshinweisen |
310311| ` einvoice://reference/skr04-mapping ` | SKR04-Kontenzuordnung für häufige Rechnungsarten (DATEV) |
311312| ` einvoice://reference/credit-note-reasons ` | Gutschrift-Gründe und Korrektur-Codes mit Empfehlungen |
313+ | ` einvoice://reference/leitweg-id-format ` | Leitweg-ID Aufbau (Grobadresse-Feinadresse-Prüfziffer), Regex, Beispiele |
314+ | ` einvoice://reference/tax-category-decision-tree ` | Steuerkategorie-Entscheidungsbaum (S/Z/E/AE/K/G/O/L/M) mit Szenarien |
312315
313316### MCP Prompts
314317
@@ -332,6 +335,10 @@ Every mandatory Business Term is tested in generated XML output:
332335| ` innergemeinschaftliche_lieferung_guide ` | Innergemeinschaftliche Lieferung (§4 Nr. 1b / §6a UStG) |
333336| ` dauerrechnung_guide ` | Dauerrechnung / Monatsrechnung für wiederkehrende Leistungen |
334337| ` steuernummer_vs_ustidnr_guide ` | Steuernummer vs. USt-IdNr. — Entscheidungshilfe (BR-DE-26) |
338+ | ` schlussrechnung_nach_abschlag ` | Schlussrechnung nach Abschlagszahlungen (prepaid_amount, BT-113) |
339+ | ` proforma_rechnung_guide ` | Proforma-Rechnung — rechtliche Einordnung, E-Rechnungs-Behandlung |
340+ | ` drittlandlieferung_guide ` | Export außerhalb EU (§4 Nr. 1a UStG, Steuerkategorie G, Incoterms) |
341+ | ` gutschriftverfahren_389_guide ` | Gutschriftverfahren / Self-Billing (TypeCode 389, §14 Abs. 2) |
335342
336343---
337344
@@ -681,6 +688,7 @@ pytest -m integration
681688- ** §4 Nr. 1b UStG** — Intra-community supply: buyer VAT ID required, 0% tax rate
682689- ** §19 UStG** — Kleinunternehmerregelung: exemption note advisory for TaxCategory E
683690- ** BG-19** — SEPA direct debit (PaymentMeansCode = 59, buyer IBAN, mandate reference)
691+ - ** BR-DE-20** — Max one payment instruction type (no mixing credit transfer + direct debit)
684692- ** BR-DE-24** — SEPA direct debit: mandate reference + buyer IBAN required
685693- ** BR-E-10** — VAT exemption reason (BT-120) required for TaxCategory E
686694- ** §4 Nr. 1a UStG** — Export outside EU (TaxCategory G): 0% tax rate required
0 commit comments