08. System Requirements Specification (SRS) & RTM
Fase: 03 — Ingeniería de Requisitos
Entregable: 08 de 09
Proyecto: NoteVault (PC Windows, macOS, Linux, Android, iOS / iPhone)
Estándar Normativo: ISO/IEC/IEEE 29148:2018 (Systems and Software Engineering — Life Cycle Processes — Requirements Engineering)
Estado: Formalizado y Certificado
1. Especificación Canónica de Requisitos del Sistema (ISO 29148)
El presente documento constituye el Libro Blanco de Requisitos del Sistema (SRS) de NoteVault. Consolida la arquitectura funcional de los 15 módulos, los atributos de calidad no funcionales y la trazabilidad bidireccional de extremo a extremo que rige el diseño, construcción y certificación del producto.
1.1 Propósito y Filosofía del Producto
NoteVault es un entorno de productividad personal y aceleración del aprendizaje construido bajo los principios de soberanía de datos Local-First, arquitectura sin servidor central (Zero-Backend) y paridad multi-dispositivo (Desktop & Mobile Symmetry). Todos los módulos operan sobre el sistema de archivos local mediante formatos abiertos (.md, .canvas, .json).
2. Matriz de Trazabilidad de Requisitos (RTM)
La siguiente Requirements Traceability Matrix (RTM) mapea cada Requerimiento Funcional y No Funcional a su origen en la elicitación (CR), su módulo responsable, el artefacto de diseño técnico y su test de verificación automatizada:
| Código Requisito | Origen (CR) | Descripción Funcional y de Calidad | Módulo Responsable | Componente de Diseño / Código Fuente | Prueba de Verificación |
|---|---|---|---|---|---|
| RF-NOTES-01 | CR-01 | Edición WYSIWYG Markdown y CommonMark/GFM | MOD-NOTES |
frontend/src/components/notes/NotesModule.tsx |
Vitest: appNotes.test.ts |
| RF-NOTES-02 | CR-01 | Renderizado KaTeX en línea y bloque | MOD-NOTES |
frontend/src/components/notes/KaTeXRenderer.tsx |
Vitest: renderizado SVG/HTML |
| RF-NOTES-03 | CR-01 | Resolución de wikilinks [[...]] |
MOD-NOTES |
frontend/src/components/notes/WikiLinks.tsx |
Vitest: navegación y enlaces |
| RF-NOTES-05 | CR-18 | Guardado atómico con detección de mtime | MOD-NOTES |
notevault_app/core/storage.py & bridge |
Vitest: appFixes.test.ts |
| RF-HOME-01 | CR-02 | Daily Hub con saludo, tareas y hábitos de hoy | MOD-HOME |
frontend/src/components/home/HomeModule.tsx |
E2E: montaje en < 25 ms |
| RF-CANVAS-01 | CR-03 | Canvas 2D infinito compatible con Obsidian | MOD-CANVAS |
frontend/src/components/canvas/CanvasView.tsx |
Vitest: canvas.test.ts |
| RF-CANVAS-03 | CR-03 | Generador de canvas por spec Fullstack | MOD-CANVAS |
notevault_app/core/deliverable_canvas.py |
Pytest: test_deliverable_canvas.py |
| RF-CAL-01 | CR-04 | Calendario mensual agregando tarjetas SRS | MOD-CALENDAR |
frontend/src/components/calendar/CalendarModule.tsx |
Vitest: calendar.test.ts |
| RF-CAL-03 | CR-04 | Reprogramación de tareas por arrastre | MOD-CALENDAR |
frontend/src/components/calendar/DragSchedule.tsx |
Vitest: mutación fecha due |
| RF-HAB-01 | CR-05 | CRUD de hábitos con cue, routine y reward | MOD-HABITS |
frontend/src/components/habits/HabitsModule.tsx |
Vitest: habits.test.ts |
| RF-HAB-02 | CR-05 | Cálculo determinista de rachas continuas | MOD-HABITS |
frontend/src/store/habits.ts |
Vitest: tests de cambio de año |
| RF-GYM-01 | CR-06 | Registro de series de pesas con peso y reps | MOD-EXERCISE |
frontend/src/components/exercise/ExerciseModule.tsx |
Vitest: exercise.test.ts |
| RF-GYM-02 | CR-06 | Temporizador de descanso automático | MOD-EXERCISE |
frontend/src/store/restTimer.ts |
Vitest: restTimer.test.ts |
| RF-GYM-03 | CR-06 | Cálculo de 1RM con fórmula de Epley | MOD-EXERCISE |
frontend/src/store/exerciseCoach.ts |
Vitest: exerciseCoach.test.ts |
| RF-NUT-01 | CR-07 | Registro de alimentos y macronutrientes P,C,G | MOD-NUTRITION |
frontend/src/components/nutrition/NutritionModule.tsx |
Vitest: nutrition.test.ts |
| RF-NUT-05 | CR-07 | Contador de consumo de agua acumulado | MOD-NUTRITION |
frontend/src/store/nutrition.ts |
Vitest: incremento en ml |
| RF-TSK-01 | CR-08 | Tareas atómicas con prioridades P1-P4 | MOD-TASKS |
frontend/src/components/tasks/TasksModule.tsx |
Vitest: tasks.test.ts |
| RF-TSK-04 | CR-08 | Regeneración de tareas recurrentes al completar | MOD-TASKS |
frontend/src/store/tasks.ts |
Vitest: recurrencia semanal/mensual |
| RF-PRJ-01 | CR-09 | Tablero Kanban gobernando 12 fases SDLC | MOD-PROJECTS |
frontend/src/components/projects/ProjectsModule.tsx |
Vitest: projects.test.ts |
| RF-GOL-01 | CR-10 | Sistema de OKRs estratégicos anual/trimestral | MOD-GOALS |
frontend/src/components/goals/GoalsModule.tsx |
Vitest: goals.test.ts |
| RF-FIN-01 | CR-11 | Transacciones de ingresos, gastos y cuentas | MOD-FINANCE |
frontend/src/components/finance/FinanceModule.tsx |
Vitest: finance.test.ts |
| RF-FIN-03 | CR-11 | Presupuestos por categoría y semáforo visual | MOD-FINANCE |
frontend/src/store/financeCoach.ts |
Vitest: financeCoach.test.ts |
| RF-STU-01 | CR-12 | Motor SRS basado en SuperMemo SM-2 | MOD-STUDY |
frontend/src/components/study/ReviewCalendar.tsx |
Vitest: progresión de intervalos |
| RF-STU-03 | CR-12 | Tríada canónica de matemáticas (c., t., e.) | MOD-STUDY |
docs/knowledge_base/SYLLABUS_MATH.md |
Python: check_kb_notes.py (0 err) |
| RF-ENG-01 | CR-13 | Reproductor de audio/video con subtítulos | MOD-ENGLISH |
frontend/src/components/english/EnglishPlayer.tsx |
Vitest: player.test.ts |
| RF-ENG-03 | CR-13 | Bucle de repetición de frase (Shadowing) | MOD-ENGLISH |
frontend/src/store/player.ts |
Vitest: repetición de timestamps |
| RF-ENG-05 | CR-13 | Mini-Player flotante persistente | MOD-ENGLISH |
frontend/src/components/english/MiniPlayer.tsx |
Vitest: miniPlayer.ts |
| RF-MEN-01 | CR-14 | Generador curricular (together/phased) |
MOD-MENTOR |
frontend/src/components/mentor/MentorModule.tsx |
Vitest: mentor.ts |
| RF-MEN-02 | CR-14 | Temporizador Pomodoro en barra superior | MOD-MENTOR |
frontend/src/components/TopBarPomodoro.tsx |
Vitest: TopBarPomodoro.test.tsx |
| RF-MEN-03 | CR-14 | Modal de evaluación post-pomodoro | MOD-MENTOR |
frontend/src/components/mentor/PomodoroAssessmentModal.tsx |
Vitest: persistencia de sesión |
| RF-WEB-01 | CR-15 | Navegador en partición aislada persist:nvweb |
MOD-WEB |
frontend/src/components/web/WebModule.tsx |
E2E: aislamiento de cookies |
| RF-WEB-02 | CR-15 | Bloqueo de distracciones en modo estudio | MOD-WEB |
frontend/src/store/webPages.ts |
Vitest: webPages.test.ts |
| RF-WEB-03 | CR-15 | Recortador de artículos a Markdown | MOD-WEB |
frontend/src/lib/webClipper.ts |
Vitest: extracción Readability |
| NFR-01 | CR-20 | Latencia de carga de notas < 30 ms | Transversal |
Motor de renderizado CodeMirror 6 | Benchmark automatizado |
| NFR-05 | CR-24 | Seguridad Electron (contextIsolation, no node) | Transversal |
frontend/electron/main.ts |
Auditoría de opciones de ventana |
| NFR-06 | CR-25 | Sanitización HTML contra XSS con DOMPurify | Transversal |
frontend/src/lib/sanitize.ts |
Test de penetración XSS |
| NFR-08 | CR-18 | Cero corrupción de archivos (guardado atómico) | Transversal |
Protocolo I/O .tmp + fs.rename |
Test de corte abrupto de hilo |
| NFR-11 | CR-22 | Simetría multiplataforma PC y Móvil | Transversal |
Formato de bóveda VAULT_FORMAT.md v4 |
Conformidad a nivel de bytes |
| NFR-13 | CR-16 | Accesibilidad WCAG 2.1 AA | Transversal |
Tokens CSS y soporte de teclado | styles.contrast.test.ts |