Ir al contenido

Facturación

Ruta: /owner/settings/billing Gestiona la configuración de facturación, numeración y apariencia de tus documentos.


La configuración de Facturación se organiza en tres pestañas principales:

Pestañas: Régimen Fiscal | Series | Apariencia

Descripción:

PestañaFunción
Régimen FiscalDetección automática del territorio fiscal por código postal (IVA, IGIC, IPSI)
SeriesGestión de series de numeración para facturas, presupuestos, proformas y albaranes
AparienciaPersonalización de plantillas y estilos de documentos PDF

FunciónDescripciónDocumentación
Configurar Régimen FiscalVisualiza el régimen fiscal automático según tu direcciónVer
Gestionar SeriesCrea y gestiona series de numeración para documentosVer
Personalizar PlantillasElige y personaliza el estilo de tus facturasVer
Configurar LogoSube y ajusta el logo de tu empresaVer

El sistema detecta automáticamente tu régimen fiscal según el código postal:

Código Postal → Territorio → Sistema Impositivo
28001 → Península → IVA (21%, 10%, 4%)
35001 → Canarias → IGIC (7%, 3%, 0%)
51001 → Ceuta → IPSI (0.5%, 1%, 4%)

Territorios soportados:

TerritorioSistemaTipos estándar
España PenínsulaIVA21%, 10%, 4%, 0%
Islas CanariasIGIC7%, 3%, 0%
Ceuta y MelillaIPSI0.5%, 1%, 4%, 0%

Nota: El régimen se actualiza automáticamente al cambiar la dirección fiscal en Configuración > Negocio.


El sistema permite crear series independientes para cada tipo de documento:

Tipos de series:

TipoUsoEjemplo
FacturasFacturas emitidas y rectificativasFAC-000001
PresupuestosOfertas y cotizacionesPRES-000001
ProformasFacturas proformaPRO-000001
AlbaranesDocumentos de entregaALB-000001

Características:

  • Prefijo personalizable (1-10 caracteres)
  • Numeración automática con ceros a la izquierda
  • Protección contra eliminación de series en uso
  • Activación/desactivación sin pérdida de datos

El sistema incluye plantillas prediseñadas y permite personalización avanzada:

Plantilla por defecto: Minimal Black

Opciones de personalización:

  • Colores principales y secundarios
  • Tipografía (fuente del cuerpo y encabezados)
  • Posición del logo (izquierda, centro, derecha)
  • Tamaño del logo (pequeño, mediano, grande, extra grande)

Detalles técnicos
TablaColumnas principalesFK
businessesid, tax_regime, invoice_style, logo_url, postal_code, country
invoice_sequencesid, user_id, name, prefix, current_number, is_active, number_paddingauth.users
quote_sequencesid, user_id, name, prefix, current_number, is_active, number_paddingauth.users
proforma_sequencesid, user_id, name, prefix, current_number, is_active, number_paddingauth.users
delivery_note_sequencesid, user_id, name, prefix, current_number, is_active, number_paddingauth.users
PolíticaRegla
businesses_isolationid = negocio del usuario autenticado
invoice_sequences_user_isolationuser_id = usuario autenticado
quote_sequences_user_isolationuser_id = usuario autenticado
HookArchivoDescripción
useBusinessTerritoryuseBusinessTerritory.tsDetecta territorio y régimen fiscal por código postal
useResolvedCompanyLogoUrluseResolvedCompanyLogoUrl.tsResuelve URL del logo desde storage
ComponenteRutaFunción
Billing.tsxpanels/owner/pages/settings/Página principal de configuración
TaxRegimeSection.tsxfeatures/settings/components/Vista de régimen fiscal
BillingSeriesSection.tsxfeatures/settings/components/Gestión de series con acordeones
InvoiceTemplatesSettings.tsxfeatures/settings/components/Editor de plantillas y logo
InvoiceSeriesManager.tsxfeatures/invoices/components/series/CRUD de series de facturas

Series activas de un usuario:

SELECT id, name, prefix, current_number, is_active
FROM invoice_sequences
WHERE user_id = '<user_id>'
AND is_active = true
ORDER BY name;

Configuración de negocio con régimen fiscal:

SELECT tax_regime, invoice_style, logo_url, postal_code, country
FROM businesses
WHERE id = '<business_id>';

Series en uso (no eliminables):

SELECT id, name, prefix, current_number
FROM invoice_sequences
WHERE user_id = '<user_id>'
AND current_number > 1;
Ver detalles técnicos de plantillas

Archivo: constants/invoiceStylesConfig.ts

Plantillas disponibles:

export const INVOICE_STYLES_CONFIG = {
minimalBlack: {
id: 'minimalBlack',
name: 'Minimal Black',
colors: [
{ id: 'primary', label: 'Color principal', default: '#000000' },
{ id: 'secondary', label: 'Color secundario', default: '#666666' }
],
fonts: [
{ id: 'body', label: 'Fuente del cuerpo', default: 'Inter' },
{ id: 'heading', label: 'Fuente de títulos', default: 'Inter' }
]
},
// ... más plantillas
};

Generación de PDF: templates/invoice/ + jsPDF + html2canvas

Ver detalles técnicos de territorio fiscal

Hook: useBusinessTerritory

export function useBusinessTerritory(
postalCode: string | null | undefined,
country: string | null | undefined
) {
// Detecta territorio según código postal
const territory = useMemo(() => {
if (country !== 'ES' || !postalCode) return 'peninsula';
const code = parseInt(postalCode.substring(0, 2));
if (code >= 35 && code <= 38) return 'canarias'; // IGIC
if (code === 51 || code === 52) return 'ceuta_melilla'; // IPSI
return 'peninsula'; // IVA
}, [postalCode, country]);
const taxSystem = territory === 'canarias' ? 'IGIC'
: territory === 'ceuta_melilla' ? 'IPSI'
: 'IVA';
return { territory, taxSystem, ... };
}