# DIRECTIVA: Documentacion Pre-Desarrollo

**Proyecto:** ERP Core - Base Generica Reutilizable
**Version:** 1.0.0
**Fecha:** 2025-12-05
**Aplicable a:** ERP Core y todas las verticales
**Autoridad:** Tech Lead / Arquitecto de Solucion
**Estado:** OBLIGATORIO - Politica permanente

---

## PRINCIPIO FUNDAMENTAL

> **"Primero documentar, despues desarrollar"**

Ningun desarrollo puede iniciarse sin la documentacion completa definida y aprobada. La documentacion es el contrato que guia la implementacion.

---

## ALCANCE

Esta directiva aplica a:
- ERP Core (modulos genericos)
- Todas las verticales (construccion, vidrio-templado, mecanicas-diesel, clinicas, retail)
- Cualquier extension o personalizacion

---

## FASES DE DOCUMENTACION PRE-DESARROLLO

### FASE 1: Definicion de Requerimientos

**Entregables obligatorios:**
```
docs/01-requerimientos/
├── RF-{modulo}/                    # Requerimientos Funcionales
│   ├── RF-{modulo}-001.md         # Requerimiento individual
│   └── INDICE-RF-{modulo}.md      # Indice del modulo
├── RNF-{modulo}/                   # Requerimientos No Funcionales
└── MATRIZ-TRAZABILIDAD.md          # Trazabilidad RF -> Modulo -> Historia
```

**Contenido minimo RF-{modulo}-NNN.md:**
```markdown
# RF-{modulo}-NNN: [Titulo descriptivo]

## Identificacion
| Campo | Valor |
|-------|-------|
| ID | RF-{modulo}-NNN |
| Prioridad | P0/P1/P2/P3 |
| Complejidad | Alta/Media/Baja |
| Modulo | {nombre_modulo} |
| Dependencias | RF-xxx, RF-yyy |

## Descripcion
[Descripcion clara del requerimiento]

## Criterios de Aceptacion
- [ ] Criterio 1
- [ ] Criterio 2
- [ ] Criterio 3

## Reglas de Negocio
1. RN-001: [descripcion]
2. RN-002: [descripcion]

## Impacto en Capas
- **Database:** [tablas/schemas afectados]
- **Backend:** [modulos/services afectados]
- **Frontend:** [paginas/componentes afectados]

## Referencias
- Vertical aplicable: [core/construccion/vidrio/etc]
- Referencia Odoo: [si aplica]
```

---

### FASE 2: Modelado de Base de Datos

**Entregables obligatorios:**
```
docs/02-modelado/
├── database-design/
│   ├── ERD-{modulo}.md             # Diagrama ER en Mermaid
│   ├── DDL-SPEC-{schema}.md        # Especificacion detallada
│   └── DICCIONARIO-DATOS.md        # Diccionario de datos
├── domain-models/
│   ├── DM-{modulo}.md              # Modelo de dominio
│   └── AGREGADOS-{modulo}.md       # Agregados DDD
└── especificaciones-tecnicas/
    ├── ET-{modulo}-database.md     # Spec tecnica DB
    └── ET-{modulo}-api.md          # Spec tecnica API
```

**Contenido minimo DDL-SPEC-{schema}.md:**
```markdown
# Especificacion DDL: Schema {nombre}

## Resumen
| Metrica | Valor |
|---------|-------|
| Tablas | N |
| Funciones | N |
| Triggers | N |
| Vistas | N |

## Diagrama ER

```mermaid
erDiagram
    TABLA_A ||--o{ TABLA_B : tiene
    TABLA_A {
        uuid id PK
        varchar nombre
        timestamp created_at
    }
```

## Tablas

### {nombre_tabla}

| Columna | Tipo | Nullable | Default | Descripcion |
|---------|------|----------|---------|-------------|
| id | UUID | NOT NULL | gen_random_uuid() | PK |
| tenant_id | UUID | NOT NULL | - | FK a tenants |
| ... | ... | ... | ... | ... |

**Indices:**
- `idx_{tabla}_tenant` ON (tenant_id)
- `idx_{tabla}_{columna}` ON (columna)

**Constraints:**
- `pk_{tabla}` PRIMARY KEY (id)
- `fk_{tabla}_tenant` FOREIGN KEY (tenant_id) REFERENCES tenants(id)
- `uq_{tabla}_{columna}` UNIQUE (tenant_id, columna)

**Triggers:**
- `trg_{tabla}_updated_at` - Actualiza updated_at en UPDATE
- `trg_{tabla}_audit` - Registra en audit_log

**RLS Policies:**
- `tenant_isolation_{tabla}` - Filtro por tenant_id
```

---

### FASE 3: Historias de Usuario

**Entregables obligatorios:**
```
docs/03-user-stories/
├── {MGN-NNN}/                      # Modulo generico
│   ├── US-{MGN-NNN}-001.md        # Historia de usuario
│   ├── US-{MGN-NNN}-002.md
│   └── BACKLOG-{MGN-NNN}.md       # Backlog del modulo
├── {MAI-NNN}/                      # Modulo vertical (ej: construccion)
│   ├── US-{MAI-NNN}-001.md
│   └── BACKLOG-{MAI-NNN}.md
└── BACKLOG-MAESTRO.md              # Backlog consolidado
```

**Contenido minimo US-{modulo}-NNN.md:**
```markdown
# US-{modulo}-NNN: [Titulo]

## Identificacion
| Campo | Valor |
|-------|-------|
| ID | US-{modulo}-NNN |
| Modulo | {nombre_modulo} |
| Prioridad | P0/P1/P2/P3 |
| Story Points | N |
| Sprint | Sprint N |

## Historia
**Como** [rol de usuario]
**Quiero** [accion/funcionalidad]
**Para** [beneficio/valor]

## Criterios de Aceptacion (Gherkin)

### Escenario 1: [nombre]
```gherkin
Given [contexto inicial]
When [accion del usuario]
Then [resultado esperado]
And [resultado adicional]
```

## Mockups/Wireframes
[Referencia a figma/imagen o descripcion de UI]

## Notas Tecnicas
- API Endpoints requeridos
- Validaciones especiales
- Integraciones

## Dependencias
- US-xxx (bloqueante)
- US-yyy (relacionada)

## Trazabilidad
- RF: RF-{modulo}-NNN
- Tabla: {schema}.{tabla}
- API: [endpoint]
```

---

### FASE 4: Especificaciones Tecnicas

**Entregables obligatorios:**
```
docs/02-modelado/especificaciones-tecnicas/
├── ET-{modulo}-database.md         # Backend especificacion
├── ET-{modulo}-backend.md          # Backend especificacion
├── ET-{modulo}-frontend.md         # Frontend especificacion
└── ET-{modulo}-integration.md      # Integracion entre capas
```

**Contenido minimo ET-{modulo}-backend.md:**
```markdown
# Especificacion Tecnica Backend: {modulo}

## Resumen de Implementacion

### Estructura de Modulo
```
modules/{modulo}/
├── {modulo}.module.ts
├── {modulo}.controller.ts
├── {modulo}.service.ts
├── entities/
│   └── {entidad}.entity.ts
├── dto/
│   ├── create-{entidad}.dto.ts
│   ├── update-{entidad}.dto.ts
│   └── query-{entidad}.dto.ts
└── __tests__/
    └── {modulo}.service.spec.ts
```

## API Endpoints

### GET /api/{modulo}
- **Descripcion:** Lista paginada de {entidad}
- **Query params:** page, limit, sort, filter[campo]
- **Response:** `{ data: [], meta: { total, page, limit } }`
- **Permisos:** `{modulo}:read`

### POST /api/{modulo}
- **Descripcion:** Crear {entidad}
- **Body:** CreateDto
- **Response:** `{ data: {entidad} }`
- **Permisos:** `{modulo}:create`

[... mas endpoints]

## DTOs

### Create{Entidad}Dto
```typescript
{
  nombre: string;        // required, 3-100 chars
  codigo?: string;       // optional, unique per tenant
  descripcion?: string;  // optional, max 500 chars
}
```

## Validaciones
| Campo | Regla | Mensaje Error |
|-------|-------|---------------|
| nombre | required, 3-100 | "Nombre es requerido (3-100 caracteres)" |
| codigo | unique per tenant | "Codigo ya existe" |

## Manejo de Errores
| Codigo | Situacion | Response |
|--------|-----------|----------|
| 400 | Validacion fallida | `{ error: "VALIDATION_ERROR", details: [...] }` |
| 404 | No encontrado | `{ error: "NOT_FOUND", message: "..." }` |
| 409 | Conflicto | `{ error: "CONFLICT", message: "..." }` |
```

---

### FASE 5: Plan de Pruebas

**Entregables obligatorios:**
```
docs/04-test-plans/
├── TP-{modulo}.md                  # Plan de pruebas del modulo
├── TC-{modulo}/                    # Casos de prueba
│   ├── TC-{modulo}-001.md
│   └── TC-{modulo}-002.md
└── ESTRATEGIA-TESTING.md           # Estrategia global
```

**Contenido minimo TP-{modulo}.md:**
```markdown
# Plan de Pruebas: {modulo}

## Alcance
- Pruebas unitarias: Services, DTOs
- Pruebas integracion: Controllers, Database
- Pruebas E2E: Flujos criticos

## Cobertura Minima
| Capa | Cobertura |
|------|-----------|
| Services | 80% |
| Controllers | 70% |
| Frontend | 60% |

## Casos de Prueba Criticos

### TC-001: CRUD basico
- Crear entidad valida
- Leer entidad existente
- Actualizar campos
- Eliminar (soft delete)

### TC-002: Validaciones
- Campos requeridos vacios
- Formatos invalidos
- Unicidad violada

### TC-003: Permisos
- Sin autenticacion (401)
- Sin permiso (403)
- Tenant incorrecto (404)
```

---

## CHECKLIST PRE-DESARROLLO

Antes de iniciar cualquier desarrollo, verificar:

### Requerimientos
- [ ] RF documentado con criterios de aceptacion
- [ ] Reglas de negocio definidas
- [ ] Dependencias identificadas
- [ ] Prioridad asignada

### Base de Datos
- [ ] Diagrama ER actualizado
- [ ] DDL-SPEC con todas las tablas
- [ ] Diccionario de datos completo
- [ ] Indices y constraints definidos
- [ ] RLS policies especificadas

### Backend
- [ ] Especificacion tecnica completa
- [ ] Endpoints definidos con request/response
- [ ] DTOs especificados con validaciones
- [ ] Permisos definidos

### Frontend
- [ ] Wireframes/mockups aprobados
- [ ] Componentes identificados
- [ ] Flujos de navegacion
- [ ] Estados de UI (loading, error, empty)

### Testing
- [ ] Plan de pruebas creado
- [ ] Casos de prueba criticos definidos
- [ ] Cobertura minima establecida

---

## PROCESO DE APROBACION

```
┌─────────────────────────────────────────────────────────────┐
│ 1. CREAR DOCUMENTACION                                       │
│    Desarrollador/Analista crea docs segun templates          │
└─────────────┬───────────────────────────────────────────────┘
              ↓
┌─────────────────────────────────────────────────────────────┐
│ 2. REVISION TECNICA                                          │
│    Tech Lead revisa consistencia y completitud               │
└─────────────┬───────────────────────────────────────────────┘
              ↓
┌─────────────────────────────────────────────────────────────┐
│ 3. VALIDACION NEGOCIO                                        │
│    PO valida que refleja requerimientos correctamente        │
└─────────────┬───────────────────────────────────────────────┘
              ↓
┌─────────────────────────────────────────────────────────────┐
│ 4. APROBACION FINAL                                          │
│    ✅ Marcar docs como "APROBADO"                            │
│    ✅ Crear tarea en backlog con referencia a docs           │
└─────────────┬───────────────────────────────────────────────┘
              ↓
┌─────────────────────────────────────────────────────────────┐
│ 5. INICIAR DESARROLLO                                        │
│    Solo con documentacion APROBADA                           │
└─────────────────────────────────────────────────────────────┘
```

---

## ESTRUCTURA DOCS POR VERTICAL

Cada vertical debe mantener su propia documentacion que EXTIENDE la del core:

```
apps/verticales/{vertical}/docs/
├── 00-vision-general/
│   └── VISION-{VERTICAL}.md
├── 01-requerimientos/
│   └── RF-{MAI-NNN}/              # Modulos especificos de vertical
├── 02-modelado/
│   ├── database-design/
│   │   └── DDL-SPEC-{schema}.md   # Schemas propios de vertical
│   └── especificaciones-tecnicas/
├── 03-user-stories/
│   └── {MAI-NNN}/
├── 04-test-plans/
└── 90-transversal/
    └── MAPEO-CORE-VERTICAL.md     # Mapeo de modulos core usados
```

---

## REFERENCIAS

### Directivas Relacionadas
- `core/orchestration/directivas/DIRECTIVA-DOCUMENTACION-OBLIGATORIA.md`
- `core/orchestration/directivas/DIRECTIVA-FLUJO-5-FASES.md`
- `core/orchestration/directivas/DIRECTIVA-VALIDACION-DOCUMENTACION.md`

### Templates
- `core/orchestration/templates/TEMPLATE-ANALISIS.md`
- `core/orchestration/templates/TEMPLATE-PLAN.md`

### Patrones de Referencia
- Odoo Enterprise modules structure
- `knowledge-base/patterns/` (patrones de Odoo)

---

## CONSECUENCIAS DE NO DOCUMENTAR

1. **Desarrollo rechazado:** No se puede iniciar sin docs aprobados
2. **Regresion:** Si se descubre falta de docs, se pausa desarrollo
3. **Deuda tecnica:** Docs incompletos generan deuda tecnica critica
4. **Impacto en verticales:** Afecta a todas las verticales que heredan

---

**Version:** 1.0.0
**Ultima actualizacion:** 2025-12-05
**Estado:** ACTIVA Y OBLIGATORIA
