# PeopleExperience Módulo para crear y gestionar encuestas de clima laboral (Work Environment Surveys): configuración, participantes, resultados y análisis (eNPS, heatmap, favorabilidad). --- ## Screens / flows | Screen or flow | Entry path | URL | Description | |---|---|---|---| | Surveys list | `Surveys/index.tsx` | `/surveys` | Lista de encuestas con filtros por estado y tipo; acciones de crear, duplicar y eliminar | | New survey (type picker) | `NewSurvey/index.tsx` | `/surveys/new` | Selector del tipo de encuesta a crear (clásica o workflow) | | New workflow survey | `NewWorkflowSurvey/index.tsx` | `/surveys/new/workflow` | Creación de encuesta de tipo workflow | | Classic new survey | `SurveyForm/index.tsx` | `/surveys/new/classic` | Wizard de creación de encuesta clásica | | Edit survey | `SurveyForm/index.tsx` | `/surveys/:id/edit` | Wizard de edición de encuesta existente | | Survey dashboard (landing) | `SurveyDashboard/index.tsx` | `/surveys/:id/dashboard` | Vista por defecto del dashboard de una encuesta lanzada | | Survey config | `SurveyDashboard/SurveyConfig/index.tsx` | `/surveys/:id/dashboard/configuration` | Configuración de encuesta activa. Hijos: `general`, `participation`, `notifications`, `results-view` | | Survey results | `SurveyDashboard/SurveyResults/index.tsx` | `/surveys/:id/dashboard/results` | Resultados de encuesta activa. Hijos: `participation`, `nps`, `list`, `heatmap` | | Questions bank | `QuestionsBankList/index.tsx` | `/questions-bank` | Banco de preguntas y dimensiones; gestión de escalas personalizadas | | Survey templates | `SurveyTemplates/index.tsx` | `/templates` | Lista de plantillas de encuesta gestionadas | | Survey template detail | `SurveyTemplateDetail/index.tsx` | `/templates/:id` | Detalle de una plantilla; permite crear encuesta a partir de ella | Todas las URLs están bajo el prefijo del módulo `/people-experience`. --- ## Routing notes La mayoría de las entradas de `pxRouteConfig` son **rutas hermanas** bajo `/people-experience`. Aunque comparten prefijos de URL (varias empiezan con `/surveys/`), no son rutas anidadas en términos de React Router: en cada URL solo una está montada. A esto lo llamamos **composición de URL**, no anidamiento. El único anidamiento real (**route nesting** con ``) en este módulo está dentro de `SurveyDashboard`: el layout (`SurveyDashboard/components/SurveyDashboardLayout`) renderiza un `` que monta `SurveyDashboard/index.tsx` (índice), `SurveyConfig` o `SurveyResults`. A su vez, `SurveyConfig` y `SurveyResults` tienen sus propios hijos anidados (`GeneralConfig`, `ParticipationConfig`, etc., y `EnpsResults`, `ListResults`, etc.). ``` /surveys/:id/dashboard → SurveyDashboardLayout (Outlet) index → SurveyDashboard configuration → SurveyConfig (Outlet) general | participation | notifications | results-view results → SurveyResults (Outlet) participation | nps | list | heatmap ``` `routes.tsx` es la fuente de verdad de la estructura de rutas. --- ## Key forms | Form | Path | Description | |---|---|---| | General step | `SurveyForm/components/GeneralStep.tsx` | Nombre, descripción y configuración base | | Questions step | `SurveyForm/components/QuestionsStep/` | Selector de preguntas del banco; orden y configuración por pregunta | | Participants step | `SurveyForm/components/ParticipantsStep/` | Segmentación de usuarios participantes | | Data segmentation step | `SurveyForm/components/DataSegmentationStep/` | Configuración de segmentación de datos en resultados | | Summary step | `SurveyForm/components/SummaryStep/` | Revisión final y publicación | | General config | `SurveyDashboard/SurveyConfig/GeneralConfig/` | Edición de nombre, anonimidad y método de cálculo de encuesta activa | | Participation config | `SurveyDashboard/SurveyConfig/ParticipationConfig/` | Gestión de segmentación y datos faltantes | | Notifications config | `SurveyDashboard/SurveyConfig/NotificationsConfig/` | Envío de recordatorios | | Results view config | `SurveyDashboard/SurveyConfig/ResultsViewConfig/` | Permiso para que managers vean resultados | | Question builder form | `QuestionsBankList/forms/QuestionBuilderForm/` | Construcción de preguntas; consumido por `QuestionBuilderDrawer/` en la misma página | | Question form | `QuestionsBankList/forms/QuestionForm/` | Formulario legado de edición de preguntas del banco | | Dimension form | `QuestionsBankList/forms/DimensionForm/` | Creación y edición de dimensiones del banco | | Custom scale drawer | `components/CustomScaleDrawer/` | Creación y edición de escalas personalizadas para preguntas Likert | | Calc method drawer | `components/CalcMethodDrawer/` | Widget compartido a nivel de módulo, usado por `SurveyForm/SummaryStep` y `SurveyDashboard/SurveyConfig/GeneralConfig` | --- ## Shared assets | File | Purpose | |---|---| | `routes.tsx` | Path helpers (`pxPaths`, `pxRoutes`, `pxLinks`), imports diferidos y `pxRouteConfig` para `src/routes.tsx` | | `services.ts` | Todas las llamadas HTTP del módulo (encuestas, dimensiones, preguntas, segmentación, analítica) | | `queries.ts` | Factory de query keys (`pxKeys`) para React Query | | `types.ts` | Tipos locales del módulo (formularios, filtros de estado). Incluye el enum `PreviewType` compartido entre `SurveyForm/QuestionsStep` y `QuestionsBankList/QuestionBuilderDrawer` | | `constants.ts` | Constantes del módulo | | `hooks/` | Hooks compartidos del módulo: `useSurveyDetail`, `useSurveyId` (lector puro de la URL), `useManagerParticipation`, `useMissingInfo`, `useMissingUsers`, `useNewSurveyDetail`, `useNewSurveyId/`, `usePopover` | | `utils/` | `formatting.ts`, `questionScales.ts`, `questionsUtils.ts` (parse/serialize de preguntas), `rendering.ts`, `encoding.ts`, `index.ts` | | `components/` | Componentes compartidos del módulo: drawers y widgets (`CalcMethodDrawer/`, `CalcMethodSidebar/`, `CalcMethodUpdateButton.tsx`, `CustomScaleDrawer/`), autocompletes de temas (`TopicAutocomplete.tsx`, `TopicsAutocomplete/`, `TopicsAutocompleteEnhanced.tsx`), tarjetas y chips de diferencias (`DifferenceCard.tsx`, `DifferenceCardLayout.tsx`, `DifferenceChip/`), listas de usuarios con datos faltantes (`MissingDataUserList/`, `MissingDataUsersList/`), y utilitarios de UI (`ConfirmDialog/`, `DataCheckStatus/`, `DisplayGroup/`, `EmptyState.tsx`, `ExoticRadio.tsx`, `FieldContainer.tsx`, `List/`, `ScorePopover.tsx`, `Sidebar/`, `TextOverflowTip.tsx`, `AnonymityThresholdForm.tsx`, `CollapsibleSection.tsx`, `ComparisonCard.tsx`, `CustomPopover.tsx`, `RadioFiltersList.tsx`) | > **Note:** `src/types/peopleExperience.ts` contiene los tipos principales de la API (compartidos con `EmployeeLifecycle`) y no está dentro de este módulo. --- > Update this file when screens, forms, or shared assets change significantly.