# VeriFactu MidAPI

API intermediaria para enviar facturas a la AEAT a través del protocolo VeriFactu.

Recibe facturas en JSON, calcula el hash encadenado, genera el XML SOAP y lo envía a la AEAT. Si la AEAT no está disponible, guarda la factura localmente (fallback).

---

## Documentación

| | |
|---|---|
| [Requisitos y setup](documentacion/PREREQUISITES.md) | Go, Python, OpenSSL, certificado, configuración |
| [API Reference](documentacion/api.md) | Endpoints, requests, responses |
| [Protocolo VeriFactu](documentacion/verifactu.md) | Operaciones, hash, URLs AEAT, XML |
| [Formato de datos](documentacion/formato_datos.md) | NIF, fechas, tipos factura, IVA, ejemplo JSON |
| [Formatos de entrada](documentacion/formatos.md) | native, dolibarr, y cómo añadir nuevos |
| [Arquitectura](documentacion/arqui.md) | Capas, flujo de datos, cifrado |
| [Seguridad](documentacion/seguridad.md) | Certificados, RSA, HTTPS |
| [Certificados](documentacion/certificado_pruebas.md) | Obtener y configurar certificado FNMT |
| [Tokens](documentacion/tokens.md) | Sistema de autenticación por tokens |
| [Configuración](documentacion/config.md) | config.yml, variables de entorno |
| [Testing](documentacion/testing.md) | Tests, depuración |
| [Errores](documentacion/ERRORES.md) | Códigos de error |

---

## Endpoints

| Método | Ruta | Descripción |
|--------|------|-------------|
| `GET` | `/api/v1/health` | Health check |
| `GET` | `/api/v1/auth/public-key` | Clave pública RSA |
| `POST` | `/api/v1/auth/register` | Registrar certificado .p12 |
| `GET` | `/api/v1/formats` | Lista formatos disponibles |
| `POST` | `/api/v1/facturas` | Alta de factura (formato auto-detectado) |
| `POST` | `/api/v1/facturas/anular` | Anular factura |

---

## Estado

- [x] Alta de facturas con hash encadenado
- [x] Fallback local
- [x] Registro y validación de certificados
- [x] Anulación de facturas
- [ ] Consultas
- [ ] Subsanación
- [x] Soporte de campos PascalCase y snake_case en registro
- [x] Documentación de errores AEAT y solución de problemas con certificados P12
