oneapi
Sign in
Financiar v1 / Calcul

Late-payment interest between professionals

The statutory penalty interest under Law 72/2013 for contracts between professionals and between them and contracting authorities: the reference rate plus 8 percentage points, with the rate anchored to the first day of the half-year.

The period is sliced at half-year and calendar year boundaries — not at NBR decisions, because the rate does not change during a half-year.

GET
https://oneapi.ro/api/financiar/v1/calcul/penalitati/profesionisti

Query parameters

NameTypeDescriptionAccepted values
sumarequired string Required. The unpaid debt. e.g. 1000e.g. 2500.75e.g. 20000
scadentarequired string Required, YYYY-MM-DD. e.g. 2024-06-15e.g. 2023-03-01
pana_laoptional string | null Optional, defaults to the current day. e.g. 2024-03-01
neprofesionaloptional boolean | null With 1 applies the statutory interest for relationships where at least one party is NOT a professional — the one reduced by 20%, per GO 13/2011. e.g. true

How it behaves

  • ⚠️ A due date falling on a non-working day is postponed. Article 2554 of the Civil Code: a term expiring on a non-working day is deemed to expire at the end of the first working day that follows. A due date of 25 December 2024 therefore moves to 27 December, and interest runs from the 28th, not the 26th. When it applied, the response carries scadenta_prorogata; otherwise the field is absent.
  • Statutory penalty interest under Law 72/2013, for contracts between professionals and between them and contracting authorities: the reference plus 8 percentage points.
  • The rate is anchored to the first calendar day of the half-year and applies for the whole half-year, so the period is cut at half-year and year boundaries — NOT at NBR decisions. The same interval produces different slices than the general regime, and a different result.
  • The difference is real: for a due date in March 2024 and a calculation up to August 2026, the general regime yields five slices and roughly RON 2,603 of interest on a RON 10,000 debt, while the professionals' regime yields six slices and roughly RON 3,610. That is not rounding — the margins and anchoring differ.
  • The neprofesional parameter is rejected with 422: the 20% reduction does not apply to relations between professionals, and ignoring it silently would let the client believe it had been granted.
  • The same conventions as the general regime: calendar days from the day after the due date, 365/366 basis, simple interest without compounding, rounding once at the end.
  • Periods starting before 2011-09-01 are refused.

What it is for

  • Interest on an unpaid business-to-business invoice.
  • Interest owed by a contracting authority.

Response structure

FieldTypeDescription
data.debit string The principal the interest is computed on, as submitted.
data.scadenta string
data.scadenta_prorogata string
data.de_la string First day counted — the day after the due date.
data.pana_la string Last day counted, inclusive.
data.zile integer Number of calendar days in the interval.
data.regim string The regime applied: profesionisti.
data.neprofesional boolean Whether the reduction for non-professional relationships was applied.
data.penalitati string Interest due, rounded to the cent.
data.penalitati_exacte string Unrounded interest — use it when you add several computations together.
data.total string Principal plus interest.
data.perioade[].de_la string Start of the slice — the interval is cut at half-year and year boundaries.
data.perioade[].pana_la string End of the slice, inclusive.
data.perioade[].zile integer Days in the slice.
data.perioade[].referinta string The central bank reference rate in force for the slice.
data.perioade[].rata string The rate applied: reference plus the statutory margin.
data.perioade[].baza_zile_an integer 365, or 366 in leap years — hence the cut at the year boundary.
data.perioade[].dobanda string Interest for the slice, rounded.
data.perioade[].dobanda_exacta string Unrounded slice interest; these add up exactly to penalitati_exacte.
meta.temei string The legal basis for the rate and how it is applied.
meta.feliere string Why the interval is cut where it is cut.
meta.convenții object Computation conventions: days, basis, compounding, rounding.
meta.convenții.zile string Number of days covered.
meta.convenții.baza string
meta.convenții.capitalizare string
meta.convenții.rotunjire string
meta.avertisment string The result is arithmetic on public data, not legal advice.
meta.fara_date data is null and this says why. The rate is missing for part of the requested period.
meta.fara_date_cod The short, STABLE word for the reason, for clients that branch on it in code: fara_date is prose and may be rephrased, this is not.

Response examples

GEThttps://oneapi.ro/api/financiar/v1/calcul/penalitati/profesionisti?suma=1000&scadenta=2024-06-15
{
    "data": {
        "debit": "1000.00",
        "scadenta": "2024-06-15",
        "scadenta_prorogata": "2024-06-17",
        "de_la": "2024-06-18",
        "pana_la": "2026-10-07",
        "zile": 842,
        "regim": "profesionisti",
        "neprofesional": false,
        "penalitati": "336.97",
        "penalitati_exacte": "336.97058163",
        "total": "1336.97",
        "perioade": [
            {
                "de_la": "2024-06-18",
                "pana_la": "2024-06-30",
                "zile": 13,
                "referinta": "7.00",
                "rata": "15.00",
                "baza_zile_an": 366,
                "dobanda": "5.33",
                "dobanda_exacta": "5.3278688524"
            }
        ]
    },
    "meta": {
        "temei": "Legea 72/2013 coroborat cu OG 13/2011 art. 3 alin. (2^1): rata de referinţă plus 8 puncte procentuale. Rata în vigoare în prima zi calendaristică a semestrului se aplică pentru întregul semestru.",
        "feliere": "Perioada e tăiată la graniţele de semestru şi de an calendaristic — nu la deciziile BNR, fiindcă rata nu se schimbă în cursul semestrului.",
        "convenții": {
            "zile": "Calendaristice, din ziua următoare scadenţei până la data cerută inclusiv.",
            "baza": "365 de zile, sau 366 în anii bisecţi — de aceea perioada se taie şi la graniţa de an.",
            "capitalizare": "Niciuna. Dobânda se calculează pe debitul iniţial: art. 8 OG 13/2011 interzice anatocismul.",
            "rotunjire": "O singură dată, la final. Feliile afişate sunt rotunjite la doi bani şi pot să nu se adune exact la total; `dobanda_exacta` de pe fiecare felie se adună exact la `penalitati_exacte`."
        },
        "avertisment": "Rezultatul e un calcul aritmetic pe date publice, nu o consultanţă juridică: regimul aplicabil, data scadenţei şi eventualele clauze contractuale de penalitate le stabileşte cine cunoaşte dosarul."
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
404alt_regim_juridicThe period starts before the statutory threshold.
422validareparametru_inaplicabil for neprofesional; or malformed amount/dates.
429cota_depasitaThe plan's monthly quota has been exceeded (see Retry-After).

All errors share the same shape. eroare.cod is stable and is the value you should branch on in code — not the text in mesaj, which may change.

{
    "eroare": {
        "cod": "validare",
        "mesaj": "parametru_inaplicabil for neprofesional; or malformed amount/dates.",
        "detalii": {
            "suma": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}