# Changelog All notable changes to InQ ROI will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ### Added - `RequireRole` componente wrapper para guards de rol declarativos (Approach B — sin router context) (Sprint 8) - Edge Function `delete-user`: hard delete permanente de usuario en auth.users + public.users (Sprint 8) - Edge Function `list-users`: lista usuarios con email desde auth.users vía service_role (Sprint 8) - UsersPage: columna "Email" entre Nombre y Rol (via Edge Function list-users) (Sprint 8) - Migración 018: policy INSERT en `processes` extendida para `client_editor` en su org (Sprint 8) - ImportPage: `client_editor` puede importar BPMN; proceso se crea con `orgId` de su cuenta (Sprint 8) - LibraryPage: botón "Importar BPMN" visible para `client_editor`; empty state con call-to-action de importar (Sprint 8) ### Changed - AdminLayout: guard useEffect + spinner → RequireRole wrapper (sin flash de contenido protegido) (Sprint 8) - ImportPage: guard useEffect → RequireRole wrapper (Sprint 8) - UsersPage: "Eliminar" (soft delete / revoke-user) → "Eliminar permanentemente" (hard delete / delete-user) (Sprint 8) ### Fixed - ImportPage: texto de marca corregido — "Process Cost Platform · MVP Fase 0" → "InQ ROI" (Sprint 8) - ImportPage: párrafo "Sin backend · Sin registro · Datos guardados localmente" eliminado (obsoleto desde Sprint 4) (Sprint 8) - OrganizationsPage: InQuality visible en lista con badge naranja — quitar filtro is_provider (Sprint 8) - WorkspacePage: back button pasa ?org=orgId para scroll contextual al volver a biblioteca (Sprint 8) - LibraryPage: scroll automático a sección de org al recibir ?org param desde workspace (Sprint 8) - router.tsx: redirect de settingsRoute pasa search: { org: undefined } para compatibilidad con validateSearch (Sprint 8) ### Added (Etapas 1-4) - GlobalSettingsPanel: selector de área reemplaza campo libre "Cliente" (Sprint 8) - WorkspacePage topbar: display de `areaName` de solo lectura reemplaza edición inline de cliente (Sprint 8) - OrganizationDetailPage: tercer tab "Áreas" con CRUD completo — crear, renombrar, eliminar con confirmación (Sprint 8) - LibraryPage: agrupación org → área con headers colapsables para admin (Sprint 8) - Settings ⚙ oculto para roles cliente + guard beforeLoad en /settings (Sprint 8) - Interface `Area` en domain/types.ts (Sprint 8) - Campos `areaId`/`areaName` en `Process` (Sprint 8) - Repositorio `supabaseAreaRepo` con CRUD completo para tabla `areas` (Sprint 8) - `fromRow`/`toRow`/`updateEditable`/`getById` en process-repo extendidos con `area_id` (Sprint 8) ## [0.8.0] - 2026-07-07 ### Added - CHANGELOG.md con historial de versiones - AppFooter con versión visible en todas las páginas - Conventional Commits adoptados como estándar de commits ## [0.7.0] - 2026-07-07 ### Added - Multi-tenancy: tabla `organizations`, 4 roles de plataforma (platform_admin, member, client_editor, client_viewer) - Edge Functions `invite-user` y `revoke-user` para gestión de acceso - Panel de administración `/admin` con gestión de Organizations y Users - Login email/password y página `/reset-password` para flujo de invitación - Back button contextual en workspace (muestra nombre del cliente via JOIN en getById) - Política RLS `simulations_update` para que client_editor pueda guardar simulaciones ### Fixed - Race condition en AuthContext: `isProfileLoaded` como guard antes de renderizar contenido rol-dependiente - `syncProfileFromDB` ahora lee `platform_role` y `org_id` desde DB (no inferido por dominio de email) - `normalizeGroupLabel()`: limpia artículos iniciales de labels de grupos con datos corruptos ## [0.6.0] - 2026-06-24 ### Added - Logo InQuality en header de PDFs (isotipo, páginas 2+, fallback a texto) - Panel de análisis de sensibilidad en tab ROI: sliders de volumen e inversión, recálculo en tiempo real - Doble línea en CumulativeSavingsChart (base gris dashed + ajustada naranja con área sombreada) - `whitespace-nowrap` en MetricCell de columna Eficiencia ### Fixed - `ProfileSheet.getAccessToken()` leía clave inexistente (`'supabase.auth.token'`); el guardado de perfil nunca llegaba a Supabase desde Sprint 4. Fix: calcular `sb-${projectRef}-auth-token` ## [0.5.0] - 2026-06-23 ### Added - Fix crítico: workspace loading — race condition auth/processId resuelto con `isProfileLoaded` - Controles de zoom BPMN: fit-viewport con centering correcto, botones zoom-in/zoom-out/fit - Heatmap con gradiente continuo de 4 stops + toggle percentile/min-max persistido - "Ver procesos por recurso" en catálogo de recursos - Campo "empresa" en perfil de usuario - Columna "Eficiencia de automatización" en ComparisonTable (+ columna "Ahorro esperado") ### Fixed - Flakiness en botón "Guardar cambios": debounce + Web Locks en process-store - Specs E2E migradas de Dexie a Supabase ## [0.4.0] - 2026-06-18 ### Added - Autenticación Google Workspace OAuth + Supabase - Migración completa IndexedDB (Dexie) → PostgreSQL (Supabase) - Row Level Security con `is_platform_admin()` y políticas granulares - Catálogo global de recursos (sin processId) - Identidad en UI: avatar/dropdown AppHeader, "Actualizado por" en proceso - ResourceCatalogPage + ResourceFormSheet - Fix Web Locks API deadlock (processLock) - Fix `.maybeSingle()` en simulation-repo - Fix `formatCostPerHour()` precisión dinámica - Fix Google OAuth `prompt: 'select_account'` - Catálogo con contexto de proceso (banner + query param fromProcess) ## [0.3.0] - 2026-05-27 ### Added - Biblioteca de procesos con grupos/tags/búsqueda (Dexie v4) - Indicador de simulación desactualizada ("Hay cambios sin simular") - Zoom BPMN fit-viewport - Recursos TO-BE en escenario automatizado (motor + UI + reporte + PDF) - Branding InQ ROI en todas las páginas (AppHeader + favicon + logos) - Kit de socialización del equipo: guía de usuario, guía de pre-venta, presentación PPTX ## [0.2.0] - 2026-05-20 ### Added - Modelo de recursos `utilizationMinutes + units` (migración Dexie v3) - ActivityPanel con cálculo de costo en tiempo real - Reporte web con filas expandibles de desglose de recursos - Edición inline de proceso/cliente - Tabla de recursos en PDF (página condicional) ## [0.1.5] - 2026-05-18 ### Added - Identidad visual completa: paleta naranja InQ #F59845, gradiente → magenta #ED3E8F - PDFs de clase profesional: 3 documentos (Actual, Automatizado, ROI) - Badge ⚡ en canvas BPMN para actividades automatizables - ROI con 5 KPIs - Sistema de componentes establecido ## [0.1.0] - 2026-05-01 ### Added - MVP: importar BPMN 2.0, parametrizar actividades, simular costos, exportar PDF - Motor de simulación AS-IS / TO-BE (Modelo A) - Heatmap de costos en canvas BPMN - Reporte web básico con tabla de actividades y gráfico de barras