Dinaup.Validations
ValidationUtils, Municipios y CodigosPostales comprueban NIF y VAT, consultan VIES y AEAT, clasifican el IVA y resuelven países, provincias y municipios del INE.
ValidationUtils, Municipios y CodigosPostales (namespace Dinaup) comprueban datos fiscales y geográficos antes de guardarlos. Las consultas a VIES y a la AEAT se hacen con un DinaupClientC conectado, desde el servidor de Dinaup.
Antes de empezar
- Paquete
Dinaupinstalado. Ver SDK .NET. - Para
CheckVATViesAsyncyCheckVATAEATAsync, un cliente conectado. Ver Cliente Dinaup.
Códigos postales, provincias y municipios
| Método | Qué hace |
|---|---|
ValidationUtils.IsSpanishPostalCode(postalCode) | true si son cinco dígitos y los dos primeros corresponden a una provincia. |
ValidationUtils.GetSpainProvinceFromPostalCode(postalCode) | Nombre de la provincia, o cadena vacía. |
CodigosPostales.GetMunicipiosByCP(cp) | Los municipios del INE que comparten ese código postal. |
Municipios.AllMunicipios | Todos los municipios del INE. |
Municipios.GetMunicipioByCodigoINE(codigoINE) | Un municipio por su código de cinco dígitos, o null. |
Municipios.GetMunicipio(nombre, codigoProvincia = null) | Un municipio por nombre, sin distinguir mayúsculas ni acentos y con formas bilingües (Alicante encuentra Alicante/Alacant). |
Municipios.SearchMunicipio(query, codigoProvincia = null) | Municipios cuyo nombre contiene las palabras de query. |
Municipios.GetMunicipiosByProvincia(codigoProvincia) | Los municipios de una provincia ("03" para Alicante). |
Municipios.IsValidMunicipio(nombre, codigoProvincia = null) | true si es un municipio real, y de esa provincia si la indicas. |
ValidationUtils.NormalizeLocationName(name) | El nombre en castellano (elx a Elche, Bilbo a Bilbao, Girona a Gerona). De Alicante/Alacant toma el primer tramo; lo que no reconoce vuelve en minúsculas. |
ValidationUtils.GetNormalizedAddressDataWithGoogleMaps(codigoPostal, pais, provincia, municipio, apiKey, language = "es") | Consulta Google Maps con tu clave y devuelve un NormalizedAddress con Country, CountryCode, Province, City y PostalCode. |
Cada MunicipioData trae CodigoProvincia (dos dígitos), CodigoMunicipio (tres), DigitoControl, Nombre como lo publica el INE, CodigoINE (cinco dígitos) y CodigoINEConDC (seis).
ValidationUtils.GetSpainProvinceFromPostalCode("28013"); // Madrid
Municipios.GetMunicipio("Elche", "03").CodigoINE; // 03065Países
ValidationUtils.AllCountryData es la lista de CountryData (ISO2, ENName, ESName, AllNames) y ValidationUtils.CountryEuCodes, los códigos de la Unión Europea.
| Método | Qué hace |
|---|---|
ValidationUtils.SearchCountry(query) | Coincidencias parciales por nombre en inglés o español, o por ISO2. |
ValidationUtils.GetCountry(countryCodeOrNAme) | Un país por ISO2 o nombre completo. |
ValidationUtils.IsEuCountryCode(countryCode) | true si el ISO2 es de la Unión Europea, sin distinguir mayúsculas. |
Reglas de región
ValidationUtils.IsLocationMatched(regionRule, isIncludeMode, inputCountryCode, inputProvinceCode, inputPostalCode) decide si una ubicación cumple una regla. regionRule es una lista separada por comas de patrones: ES (país), ES[Tenerife] (provincia, por nombre o por código postal), ES[Canarias] (códigos postales 35 y 38) y ES[!Tenerife] para negar una provincia.
- Con
isIncludeModeentruesolo pasan las ubicaciones que coinciden; enfalse, todas salvo esas. - Una regla vacía deja pasar todo y un país vacío no pasa nunca.
- La negación se evalúa antes y gana en los dos modos.
ValidationUtils.IsLocationMatched("ES[!Canarias]", false, "ES", "Alicante", "03201"); // True
ValidationUtils.IsLocationMatched("ES[!Canarias]", false, "ES", "Las Palmas", "35001"); // False
ValidationUtils.IsLocationMatched("ES,PT", true, "FR", "", "75001"); // FalseNIF y VAT
| Método | Qué hace |
|---|---|
ValidationUtils.IsVIESVatFormat(vatNumber) | true si tiene al menos cinco caracteres y empieza por el código de un país de la UE. Solo valida la estructura. |
ValidationUtils.IsSpanishBusinessNIFFormat(taxID) | true si parece un NIF de empresa española: no empieza por un código de país de la UE, ni por dígito, ni por X, Y, Z, K, L o M. Es un filtro rápido, no una validación. |
dinaupClient.CheckVATViesAsync(vatid) | Pregunta a VIES si es operador intracomunitario. bool?: true confirmado, false no lo es (o formato inválido, o país no comunitario) y null si VIES no responde. |
dinaupClient.CheckVATAEATAsync(vatid, name) | Pregunta a la AEAT si el NIF y el nombre coinciden. Devuelve un CheckVATAEATResponse con Identificado, Nif, Nombre y Resultado; Identificado es true cuando Resultado vale IDENTIFICADO. |
Si la AEAT no contesta, CheckVATAEATAsync no lanza: devuelve Resultado vacío, que significa "sin veredicto", no un rechazo. Con un NIF vacío o de menos de 4 caracteres devuelve la respuesta vacía sin preguntar.
Territorialidad del IVA
ValidationUtils.ClassifyVatTerritoriality(nif, countryCode, postalCode, isVies) clasifica una operación por el lugar de tributación y devuelve un VatTerritoriality:
| Valor | Cuándo |
|---|---|
Simplified | Sin NIF: venta simplificada, típica de TPV. |
Export | País fuera de la UE. |
OutOfVatTerritory | España con código postal de Canarias (35, 38), Ceuta (51) o Melilla (52). |
National | Resto de España. |
IntraCommunity | Otro país de la UE con isVies en true. |
OneStopShop | Otro país de la UE sin VIES: régimen de ventanilla única. |
Unknown | Reservado para datos insuficientes. |
ValidationUtils.ClassifyVatTerritoriality("DE123456789", "DE", "81549", true); // IntraCommunityEl campo de impuestos de una venta está en el Catálogo de secciones del núcleo.