Romania RO_CIUS (RO e-Factura)
Generate and validate Romanian RO_CIUS UBL, Romania's CIUS of EN 16931; ANAF SPV submission stays with your operator today.
RO_CIUS (also styled CIUS-RO) is Romania’s national Core Invoice Usage Specification (CIUS) of EN 16931, governed by ANAF (Agenția Națională de Administrare Fiscală) via the Ministerul Finanțelor. It is the format required by the RO e-Factura mandate, which has been mandatory for B2G invoices since 2022-07-01 (for operators established in Romania) and for B2B invoices since 2024-07-01; the Romania guide points to the law that sets who is covered.
Beliq targets CIUS-RO 1.0.9 (vendored from the Helger phive-rules-cius-ro 4.6.4 JAR on Maven Central; the rules’ licence is under Licences and attribution). Two cbc:CustomizationID URN families are accepted:
| URN family | Status | Effective |
|---|---|---|
urn:cen.eu:en16931:2017#compliant#urn:efactura.mfinante.ro:CIUS-RO:1.0.1 |
Current (Ordinul 4092/2022) | 2024-06-05 onward |
urn:cen.eu:en16931:2017#compliant#urn:efactura.mfinante.ro:RO_CIUS:1.0.0.2021 |
Legacy (OMF 1366/2021) | Still accepted on validate |
What Beliq emits
Call POST /v1/generate with standard: "peppol-bis" and profile: "romania-ro-cius". The output is xml: RO_CIUS is UBL only and has no hybrid PDF form. output: "pdf" returns a visualization PDF instead: a rendering with no embedded XML, and it needs a template or pdfTemplateId. The legal artifact is the XML.
{
"standard": "peppol-bis",
"profile": "romania-ro-cius",
"output": "xml",
"invoice": {
"number": "2026-RO-0001",
"issueDate": "2026-06-02",
"currencyCode": "RON",
"buyerReference": "BUYER-REF-RO-001",
"seller": {
"name": "Furnizor SRL",
"vatId": "RO12345678",
"peppol": { "schemeId": "9947", "id": "RO12345678" },
"address": {
"street": "Strada Exemplu 1",
"city": "Cluj-Napoca",
"postalCode": "400000",
"countryCode": "RO",
"countrySubentity": "RO-CJ"
}
},
"buyer": {
"name": "Client SRL",
"vatId": "RO87654321",
"peppol": { "schemeId": "9947", "id": "RO87654321" },
"address": {
"street": "Bulevardul Test 2",
"city": "SECTOR1",
"postalCode": "010101",
"countryCode": "RO",
"countrySubentity": "RO-B"
}
}
}
}The builder emits the current CIUS-RO:1.0.1 URN on cbc:CustomizationID. Everything else (party endpoints, addresses, VAT IDs, invoice lines, tax breakdown, totals) follows the standard Peppol BIS 3.0 UBL layout: the same peppol block, buyerReference, line shape, and totals you would use for any Peppol invoice.
Invoice.romania is an optional namespace reserved for future Romania-specific fields. It is intentionally empty today because the engine consumes only generic UBL fields for Romania: there is no Romania-only payload required beyond setting the profile.
Romania-specific fields you already use
These are standard UBL / EN 16931 fields. The RO_CIUS Schematron checks the first five on Romanian invoices; the reference in the last row is the generator’s requirement, not a rule’s. Beliq emits them from generic invoice data; you don’t need a Romania-specific namespace to populate them.
Field on Invoice |
UBL element | RO rule | Purpose |
|---|---|---|---|
seller.peppol.schemeId / buyer.peppol.schemeId |
cac:Party/cbc:EndpointID@schemeID |
BR-62 / BR-63 | Use 9947 (Romania VAT scheme). ANAF has not registered a separate Romanian Peppol scheme. |
address.countryCode |
cac:Country/cbc:IdentificationCode |
BR-RO-110 | "RO" for Romanian parties. |
address.countrySubentity |
cbc:CountrySubentity |
BR-RO-110 | ISO 3166-2:RO code, e.g. "RO-CJ", "RO-B". Bucharest is "RO-B"; the city in that case uses one of the SECTOR1..SECTOR6 codes. |
currencyCode |
cbc:DocumentCurrencyCode |
BR-RO-030 | "RON" (single-currency happy path). |
taxCurrencyCode + taxTotalInAccountingCurrency |
cbc:TaxCurrencyCode + second cac:TaxTotal |
BR-RO-030 / BR-53 | When the invoice currency differs from RON (e.g. cross-border EUR), set both and Beliq emits the second TaxTotal block carrying the VAT total restated in RON (BT-111). |
buyerReference or orderReference |
cbc:BuyerReference / cac:OrderReference |
none | No rule that runs on a Romanian invoice requires one, but POST /v1/generate refuses an invoice with neither (400). |
Validation pipeline
For RO_CIUS the validation chain runs the UBL 2.1 XSD, CEN’s EN 16931 UBL Schematron and the two CIUS-RO XSLTs, and no Peppol BIS pack:
Input → UBL 2.1 XSD → EN 16931 Schematron → CIUS-RO XSLT (EN 16931 + RO_CIUS rules) → RO e-Factura XSLT (RO operational + VAT) → Result
The two vendored XSLT files are phive-rules’ compilation of ANAF’s CIUS-RO Schematron, and they run sequentially after CEN’s EN 16931 UBL pack. The first carries most of the EN 16931 rules and no Peppol BIS rule, so CEN’s pack keeps running beside it; no Peppol BIS pack runs on a Romanian document. Errors from all three merge into one validationResult.errors list with their original rule IDs (BR-RO-* for the Romanian rules).
When validation passes, the /v1/validate response includes:
{
"valid": true,
"format": "ubl",
"profileDetected": "romania-ro-cius",
"ciusVersion": "1.0.9",
"romaniaRoCiusVersion": "1.0.9",
"errors": [],
"warnings": []
}The vendored Schematron pack and version pin are listed on the validation artifacts page.
Verification
RO_CIUS is Community-checked: a Romanian result carries verificationTier: "reconstructed-rules". Real Romanian business rules run on every document, but not from ANAF’s own files. ANAF publishes the CIUS-RO rules as Schematron. The two XSLT files Beliq runs are the open-source phive-rules project’s compilation of that Schematron, and Beliq has not yet compared them with ANAF’s own files. ANAF also publishes no sample invoices that Beliq could check them against. Both the UBL 2.1 XSD and the two XSLTs run on every generate and validate call, enforcing the BR-RO-* rule set.
The badge rises to Authority-checked once two things hold: evidence that the compiled XSLTs enforce ANAF’s own CIUS-RO 1.0.9 Schematron, and ANAF sample invoices checked under 1.0.9. Separately, the profile’s status stays provisional until ANAF publishes a positive sample corpus. ANAF publishes no separately runnable validator and no downloadable negative corpus; that gap is tracked as an upstream gap and reviewed each quarter.
Note: Romania RO_CIUS does not appear in the GET /v1/rulesets public catalog, which lists the rule artifacts of publicly supported formats only. The vendored Schematron version pin is listed on the validation artifacts page.
What Beliq does NOT do
- ANAF SPV submission. Upload of the signed UBL to
webservicesp.anaf.ro, certificate-based authentication, receipt persistence, and the “sistemul național de facturare electronică” record-retention obligations. - Document signing (XAdES on the SPV envelope, ANAF receipt verification).
- Credit notes via the RO_CIUS profile are accepted by the runtime, but there is no Romania-specific golden round-trip yet. Treat as best-effort until promoted.
- Romanian sub-versions of CIUS-RO older than
1.0.9. The runtime targets the current1.0.1URN; theRO_CIUS:1.0.0.2021legacy URN is accepted on the validate path only.
Related
- POST /v1/generate: request shape
- POST /v1/validate: response metadata field map
- Validation artifacts: vendored Schematron + version pin
- Peppol BIS format reference: the UBL layout the generator also uses for Romanian invoices
- ANAF technical hub (mfinante.gov.ro)