Ir al contenido

Convertir a Factura

Transforma un presupuesto aceptado o una factura proforma en una factura definitiva con VeriFactu.

  1. Abre el presupuesto o proforma que deseas convertir.
  2. Clic en el botón “Convertir a Factura” (icono de FileText).
  3. Se abre un modal con:
    • Fecha de Factura (por defecto: hoy)
    • Fecha de Vencimiento (por defecto: +30 días)
    • Serie de Facturación (selector de series activas)
  4. Revisa los datos y clic en “Convertir a Factura” o “Convertir como Borrador” (si no tienes VeriFactu).
  5. El sistema:
    • Copia todas las líneas del presupuesto
    • Crea una factura nueva
    • Marca el presupuesto como “Aceptado”
    • Vincula el presupuesto a la factura creada
  • Toast de confirmación: “Factura creada” con botón “Ver Factura”.
  • El presupuesto muestra estado “Aceptado” con icono de vínculo a factura.
  • La factura aparece en el módulo de Facturas con estado “Borrador” o “Enviada” (según VeriFactu).
VeriFactuEstado facturaProceso
ActivadoEnviadaFactura emitida directamente con registro AEAT
No activadoBorradorFactura guardada como borrador, editable

ALERTA: Si VeriFactu está activado, la factura se emite directamente y es inmutable. Solo podrás crear facturas rectificativas.

MensajeCausaSolución
”Selecciona un negocio”No hay negocio activoSelecciona un negocio en el selector superior
”No se recibió la factura del servidor”Error en edge functionRevisa logs de Supabase Functions
”No se pudo convertir el presupuesto”Error de permisos o datos faltantesVerifica que el presupuesto tiene todos los campos completos
Información técnica

Validaciones:

CódigoRegla
VAL-01quote.customer_id NOT NULL
VAL-02invoice_date >= quote.issue_date
VAL-03due_date >= invoice_date
VAL-04business_id NOT NULL
VAL-05quote_items count >= 1

Componente principal: ConvertToInvoiceModal.tsx

Flujo de conversión:

  1. Obtener líneas del presupuesto (quote_items)
  2. Preparar datos de factura con fechas nuevas y serie seleccionada
  3. Llamar a Edge Function create-invoice
  4. Actualizar presupuesto: status = ‘accepted’, converted_to_invoice_id = invoice.id

Queries de diagnóstico:

-- Presupuestos convertidos a factura
SELECT q.quote_number, q.status,
i.invoice_number, i.status as invoice_status
FROM quotes q
INNER JOIN invoices i ON q.converted_to_invoice_id = i.id
WHERE q.business_id = '<business_id>';

Edge Functions:

  • create-invoice - Crear factura con VeriFactu
  • whatsapp-convert-quote-to-invoice - Conversión vía WhatsApp