# _MAP: MAI-002 - Proyectos y Estructura

**Epica:** MAI-002
**Nombre:** Proyectos y Estructura de Obra
**Fase:** 2 - Core Business
**Story Points:** 45 SP
**Estado:** 100% Documentado | Pendiente de Implementacion
**Sprint:** Sprint 3-6 (Semanas 3-10)
**Ultima actualizacion:** 2025-12-06

---

## Proposito

Sistema integral de gestion de proyectos de construccion inmobiliaria que permite:
- Gestion completa de proyectos (fraccionamientos, conjuntos habitacionales, edificios verticales)
- Estructura jerarquica flexible: Proyecto → Etapa → Manzana (opcional) → Lote → Vivienda
- Catalogo de prototipos de vivienda con versionado
- Asignacion de equipo con validacion de carga de trabajo
- Calendario de obra con hitos, fases y fechas criticas
- Sistema de alertas automaticas

**Reutilizacion GAMILIT:** 40% de componentes de infraestructura

---

## Estructura de Archivos

```
MAI-002-proyectos-estructura/
├── README.md                     # (Pendiente) Descripcion del modulo
├── _MAP.md                       # Este archivo - Mapa de navegacion
├── RESUMEN-EPICA-MAI-002.md     # Resumen ejecutivo completo
│
├── requerimientos-funcionales/   # 4 Requerimientos Funcionales (100%)
│   ├── RF-PROJ-001-catalogo-proyectos.md
│   ├── RF-PROJ-002-estructura-jerarquica-obra.md
│   ├── RF-PROJ-003-prototipos-vivienda.md
│   └── RF-PROJ-004-asignacion-equipo-calendario.md
│
├── especificaciones/             # 4 Especificaciones Tecnicas (100%)
│   ├── ET-PROJ-001-implementacion-catalogo-proyectos.md
│   ├── ET-PROJ-002-implementacion-estructura-jerarquica.md
│   ├── ET-PROJ-003-implementacion-prototipos.md
│   └── ET-PROJ-004-implementacion-equipo-calendario.md
│
├── historias-usuario/            # 9 Historias de Usuario (100%)
│   ├── US-PROJ-001-catalogo-proyectos.md          # 8 SP - CRUD proyectos
│   ├── US-PROJ-002-transiciones-estado.md         # 5 SP - Workflow estados
│   ├── US-PROJ-003-estructura-fraccionamiento.md  # 8 SP - Wizard jerarquia
│   ├── US-PROJ-004-estructura-torre-vertical.md   # 6 SP - Torres/Edificios
│   ├── US-PROJ-005-gestion-prototipos.md          # 5 SP - Catalogo prototipos
│   ├── US-PROJ-006-asignacion-prototipos-lotes.md # 3 SP - Asignacion masiva
│   ├── US-PROJ-007-asignacion-equipo.md           # 4 SP - Team management
│   ├── US-PROJ-008-calendario-hitos.md            # 3 SP - Milestones
│   └── US-PROJ-009-alertas-fechas-criticas.md     # 3 SP - Sistema alertas
│
└── implementacion/               # Archivos de soporte tecnico
    ├── TRACEABILITY.yml          # Matriz de trazabilidad completa
    ├── ET-PROJ-001-rls-policies.sql  # RLS para proyectos
    └── ET-PROJ-002-rls-policies.sql  # RLS para estructura
```

---

## Contenido

### Requerimientos Funcionales (4)

| ID | Archivo | Titulo | US Asociadas | Estado |
|----|---------|--------|--------------|--------|
| RF-PROJ-001 | [RF-PROJ-001-catalogo-proyectos.md](./requerimientos-funcionales/RF-PROJ-001-catalogo-proyectos.md) | Catalogo de Proyectos | US-001, US-002 | Documentado |
| RF-PROJ-002 | [RF-PROJ-002-estructura-jerarquica-obra.md](./requerimientos-funcionales/RF-PROJ-002-estructura-jerarquica-obra.md) | Estructura Jerarquica de Obra | US-003, US-004 | Documentado |
| RF-PROJ-003 | [RF-PROJ-003-prototipos-vivienda.md](./requerimientos-funcionales/RF-PROJ-003-prototipos-vivienda.md) | Prototipos de Vivienda | US-005, US-006 | Documentado |
| RF-PROJ-004 | [RF-PROJ-004-asignacion-equipo-calendario.md](./requerimientos-funcionales/RF-PROJ-004-asignacion-equipo-calendario.md) | Asignacion de Equipo y Calendario | US-007, US-008, US-009 | Documentado |

### Especificaciones Tecnicas (4)

| ID | Archivo | Titulo | RF | Tablas | Endpoints | Estado |
|----|---------|--------|----|--------|-----------|--------|
| ET-PROJ-001 | [ET-PROJ-001-implementacion-catalogo-proyectos.md](./especificaciones/ET-PROJ-001-implementacion-catalogo-proyectos.md) | Implementacion Catalogo Proyectos | RF-PROJ-001 | 3 | 9 | Documentado |
| ET-PROJ-002 | [ET-PROJ-002-implementacion-estructura-jerarquica.md](./especificaciones/ET-PROJ-002-implementacion-estructura-jerarquica.md) | Implementacion Estructura Jerarquica | RF-PROJ-002 | 5 | 15 | Documentado |
| ET-PROJ-003 | [ET-PROJ-003-implementacion-prototipos.md](./especificaciones/ET-PROJ-003-implementacion-prototipos.md) | Implementacion Prototipos | RF-PROJ-003 | 4 | 9 | Documentado |
| ET-PROJ-004 | [ET-PROJ-004-implementacion-equipo-calendario.md](./especificaciones/ET-PROJ-004-implementacion-equipo-calendario.md) | Implementacion Equipo y Calendario | RF-PROJ-004 | 5 | 11 | Documentado |

### Historias de Usuario (9)

| ID | Archivo | Titulo | SP | Prioridad | Estado |
|----|---------|--------|----|-----------|--------|
| US-PROJ-001 | [US-PROJ-001-catalogo-proyectos.md](./historias-usuario/US-PROJ-001-catalogo-proyectos.md) | Catalogo de Proyectos | 8 | P0 | Documentado |
| US-PROJ-002 | [US-PROJ-002-transiciones-estado.md](./historias-usuario/US-PROJ-002-transiciones-estado.md) | Transiciones de Estado | 5 | P0 | Documentado |
| US-PROJ-003 | [US-PROJ-003-estructura-fraccionamiento.md](./historias-usuario/US-PROJ-003-estructura-fraccionamiento.md) | Estructura de Fraccionamiento | 8 | P0 | Documentado |
| US-PROJ-004 | [US-PROJ-004-estructura-torre-vertical.md](./historias-usuario/US-PROJ-004-estructura-torre-vertical.md) | Estructura de Torre Vertical | 6 | P1 | Documentado |
| US-PROJ-005 | [US-PROJ-005-gestion-prototipos.md](./historias-usuario/US-PROJ-005-gestion-prototipos.md) | Gestion de Prototipos | 5 | P1 | Documentado |
| US-PROJ-006 | [US-PROJ-006-asignacion-prototipos-lotes.md](./historias-usuario/US-PROJ-006-asignacion-prototipos-lotes.md) | Asignacion de Prototipos a Lotes | 3 | P1 | Documentado |
| US-PROJ-007 | [US-PROJ-007-asignacion-equipo.md](./historias-usuario/US-PROJ-007-asignacion-equipo.md) | Asignacion de Equipo | 4 | P1 | Documentado |
| US-PROJ-008 | [US-PROJ-008-calendario-hitos.md](./historias-usuario/US-PROJ-008-calendario-hitos.md) | Calendario de Hitos | 3 | P1 | Documentado |
| US-PROJ-009 | [US-PROJ-009-alertas-fechas-criticas.md](./historias-usuario/US-PROJ-009-alertas-fechas-criticas.md) | Alertas de Fechas Criticas | 3 | P1 | Documentado |

**Total Story Points:** 45 SP

### Implementacion

Inventarios de trazabilidad:
- [TRACEABILITY.yml](./implementacion/TRACEABILITY.yml) - Matriz completa de trazabilidad
- [ET-PROJ-001-rls-policies.sql](./implementacion/ET-PROJ-001-rls-policies.sql) - RLS para proyectos
- [ET-PROJ-002-rls-policies.sql](./implementacion/ET-PROJ-002-rls-policies.sql) - RLS para estructura jerarquica

---

## Flujo de Documentacion

```
┌─────────────────────────────────────────────────────────────────────┐
│                    FLUJO MAI-002: PROYECTOS Y ESTRUCTURA            │
└─────────────────────────────────────────────────────────────────────┘

1. CATALOGO DE PROYECTOS
   RF-PROJ-001 (Requerimiento)
      ↓
   ET-PROJ-001 (Especificacion Tecnica)
      ↓
   ├─→ US-PROJ-001 (Catalogo CRUD) → Backend API + Frontend UI
   └─→ US-PROJ-002 (Transiciones Estado) → State Machine + Notificaciones

2. ESTRUCTURA JERARQUICA
   RF-PROJ-002 (Requerimiento)
      ↓
   ET-PROJ-002 (Especificacion Tecnica)
      ↓
   ├─→ US-PROJ-003 (Fraccionamiento) → Wizard + TreeView
   └─→ US-PROJ-004 (Torre Vertical) → Adaptacion para edificios

3. PROTOTIPOS DE VIVIENDA
   RF-PROJ-003 (Requerimiento)
      ↓
   ET-PROJ-003 (Especificacion Tecnica)
      ↓
   ├─→ US-PROJ-005 (Gestion Prototipos) → Catalogo + Versionado
   └─→ US-PROJ-006 (Asignacion a Lotes) → Asignacion masiva

4. EQUIPO Y CALENDARIO
   RF-PROJ-004 (Requerimiento)
      ↓
   ET-PROJ-004 (Especificacion Tecnica)
      ↓
   ├─→ US-PROJ-007 (Asignacion Equipo) → Workload validation
   ├─→ US-PROJ-008 (Calendario Hitos) → Timeline + Dependencies
   └─→ US-PROJ-009 (Alertas Criticas) → Cron jobs + Notificaciones

┌─────────────────────────────────────────────────────────────────────┐
│                           COMPONENTES TRANSVERSALES                  │
├─────────────────────────────────────────────────────────────────────┤
│ • RLS Policies (Multi-tenancy por constructora)                     │
│ • Event Emitters (Notificaciones de cambios)                        │
│ • Validaciones de negocio (Estado, jerarquia, workload)             │
│ • Triggers SQL (Contadores automaticos, calculos)                   │
│ • Cron Jobs (Alertas automaticas)                                   │
└─────────────────────────────────────────────────────────────────────┘
```

---

## Relacion entre Componentes

### 1. Dependencias Jerarquicas

```
Project (Proyecto)
    ├── Stage (Etapa)
    │   └── Block (Manzana) [OPCIONAL - solo fraccionamientos]
    │       └── Lot (Lote)
    │           └── HousingUnit (Vivienda)
    │
    ├── HousingPrototype (Prototipos) [CATALOGO]
    │   ├── Versions (Versionado)
    │   └── Assigned to → Lots
    │
    ├── ProjectTeamAssignment (Equipo)
    │   ├── Director (unico)
    │   ├── Residents (multiples)
    │   └── Engineers/Supervisors (compartidos)
    │
    └── Calendar
        ├── Milestones (Hitos con dependencias)
        ├── ConstructionPhases (Fases)
        └── CriticalDates (Fechas criticas + Alertas)
```

### 2. Flujo de Estados

**Proyecto:**
```
Licitacion → Adjudicado → Ejecucion → Entregado → Cerrado
```

**Etapa:**
```
Planeada → En Proceso → Terminada → Entregada
```

**Lote:**
```
Disponible → Vendido → En Construccion → Terminado → Entregado
```

**Vivienda:**
```
Disponible → En Proceso → Terminada → Entregada
```

### 3. Integraciones con Otros Modulos

| Modulo | Relacion | Campos Clave |
|--------|----------|--------------|
| MAI-001 (Fundamentos) | `constructoraId`, `userId` | Multi-tenancy, Auth |
| MAI-003 (Presupuestos) | `Project.contractAmount` | Presupuesto maestro por proyecto |
| MAI-004 (Compras) | `Project.id` | Requisiciones filtradas por proyecto |
| MAI-005 (Control de Obra) | `HousingUnit.id` | Avances fisicos por vivienda |
| MAI-007 (RRHH) | `TeamAssignment` | Asistencias de cuadrillas en proyecto |

---

## Quick Links

### Documentos Principales
- [RESUMEN-EPICA-MAI-002.md](./RESUMEN-EPICA-MAI-002.md) - Resumen ejecutivo completo (830+ lineas)
- [TRACEABILITY.yml](./implementacion/TRACEABILITY.yml) - Matriz de trazabilidad (307 lineas)

### Por Tipo de Proyecto

**Fraccionamiento Horizontal:**
- RF-PROJ-002 (Estructura con manzanas)
- US-PROJ-003 (Wizard de fraccionamiento)

**Edificio Vertical:**
- RF-PROJ-002 (Estructura sin manzanas)
- US-PROJ-004 (Wizard de torre vertical)

**Conjunto Habitacional Mixto:**
- RF-PROJ-002 (Estructura flexible)
- US-PROJ-003 + US-PROJ-004 (Combinacion)

### Por Funcionalidad

**Gestion de Proyectos:**
- RF-PROJ-001 → ET-PROJ-001 → US-PROJ-001, US-PROJ-002

**Estructura de Obra:**
- RF-PROJ-002 → ET-PROJ-002 → US-PROJ-003, US-PROJ-004

**Prototipos:**
- RF-PROJ-003 → ET-PROJ-003 → US-PROJ-005, US-PROJ-006

**Equipo y Calendario:**
- RF-PROJ-004 → ET-PROJ-004 → US-PROJ-007, US-PROJ-008, US-PROJ-009

### Archivos SQL
- [ET-PROJ-001-rls-policies.sql](./implementacion/ET-PROJ-001-rls-policies.sql) - Row Level Security para proyectos
- [ET-PROJ-002-rls-policies.sql](./implementacion/ET-PROJ-002-rls-policies.sql) - Row Level Security para estructura

---

## Modulos Afectados

### Base de Datos
- **Schema:** `project_management`
- **Tablas:** 17 tablas principales
  - Proyectos: `projects`, `project_documents`, `project_metrics`
  - Estructura: `stages`, `blocks`, `lots`, `housing_units`, `unit_progress`
  - Prototipos: `housing_prototypes`, `prototype_versions`, `prototype_documents`, `prototype_costs`
  - Equipo: `project_team_assignments`
  - Calendario: `project_milestones`, `construction_phases`, `critical_dates`, `milestone_dependencies`
- **ENUMs:**
  - `ProjectType` (fraccionamiento_horizontal, conjunto_habitacional, edificio_vertical, mixto)
  - `ProjectStatus` (licitacion, adjudicado, ejecucion, entregado, cerrado)
  - `PrototypeCategory` (unifamiliar, departamento, duplex)
  - `ProjectRole` (director, resident, engineer, supervisor, purchases_manager)
  - `MilestoneType` (11 tipos: arranque, permisos, cimentacion, etc.)
- **Funciones SQL:**
  - `get_user_total_workload()` - Calculo de carga de trabajo
  - `get_role_workload_limit()` - Limites por rol
  - Triggers para contadores automaticos

### Backend (NestJS)
- **Modulo:** `project-management`
- **Path:** `apps/backend/src/modules/project-management/`
- **Entities:** 11 entities principales
  - Project, Stage, Block, Lot, HousingUnit
  - HousingPrototype, PrototypeVersion
  - ProjectTeamAssignment, Milestone, CriticalDate, ConstructionPhase
- **Services:** 8+ services
  - ProjectsService, StagesService, LotsService, HousingUnitsService
  - PrototypesService, TeamAssignmentsService, MilestonesService, AlertsService
- **Controllers:** 6+ controllers RESTful
- **Total Endpoints:** 52 endpoints

### Frontend (React + TypeScript)
- **Features:** `projects`
- **Path:** `apps/frontend/src/features/projects/`
- **Pages:**
  - ProjectsListPage, ProjectDetailPage, CreateProjectPage
  - StructurePage, PrototypesPage, CalendarPage
- **Components:** 43+ componentes
  - ProjectForm, ProjectCard, ProjectStatusBadge
  - StructureTreeView, BulkLotCreationForm, HousingUnitProgressCard
  - PrototypeGallery, PrototypeForm
  - TeamRoster, MilestoneTimeline, CriticalDatesCalendar
- **Stores:** projectStore, structureStore, prototypeStore
- **Services:** projects.api.ts

---

## Metricas

| Metrica | Valor |
|---------|-------|
| **Story Points estimados** | 45 SP |
| **Duracion estimada** | 8 semanas (4 sprints de 2 semanas) |
| **Desarrolladores requeridos** | 2 full-stack |
| **Reutilizacion GAMILIT** | 40% |
| **RF completados** | 4/4 (100%) |
| **ET completadas** | 4/4 (100%) |
| **US completadas** | 9/9 (100%) |
| **Documentacion generada** | ~230 KB |
| **Tablas DB** | 17 tablas |
| **Endpoints API** | 52 endpoints |
| **Componentes UI** | 43 componentes |
| **Validaciones de negocio** | 20+ reglas |

---

## Caracteristicas Clave

### 1. Jerarquia Flexible
- Soporta 3 estructuras: Fraccionamiento (con manzanas), Conjunto (sin manzanas), Torre vertical (niveles)
- Navegacion de arbol recursivo con expand/collapse
- Creacion masiva: hasta 500 lotes en <3 segundos
- Codigos unicos auto-generados

### 2. Prototipos con Versionado
- Catalogo centralizado de prototipos
- Versionado automatico (v1, v2, v3...)
- Depreciacion de versiones antiguas
- Asignacion masiva a lotes
- Snapshot de version al momento de asignacion
- Herencia de caracteristicas a viviendas

### 3. Gestion de Equipo Inteligente
- Validacion de limites de workload por rol:
  - Director: 500% (5 proyectos)
  - Residente: 200% (2 proyectos)
  - Ingeniero: 800% (8 proyectos)
- Solo un Director principal por proyecto
- Dashboard de disponibilidad de equipo
- Historial de asignaciones

### 4. Calendario Inteligente
- Hitos con dependencias (validacion de grafo)
- 11 tipos de hitos predefinidos
- Fases constructivas (9 fases)
- Fechas criticas con alertas automaticas
- Cron jobs para notificaciones diarias (9:00 AM)
- Sistema de notificaciones por email + in-app

### 5. Multi-tenancy Robusto
- Row Level Security (RLS) en todas las tablas
- Aislamiento total por `constructoraId`
- Imposible ver datos de otras constructoras
- Validaciones a nivel DB + Backend

---

## Configuracion SaaS Multi-tenant

### Activacion del Modulo

MAI-002 es un **modulo core** incluido en los 3 planes de suscripcion:

| Plan | Modulo MAI-002 | Limites |
|------|----------------|---------|
| **Basico** | Incluido | 5 proyectos activos simultaneos |
| **Profesional** | Incluido | 15 proyectos activos simultaneos |
| **Enterprise** | Incluido | Proyectos ilimitados |

**Activacion automatica:** Este modulo se activa durante el onboarding de un nuevo tenant (constructora).

### Feature Flags Configurables

- `projects.bulk_lot_creation` - Creacion masiva de hasta 500 lotes
- `projects.housing_prototypes` - Catalogo de prototipos de vivienda
- `projects.team_workload_validation` - Validacion de limites de carga por rol
- `projects.ai_schedule_optimization` - Optimizacion de calendario con IA (Beta)

---

## Stack Tecnologico

### Backend
- **Framework:** NestJS + TypeORM
- **Base de Datos:** PostgreSQL 15+
- **Arquitectura:** Event-driven (Event Emitters)
- **Seguridad:** Row Level Security (RLS), JWT
- **Jobs:** Cron jobs para alertas automaticas

### Frontend
- **Framework:** React + TypeScript
- **Formularios:** React Hook Form + Zod validation
- **Estado:** React Query (TanStack) + Zustand
- **UI:** Shadcn/UI components
- **Routing:** React Router v6

### Storage
- **Documentos:** S3-compatible (planos, permisos, renders)
- **Geoespacial:** PostGIS (coordenadas de proyectos) - Opcional

---

## Patrones de Implementacion

### 1. Jerarquia Recursiva
```typescript
// Navegacion de arbol recursivo
interface TreeNode {
  id: string;
  type: 'project' | 'stage' | 'block' | 'lot' | 'housing';
  children?: TreeNode[];
}
```

### 2. Event-Driven Notifications
```typescript
// Event emitters para notificaciones
this.eventEmitter.emit('project.status_changed', {
  projectId,
  oldStatus,
  newStatus,
  changedBy
});
```

### 3. Codigo Auto-generado
```typescript
// Patron: PROJ-{YEAR}-{SEQUENCE}
generateProjectCode(): string {
  const year = new Date().getFullYear();
  const sequence = await this.getNextSequence(year);
  return `PROJ-${year}-${sequence.toString().padStart(3, '0')}`;
}
```

### 4. Validacion de Estado
```typescript
// Maquina de estados para transiciones
const validTransitions = {
  licitacion: ['adjudicado'],
  adjudicado: ['ejecucion'],
  ejecucion: ['entregado'],
  entregado: ['cerrado']
};
```

### 5. Row Level Security (RLS)
```sql
-- Politica RLS para multi-tenancy
CREATE POLICY projects_select_policy ON project_management.projects
FOR SELECT
USING (constructora_id = current_setting('app.current_constructora_id')::UUID);
```

---

## Plan de Implementacion

### Sprint 3 (Semana 3-4) - 13 SP
- US-PROJ-001: Catalogo de Proyectos (8 SP)
- US-PROJ-002: Transiciones de Estado (5 SP)

**Entregables:**
- CRUD completo de proyectos
- Workflow de estados con validaciones
- RLS policies implementadas

### Sprint 4 (Semana 5-6) - 14 SP
- US-PROJ-003: Estructura de Fraccionamiento (8 SP)
- US-PROJ-004: Estructura de Torre Vertical (6 SP)

**Entregables:**
- Wizard de creacion de estructura
- TreeView jerarquico
- Creacion masiva de lotes

### Sprint 5 (Semana 7-8) - 8 SP
- US-PROJ-005: Gestion de Prototipos (5 SP)
- US-PROJ-006: Asignacion de Prototipos a Lotes (3 SP)

**Entregables:**
- Catalogo de prototipos con versionado
- Asignacion masiva a lotes
- Herencia de caracteristicas

### Sprint 6 (Semana 9-10) - 10 SP
- US-PROJ-007: Asignacion de Equipo (4 SP)
- US-PROJ-008: Calendario de Hitos (3 SP)
- US-PROJ-009: Alertas de Fechas Criticas (3 SP)

**Entregables:**
- Gestion de equipo con workload
- Timeline de hitos
- Sistema de alertas automaticas

---

## Siguientes Pasos

### Opcion 1: Iniciar Implementacion de MAI-002 (RECOMENDADO)
**Razon:** Documentacion 100% completa, equipo puede empezar desarrollo inmediato

**Estimacion:** 4 sprints de 2 semanas = 8 semanas

### Opcion 2: Continuar con Siguiente Epica
**Opciones:**
- MAI-003: Presupuestos y Control de Costos (50 SP)
- MAI-004: Compras e Inventarios (50 SP)
- MAI-005: Control de Obra y Avances (45 SP)

**Beneficio:** Cobertura completa del sistema antes de implementar

### Opcion 3: Enfoque Paralelo
- Equipo A: Implementa MAI-002
- Equipo B: Documenta MAI-003 o MAI-005

**Beneficio:** Velocidad maxima, trabajo paralelo

---

## Referencias

- **Resumen Ejecutivo:** [RESUMEN-EPICA-MAI-002.md](./RESUMEN-EPICA-MAI-002.md)
- **Trazabilidad:** [TRACEABILITY.yml](./implementacion/TRACEABILITY.yml)
- **Proyecto GAMILIT:** Reutilizacion de componentes base de infraestructura

---

**Generado:** 2025-12-06
**Mantenedores:** @tech-lead @backend-team @frontend-team @database-team
**Estado:** Documentado (Pendiente de Implementacion)
