Saltar al contenido principal

Facturas

Las facturas representan cobros enviados a los clientes. Cada factura contiene line items que detallan los productos y valores cobrados.

Estados de la Factura​

draft → open → paid
↓ ↓
void uncollectible
StatusDescripción
draftBorrador. Puede ser editada, se pueden agregar/eliminar ítems
openFinalizada. Cobrable, puede recibir pagos y tener créditos aplicados
paidTotalmente pagada
voidAnulada. Los créditos aplicados son restaurados, las cuotas canceladas
uncollectibleMarcada como incobrable (write-off)

Campos de la Factura​

Identificación​

CampoDescripción
NúmeroNúmero secuencial único (formato: INV-YYYY-NNNNNN)
Cuenta de cobroCliente que recibirá la factura
SuscripciónSuscripción asociada (opcional)
EmpresaEmpresa emisora (para multi-empresa)

Valores (en BRL)​

CampoDescripción
SubtotalSuma de los line items antes de descuentos e impuestos
DescuentoTotal de descuento aplicado
ImpuestosTotal de impuestos calculados
Total retenidoImpuestos retenidos (PIS/COFINS/IRPJ)
Valor netoValor neto después de retenciones
TotalValor final (subtotal - descuento + impuestos)
Valor adeudadoMonto total a pagar
Valor pagadoMonto ya recibido
Valor restanteSaldo pendiente

Configuración​

CampoDescripción
Método de cobrocharge_automatically, manual_charge o manual_invoice
Razón de cobrosubscription_cycle, subscription_create, subscription_update o manual
Política de NF-edisabled, on_finalization, on_full_payment o per_installment
Fecha de vencimientoCalculada a partir de los días de plazo del cliente

Line Items​

Cada factura contiene ítems de línea que detallan los cobros:

CampoDescripción
Tiposubscription o invoiceitem
DescripciónTexto descriptivo
CantidadCantidad cobrada
Valor unitarioPrecio por unidad
Valor totalCantidad × valor unitario
ProrationSi el ítem es un prorrateo proporcional
PeríodoInicio y fin del período cobrado

Operaciones​

Crear Factura​

Al crear una factura, informe:

  • Cuenta de cobro (obligatorio)
  • Line items con descripción, cantidad y valor
  • Fecha de vencimiento (o usa los días de plazo del cliente)
  • Cuotas (opcional, mínimo 2, la suma debe ser igual al total)
  • Política de NF-e (opcional)

El número de la factura se genera automáticamente usando lock advisory de PostgreSQL para prevenir duplicación.

Editar Factura​

Las facturas draft y open aceptan la edición de todos los campos. Una vez liquidada — paid, void o uncollectible — la factura mantiene sus condiciones bloqueadas:

EstadoCampos editables
draft, openTodos
paidID público, suscripción, descripción, ítems, metadatos, ID externo, política de emisión de la NF-e y línea de descripción de la NF-e
void, uncollectibleID público, suscripción, descripción, ítems, metadatos e ID externo

Empresa, método de cobro, política de intereses y multa, vencimiento, período y pie de página quedan bloqueados. Los ítems pueden corregirse (por la API o con la edición inline de la pestaña de ítems, tras un aviso), pero no mientras la factura tenga una NF-e emitida o en proceso — cancélela antes. La regla vale en el dashboard, la API y el MCP: cambiar un campo bloqueado responde 422 con el código INVOICE_FIELD_LOCKED, listando los campos rechazados. Reenviar un campo bloqueado con el mismo valor ya guardado no se considera un cambio.

Finalizar (draft → open)​

Al finalizar una factura:

  1. Valida que exista al menos 1 line item
  2. Valida que la suma de las cuotas = total (si tiene cuotas)
  3. Calcula impuestos automáticamente
  4. Aplica créditos automáticamente (FIFO: vencimiento más próximo primero, luego más antiguo)
  5. Si el método es charge_automatically: intenta cobrar inmediatamente

Marcar como Pagada​

  • Soporta pagos parciales
  • Al recibir el valor total, el status cambia a paid
  • Crea un registro de transacción

Anular (Void)​

Al anular una factura:

  • Los créditos aplicados son restaurados automáticamente
  • Las cuotas pendientes son canceladas
  • El motivo de la anulación es almacenado

Deshacer Pago​

Revierte una factura de paid a open:

  • Restablece el valor pagado a cero
  • Crea una transacción de ajuste (valor negativo)
  • Almacena el motivo en el metadata

Marcar como Incobrable​

Marca la factura como write-off. Irreversible. Ningún intento automático de pago será realizado.

Generación Automática de Números​

Los números de factura se generan secuencialmente por año usando advisory locks de PostgreSQL. Formato: INV-\{año\}-\{secuencial con 6 dígitos\}.

Ejemplo: INV-2026-000147

Capturas de pantalla​

Lista de facturas​

La pantalla /dashboard/invoices lista todas las facturas con filtros por status, cuenta de cobro, empresa emisora, período y medio de pago. Cada fila muestra el número, el cliente, el valor, el vencimiento, el status y acciones rápidas (descargar PDF, copiar boleto/PIX, marcar como pagada).

Lista de facturas del dashboard con filtros y acciones

Detalle de la factura​

La página /dashboard/invoices/[id] muestra la factura completa: ítems (con cantidad y valor unitario), totales, descuentos, créditos aplicados, impuestos retenidos, historial de pagos, NF-e vinculada y línea de tiempo de eventos.

Detalle de una factura con ítems, totales e historial