Set de date normalizat, validat și reproductibil pentru SIRUTA (Sistemul Informatic al Registrului Unităților Teritorial-Administrative), publicat oficial de Institutul Național de Statistică (INS) pe portalul național de date deschise data.gov.ro.
- Versiunea și proveniența curente: consultați
data/latest/metadata.json, generat împreună cu datele. - Regulile de descoperire CKAN și sursa rezolvată curentă: consultați
sources.yml. - Licență date: CC BY 4.0 · Licență cod: WTFPL
Relația cu
romania/localitati: Acest depozit oferă registrul oficial SIRUTA curent (cu ierarhia completă județ → UAT → localitate și metadate de proveniență INS) și completează, dar nu înlocuiește depozitulromania/localitati. Aplicațiile care depind de structura specifică dinromania/localitatipot continua să îl folosească neschimbat.
| Fișier | Format | Descriere |
|---|---|---|
data/latest/siruta.csv |
CSV (RFC 4180, UTF-8, LF) | Toate înregistrările SIRUTA normalizate, sortate numeric după siruta |
data/latest/siruta.json |
JSON (UTF-8, LF) | Toate înregistrările SIRUTA normalizate |
data/latest/judete.csv |
CSV (RFC 4180, UTF-8, LF) | Nivel 1: județele și Municipiul București (nivel = 1) |
data/latest/judete.json |
JSON (UTF-8, LF) | Nivelul județ în format JSON |
data/latest/uat.csv |
CSV (RFC 4180, UTF-8, LF) | Unități administrativ-teritoriale (nivel = 2) și sectoarele Municipiului București (nivel = 3, tip = 6) |
data/latest/uat.json |
JSON (UTF-8, LF) | UAT-urile și sectoarele Bucureștiului în format JSON |
data/latest/localitati.csv |
CSV (RFC 4180, UTF-8, LF) | Localități componente și sate (nivel = 3, tip != 6) |
data/latest/localitati.json |
JSON (UTF-8, LF) | Localități componente și sate în format JSON |
data/latest/metadata.json |
JSON (UTF-8, LF) | Metadate despre ediție, proveniență CKAN/INS, SHA-256, transformări, totaluri și domenii de valori |
sources/current/siruta.csv |
CSV brut INS (;, CRLF) |
Copia exactă, octet cu octet, a fișierului oficial descărcat de la INS |
sources.yml |
YAML (UTF-8, LF) | Manifestul de descoperire CKAN și amprenta ediției curente (dataset.current) |
schema.json |
JSON Schema (2020-12) | Schema formală de validare a unei înregistrări normalizate |
sources/current/siruta.csvpăstrează exact octeții descărcați de la INS (separator;, terminații de linie CRLF și diacritice cu sedilăŞ/Ţ), astfel încât suma de control SHA-256 din depozit să corespundă identic cudata/latest/metadata.jsonșisources.yml. Fișierul.gitattributesmarcheazăsources/current/**ca-text binarypentru a preveni conversia automată a terminațiilor de linie în Git.data/latest/*.{csv,json}sunt exporturi normalizate deterministe: codificare UTF-8 validată strict, terminații de linie LF (\n), diacritice românești standard în Unicode NFC cu virgulă dedesubt (Ș/ș,Ț/ț), spații multiple compactate și sortare numerică ascendentă după codulsiruta.- Câmpul
urldin metadatele curente stochează URL-ul oficial al resursei CKAN selectate la descoperire, nu o adresă temporară de CDN rezultată în urma unei redirecționări HTTP.
Fiecare înregistrare din data/latest/*.{csv,json} respectă schema.json:
| Câmp | Tip JSON | Reprezentare CSV | Coloană INS | Descriere |
|---|---|---|---|---|
siruta |
string |
șir nevid | SIRUTA |
Codul unic SIRUTA al unității (cheie primară) |
nume |
string |
șir nevid | DENLOC |
Denumirea oficială normalizată (Unicode NFC, Ș/Ț cu virgulă) |
cod_postal |
string |
șir nevid ("0" dacă nu se aplică) |
CODP |
Codul poștal din sursa INS (păstrat ca șir) |
judet_cod_numeric |
string |
șir ("1"–"40", "51", "52") |
JUD |
Codul numeric al județului (sau "40" pentru București) |
siruta_parinte |
string |
șir nevid | SIRSUP |
Codul siruta al unității ierarhice superioare ("1" pentru nivel = 1) |
tip |
integer |
întreg | TIP |
Tipul unității conform nomenclatorului INS (1, 2, 3, 4, 6, 9, 10, 11, 17, 18, 19, 22, 23, 40) |
nivel |
integer |
întreg (1, 2, 3) |
NIV |
Nivelul ierarhic: 1 (județ), 2 (UAT), 3 (localitate / sector) |
mediu |
integer |
întreg (0, 1, 3) |
MED |
Mediul rezidențial: 0 (nivel județean), 1 (urban), 3 (rural) |
regiune |
string |
șir ("1"–"8") |
REGIUNE |
Codul regiunii de dezvoltare |
fsj |
string |
șir | FSJ |
Codul de sortare județeană din nomenclatorul INS |
nuts |
string |
șir (ex. "RO121", "RO321") |
NUTS |
Codul european NUTS 3 |
lau |
string | null |
șir (ex. "RO_1017") sau gol "" |
LAU |
Codul Local Administrative Unit (prezent pe UAT-urile de nivel 2, null/gol în rest) |
Toate codurile de identificare și clasificare (siruta, siruta_parinte, cod_postal, judet_cod_numeric, regiune, fsj, nuts, lau) sunt modelate și serializate ca șiruri de caractere, nu ca numere.
- Nu convertiți
cod_postalsau codurile de identificare la tipuri numerice (INT/Number). Conversia la întreg elimină eventualele zerouri semnificative (de exemplu, codurile poștale din București precum"10013"în sursa INS sau coduri formatate pe 6 cifre) și poate produce erori la join-uri între sisteme. - Doar
tip,nivelșimediusunt valori întregi (integer).
Cele trei partiții (judete, uat, localitati) formează o partiție disjunctă și completă a tabelului siruta:
- Nivelul 1 (
judete,nivel = 1,tip = 40):- Conține cele 41 de județe și
MUNICIPIUL BUCUREȘTI(siruta: "403"). - Toate înregistrările de nivel 1 au
siruta_parinte: "1"(valoare santinelă INS pentru rădăcina națională).
- Conține cele 41 de județe și
- Nivelul 2 și sectoarele Bucureștiului (
uat):- Include toate unitățile administrativ-teritoriale de
nivel = 2(municipii, orașe, comune șiMUNICIPIUL BUCUREȘTIcusiruta: "179132",tip: 9,siruta_parinte: "403",lau: "RO_179132"), al căror părinte este întotdeauna o înregistrare denivel = 1. - Include de asemenea cele 6 sectoare ale Municipiului București (
siruta: "179141"…"179196",BUCUREȘTI SECTORUL 1…6), care în SIRUTA aunivel = 3,tip = 6șisiruta_parinte: "179132". Deoarece sectoarele funcționează ca subdiviziuni administrativ-teritoriale la nivel de UAT, regula de partiționare le plasează înuat(nivel === 2 || (nivel === 3 && tip === 6)), nu înlocalitati.
- Include toate unitățile administrativ-teritoriale de
- Nivelul 3 (
localitati,nivel = 3 && tip != 6):- Conține localitățile componente și satele arondate unui UAT de nivel 2 (
siruta_parinteindică întotdeauna un UAT denivel = 2).
- Conține localitățile componente și satele arondate unui UAT de nivel 2 (
const fs = require('node:fs');
const uat = JSON.parse(fs.readFileSync('data/latest/uat.json', 'utf8'));
const albaIulia = uat.find((row) => row.siruta === '1017');
console.log(albaIulia);
// {
// siruta: '1017',
// nume: 'MUNICIPIUL ALBA IULIA',
// cod_postal: '0',
// judet_cod_numeric: '1',
// siruta_parinte: '10',
// tip: 1,
// nivel: 2,
// mediu: 1,
// regiune: '7',
// fsj: '1',
// nuts: 'RO121',
// lau: 'RO_1017'
// }import csv
with open("data/latest/siruta.csv", mode="r", encoding="utf-8", newline="") as f:
reader = csv.DictReader(f)
by_siruta = {row["siruta"]: row for row in reader}
sector1 = by_siruta["179141"]
parent_uat = by_siruta[sector1["siruta_parinte"]]
print(sector1["nume"], "->", parent_uat["nume"])
# BUCUREȘTI SECTORUL 1 -> MUNICIPIUL BUCUREȘTIDacă folosiți pandas, specificați dtype=str pentru coloanele de coduri:
import pandas as pd
df = pd.read_csv(
"data/latest/siruta.csv",
dtype={
"siruta": "string",
"nume": "string",
"cod_postal": "string",
"judet_cod_numeric": "string",
"siruta_parinte": "string",
"tip": "int64",
"nivel": "int64",
"mediu": "int64",
"regiune": "string",
"fsj": "string",
"nuts": "string",
"lau": "string",
},
)CREATE TABLE siruta (
siruta TEXT PRIMARY KEY,
nume TEXT NOT NULL,
cod_postal TEXT NOT NULL,
judet_cod_numeric TEXT NOT NULL,
siruta_parinte TEXT NOT NULL,
tip INTEGER NOT NULL,
nivel INTEGER NOT NULL CHECK (nivel IN (1, 2, 3)),
mediu INTEGER NOT NULL,
regiune TEXT NOT NULL,
fsj TEXT NOT NULL,
nuts TEXT NOT NULL,
lau TEXT
);
-- PostgreSQL:
-- \copy siruta FROM 'data/latest/siruta.csv' WITH (FORMAT csv, HEADER true, NULL '');
-- Interogare: toate localitățile din Municipiul Alba Iulia (SIRUTA '1017')
SELECT siruta, nume, cod_postal
FROM siruta
WHERE siruta_parinte = '1017'
ORDER BY siruta;Necesită Node.js >= 22.
# 1. Instalarea dependențelor exacte din package-lock.json
npm ci
# 2. Rularea suitei de teste unitare și de integrare
npm test
# 3. Verificarea reproductibilității numai din fișierele comise (poarta CI)
npm run check:offline
# 4. Verificarea live a derivei față de sursa oficială
npm run check
# 5. Descoperirea, descărcarea, validarea și actualizarea atomică a artefactelor
npm run updatenpm run check:offline nu accesează rețeaua. Folosește exclusiv sources/current/siruta.csv și proveniența dataset.current din sources.yml pentru a:
- verifica dimensiunea și SHA-256 ale sursei brute;
- parsa și valida strict registrul complet;
- regenera determinist toate artefactele;
- verifica paritatea dintre
sources.yml.currentșidata/latest/metadata.json; - compara numele și octeții tuturor fișierelor generate, fără a modifica fișiere urmărite de Git.
Workflow-ul de validare pentru push și pull_request folosește această comandă, astfel încât rezultatul CI să nu depindă de accesibilitatea data.gov.ro.
Comanda npm run check efectuează detecție live a derivei față de sursa oficială (live upstream drift detection):
- Interoghează fluxul CKAN stabil
package_search?q=siruta&sort=metadata_modified desc, verifică explicit organizațiainstitutul-national-de-statisticapentru fiecare candidatSIRUTA_s1și selectează cea mai recentă ediție validă. - Descarcă fișierul CSV oficial în memorie, îl normalizează, validează toate invariantele (
schema.json, unicitate, integritatea ierarhiei părinte-copil, partiții) și regenerează artefactele într-un director temporar (.tmp/check-<pid>). - Compară octet cu octet fișierele din depozit (
data/latest/*,sources/current/siruta.csv,sources.yml) cu cele regenerate, fără a modifica niciun fișier urmărit de Git.
Notă importantă: Deoarece
npm run checkverifică live sursa din amonte, comanda poate eșua dacă portaluldata.gov.ronu este accesibil din mediul curent sau dacă INS a publicat o ediție nouă ori a modificat fișierul CSV oficial. Workflow-ul programat de actualizare deține detecția live a derivei: rulează mai întâi verificarea offline, apoinpm run update, testele și încă o verificare offline. O schimbare validă este publicată pentru revizuire prin pull request.
- Sursa datelor: Institutul Național de Statistică (INS), prin organizația sa CKAN de pe
data.gov.ro. Versiunea, identificatorii, URL-ul resursei, suma de control și totalurile curente sunt îndata/latest/metadata.json, iar configurația de descoperire și sursa rezolvată sunt însources.yml. - Licența datelor (
data/latest/*,sources/current/*): Creative Commons Attribution 4.0 International (CC BY 4.0) — consultați LICENSE-DATA.md pentru detalii complete privind atribuirea și transformările aplicate. - Licența codului sursă (
scripts/*,test/*,schema.json): WTFPL — consultați LICENSE-CODE.