Module: Einvoicing::Validators::Peppol

Defined in:
lib/einvoicing/validators/peppol.rb

Overview

Validates UBL 2.1 invoices against Peppol BIS Billing 3.0 Schematron rules using Saxon-HE via the system Java runtime.

Requirements:

- Java in PATH
- Saxon-HE 12 CLI jar (auto-downloaded to /tmp/saxon-he.jar on first use)
- Peppol XSLT (bundled at lib/einvoicing/data/; auto-downloaded on first use)

Examples:

errors = Einvoicing::Validators::Peppol.validate_ubl(xml_string)
errors #=> [] when valid, or [{ field:, error:, message: }] when invalid

Constant Summary collapse

XSLT_URL =
"https://github.com/OpenPEPPOL/peppol-bis-invoice-3/releases/download/3.0.21/PEPPOL-EN16931-UBL.xslt"
SAXON_URL =
"https://repo1.maven.org/maven2/net/sf/saxon/Saxon-HE/10.9/Saxon-HE-10.9.jar"
SAXON_JAR =
"/tmp/saxon-he.jar"
XSLT_PATH =
File.expand_path("../data/PEPPOL-EN16931-UBL.xslt", __dir__)

Class Method Summary collapse

Class Method Details

.java_available?Boolean

Returns:

  • (Boolean)


42
43
44
45
# File 'lib/einvoicing/validators/peppol.rb', line 42

def self.java_available?
  _, _, status = Open3.capture3("java -version")
  status.success?
end

.validate_ubl(xml_string) ⇒ Array<Hash>

Validate a UBL 2.1 XML string against Peppol BIS 3.0 rules.

Parameters:

  • xml_string (String)

    UBL 2.1 invoice XML

Returns:

  • (Array<Hash>)

    errors — empty array means valid

Raises:



33
34
35
36
37
38
39
40
# File 'lib/einvoicing/validators/peppol.rb', line 33

def self.validate_ubl(xml_string)
  ensure_java!
  ensure_saxon!
  ensure_xslt!

  svrl = run_saxon(xml_string)
  parse_svrl(svrl)
end