Page:
Requerimientos no funcionales
Clone
3
Requerimientos no funcionales
Guillermo.Arrieta edited this page 2026-02-26 18:50:43 +00:00
Table of Contents
- Requerimientos no funcionales
- 1. Seguridad y cumplimiento
- 2. Rendimiento y escalabilidad
- 3. Confiabilidad, disponibilidad y tolerancia a fallos
- 4. Usabilidad y experiencia de usuario
- 5. Mantenibilidad y arquitectura
- 6. Trazabilidad y auditoría de cambios
- 7. Concurrencia y edición simultánea
- 8. Integración, portabilidad y flexibilidad
- 9. Observabilidad, monitoreo y métricas
- 10. Documentación y operación
Requerimientos no funcionales
(lunes, 8 de diciembre de 2025, 12:02 p. m.)
1. Seguridad y cumplimiento
- El sistema deberá proteger todas las comunicaciones (frontend-backend-Supabase-OpenAl-Carbone) usando HTTPS/TLS extremo a extremo.
- Las API keys (OpenAl, Carbone, Supabase service role, etc.) deberán almacenarse en variables de entorno / gestor de secretos, nunca en el código ni en el cliente.
- Toda operación sensible (crear/editar planes, materias, estados, plantillas) deberá validarse en el backend / Edge Functions, sin confiar solo en la UI.
- El sistema deberá registrar en bitácoras quién hizo qué cambio (usuario, timestamp, entidad afectada), suficiente para auditoría interna y aclaración de controversias.
- Deberán seguirse buenas prácticas mínimas de protección de datos personales (especialmente si hay nombres/correos de expertos y profesores):
- No exponer datos innecesarios en listados.
- Ocultar correos personales a usuarios sin privilegio.
- Logs sin información sensible en texto plano.
2. Rendimiento y escalabilidad
- La interfaz deberá cargar el tablero principal / listado de planes en un tiempo percibido razonable (por ejemplo, < 3s en condiciones normales de red académica), utilizando paginación y filtros desde el backend.
- Las consultas intensivas (ej. lectura masiva de planes, historiales) deberán estar apoyadas en índices en Supabase y en selects específicos, no select * indiscriminados.
- Las llamadas a IA (OpenAI) y generación de documentos (Carbone) deberán implementarse como acciones asíncronas con feedback visual (loading, "pensando...") para no bloquear la UI.
- El sistema deberá escalar horizontalmente de forma natural con Supabase/TanStack Query (cache, revalidación, lazy loading), sin dependencias en memoria local del servidor.
3. Confiabilidad, disponibilidad y tolerancia a fallos
- El sistema deberá manejar errores de servicios externos (OpenAl, Carbone, API de biblioteca) de forma controlada:
- Mensajes claros al usuario.
- Reintentos cuando tenga sentido.
- No pérdida de los datos capturados en formularios.
- En caso de falla al generar un plan con IA, el sistema deberá conservar el prompt y parámetros enviados para poder reintentar sin reescribir todo.
- La generación de documentos (Carbone) deberá ser idempotente: volver a generar el mismo documento no debe corromper datos ni estados.
- Las Edge Functions deberán tener manejo explícito de timeouts y límites (tokens, tamaño de archivos, etc.) para evitar bloqueos.
4. Usabilidad y experiencia de usuario
- La Ul deberá estar diseñada para que un jefe de carrera / profesor no técnico pueda:
- Entender dónde está en el flujo del plan.
- Editar secciones sin ver JSON.
- Invocar IA con botones claros tipo "Generar borrador" / "Mejorar texto".
- La interfaz deberá usar componentes consistentes (Shadcn + Tailwind) y un layout estable (sidebar, header, contenido) para reducir la curva de aprendizaje.
- Las interacciones con IA deberán tener feedback visual:
- Estado "pensando" (animaciones sutiles tipo "IA respirando").
- Claridad de cuándo llegó la respuesta y qué cambió.
- No abusar de animaciones que entorpezcan formularios.
- Los efectos visuales "wow" (confetis al generar plan, degradados vivos, etc.) deberán ser opcionales y no bloquear la acción principal ni afectar el rendimiento.
- Los mensajes de error deberán ser explicativos ("No se pudo generar el documento, el servicio externo tardó demasiado...") y no genéricos tipo "Error 500".
- Al realizar acciones de modificación, se debe pedir confirmación al usuario, especialmente si son destructivas.
5. Mantenibilidad y arquitectura
- La lógica de negocio deberá residir en:
- Backend/ Edge Functions (validaciones, llamadas a IA, Carbone, integraciones).
- No en componentes de React dispersos.
- El frontend deberá aplicar un patrón de separación de responsabilidades:
- Componentes de presentación (UI).
- Hooks/servicios de datos (TanStack Query, llamadas a API).
- Mínima lógica en el JSX.
- El sistema deberá incluir al menos:
- Estándares de estilo (ESLint/Prettier)
- Tipado con TypeScript
- Nombres de tablas y campos coherentes.
- Debe existir una capa clara para hablar con OpenAl (una especie de "IA service") que unifique:
- Cómo se construyen los prompts.
- Cómo se manejan Vector Stores/uploads/ MCP.
- Cómo se recuperan y validan respuestas estructuradas.
- Se deberá evitar el acoplamiento fuerte entre estructura de BD y estructura SEP para permitir ajustes futuros (nuevas plantillas, nuevos campos).
6. Trazabilidad y auditoría de cambios
- El sistema deberá registrar cada cambio relevante en planes y materias:
- Quién lo hizo.
- Qué se cambió (antes/después, al menos por secciones).
- Cuándo ocurrió.
- Los archivos usados como referencia (subidos por usuario o IA) deberán quedar almacenados en Supabase Storage o repositorio equivalente, asociados al plan / materia.
- Las interacciones importantes con IA deberán registrarse:
- Prompt (o versión anonimizada si aplica).
- Fuentes usadas (vector store, uploads, MCP, etc.).
- Resultado aplicado / rechazado.
- La plataforma deberá permitir reconstruir "cómo llegamos" a la versión actual de un plan: cadena de versiones + archivos + decisiones de IA aceptadas.
7. Concurrencia y edición simultánea
El sistema deberá evitar, como mínimo, pérdida silenciosa de cambios cuando dos usuarios editen el mismo plan:Estrategia simple: versión/timestamp y rechazo de actualización si la versión cambió.Mensaje al usuario indicando que alguien más modificó el plan.
Opcional/Más adelante: el sistema podrá mostrar una advertencia de edición concurrente ("El usuario X está editando este plan ahora"), aunque no llegue a nivel Canva con cursores en tiempo real.- Los formularios largos deberán guardar datos intermedios o permitir guardado parcial, para evitar perder trabajo por cierre de sesión o errores de red. En cookies o local storage
8. Integración, portabilidad y flexibilidad
- El sistema deberá ser capaz de soportar cambios en lineamientos SEP mediante:
- Configuración de diferentes "plantillas de estructura de plan".
- No depender de un único modelo rígido hardcodeado.
- La integración con la API de biblioteca deberá estar desacoplada (adaptador) para poder cambiar la implementación sin reescribir toda la lógica de materias.
- La gestión de usuarios externos (expertos) deberá permitir, al menos:
- Invitar vía link firmade/token-e cuenta ligera.
- Restringir lo que pueden ver/editar/comentar sin tocar toda la arquitectura de auth.
9. Observabilidad, monitoreo y métricas
- El sistema deberá registrar logs de:
- Errores de frontend (captura básica).
- Errores de Edge Functions.
- Fallos de OpenAI / Carbone / APIs externas.
Deberán existir métricas mínimas:Número de planes creados/actualizados.Latencia promedio de llamadas a IA.Tasa de errores por módulo.
El equipo deberá poder identificar cuellos de botella (por ejemplo, generación de PDF muy lenta) a partir de estos logs/métricas y priorizar mejoras.
10. Documentación y operación
- Deberá existir documentación básica y actualizada sobre:
- Arquitectura general (frontend, backend, Supabase, IA, Carbone).
- Flujo de despliegue (cómo se sube una nueva versión).
- Cómo agregar un nuevo template de plan / materia.
- Las Edge Functions y módulos de IA deberán estar documentados con:
- Inputs esperados (JSON).
- Esquemas de salida.
- Manejo de errores típico.
- Deberá existir una guía corta para usuarios clave (jefes de carrera, secretarios académicos) explicando:
- Cómo crear/editar/mandar a aprobación un plan.
- Cómo usar las funciones de IA de forma segura y responsable.