Pentru mulți integratori EDI, diferența dintre o factură electronică acceptată sau respinsă stă într‑un detaliu aparent minor: cum mapezi corect prețul unitar. În EDIFACT, detaliile de preț sunt transmise prin segmentul PRI, în timp ce în UBL 2.1 (implementat în Peppol BIS Billing 3.0) același sens semantic este modelat prin structura Price/PriceAmount. Acest articol explică, cu accent pe cazuri reale de implementare, maparea dintre segmentul PRI din INVOIC și câmpurile UBL/Peppol, astfel încât ERP‑urile, gateway‑urile EDI și dezvoltatorii să reducă erorile de conformitate și să treacă testele de interoperabilitate.
Ce transmite, de fapt, segmentul PRI în EDIFACT
Segmentul PRI (Price details) furnizează informația de preț la nivel de linie. În versiunile utilizate pe scară largă (ex. D.96A, D.01B), PRI conține compozitul C509 cu următoarele elemente relevante:
- 5125 Price qualifier – tipul prețului (de ex.: AAE = unit price, AAA = calculation net, AAB = calculation gross)
- 5118 Price – valoarea numerică a prețului
- 5284 Unit price basis – baza de calcul (de ex. 100 dacă prețul este pentru 100 de unități)
- 6411 Measure unit qualifier – unitatea de măsură (UNECE Rec 20)
În practică, mulți retaileri și CPG folosesc AAE (unit price) drept referință pentru prețul unitar net, iar AAA/AAB pentru prețuri alternative (net/gross) sau informative. Este frecvent ca o linie să conțină multiple PRI, motiv pentru care selecția corectă a qualifier‑ului devine esențială în mapare.
Ținta de mapare în UBL/Peppol
În UBL 2.1 conform Peppol BIS Billing 3.0, prețul liniei se mapează în:
- cac:InvoiceLine/cac:Price/cbc:PriceAmount – prețul unitar, fără TVA
- cac:InvoiceLine/cac:Price/cbc:BaseQuantity – baza cantitativă, dacă prețul este exprimat „pe 100” sau „pe 1000” de unități
- cac:InvoiceLine/cac:Price/cac:AllowanceCharge – rabaturi/majorări la nivel de preț (dacă sunt distincte de prețul net)
Peppol BIS Billing 3.0 impune reguli stricte de validare (CIUS conform EN 16931): PriceAmount este obligatoriu, trebuie să fie exprimat în moneda documentului (ISO 4217) și are precizie de obicei 2–4 zecimale în funcție de cerințele țării. Unitatea de măsură folosește coduri UNECE Rec 20, identic cu EDIFACT.
Reguli de mapare recomandate (battle‑tested)
- Selectează PRI+AAE (unit price) ca sursă pentru cac:Price/cbc:PriceAmount. Dacă lipsește, folosește AAA (calculation net). Evită AAB (gross) pentru Peppol, decât dacă nu există alternativă și aplici transformări pentru a obține netul.
- Mapează C509/5284 (Unit price basis) către cbc:BaseQuantity și C509/6411 către @unitCode pe BaseQuantity. Exemplu: dacă PRI indică preț „pentru 100 bucăți”, setează BaseQuantity=100, unitCode=„PCE”.
- Exprimă PriceAmount fără TVA. Dacă în EDIFACT primești doar preț brut, scade TVA pe baza percentului din linie (TAX sau din contextul fiscal) pentru a produce netul – atenție la rotunjiri.
- Dacă în EDIFACT sunt rabaturi la preț (prin ALC/PCD sau alte mecanisme), în Peppol reprezintă-le prin cac:Price/cac:AllowanceCharge. Evită „ascunderea” discount‑urilor direct în PriceAmount când sursa le separă explicit.
- Respectă condițiile de valabilitate: în Peppol este permis un singur cac:Price per InvoiceLine; dacă ai mai multe PRI în EDIFACT, alege-l pe cel principal (net) și mută restul în AllowanceCharge sau în line notes (dacă doar informative).
- Setează cbc:PriceAmount @currencyID cu aceeași monedă ca documentul (DocumentCurrencyCode). Dacă tranzacția are currency la linie (caz rar în Peppol), aliniază cu regulile locale.
Exemplu de mapare
EDIFACT (INVOIC)
LIN+1++SKU123:IN'
QTY+47:200:PCE'
PRI+AAE:12.50:::100:PCE'
TAX+7+VAT+++:::19'
Mapare UBL (Peppol BIS Billing 3.0)
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="PCE">200</cbc:InvoicedQuantity>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">12.50</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="PCE">100</cbc:BaseQuantity>
</cac:Price>
<cac:Item><cbc:Name>SKU123</cbc:Name></cac:Item>
</cac:InvoiceLine>
Capcane frecvente și conformitate
- Rotunjiri: folosește aceleași reguli de scale ca în ERP. Peppol validează coerența dintre PriceAmount, BaseQuantity, cantitate și LineExtensionAmount; diferențe mai mari de 0,01 pot duce la reject.
- Unități de măsură: nu amesteca coduri interne; doar UNECE Rec 20 (de ex. PCE, KGM, LTR).
- Prețuri promoționale: dacă în EDIFACT ai AAE și un ALC linie cu PCD 10% discount, în UBL pune PriceAmount ca net rezultat sau modelează discountul la nivel de Price AllowanceCharge, dar păstrează consistența calculului bazei de impozitare.
- Multipli PRI: normalizează logicile de prioritate per partener comercial. Retaileri precum Carrefour, METRO sau E.Leclerc folosesc profile EDIFACT ușor diferite; documentează‑le explicit în mapare.
Context de piață și standardizare
Peppol BIS Billing 3.0, bazat pe UBL 2.1 și EN 16931, este standardul operațional în tot mai multe piețe. OpenPeppol și autoritățile naționale (ex. IMDA Singapore, ATO Australia, DFØ Norvegia) au extins interoperabilitatea dincolo de UE. România a introdus obligativitatea B2B prin RO e‑Factura în 2024, pe baza CIUS_RO aliniat la EN 16931 și UBL 2.1. Italia, prin SDI, procesează anual miliarde de e‑facturi; Agenzia delle Entrate a raportat volume de peste 4 miliarde/an în ultimii ani. În Polonia, mandatul KSeF a fost amânat în 2024 pentru 2026 după audit tehnic.
Conform Grand View Research (2024), piața globală de e‑invoicing este estimată să ajungă la aproximativ 47,5 miliarde USD până în 2030 (de la ~11,2 miliarde USD în 2022), pe fondul mandatelor B2G/B2B și al nevoii de automatizare AP/AR. Furnizori precum SAP, Oracle NetSuite, Microsoft Dynamics 365, Basware, Pagero, Comarch, OpenText și TIE Kinetix oferă conectori EDI/Peppol gata de producție, dar maparea fină a segmentului PRI rămâne personalizată per industrie.
Testare și operare
- Validează cu schematron Peppol BIS Billing 3.0 și cu CIUS local (ex. RO_CIUS). Integrează validatoare automate în CI/CD.
- Rulează testele end‑to‑end cu un Access Point certificat (ex. Basware, Pagero) și cu partenerii reali. Verifică echivalența valorilor fiscale la nivel de linie și totaluri.
- Loghează valorile sursă PRI, transformările și rezultatul UBL pentru auditabilitate (indispensabil la controale fiscale).
Notă practică: pentru implementări rapide în România, unii integratori folosesc un hub EDI local cu pre‑mapări pentru EDIFACT–UBL. De exemplu, EDIconnect.ro, ca modul al CRMconnect, oferă profile de mapare pentru retail și auto, inclusiv suport pentru Peppol și RO e‑Factura, util când ai de armonizat multiple profile de partener.
Concluzie
Maparea corectă a segmentului PRI din EDIFACT către structura de preț din UBL/Peppol este critică pentru conformitate, reconciliere și cash‑flow. Alegeți PRI+AAE ca sursă principală, folosiți BaseQuantity pentru price‑per‑n și modelați discount‑urile explicit. Cu validare schematron în pipeline și testare cu Access Point‑uri certificate, echipele IT pot livra integrații EDI robuste, pregătite pentru mandatele de facturare electronică care se extind accelerat la nivel global.
