103 lines
2.1 KiB
Markdown
103 lines
2.1 KiB
Markdown
|
|
# VeriFactu - Protocolo AEAT
|
||
|
|
|
||
|
|
## Qué es VeriFactu
|
||
|
|
|
||
|
|
Sistema mandatory de facturación electrónica de la AEAT (Agencia Estatal de Administración Tributaria) de España.
|
||
|
|
|
||
|
|
## Obligatoriedad
|
||
|
|
|
||
|
|
A partir de certain fecha, todas las facturasemitidas deben registrarse en VeriFactu, independientemente del formato (紙 o digital).
|
||
|
|
|
||
|
|
## Operaciones
|
||
|
|
|
||
|
|
### Alta
|
||
|
|
|
||
|
|
Registrar una factura nueva en el sistema.
|
||
|
|
|
||
|
|
**Tipos de factura:**
|
||
|
|
- F1: Factura completa
|
||
|
|
- F2: Factura simplificada (ticket)
|
||
|
|
- R1-R5: Rectificativas
|
||
|
|
|
||
|
|
### Anulación
|
||
|
|
|
||
|
|
Cancelar una factura previamente registrada.
|
||
|
|
|
||
|
|
### Subsanación
|
||
|
|
|
||
|
|
Corregir errores en facturas ya registradas.
|
||
|
|
|
||
|
|
### Consulta
|
||
|
|
|
||
|
|
Buscar facturas previamente enviadas.
|
||
|
|
|
||
|
|
## Encadenamiento de Hash
|
||
|
|
|
||
|
|
Cada factura incluye el hash de la anterior:
|
||
|
|
|
||
|
|
```
|
||
|
|
Hash(N) = SHA256(Datos(N) + Hash(N-1))
|
||
|
|
```
|
||
|
|
|
||
|
|
Esto garantiza la integridad del registro histórico.
|
||
|
|
|
||
|
|
## URLs
|
||
|
|
|
||
|
|
### Testing (Preproducción)
|
||
|
|
```
|
||
|
|
https://prewww2.aeat.es/.../SistemaFacturacion
|
||
|
|
```
|
||
|
|
|
||
|
|
### Producción
|
||
|
|
```
|
||
|
|
https://www2.agenciatributaria.gob.es/.../SistemaFacturacion
|
||
|
|
```
|
||
|
|
|
||
|
|
## Formato
|
||
|
|
|
||
|
|
SOAP 1.1 sobre HTTPS con:
|
||
|
|
- Certificado cliente cualificado
|
||
|
|
- XML con namespaces específicos
|
||
|
|
- Response con CSV (Código de Verificación)
|
||
|
|
|
||
|
|
## CSV
|
||
|
|
|
||
|
|
Código de Verificación de 13 caracteres (o hash SHA-256 en desarrollo) que acredita el registro en Hacienda.
|
||
|
|
|
||
|
|
## Fallback Local
|
||
|
|
|
||
|
|
Cuando AEAT no está disponible (error de red, servidor caído, etc), la API guarda la factura localmente:
|
||
|
|
- Genera el hash localmente
|
||
|
|
- Guarda en `./data/` (hash storage)
|
||
|
|
- Devuelve el hash como CSV temporal
|
||
|
|
- Estado: "Correcto (local)"
|
||
|
|
|
||
|
|
Esto permite seguir operando sin conexión a AEAT.
|
||
|
|
|
||
|
|
## Certificado Cliente
|
||
|
|
|
||
|
|
La AEAT requiere certificado cliente para aceptar requests (mTLS):
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
certificates:
|
||
|
|
storage_path: ./data/certs/
|
||
|
|
cert_file: ./data/certs/personal.p12
|
||
|
|
cert_password: tu_contraseña
|
||
|
|
```
|
||
|
|
|
||
|
|
Sin certificado válido, la API cae en fallback local.
|
||
|
|
|
||
|
|
## Datos Obligatorios
|
||
|
|
|
||
|
|
- NIF del emisor
|
||
|
|
- Número de serie
|
||
|
|
- Fecha de expedición
|
||
|
|
- Tipo de factura
|
||
|
|
- Base imponible IVA
|
||
|
|
- Cuota IVA
|
||
|
|
- Importe total
|
||
|
|
|
||
|
|
## Límites
|
||
|
|
|
||
|
|
- Máximo 1000 facturas por request
|
||
|
|
- Rate limit: consultar documentación AEAT
|