Actividad -> Tarea, sin nivel "sub" intermedio (no hay una entidad "Tarea" de la que estas fueran sub-, asi que el prefijo sobraba). Tabla subtasks -> tasks (RENAME TABLE idempotente en la migracion 005; 001_initial.sql tambien actualizado para que una instalacion nueva cree la tabla ya con el nombre final, sin pasar por el nombre viejo). Modulo backend, rutas, servicio frontend, pestaña del detalle de actividad, i18n y documentacion actualizados. Sin cambios de comportamiento, solo nombres. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
8.2 KiB
AGENTS.md - project.linkedcorp.net
⚠️ ANTES DE ACTUAR, lee el orquestador del grupo:
/home/mgonzalez/desarrollo/project-md-templates/leeme_primero.txtReglas globales (infra, secretos, UI/UX, Android, Git, versionado). Este archivo es solo el contexto especifico del proyecto.
⛔ AISLAMIENTO: SOLO ESTE PROYECTO
Regla dura del grupo (detalle en el orquestador, seccion "REGLA DE AISLAMIENTO ENTRE PROYECTOS"):
- Se trabaja SOLO sobre este proyecto. Los otros proyectos del grupo NO se tocan NI se leen.
- Leer otro proyecto: unicamente si el usuario lo pide TEXTUALMENTE en ese pedido.
- Modificar otro proyecto: NUNCA, ni aunque el usuario lo nombre.
- Recursos compartidos (puertos, NPM, systemd, BD, DNS): verificar en la fuente real que esten libres antes de ocuparlos; solo crear objetos nuevos de ESTE proyecto.
Proposito
Contexto especifico del proyecto para el asistente de IA. No repite las reglas globales del grupo,
que estan en el orquestador leeme_primero.txt.
Identidad del proyecto
- Nombre:
project.linkedcorp.net - Tipo: fullstack (gestión y seguimiento de proyectos/actividades TI)
- Estado: development
- Ruta raiz:
/home/mgonzalez/desarrollo/project.linkedcorp.net
Stack real del proyecto
Frontend
- React + Vite
- UI: CSS propio por tokens (sin Tailwind) siguiendo la identidad
docs/UI-UX-WINDOWS.md(Fluent/Windows 11) - Iconos:
lucide-react
Backend
- Node.js + Express
- API base:
/api
Base de datos
- Motor: MariaDB
- Base principal:
project_linkedcorp - Host dev:
192.168.222.20/ Host prod:192.168.222.32(NO mezclar) - La base ya existe: sí (creada en dev el 2026-09-03 con
crear-db-dev.sh)
Arquetipo de despliegue
B — Dos servicios separados (frontend y backend como procesos independientes).
- systemd:
project-linkedcorp-frontendyproject-linkedcorp-backend(a crear en el primer deploy). - NPM: Proxy Host al frontend + Custom Location
/apial backend. - Puertos (registrados en
PORTS_INVENTORY.mddel grupo): frontend5196, backend4019.
Identidad UI/UX — DECISIÓN DE ESTE PROYECTO (no es la identidad estándar del grupo)
Este proyecto usa UI-UX-WINDOWS.md / UI-UX-WINDOWS.html (Fluent Design / Windows 11:
NavigationView, clic derecho, Master-Detail, ContentDialog/InfoBar/Flyout/Toast) en vez de
UI-UX-LINKEDCORP.md (identidad web estándar del grupo). Fue decisión explícita del usuario al
arrancar el proyecto. Copia ajustada en docs/UI-UX-WINDOWS.md.
Adaptación web (no es una app empaquetada, corre en pestaña de navegador):
- SÍ: tokens de color, tipografía, NavigationView, ListView+clic derecho, Master-Detail, ContentDialog, InfoBar, Toast, Flyout, ComboBox/DatePicker propios, Expander, Treeview.
- NO: barra de título falsa con minimizar/maximizar/cerrar (no hay ventana de SO que controlar).
- Igual obligatorio: idioma es-EC/en-US + tema claro/oscuro + apariencia de botones, todo persistido.
- Set de íconos: Lucide (única opción usada en este proyecto).
Estructura acordada
frontend/backend/docs/
Modulos principales (MVP — ver SPEC.md para el detalle y lo diferido a fase 2)
- Seguridad (usuarios, roles fijos, sesión, auditoría)
- Organización (departamentos con sub-áreas, usuarios)
- Proyectos (con miembros)
- Actividades + Tareas + dependencias simples
- Dashboard (KPIs)
- Calendario y Gantt de solo lectura
- Comentarios y adjuntos
- Notificaciones in-app
- Configuración (catálogos: estados, prioridades, tipos de proyecto)
Restricciones tecnicas
- No romper estructura existente.
- Mantener frontend y backend separados (arquetipo B).
- Variables de entorno, nunca secretos en código.
- Empresa asumida como única (single-company): no hay tabla
companiesen el MVP. - Permisos por rol codificados en backend (
backend/src/middleware/auth.js), no configurables por UI en el MVP — ver tabla de roles en SPEC.md.
Arquitectura esperada
Backend
routes -> controller -> service -> repository -> db- Un directorio por módulo en
backend/src/modules/<modulo>/
Frontend
src/components(UI base Windows: NavigationView, ContentDialog, InfoBar, Toast, Flyout, ListView, ComboBox, DatePicker, Treeview, Field, Button)src/pages(Login, Dashboard, Organizacion, Proyectos, Configuracion)src/services(cliente API por módulo)src/context(auth, ui: tema/idioma/dialog/toast)src/i18n
Seguridad (proyecto con auth/usuarios)
- Permisos validados SIEMPRE en el backend, nunca solo en el frontend.
- Autorregistro con doble candado (decisión posterior al MVP inicial, ver
SPEC.md): el usuario se crea a sí mismo pero quedapending_verification→ confirma su correo (token de un solo uso, 24h) →pending_approval→ unadmin/superadminaprueba (elige rol/departamento) o rechaza (se borra). Solo el usuario más antiguo del sistema essuperadminautomático (bootstrap, sin correo ni aprobación — no hay quién lo apruebe). El admin sigue pudiendo crear usuarios directamente (ya activos, sin pasar por este flujo) desde Organización → Usuarios. 401→ el frontend limpia sesión, redirige a login y muestra aviso (ContentDialog).- Cierre de sesión por expiración de JWT.
- Auditoría en BD (
audit_log): usuario, acción, entidad, fecha/hora, detalle. - Credenciales/secretos solo en
.env(nunca en código);.env.examplesí se versiona. Excepción: el SMTP del sistema NO vive en.env— lo carga elsuperadmindesde Configuración → Correo (SMTP), queda ensystem_settingscon la clave cifrada (AES-256-GCM,ENCRYPTION_KEY). - Cifrado: bcrypt para contraseñas; AES-256-GCM (
backend/src/utils/crypto.js) para secretos de terceros guardados en BD (hoy: la clave SMTP). - Revalidar
is_activedel usuario en cada request (un JWT firmado no basta); el login además revisastatus(pending_verification/pending_approvaldan un mensaje especifico, no login). - SQL siempre parametrizado. Uploads: validar MIME/tamaño, ruta de archivo generada por el servidor.
forgot-passwordresponde SIEMPRE genérico (exista o no el correo); el envío de correo nunca debe poder tumbar ni cambiar la respuesta de un endpoint (sendMailatrapa sus propios errores).- Sin SMTP configurado, el sistema degrada a modo dev: los correos de verificación/recuperación se loguean en la consola del backend en vez de enviarse (nunca rompe el flujo).
Regla de UX para pantallas
- No mezclar listado y formulario de creación en la vista inicial de un módulo.
- Primero el listado; botón "Nuevo" abre creación.
- Detalle abre en modo lectura; "Editar" habilita campos; "Cancelar" vuelve a lectura sin guardar; guardar solo si hubo cambios reales.
- Secciones de una misma entidad (Proyecto: Info/Actividades/Gantt/Calendario/Comentarios/Documentos) van en pestañas reales, nunca apiladas ni navegando a otra pantalla.
Flujos criticos
- Login → Dashboard con KPIs del usuario.
- Crear proyecto → asignar miembros → crear actividades → crear tareas → avance se recalcula solo.
- Actividad vencida o por vencer → notificación in-app al responsable.
Entorno operativo
- Desarrollo:
npm run devenbackend/(puerto 4019) yfrontend/(puerto 5196, proxy/api). - Producción: operativo en
https://project.linkedcorp.net(servidor192.168.222.3, arquetipo B, verPRODUCCION.mdyDEPLOY_WEB.md). - Docker por defecto: no.
Regla de versionado
- Versionado
X.Y.Z(ver VERSIONADO.md). - Antes de producción, validar si corresponde subir versión.
- Toda versión nueva se refleja en
VERSIONyCHANGELOG.md.
Documentacion relacionada
README.md,SPEC.md,BASE_DE_DATOS.md,CONFIGURACION.md,API.md,VERSIONADO.mdPRODUCCION.md,DEPLOY_WEB.md(topología y flujo de deploy — arquetipo B, en producción)docs/UI-UX-WINDOWS.md,docs/SEGURIDAD-Y-CALIDAD.mdESTADO.md(handoff — leer siempre al retomar el proyecto)
Pendientes para quedar listo
- Fase 2: riesgos/incidencias como módulos propios, solicitudes formales, recursos/proveedores, presupuesto y costos, registro de horas detallado, reportes exportables (PDF/Excel/CSV), permisos configurables por módulo×acción, notificaciones por email.
- Limpiar
.mddel source en producción (find ... -iname '*.md' -delete) — pendiente, verESTADO.md.