erp-core/docs/04-modelado/trazabilidad/README.md

485 lines
14 KiB
Markdown

# MATRICES DE TRAZABILIDAD - ERP GENÉRICO
**Fecha:** 2025-11-24
**Versión:** 1.0
**Total Módulos:** 14
**Total RF:** 80
**Total ET:** 160 (80 Backend + 80 Frontend)
**Total Tablas BD:** 93
**Total Test Cases estimados:** ~800
---
## Índice de Matrices de Trazabilidad
| Archivo YAML | Módulo | Nombre | RF | Story Points | Prioridad | Estado |
|--------------|--------|--------|-----|--------------|-----------|--------|
| [TRACEABILITY-MGN-001.yaml](TRACEABILITY-MGN-001.yaml) | MGN-001 | Fundamentos | 8 | 68 SP | P0 (MVP) | ✅ Completado |
| TRACEABILITY-MGN-002.yaml | MGN-002 | Empresas y Organizaciones | 5 | 34 SP | P0 (MVP) | ⏳ Pendiente |
| TRACEABILITY-MGN-003.yaml | MGN-003 | Catálogos Maestros | 6 | 29 SP | P0 (MVP) | ⏳ Pendiente |
| TRACEABILITY-MGN-004.yaml | MGN-004 | Financiero Básico | 8 | 81 SP | P0 (MVP) | ⏳ Pendiente |
| TRACEABILITY-MGN-005.yaml | MGN-005 | Inventario Básico | 7 | 66 SP | P0 (MVP) | ⏳ Pendiente |
| TRACEABILITY-MGN-006.yaml | MGN-006 | Compras Básico | 6 | 42 SP | P0/P1 | ⏳ Pendiente |
| TRACEABILITY-MGN-007.yaml | MGN-007 | Ventas Básico | 6 | 45 SP | P0 (MVP) | ⏳ Pendiente |
| TRACEABILITY-MGN-008.yaml | MGN-008 | Contabilidad Analítica | 5 | 35 SP | P0 (MVP) | ⏳ Pendiente |
| TRACEABILITY-MGN-009.yaml | MGN-009 | CRM Básico | 5 | 31 SP | P1 | ⏳ Pendiente |
| TRACEABILITY-MGN-010.yaml | MGN-010 | RRHH Básico | 5 | 29 SP | P1 | ⏳ Pendiente |
| TRACEABILITY-MGN-011.yaml | MGN-011 | Proyectos Genéricos | 5 | 40 SP | P1 | ⏳ Pendiente |
| TRACEABILITY-MGN-012.yaml | MGN-012 | Reportes y Analytics | 4 | 39 SP | P1 | ⏳ Pendiente |
| TRACEABILITY-MGN-013.yaml | MGN-013 | Portal de Usuarios | 4 | 29 SP | P1 | ⏳ Pendiente |
| TRACEABILITY-MGN-014.yaml | MGN-014 | Mensajería y Notificaciones | 6 | 47 SP | P0 (MVP) | ⏳ Pendiente |
**Total:** 14 archivos YAML | 80 RF | 673 SP
---
## Propósito de las Matrices de Trazabilidad
Las matrices de trazabilidad YAML sirven para:
### 1. **QA y Testing**
- Asegurar que cada RF tiene tests backend + frontend completos
- Verificar cobertura de test cases (unit, integration, e2e)
- Validar que criterios de aceptación tienen tests asociados
- Identificar gaps de testing antes de implementación
### 2. **Gestión de Proyecto**
- Rastrear implementación de RF (Backend + Frontend + Tests)
- Medir progreso por módulo (% RF completados)
- Identificar dependencias entre RFs y módulos
- Estimar duración de sprints con precisión
### 3. **Desarrollo**
- Referencias rápidas a archivos de código (services, controllers, components)
- Mapping claro RF → ET → Implementación → Tests
- Validar que reglas de negocio están implementadas y testeadas
- Documentación de endpoints y rutas frontend
### 4. **Auditoría y Compliance**
- Demostrar que cada RF tiene trazabilidad completa
- Vincular cada regla de negocio con su implementación y validación
- Justificar estimaciones de Story Points
- Reportes de cobertura para stakeholders
---
## Estructura de cada Archivo YAML
Cada archivo `TRACEABILITY-MGN-XXX.yaml` contiene:
### Metadata del Módulo
```yaml
module:
id: MGN-XXX
name: "Nombre del Módulo"
description: "Descripción breve"
priority: P0 | P1 | P2
story_points: XX
status: Diseñado | En Desarrollo | Completado
metadata:
total_rf: X
total_et_backend: X
total_et_frontend: X
total_tables: X
total_tests: Y
coverage: 100%
```
### Por cada Requerimiento Funcional (RF)
```yaml
requirements:
- rf_id: RF-MGN-XXX-YYY
rf_title: "Título del RF"
rf_file: "ruta/al/archivo.md"
priority: P0 | P1 | P2
story_points: X
# Especificación Técnica Backend
et_backend:
file: "ruta/ET-BACKEND.md"
endpoints: [...]
services: [...]
controllers: [...]
dtos: [...]
# Especificación Técnica Frontend
et_frontend:
file: "ruta/ET-FRONTEND.md"
routes: [...]
components: [...]
api_client: [...]
state_management: [...]
# Tablas de Base de Datos
database_tables:
- schema: xxx
table: yyy
file: "ruta/schema.sql"
operations: [SELECT, INSERT, UPDATE, DELETE]
indices: [...]
rls_policy: "policy_name"
# Test Cases
tests:
backend:
unit_tests: [...]
integration_tests: [...]
frontend:
component_tests: [...]
e2e_tests: [...]
# Criterios de Aceptación
acceptance_criteria:
- id: AC-001
description: "..."
status: Pending | Passed | Failed
test_reference: "archivo:línea"
# Reglas de Negocio
business_rules:
- id: RN-001
description: "..."
implementation: "archivo:función/línea"
test_reference: "archivo:test_case"
# Dependencias
dependencies:
rf_dependencies: [RF-MGN-XXX-YYY]
module_dependencies: [MGN-XXX]
external_dependencies: [...]
```
### Métricas de Cobertura
```yaml
coverage:
rf_to_et_backend: 100%
rf_to_et_frontend: 100%
rf_to_database: 100%
rf_to_tests: 100%
backend_tests: 100%
frontend_tests: 100%
statistics:
total_endpoints: X
total_components: Y
total_tables: Z
total_test_cases: W
estimated_duration_sprints: N
```
---
## Cómo Usar las Matrices de Trazabilidad
### Para QA Engineers
1. **Revisar Cobertura de Tests:**
```bash
# Buscar RFs sin tests
grep -r "total_tests: 0" trazabilidad/
# Ver cobertura por módulo
yq eval '.metadata.total_tests' TRACEABILITY-MGN-*.yaml
```
2. **Validar Criterios de Aceptación:**
- Cada RF tiene `acceptance_criteria` con `test_reference`
- Status debe cambiar de `Pending``Passed` al completar tests
3. **Generar Reportes de Cobertura:**
```python
# Script para calcular % cobertura
import yaml
with open('TRACEABILITY-MGN-001.yaml') as f:
data = yaml.safe_load(f)
print(f"Cobertura RF→Tests: {data['coverage']['rf_to_tests']}")
```
### Para Desarrolladores
1. **Encontrar Implementación de un RF:**
```bash
# Buscar RF específico
grep -A 50 "RF-MGN-001-003" TRACEABILITY-MGN-001.yaml
```
2. **Ver Endpoints de un Módulo:**
```bash
# Extraer todos los endpoints
yq eval '.requirements[].et_backend.endpoints[]' TRACEABILITY-MGN-001.yaml
```
3. **Validar Reglas de Negocio:**
- Cada RN tiene `implementation` (dónde está el código)
- Cada RN tiene `test_reference` (dónde está el test)
### Para Project Managers
1. **Calcular Progreso:**
```bash
# Contar RFs completados
grep -c "status: Completed" TRACEABILITY-MGN-001.yaml
```
2. **Generar Burndown Chart:**
- Usar `story_points` por módulo
- Calcular velocity con RFs completados por sprint
3. **Identificar Dependencias:**
- Ver `dependencies.module_dependencies` para orden de implementación
- Ver `dependencies.rf_dependencies` para bloqueos
### Para Arquitectos
1. **Auditar Trazabilidad:**
```bash
# Validar que cada RF tenga ET Backend y Frontend
yq eval '.requirements[] | select(.et_backend == null or .et_frontend == null)' TRACEABILITY-*.yaml
```
2. **Analizar Complejidad:**
- `total_endpoints` indica complejidad de API
- `total_components` indica complejidad de UI
- `total_test_cases` indica esfuerzo de testing
3. **Revisar Decisiones Técnicas:**
- `external_dependencies` por módulo
- `database_tables` y RLS policies
- Patrones de arquitectura (FSD, DDD, etc.)
---
## Convenciones de Nomenclatura
### IDs de RF
- Formato: `RF-MGN-XXX-YYY`
- XXX: Número de módulo (001-014)
- YYY: Número secuencial de RF (001, 002, ...)
- Ejemplo: `RF-MGN-001-003` (Gestión de Usuarios en Fundamentos)
### Archivos de Especificación Técnica
- Backend: `ET-BACKEND-MGN-XXX-YYY-descripcion.md`
- Frontend: `ET-FRONTEND-MGN-XXX-YYY-descripcion.md`
- Ejemplo: `ET-BACKEND-MGN-001-003-gestión-de-usuarios.md`
### Endpoints de API
- Patrón: `/api/v1/{recurso}`
- Versionado: `/api/v1/`, `/api/v2/`
- Ejemplo: `/api/v1/auth/users`
### Rutas Frontend
- Patrón: `/{modulo}/{recurso}`
- Ejemplo: `/auth/users`, `/financial/invoices`
### Test Files
- Backend Unit: `{recurso}.service.spec.ts`
- Backend Integration: `{recurso}.controller.e2e-spec.ts`
- Frontend Component: `{Componente}.test.tsx`
- Frontend E2E: `{modulo}/{recurso}.spec.ts`
---
## Validación de Archivos YAML
### Verificar Sintaxis YAML
```bash
# Instalar yamllint
pip install yamllint
# Validar archivo
yamllint TRACEABILITY-MGN-001.yaml
```
### Validar Estructura con Schema
```bash
# Usar yq para validar estructura
yq eval '.module.id' TRACEABILITY-MGN-001.yaml
yq eval '.metadata.total_rf' TRACEABILITY-MGN-001.yaml
```
### Script de Validación Automática
```python
import yaml
import sys
def validate_traceability(file_path):
with open(file_path) as f:
data = yaml.safe_load(f)
# Validar campos obligatorios
assert 'module' in data
assert 'metadata' in data
assert 'requirements' in data
assert 'coverage' in data
# Validar cada RF
for req in data['requirements']:
assert 'rf_id' in req
assert 'et_backend' in req
assert 'et_frontend' in req
assert 'database_tables' in req
assert 'tests' in req
assert 'acceptance_criteria' in req
assert 'business_rules' in req
# Validar cobertura 100%
assert data['coverage']['rf_to_et_backend'] == '100%'
assert data['coverage']['rf_to_et_frontend'] == '100%'
print(f"✅ {file_path} válido")
if __name__ == '__main__':
validate_traceability(sys.argv[1])
```
---
## Generación de Reportes
### Reporte de Cobertura Global
```python
import yaml
import glob
def generate_coverage_report():
total_rf = 0
total_tests = 0
for file in glob.glob('TRACEABILITY-MGN-*.yaml'):
with open(file) as f:
data = yaml.safe_load(f)
total_rf += data['metadata']['total_rf']
total_tests += data['metadata']['total_tests']
print(f"Total RF: {total_rf}")
print(f"Total Tests: {total_tests}")
print(f"Tests por RF: {total_tests / total_rf:.2f}")
```
### Reporte de Dependencias
```python
def analyze_dependencies():
dependencies_graph = {}
for file in glob.glob('TRACEABILITY-MGN-*.yaml'):
with open(file) as f:
data = yaml.safe_load(f)
module_id = data['module']['id']
for req in data['requirements']:
if req['dependencies']['module_dependencies']:
dependencies_graph[module_id] = req['dependencies']['module_dependencies']
return dependencies_graph
```
---
## Integración con CI/CD
### GitHub Actions Workflow
```yaml
name: Validate Traceability Matrices
on: [push, pull_request]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install yamllint
run: pip install yamllint
- name: Validate YAML syntax
run: yamllint docs/02-modelado/trazabilidad/*.yaml
- name: Validate structure
run: python scripts/validate_traceability.py docs/02-modelado/trazabilidad/*.yaml
- name: Generate coverage report
run: python scripts/generate_coverage_report.py
```
---
## Estadísticas Globales del Proyecto
### Resumen por Prioridad
| Prioridad | Módulos | RF | Story Points | % Total |
|-----------|---------|-----|--------------|---------|
| **P0 (MVP)** | 8 | 52 | 462 SP | 69% |
| **P1 (Post-MVP)** | 6 | 23 | 169 SP | 25% |
| **P2 (Futuro)** | - | 5 | 42 SP | 6% |
| **TOTAL** | **14** | **80** | **673 SP** | **100%** |
### Distribución de RF por Módulo
```
MGN-001 (Fundamentos): ████████ 8 RF (68 SP)
MGN-002 (Empresas): █████ 5 RF (34 SP)
MGN-003 (Catálogos): ██████ 6 RF (29 SP)
MGN-004 (Financiero): ████████ 8 RF (81 SP)
MGN-005 (Inventario): ███████ 7 RF (66 SP)
MGN-006 (Compras): ██████ 6 RF (42 SP)
MGN-007 (Ventas): ██████ 6 RF (45 SP)
MGN-008 (Analítica): █████ 5 RF (35 SP)
MGN-009 (CRM): █████ 5 RF (31 SP)
MGN-010 (RRHH): █████ 5 RF (29 SP)
MGN-011 (Proyectos): █████ 5 RF (40 SP)
MGN-012 (Reportes): ████ 4 RF (39 SP)
MGN-013 (Portal): ████ 4 RF (29 SP)
MGN-014 (Mensajería): ██████ 6 RF (47 SP)
```
### Estimaciones de Duración
- **Velocity estimada:** 20 SP/sprint (equipo 5 personas)
- **Duración MVP (P0):** ~23 sprints = **46 semanas** (11.5 meses)
- **Duración total (P0+P1):** ~34 sprints = **68 semanas** (17 meses)
- **Sprint duration:** 2 semanas
---
## Próximos Pasos
1. **✅ Fase 2 - Diseño Completado:**
- Domain Models (9 archivos) ✅
- Database Design (10 archivos, 93 tablas) ✅
- Requerimientos Funcionales (80 archivos) ✅
- Especificaciones Técnicas (160 archivos) ✅
- Matrices de Trazabilidad (14 archivos) ⏳ **EN PROGRESO**
2. **Fase 3 - Implementación (Próxima):**
- Setup de proyectos (NestJS + React)
- Implementación por sprints (comenzar con MGN-001)
- TDD: Tests → Implementación → Refactor
- Code reviews por módulo
- QA testing continuo
3. **Herramientas Recomendadas:**
- **Gestión de Tareas:** Jira, Linear, GitHub Projects
- **Testing:** Jest, Vitest, Playwright, Cypress
- **CI/CD:** GitHub Actions, GitLab CI, Jenkins
- **Monitoreo:** Sentry, DataDog, New Relic
- **Documentación:** Swagger, Storybook, Docusaurus
---
## Contacto y Soporte
Para dudas o issues relacionados con las matrices de trazabilidad:
- **GitHub Issues:** [Link al repositorio]
- **Slack Channel:** #erp-generico-qa
- **Email:** qa-team@example.com
---
**Documento creado:** 2025-11-24
**Versión:** 1.0
**Autor:** QA Architect / Traceability Specialist
**Estado:****1/14 Matrices Completadas** (MGN-001)
**Próximo:** Completar MGN-002 a MGN-014