snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 3s

This commit is contained in:
upstream-mirror
2026-09-17 23:28:13 +05:00
commit e7da97194a
32688 changed files with 4208681 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
---
title: Crea una vista de calendario para tareas con fecha de vencimiento
description: Visualiza tus tareas y fechas límite en un calendario.
---
<img src="/images/user-guide/views/calendar-view-zoom.png" style={{width:'100%'}} />
## Prerrequisitos
Tu objeto Tareas necesita un campo **Fecha de vencimiento** (tipo Fecha o Fecha y hora).
## Pasos
1. Ve a **Tareas**
2. Haz clic en el menú desplegable de la vista → **+ Agregar vista**
3. Asigna un nombre a tu vista (p. ej., "Calendario de tareas")
4. Haz clic en **Crear**
5. Haz clic en **Opciones** y selecciona **Calendario** como diseño
6. Elige **Fecha de vencimiento** como campo de fecha
7. Haga clic en **Guardar**
## Configura tu calendario
### Muestra campos en los eventos
1. Haz clic en **Opciones → Campos**
2. Haz clic en el **icono de ojo** para mostrar/ocultar campos
3. Arrastra para reordenar
Campos recomendados para mostrar:
* **Título** — nombre de la tarea
* **Asignado** — quién es responsable
* **Estado** — progreso actual
### Filtra tu calendario
Crea vistas enfocadas:
* **Mis tareas**: Filtra por Asignado = Yo
* **Esta semana**: Filtra por Fecha de vencimiento = Esta semana
* **Atrasadas**: Filtrar por Fecha de vencimiento < Hoy, Estado ≠ Completado
## Otros casos de uso del calendario
| Objeto | Campo de fecha | Propósito |
| ---------------------- | ---------------- | --------------------------------------- |
| Oportunidades | Fecha de cierre | Hacer seguimiento de cierres previstos |
| Eventos personalizados | Fecha del evento | Planificar actividades |
| Proyectos | Fecha límite | Supervisar los cronogramas de proyectos |
## Consejos
* **Revisa semanalmente**: Empieza cada semana revisando tu vista de calendario
* **Combina con la vista de tabla**: Usa el calendario para la visión general y la tabla para los detalles
* **Configura la visibilidad**: Mantén los calendarios de tareas personales como Unlisted
## Relacionado
* [Vista de calendario](/l/es/user-guide/views-pipelines/capabilities/calendar-view) — todas las funciones del calendario
* [Filtros y ordenación](/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting) — filtra tu calendario

View File

@@ -0,0 +1,80 @@
---
title: Crea una vista Kanban para proyectos
description: Supervisa los proyectos a través de etapas con un tablero visual.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
Usa una vista Kanban para visualizar tus proyectos (o cualquier objeto con etapas) como tarjetas que se mueven por columnas.
<VimeoEmbed videoId="927888627" title="Demostración en video" />
## Prerrequisitos
Tu objeto necesita un **campo de selección** para usar como columnas (p. ej., Estado, Etapa, Fase).
Si no tienes uno:
1. Ve a **Configuración → Modelo de datos**
2. Selecciona tu objeto
3. Agrega un campo de selección con tus opciones de etapa
## Pasos
1. Ve a tu objeto (p. ej., Proyectos, Tareas)
2. Haz clic en el menú desplegable de la vista → **+ Agregar vista**
3. Asigna un nombre a tu vista (p. ej., "Tablero de proyecto")
4. Haz clic en **Crear**
5. Haz clic en **Opciones** y selecciona **Kanban** como diseño
6. La vista usa tu campo de selección para las columnas automáticamente
7. Haga clic en **Guardar**
## Configura tu tablero
### Muestra campos clave en las tarjetas
1. Haz clic en **Opciones → Campos**
2. Busca campos en la sección "Campos ocultos"
3. Haz clic en el **icono de ojo** para mostrarlos en las tarjetas
4. Arrastra para reordenar
<img src="/images/user-guide/kanban-views/filter.png" style={{width:'100%'}} />
### Activar vista compacta
Para una vista general:
1. Haz clic en **Opciones**
2. Activa **Vista compacta**
Las tarjetas muestran solo el nombre del registro.
<img src="/images/user-guide/kanban-views/compact-view.png" style={{width:'100%'}} />
### Agrega agregaciones
Muestra recuentos o totales en la parte superior de cada columna:
1. Haz clic en el número junto al nombre de una columna
2. Selecciona una agregación (Conteo, Suma, etc.)
3. Elige un campo si es necesario
## Mover tarjetas
Arrastra y suelta las tarjetas entre columnas para actualizar su estado.
<VimeoEmbed videoId="927888627" title="Demostración en video" />
## Ejemplo: tablero de tareas
| Columna (Estado) | Tarjetas |
| ---------------- | ----------------------- |
| **Por hacer** | Nuevas tareas |
| **En progreso** | Trabajo activo |
| **Revisión** | En espera de aprobación |
| **Completado** | Completado |
## Relacionado
* [Vistas Kanban](/l/es/user-guide/views-pipelines/capabilities/kanban-views) — agregaciones, vista compacta, etapas
* [Cómo configurar un pipeline de ventas](/l/es/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline) — Kanban para oportunidades

View File

@@ -0,0 +1,51 @@
---
title: Crear una vista de tabla con agrupación
description: Organice sus registros en grupos contraíbles según el valor del campo.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
Agrupe su vista de tabla por un campo Select para organizar los registros en secciones contraíbles.
<img src="/images/user-guide/table-views/table-group-by.png" style={{width:'100%'}} />
## Pasos
1. Navegue al objeto (Personas, Empresas, etc.)
2. Haga clic en el menú desplegable de la vista → **+ Agregar vista**
3. Asigne un nombre a su vista (p. ej., "Empresas por tipo")
4. Haga clic en **Crear**
5. Haga clic en **Opciones → Agrupar**
6. Elija un campo Select para agrupar
7. Haga clic en **Guardar**
## Configurar el orden de los grupos
En **Opciones → Agrupar → Ordenar**, elija cómo se ordenan los grupos:
| Opción | Descripción |
| ---------------------- | ---------------------------------------------------------- |
| **Alfabético** | De la A a la Z |
| **Alfabético inverso** | De la Z a la A |
| **Orden manual** | Arrastre los grupos para reordenarlos en "Grupos visibles" |
Haga clic en el **icono de ojo** junto a un grupo para ocultarlo de la vista.
<Note>
**Para un mejor rendimiento, limite a 10-15 grupos visibles.** Si necesita más, considere usar un Dashboard.
</Note>
## Ejemplo: Empresas por industria
1. Vaya a **Empresas**
2. Cree una nueva vista llamada "Por industria"
3. Haga clic en **Opciones → Agrupar**
4. Seleccione el campo **Industria**
5. Guardar
Ahora sus empresas están organizadas por industria, lo que facilita centrarse en un segmento a la vez.
## Relacionado
* [Vistas de tabla](/l/es/user-guide/views-pipelines/capabilities/table-views) — todas las funciones de las vistas de tabla
* [Filtros y ordenación](/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting) — combinar la agrupación con filtros

View File

@@ -0,0 +1,32 @@
---
title: Restringir el acceso a tu vista
description: Controla quién puede ver tus vistas personalizadas.
---
Cada vista (excepto las vistas predeterminadas "Todas las [Object Name]") tiene su propia configuración de visibilidad.
## Pasos
1. Abre la vista que deseas restringir
2. Haz clic en **Opciones** en la esquina superior derecha
3. Haz clic en **Visibilidad**
4. Selecciona **No listada**
Tu vista ahora es visible solo para ti.
## Opciones de visibilidad
| Configuración | Quién puede ver |
| ---------------------- | ----------------------------------------- |
| **Espacio de trabajo** | Todos los miembros del espacio de trabajo |
| **No listada** | Solo tú |
## Notas
* Las vistas predeterminadas "Todas las [Object Name]" no se pueden establecer como no listadas
* Las vistas no listadas no aparecen en los menús desplegables de vistas de otros usuarios
* Puedes cambiar la visibilidad de nuevo a Espacio de trabajo en cualquier momento
## Relacionado
* [Configuración de vistas](/l/es/user-guide/views-pipelines/capabilities/view-settings) — todas las opciones de configuración de vistas

View File

@@ -0,0 +1,120 @@
---
title: Configura un pipeline de ventas
description: Configura tu pipeline de ventas para hacer seguimiento de las oportunidades a lo largo de las etapas.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
Un pipeline de ventas en Twenty es una vista Kanban de tu objeto Oportunidades, donde cada columna representa una etapa de tu proceso de ventas.
## Paso 1: Configura tus etapas
Las etapas se definen en el campo **Stage** del objeto Oportunidades.
1. Ve a **Configuración → Modelo de datos**
2. Selecciona **Oportunidades**
3. Busca y haz clic en el campo **Stage**
4. Agrega, elimina o renombra etapas para que coincidan con tu proceso
<VimeoEmbed videoId="927890428" title="Demostración en video" />
### Etapas recomendadas
| Etapa | Propósito |
| ------------------- | ----------------------------------------- |
| **Nuevo** | Oportunidades nuevas recién identificadas |
| **Calificado** | Confirmadas como buen ajuste |
| **Reunión** | En conversaciones activas |
| **Propuesta** | Propuesta enviada |
| **Negociación** | Trabajando en las condiciones |
| **Cerrado ganado** | Negocio ganado |
| **Cerrado perdido** | Negocio perdido |
<Note>
**5-7 stages es óptimo.** Demasiadas etapas hacen que el pipeline sea difícil de escanear; muy pocas pierden visibilidad en el progreso de la operación.
</Note>
## Paso 2: Crea una vista de pipeline
1. Ve a **Oportunidades**
2. Haz clic en el menú desplegable de la vista → **+ Agregar vista**
3. Ponle el nombre "Sales Pipeline"
4. Haz clic en **Crear**
5. Abre **Opciones** y selecciona **Kanban** como diseño
La vista usa automáticamente el campo Stage para las columnas.
## Paso 3: Configura tu vista
### Mostrar campos clave
1. Haz clic en **Opciones → Campos**
2. Busca campos en la sección "Campos ocultos"
3. Haz clic en el **icono de ojo** para mostrar: Empresa, Importe, Fecha de cierre, Propietario
### Activa las agregaciones
Muestra los totales en la parte superior de cada columna:
1. Haz clic en el número que se muestra junto al nombre de una etapa en la parte superior de una columna
2. Selecciona el tipo de agregación (Conteo, Suma, Promedio, etc.)
3. Elige el campo a agregar (p. ej., Importe)
**Ejemplo:** Muestra el valor total de los acuerdos por etapa agregando el campo Importe con Suma.
### Usar vista compacta (opcional)
Para una vista general con contenido mínimo en las tarjetas:
1. Haz clic en **Opciones**
2. Activa la opción de **Vista compacta**
## Paso 4: Crea vistas personales y del equipo
### "Mi pipeline"
* **Filtro**: Propietario = Yo
* **Visibilidad**: No listada (vista personal)
### "Pipeline del equipo"
* **Filtro**: Ninguno (mostrar todo)
* **Visibilidad**: Espacio de trabajo (vista compartida)
### "Cierres de este mes"
* **Tipo**: Tabla
* **Filtro**: Fecha de cierre = Este mes, Etapa ≠ Cerrado ganado, Etapa ≠ Cerrado perdido
* **Orden**: Fecha de cierre ascendente
## Trabajando con Oportunidades
### Crear Oportunidades
* Haz clic en **+ Nuevo** en la vista de Oportunidades
* O haz clic en **+** en la columna de una etapa específica
### Moverse por las etapas
Arrastra y suelta las tarjetas de oportunidad entre columnas para actualizar su etapa.
<VimeoEmbed videoId="927888627" title="Demostración en video" />
## Mejores prácticas
### Higiene del pipeline
* Actualiza los acuerdos a diario conforme avancen
* Mueve o cierra los acuerdos estancados con prontitud
* Mantén realistas las fechas de cierre
### Disciplina de las etapas
* Define criterios claros para cada etapa
* Mueve los acuerdos con prontitud cuando se cumplan los criterios
* No dejes que los acuerdos permanezcan demasiado tiempo en las etapas
## Relacionado
* [Vistas Kanban](/l/es/user-guide/views-pipelines/capabilities/kanban-views) — agregaciones y vista compacta
* [Filtros y ordenación](/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting) — creación de vistas filtradas

View File

@@ -0,0 +1,149 @@
---
title: Mostrar el Importe previsto en tu pipeline
description: Calcula y muestra valores ponderados de las oportunidades según la probabilidad de la etapa.
---
El Importe previsto es un valor calculado: **Importe × Probabilidad**. Esto te ayuda a pronosticar ingresos ponderando las oportunidades según la probabilidad de que se cierren.
<Tip>
Este es un ejemplo de creación de [Campos de fórmula](/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields) usando flujos de trabajo.
</Tip>
Esta guía te acompaña para configurar los campos personalizados y los flujos de trabajo necesarios para calcular y mostrar importes previstos en tu pipeline.
## Paso 1: Crear campos personalizados
Necesitas dos campos personalizados en el objeto Oportunidades.
### Crear el campo Probabilidad
1. Ve a **Ajustes → Modelo de datos → Oportunidades**
2. Haz clic en **+ Añadir campo**
3. Configurar:
* **Nombre**: Probabilidad
* **Tipo**: Número
* **Descripción**: Probabilidad según etapa (0-100%)
4. Haga clic en **Guardar**
### Crear el campo Importe previsto
1. Haz clic en **+ Añadir campo**
2. Configurar:
* **Nombre**: Importe previsto
* **Tipo**: Moneda
* **Descripción**: Calculado: Importe × Probabilidad
3. Haga clic en **Guardar**
### Opcional: Hacer que los campos sean de solo lectura para los usuarios
Si no quieres que los usuarios editen manualmente estos campos calculados:
1. Ve a **Ajustes → Miembros → Roles**
2. Selecciona el rol a configurar
3. Busca el objeto Oportunidades
4. Establece los campos **Probabilidad** e **Importe previsto** como de solo lectura
Esto garantiza que solo los flujos de trabajo puedan actualizar estos valores.
## Paso 2: Crear el flujo de trabajo #1 — Actualizar la Probabilidad al cambiar de etapa
Este flujo de trabajo establece automáticamente la Probabilidad cuando una oportunidad pasa a una nueva etapa.
### Crear el flujo de trabajo
1. Ve a **Flujos de trabajo**
2. Haz clic en **+ Nuevo flujo de trabajo**
3. Ponle el nombre "Actualizar la Probabilidad al cambiar de etapa"
### Configurar el desencadenador
1. Añade un desencadenador **Registro creado o actualizado**
2. Selecciona **Oportunidades** como objeto
3. Filtrar en: se actualiza el campo **Etapa**
### Añadir ramas para cada etapa
Crea una rama para cada etapa con su probabilidad:
| Etapa | Probabilidad |
| --------------- | ------------ |
| Nuevo | 10% |
| Calificado | 25% |
| Reunión | 40% |
| Propuesta | 60% |
| Negociación | 80% |
| Cerrado ganado | 100% |
| Cerrado perdido | 0% |
<Note>
Para crear una nueva rama, haz clic derecho en el lienzo del flujo de trabajo y haz clic en **Nueva acción**. Luego, vincula esta acción al nodo anterior arrastrando la flecha desde el nodo anterior hasta esta nueva acción.
</Note>
Para cada etapa:
1. Añade un nodo **Filtro**: Etapa = [nombre de la etapa]
2. Añade una acción **Actualizar registro**:
* Registro: la Oportunidad desencadenante
* Campo: Probabilidad
* Valor: [probabilidad para esa etapa]
### Calcular el Importe previsto
Después de que las ramas se vuelvan a unir:
1. Añade un nodo **Filtro**: el Importe no está vacío
2. Añade una acción **Actualizar registro**:
* Registro: la Oportunidad desencadenante
* Campo: Importe previsto
* Valor: Importe × Probabilidad
## Paso 3: Crear el flujo de trabajo #2 — Recalcular al cambiar el Importe
Este flujo de trabajo actualiza el Importe previsto cuando cambia el Importe de la oportunidad.
### Crear el flujo de trabajo
1. Ve a **Flujos de trabajo**
2. Haz clic en **+ Nuevo flujo de trabajo**
3. Ponle el nombre "Recalcular el Importe previsto al cambiar el Importe"
### Configurar el desencadenador
1. Añade un desencadenador **Registro creado o actualizado**
2. Selecciona **Oportunidades** como objeto
3. Filtrar en: se actualiza el campo **Importe**
### Añadir la lógica
1. Añade un nodo **Filtro**: el Importe no está vacío
2. Añade una acción **Actualizar registro**:
* Registro: la Oportunidad desencadenante
* Campo: Importe previsto
* Valor: Importe × Probabilidad
## Paso 4: Mostrarlo en tu pipeline
Ahora muestra los totales de Importe previsto en tu vista Kanban:
1. Abre tu vista Kanban de Pipeline de ventas
2. Haz clic en el número junto al nombre de cualquier etapa en la parte superior de una columna
3. Selecciona **Suma**
4. Elige **Importe previsto**
Cada columna ahora muestra el valor total ponderado del pipeline para esa etapa.
## Resumen
| Componente | Propósito |
| ----------------------------- | -------------------------------------------------------------------------------------- |
| **Campo de Probabilidad** | Almacena la probabilidad de ganar según la etapa |
| **Campo de Importe previsto** | Almacena Importe × Probabilidad |
| **Flujo de trabajo #1** | Actualiza la Probabilidad cuando cambia la Etapa y luego recalcula el Importe previsto |
| **Flujo de trabajo #2** | Recalcula el Importe previsto cuando cambia el Importe |
| **Agregación** | Muestra la suma del Importe previsto por etapa |
## Relacionado
* [Campos de fórmula](/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields) — crea campos calculados usando flujos de trabajo
* [Vistas Kanban](/l/es/user-guide/views-pipelines/capabilities/kanban-views) — agregaciones por columna
* [Cómo crear campos personalizados](/l/es/user-guide/data-model/how-tos/create-custom-fields) — configuración de campos

View File

@@ -0,0 +1,231 @@
---
title: Realiza un seguimiento de cuánto tiempo permanecen las oportunidades en cada etapa.
description: Supervisa la velocidad de las oportunidades registrando cuándo ingresan a cada etapa.
---
<Tip>
Este es un ejemplo de cómo crear [Campos de fórmula](/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields) usando flujos de trabajo — específicamente cálculos de fechas.
</Tip>
Registrar cuándo las oportunidades ingresan a cada etapa te ayuda a identificar cuellos de botella y medir la velocidad de las oportunidades.
Esta guía te muestra cómo configurar campos personalizados y un flujo de trabajo para registrar automáticamente cuándo una oportunidad pasa a cada etapa y calcular cuántos días pasó en la etapa anterior.
## Paso 1: Crear campos personalizados
Necesitas dos tipos de campos para cada etapa:
* **Campos de fecha y hora**: Registran cuándo la oportunidad ingresó a cada etapa
* **Campos numéricos**: Almacenan cuántos días pasó la oportunidad en cada etapa
### Crea los campos "Última entrada"
1. Ve a **Ajustes → Modelo de datos → Oportunidades**
2. Para cada etapa, haz clic en **+ Agregar campo** y configura:
* **Nombre**: Última entrada en [Nombre de la etapa] (p. ej., "Última entrada en Nuevo", "Última entrada en Calificado")
* **Tipo**: Fecha y hora
* **Descripción**: Marca de tiempo cuando la oportunidad ingresó a esta etapa
3. Haga clic en **Guardar**
Crea estos campos:
* Última entrada en Nuevo
* Última entrada en Calificado
* Última entrada en Reunión
* Última entrada en Propuesta
* Última entrada en Negociación
* Última entrada en Cerrado ganado
* Última entrada en Cerrado perdido
### Crea los campos "Días en la etapa"
1. Para cada etapa, haz clic en **+ Agregar campo** y configura:
* **Nombre**: Días en [Nombre de la etapa] (p. ej., "Días en Nuevo", "Días en Calificado")
* **Tipo**: Número
* **Descripción**: Número de días que pasó en esta etapa
2. Haga clic en **Guardar**
Crea estos campos:
* Días en Nuevo
* Días en Calificado
* Días en Reunión
* Días en Propuesta
* Días en Negociación
<Note>
No necesitas campos "Días en" para Cerrado ganado y Cerrado perdido, ya que son etapas finales.
</Note>
### Opcional: Hacer que los campos sean de solo lectura
Si no quieres que los usuarios editen manualmente estos campos calculados:
1. Ve a **Ajustes → Miembros → Roles**
2. Selecciona el rol que deseas configurar
3. Busca el objeto Oportunidades
4. Configura los campos "Última entrada" y "Días en" como de solo lectura
## Paso 2: Crear el flujo de trabajo
Este único flujo de trabajo gestiona ambas tareas:
* Registra la marca de tiempo al entrar en una nueva etapa
* Calcula los días que se pasaron en la etapa anterior
### Crea el flujo de trabajo
1. Ve a **Flujos de trabajo**
2. Haz clic en **+ Nuevo flujo de trabajo**
3. Ponle el nombre "Seguimiento del tiempo por etapa"
### Configura el disparador
1. Agrega un disparador **Registro actualizado**
2. Selecciona **Oportunidades** como objeto
3. Filtrar por: el campo **Etapa** se actualiza
### Agrega ramas para cada etapa
<Note>
Para crear una nueva rama, haz clic derecho en el lienzo del flujo de trabajo y haz clic en **Nueva acción**. Luego, vincula esta acción al nodo anterior arrastrando la flecha desde el nodo anterior hasta esta nueva acción.
</Note>
---
**Rama 1: Etapa = Nuevo (primera etapa)**
Dado que esta es la primera etapa, solo se registra la marca de tiempo de entrada; no hay una etapa anterior desde la cual calcular.
1. Agrega un nodo **Filtro**: Etapa = Nuevo
2. Agrega una acción de **Código**:
```javascript
export const main = async (): Promise<object> => {
return { now: new Date().toISOString() };
};
```
3. Agrega una acción **Actualizar registro**:
* Registro: la Oportunidad que activó el evento
* Campo: Última entrada en Nuevo
* Valor: `now` del nodo de Código
---
**Rama 2: Etapa = Calificado**
Al pasar a Calificado, registra la hora de entrada Y calcula los días que se pasaron en Nuevo.
1. Agrega un nodo **Filtro**: Etapa = Calificado
2. Agrega una acción de **Código**:
```javascript
export const main = async (params: {
lastEnteredPreviousStage: Date;
}): Promise<object> => {
const { lastEnteredPreviousStage } = params;
const now = new Date();
const entryDate = new Date(lastEnteredPreviousStage);
const diffTime = Math.abs(now.getTime() - entryDate.getTime());
const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
return {
now: now.toISOString(),
daysInPreviousStage: daysInPreviousStage
};
};
```
3. Configura la entrada del nodo de Código: mapea `lastEnteredPreviousStage` al campo **Última entrada en Nuevo**
4. Agrega una acción **Actualizar registro**:
* Registro: la Oportunidad que activó el evento
* Campos a actualizar:
* Última entrada en Calificado = `now`
* Días en Nuevo = `daysInPreviousStage`
---
**Rama 3: Etapa = Reunión**
Al pasar a Reunión, registra la hora de entrada Y calcula los días que se pasaron en Calificado.
1. Agrega un nodo **Filtro**: Etapa = Reunión
2. Agrega una acción de **Código**:
```javascript
export const main = async (params: {
lastEnteredPreviousStage: Date;
}): Promise<object> => {
const { lastEnteredPreviousStage } = params;
const now = new Date();
const entryDate = new Date(lastEnteredPreviousStage);
const diffTime = Math.abs(now.getTime() - entryDate.getTime());
const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
return {
now: now.toISOString(),
daysInPreviousStage: daysInPreviousStage
};
};
```
3. Configura la entrada del nodo de Código: mapea `lastEnteredPreviousStage` al campo **Última entrada en Calificado**
4. Agrega una acción **Actualizar registro**:
* Registro: la Oportunidad que activó el evento
* Campos a actualizar:
* Última entrada en Reunión = `now`
* Días en Calificado = `daysInPreviousStage`
---
**Continúa con las etapas restantes:**
| Etapa | Registros | Calcula |
| --------------- | --------------------------------- | ------------------- |
| Propuesta | Última entrada en Propuesta | Días en Reunión |
| Negociación | Última entrada en Negociación | Días en Propuesta |
| Cerrado ganado | Última entrada en Cerrado ganado | Días en Negociación |
| Cerrado perdido | Última entrada en Cerrado perdido | Días en Negociación |
Las ramas no necesitan volver a unirse; cada una se ejecuta de forma independiente cuando se cumple su condición de etapa.
## Paso 3: Analizar el tiempo en la etapa
Con las marcas de tiempo y los recuentos de días registrados, ahora puedes analizar la velocidad de las oportunidades.
### Crea una vista "Oportunidades lentas"
1. Crea una vista de tabla de Oportunidades
2. Agrega columnas: Nombre, Etapa, Días en [etapa anterior], Importe
3. Ordena por el campo "Días en" (descendente)
4. Filtra por Etapa para centrarte en una etapa a la vez
Las oportunidades en la parte superior pasaron más tiempo en la etapa anterior.
### Usa agregaciones
En tu vista Kanban del pipeline:
1. Haz clic en el número junto al nombre de una Etapa
2. Selecciona **Promedio**
3. Elige un campo "Días en"
Esto muestra el tiempo promedio que las oportunidades pasan en cada etapa.
## Resumen
| Componente | Propósito |
| --------------------------- | ------------------------------------------------------------------------- |
| **Campos "Última entrada"** | Almacenan cuándo la oportunidad ingresó a cada etapa |
| **Campos "Días en"** | Almacenan cuántos días se pasaron en cada etapa |
| **Flujo de trabajo** | Registra la marca de tiempo Y calcula los días en una sola pasada |
| **Vistas y agregaciones** | Analiza la velocidad de las oportunidades e identifica cuellos de botella |
## Relacionado
* [Flujos de trabajo](/l/es/user-guide/workflows/overview) — conceptos básicos de automatización
* [Cómo crear campos personalizados](/l/es/user-guide/data-model/how-tos/create-custom-fields) — configuración de campos
* [Vistas Kanban](/l/es/user-guide/views-pipelines/capabilities/kanban-views) — agregaciones