# Dinaup.Validations

Cuando estás construyendo lógica fiscal, es clave asegurarte de que los datos que recibes del usuario son coherentes. Dinaup ofrece una serie de validaciones listas para usar, divididas en dos áreas principales.

## Validaciones de Geo Localización

***

### `IsSpanishPostalCode(string postalCode)`

Verifica si un código postal pertenece al sistema de códigos postales español. Acepta exactamente 5 dígitos válidos.

```csharp
Console.WriteLine(ValidationUtils.IsSpanishPostalCode("03201")); // True
Console.WriteLine(ValidationUtils.IsSpanishPostalCode("99999")); // False
```

***

### `GetSpainProvinceFromPostalCode(string postalCode)`

Devuelve el nombre de la provincia asociada a un código postal español. Si no se reconoce, devuelve una cadena vacía.

```csharp
EditarConsole.WriteLine(ValidationUtils.GetSpainProvinceFromPostalCode("28013")); // Madrid
```

***

### `NormalizeLocationName(string name)`

Convierte nombres de ciudades regionales o en lenguas cooficiales al nombre estándar español.

```csharp
EditarConsole.WriteLine(ValidationUtils.NormalizeLocationName("elx"));     // Elche
Console.WriteLine(ValidationUtils.NormalizeLocationName("Bilbo"));   // Bilbao
```

***

### `SearchCountry(string query)`

Busca países por nombre (en inglés o español), ISO2. Devuelve una lista de coincidencias parciales.

```csharp
var results = ValidationUtils.SearchCountry("ES");
foreach (var c in results)
{
    Console.WriteLine($"{c.ISO2} - {c.ESName} / {c.ENName}");
}
// ES - España / Spain
```

***

### `GetCountry(string countryNameOrCode)`

Obtiene un país concreto por ISO o nombre. Útil cuando ya se tiene el identificador o el país escrito completo.

```csharp
var spain1 = ValidationUtils.GetCountry("ES");
Console.WriteLine($"{spain1.ISO2} - {spain1.ENName}"); // ES - Spain

var spain2 = ValidationUtils.GetCountry("España");
Console.WriteLine($"{spain2.ISO2} - {spain2.ENName}"); // ES - Spain
```

***

### `IsEuCountryCode(string isoCode)`

Devuelve `true` si el código ISO de país pertenece a la Unión Europea. La comparación no distingue mayúsculas.

```csharp
Console.WriteLine(ValidationUtils.IsEuCountryCode("DE")); // True
Console.WriteLine(ValidationUtils.IsEuCountryCode("US")); // False
```

***

## Validaciones de NIF / VAT

***

### `IsVIESVatFormat(string vatID)`

Valida si el NIF está en un formato aceptado por el sistema VIES. **Solo valida estructura**, no existencia.

```csharp
Console.WriteLine(ValidationUtils.IsVIESVatFormat("ES123456789")); // True
Console.WriteLine(ValidationUtils.IsVIESVatFormat("US123456789")); // False
```

***

### `IsSpanishBusinessNIFFormat(string vatID)`

Valida si un NIF tiene formato de empresa española. Es una validación débil pensada para autocompletado o sugerencias.

```csharp
Console.WriteLine(ValidationUtils.IsSpanishBusinessNIFFormat("B12345678")); // True
Console.WriteLine(ValidationUtils.IsSpanishBusinessNIFFormat("X1234567"));  // False
```

***

### `CheckVATViesAsync(session, vatID)` *(async)*

Consulta a VIES si un NIF está dado de alta como operador intracomunitario. Necesita una sesión Dinaup válida.

```csharp
var result = await dinaupClient.CheckVATViesAsync(dinaupClient.DefaultSession, "ESB09689647");
Console.WriteLine(result.Value); // True
```

***

### `CheckVATAEATAsync(session, vatID, name)` *(async)*

Consulta a la AEAT si el NIF y el nombre coinciden. Útil para validación de facturas en España.

```csharp
var result = await dinaupClient.CheckVATAEATAsync(dinaupClient.DefaultSession, "74381925V", "Angel Albaladejo Belmonte");
Console.WriteLine(result.Identificado); // True
```

***

### `ClassifyVatTerritoriality(vatID, countryCode, postalCode, isVies)`

Clasifica la operación fiscal según el lugar de tributación del IVA: nacional, exportación, intracomunitaria, etc.

```csharp
var tipo = ValidationUtils.ClassifyVatTerritoriality("B12345678", "ES", "03201", false);
Console.WriteLine(tipo); // National

var tipo2 = ValidationUtils.ClassifyVatTerritoriality("DE267602842", "DE", "81549", true);
Console.WriteLine(tipo2); // IntraCommunity
```

Tipos posibles:

* Unknown
* Simplified
* National
* OutOfVatTerritory
* IntraCommunity
* OneStopShop
* Export


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://doc.dinaup.com/desarrollo/sdk/dinaup.validations.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
