validate-einvoice-action

May 25, 2026 · View on GitHub

Validate EU electronic invoices in CI — Peppol BIS 3, EN 16931, XRechnung 3.0.x, Factur-X / ZUGFeRD, UBL, CII — against the official Schematron rules. Every error comes back with a plain-English fix hint.

Backed by eleata. Free tier: 200 validations/month, no credit card.

Quickstart

- uses: hernaninverso/validate-einvoice-action@v1
  with:
    file: invoices/*.xml
    format: peppol-bis-3
    api-key: ${{ secrets.ELEATA_API_KEY }}

That's it. The job fails if any file has an error-severity finding. Warnings are surfaced in the GitHub Actions log but don't fail the build by default.

Get a free key (200/mo, no card) at https://eleata.io/signup. Store it as a repo secret named ELEATA_API_KEY.

Inputs

NameRequiredDefaultDescription
fileyesPath or glob to one or more invoice files. Supports ** recursion.
formatnopeppol-bis-3One of peppol-bis-3, en16931-ubl, en16931-cii, xrechnung-ubl, xrechnung-cii, factur-x, ubl, cii, auto.
api-keyyesYour eleata API key. Always pass via ${{ secrets.* }} — never hard-code.
api-basenohttps://api.eleata.ioOverride the API endpoint (useful for staging or on-prem).
fail-onnoerrorerror (default), warning, or never.

Outputs

NameDescription
results-jsonPath to a JSON file containing every file's validation result.
total-filesNumber of files validated.
total-errorsTotal error-severity findings across all files.

What gets reported

For each file, the action writes a job summary to $GITHUB_STEP_SUMMARY and emits per-file ::group:: / ::error:: / ::notice:: annotations. Each error line shows:

BR-CO-15: Sum of line net amounts must equal LegalMonetaryTotal/LineExtensionAmount.
  fix: Recompute lines: 1234.50 + 56.00 = 1290.50, you have 1290.00.

The fix field is the differentiator — it's a curated, plain-English remediation for the ~400 most common rule failures across all supported formats.

Format coverage

FormatStatus
Peppol BIS Billing 3.0GA
EN 16931 (UBL & CII)GA
XRechnung 3.0.x (UBL & CII)GA
Factur-X 1.08 / ZUGFeRD 2.4GA (PDF/A-3 supported; CII XML auto-extracted)
OASIS UBL 2.1 schemaGA
UN/CEFACT CII schemaGA
FatturaPA (Italian SdI)Coming Q3 2026 — private beta

Example: catch a broken invoice before it ships

name: Validate outgoing invoices

on:
  pull_request:
    paths:
      - 'invoices/**.xml'

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: hernaninverso/validate-einvoice-action@v1
        with:
          file: invoices/**/*.xml
          format: auto
          api-key: ${{ secrets.ELEATA_API_KEY }}

Notes

  • Runs as a composite action — no Docker pull, starts in <1 second on ubuntu-latest.
  • Requires jq (pre-installed on GitHub-hosted Ubuntu / macOS runners).
  • The action streams files directly to the API; nothing is persisted on disk beyond the per-file response.
  • API responses are cached for 24h on identical SHA-256 of the file payload.

License

Apache 2.0 — see LICENSE. Built on top of Mustang and phive, both Apache 2.0.

Support