# ADR-012: Política de Trazabilidad Completa **Estado:** Aceptado **Fecha:** 2025-11-24 **Decisores:** Architecture-Analyst, Tech Lead **Contexto:** ERP Generic - Gestión de documentación y trazabilidad --- ## Contexto El proyecto ERP Generic es un sistema empresarial complejo con múltiples capas (Base de Datos, Backend, Frontend) y cientos de objetos interrelacionados. Para mantener la coherencia, facilitar el mantenimiento y permitir análisis de impacto, necesitamos una política estricta de trazabilidad que conecte todos los artefactos del sistema. ## Decisión **Adoptamos la política de "Trazabilidad Completa End-to-End" para todos los objetos del sistema.** ### Principio Fundamental ``` ┌─────────────────────────────────────────────────────────────────────────┐ │ TRAZABILIDAD COMPLETA │ │ │ │ RF (Requerimiento) ──→ ET-Backend ──→ ET-Frontend ──→ US (Stories) │ │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ Tablas │◄────────►│ APIs │◄───►│ Comps │◄──►│ Tests │ │ │ │ BD │ │ Backend │ │ Frontend│ │ E2E │ │ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │ │ │ TODO OBJETO DEBE CONOCER: │ │ • Su ORIGEN (RF/ET que lo define) │ │ • Sus DEPENDENCIAS (de qué depende) │ │ • Sus DEPENDIENTES (qué depende de él) │ │ • Sus RELACIONES con otras capas │ │ │ └─────────────────────────────────────────────────────────────────────────┘ ``` ### Inventarios Requeridos | Inventario | Ubicación | Contenido | |------------|-----------|-----------| | Objetos BD | `trazabilidad/INVENTARIO-OBJETOS-BD.yml` | Tablas, funciones, triggers, enums, policies | | Objetos Backend | `trazabilidad/INVENTARIO-OBJETOS-BACKEND.yml` | Controllers, services, DTOs, repositories | | Objetos Frontend | `trazabilidad/INVENTARIO-OBJETOS-FRONTEND.yml` | Components, pages, hooks, stores | | Matriz Completa | `trazabilidad/MATRIZ-TRAZABILIDAD-COMPLETA.md` | RF → ET → BD → Backend → Frontend → Tests | ### Estructura de Trazabilidad por Capa #### Base de Datos ```yaml tabla: nombre: financial.invoices schema: financial origen: rf: RF-MGN-004-005 et_backend: ET-BACKEND-MGN-004-005 dependencias: tablas: - auth.tenants - auth.companies - core.partners - core.currencies funciones: - calculate_invoice_totals() dependientes: tablas: - financial.invoice_lines - financial.payment_invoice triggers: - trg_invoices_updated_at - track_invoice_changes relacionados: backend: - InvoiceController - InvoiceService - InvoiceRepository frontend: - InvoiceForm.tsx - InvoiceList.tsx ``` #### Backend ```yaml servicio: nombre: InvoiceService modulo: financial origen: rf: RF-MGN-004-005 et_backend: ET-BACKEND-MGN-004-005 dependencias: tablas: - financial.invoices - financial.invoice_lines servicios: - PartnerService - ProductService - TaxService dependientes: controllers: - InvoiceController otros_servicios: - PaymentService - ReportService relacionados: frontend: - useInvoice.hook.ts - invoice.api.ts ``` #### Frontend ```yaml componente: nombre: InvoiceForm.tsx modulo: financial tipo: form origen: rf: RF-MGN-004-005 et_frontend: ET-FRONTEND-MGN-004-005 us: US-MGN-004-010 dependencias: apis: - POST /api/v1/invoices - GET /api/v1/partners - GET /api/v1/products hooks: - useInvoice - usePartners stores: - invoiceStore dependientes: pages: - InvoicePage.tsx tests: - InvoiceForm.spec.tsx ``` ### Reglas de Mantenimiento de Documentación ``` ┌─────────────────────────────────────────────────────────────────────────┐ │ REGLA 1: CREAR → DOCUMENTAR │ │ ───────────────────────────── │ │ Al crear cualquier objeto nuevo: │ │ ✅ Agregar al inventario correspondiente │ │ ✅ Documentar RF/ET/US de origen │ │ ✅ Mapear dependencias y dependientes │ │ ✅ Vincular con objetos de otras capas │ ├─────────────────────────────────────────────────────────────────────────┤ │ REGLA 2: MODIFICAR → ACTUALIZAR │ │ ───────────────────────────────── │ │ Al modificar cualquier objeto: │ │ ✅ Actualizar inventario si cambió estructura │ │ ✅ Verificar impacto en dependientes │ │ ✅ Actualizar documentación relacionada │ │ ✅ Notificar cambios en capas afectadas │ ├─────────────────────────────────────────────────────────────────────────┤ │ REGLA 3: ELIMINAR → LIMPIAR │ │ ────────────────────────────── │ │ Al eliminar o deprecar objeto: │ │ ✅ Eliminar del inventario │ │ ✅ Actualizar dependientes que lo usaban │ │ ✅ Eliminar referencias huérfanas │ │ ✅ Documentar razón de eliminación │ ├─────────────────────────────────────────────────────────────────────────┤ │ REGLA 4: PR → VALIDAR TRAZABILIDAD │ │ ──────────────────────────────────── │ │ Todo PR debe incluir: │ │ ✅ Actualización de inventarios si aplica │ │ ✅ Actualización de matriz de trazabilidad │ │ ✅ Verificación de dependencias actualizadas │ ├─────────────────────────────────────────────────────────────────────────┤ │ REGLA 5: REVISIÓN SEMANAL │ │ ──────────────────────────── │ │ Semanalmente verificar: │ │ ✅ Consistencia documentación vs código │ │ ✅ Objetos huérfanos (sin traza) │ │ ✅ Referencias rotas │ │ ✅ Inventarios completos │ └─────────────────────────────────────────────────────────────────────────┘ ``` ### Formato de Trazabilidad en Documentos Todo documento de especificación (RF, ET, US) debe incluir esta sección: ```markdown ## Trazabilidad ### Origen - **RF:** RF-MGN-004-005 (Gestión de facturas de cliente) ### Dependencias (De qué depende) | Capa | Objetos | |------|---------| | BD | financial.invoices, invoice_lines, core.partners | | Backend | PartnerService, ProductService, TaxService | | Frontend | PartnerSelect, ProductSearch | ### Dependientes (Qué depende de esto) | Capa | Objetos | |------|---------| | BD | financial.payment_invoice | | Backend | PaymentService, ReportService | | Frontend | PaymentForm, InvoiceReport | ### Objetos Implementados | Capa | Objeto | Archivo | |------|--------|---------| | BD | financial.invoices | ddl/04-financial.sql:L100 | | Backend | InvoiceController | src/modules/financial/invoice.controller.ts | | Backend | InvoiceService | src/modules/financial/invoice.service.ts | | Frontend | InvoiceForm | src/components/financial/InvoiceForm.tsx | | Test | invoice.e2e | tests/e2e/invoice.spec.ts | ``` ### Herramientas de Validación ```bash # Validar consistencia de inventarios (futuro script) ./scripts/validate-traceability.sh # Generar reporte de objetos huérfanos ./scripts/find-orphan-objects.sh # Verificar referencias cruzadas ./scripts/check-cross-references.sh ``` ## Consecuencias ### Positivas 1. **Análisis de impacto**: Saber qué afecta un cambio antes de hacerlo 2. **Debugging eficiente**: Trazar errores desde UI hasta BD 3. **Onboarding rápido**: Nuevos devs entienden relaciones rápidamente 4. **Refactoring seguro**: Conocer todos los dependientes antes de cambiar 5. **Documentación viva**: Siempre actualizada y útil 6. **Auditoría**: Saber origen y justificación de cada objeto ### Negativas (Manejables) 1. **Overhead inicial**: Requiere disciplina para documentar - *Mitigación*: Templates y automatización 2. **Tiempo adicional**: Cada cambio requiere actualizar docs - *Mitigación*: Incluir en Definition of Done 3. **Curva de aprendizaje**: Entender estructura de trazabilidad - *Mitigación*: Guías y ejemplos claros ## Directiva para Agentes Esta decisión es **OBLIGATORIA** para todos los agentes: ``` 🔴 DIRECTIVA ADR-012 - TRAZABILIDAD COMPLETA Los agentes DEBEN: ✅ Verificar trazabilidad antes de crear objetos nuevos ✅ Actualizar inventarios al crear/modificar/eliminar objetos ✅ Documentar dependencias y dependientes ✅ Mantener referencias cruzadas entre capas ✅ Incluir sección de trazabilidad en documentos Los agentes NO DEBEN: ❌ Crear objetos sin documentar origen (RF/ET/US) ❌ Modificar objetos sin actualizar dependientes ❌ Eliminar objetos sin limpiar referencias ❌ Ignorar impacto en otras capas ❌ Dejar documentación desactualizada ANTES DE IMPLEMENTAR, VERIFICAR: 1. ¿El objeto tiene RF/ET que lo define? 2. ¿Están mapeadas sus dependencias? 3. ¿Están identificados sus dependientes? 4. ¿Está en el inventario correspondiente? 5. ¿La documentación está actualizada? ``` ## Referencias - [ADR-011: Database Clean Load Strategy](./ADR-011-database-clean-load-strategy.md) - [PROMPT-ARCHITECTURE-ANALYST.md](../../../shared/orchestration/prompts/PROMPT-ARCHITECTURE-ANALYST.md) - [INVENTARIO-OBJETOS-BD.yml](../02-modelado/trazabilidad/INVENTARIO-OBJETOS-BD.yml) - [MATRIZ-TRAZABILIDAD-RF-ET-BD.md](../02-modelado/trazabilidad/MATRIZ-TRAZABILIDAD-RF-ET-BD.md) --- **Aprobado por:** Architecture-Analyst **Fecha de aprobación:** 2025-11-24