Eroare atribut prezent dar vid nepermis in e-Factura
Eroarea 'atribut prezent dar vid nepermis' in e-Factura inseamna ca un element XML este inclus in fisier dar nu are valoare. Cauze frecvente si solutii pas cu pas.
Mesajul exact pe care il primesti de la ANAF este: "atribut prezent dar vid nepermis". Aceasta este o eroare de validare de schema XML, nu o eroare de regula de business. Inseamna ca structura fisierului XML este invalida inca inainte ca ANAF sa verifice datele din factura. Fisierul trebuie corectat si retrimis.
Ce inseamna aceasta eroare
In standardul CIUS-RO, fiecare element XML care apare in fisier trebuie sa contina o valoare. Standardul nu permite elemente prezente dar fara continut. Aceasta regula vine din specificatia XSD (XML Schema Definition) pe care ANAF o foloseste pentru validare.
Eroarea apare inainte de orice validare a regulilor de business (BR-01, BR-07, etc.). Daca fisierul nu trece validarea de schema, ANAF returneaza eroarea si respinge fisierul fara sa verifice celelalte reguli.
Principiul de baza este simplu: daca nu ai o valoare pentru un camp, nu il include deloc in XML. Nu lasa campul gol.
De ce apare aceasta eroare
Cea mai frecventa cauza este un software sau un script de generare XML care include toate campurile posibile dintr-un template, fara sa verifice daca fiecare camp are o valoare efectiva.
unitCode gol pe cantitate. Atributul unitCode de pe elementul InvoicedQuantity este obligatoriu si trebuie sa contina un cod de unitate de masura valid (de exemplu C62 pentru bucata, KGM pentru kilogram, LTR pentru litru). Daca este prezent dar vid, apare eroarea.
Telefon sau email gol. Campurile de contact precum Telephone sau ElectronicMail sunt optionale in CIUS-RO. Daca nu ai numarul de telefon al clientului, nu include elementul. Daca il incluzi dar il lasi gol, primesti eroarea.
CompanyID gol. Elementul CompanyID din sectiunea PartyTaxScheme trebuie sa contina CUI-ul sau identificatorul fiscal al firmei. Daca este prezent dar gol, XML-ul nu trece validarea.
Adrese incomplete. Campuri din sectiunile de adresa ale vanzatorului sau cumparatorului, cum ar fi StreetName, CityName sau PostalZone, pot aparea goale in XML daca datele nu au fost completate in aplicatie inainte de trimitere.
Template-uri cu campuri optionale incluse gol. Unele programe de facturare folosesc template-uri XML fixe in care toate campurile sunt prezente, iar cele fara valoare raman goale. Aceasta abordare este gresita. Campurile fara valoare trebuie omise complet.
Exemple XML
Mai jos sunt exemple de XML incorect si corect pentru cele mai frecvente situatii.
unitCode gol (incorect):
<!-- INCORECT: unitCode prezent dar vid -->
<cbc:InvoicedQuantity unitCode="">1</cbc:InvoicedQuantity>unitCode completat (corect):
<!-- CORECT: unitCode completat -->
<cbc:InvoicedQuantity unitCode="C62">1</cbc:InvoicedQuantity>Telefon gol (incorect):
<!-- INCORECT: telefon prezent dar vid -->
<cbc:Telephone></cbc:Telephone>Telefon completat sau omis complet (corect):
<!-- CORECT varianta 1: completeaza cu valoare reala -->
<cbc:Telephone>+40721000000</cbc:Telephone><!-- CORECT varianta 2: omite elementul complet daca nu ai numarul -->CompanyID gol (incorect):
<!-- INCORECT: CompanyID prezent dar vid -->
<cac:PartyTaxScheme>
<cbc:CompanyID></cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>CompanyID completat (corect):
<!-- CORECT: CompanyID completat -->
<cac:PartyTaxScheme>
<cbc:CompanyID>RO12345678</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>Cum o rezolvi pas cu pas
- Identifica elementul gol. Mesajul de eroare de la ANAF contine de obicei numele elementului sau atributului care este gol. Cauta acel element in XML-ul generat.
- Decide daca ai valoarea. Daca ai valoarea (de exemplu numarul de telefon al clientului), completeaza campul in aplicatie si regenereaza XML-ul. Daca nu ai valoarea si campul este optional, elimina elementul complet din XML.
- Verifica unitCode pe fiecare linie. Fiecare linie de factura trebuie sa aiba un cod de unitate de masura valid. Codurile sunt definite in standardul UN/CEFACT. Cel mai comun este
C62pentru bucata. - Verifica sectiunile de contact si adresa. Daca aplicatia ta include campuri de telefon, fax sau email in XML, asigura-te ca sunt completate sau complet omise. Nu le lasa cu valoare vida.
- Valideaza XML-ul inainte de trimitere. Poti folosi
xmllintcu schema XSD a CIUS-RO pentru a detecta erorile local, inainte sa trimiti catre ANAF. - Retrimite fisierul. Dupa corectare, trimite din nou catre ANAF. Nu emite o factura noua cu alt numar decat daca este cazul.
Rezolva cu Billyou
Billyou genereaza XML pentru CIUS-RO intern, pe baza datelor din factura. Elementele optionale fara valoare nu sunt niciodata incluse in XML. Nu exista template-uri cu campuri goale.
Validarea de schema se face inainte de trimiterea catre ANAF. Daca exista o problema de structura, primesti eroarea in interfata sau prin API, nu de la ANAF dupa ce fisierul a fost respins.
Codurile de unitate de masura pentru liniile de factura sunt configurabile per produs in catalogul Billyou. Odata setat, codul este inclus automat pe fiecare linie. Documentatia pentru dezvoltatori este la billyou.ro/dev.
Citeste si articolul despre eroarea "fisierul transmis nu este valid", care apare des in aceleasi situatii de XML invalid.
Intrebari frecvente
Ce cod unitCode trebuie sa folosesc pentru bucata?
Codul standard UN/CEFACT pentru bucata este C62. Alte coduri frecvente: KGM pentru kilogram, LTR pentru litru, MTR pentru metru, HUR pentru ora. Lista completa este in anexele CIUS-RO.
Pot lasa adresa cumparatorului goala?
Depinde de camp. Unele campuri de adresa sunt obligatorii in CIUS-RO, altele sunt optionale. Daca un camp optional nu are valoare, omite-l complet din XML. Daca il incluzi gol, primesti eroarea. Campul obligatoriu CountryIdentificationCode trebuie completat intotdeauna.
Cum gasesc exact ce element este gol in XML?
Mesajul de eroare ANAF contine de obicei numele elementului. Daca nu este clar, deschide fisierul XML intr-un editor de text si cauta taguri de forma <cbc:NumeElement></cbc:NumeElement> sau atribute de forma atribut="". Acestea sunt elementele si atributele cu valoare vida.
Aceasta eroare se aplica si la atributele XML, nu doar la elemente?
Da. Atat elementele goale cat si atributele goale (de exemplu unitCode="") declanseaza aceasta eroare. Regula este aceeasi: daca il incluzi, trebuie sa aiba valoare. Daca nu ai valoare, nu il include.