Files
StefanandClaude Opus 4.8 00e72c96d4
Playwright Tests / test (pull_request) Has been cancelled
Emit invoices as validated ZUGFeRD (DATEV) and XRechnung (B2G)
Completes the eRechnung output path: finalized invoices are emitted as a
ZUGFeRD/Factur-X EN 16931 hybrid (DATEV) or, when a Leitweg-ID is present, as
XRechnung 3.0 for B2G. Both are externally validated as ACCEPTED (0 errors) and
PDF/A-3B COMPLIANT against the ProcessWeb eInvoice service.

- ERechnungMapper: FdsInvoiceData -> EN 16931 model. Seller master data now from
  Fuchs:ERechnung:Seller config (VAT id BT-31, Steuernummer BT-32, optional
  Handelsregister BT-30, IBAN/BIC, contact). Adds payment terms BT-20/BT-9
  (BR-CO-25), buyer VAT id, §13b reverse charge, and the service date/period
  (BT-72 / BG-14) parsed from ProvisionPeriod (BR-DE-TMP-32). B2G -> XRechnung
  profile with the required electronic addresses/contact.
- ERechnungValidator: client for POST /validatepdf (EN 16931 XML + PDF/A-3 in
  one call). A pure "scenario not matched" with zero errors is not treated as a
  hard failure; real errors optionally withhold the hybrid (FailOnError).
- ERechnungSettings: seller + validation config; wired in Program.cs; ServiceUrl
  in appsettings.
- Online editor: structured German-only dialogs for the recipient address
  (incl. Leitweg-ID) and the service date/period (single date or range).
- Bumps the eRechnungLib submodule to the CII rsm-namespace / PDF-A subtype fix.

Fuchs.Tests 514/514, eRechnungLib 97/97.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 00:05:24 +02:00
..

Concepts

This folder holds living design write-ups of how a subsystem currently works: its moving parts, data flow, and how they fit together. Unlike ../Decisions, concept docs are not immutable — keep them in sync with the implementation as it evolves.

What belongs here

"How does the notification pipeline work end to end" is a concept doc. "Why did we choose SignalR over polling for it" is a decision. A single feature area typically has one concept doc and may reference several decisions that shaped it.

File naming

kebab-case-topic.md (no numbering — concepts aren't sequential events).

Required YAML frontmatter

---
status: Active            # Active | Deprecated
lastUpdated: 2026-07-03
applyTo:                  # glob(s) — files/areas this concept describes
  - "Fuchs/Notifications/**"
relatedDecisions:         # filenames in ../Decisions this concept implements
  - "0001-domain-events-and-notification-triggers.md"
---

Agents must scan the YAML frontmatter of every file in this folder first and only read the full body of concepts whose applyTo glob matches the files they're about to touch, or whose subject is otherwise clearly relevant.

Body template

# Topic

## Summary
One paragraph: what this subsystem does and why it exists.

## How it works
The mechanics — components, data flow, sequencing. Diagrams (ASCII/mermaid)
welcome where they clarify.

## Key files
Bullet list of the primary files/classes involved.

## Related decisions
Links to the ADRs in `../Decisions` that shaped this design.

Rules

  • Keep concepts current. When you materially change how a documented subsystem works, update its concept doc in the same change — don't let it drift from the code.
  • Create a concept doc for new non-trivial subsystems. If you build something a future agent would need a paragraph of context to safely modify, write that paragraph here instead of making them re-derive it from the diff.
  • Concepts describe current behavior. If something changes, edit the doc in place — don't append a changelog inside it (git history is the changelog).