# `UblEx.Validator`
[🔗](https://github.com/Octarion/ubl_ex/blob/v0.8.1/lib/ubl_ex/validator.ex#L1)

Validates UBL documents against Peppol BIS Billing 3.0 rules using the
peppol.helger.com validation web service.

This module provides an optional validation feature that requires the `req`
dependency. The validation service is provided free of charge without SLA
by Philip Helger.

## Usage

    # Validate an invoice
    xml = UblEx.generate(%{type: :invoice, ...})
    case UblEx.Validator.validate(xml, :invoice) do
      {:ok, result} -> IO.puts("Valid!")
      {:error, errors} -> IO.inspect(errors)
    end

    # Validate a credit note
    xml = UblEx.generate(%{type: :credit, ...})
    UblEx.Validator.validate(xml, :credit)

## Requirements

Add `{:req, "~> 0.5.0"}` to your dependencies in mix.exs to use this module.

# `validate`

Validates a UBL document against Peppol BIS Billing 3.0 rules.

## Parameters

  - `xml` - The UBL XML document as a string
  - `type` - The document type (`:invoice` or `:credit`)
  - `opts` - Optional keyword list:
    - `:vesid` - Override the default VESID for the document type
    - `:timeout` - Request timeout in milliseconds (default: 30000)

## Returns

  - `{:ok, result}` - Validation successful, returns parsed result map
  - `{:error, reason}` - Validation failed or service error

## Examples

    iex> xml = File.read!("invoice.xml")
    iex> UblEx.Validator.validate(xml, :invoice)
    {:ok, %{success: true, errors: [], warnings: []}}

---

*Consult [api-reference.md](api-reference.md) for complete listing*
