# Códigos de Error

## Errores de autenticación

| Código | Descripción |
|--------|-------------|
| `missing_fields` | Faltan campos obligatorios en el registro |
| `invalid_json` | El cuerpo de la petición no es JSON válido |
| `invalid_password_encrypted` | La contraseña cifrada no es Base64 válido |
| `decrypt_failed` | No se pudo descifrar la contraseña con la clave privada RSA |
| `file_not_found` | El archivo de certificado no existe |
| `invalid_password_or_format` | Contraseña incorrecta o formato de certificado inválido |
| `certificate_not_yet_valid` | El certificado aún no es válido |
| `certificate_expired` | El certificado ha expirado |
| `certificate_expiring_soon` | El certificado caduca en menos de 30 días (warning) |
| `temp_storage_failed` | Error guardando el certificado temporal |
| `storage_failed` | Error moviendo el certificado a almacenamiento permanente |
| `token_generation_failed` | Error generando el token de sesión |

## Errores de validación de facturas

La API devuelve `validation_failed` con detalles por campo:

```json
{
  "success": false,
  "error": "validation_failed: factura.emisor_nif: invalid NIF format; ..."
}
```

| Campo | Error |
|-------|-------|
| `tipo` | Debe ser `alta` o `anulacion` |
| `factura.emisor_nif` | Vacío o formato inválido (esperado: 9 caracteres, regex `^[A-Z0-9]\d{7}[A-Z]$`) |
| `factura.num_serie` | Vacío |
| `factura.fecha_expedicion` | Vacío o formato inválido (esperado: `dd-mm-yyyy`) |
| `factura.tipo_factura` | Vacío o no es `F1`, `F2`, `R1`-`R5` |
| `factura.iva[]` | Sin registros, o base/cuota/tipo negativos |
| `factura.importe_total` | Menor o igual a 0 |
| `sistema.nombre` | Vacío |
| `sistema.nif_proveedor` | Vacío |
| `sistema.version` | Vacío |

## Errores de procesamiento

| Código | Descripción |
|--------|-------------|
| `hash_storage_error` | Error leyendo el último hash almacenado |
| `hash_save_error` | Error guardando el hash de la factura actual |
| `aeat_error: <detalle>` | Error comunicando con la AEAT |
| `aeat_fault: <detalle>` | Fault SOAP devuelto por la AEAT |

## Errores AEAT

La AEAT devuelve códigos de error en el campo `CodigoErrorRegistro` de la respuesta SOAP. Consulta la documentación oficial de la AEAT para la lista completa.
