API IceFact

Structura JSON pentru endpoint de generare factură

{
    "factura": opțional {
        "serie": "FV", opțional
        "numar": 1, opțional
        "data": "2020-01-01", opțional
        "scadenta": "2020-01-31", opțional
        "moneda": "RON", opțional ISO 4217
        "metoda_plata": "1", opțional Payment means code (UNCL4461)
        "observatii": "Observatii factura" opțional
    },

    "curs_valutar": opțional obligatoriu dacă factura este în valută {
        "moneda": "EUR", ISO 4217
        "multiplicator": 1, opțional
        "curs": 1.0000
    },

    "cumparator": {
        "denumire": "Firma SRL",
        "cif": "RO123456", pentru PF - opțional sau CNP
        "nr_regcom": "J40/1234/2019", opțional
        "adresa": "Str. Principala, nr. 1", opțional
        "localitate": "Bucuresti",
        "judet": "RO-B", ISO 3166-2:RO
        "sector": "1", 1 ... 6 dacă judet=="RO-B"
        "tara": "RO", ISO 3166-1:Alpha2 Country codes
        "cod_postal": "123456", opțional
        "iban": "RO12BTRL1234567890123456", opțional
        "banca": "Banca Transilvania", opțional
        "contact": opțional {
            "nume": "Popescu Ion", opțional
            "telefon": "0722123456", opțional
            "email": "office@firma.ro" opțional
        }
    },

    "articole": [
        {
            "sku": "SKU123", opțional
            "cpv": "45233220-3", opțional
            "nc": "NC123", opțional
            "denumire": "Produs 1",
            "descriere": "Descriere produs 1", opțional
            "observatii": "Observatii produs 1", opțional
            "um": "buc", coduri UBL
            "cantitate": 1,
            "pret_unitar_max_zecimale": 8, opțional
            "pret_unitar_cu_tva": 100, sau pret_unitar_fara_tva
            "pret_unitar_fara_tva": 84.03, sau pret_unitar_cu_tva
            "valoare_fara_tva": 100, opțional
            "valoare_tva": 119, opțional
            "cota_tva": "19%" obligatoriu dacă CIF-ul prestatorului este
        }                     prefixat cu "RO"
    ],

    "total": opțional {
        "valoare_fara_tva": 100, opțional
        "valoare_tva": 19, opțional
        "valoare_cu_tva": 119 opțional
    }
}

Reguli de validare:

  • factura opțional
    • serie
      • dacă este specificat, trebuie să aibă maximum 10 caractere
    • numar
      • câmp obligatoriu dacă este prezent serie
      • dacă este specificat, trebuie să aibă maximum 200 de cifre, conform BR-RO-L155
    • data
      • dacă este specificat, formatul trebuie să fie 'YYYY-MM-DD'
    • scadenta
      • dacă este specificat, formatul trebuie să fie 'YYYY-MM-DD'
    • moneda
      • dacă este specificat, trebuie să fie conform ISO 4217
    • metoda_plata
      • dacă este specificat, trebuie să fie conform UNCL4461
    • observatii
      • dacă este specificat, trebuie să aibă maximum 6000 caractere, conform BR-RO-A020
  • curs_valutar opțional obligatoriu dacă factura este în valută
    • moneda
    • multiplicator
      • dacă este specificat, trebuie să fie un număr întreg între 1 și 1000
    • curs
      • trebuie să fie un număr cu maxim 4 zecimale
      • partea întreagă trebuie să nu fie negativă
  • cumparator
    • denumire
      • trebuie să aibă maximum 200 de caractere, conform BR-RO-L203
    • cif pentru PF - opțional sau CNP
      • câmp obligatoriu dacă este prezent nr_regcom
      • atributul fiscal conform ISO 3166-1 alpha-2
    • nr_regcom
      • dacă este specificat, trebuie să fie valid
      • trebuie să aibă maximum 50 de caractere
    • adresa
      • dacă este specificat, trebuie să aibă maximum 150 de caractere, conform BR-RO-L151
    • localitate
      • trebuie să fie 'București' dacă judet este 'RO-B'
      • trebuie să aibă maximum 50 de caractere, conform BR-RO-L0502
    • judet
      • daca tara este 'RO', trebuie sa fie conform ISO 3166-2:RO
      • trebuie să aibă maximum 50 de caractere
    • sector dacă judet=="RO-B"
      • trebuie să fie un număr întreg de la 1 la 6
    • tara
    • cod_postal
      • dacă este specificat, trebuie să aibă maximum 20 de caractere, conform BR-RO-L0202
    • iban
      • dacă este specificat, trebuie să fie valid
    • banca
      • dacă este specificat, trebuie să aibă maximum 30 de caractere
    • contact
      • nume
        • dacă este specificat, trebuie să aibă maximum 100 de caractere, conform BR-RO-L1008
      • telefon
        • trebuie să aibă maximum 100 de caractere,
          conform BR-RO-L1010
      • email
        • dacă este specificat, trebuie să aibă maximum 100 de caractere, conform BR-RO-L1011
  • articole
    • sku
      • dacă este specificat, trebuie să aibă maximum 50 de caractere
    • cpv
      • dacă este specificat, trebuie să aibă maximum 50 de caractere
    • nc
      • dacă este specificat, trebuie să aibă maximum 50 de caractere
    • denumire
      • trebuie să aibă maximum 100 de caractere, conform BR-RO-L1024
    • descriere
      • dacă este specificat, trebuie să aibă maximum 200 de caractere, conform BR-RO-L212
    • observatii
      • dacă este specificat, trebuie să aibă maximum 300 de caractere, conform BR-RO-L303
    • um
    • cantitate
      • poate avea maximum 3 zecimale
    • pret_unitar_max_zecimale opțional
      • număr întreg pozitiv, între 0 și 8
      • daca nu este specificat, se va considera default "8"
    • pret_unitar_fara_tva mutual exclusiv
      • nu este permis să apară odată cu pret_unitar_cu_tva
      • nu este permis ca prețul unitar să fie negativ (dacă se stornează, minus se pune la cantitate)
      • poate avea maximum pret_unitar_max_zecimale zecimale
    • pret_unitar_cu_tva mutual exclusiv
      • nu este permis să apară odată cu pret_unitar_fara_tva
      • nu este permis ca prețul unitar să fie negativ (dacă se stornează, minus se pune la cantitate)
      • poate avea maximum pret_unitar_max_zecimale zecimale
    • valoare_fara_tva
      • poate avea maximum 2 zecimale
    • valoare_tva
      • poate avea maximum 2 zecimale
    • cota_tva obligatoriu dacă CIF-ul prestatorului este prefixat cu 'RO'
      • procentul se exprimă de forma 19% - adică trebuie să conțină inclusiv simbolul "%" (procent).
      • procentul nu poate fi negativ și trebuie să aibă maximum 2 zecimale
      • dacă produsul nu face obiectul TVA, trebuie specificat un cod de categorie de TVA conform UNCL5305 - cu excepția codului "S" (standard rate), care înseamnă că ar trebui să avem procent
  • total opțional
    • valoare_fara_tva
      • poate avea maximum 2 zecimale
    • valoare_tva
      • poate avea maximum 2 zecimale
    • valoare_cu_tva
      • poate avea maximum 2 zecimale

Observații secțiune "factura":

  • Dacă se omite serie/număr, API-ul va aloca automat următorul număr disponibil
  • Dacă se omite data, API-ul va folosi data curentă
  • Dacă se omite scadenta, API-ul va folosi data curentă + numărul de zile setat de utilizator în IceFact
  • Dacă se omite moneda, API-ul va folosi RON
  • Dacă se omite curs_valutar, API-ul va folosi 1
  • Dacă se omite metoda_plata, instrumentul de plată va fi setat ca "nedefinit"

Observatii secțiune "cumparator":

  • Câmpul cif este obligatoriu pentru persoanele juridice și opțional pentru persoanele fizice
  • Câmpul sector este opțional și necesar doar dacă "judet"=="B"

Observații secțiune "articole":

  • sku - stock keeping unit - codul intern al produsului
  • cpv - codul de clasificare al produsului, pentru cumpărători instituții bugetare
  • nc - nomenclatură combinată - pentru produse cu risc fiscal ridicat
  • denumire - limita de 100 de caractere este impusă de ANAF
  • descriere - momentan nu este implementat în IceFact
  • observatii - momentan nu este implementat în IceFact
  • um - unitatea de măsură - se pot utiliza coduri UBL (efactura) - link
  • cota_tva - obligatoriu dacă cif este prefixat cu "RO"

Observații calcule

  • Dacă se specifică pret_unitar_cu_tva, pret_unitar_fara_tva va fi calculat automat pe baza cotei de TVA, fiind rotunjit la numărul de zecimale specificat în pret_unitar_max_zecimale
  • Pentru preț unitar se pot folosi maximum 8 zecimale
  • Totalurile sunt rotunjite la 2 zecimale, limită impusă de ANAF
  • Dacă totalurile sunt omise, vor fi calculate de API, altfel rămân intacte ca în JSON (chiar dacă sunt greșite)

Pagină actualizată la 02.12.2024 11:03
logo EuPlatesc.ro
logo Visa
logo MasterCard