oneapi
Autentificare
Financiar v1 / Fiscal

Normele anuale de venit

Normele de venit pe judeţ şi cod CAEN, pentru un an.

⚠️ Setul nu e încă populat şi ruta o spune deschis (200 + meta.fara_date), în loc să întoarcă
o listă goală care ar putea trece drept „judeţul ăsta n-are norme". Sunt mii de combinaţii
stabilite prin ordine anuale ale direcţiilor regionale ANAF; se aduc pe traseul obişnuit al
platformei — sursă, fişier, import — nu se reconstituie din memorie.

GET
https://oneapi.ro/api/financiar/v1/fiscal/norme-venit

Parametri de interogare

NumeTipDescriereValori acceptate
anopțional integer | null Opţional, implicit anul curent. 2018 – 2100
judetopțional string | null Opţional, codul auto al judeţului — CJ, DJ, B pentru Bucureşti. Un cod inexistent dă 422, nu o listă goală. Un judeţ care EXISTĂ dar nu e în set dă 200 cu judet_neacoperit. ex. DJex. B
zonaopțional string | null Opţional: eticheta zonei, cum o publică judeţul („Comune", „Municipiul Craiova", „Zona rurală"). Diacriticele şi majusculele nu contează. Valorile acceptate pentru un judeţ sunt în meta.zone, fiindcă nu pot fi ghicite. max 120 car.
caenopțional string | null Opţional: orice cod CAEN, de orice nivel şi din orice revizie — se caută în ambele revizii publicate. Un cod inexistent e 404. ex. 4772
caen_versiuneopțional string | null Opţional: revizia codului din caen — 1, 2 sau 3 — când forma lui e ambiguă (4932 înseamnă altceva în Rev.2 şi în Rev.3). 123
per_paginaopțional text Opţional, între 1 şi 500; implicit 100. ex. 5
paginaopțional text Pagina, numărată de la 1. ex. 1

Cum se comportă

  • Normele anuale de venit pentru activităţile independente impuse la normă — pe judeţ, activitate, cod CAEN şi zona în care se desfăşoară activitatea.
  • ⚠️ O normă nu are o valoare, are una per ZONĂ. Aşa o cere legea („la locul desfăşurării activităţii") şi aşa o publică judeţele, pe coloane. În Dolj, activităţile veterinare au 52.974 lei în Craiova şi 48.600 în oraşe şi comune. Parametrul zona filtrează pe eticheta publicată de judeţ; meta.zone spune ce valori acceptă pentru judeţul cerut.
  • ⚠️ Zonele NU sunt o listă fixă — fiecare judeţ îşi defineşte propriile. Dolj: „Municipiul Craiova / Oraşe / Comune". Cluj desparte municipiile reşedinţă de cele nereşedinţă. Mureş le numeşte cu nume de oraşe: „TÂRGU MUREŞ / REGHIN / … / Zona rurală". Bucureştiul are 18, câte trei pentru fiecare administraţie de sector: „AS1FP Centru A Zona 0", „AS1FP Semicentru B Zona I", „AS1FP Periferie C+D Zona II+III", şi aşa până la AS6FP. De aceea zona e text, exact cum îl publică judeţul, şi nu un cod.
  • ⚠️ Nici granularitatea nu e aceeaşi. Dolj publică o normă per ACTIVITATE: activitatea „Comerţ cu produse agricole şi alimentare" listează şase coduri CAEN şi are o singură valoare pe zonă. Cluj publică o normă per COD: sub „Confecţionare şi/sau comercializare de încălţăminte", codul 1520 are 51.700 lei şi codul 4772 are 86.400, în aceeaşi zonă. Răspunsul le aduce pe amândouă la aceeaşi formă — un rând per activitate × cod × zonă — deci nu trebuie să ştii care judeţ publică cum.
  • ⚠️ Setul e PARŢIAL, şi ruta o spune deschis. meta.judete_acoperite listează judeţele din bază (azi 19 din 42, Bucureştiul inclus). Pentru un judeţ care nu e acolo, răspunsul e 200 cu meta.fara_date_cod = judet_neacoperit şi explicaţia — NU o listă goală, care ar trece drept „aici nu există norme". Motivul e la sursă: ANAF publică un PDF per judeţ, iar o parte sunt scanuri de imagine (fără text de citit), iar la altele antetul nu dă etichete de zonă distincte — o normă pusă pe zona greşită e o bază de impozitare greşită, deci preferăm gaura declarată. Cele şapte judeţe care lipsesc de pe pagina centrală se aduc de pe portalul DGRFP Ploieşti; trei dintre ele au intrat aşa.
  • ⚠️ Toate valorile sunt marcate de_verificat. Sunt citite automat din tabele PDF făcute de mână, fiecare judeţ altfel. Marcajul nu e o formalitate: cine calculează un impozit pe baza lor să verifice cifra în documentul judeţului, al cărui număr de decizie stă în act_normativ când sursa îl tipăreşte.
  • Activitatea se cere ca pe toată platforma. caen primeşte orice cod, de orice nivel şi din orice revizie, şi se caută în AMBELE revizii publicate (normele pentru 2026 vin cu Rev.2 şi Rev.3 pe coloane separate) — fiindcă clientul nu poate şti în care revizie a fost publicat codul lui.

La ce folosește

  • Norma de venit aplicabilă unei activităţi independente impuse la normă, în localitatea unde se desfăşoară.
  • Compararea normelor între zonele aceluiaşi judeţ — diferenţa dintre municipiu şi comună poate fi de 10-30%.
  • Compararea normelor între judeţe pentru acelaşi cod CAEN.

Structura răspunsului

CâmpTipDescriere
data.an integer Anul la care se referă datele.
data.norme[].judet_cod string Se leagă la judeţele din /locations/v1.
data.norme[].nr_crt integer Numărul activităţii în tabelul judeţului — face un rând trasabil faţă de documentul publicat. null unde sursa nu l-a numerotat.
data.norme[].activitate string Denumirea activităţii, exact cum o publică judeţul.
data.norme[].zona string Zona pentru care se aplică norma, cum o publică judeţul.
data.norme[].caen string Codul Rev.2, legat la nomenclatorul CAEN din /business/v1. null unde judeţul publică doar Rev.3.
data.norme[].caen_rev3 null Codul Rev.3, publicat începând cu normele pentru 2026.
data.norme[].norma_lei integer Norma anuală, în lei. Minimul legal e 12 × salariul minim brut (48.600 lei pentru 2026).
data.norme[].act_normativ string Temeiul: numărul deciziei direcţiei regionale, când documentul îl tipăreşte. Unde nu, temeiul e fişierul publicat, iar rândul e de_verificat.
data.norme[].de_verificat boolean Azi true pe TOT setul — v. nota despre citirea automată.
meta.sursa string Sursa oficială din care vin datele, cu licenţa ei acolo unde e cerută.
meta.paginare.pagina integer Pagina curentă, numărată de la 1.
meta.paginare.per_pagina integer Câte înregistrări are o pagină.
meta.paginare.total integer Totalul înregistrărilor care se potrivesc, dincolo de pagina curentă.
meta.paginare.pagini integer Câte pagini are lista.
meta.ani_acoperiti array Anii pentru care există norme.
meta.judete_acoperite array Judeţele din bază. Un judeţ care lipseşte NU e un judeţ fără norme.
meta.nota_acoperire string De ce totalul e o limită de jos, în proză. meta.total_e_limita_de_jos e cuvântul pe care comuţi în cod.
meta.zone array Zonele judeţului cerut, adică valorile acceptate de zona. Absent când nu s-a cerut un judeţ. La Bucureşti sunt 18: 6 administraţii de sector × 3 zone, numite cum le publică sursa („AS1FP Centru A Zona 0").
meta.fara_date data e null, iar aici stă motivul.
meta.fara_date_cod Cuvântul scurt şi STABIL al motivului, pentru clienţii care comută pe el în cod: judet_neacoperit ori set_nepopulat.
meta.caen object Cum s-a înţeles parametrul caen: codul cerut, revizia în care s-a citit şi codul pe care l-a folosit ruta. La o listă de coduri, câte un obiect pe cod.
meta.caen.cerut string Codul CAEN trimis, normalizat (litere mari, fără puncte).
meta.caen.versiune_cerut string Revizia în care s-a citit codul trimis: cea din caen_versiune, altfel prima în care există.
meta.caen.nivel string Nivelul codului folosit — la rutele de firme, al codului cerut: sectiune, subsectiune, diviziune, grupa, clasa sau agregat.
meta.caen.denumire string Denumirea codului, din nomenclatorul CAEN.

Exemple de răspuns

GEThttps://oneapi.ro/api/financiar/v1/fiscal/norme-venit?an=2026&per_pagina=5
{
    "data": {
        "an": 2026,
        "norme": [
            {
                "judet_cod": "B",
                "nr_crt": 1,
                "activitate": "Boiangerie",
                "zona": "AS1FP Centru A Zona 0",
                "caen": "1330",
                "caen_rev3": null,
                "norma_lei": 53000,
                "act_normativ": "Norme publicate de ANAF pentru 2026 (Bucuresti), fără număr de decizie în document",
                "de_verificat": true
            }
        ]
    },
    "meta": {
        "sursa": "Legislaţia fiscală, curatată manual, cu act normativ pe fiecare valoare. Cotele, pragurile şi salariul minim se citesc din registrul comun `business_indicatori_fiscali`.",
        "paginare": {
            "pagina": 1,
            "per_pagina": 5,
            "total": 11115,
            "pagini": 2223
        },
        "ani_acoperiti": [
            2026
        ],
        "judete_acoperite": [
            "B",
            "BR",
            "CJ",
            "CT",
            "CV",
            "DJ",
            "GL",
            "GR",
            "HR",
            "IL",
            "IS",
            "MM",
            "MS",
            "SB",
            "SJ",
            "SM",
            "TL",
            "TR",
            "VN"
        ],
        "nota_acoperire": "Ce perioade acoperă fiecare set şi ce e neconfirmat: /financiar/v1/fiscal/acoperire."
    }
}

Coduri de eroare

CodSlugCând apare
401neautentificatToken lipsă sau invalid.
403feature_indisponibilfinanciar.fiscal_referinta nu e în planul curent.
404caen_inexistentCodul nu există în nicio revizie CAEN.
422validarejudet care nu e codul auto al unui judeţ, caen fără forma CAEN, ori caen_versiune fără caen.
429cota_depasitaCota lunară a planului a fost depăşită (vezi Retry-After).

Toate erorile au aceeași formă. eroare.cod e stabil și e cel după care trebuie să ramifici în cod — nu după textul din mesaj, care se poate schimba.

{
    "eroare": {
        "cod": "validare",
        "mesaj": "judet care nu e codul auto al unui judeţ, caen fără forma CAEN, ori caen_versiune fără caen.",
        "detalii": {
            "an": [
                "Valoarea trimisă nu respectă regula parametrului."
            ]
        }
    }
}