oneapi
Autentificare
Financiar v1 / Calendar

Calendarul unui an

Tabelul pe douăsprezece luni al unui an, dintr-o singură cerere: zile calendaristice, weekend,
sărbători, punţi, zile lucrătoare — plus unde cad sărbătorile şi punţile, nu doar câte sunt.

De ce e rută şi nu /zile-lucratoare chemat de douăsprezece ori: acolo întrebarea e „câte sunt
între două date", iar răspunsul un număr cu defalcare. Aici forma răspunsului e un tabel anual, iar
motivul pentru care cineva îl cere e să vadă distribuţia. În 2026, ianuarie are 18 zile lucrătoare
şi iulie are 23 — diferenţa nu se vede dintr-un total.

Punţile fac cifra pe sectorul public PROVIZORIE pentru anii viitori. Ele vin din hotărâri de
Guvern, iar pentru un an în care HG-ul n-a fost încă emis tabelul arată zero punţi — ceea ce nu
înseamnă că nu vor fi. Câmpul provizoriu o spune, iar punti_stabilite dă numărul celor
publicate. Un răspuns care ar da acelaşi număr pentru ambele sectoare fără să declare asta ar fi
folosit la planificat concedii pe o cifră care se mişcă.

Ambele totaluri vin oricum, zile_lucratoare_privat şi zile_lucratoare_public, ca diferenţa
dintre sectoare să nu ceară o a doua cerere. sector alege doar care dintre ele ajunge în câmpul
principal.

Defalcarea se verifică pe fiecare lună, nu doar pe an: calendaristice − weekend − sărbători în zile
lucrătoare − punţi = zile lucrătoare.

GET
https://oneapi.ro/api/financiar/v1/calendar

Parametri de interogare

NumeTipDescriereValori acceptate
anopțional integer | null Opţional: anul, AAAA (1990–2100). Fără el, anul curent. 1990 – 2100
sectoropțional string | null Opţional: privat (implicit) sau public. Diferă prin punţile de HG. privatpublic

Cum se comportă

  • Tabelul pe douăsprezece luni al unui an, dintr-o singură cerere: zile calendaristice, weekend, sărbători, punţi, zile lucrătoare — plus unde cad sărbătorile şi punţile, nu doar câte sunt.
  • De ce e rută şi nu /zile-lucratoare chemat de douăsprezece ori: acolo întrebarea e „câte sunt între două date", iar răspunsul un număr cu defalcare. Aici forma răspunsului e un tabel anual, iar motivul pentru care cineva îl cere e distribuţia. În 2026, ianuarie are 18 zile lucrătoare şi iulie are 23 — diferenţa nu se vede dintr-un total.
  • Punţile fac cifra pe sectorul public PROVIZORIE pentru anii viitori. Ele vin din hotărâri de Guvern, iar pentru un an în care HG-ul n-a fost încă emis tabelul arată zero punţi — ceea ce nu înseamnă că nu vor fi. provizoriu o spune, punti_stabilite dă numărul celor publicate. Un răspuns care ar da acelaşi număr pentru ambele sectoare fără să declare asta ar fi folosit la planificat concedii pe o cifră care se mişcă.
  • Pentru anii încheiaţi cifra e definitivă şi diferenţa se vede: 2024 are 252 de zile lucrătoare pe privat şi 249 pe public, din trei punţi; 2025 are 248 şi 247, dintr-una singură.
  • Ambele totaluri vin oricum — zile_lucratoare_privat şi zile_lucratoare_public — ca diferenţa dintre sectoare să nu ceară o a doua cerere. sector alege doar care dintre ele ajunge în câmpul principal.
  • Defalcarea se verifică pe fiecare lună, nu doar pe an: calendaristice − weekend − sărbători în zile lucrătoare − punţi = zile lucrătoare. Punţile care cad în weekend sau peste o sărbătoare nu scad nimic, fiind deja numărate.
  • O zi poate purta două sărbători — 1 iunie 2026 e şi Ziua Copilului, şi a doua zi de Rusalii. De aceea sarbatori e o listă de ZILE, fiecare cu sărbătorile ei, nu o listă de sărbători.
  • Sărbătorile se calculează, nu se citesc dintr-un tabel, iar regulile sunt versionate pe anul intrării în vigoare — de aceea acoperirea e 1990–2100 fără date de import. Punţile, în schimb, sunt acte normative şi există doar de când au fost emise.
  • Orele de muncă nu sunt aici: sunt la /norma-lucru?luna=AAAA-LL, cu altă unitate şi cu convenţia de 8 ore declarată.

La ce folosește

  • Planificarea unui an: unde cad sărbătorile şi punţile, lună cu lună.
  • Norma de zile lucrătoare pentru bugetul de personal.
  • Compararea sectorului privat cu cel public, fără două cereri.

Structura răspunsului

CâmpTipDescriere
data.an integer Anul la care se referă datele.
data.sector string Sectorul instituţional ori economic.
data.zile_lucratoare integer Totalul anului, pentru sectorul cerut.
data.total object Defalcarea pe an, plus ambele totaluri de zile lucrătoare.
data.total.zile_calendaristice number
data.total.zile_weekend number
data.total.sarbatori_in_zile_lucratoare number
data.total.punti_hg_scazute number
data.total.zile_lucratoare_privat integer
data.total.zile_lucratoare_public integer
data.punti_stabilite integer Câte punţi de HG sunt publicate pentru anul acesta.
data.provizoriu string true când anul e curent sau viitor şi nu există încă nicio punte publicată — cifra pe public se poate schimba.
data.luni[].luna integer Luna la care se referă valoarea.
data.luni[].perioada string Perioada la care se referă valoarea.
data.luni[].de_la string Începutul intervalului acoperit.
data.luni[].pana_la string Sfârşitul intervalului acoperit, inclusiv.
data.luni[].zile_lucratoare integer Ale lunii, pentru sectorul cerut.
data.luni[].defalcare object Calendaristice, weekend, sărbători în zile lucrătoare, punţi scăzute. Identitatea se verifică pe fiecare lună.
data.luni[].zile_lucratoare_privat integer
data.luni[].zile_lucratoare_public integer
data.luni[].sarbatori string Zilele de sărbătoare ale lunii, fiecare cu sărbătorile ei — suprapunerile sunt vizibile.
data.luni[].punti string Punţile lunii, cu actul normativ care le-a stabilit.
meta[] string[] Plicul răspunsului: sursa, prospeţimea şi precizările care însoţesc datele.

Exemple de răspuns

GEThttps://oneapi.ro/api/financiar/v1/calendar
{
    "data": {
        "an": 2026,
        "sector": "privat",
        "zile_lucratoare": 250,
        "total": {
            "zile_calendaristice": 365,
            "zile_weekend": 104,
            "sarbatori_in_zile_lucratoare": 11,
            "punti_hg_scazute": 0,
            "zile_lucratoare_privat": 250,
            "zile_lucratoare_public": 250
        },
        "punti_stabilite": 0,
        "provizoriu": true,
        "luni": [
            {
                "luna": 1,
                "perioada": "2026-01",
                "de_la": "2026-01-01",
                "pana_la": "2026-01-31",
                "zile_lucratoare": 18,
                "defalcare": {
                    "zile_calendaristice": 31,
                    "zile_weekend": 9,
                    "sarbatori_in_zile_lucratoare": 4,
                    "punti_hg_scazute": 0
                },
                "zile_lucratoare_privat": 18,
                "zile_lucratoare_public": 18,
                "sarbatori": [
                    {
                        "data": "2026-01-01",
                        "sarbatori": [
                            {
                                "cod": "anul_nou_1",
                                "denumire": "Anul Nou",
                                "mobila": false
                            }
                        ]
                    }
                ],
                "punti": []
            }
        ]
    },
    "meta": {
        "temei": "Sărbătorile legale: art. 139 din Codul Muncii. Punţile: hotărâri de Guvern, act cu act.",
        "nota_defalcare": "Pe fiecare lună: calendaristice − weekend − sărbători în zile lucrătoare − punţi = zile lucrătoare. Punţile care cad în weekend sau peste o sărbătoare nu scad nimic, fiind deja numărate.",
        "nota_sector": "Punţile de HG se aplică, de regulă, doar instituţiilor publice. `zile_lucratoare` urmează `sector`; ambele totaluri vin oricum în răspuns.",
        "nota_provizoriu": "Pentru 2026 nu există încă nicio punte publicată prin HG, deci cifra pe sectorul public coincide azi cu cea pe privat şi se poate schimba. Nu înseamnă că nu vor fi punţi.",
        "nota_suprapuneri": "O zi poate purta două sărbători (1 iunie 2026: Ziua Copilului şi a doua zi de Rusalii). De aceea `sarbatori` e o listă de ZILE, fiecare cu sărbătorile ei.",
        "sarbatorile_anului": "/financiar/v1/sarbatori?an=2026",
        "puntile_anului": "/financiar/v1/punti?an=2026"
    }
}

Coduri de eroare

CodSlugCând apare
401neautentificatToken lipsă, invalid, expirat sau revocat.
403feature_indisponibilPlanul curent nu include funcţia de care ţine ruta.
422validareAn în afara intervalului 1990–2100, ori sector în afara listei.
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": "An în afara intervalului 1990–2100, ori sector în afara listei.",
        "detalii": {
            "an": [
                "Valoarea trimisă nu respectă regula parametrului."
            ]
        }
    }
}