Ir al contenido

Crear Cliente

Registra un nuevo cliente con datos fiscales y de contacto para emitir facturas y presupuestos.

  1. Clic en ”+ Nuevo Cliente” (boton superior derecha) — se abre el formulario.
  2. Completa la pestana “Informacion Basica” con datos obligatorios (ver tabla abajo).
  3. (Opcional) Pestana “Profesional” — configura retenciones e impuestos especiales.
  4. (Opcional) Pestana “Internacional” — para clientes UE o exportacion.
  5. Clic en “Guardar” — cliente creado.
CampoReglaDescripcionEjemplo
Nombre/Razon socialSiNombre completo o razon socialAcme Software, S.L.
CIF/NIFSiIdentificador fiscal valido (letra control)A12345678 o 12345678Z
EmailCondicionalEmail O Telefono (al menos uno)contacto@acme.com
TelefonoCondicionalTelefono O Email (al menos uno)+34 912 345 678
DireccionSiDomicilio fiscal completoCalle Mayor 1, 3B
Codigo PostalSiCP del domicilio28001
CiudadSiCiudad del domicilioMadrid
ProvinciaSiProvincia del domicilioMadrid
PaisSiPais del domicilio (por defecto: Espana)Espana
CampoDescripcionEjemplo
Persona de contactoNombre del responsableJuan Perez
NotasObservaciones internasCliente preferente, pago a 60 dias
CampoDescripcionValor por defecto
¿Es profesional?Marca si el cliente es empresa o autonomoNo
% Retencion por defectoPorcentaje de IRPF en facturas (si es profesional)15%
¿Autonomo nuevo?Marca si es autonomo con retencion reducida (7%)No
¿Aplica recargo de equivalencia?Marca si el cliente esta en regimen de recargoNo
CampoDescripcionEjemplo
¿Es cliente UE?Marca para clientes Union EuropeaSi
Numero IVA IntracomunitarioNIF-IVA europeoESA12345678
¿Es exportacion?Marca para clientes fuera de la UENo
  • El cliente aparece en la lista principal con estado Activo (punto verde).
  • Toast de confirmacion: “Cliente creado correctamente”.
  • Puedes buscar el cliente por nombre o CIF/NIF.
MensajeCausaSolucion
”El nombre es requerido”Campo vacioIntroduce nombre o razon social
”CIF/NIF invalido. Verifica el formato y digito de control”Formato incorrecto o letra de control erroneaVerifica: 8 digitos + letra (NIF) o letra + 7 digitos + control (CIF)
“Debes proporcionar al menos un correo electronico o un telefono”Email Y telefono vaciosCompleta al menos uno de los dos campos
”Formato de email invalido”Email mal escritoVerifica formato: usuario@dominio.com
”Formato de telefono invalido. Debe tener al menos 9 digitos”Telefono muy cortoIntroduce telefono completo con prefijo
”El codigo postal es requerido”Campo vacioIntroduce codigo postal
”La ciudad es requerida”Campo vacioIntroduce ciudad
”La provincia es requerida”Campo vacioIntroduce provincia
🔧 Detalles Tecnicos — Crear Cliente

Validaciones:

CodigoRegla
VAL-01name NOT NULL, min 2 chars, max 200 chars
VAL-02cif_nif NOT NULL, min 1 char, max 20 chars, formato espanol valido (letra control)
VAL-03email OR phone NOT NULL (al menos uno requerido)
VAL-04email formato valido si proporcionado (max 255 chars)
VAL-05phone min 9 digitos si proporcionado (max 20 chars)
VAL-06address NOT NULL, min 1 char, max 500 chars
VAL-07postal_code NOT NULL, min 1 char, max 10 chars
VAL-08city NOT NULL, min 1 char, max 100 chars
VAL-09province NOT NULL, min 1 char, max 100 chars
VAL-10country NOT NULL, min 1 char, max 100 chars
VAL-11default_retention_percentage 0-100 si proporcionado

Tablas involucradas:

TablaColumnas claveFK
customersid, business_id, name, cif_nif, email, phone, address, postal_code, city, province, country, contact_person, notes, is_active, is_professional, default_retention_percentage, is_new_freelancer, applies_equivalence_surcharge, is_eu_business, vat_number, is_exportbusinesses

Schema Zod:

  • Ubicacion: /src/schemas/validation.ts (lineas 4-96)
  • customerSchema — Validacion completa con regla refinada para email O telefono

Validacion CIF/NIF:

  • Funcion: validateSpanishTaxId() en /src/utils/validators.ts
  • NIF: 8 digitos + letra control (algoritmo DNI)
  • CIF: Letra inicial (A-W) + 7 digitos + caracter control

Queries de diagnostico:

-- Cliente recien creado
SELECT * FROM customers
WHERE business_id = '<business_id>'
ORDER BY created_at DESC LIMIT 1;
-- Verificar duplicados por CIF/NIF
SELECT id, name, cif_nif, email
FROM customers
WHERE business_id = '<business_id>'
AND cif_nif = '<cif_nif>';

Adapter:

  • Archivo: /src/features/customers/api/customer-adapter.ts
  • Metodo: create(data: CustomerCreateData): Promise<Customer>
  • Transforma datos del formulario a formato de BD

Eventos:

  • customerCreatedEvent — Publicado tras insercion exitosa
  • Payload: { customerId, customerName, email }

Componentes:

  • Formulario: CustomerFormSheet.tsx
  • Validaciones: ValidatedInput con customerSchema
  • Autocompletado direccion: Hook useGooglePlaces()

Edge Functions:

  • whatsapp-create-customer — Crear cliente via WhatsApp