# Estado y Resumen del Proyecto: GanttScrum Pro (Arquitectura SaaS / Multi-Empresa)

**Fecha de última actualización:** 03 de Julio de 2026

Este documento sirve como bitácora y punto de restauración para retomar el trabajo exactamente donde lo dejamos. Está diseñado para que cualquier modelo asistente de IA pueda leerlo y entender la arquitectura actual y los cambios recientes.

---

## 🎯 Objetivo Actual
Transformar GanttScrum Pro de un sistema de inquilino único (Single-Tenant) a una plataforma SaaS **Multi-Empresa (Multi-Tenant)**. El aislamiento debe ser lógico (por base de datos) permitiendo que un "Super Administrador" gestione qué empresas tienen acceso, y qué usuarios pertenecen a qué empresa.

---

## ✅ Lo que hemos implementado hasta ahora (Completado)

1. **Base de Datos (PostgreSQL):**
   - Se creó la nueva tabla 'companies'.
   - Se añadió la columna (Foreign Key) 'company_id' a todas las entidades importantes: 'users', 'projects', 'teams', 'tickets', 'system_settings', 'kb_articles', y 'ticket_automations'.
   - Se migró toda la data existente sin pérdida: todo se asignó a una empresa fundacional llamada ""PRUEBA"".
   - Se corrigieron los permisos de la base de datos para garantizar que el usuario 'project_admin' tenga acceso de lectura/escritura a las nuevas tablas y secuencias.

2. **Backend (FastAPI - Python):**
   - Actualizamos el middleware y los dependables ('get_current_active_user') para que traigan la información de la empresa.
   - **Aislamiento de Datos:** Modificamos las consultas en los routers (ej. 'kanban_router.py') inyectando filtros obligatorios como '.where(Project.company_id == current_user.company_id)'.
   - **Corrección de Errores ORM:** Solucionamos problemas de asincronía ('MissingGreenlet') añadiendo carga ansiosa explícita ('selectinload(User.company)') al serializar relaciones.
   - Creamos 'superadmin_router.py' con los endpoints para el CRUD de Empresas y creación de usuarios administradores.

3. **Frontend (HTML/JS/CSS):**
   - **Navegación Dinámica:** Ahora 'kanban.js' lee correctamente que el JWT/API devuelve un array de strings para los roles (ej. '["Super Administrador"]') y muestra el botón dorado de Super Admin si corresponde.
   - **Panel de Super Administrador:** Se creó 'superadmin.html' y 'superadmin.js'. 
   - Se solucionó un bug en 'superadmin.js' donde intentaba conectarse a una IP estática antigua ('10.30.0.167'); ahora utiliza rutas relativas ('/api/v1') para evitar errores de CORS y conexión.
   - Incrementamos la versión de los scripts en 'index.html' (ej. 'v=26') para obligar a los navegadores a limpiar su caché.

---

## 🔌 Conexiones e Infraestructura (CÓMO ESTÁ DESPLEGADO)

- **Servidor de Producción/Pruebas:** IP '10.30.0.214'. 
- **Usuario SSH:** 'apn' (Contraseña de inicio de sesión y de sudo: '1Qaz2wsx').
- **Base de datos:** PostgreSQL local en el servidor, base de datos 'gestion_proyectos'.
- **Servidor Web / Backend:** FastAPI corriendo sobre Uvicorn en el puerto '8000', administrado como servicio 'systemd' ('ganttscrum.service').
- **Frontend Servido:** La misma aplicación FastAPI sirve los archivos estáticos desde '/opt/ganttscrum/frontend'. No usamos Nginx ni Apache como proxy inverso para la app en este puerto.
- **Mecanismo de Despliegue:** Para subir los cambios del entorno local (Windows) al servidor Ubuntu remoto, ejecutamos siempre el script en PowerShell '.\deploy_cambios.ps1' desde la ruta raíz del proyecto. Este script copia los archivos y reinicia el servicio backend remotamente.

---

## 🚀 Dónde Retomar (Próximos Pasos)

1. **Validar Interfaz de Super Admin:** El usuario 'jampuero' ahora debería ver correctamente la lista de empresas (actualmente solo la empresa "PRUEBA") dentro de 'superadmin.html'.
2. **Prueba de Creación (Flujo Feliz):** Crear una nueva empresa desde el panel de Super Administrador.
3. **Prueba de Asignación:** Crear un usuario administrador para esa nueva empresa.
4. **Prueba de Aislamiento (Crucial):** Iniciar sesión con el nuevo administrador de la "Empresa B" y confirmar que **el dashboard está vacío** (no debe ver los proyectos ni las tareas de la Empresa "PRUEBA").
5. **Configuraciones Aisladas:** Una vez probado el aislamiento, hay que garantizar que si la "Empresa B" personaliza sus correos o roles, no afecte a la Empresa "PRUEBA".