485 lines
14 KiB
Markdown
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
|