Ir al contenido

Clientes

Ruta: /owner/customers Gestiona tu cartera de clientes con información fiscal, contacto y acceso al portal del cliente.


La pantalla principal de Clientes muestra la lista completa de tu cartera con tarjetas de resumen:

Tarjetas de resumen:

TarjetaColorDescripcion
TotalNumero total de clientes registrados
ActivosVerdeClientes con estado activo
Con facturasAzulClientes con facturas emitidas
PortalMoradoClientes con acceso al portal

Columnas de la tabla: Cliente, CIF/NIF, Email, Telefono, Ubicacion, Estado, Acciones

Filtros disponibles:

FiltroOpcionesDescripcion
BusquedaTexto libreNombre, CIF/NIF, email o telefono
EstadoActivo / Inactivo / TodosEstado del cliente
ProvinciaLista dinamicaProvincia del domicilio fiscal
PaisLista dinamicaPais del domicilio fiscal
ContactoCon email / Con telefono / Ambos / TodosTipo de contacto disponible

FuncionDescripcionDocumentacion
Crear ClienteRegistra un nuevo cliente con datos fiscales y contactoVer
Editar ClienteActualiza informacion del cliente existenteVer
Importar ClientesCarga masiva desde Excel con validacionesVer
Generar Token PortalCrea enlace de acceso al portal del clienteVer
Ver Logs PortalHistorial de accesos del cliente al portalVer
Buscar y FiltrarLocaliza clientes por multiples criteriosVer

Factux clasifica los clientes en tres tipos segun su naturaleza juridica:

TipoCuando usarloCaracteristicas
EmpresaPersona juridica con CIFCIF obligatorio (formato: A12345678)
AutonomoPersona fisica con actividad empresarialNIF obligatorio (formato: 12345678Z)
ParticularCliente final sin actividad empresarialNIF obligatorio, sin retenciones

Nota: El tipo de cliente determina las validaciones fiscales y las opciones de retencion disponibles.


Factux valida automaticamente los identificadores fiscales espanoles:

Formato NIF (personas fisicas):

  • 8 digitos + 1 letra de control
  • Ejemplo valido: 12345678Z
  • La letra se calcula segun el algoritmo del DNI espanol

Formato CIF (personas juridicas):

  • 1 letra inicial + 7 digitos + 1 caracter de control
  • Ejemplo valido: A12345678
  • Letras iniciales validas: A, B, C, D, E, F, G, H, J, N, P, Q, R, S, U, V, W

ALERTA: Los clientes con CIF/NIF invalido no podran ser guardados. El sistema mostrara un error especifico con el formato correcto.


El Portal del Cliente permite que tus clientes accedan a sus facturas, presupuestos y albaranes de forma segura:

Caracteristicas:

  • Acceso mediante token unico y verificacion de email
  • Visualizacion de facturas, presupuestos y albaranes
  • Descarga de PDFs
  • Historial de accesos y acciones
  • Responsive para movil y tablet

Seguridad:

  • Token unico por cliente (regenerable)
  • Verificacion obligatoria por email
  • Logs de todos los accesos con IP y timestamp
  • Token configurable como activo/inactivo

Detalles técnicos
TablaColumnas principalesFK
customersid, business_id, name, cif_nif, email, phone, address, postal_code, city, province, country, is_active, is_professionalbusinesses
customer_portal_tokensid, customer_id, token, requires_email_verification, is_active, expires_atcustomers
customer_portal_access_logid, customer_id, token_id, access_type, resource_id, ip_address, user_agent, success, failure_reasoncustomers, customer_portal_tokens
PoliticaRegla
customers_business_isolationbusiness_id = negocio del usuario autenticado
customer_portal_tokens_via_customerAcceso via cliente padre con mismo business_id
customer_portal_logs_via_customerAcceso via cliente padre con mismo business_id
FuncionTriggerDescripcion
whatsapp-create-customerComando WhatsAppCrear cliente via chat
whatsapp-get-customer-detailsComando WhatsAppObtener detalles del cliente
whatsapp-list-customersComando WhatsAppListar clientes por busqueda

Cliente completo con facturas asociadas:

SELECT c.*, COUNT(i.id) as total_invoices,
SUM(CASE WHEN i.status = 'paid' THEN 1 ELSE 0 END) as paid_invoices,
SUM(CASE WHEN i.status = 'overdue' THEN 1 ELSE 0 END) as overdue_invoices
FROM customers c
LEFT JOIN invoices i ON i.customer_id = c.id
WHERE c.business_id = '<business_id>'
GROUP BY c.id;

Clientes con acceso al portal:

SELECT c.name, c.email, t.token, t.is_active, t.requires_email_verification, t.created_at
FROM customers c
INNER JOIN customer_portal_tokens t ON t.customer_id = c.id
WHERE c.business_id = '<business_id>'
AND t.is_active = true;

Logs de acceso por cliente:

SELECT l.access_type, l.resource_id, l.ip_address, l.success, l.failure_reason, l.created_at
FROM customer_portal_access_log l
WHERE l.customer_id = '<customer_id>'
ORDER BY l.created_at DESC
LIMIT 50;

Clientes sin email o telefono:

SELECT id, name, cif_nif, email, phone
FROM customers
WHERE business_id = '<business_id>'
AND (email IS NULL OR email = '')
AND (phone IS NULL OR phone = '');