Validation

xrechnung-csharp supports both semantic validation and profile-specific checks.

EN 16931 semantic validation

var en16931 = new EInvoice.Core.Validation.EN16931Validator();
var result = en16931.Validate(invoice);

By default, En16931Validator only evaluates EN 16931 business rules. No UBL-CR advisory checks are executed unless you opt in explicitly.

Optional UBL-CR warning checks (opt-in)

For UBL document quality guidance, you can opt in to a dedicated UBL-CR warning set:

  • UBL-CR-001: UBL extensions are discouraged
  • UBL-CR-002: UBLVersionID should be absent or equivalent to UBL 2.1
  • UBL-CR-003: ProfileExecutionID is discouraged

All UBL-CR findings are emitted as ValidationSeverity.Warning.

using EInvoice.Core.Validation;

var validator = En16931Validator.CreateForUblProfile(new UblCrValidationContext
{
    HasUblExtensions = true,
    UblVersionId = "2.0",
    ProfileExecutionId = "EXEC-1"
});

var result = validator.Validate(invoice);

Model coverage notes

The EN 16931 Invoice model intentionally does not include raw UBL syntax fields such as UBLExtensions, UBLVersionID, and ProfileExecutionID. Therefore, UBL-CR checks are designed as explicit metadata-based opt-in:

  • if metadata is provided via UblCrValidationContext, rules are evaluated;
  • if metadata is absent (null), the corresponding rule is skipped.

XRechnung validation

var xrechnung = new EInvoice.Core.Validation.XRechnungValidator();
var result = xrechnung.Validate(invoice);

For official KoSIT validation flows, refer to package-level validator integrations documented in the repository README.