fix(workspace): back button con orgName via JOIN + navegación simplificada a /library
Some checks failed
/ Deploy to Cloudflare Pages (push) Has been cancelled

This commit is contained in:
2026-07-07 17:21:37 -03:00
parent c92f4f087a
commit 7102d6ade6
2 changed files with 69 additions and 2 deletions

View File

@@ -130,6 +130,25 @@ Los assets SÍ existen en `assets/` (4 PNGs documentados en `simulador-web/CLAUD
**Estimación:** Sprint 6 o posterior. Baja prioridad — los PDFs ya tienen "Powered by InQuality" en footer.
### [SPRINT-8] Consolidación modelo de cliente: organizations → areas → procesos
Refactorización de modelo de datos para unificar los tres conceptos paralelos de "cliente" (process_groups, clientName, org_id) en una jerarquía de dos niveles.
**Scope:**
- Nueva tabla `areas (id, org_id, name)` — reemplaza `process_groups`
- `area_id` en `processes` — reemplaza `group_id`
- Eliminar campo `clientName` (texto libre) del dominio y la UI
- `LibraryPage`: agrupa por org → área (en lugar de por clientName)
- Workspace sidebar: org como contexto (read-only), área como selector normalizado
- Admin UI: CRUD de áreas por org
- RLS para `areas`
- Migración: bulk-assign 154 procesos de prueba a InQuality, eliminar process_groups de prueba
- Tests E2E del flujo completo
**Referencia:** `STRATEGIC_DIRECTION.md` → "Consolidación del modelo de cliente" (2026-07-07).
---
### [BACKLOG] Ocultar Settings y ruta /settings para roles de cliente
El ícono de tuerca (⚙) en LibraryPage es visible y navegable para `client_editor` y `client_viewer`. La página de configuración ("Etiqueta de grupos") es una feature interna de InQuality — un cliente no debería ver ni editar esta preferencia.

View File

@@ -449,7 +449,55 @@ En tres etapas (AdminLayout, WorkspacePage, ImportPage), Claude Code implementó
**Decisión del director:** implementado en Sprint 7 como Etapa 7B. Brief en `sprints/sprint-7/ETAPA_7B_PROMPT.md`.
Comportamiento:
- Admin en proceso de cliente → "← [nombre del cliente]" → `/library?org=<uuid>` con scroll al cliente
Comportamiento **post-hotfix (2026-07-07):**
- Admin en proceso de cliente → "← [nombre del cliente]" → `/library` (sin `?org=`)
- Admin en proceso sin org → "← Biblioteca" → `/library`
- client_editor/viewer → "← Procesos" → `/library`
**Nota:** La navegación con `?org=<uuid>` + scroll fue descartada porque `LibraryPage` agrupa por `clientName` (texto libre), no por `org_id`. No existe una vista filtrada por org. El label contextual se mantiene ("← Solar Banco") porque aporta información al usuario; la navegación destino simplifica a `/library` hasta que exista la vista filtrada.
---
### Consolidación del modelo de cliente: `organizations` → `areas` → procesos
**Decisión del director (2026-07-07):** reemplazar los tres conceptos paralelos de "cliente" por una jerarquía unificada en dos niveles.
**Estado actual — tres conceptos no reconciliados:**
| Campo | Uso actual | Problema |
|---|---|---|
| `process_groups` (tabla) | Agrupador "Clientes" en LibraryPage | Nombre confuso, duplica el rol de organizations |
| `clientName` (texto libre) | Editable en workspace sidebar | Sin normalización, sin FK, sin validación |
| `org_id` (FK a organizations) | Multi-tenant Sprint 7 | Correcto pero desconectado de lo que muestra la UI |
**Modelo objetivo:**
```
organizations (org_id) ← el cliente → entidad registrada por admin
└─ areas (area_id) ← área / equipo / unidad → normalizado por org, creado por admin
└─ processes ← tiene org_id + area_id (ambos nullables con lógica clara)
```
**Implicancias técnicas:**
- Nueva tabla `areas (id, org_id, name, description?, created_at)` — reemplaza `process_groups`
- Campo `area_id uuid REFERENCES areas(id)` reemplaza `group_id` en `processes`
- Campo `clientName` (texto libre) se elimina del dominio — el display viene de `org.name` + `area.name`
- `LibraryPage` agrupa por `org_id` (organización) y sub-agrupa por `area_id` (área)
- Workspace sidebar: el campo "cliente" pasa a ser un selector de área (dropdown de áreas de la org del proceso)
- Admin UI: CRUD de áreas por org (similar a CRUD de resources, scoped por org)
- RLS: `areas_select` — acceso transitivo por org (si ves la org, ves sus áreas)
**Datos actuales:** los 154 procesos "sin cliente asignado" son datos de prueba. El plan de migración es:
1. Bulk-assign a InQuality org (`UPDATE processes SET org_id = '<inq_uuid>' WHERE org_id IS NULL`) o eliminarlos
2. Los `process_groups` existentes ("david-dev", "InQuality") se eliminan — eran grupos de prueba
3. Sin datos reales en riesgo — el producto no tiene clientes externos activos al momento de la migración
**Sprint objetivo:** Sprint 8. Es refactorización de modelo de datos con impacto en DB + repositorios + UI. No entra en Sprint 5 (UX polish en curso). El brief de Sprint 8 incluye esta consolidación como prioridad 1 antes de features nuevas.
**Criterio de done:**
- `process_groups` eliminada (con migración que dropea la tabla y transfiere datos si aplica)
- `clientName` eliminado del tipo `Process` y de la UI
- `areas` table con RLS + CRUD en Admin
- `LibraryPage` agrupa por org → área
- Workspace sidebar muestra org asignada (read-only para client_editor) + selector de área
- Tests E2E: flujo admin crea org → crea área → asigna proceso → client_editor ve sus procesos agrupados