Libro de Facturas
Exportar contenido
Genera el libro registro oficial de facturas emitidas o recibidas, obligatorio para la AEAT.
- Accede a la pestana “Libros” en Informes.
- Sub-pestana: “Facturas Emitidas” o “Facturas Recibidas”.
- Selecciona el ano y trimestre (o rango personalizado).
- Revisa la tabla con todas las facturas del periodo.
- Exporta a Excel para envio a la asesoria.
Columnas del libro
Sección titulada «Columnas del libro»| Columna | Descripcion |
|---|---|
| Nº Factura | Numero de serie completo |
| Fecha | Fecha de emision (DD/MM/YYYY) |
| Cliente/Proveedor | Nombre del receptor/emisor |
| NIF/CIF | Identificacion fiscal |
| Base Imponible | Subtotal sin IVA |
| Tipo IVA % | Porcentaje aplicado |
| Cuota IVA | Importe de IVA |
| Rec. Equiv. | Recargo de equivalencia (si aplica) |
| Retencion | IRPF retenido (si aplica) |
| Total | Importe final |
Validacion de datos
Sección titulada «Validacion de datos»Indicador visual: Si una factura tiene errores de calculo, aparece:
- Fondo rojo en la fila.
- Icono de alerta (triangulo amarillo).
- Badge “Error” en la columna IVA.
Causas de error:
- IVA calculado incorrectamente.
- Total no coincide con base + IVA - retencion.
- Datos faltantes.
Detalles tecnicos — Libro de Facturas
Sección titulada «Detalles tecnicos — Libro de Facturas»Detalles técnicos
Componente: src/features/accounting/sub-modules/reporting/components/registers/InvoiceRegisterReport.tsx
Validacion de calculo:
import { validateTaxCalculation } from "@/features/taxes/services/taxValidationService";
const validation = validateTaxCalculation({ subtotal: record.base_imponible, tax_rate: record.tax_rate, total_tax: record.tax_amount, total_amount: record.total_amount, retention_amount: record.retention_amount, equivalence_surcharge: record.equivalence_surcharge,});
if (!validation.valid) { // Marcar fila con fondo rojo // Mostrar icono de alerta}Totales calculados:
const totals = { base_imponible: data.reduce((sum, r) => sum + r.base_imponible, 0), tax_amount: data.reduce((sum, r) => sum + r.tax_amount, 0), equivalence_surcharge: data.reduce((sum, r) => sum + (r.equivalence_surcharge || 0), 0), retention_amount: data.reduce((sum, r) => sum + (r.retention_amount || 0), 0), total_amount: data.reduce((sum, r) => sum + r.total_amount, 0),};