# MATRIZ DE DEPENDENCIAS ENTRE CAPAS

**Version:** 1.0.0
**Fecha:** 2025-12-08
**Prioridad:** REFERENCIA - Consultar para entender impactos
**Sistema:** SIMCO + CAPVED

---

## PROPOSITO

Proporcionar una matriz completa de dependencias entre todos los componentes del sistema para que los agentes puedan identificar rapidamente que se debe actualizar cuando se modifica algo.

---

## 1. VISION GENERAL DE DEPENDENCIAS

```
┌─────────────────────────────────────────────────────────────────────────────┐
│                         FLUJO DE DEPENDENCIAS                               │
│                                                                             │
│  ┌─────────┐     ┌─────────┐     ┌─────────┐     ┌─────────┐              │
│  │   DDL   │────▶│ Entity  │────▶│   DTO   │────▶│ Service │              │
│  │  (SQL)  │     │(TypeORM)│     │ (class) │     │ (logic) │              │
│  └─────────┘     └─────────┘     └─────────┘     └─────────┘              │
│       │              │               │               │                     │
│       │              │               │               ▼                     │
│       │              │               │         ┌─────────┐                 │
│       │              │               │         │Controller│                │
│       │              │               │         │ (REST)  │                 │
│       │              │               │         └─────────┘                 │
│       │              │               │               │                     │
│       │              │               │               ▼                     │
│       │              │               │     ┌─────────────────┐             │
│       │              │               │     │    SWAGGER      │             │
│       │              │               │     │ (API Contract)  │             │
│       │              │               │     └─────────────────┘             │
│       │              │               │               │                     │
│       │              │               ▼               ▼                     │
│       │              │         ┌─────────────────────────┐                 │
│       │              │         │       FRONTEND          │                 │
│       │              │         │  Types│Schema│Hooks│UI  │                 │
│       │              │         └─────────────────────────┘                 │
│       │              │                                                      │
│       ▼              ▼                                                      │
│  ┌─────────────────────────┐                                               │
│  │      INVENTARIOS        │                                               │
│  │  DB│BE│FE│MASTER        │                                               │
│  └─────────────────────────┘                                               │
└─────────────────────────────────────────────────────────────────────────────┘
```

---

## 2. MATRIZ DE DEPENDENCIA: DDL

### Cuando se modifica DDL (tablas, columnas)

| Componente Dependiente | Requiere Actualizacion | Prioridad | Detalle |
|------------------------|------------------------|-----------|---------|
| **Entity** | SI | 1 - Inmediato | Debe reflejar estructura DDL |
| **CreateDto** | SI | 2 | Campos nuevos/eliminados |
| **UpdateDto** | AUTO | 2 | Hereda de CreateDto |
| **ResponseDto** | SI | 2 | Campos en response |
| **Service** | POSIBLE | 3 | Si hay logica de campo |
| **Controller** | NO | - | Usa DTOs |
| **Frontend Types** | SI | 4 | Reflejar ResponseDto |
| **Frontend Schema** | SI | 4 | Reflejar CreateDto |
| **Frontend Components** | POSIBLE | 5 | Si muestran campo |
| **Swagger** | AUTO | - | Generado de DTOs |
| **DATABASE_INVENTORY** | SI | 6 | Registrar cambio |
| **Tests** | POSIBLE | 5 | Si prueban campo |

### Diagrama de Propagacion DDL

```
DDL Change
    │
    ├──▶ Entity (obligatorio)
    │       │
    │       ├──▶ CreateDto (obligatorio)
    │       │       │
    │       │       └──▶ Frontend Schema (obligatorio)
    │       │
    │       ├──▶ ResponseDto (obligatorio)
    │       │       │
    │       │       └──▶ Frontend Types (obligatorio)
    │       │               │
    │       │               └──▶ Frontend Components (si usa campo)
    │       │
    │       └──▶ Service (si logica de campo)
    │
    └──▶ DATABASE_INVENTORY (obligatorio)
```

---

## 3. MATRIZ DE DEPENDENCIA: ENTITY

### Cuando se modifica Entity

| Componente Dependiente | Requiere Actualizacion | Prioridad | Detalle |
|------------------------|------------------------|-----------|---------|
| **DDL** | VERIFICAR | 0 | DDL debe existir primero |
| **CreateDto** | SI | 1 | Reflejar campos |
| **UpdateDto** | AUTO | 1 | Hereda de CreateDto |
| **ResponseDto** | SI | 1 | Reflejar campos |
| **Service** | POSIBLE | 2 | Si usa campo directamente |
| **Controller** | NO | - | Usa DTOs |
| **Frontend Types** | SI | 3 | Reflejar ResponseDto |
| **Frontend Schema** | SI | 3 | Reflejar CreateDto |
| **Frontend Components** | POSIBLE | 4 | Si muestran campo |
| **BACKEND_INVENTORY** | SI | 5 | Registrar cambio |
| **Unit Tests** | SI | 4 | Actualizar mocks |

### Por Tipo de Cambio en Entity

| Cambio | DTOs | Service | Frontend | Tests |
|--------|------|---------|----------|-------|
| Agregar @Column | SI | NO | SI | SI |
| Eliminar @Column | SI | Verificar | SI | SI |
| Cambiar tipo @Column | SI | Posible | SI | SI |
| Agregar @ManyToOne | SI | SI | SI | SI |
| Agregar @OneToMany | SI | Posible | SI | Posible |
| Cambiar @Index | NO | NO | NO | NO |
| Cambiar nullable | SI | NO | SI | Posible |

---

## 4. MATRIZ DE DEPENDENCIA: DTO

### Cuando se modifica CreateDto

| Componente Dependiente | Requiere Actualizacion | Prioridad | Detalle |
|------------------------|------------------------|-----------|---------|
| **UpdateDto** | AUTO | 1 | Si usa PartialType |
| **Service** | NO | - | Recibe DTO |
| **Controller** | NO | - | Usa DTO |
| **Swagger** | AUTO | - | Generado |
| **Frontend Schema (Zod)** | SI | 2 | Mismas validaciones |
| **Frontend Forms** | POSIBLE | 3 | Si campos cambian |
| **Integration Tests** | SI | 3 | Fixtures |

### Cuando se modifica ResponseDto

| Componente Dependiente | Requiere Actualizacion | Prioridad | Detalle |
|------------------------|------------------------|-----------|---------|
| **Service** | SI | 1 | Si mapea a ResponseDto |
| **Controller** | NO | - | Retorna Service result |
| **Swagger** | AUTO | - | Generado |
| **Frontend Types** | SI | 2 | Interface debe coincidir |
| **Frontend Components** | POSIBLE | 3 | Si muestran campo |
| **Frontend Hooks** | NO | - | Usan Types |

---

## 5. MATRIZ DE DEPENDENCIA: SERVICE

### Cuando se modifica Service

| Componente Dependiente | Requiere Actualizacion | Prioridad | Detalle |
|------------------------|------------------------|-----------|---------|
| **Controller** | POSIBLE | 1 | Si cambia firma metodo |
| **Swagger** | POSIBLE | 2 | Si cambia response/errors |
| **Frontend** | POSIBLE | 2 | Si cambia contrato API |
| **Unit Tests** | SI | 1 | Tests del service |
| **Integration Tests** | POSIBLE | 2 | Si cambia comportamiento |

### Por Tipo de Cambio en Service

| Cambio | Controller | Frontend | Tests |
|--------|------------|----------|-------|
| Agregar metodo | SI (nuevo endpoint) | SI | SI |
| Eliminar metodo | SI | SI | SI |
| Cambiar firma | SI | SI | SI |
| Cambiar logica interna | NO | NO | SI |
| Agregar validacion | NO | Manejar error | SI |
| Cambiar error thrown | NO | Manejar error | SI |

---

## 6. MATRIZ DE DEPENDENCIA: CONTROLLER

### Cuando se modifica Controller

| Componente Dependiente | Requiere Actualizacion | Prioridad | Detalle |
|------------------------|------------------------|-----------|---------|
| **Service** | NO | - | Controller consume Service |
| **Swagger** | AUTO | - | Generado de decoradores |
| **Frontend Service** | SI | 1 | Si cambia ruta/metodo |
| **Frontend Hooks** | POSIBLE | 2 | Si cambia endpoint |
| **E2E Tests** | SI | 2 | Tests de endpoint |

### Por Tipo de Cambio en Controller

| Cambio | Frontend Service | Frontend Hooks | Tests |
|--------|------------------|----------------|-------|
| Agregar endpoint | SI (nuevo metodo) | SI (nuevo hook) | SI |
| Eliminar endpoint | SI | SI | SI |
| Cambiar ruta | SI | NO | SI |
| Cambiar metodo HTTP | SI | NO | SI |
| Cambiar decoradores Swagger | NO | NO | NO |
| Agregar guard | NO | Manejar 401/403 | SI |

---

## 7. MATRIZ DE DEPENDENCIA: FRONTEND

### Cuando se modifica Frontend Types

| Componente Dependiente | Requiere Actualizacion | Prioridad | Detalle |
|------------------------|------------------------|-----------|---------|
| **Zod Schema** | VERIFICAR | 1 | Debe ser consistente |
| **Hooks** | NO | - | Usan Types |
| **Components** | VERIFICAR | 2 | Si usan tipo |
| **Services** | NO | - | Usan Types |

### Cuando se modifica Frontend Schema (Zod)

| Componente Dependiente | Requiere Actualizacion | Prioridad | Detalle |
|------------------------|------------------------|-----------|---------|
| **Forms** | VERIFICAR | 1 | Si usan schema |
| **Types** | VERIFICAR | 1 | Deben coincidir |

### Cuando se modifica Frontend Hook

| Componente Dependiente | Requiere Actualizacion | Prioridad | Detalle |
|------------------------|------------------------|-----------|---------|
| **Components** | VERIFICAR | 1 | Si usan hook |
| **Pages** | VERIFICAR | 1 | Si usan hook |

---

## 8. MATRIZ RAPIDA DE REFERENCIA

### "Si cambio X, que debo actualizar?"

```
┌─────────────────┬─────┬────────┬─────────┬─────────┬────────┬─────────────┐
│ SI CAMBIO...    │ DDL │ Entity │DTO-Crea │DTO-Resp │Service │ Controller  │
├─────────────────┼─────┼────────┼─────────┼─────────┼────────┼─────────────┤
│ DDL columna     │ ──  │   SI   │   SI    │   SI    │ Posib  │    NO       │
│ DDL FK          │ ──  │   SI   │   SI    │   SI    │   SI   │  Posible    │
│ DDL indice      │ ──  │   NO   │   NO    │   NO    │   NO   │    NO       │
├─────────────────┼─────┼────────┼─────────┼─────────┼────────┼─────────────┤
│ Entity columna  │ Ver │   ──   │   SI    │   SI    │ Posib  │    NO       │
│ Entity relacion │ Ver │   ──   │   SI    │   SI    │   SI   │  Posible    │
├─────────────────┼─────┼────────┼─────────┼─────────┼────────┼─────────────┤
│ CreateDto campo │ NO  │   NO   │   ──    │   NO    │   NO   │    NO       │
│ CreateDto valid │ NO  │   NO   │   ──    │   NO    │   NO   │    NO       │
│ ResponseDto     │ NO  │   NO   │   NO    │   ──    │  Ver   │    NO       │
├─────────────────┼─────┼────────┼─────────┼─────────┼────────┼─────────────┤
│ Service metodo  │ NO  │   NO   │   NO    │ Posib   │   ──   │    SI       │
│ Service logica  │ NO  │   NO   │   NO    │   NO    │   ──   │    NO       │
├─────────────────┼─────┼────────┼─────────┼─────────┼────────┼─────────────┤
│ Controller ruta │ NO  │   NO   │   NO    │   NO    │   NO   │    ──       │
│ Controller meth │ NO  │   NO   │   NO    │   NO    │   NO   │    ──       │
└─────────────────┴─────┴────────┴─────────┴─────────┴────────┴─────────────┘

Continuacion → Frontend

┌─────────────────┬───────┬────────┬───────┬───────────┬───────────┐
│ SI CAMBIO...    │ Types │ Schema │ Hooks │Components │ Inventory │
├─────────────────┼───────┼────────┼───────┼───────────┼───────────┤
│ DDL columna     │  SI   │   SI   │  NO   │  Posible  │  DB+MAST  │
│ DDL FK          │  SI   │   SI   │  SI   │  Posible  │  DB+MAST  │
│ DDL indice      │  NO   │   NO   │  NO   │    NO     │    DB     │
├─────────────────┼───────┼────────┼───────┼───────────┼───────────┤
│ Entity columna  │  SI   │   SI   │  NO   │  Posible  │  BE+MAST  │
│ Entity relacion │  SI   │   SI   │  SI   │  Posible  │  BE+MAST  │
├─────────────────┼───────┼────────┼───────┼───────────┼───────────┤
│ CreateDto campo │  NO   │   SI   │  NO   │  Posible  │    BE     │
│ CreateDto valid │  NO   │   SI   │  NO   │    NO     │    NO     │
│ ResponseDto     │  SI   │   NO   │  NO   │  Posible  │    BE     │
├─────────────────┼───────┼────────┼───────┼───────────┼───────────┤
│ Service metodo  │ Posib │ Posib  │  SI   │  Posible  │    BE     │
│ Service logica  │  NO   │   NO   │  NO   │    NO     │    NO     │
├─────────────────┼───────┼────────┼───────┼───────────┼───────────┤
│ Controller ruta │  NO   │   NO   │  SI   │    NO     │    BE     │
│ Controller meth │  NO   │   NO   │  SI   │    NO     │    NO     │
├─────────────────┼───────┼────────┼───────┼───────────┼───────────┤
│ Frontend Types  │  ──   │  Ver   │  NO   │    Ver    │    FE     │
│ Frontend Schema │  Ver  │   ──   │  NO   │    Ver    │    FE     │
│ Frontend Hook   │  NO   │   NO   │  ──   │    Ver    │    FE     │
│ Frontend Comp   │  NO   │   NO   │  NO   │    ──     │    FE     │
└─────────────────┴───────┴────────┴───────┴───────────┴───────────┘

Leyenda:
SI     = Siempre actualizar
NO     = No requiere actualizacion
Ver    = Verificar DDL primero
Posib  = Posiblemente, depende del caso
──     = No aplica (mismo componente)
```

---

## 9. DEPENDENCIAS POR MODULO

### Modulo Tipico NestJS

```
modules/user/
├── entities/
│   └── user.entity.ts          ← Depende de: DDL
│                                  Impacta: DTOs, Service
├── dto/
│   ├── create-user.dto.ts      ← Depende de: Entity
│   │                              Impacta: Frontend Schema
│   ├── update-user.dto.ts      ← Depende de: CreateDto
│   │                              Impacta: Frontend Schema
│   └── user-response.dto.ts    ← Depende de: Entity
│                                  Impacta: Frontend Types
├── services/
│   └── user.service.ts         ← Depende de: Entity, DTOs
│                                  Impacta: Controller
├── controllers/
│   └── user.controller.ts      ← Depende de: Service, DTOs
│                                  Impacta: Frontend Hooks
└── user.module.ts              ← Depende de: Todo lo anterior
```

### Modulo Tipico Frontend

```
shared/
├── types/
│   └── user.types.ts           ← Depende de: ResponseDto
│                                  Impacta: Hooks, Components
├── schemas/
│   └── user.schema.ts          ← Depende de: CreateDto
│                                  Impacta: Forms
└── services/
    └── user.service.ts         ← Depende de: Controller routes
                                   Impacta: Hooks

apps/web/
├── hooks/
│   └── useUsers.ts             ← Depende de: Service, Types
│                                  Impacta: Pages, Components
├── components/
│   └── UserCard.tsx            ← Depende de: Types, Hooks
│                                  Impacta: Pages
└── pages/
    └── UsersPage.tsx           ← Depende de: Hooks, Components
```

---

## 10. COMANDOS DE VERIFICACION DE DEPENDENCIAS

```bash
# Ver todas las importaciones de un archivo
grep -n "import" src/modules/user/user.service.ts

# Ver quien importa un archivo
grep -rn "from.*user.entity" src/

# Ver dependencias de modulo
grep -rn "UserModule" src/

# Ver uso de tipo en frontend
grep -rn "User" apps/web/

# Arbol de dependencias (si usa herramientas)
npx madge --image graph.svg src/modules/user/

# TypeScript: ver errores de tipo despues de cambio
npm run typecheck 2>&1 | head -50
```

---

## 11. ESCENARIOS COMUNES

### Escenario 1: Agregar campo a tabla existente

```
1. DDL: ALTER TABLE ADD COLUMN
2. Entity: Agregar @Column
3. CreateDto: Agregar campo + validacion
4. ResponseDto: Agregar campo
5. Service: Solo si hay logica especial
6. Frontend Types: Agregar a interface
7. Frontend Schema: Agregar validacion Zod
8. Frontend Components: Agregar UI si necesario
9. Inventarios: DB, BE, FE, MASTER
```

### Escenario 2: Crear nuevo modulo/feature

```
1. DDL: CREATE TABLE
2. Entity: Crear archivo
3. DTOs: Crear Create, Update, Response
4. Service: Crear con CRUD basico
5. Controller: Crear con endpoints REST
6. Module: Crear y registrar en AppModule
7. Frontend Types: Crear interface
8. Frontend Schema: Crear Zod schema
9. Frontend Service: Crear API service
10. Frontend Hook: Crear useQuery/useMutation
11. Frontend Components: Crear UI
12. Inventarios: TODOS
```

### Escenario 3: Refactorizar nombre de campo

```
1. EVALUAR: ¿Es breaking change?
2. OPCION A (breaking): Cambiar en cadena DDL→Entity→DTO→FE
3. OPCION B (seguro):
   a. Agregar nuevo campo
   b. Migrar datos
   c. Actualizar codigo para usar nuevo
   d. Eliminar campo viejo
```

---

## 12. ANTI-PATRON: DEPENDENCIAS CIRCULARES

```
❌ INCORRECTO: Dependencia circular entre Services
UserService ──▶ OrderService
     ▲               │
     └───────────────┘

✅ CORRECTO: Extraer a servicio compartido
UserService ──▶ SharedService ◀── OrderService
```

```
❌ INCORRECTO: Frontend importa de Backend
apps/web/types/user.ts
import { UserEntity } from '@backend/modules/user';

✅ CORRECTO: Frontend tiene sus propios tipos
apps/web/types/user.ts
export interface User { ... }  // Definido independiente
```

---

**Version:** 1.0.0 | **Sistema:** SIMCO | **Tipo:** Matriz de Referencia
