{
  "id": 5352475,
  "title": "ANAF e-Factura UBL Rejections: What EN 16931 / CIUS-RO Validation Errors Look Like and How to Catch Them Before ANAF Does",
  "url": "https://urgent.news/2026/09/03/anaf-e-factura-ubl-rejections-what-en-16931-cius-ro-validation-errors",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-09-03T15:10:14.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/fiscal-link/-anaf-e-factura-ubl-rejections-what-en-16931-cius-ro-validation-errors-look-like-and-how-to-4a7m"
  },
  "original_language": "en",
  "account": "Uploading well-formed UBL XML to ANAF e-Factura is straightforward. However, accepting the upload and validating the invoice are separate processes, occurring minutes or hours apart. The system returns an immediate submission index, then sends an asynchronous validation verdict later as a Romanian message without structured error details. This article examines the validation process, focusing on EN 16931 and CIUS-RO validation errors, how to detect issues before ANAF rejects the invoice.\n\nAfter a successful upload, ANAF validates invoices against EN 16931 (European semantic invoice model) and the national extension CIUS-RO. The CIUS-RO extension mandates specific custom identifiers and tax requirements. Most rejections stem from non-compliance with these rules, as the UBL 2.1 XSD cannot express them. For example, a mandatory TaxCurrencyCode must be RON, and foreign-currency invoices require a second RON tax total.\n\nThe rejection message provides only a single Romanian sentence in the detalii field, lacking structured error information or line numbers. This makes detecting issues challenging, as the message does not specify the exact problem.\n\nThe validation process occurs in two stages: upload time and answer time. During upload, ANAF returns an XML response with a submission ID. If the CIF (CustomizationID) is invalid, the system returns a permanent, non-retryable failure. After obtaining the index_incarcare, the system performs asynchronous validation. The validation verdict is contained within the detalii field, which is a free-text Romanian message.\n\nTo minimize the risk of rejection, three pre-flight layers can be implemented locally. The first layer, En16931CompletenessValidator, ensures semantic completeness based on EN 16931 rules. It checks for required invoice fields, issuer and buyer information, at least one line item, and proper VAT rates. The second layer, UblSchemaValidator, validates the XML schema and CIUS-RO-specific requirements. The third layer involves thorough testing of edge cases and error handling scenarios.\n\nBy implementing these pre-flight checks, you can identify and fix issues before they reach ANAF, reducing the likelihood of invoice rejections and ensuring compliance with the required standards.",
  "summary": "Uploading well-formed UBL XML to ANAF e-Factura is the easy part. Accepting your upload and validating your invoice are two different moments, separated by minutes or hours: ANAF returns a submission index immediately, then the validation verdict arrives later as an asynchronous message. When the verdict is a rejection, all you get is one Romanian sentence in a detalii field — no structured error…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}