# VeriFactu MidAPI API intermediaria para la comunicación con el sistema de facturación VeriFactu de la AEAT (Agencia Estatal de Administración Tributaria) de España. ## Propósito Esta API actúa como intermediaria entre aplicaciones empresariales y el sistema VeriFactu de Hacienda, permitiendo: - **Alta de facturas**: Registro de facturas emitidas en el sistema de Hacienda - **Anulación de facturas**: Cancelación de facturas previamente registradas - **Gestión de certificados**: Registro y validación de certificados digitales cualificados - **Sistema de tokens**: Autenticación mediante tokens para operaciones con facturas ## Características - Implementación en **Go 1.26+** - Sin dependencias externas - **Endpoints REST** para integración - Criptografía **RSA** para cifrado de contraseñas - certificados almacenados temporalmente para validación, luego de forma permanente - Tokens de acceso similares a APIs como OpenAI ## Estructura del Proyecto ``` VerifactuMidAPI/ ├── api/ → Handlers HTTP, rutas ├── internal/ → Lógica de negocio │ ├── cert/ → Gestión de certificados │ ├── config/ → Configuración │ └── crypto/ → Criptografía RSA ├── verifactu/ → Cliente SOAP para AEAT ├── documentacion/ → Documentación técnica └── test/ → Pruebas ``` ## Inicio Rápido ```bash # Compilar go build -o verifactu-api.exe ./main.go # Ejecutar ./verifactu-api.exe ``` ## Configuración Editar `config.yml`: ```yaml server: port: 6789 verifactu: production: false # true para producción certificates: storage_path: ./data/certs/ crypto: keys_path: ./keys/ ``` ## Estado - [x] Alta de facturas - [x] Fallback local (cuando AEAT no disponible) - [x] Tokens para certificados - [x] Registro de certificados - [x] Cifrado RSA de contraseñas - [x] Fallback a local cuando AEAT devuelve error - [ ] Anulación de facturas (básico) - [ ] Consultas - [ ] Subsanación - [ ] Conexión real con AEAT (certificado necesario en servidor con Python cryptography) ## Pruebas ```bash # Tests de certificados python test/run_tests.py # Test de factura python test_invoice.py ``` ## Notas - AEAT devuelve 403 Forbidden (necesita certificado cliente) - Fallback local guarda facturas cuando AEAT no disponible - Certificado se convierte usando Python cryptography