Ir al contenido

Gestionar Series

Crea, edita y gestiona las series de numeración para tus documentos.

El sistema agrupa las series en acordeones según el tipo de documento:

TipoIconoDescripción
Series de FacturasFileTextFacturas normales y rectificativas
Series de PresupuestosFileCheckOfertas y cotizaciones
Series de ProformasFileClockFacturas proforma
Series de AlbaranesTruckDocumentos de entrega
  1. Navega a Configuración > Facturación > Series.
  2. Despliega el acordeón del tipo de documento deseado.
  3. Clic en “Nueva Serie” (botón con icono +).
  4. Completa el formulario:
CampoObligatorioDescripciónEjemplo
NombreIdentificador de la serieFacturas 2026
PrefijoPrefijo del número de documento (1-10 chars)FAC
Próximo númeroNoNúmero inicial (por defecto: 1)1
Relleno de cerosNoCantidad de dígitos (1-10, por defecto: 6)6
  1. Clic en “Guardar”.

Ejemplo de numeración generada:

Prefijo: FAC
Próximo número: 1
Relleno: 6
Resultado: FAC-000001, FAC-000002, FAC-000003...
  1. Localiza la serie en la lista.
  2. Clic en el botón “Editar” (icono lápiz).
  3. Modifica los campos permitidos:

Campos editables:

CampoEditable si serie nuevaEditable si serie en uso
Nombre
Prefijo❌ No (protegido)
Próximo número❌ No (protegido)
Relleno de ceros❌ No (protegido)

ALERTA: Una vez que la serie ha emitido documentos (current_number > 1), el prefijo y la numeración se bloquean para mantener la integridad de la secuencia.

  1. Localiza la serie en la lista.
  2. Usa el Switch en la columna “Estado”:
    • Verde = Activa (disponible para nuevos documentos)
    • Gris = Inactiva (no aparece en selectores)
  1. Localiza la serie en la lista.
  2. Clic en el botón “Eliminar” (icono papelera).
  3. Confirma la acción en el diálogo.

Restricciones de eliminación:

Estado de la serie¿Se puede eliminar?Mensaje
Serie nueva (current_number = 1)
Serie en uso (current_number > 1)❌ No”Solo puedes desactivarla para dejar de usarla”
  • La serie aparece en la tabla con badge “Activa” (verde).
  • Al crear un documento, la serie está disponible en el selector.
  • El próximo número se muestra correctamente formateado (ej: FAC-000001).
MensajeCausaSolución
”Prefijo requerido”Campo vacíoEscribe un prefijo de 1-10 caracteres
”Nombre requerido”Campo vacíoEscribe un nombre descriptivo
”No se puede eliminar”Serie en usoDesactiva la serie en lugar de eliminarla
Botón “Editar” bloqueadoSerie protegidaSolo puedes cambiar el nombre

Nomenclatura de series:

✅ Recomendado:
- FAC (facturas)
- PRES (presupuestos)
- ALB (albaranes)
- REC (rectificativas)
❌ Evitar:
- Prefijos muy largos: FACTURA2026
- Caracteres especiales: FAC#2026
- Espacios: FAC 2026

Organización por año:

Serie: Facturas 2026 Prefijo: FAC26 → FAC26-000001
Serie: Facturas 2027 Prefijo: FAC27 → FAC27-000001

Organización por tipo:

Serie: Facturas Prefijo: FAC → FAC-000001
Serie: Tickets Prefijo: TKT → TKT-000001
Serie: Exportación Prefijo: EXP → EXP-000001
Detalles técnicos

Tabla: invoice_sequences

CREATE TABLE invoice_sequences (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES auth.users,
name TEXT NOT NULL,
prefix TEXT NOT NULL,
current_number INTEGER DEFAULT 1,
is_active BOOLEAN DEFAULT true,
number_padding INTEGER DEFAULT 6,
created_at TIMESTAMPTZ DEFAULT now(),
CONSTRAINT number_padding_check CHECK (number_padding >= 1 AND number_padding <= 10)
);

Validaciones:

CampoReglaConstraint
nameNOT NULL
prefixNOT NULL, 1-10 chars
current_number>= 1
number_padding1-10number_padding_check
user_idFK a auth.users

RLS Policy:

-- Solo el usuario propietario puede ver/editar sus series
CREATE POLICY "invoice_sequences_user_isolation"
ON invoice_sequences
FOR ALL
USING (user_id = auth.uid());

Componente: InvoiceSeriesManager.tsx

// Protección contra eliminación
const handleDelete = async (seriesId: string, seriesToDelete: InvoiceSeries) => {
if (seriesToDelete.current_number > 1) {
toast({
title: "No se puede eliminar",
description: "Esta serie ya ha emitido documentos. Solo puedes desactivarla.",
variant: "destructive",
});
return;
}
// ... procede con la eliminación
};

Queries de diagnóstico:

-- Ver todas las series de un usuario
SELECT id, name, prefix, current_number, is_active, number_padding
FROM invoice_sequences
WHERE user_id = '<user_id>'
ORDER BY name;
-- Series protegidas (no eliminables)
SELECT id, name, prefix, current_number
FROM invoice_sequences
WHERE user_id = '<user_id>'
AND current_number > 1;
-- Series activas
SELECT id, name, prefix
FROM invoice_sequences
WHERE user_id = '<user_id>'
AND is_active = true;