292 lines
13 KiB
Markdown
292 lines
13 KiB
Markdown
# 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
|