Pimia
DocumentaciónFrontendIntegracionesAPI ReferenceKnowledge BaseChangelog
PantallasVenta y cobros

Presupuestos

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

Ruta y puntos de edición

Ruta: /pimia/presupuestos. 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

Presupuestos 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/presupuestos/page.tsx
Adaptador Next.jssrc/host/screens/PimiaEstimateScreens.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaEstimatesScreen.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/PimiaStatusTabs.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/PimiaEstimateList.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaConnectDialog.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaSortableHead.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaEstimateDocument.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaStatusBadge.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaAmountCell.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaEstimateActions.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaDocumentParts.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaEstimateRejectDialog.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaEstimateSendDialog.tsx

PimiaEstimatesScreen

Fuente: src/features/pimia/ui/PimiaEstimatesScreen.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 resolubleSelectrangeNo declaradas en este nodo555
Sin etiqueta literal resolubleSelectsortValue(sort)No declaradas en este nodo576

Acciones

Rótulo literalHandler o envíoDeshabilitado cuandoLínea
Nuevo presupuesto() => void goPimiaPath("/pimia/presupuestos/nuevo")No declarado en este nodo447

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.

text-xs, text-muted-foreground, gap-5.

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.

PimiaEstimateList

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

Columnas declaradas

  • Destinatario
  • Acciones

Acciones

Rótulo literalHandler o envíoDeshabilitado cuandoLínea
Rótulo dinámico / icono() => onOpen(estimate.id)No declarado en este nodo276
Ver el presupuesto() => onOpen(estimate.id)No declarado en este nodo401
Ver el cliente() => onOpenCustomer(customerId)No declarado en este nodo407
Copiar el número() => { void navigator.clipboard?.writeText(estimate.estimateNumber); }No declarado en este nodo412

Clases de presentación locales

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

hover:bg-transparent, text-foreground, gap-2, text-muted-foreground, text-right, text-xs.

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.

PimiaSortableHead

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

Acciones

Rótulo literalHandler o envíoDeshabilitado cuandoLínea
Rótulo dinámico / icono() => onSortChange({ direction: isActive && sort.direction === "desc" ? "asc" : ("desc" as const), field, })No declarado en este nodo61

PimiaEstimateDocument

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

Columnas declaradas

  • Concepto
  • Importe

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-base, text-foreground, text-muted-foreground, gap-x-6, gap-y-2, text-2xs, text-lg, text-2xl, grid-cols-1, gap-5, sm:grid-cols-3, bg-primary, gap-7, xl:grid-cols-2, overflow-x-auto, text-left, text-sm, gap-2, sm:text-right.

PimiaEstimateActions

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

Acciones

Rótulo literalHandler o envíoDeshabilitado cuandoLínea
Rótulo dinámico / icono() => { if (primary === "send") { setIsSendOpen(true); } else if (primary === "convert") { requestConvert(); } else if (primary === "clone") { setConfirmation("clone"); } else { void handleStatus(primary); } }isBusy311
`Acciones de ${estimate.estimateNumber}`delegado al contenedorisBusy355
Editar() => void goPimiaPath( `/pimia/presupuestos/${encodeURIComponent(estimate.id)}/editar`, )No declarado en este nodo379
Rótulo dinámico / icono() => setIsSendOpen(true)No declarado en este nodo390
Rótulo dinámico / icono() => { if (status === "REJECTED") { setIsRejectOpen(true); return; } void handleStatus(status); }No declarado en este nodo401
Duplicar() => setConfirmation("clone")No declarado en este nodo422
Convertir en facturarequestConvertNo declarado en este nodo426
Descargar el PDF() => void handlePdf()No declarado en este nodo437
Copiar el enlace para el cliente() => void handleCopyLink()No declarado en este nodo450
Duplicar() => void handleClone()No declarado en este nodo484
Convertir en factura() => void handleConvert()No declarado en este nodo507
Volver a conectar() => { setConfirmation(null); setIsReconnectOpen(true); }No declarado en este nodo528

PimiaEstimateRejectDialog

Fuente: src/features/pimia/ui/PimiaEstimateRejectDialog.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
Motivo (opcional)textareareasonNo declaradas en este nodo129

Acciones

Rótulo literalHandler o envíoDeshabilitado cuandoLínea
Cancelar() => onOpenChange(false)No declarado en este nodo155
Marcar como rechazadosubmit del formulariochangeStatus.isPending162

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-1.5, text-2xs, text-muted-foreground, bg-background, text-sm, text-foreground, text-xs, text-destructive.

PimiaEstimateSendDialog

Fuente: src/features/pimia/ui/PimiaEstimateSendDialog.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
ParaInputtotype=email309
AsuntoInputsubjectNo declaradas en este nodo331
MensajetextareabodyNo declaradas en este nodo343

Acciones

Rótulo literalHandler o envíoDeshabilitado cuandoLínea
Cancelar() => onOpenChange(false)No declarado en este nodo371
Enviarsubmit del formulario!canSend378

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-2.5, bg-destructive/10, text-sm, text-foreground, text-destructive, bg-muted/40, text-muted-foreground, gap-1.5, text-2xs, text-xs, bg-background.

Hooks, adaptadores y utilidades relacionados

  • src/features/pimia/api/auth.ts
  • src/features/pimia/api/company.ts
  • src/features/pimia/api/estimateSharedLink.ts
  • src/features/pimia/api/estimates.ts
  • src/features/pimia/api/invoices.ts
  • src/features/pimia/api/pimiaClient.ts
  • src/features/pimia/hooks/usePimiaAuth.ts
  • src/features/pimia/hooks/usePimiaCorreo.ts
  • src/features/pimia/hooks/usePimiaResources.ts
  • src/features/pimia/lib/calendar.ts
  • src/features/pimia/lib/closedDoors.ts
  • src/features/pimia/lib/dateRanges.ts
  • src/features/pimia/lib/documentActivity.ts
  • src/features/pimia/lib/documentSeries.ts
  • src/features/pimia/lib/estimates.ts
  • src/features/pimia/lib/mailConfig.ts
  • src/features/pimia/lib/missingRecord.ts
  • src/features/pimia/lib/money.ts
  • src/features/pimia/lib/pagination.ts
  • src/features/pimia/lib/pdfPropio.ts
  • src/features/pimia/lib/scopeDenial.ts
  • src/features/pimia/lib/taxes.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