Seria cursului peste denominare
Cotaţiile a una până la cinci valute între două date, pe un interval care poate traversa
denominarea din 2005. Până acum, un grafic 1998 → azi era imposibil de făcut corect: cerea două
rute şi lipirea a două serii cu 10.000 diferenţă între unităţi.
Fiecare punct îşi declară unitatea (denominare) şi vine cu două cifre: valoare, aşa cum a
publicat-o BNR atunci, şi valoare_unitara_ron, aceeaşi mărime adusă la lei noi. A doua e coloana
cu care se desenează un grafic continuu; prima e cea care se citează.
Multiplicatorul stă pe fiecare punct, nu o dată pe serie ca la /curs/interval: forintul şi
yenul se publicau la o unitate înainte de 2005 şi se publică la 100 după. multiplicator_variabil
pe serie semnalează cazul, ca nimeni să nu scoată multiplicatorul în afara buclei.
Intervalul e plafonat la 10 ani. O valută care se opreşte înaintea capătului cerut — marca germană
în 2002 — întoarce seria parţială şi apare în meta.serii_oprite, nu 404: datele cerute există,
doar se termină.
Parametri de interogare
YYYY-MM-DD. Poate fi oricât de vechi — se aliniază la acoperire.
ex. 2024-06-15
?valuta=DEM sau ?valuta=EUR,USD.
ex. EUR
Cum se comportă
- Cotaţiile a una până la cinci valute între două date, pe un interval care poate traversa denominarea din 2005.
- Până la ruta asta, un grafic 1998 → azi nu se putea face corect. Cerea două rute şi lipirea a două serii cu 10.000 diferenţă între unităţi — de unde graficul cu un salt vertical în ianuarie 2005 şi nicio explicaţie. Aici seria vine dintr-o singură cerere, cu unitatea declarată la fiecare punct.
- Fiecare punct are două cifre.
valoaree ce a publicat BNR atunci, în unitatea de atunci — cifra care se citează.valoare_unitara_rone aceeaşi mărime adusă la lei noi, comparabilă pe toată seria — coloana cu care se desenează graficul. Nu se alege una: ambele sunt necesare, pentru lucruri diferite. - Multiplicatorul stă pe FIECARE punct, nu o dată pe serie — spre deosebire de
/curs/interval, unde e constant. Peste graniţă nu e: forintul şi yenul se publicau la o unitate în epoca ROL şi se publică la 100 în cea RON. Declarat o singură dată, ar fi greşit pe jumătate de serie cu un factor de 100 care, înmulţit cu cei 10.000 ai denominării, dă un milion.multiplicator_variabilsemnalează seriile în care se schimbă. denominare_schimbataşidenominare_schimbata_laspun dacă şi unde se rupe unitatea. Graniţa e 2005-01-03, prima zi în care BNR îşi exprimă arhiva în lei noi — nu 1 iulie 2005, când a avut loc denominarea legală. Aceeaşi fereastră ambiguă declarată de/calcul/denominare.- O valută care se opreşte înaintea capătului cerut întoarce seria parţială, nu 404. Marca germană se opreşte în februarie 2002 fiindcă a încetat să existe, nu fiindcă ne lipsesc date; apare în
meta.serii_opritecu ultima zi şi motivul. Un 404 ar sugera că cererea a fost greşită. - Intervalul e plafonat la 10 ani, mult peste cele 366 de zile de la
/curs/interval, fiindcă scopul e opus: acolo „ultimele 12 luni", aici seria lungă. Plafonul se verifică DUPĂ alinierea marginilor la acoperire, deci o cerere „din 1990" nu e respinsă pentru zilele care oricum n-au date. - Marginea din dreapta se aliniază la ultima zi acoperită, nu la ziua curentă: dacă importul e în urmă, o margine pusă pe „azi" ar produce o coadă goală care arată ca o pauză de publicare. Ce s-a ajustat apare în
meta.ajustat.
La ce folosește
- Grafic al cursului pe zeci de ani, fără saltul artificial din 2005.
- Media cursului pe o perioadă care traversează denominarea.
- Urmărirea unei monede până la dispariţia ei (marcă germană, liră italiană).
Structura răspunsului
true dacă intervalul traversează 2005-01-03.
null dacă intervalul e într-o singură epocă.
true când multiplicatorul se schimbă în interval (HUF, JPY). Cine agregă seria nu poate scoate multiplicatorul în afara buclei.
ROL sau RON — unitatea punctului.
data e null, iar aici stă motivul. Intervalul e în întregime în afara arhivei.
fara_date e proză şi se poate reformula, ăsta nu.
Exemple de răspuns
{
"data": {
"de_la": "2024-06-15",
"pana_la": "2024-06-15",
"denominare_schimbata": false,
"denominare_schimbata_la": null,
"serii": []
},
"meta": {
"sursa": "BNR — arhiva cursului de schimb, ambele epoci (lei vechi şi lei noi).",
"acoperire": {
"de_la": "1998-01-05",
"pana_la": "2026-09-21"
},
"zile_interval": 1,
"fara_valori": [
"EUR"
],
"nota_multiplicator": "Multiplicatorul e pe fiecare punct, nu pe serie: la HUF şi JPY se schimbă odată cu denominarea (1 → 100).",
"temei_denominare": "Legea 348/2004 — 1 RON = 10.000 ROL, în vigoare de la 1 iulie 2005."
}
}
{
"data": {
"de_la": "2024-06-15",
"pana_la": "2024-06-30",
"denominare_schimbata": false,
"denominare_schimbata_la": null,
"serii": [
{
"valuta": "EUR",
"denumire": "Euro",
"este_moneda": true,
"valori": [
{
"data": "2024-06-17",
"denominare": "RON",
"valoare": "4.9768",
"multiplicator": 1,
"valoare_unitara": "4.9768",
"valoare_unitara_ron": "4.9768"
}
],
"prima_data": "2024-06-17",
"ultima_data": "2024-06-28",
"numar_valori": 9,
"multiplicator_variabil": false
}
]
},
"meta": {
"sursa": "BNR — arhiva cursului de schimb, ambele epoci (lei vechi şi lei noi).",
"acoperire": {
"de_la": "1998-01-05",
"pana_la": "2026-09-21"
},
"valori": 9,
"zile_interval": 16,
"nota_multiplicator": "Multiplicatorul e pe fiecare punct, nu pe serie: la HUF şi JPY se schimbă odată cu denominarea (1 → 100).",
"temei_denominare": "Legea 348/2004 — 1 RON = 10.000 ROL, în vigoare de la 1 iulie 2005."
}
}
{
"data": {
"de_la": "2024-06-15",
"pana_la": "2026-09-21",
"denominare_schimbata": false,
"denominare_schimbata_la": null,
"serii": [
{
"valuta": "EUR",
"denumire": "Euro",
"este_moneda": true,
"valori": [
{
"data": "2024-06-17",
"denominare": "RON",
"valoare": "4.9768",
"multiplicator": 1,
"valoare_unitara": "4.9768",
"valoare_unitara_ron": "4.9768"
}
],
"prima_data": "2024-06-17",
"ultima_data": "2026-09-21",
"numar_valori": 566,
"multiplicator_variabil": false
}
]
},
"meta": {
"sursa": "BNR — arhiva cursului de schimb, ambele epoci (lei vechi şi lei noi).",
"acoperire": {
"de_la": "1998-01-05",
"pana_la": "2026-09-21"
},
"valori": 566,
"zile_interval": 829,
"nota_multiplicator": "Multiplicatorul e pe fiecare punct, nu pe serie: la HUF şi JPY se schimbă odată cu denominarea (1 → 100).",
"temei_denominare": "Legea 348/2004 — 1 RON = 10.000 ROL, în vigoare de la 1 iulie 2005."
}
}
Coduri de eroare
| Cod | Slug | Când apare |
|---|---|---|
| 401 | neautentificat | Token lipsă, invalid, expirat sau revocat. |
| 403 | feature_indisponibil | Planul curent nu include funcţia de care ţine ruta. |
| 422 | validare | interval_prea_lung (peste 3.653 de zile), peste 5 valute, cod de valută invalid, pana_la înainte de de_la. |
| 429 | cota_depasita | Cota 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": "interval_prea_lung (peste 3.653 de zile), peste 5 valute, cod de valută invalid, pana_la înainte de de_la.",
"detalii": {
"de_la": [
"Valoarea trimisă nu respectă regula parametrului."
]
}
}
}