Ghid tehnic
Validare localitate + județ pentru e-Factura ANAF — ghid complet
29 aprilie 2026 · 5 min citire
De când e-Factura a devenit obligatorie pentru toate tranzacțiile B2B din România (2024), ANAF validează automat fiecare câmp din factura electronică trimisă prin SPV. Unul dintre cele mai frecvente motive de respingere: combinația localitate + județ nu corespunde nomenclatorului SIRUTA.
Cum funcționează validarea ANAF
Când trimiți o factură în SPV, ANAF verifică:
- CUI-ul (codul fiscal) — trebuie să fie valid și activ
- Localitatea + județul — perechea trebuie să existe în nomenclatorul SIRUTA
- Formatul XML — conform standardului UBL 2.1
Dacă ai "Floresti" fără județ, ANAF nu știe care din cele 3+ Florești e — și respinge factura.
Endpoint de validare — /v1/validate
localitati.dev are un endpoint dedicat exact pentru acest use case:
# Validare — combinație corectă
$ curl "api.localitati.dev/v1/validate?name=Cluj-Napoca&county=CJ"
→ { "valid": true, "confidence": 1.0, "match": { "name": "Cluj-Napoca", ... } }
# Validare — combinație greșită
$ curl "api.localitati.dev/v1/validate?name=Cluj-Napoca&county=TM"
→ { "valid": false, "confidence": 0, "match": null }
# Validare — cu typo (fuzzy match)
$ curl "api.localitati.dev/v1/validate?name=clujj+napoca&county=CJ"
→ { "valid": true, "confidence": 0.85, "match": { "name": "Cluj-Napoca", ... } }
Exemplu de integrare — JavaScript
async function validateAddress(locality, county) {
const res = await fetch(
`https://api.localitati.dev/v1/validate?` +
`name=${encodeURIComponent(locality)}&county=${county}`,
{ headers: { "X-API-Key": "sk_live_..." } }
);
const data = await res.json();
if (!data.valid) {
// Arată eroare utilizatorului
return { ok: false, suggestion: data.match?.name };
}
// Folosește numele oficial din SIRUTA
return { ok: true, name: data.match.name };
}
Exemplu de integrare — Python
import requests
def validate_address(locality, county):
r = requests.get(
"https://api.localitati.dev/v1/validate",
params={"name": locality, "county": county},
headers={"X-API-Key": "sk_live_..."}
)
data = r.json()
if not data["valid"]:
raise ValueError(f"Localitate invalidă: {locality}, {county}")
# Returnează numele oficial SIRUTA
return data["match"]["name"]
Best practice pentru e-Factura
- Folosește autocomplete în formularul de adresă — așa utilizatorul selectează din lista oficială, nu scrie liber
- Validează la salvare — chiar dacă adresa vine din autocomplete, verifică perechea localitate+județ înainte de a salva
- Folosește numele din SIRUTA — dacă utilizatorul scrie "Salistea", salvează "Săliștea" (cu diacritice, forma oficială)
- Nu uita sectorul — pentru București, trebuie specificat sectorul (1-6), nu doar "București"
Creează un cont gratuit și testează endpoint-ul de validare — 100 requesturi/zi, fără card.