Pimia
DocumentaciónFrontendIntegracionesAPI ReferenceKnowledge BaseChangelog
PantallasClientes y CRM

Clientes

Ruta /pimia/clientes · componentes, campos y acciones del checkout documentado.

Ruta y puntos de edición

Ruta: /pimia/clientes. Revisión: 2aec1b16cc01.

Esta ficha procede de lectura estática del código. Los componentes asociados pueden incluir diálogos cerrados y bloques condicionales. Las expresiones dinámicas se conservan como código; no equivalen a campos siempre visibles ni a permisos concedidos.

Vista en el tenant de referencia

Clientes en Pimia

Captura de escritorio del tenant de demostración Reformas Vera, S.L., tomada el 10 de septiembre de 2026. Los datos ilustran la composición de la pantalla y pueden cambiar.

CapaArchivo relativo al repositorio
Rutasrc/app/pimia/clientes/page.tsx
Adaptador Next.jssrc/host/screens/PimiaClientScreens.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaCustomersScreen.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaStates.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaScreenShell.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaPageHeader.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaStatCards.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaFilterBar.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaTablePanel.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaPagination.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaAmountCell.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaCustomerDialog.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaConnectDialog.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaAddressFields.tsx

PimiaCustomersScreen

Fuente: src/features/pimia/ui/PimiaCustomersScreen.tsx.

Columnas declaradas

  • Cliente
  • Contacto
  • NIF / CIF
  • Alta
  • Pendiente
  • Acciones

Acciones

Rótulo literalHandler o envíoDeshabilitado cuandoLínea
Nuevo cliente() => { setEditing(null); setIsEditorOpen(true); }No declarado en este nodo259
Rótulo dinámico / icono() => void goPimiaCustomer(customer.id)No declarado en este nodo439
`Acciones de ${customer.name}`delegado al contenedorNo declarado en este nodo551
Ver la ficha() => onOpen(customer.id)No declarado en este nodo562
Editar() => onEdit(customer)No declarado en este nodo566
Nuevo presupuesto() => onNewEstimate(customer)No declarado en este nodo570
Copiar el email() => { void navigator.clipboard?.writeText(email); }No declarado en este nodo577

Estados reutilizados

  • PimiaNotConnected
  • PimiaRowsSkeleton
  • PimiaErrorState
  • PimiaEmpty

Clases de presentación locales

Selección de clases literales; las clases condicionales y los estilos de los primitivos se consultan en el archivo.

sm:grid-cols-2, text-xs, text-muted-foreground, gap-5, hover:bg-transparent, text-right, text-left, text-foreground.

PimiaStates

Fuente: src/features/pimia/ui/PimiaStates.tsx.

Acciones

Rótulo literalHandler o envíoDeshabilitado cuandoLínea
Conectar una empresa() => setIsConnectOpen(true)No declarado en este nodo99
Rótulo dinámico / icono() => void goPimiaPath(notFound.listPath)No declarado en este nodo233
Rótulo dinámico / iconodelegado al contenedorNo declarado en este nodo247
Rótulo dinámico / icono() => void goPimiaPath( closedDoor.action?.kind === "plan" ? PLAN_PATH : MODULES_SETTINGS_PATH, )No declarado en este nodo257
Volver a conectar() => setIsConnectOpen(true)No declarado en este nodo273
ReintentaronRetryNo declarado en este nodo279

Clases de presentación locales

Selección de clases literales; las clases condicionales y los estilos de los primitivos se consultan en el archivo.

gap-4, p-8, text-center, text-base, text-foreground, text-sm, text-muted-foreground, gap-2, overflow-hidden, bg-muted/40.

PimiaFilterBar

Fuente: src/features/pimia/ui/PimiaFilterBar.tsx.

Campos y controles

La columna «Reglas JSX» recoge propiedades explícitas; la validación adicional vive en los helpers y en el servidor. El enlace de estado indica dónde se lee el valor.

Etiqueta o pistaControlEnlace de estadoReglas JSXLínea
searchLabel ?? searchPlaceholderInputsearchValue ?? ""No declaradas en este nodo56

Clases de presentación locales

Selección de clases literales; las clases condicionales y los estilos de los primitivos se consultan en el archivo.

text-muted-foreground, gap-2.

PimiaPagination

Fuente: src/features/pimia/ui/PimiaPagination.tsx.

Campos y controles

La columna «Reglas JSX» recoge propiedades explícitas; la validación adicional vive en los helpers y en el servidor. El enlace de estado indica dónde se lee el valor.

Etiqueta o pistaControlEnlace de estadoReglas JSXLínea
Sin etiqueta literal resolubleSelectString(pageSize)No declaradas en este nodo82

Acciones

Rótulo literalHandler o envíoDeshabilitado cuandoLínea
Anterior() => onPageChange(Math.max(1, page - 1))page <= 1 || isBusy104
Siguiente() => onPageChange(page + 1)page >= lastPage || isBusy115

Clases de presentación locales

Selección de clases literales; las clases condicionales y los estilos de los primitivos se consultan en el archivo.

gap-3, text-xs, text-muted-foreground, gap-2.

PimiaCustomerDialog

Fuente: src/features/pimia/ui/PimiaCustomerDialog.tsx.

Campos y controles

La columna «Reglas JSX» recoge propiedades explícitas; la validación adicional vive en los helpers y en el servidor. El enlace de estado indica dónde se lee el valor.

Etiqueta o pistaControlEnlace de estadoReglas JSXLínea
Nombre (obligatorio)Inputform.nameNo declaradas en este nodo274
Persona de contactoInputform.contactNameNo declaradas en este nodo296
NIF / CIFInputform.taxIdNo declaradas en este nodo306
EmailInputform.emailNo declaradas en este nodo332
TeléfonoInputform.phoneNo declaradas en este nodo357
WebInputform.websiteNo declaradas en este nodo376
Sin etiqueta literal resolubleSelectform.currencyId === null ? SIN_MONEDA : String(form.currencyId)No declaradas en este nodo395
Sin etiqueta literal resolubleSelectform.paymentMethodId === null ? SIN_FORMA : String(form.paymentMethodId)No declaradas en este nodo436
Prefijo de numeraciónInputform.prefixNo declaradas en este nodo470
Notas internasTextareaform.notesNo declaradas en este nodo482
Dirección de envío: tiene una distinta de la de facturaciónSwitchform.hasShippingNo declaradas en este nodo516
IBANInputform.ibanNo declaradas en este nodo563
BIC / SWIFTInputform.bicNo declaradas en este nodo581
Referencia del mandatoInputform.sepaMandateIdNo declaradas en este nodo601
Fecha de firma del mandatoInputform.sepaMandateDatetype=date613

Acciones

Rótulo literalHandler o envíoDeshabilitado cuandoLínea
Cancelar() => onOpenChange(false)No declarado en este nodo636
Rótulo dinámico / iconosubmit del formularioNo declarado en este nodo643

Clases de presentación locales

Selección de clases literales; las clases condicionales y los estilos de los primitivos se consultan en el archivo.

overflow-y-auto, text-sm, text-foreground, text-muted-foreground, text-xs, text-destructive, grid-cols-1, gap-4, sm:grid-cols-2, bg-destructive/5, bg-muted/40.

PimiaConnectDialog

Fuente: src/features/pimia/ui/PimiaConnectDialog.tsx.

Campos y controles

La columna «Reglas JSX» recoge propiedades explícitas; la validación adicional vive en los helpers y en el servidor. El enlace de estado indica dónde se lee el valor.

Etiqueta o pistaControlEnlace de estadoReglas JSXLínea
Tu empresaInputbaseUrldisabled=connect.isPending114

Acciones

Rótulo literalHandler o envíoDeshabilitado cuandoLínea
Cancelar() => handleOpenChange(false)No declarado en este nodo155
Rótulo dinámico / iconosubmit del formulario!canSubmit162

Clases de presentación locales

Selección de clases literales; las clases condicionales y los estilos de los primitivos se consultan en el archivo.

text-sm, text-foreground, gap-2, text-muted-foreground, text-xs, text-destructive.

PimiaAddressFields

Fuente: src/features/pimia/ui/PimiaAddressFields.tsx.

Campos y controles

La columna «Reglas JSX» recoge propiedades explícitas; la validación adicional vive en los helpers y en el servidor. El enlace de estado indica dónde se lee el valor.

Etiqueta o pistaControlEnlace de estadoReglas JSXLínea
A nombre deInputform.nameNo declaradas en este nodo70
DirecciónInputform.street1No declaradas en este nodo79
Segunda líneaInputform.street2No declaradas en este nodo89
Código postalInputform.zipNo declaradas en este nodo99
CiudadInputform.cityNo declaradas en este nodo108
ProvinciaInputform.stateNo declaradas en este nodo116
Teléfono de esta direcciónInputform.phoneNo declaradas en este nodo126

Clases de presentación locales

Selección de clases literales; las clases condicionales y los estilos de los primitivos se consultan en el archivo.

text-xs, text-muted-foreground, grid-cols-1, gap-4, sm:grid-cols-3.

Hooks, adaptadores y utilidades relacionados

  • src/features/pimia/api/auth.ts
  • src/features/pimia/api/customerEditor.ts
  • src/features/pimia/api/customers.ts
  • src/features/pimia/api/pimiaClient.ts
  • src/features/pimia/hooks/usePimiaAuth.ts
  • src/features/pimia/hooks/usePimiaClientes.ts
  • src/features/pimia/hooks/usePimiaProveedores.ts
  • src/features/pimia/hooks/usePimiaResources.ts
  • src/features/pimia/lib/closedDoors.ts
  • src/features/pimia/lib/customerDraft.ts
  • src/features/pimia/lib/missingRecord.ts
  • src/features/pimia/lib/money.ts
  • src/features/pimia/lib/pagination.ts
  • src/features/pimia/lib/scopeDenial.ts

Antes de entregar un retoque

  • Revisa los archivos de formulario y sus helpers antes de cambiar tipos, obligatoriedad o valores iniciales.
  • Prueba carga, error, vacío, permisos insuficientes y guardado pendiente en las variantes que usa esta pantalla.
  • Comprueba escritorio, móvil, teclado, tema oscuro y scroll con suficientes filas.
  • Conserva los handlers y la invalidación de datos al modificar la presentación.

En esta página