Aller au contenu

Changelog

Ce contenu n’est pas encore disponible dans votre langue.

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.


Unreleased


[0.10.1] - 2026-09-07

Changed

  • regulatory-update: Peppol BIS Billing 3.0 spec pin 3.0.20 → 3.0.21, closes regulatory-update issue #5. Released 2026-05-20, mandatory from 2026-08-17. Key changes: new optional Profile 02 “Billing with Response” (separate SMP registration); UBL/CII 1.3.16; rules PEPPOL-COMMON-R052/R053 move from warning to error for every profile; new warning-only rules for Dutch identifiers. All of these live in the Peppol-specific overlay (PEPPOL-EN16931-UBL.sch), which stays unbundled per the existing BE-SC-11 licensing gap — validate_invoice_be only runs the CEN base Schematron, so none of this is a behavior regression. Documentation-only pin refresh (context-library/countries/be.md at the workspace root); no code change.

[0.10.0] - 2026-08-24

Changed

  • peppol_send now emits a real wsse:Security message signature. mcp-einvoicing-core v1.20.0 fixed the AS4 transport client’s _apply_message_signature, which previously computed a signature and discarded it, sending unsigned outbound messages. This is an API-compatible, wire-level behavior change — no code in this package changed to pick it up, but every outbound message sent through this package’s peppol_send is now actually signed. Not yet validated against a live sandbox Peppol AP; treat as unverified at the transport level until that validation runs.
  • Lower-bound pin on mcp-einvoicing-core raised to >=1.20.0 (was >=1.19.0).
  • xslt2 extra now chains mcp-einvoicing-core[xslt2]>=1.20.0 (was >=1.19.0).

Added

  • Mounted three new opt-in core plugins in server.py, alongside the existing Peppol tool plugin:
    • register_peppol_reporting_tools (mcp_einvoicing_core.peppol.reporting_tools) — validate_eusr_report, validate_tsr_report (End User / Transaction Statistics Reports). Requires the [xslt2] extra.
    • register_peppol_mls_tools (mcp_einvoicing_core.peppol.mls_tools) — validate_mls_message, build_mls_message (Message Level Status). Requires the [xslt2] extra.
    • register_en16931_codelist_tools (mcp_einvoicing_core.en16931_codelist_tools) — 13 list_*/check_* pairs plus get_en16931_codelist_version for the EN 16931 semantic code lists. Requires EINVOICING_EN16931_CODELIST_DIR to be set to a local copy of the CEF Digital code lists (not bundled).
    • peppol_directory_search (public Peppol Directory search) arrives automatically via the existing register_peppol_tools mount — no server.py change needed for this one.
  • All new tools are mounted unconditionally; they raise a clear error at call time (not at registration) when their extra or data directory is missing, matching the existing eDEC codelist tool pattern.

[0.9.0] - 2026-08-21

Changed

  • check_peppol_participant_be removed. Peppol participant lookup (and the rest of the Peppol network surface: service-endpoint lookup, DNS-only diagnostic, AS4 send, and the eDEC codelist tools) now comes from the shared core Peppol tool plugin (mcp_einvoicing_core.peppol.tools.register_peppol_tools), mounted in server.py with a BE-specific identifier adapter (_be_id_adapter) that normalizes a bare Belgian VAT number to the 0208:<digits> Peppol scheme (KBO/BCE). Use peppol_lookup_participant instead of the removed tool; behavior and response shape are unchanged for that use case, but the tool now also exposes peppol_get_service_endpoint, resolve_peppol_dns, peppol_send, and 8 eDEC codelist tools that were not previously available in this package. See context-library/roadmap-2026.md [ARCH-CONVERGE-BE].
  • Lower-bound pin on mcp-einvoicing-core raised to >=1.19.0 (was >=1.18.0), required for register_peppol_tools.

[0.8.0] — 2026-08-20

Changed

  • validate_invoice_be(profile="peppol-bis-3"|"pint-eu") now returns real validation results (metadata.engine="schematron-xslt", metadata.scope="en16931-base-only") instead of the "unavailable" result introduced in v0.7.0, using the CEN EN16931 base Schematron newly bundled in mcp-einvoicing-core>=1.18.0 ([CORE-EN16931-BASE-SCHEMATRON-1]). This checks the ~50 CEN BR-* structural/arithmetic rules — a real improvement over the presence-only XPath fallback this package carried before v0.7.0 — but explicitly does not check the Peppol-specific overlay rules (profile/process ID registration, EndpointID scheme, narrowed code lists). Every result now carries an explicit warning that this is not a full Peppol BIS3 conformance check. See context-library/decisions/peppol-schematron-artifact.md for why the overlay itself still cannot ship (no confirmed OpenPeppol redistribution rights).
  • Lower-bound pin on mcp-einvoicing-core raised to >=1.18.0 (was >=1.15.0) for the new schematron_artifacts module.

Unchanged

  • The local full-Peppol-overlay Schematron path (specs/peppol_bis_3/, _find_schematron_xslt) stays wired exactly as before — if a properly-licensed compiled overlay stylesheet is ever added there, it still takes priority over the new base-only path. No such file exists today.

[0.7.0] — 2026-08-17

Removed

  • PEPPOL_BIS3_RULES (the package’s hand-rolled Peppol BIS 3.0 base-rule approximation) removed entirely, rather than kept as the “fixed” version shipped in v0.6.0. It covered only ~10 of the ~50+ real CEN/Peppol rules (no arithmetic/totals checks) and had just been found to carry a rule-ID mislabeling bug — a package-local partial duplication of rules that are identical across every Peppol-BIS3-consuming country is a recurring source of exactly this class of bug. See context-library/roadmap-2026.md [CORE-PEPPOL-SCHEMATRON-1].

Changed

  • validate_invoice_be(profile="peppol-bis-3"|"pint-eu") now returns an explicit unavailable result (valid=False, an error explaining why, metadata.engine="unavailable") when no real compiled Schematron is loaded, instead of a silently-partial pass/fail. A false “valid” from an incomplete rule set is worse than a clear “cannot validate” signal for a compliance tool.
  • standards/mercurius.py’s MERCURIUS_RULES no longer splices in PEPPOL_BIS3_RULES — it now contains only the Mercurius-specific overlay (MER-002/MER-003/MER-004), which is genuinely BE-local and was not part of the cross-country duplication problem. Every mercurius-profile result now carries an explicit MERCURIUS-SCOPE warning stating that base EN16931/Peppol BIS 3.0 compliance is not checked by this profile, since it no longer runs those checks at all.

Fixed

  • mercurius profile validation was silently affected by the same rule-ID mislabeling bug fixed in v0.6.0, since MERCURIUS_RULES previously spliced in PEPPOL_BIS3_RULES directly. Moot now that the splice is removed.

[0.6.0] — 2026-08-17

Fixed

  • PEPPOL_BIS3_RULES (XPath fallback validator): rule IDs were paired with the wrong rule content — every entry from the old BR-02 onward tested a different field than its real CEN/Peppol rule ID (e.g. the old BR-02 checked ProfileID/BT-23, but the real BR-02 checks the Invoice number/BT-1). Relabeled against the OpenPeppol 3.0.20 Schematron sources; the Profile identifier (BT-23) check is now correctly attributed to PEPPOL-EN16931-R001 rather than a nonexistent CEN BR-* id.
  • BEDocumentValidator._validate_with_profile: the Schematron-XSLT result branch read svrl_result.messages/m.message, fields that do not exist on core’s ValidationResult/ValidationMessage (.errors/.warnings of .text) — dead code, never exercised because no XSLT was ever bundled, but would have raised AttributeError the first time it ran.
  • BEDocumentValidator.__init__ now uses core’s load_schematron_validator() (auto-dispatch to XSLT 1.0 or Saxon/XSLT 2.0+) instead of hardcoding the XSLT-1-only SchematronValidator.

Changed

  • Pinned Peppol BIS Billing 3.0 spec version to 3.0.20 (OpenPeppol 2025 November release, was 3.0.17). Closes regulatory-update issue #4.
  • Added optional xslt2 extra (mcp-einvoicing-core[xslt2]) for future Saxon-HE-backed Schematron validation.

Known gap (unchanged)

  • [GAP id=core.schematron.be_bundled_xslt] remains open: no compiled, SVRL-producing Schematron XSLT is bundled. The 3.0.20 release bundle sourced for this refresh contains only the Schematron sources (.sch) plus a UBL-to-HTML viewer stylesheet (verified not to be a validator) — validate_invoice_be continues to run the XPath fallback above. See context-library/countries/be.md for detail.

[0.4.0] — 2026-06-30

Added

  • parse_ubl_invoice_be tool: UBL 2.1 invoice parsing for the mandatory reception capability (Art. 13quater RD no. 1), including Belgian extensions (OGM/VCS reference, 0208 endpoint scheme)
  • EU PINT v1.0.1 (pint-eu) profile: urn:peppol:pint:billing-1@en16931-2017@eu-3
  • OGM/VCS structured payment reference check-digit validator on BEPaymentTerms.ogm_reference
  • Schematron-based validation via core’s SchematronValidator when the Peppol BIS 3.0 XSLT is present in specs/
  • Structured BCE_API_KEY_MISSING warning and structured Peppol lookup error responses

Removed

  • validate_pint_be tool and the pint-be profile (PINT-BE was never a published OpenPeppol specification)

Fixed

  • buyer_item_id renamed to buyer_article_id (BT-156, was mislabelled as BT-157); now wired to <cac:BuyersItemIdentification> in UBL output

Changed

  • Core dependency floor raised to mcp-einvoicing-core>=1.13.0,<2.0.0

[0.3.0] — 2026-06-27

Added

  • [ARCH-VALID-1c] BEParty.tax_id now enforces the BCE/KBO modulo-97 check digit at model-construction time via a new @field_validator calling mcp_einvoicing_core.TaxIdentifier.validate_be_vat (3-layer party-validation pattern, Layer 1). Invalid VAT/enterprise numbers raise ValidationError instead of being silently accepted.

Changed

  • Test fixtures in tests/conftest.py switched from placeholder VAT numbers to mod-97-valid examples (BE0428759497 and BE0403170701).

[0.1.0] — TBD

Initial release.