oneapi
Autentificare
Business v1 / Statistici

Benchmark sector

Distribuţia bilanţurilor unui sector CAEN într-un an: cuartilele cifrei de afaceri şi ale profitului, mediana salariaţilor, pe total şi pe clase de mărime.

GET
https://oneapi.ro/api/business/v1/caen/{cod}/benchmark

Parametri de cale

NumeTipDescriereExemplu
codobligatoriu string Codul CAEN Rev. 2, patru cifre (ex. 6201).

Parametri de interogare

NumeTipDescriereValori acceptate
caen_versiuneopțional string | null Revizia codului (1, 2, 3), când forma lui e ambiguă. 123
anopțional integer | null Anul bilanţurilor. Implicit, cel mai nou an cu bilanţurile depuse în mare parte. ex. 2025
judetopțional string | null Judeţul sediului: indicativul auto (CJ) ori numele. ex. CJ
clasa_marimeopțional string | null micro, mica, mijlocie ori mare. Cu ea, răspunsul are doar totalul clasei. micromicamijlociemare
de_laopțional integer | null Primul an al seriei, patru cifre. ⚠️ Nu se trimite împreună cu an: ori un singur an, ori interval. ex. 2024-01-01
pana_laopțional integer | null Ultimul an al seriei, patru cifre. ⚠️ Nu se trimite împreună cu an. ex. 2024-12-31

Cum se comportă

  • Distribuţia bilanţurilor firmelor dintr-un sector într-un an: cuartilele cifrei de afaceri şi ale profitului net, mediana salariaţilor, pe total şi pe clase de mărime. Codul din cale e de orice nivel (G, 62, 4711).
  • Sectorul e CAEN-ul declarat în bilanţul acelui an (cum clasifică şi Ministerul Finanţelor), nu codul de azi din ANAF: benchmark-ul pe 2021 compară firmele care erau atunci în sector.
  • Clasa de mărime se stabileşte după numărul mediu de salariaţi, pe pragurile Legii 346/2004 (0–9, 10–49, 50–249, 250+); cifra de afaceri nu intră în clasificare.
  • Grupurile sub 5 firme nu se publică — percentilele ar descrie firme identificabile. Dacă totalul e sub prag, ruta întoarce 200 cu data: null şi meta.fara_date; clasele sub prag lipsesc din pe_clasa_marime.
  • Media cifrei de afaceri e trasă în sus de câteva firme mari (în comerţul alimentar, media e de 17 ori mediana). Pentru „firma tipică", mediana.
  • Acoperă toate formularele de bilanţ (inclusiv microîntreprinderile). Locul unei firme anume în sectorul ei: /firme/{cui}/benchmark.
  • Valorile imposibile scrise în formular (o cifră de afaceri de 300.000 de miliarde de lei, 62.355 de salariaţi la o firmă cu 275.000 de lei cifră de afaceri) devin null, nu intră în clasament ori în medii. Asigurătorii n-au rând de cifră de afaceri în formular, deci au cifra_afaceri: null.

La ce folosește

  • „Unde se situează firma mea?" — cifra de afaceri a unei firme faţă de mediana sectorului ei, în judeţ.
  • Dimensionarea unei pieţe: câte firme, ce cifră de afaceri cumulată, câţi angajaţi are un sector.
  • Praguri realiste pentru un scoring de credit ori de risc, pe sector şi clasă de mărime.

Structura răspunsului

CâmpTipDescriere
data.total.firme integer Câte firme cu bilanţ intră în grup.
data.total.cifra_afaceri.p25 number Cifra de afaceri sub care se află un sfert din firme, în lei.
data.total.cifra_afaceri.mediana integer Cifra de afaceri mediană.
data.total.cifra_afaceri.p75 number Cifra de afaceri peste care se află un sfert din firme.
data.total.cifra_afaceri.medie number Media — trasă în sus de firmele mari; mediana descrie firma tipică.
data.total.cifra_afaceri.total integer Cifra de afaceri cumulată.
data.total.profit_net.p25 integer Primul cuartil al profitului net (negativ = pierdere).
data.total.profit_net.mediana integer Profitul net median.
data.total.profit_net.p75 number Al treilea cuartil al profitului net.
data.total.profit_net.firme_profitabile integer Câte firme au profit net pozitiv.
data.total.salariati.mediana integer Numărul median de salariaţi.
data.total.salariati.medie number Numărul mediu de salariaţi pe firmă.
data.total.salariati.total integer Salariaţii cumulaţi.
data.pe_clasa_marime[].clasa_marime string Clasa de mărime: micro (0–9 salariaţi), mica (10–49), mijlocie (50–249), mare (250+).
data.pe_clasa_marime[].firme integer Câte firme cu bilanţ intră în grup.
data.pe_clasa_marime[].cifra_afaceri.p25 integer Cifra de afaceri sub care se află un sfert din firme, în lei.
data.pe_clasa_marime[].cifra_afaceri.mediana integer Cifra de afaceri mediană.
data.pe_clasa_marime[].cifra_afaceri.p75 integer Cifra de afaceri peste care se află un sfert din firme.
data.pe_clasa_marime[].cifra_afaceri.medie number Media — trasă în sus de firmele mari; mediana descrie firma tipică.
data.pe_clasa_marime[].cifra_afaceri.total integer Cifra de afaceri cumulată.
data.pe_clasa_marime[].profit_net.p25 integer Primul cuartil al profitului net (negativ = pierdere).
data.pe_clasa_marime[].profit_net.mediana integer Profitul net median.
data.pe_clasa_marime[].profit_net.p75 integer Al treilea cuartil al profitului net.
data.pe_clasa_marime[].profit_net.firme_profitabile integer Câte firme au profit net pozitiv.
data.pe_clasa_marime[].salariati.mediana integer Numărul median de salariaţi.
data.pe_clasa_marime[].salariati.medie number Numărul mediu de salariaţi pe firmă.
data.pe_clasa_marime[].salariati.total integer Salariaţii cumulaţi.
meta.an integer Anul bilanţurilor.
meta.caen object Cum s-a rezolvat codul din cale (nivel, denumire, câte clase s-au căutat).
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.
meta.caen.clase_cautate integer Câte clase CAEN, din toate reviziile purtate de firme, cad sub codul cerut.
meta.caen.clase_altele_decat_cerut integer Câte dintre ele NU sunt codul cerut. Căutarea e permisivă (traduce codul în toate ediţiile, ca să prindă firmele nerenumerotate), iar traducerea urcă uneori în clase mult mai largi — deci totalul poate fi despre mai mult decât meseria cerută.
meta.caen.nota_acoperire string Apare doar când s-a căutat şi pe alte clase decât codul cerut, şi spune ce să foloseşti dacă vrei o cifră strict despre meseria cerută.
meta.caen.clase array Clasele brute pe care s-a căutat, când sunt cel mult 20. Ca totalul să fie verificabil, nu o cifră de luat pe credit.
meta.judet string Judeţul cerut, dacă e cazul.
meta.clasa_marime string Clasa de mărime cerută, dacă e cazul.

Exemple de răspuns

GEThttps://oneapi.ro/api/business/v1/caen/4711/benchmark
{
    "data": {
        "total": {
            "firme": 68133,
            "cifra_afaceri": {
                "p25": 55842.5,
                "mediana": 227769,
                "p75": 702919.5,
                "medie": 3889683.49,
                "total": 205029106446
            },
            "profit_net": {
                "p25": -5062,
                "mediana": 0,
                "p75": 21026.5,
                "firme_profitabile": 32509
            },
            "salariati": {
                "mediana": 1,
                "medie": 5.4,
                "total": 199402
            }
        },
        "pe_clasa_marime": [
            {
                "clasa_marime": "micro",
                "firme": 66038,
                "cifra_afaceri": {
                    "p25": 51274,
                    "mediana": 210028,
                    "p75": 582197,
                    "medie": 730610.25,
                    "total": 36981298948
                },
                "profit_net": {
                    "p25": -5413,
                    "mediana": 0,
                    "p75": 17816,
                    "firme_profitabile": 30696
                },
                "salariati": {
                    "mediana": 1,
                    "medie": 1.9,
                    "total": 65638
                }
            }
        ]
    },
    "meta": {
        "an": 2025,
        "caen": {
            "cerut": "4711",
            "versiune_cerut": "Rev.3",
            "nivel": "clasa",
            "denumire": "Comerț cu amănuntul nespecializat, cu vânzare predominantă de produse alimentare, băuturi și tutun",
            "clase_cautate": 8,
            "clase_altele_decat_cerut": 7,
            "nota_acoperire": "Căutarea e permisivă: codul cerut s-a tradus în toate ediţiile CAEN, ca să prindă şi firmele nerenumerotate încă. Totalul cuprinde deci şi 7 clase diferite de [4711], iar unele pot fi mult mai largi decât codul cerut. Pentru o cifră strict despre meseria cerută, foloseşte `categorie=` de la `/caen/categorii`, care refuză clasele-sac.",
            "clase": [
                "4711",
                "4781",
                "4791",
                "4799",
                "5211",
                "5261",
                "5262",
                "5263"
            ]
        }
    }
}

Coduri de eroare

CodSlugCând apare
401neautentificatToken lipsă, invalid, expirat sau revocat.
403feature_indisponibilPlanul curent nu include funcţia de care ţine ruta.
404caen_inexistentCodul [{cod}] nu există în nicio revizie CAEN (Rev.1, Rev.2, Rev.3).
422caen_invalidCodul [{cod}] nu are forma unui cod CAEN.
422filtru_necunoscutJudeţul din judet nu există; detalii.camp spune care.
422validareUn parametru nedeclarat ori o valoare care nu trece validarea (an, caen_versiune, clasa_marime, judet). Câmpul vinovat e în detalii.
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": "caen_invalid",
        "mesaj": "Codul [{cod}] nu are forma unui cod CAEN.",
        "detalii": {
            "cod": [
                "Valoarea trimisă nu respectă regula parametrului."
            ]
        }
    }
}