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.