# MAI-002: Proyectos y Estructura de Obra **Vertical:** Construccion **Modulo:** MAI-002 **Nombre:** Proyectos y Estructura **Fase:** Fase 2 - Core Business **Prioridad:** P0 (Critica) **Estado:** Completo **Story Points:** 45 SP **Ultima actualizacion:** 2025-11-17 --- ## Descripcion El modulo **MAI-002 - Proyectos y Estructura** es el nucleo central del sistema de construccion, permitiendo la gestion completa de proyectos inmobiliarios con una jerarquia flexible que se adapta a diferentes tipos de desarrollos: - **Fraccionamiento Horizontal:** Proyecto → Etapa → Manzana → Lote → Vivienda - **Conjunto Habitacional:** Proyecto → Etapa → Lote → Vivienda (sin manzanas) - **Edificio Vertical:** Proyecto → Torre → Nivel → Departamento - **Proyecto Mixto:** Combinacion de estructuras anteriores Este modulo gestiona desde el catalogo de proyectos hasta la estructura jerarquica detallada de cada desarrollo, incluyendo prototipos de vivienda, asignacion de equipos de trabajo y calendario de hitos del proyecto. ### Caracteristicas Clave - Gestion de multiples proyectos simultaneos por constructora - Jerarquia de 5 niveles: Proyecto → Etapa → Manzana → Lote → Vivienda - Catalogo de prototipos de vivienda con versionado - Asignacion de equipo con validacion de workload - Calendario de hitos con dependencias y alertas automaticas - Soporte para creacion masiva de lotes (hasta 500 por operacion) - Estados del ciclo de vida: Licitacion → Adjudicado → Ejecucion → Entregado → Cerrado --- ## Alcance Funcional El modulo MAI-002 cubre las siguientes areas funcionales: ### 1. Catalogo de Proyectos (RF-PROJ-001) - **CRUD completo** de proyectos inmobiliarios - **4 tipos de proyectos:** Fraccionamiento horizontal, Conjunto habitacional, Edificio vertical, Mixto - **5 estados del ciclo de vida:** Licitacion → Adjudicado → Ejecucion → Entregado → Cerrado - **Datos completos:** Ubicacion geografica, cliente, contrato, permisos legales - **Metricas automaticas:** Fisicas (viviendas, m2), financieras (presupuesto, avance), temporales (fechas clave) - **Codigo auto-generado:** PROJ-2025-001, PROJ-2025-002, etc. ### 2. Estructura Jerarquica de Obra (RF-PROJ-002) - **Jerarquia de 5 niveles:** Proyecto → Etapa → Manzana → Lote → Vivienda - **Estructuras flexibles:** - Fraccionamiento: Con manzanas y lotes - Conjunto: Sin manzanas (solo lotes directos) - Torre vertical: Niveles y departamentos - **Estados de lote:** Disponible → Vendido → En construccion → Terminado → Entregado - **Avance fisico por vivienda:** Cimentacion, Estructura, Muros, Instalaciones, Acabados - **Creacion masiva:** Hasta 500 lotes en una operacion (< 3 segundos) - **Vista de arbol jerarquico:** Navegacion recursiva con expandir/colapsar ### 3. Prototipos de Vivienda (RF-PROJ-003) - **Catalogo de prototipos** por constructora - **3 tipos principales:** Casa unifamiliar, Departamento, Duplex/Triplex - **Segmentos:** Interes social, Interes medio, Residencial medio/alto, Premium - **Datos completos:** Areas (construccion, terreno, vendible), distribucion (recamaras, banos), acabados, costos - **Versionado automatico:** v1, v2, v3... con historial de cambios - **Asignacion a lotes:** Individual o masiva (hasta 500 lotes) - **Herencia de caracteristicas:** Snapshot de prototipo al momento de asignacion - **Control de uso:** Impedir eliminacion si el prototipo esta asignado a viviendas ### 4. Asignacion de Equipo y Calendario (RF-PROJ-004) - **5 roles de equipo:** Director, Residente, Ingeniero, Supervisor, Gerente de Compras - **Validacion de workload:** Limites por rol (Director 500%, Residente 200%, Ingeniero 800%) - **Reglas de asignacion:** Solo un Director/Residente principal por proyecto - **Hitos del proyecto:** 11 tipos desde arranque hasta cierre administrativo - **Fases constructivas:** 9 fases (preliminares, cimentacion, estructura, albanileria, instalaciones, acabados, exteriores, urbanizacion, entrega) - **Fechas criticas:** Contractuales, regulatorias, financieras con alertas automaticas - **Alertas configurables:** 30, 15, 7, 3, 2, 1 dia(s) antes - **Dashboard de equipo:** Visualizacion de carga de trabajo por rol --- ## Reutilizacion del Core ERP El modulo MAI-002 reutiliza aproximadamente **40% de componentes** del ERP generico (GAMILIT): ### Componentes Reutilizados del Core | Componente Core | Reutilizacion | Adaptacion Requerida | |-----------------|---------------|----------------------| | **Sistema de autenticacion (JWT)** | 95% | Roles de construccion | | **Multi-tenancy (por constructora)** | 90% | RLS policies por proyecto | | **Sistema de auditoria** | 85% | Eventos especificos de proyectos | | **Gestion de catalogos** | 70% | Jerarquia de 5 niveles | | **Sistema de notificaciones** | 80% | Alertas de fechas criticas | | **Dashboard base** | 60% | Metricas especificas de obra | | **Componentes UI** | 85% | TreeView, Forms, Cards | | **API RESTful** | 90% | Endpoints especificos | ### Componentes Nuevos (No Reutilizables) Los siguientes componentes son especificos del dominio de construccion: - **Jerarquia de 5 niveles:** Proyecto → Etapa → Manzana → Lote → Vivienda - **Prototipos de vivienda:** Catalogo con versionado y herencia - **Estructuras flexibles:** Soporte para horizontal, vertical y mixto - **Creacion masiva de lotes:** Bulk operations hasta 500 elementos - **Workload por rol:** Validacion de limites por tipo de ingeniero/residente - **Hitos con dependencias:** Graph validation de milestones - **Avance fisico ponderado:** Calculo automatico por etapas constructivas --- ## Requerimientos Funcionales (RF) El modulo MAI-002 incluye 4 requerimientos funcionales completos: | ID | Titulo | Archivo | Prioridad | Estado | |----|--------|---------|-----------|--------| | RF-PROJ-001 | Catalogo de Proyectos | [RF-PROJ-001-catalogo-proyectos.md](./requerimientos-funcionales/RF-PROJ-001-catalogo-proyectos.md) | P0 | Completo | | RF-PROJ-002 | Estructura Jerarquica de Obra | [RF-PROJ-002-estructura-jerarquica-obra.md](./requerimientos-funcionales/RF-PROJ-002-estructura-jerarquica-obra.md) | P0 | Completo | | RF-PROJ-003 | Prototipos de Vivienda | [RF-PROJ-003-prototipos-vivienda.md](./requerimientos-funcionales/RF-PROJ-003-prototipos-vivienda.md) | P0 | Completo | | RF-PROJ-004 | Asignacion de Equipo y Calendario | [RF-PROJ-004-asignacion-equipo-calendario.md](./requerimientos-funcionales/RF-PROJ-004-asignacion-equipo-calendario.md) | P0 | Completo | **Total:** 4 RFs (~104 KB de documentacion) --- ## Especificaciones Tecnicas (ET) | ID | Titulo | Archivo | RF Base | Estado | |----|--------|---------|---------|--------| | ET-PROJ-001 | Implementacion de Catalogo de Proyectos | [ET-PROJ-001-implementacion-catalogo-proyectos.md](./especificaciones/ET-PROJ-001-implementacion-catalogo-proyectos.md) | RF-PROJ-001 | Completo | | ET-PROJ-002 | Implementacion de Estructura Jerarquica | [ET-PROJ-002-implementacion-estructura-jerarquica.md](./especificaciones/ET-PROJ-002-implementacion-estructura-jerarquica.md) | RF-PROJ-002 | Completo | | ET-PROJ-003 | Implementacion de Prototipos | [ET-PROJ-003-implementacion-prototipos.md](./especificaciones/ET-PROJ-003-implementacion-prototipos.md) | RF-PROJ-003 | Completo | | ET-PROJ-004 | Implementacion de Equipo y Calendario | [ET-PROJ-004-implementacion-equipo-calendario.md](./especificaciones/ET-PROJ-004-implementacion-equipo-calendario.md) | RF-PROJ-004 | Completo | **Total:** 4 ETs (~164 KB de documentacion) --- ## Historias de Usuario (US) | ID | Titulo | Archivo | SP | Estado | |----|--------|---------|-------|--------| | US-PROJ-001 | Catalogo de Proyectos | [US-PROJ-001-catalogo-proyectos.md](./historias-usuario/US-PROJ-001-catalogo-proyectos.md) | 8 | Completo | | US-PROJ-002 | Transiciones de Estado | [US-PROJ-002-transiciones-estado.md](./historias-usuario/US-PROJ-002-transiciones-estado.md) | 5 | Completo | | US-PROJ-003 | Crear Estructura de Fraccionamiento | [US-PROJ-003-estructura-fraccionamiento.md](./historias-usuario/US-PROJ-003-estructura-fraccionamiento.md) | 8 | Completo | | US-PROJ-004 | Crear Estructura de Torre Vertical | [US-PROJ-004-estructura-torre-vertical.md](./historias-usuario/US-PROJ-004-estructura-torre-vertical.md) | 6 | Completo | | US-PROJ-005 | Gestion de Prototipos | [US-PROJ-005-gestion-prototipos.md](./historias-usuario/US-PROJ-005-gestion-prototipos.md) | 5 | Completo | | US-PROJ-006 | Asignacion de Prototipos a Lotes | [US-PROJ-006-asignacion-prototipos-lotes.md](./historias-usuario/US-PROJ-006-asignacion-prototipos-lotes.md) | 3 | Completo | | US-PROJ-007 | Asignacion de Equipo | [US-PROJ-007-asignacion-equipo.md](./historias-usuario/US-PROJ-007-asignacion-equipo.md) | 4 | Completo | | US-PROJ-008 | Calendario de Hitos | [US-PROJ-008-calendario-hitos.md](./historias-usuario/US-PROJ-008-calendario-hitos.md) | 3 | Completo | | US-PROJ-009 | Alertas de Fechas Criticas | [US-PROJ-009-alertas-fechas-criticas.md](./historias-usuario/US-PROJ-009-alertas-fechas-criticas.md) | 3 | Completo | **Total:** 9 USs | 45 Story Points (~92 KB de documentacion) --- ## Dependencias con Otros Modulos ### Modulos Prerequisitos (Bloqueantes) | Modulo | Relacion | Detalles | |--------|----------|----------| | **MAI-001: Fundamentos** | BLOQUEANTE | Sistema de autenticacion, RBAC, multi-tenancy por constructora | ### Modulos Dependientes (Consumen MAI-002) | Modulo | Relacion | Uso de MAI-002 | |--------|----------|----------------| | **MAI-003: Presupuestos y Costos** | DEPENDIENTE | Presupuestos maestros por proyecto, costos por prototipo | | **MAI-004: Compras e Inventarios** | DEPENDIENTE | Requisiciones filtradas por proyecto | | **MAI-005: Control de Obra y Avances** | DEPENDIENTE | Avances fisicos por vivienda, checklists por etapa | | **MAI-007: RRHH y Asistencias** | DEPENDIENTE | Asistencias de cuadrillas asignadas al proyecto | | **MAI-008: Estimaciones y Facturacion** | DEPENDIENTE | Estimaciones por avance de proyecto | | **MAI-009: Calidad y Postventa** | DEPENDIENTE | Incidencias por lote/vivienda | | **MAI-010: CRM Derechohabientes** | DEPENDIENTE | Clientes asignados a lotes | ### Integraciones Clave ```yaml # Ejemplo de flujo de datos MAI-002 (Proyecto) → MAI-003 (Presupuesto Maestro) MAI-002 (Prototipo) → MAI-003 (Presupuesto por Prototipo) MAI-002 (Lote) → MAI-010 (Cliente/Derechohabiente) MAI-002 (Vivienda) → MAI-005 (Avance Fisico) MAI-002 (Equipo) → MAI-007 (Asistencias Cuadrillas) ``` --- ## Diagrama de Arquitectura ### Vista Jerarquica de Datos ``` ┌─────────────────────────────────────────────────────────────────┐ │ CONSTRUCTORA │ │ (Multi-tenant: RLS) │ └───────────────────────┬─────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ PROYECTO │ │ Tipo: Fraccionamiento | Conjunto | Torre | Mixto │ │ Estado: Licitacion → Adjudicado → Ejecucion → Entregado │ │ Codigo: PROJ-2025-001 │ └───────────┬────────────────────┬───────────────┬────────────────┘ │ │ │ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ ETAPA 1 │ │ ETAPA 2 │ │ PROTOTIPO │ │ (Fase del │ │ (Fase del │ │ (Modelo de │ │ proyecto) │ │ proyecto) │ │ vivienda) │ └──────┬───────┘ └──────┬───────┘ └──────────────┘ │ │ │ ▼ ▼ │ (asignado a) ┌──────────────┐ ┌──────────────┐ │ │ MANZANA A │ │ MANZANA B │ │ │ (Solo en │ │ (Solo en │ │ │ Fraccionam.) │ │ Fraccionam.) │ │ └──────┬───────┘ └──────┬───────┘ │ │ │ │ ▼ ▼ │ ┌──────────────┐ ┌──────────────┐ │ │ LOTE 1 │ │ LOTE 2 │◄─────────┘ │ (Terreno │ │ (Terreno │ │ individual) │ │ individual) │ └──────┬───────┘ └──────┬───────┘ │ │ ▼ ▼ ┌──────────────┐ ┌──────────────┐ │ VIVIENDA │ │ VIVIENDA │ │ (Casa/Depto │ │ (Casa/Depto │ │ construido) │ │ construido) │ └──────────────┘ └──────────────┘ ``` ### Vista de Modulos Backend ``` apps/backend/src/modules/projects/ ├── entities/ │ ├── project.entity.ts (Proyecto principal) │ ├── stage.entity.ts (Etapa del proyecto) │ ├── block.entity.ts (Manzana) │ ├── lot.entity.ts (Lote/Terreno) │ ├── housing-unit.entity.ts (Vivienda construida) │ ├── housing-prototype.entity.ts (Prototipo) │ ├── team-assignment.entity.ts (Equipo) │ ├── milestone.entity.ts (Hitos) │ └── critical-date.entity.ts (Fechas criticas) ├── dto/ │ ├── create-project.dto.ts │ ├── update-project.dto.ts │ ├── bulk-lot-creation.dto.ts │ └── ... ├── services/ │ ├── projects.service.ts (CRUD + metricas) │ ├── stages.service.ts (Jerarquia) │ ├── lots.service.ts (Creacion masiva) │ ├── housing-units.service.ts (Avances) │ ├── prototypes.service.ts (Versionado) │ ├── team.service.ts (Workload) │ ├── milestones.service.ts (Dependencias) │ └── alerts.service.ts (Cron jobs) ├── controllers/ │ ├── projects.controller.ts │ ├── stages.controller.ts │ ├── prototypes.controller.ts │ └── ... └── projects.module.ts ``` ### Vista de Base de Datos ```sql -- Schema: projects CREATE SCHEMA IF NOT EXISTS projects; -- Tablas principales (11 tablas) projects.projects -- Proyectos projects.stages -- Etapas projects.blocks -- Manzanas projects.lots -- Lotes projects.housing_units -- Viviendas projects.housing_prototypes -- Prototipos projects.project_team_assignments -- Equipo projects.project_milestones -- Hitos projects.critical_dates -- Fechas criticas projects.construction_phases -- Fases constructivas projects.project_documents -- Documentos -- ENUMs CREATE TYPE project_type AS ENUM ( 'fraccionamiento_horizontal', 'conjunto_habitacional', 'edificio_vertical', 'mixto' ); CREATE TYPE project_status AS ENUM ( 'licitacion', 'adjudicado', 'ejecucion', 'entregado', 'cerrado' ); -- Row Level Security (RLS) ALTER TABLE projects.projects ENABLE ROW LEVEL SECURITY; CREATE POLICY projects_tenant_isolation ON projects.projects FOR ALL USING (constructora_id = current_setting('app.current_constructora_id')::UUID); ``` --- ## Stack Tecnologico ### Backend - **Framework:** NestJS 10.x (Node.js + TypeScript) - **ORM:** TypeORM 0.3.x - **Base de Datos:** PostgreSQL 15.x - **Autenticacion:** JWT (passport-jwt) - **Validacion:** class-validator + class-transformer - **Documentacion API:** Swagger/OpenAPI 3.0 - **Testing:** Jest + Supertest - **Cron Jobs:** @nestjs/schedule (para alertas) ### Frontend - **Framework:** React 18.x + TypeScript - **State Management:** Zustand 4.x - **Forms:** React Hook Form + Zod - **UI Components:** shadcn/ui + Tailwind CSS - **Data Fetching:** TanStack Query (React Query) - **Routing:** React Router v6 - **Testing:** Vitest + React Testing Library - **Visualizacion:** Recharts (graficas), react-big-calendar ### Base de Datos - **RDBMS:** PostgreSQL 15.x - **Features:** - Row Level Security (RLS) para multi-tenancy - Triggers para calculos automaticos - Funciones SQL para workload y metricas - Indices GIN para busqueda full-text - Particionamiento por constructora (futuro) ### DevOps - **Containerizacion:** Docker + Docker Compose - **CI/CD:** GitHub Actions - **Migraciones:** TypeORM migrations - **Monitoreo:** Prometheus + Grafana - **Logs:** Winston + ELK Stack --- ## Metricas del Modulo | Metrica | Valor | |---------|-------| | **Story Points** | 45 SP | | **Requerimientos Funcionales** | 4 RFs | | **Especificaciones Tecnicas** | 4 ETs | | **Historias de Usuario** | 9 USs | | **Tablas de Base de Datos** | 11 tablas | | **Entities TypeORM** | 8 entities | | **Services NestJS** | 8+ services | | **Controllers RESTful** | 6+ controllers | | **Componentes React** | 20+ componentes | | **Endpoints API** | 40+ endpoints | | **Documentacion Total** | ~360 KB | | **Reutilizacion Core ERP** | 40% | | **Tiempo Estimado Desarrollo** | 8 semanas (4 sprints) | --- ## 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). ### Provisioning Automatico Durante el onboarding, el sistema ejecuta: ```sql -- 1. Activar modulo MAI-002 INSERT INTO constructoras.constructora_modules ( constructora_id, module_code, is_active, plan_included ) VALUES ( $constructora_id, 'MAI-002', true, true ); -- 2. Crear prototipos seed (3 prototipos predefinidos) INSERT INTO projects.housing_prototypes ( constructora_id, code, name, category, segment, ... ) VALUES ($constructora_id, 'CASA-SEED-001', 'Casa Tipo A', 'unifamiliar', 'interes_social', ...), ($constructora_id, 'CASA-SEED-002', 'Casa Tipo B', 'unifamiliar', 'interes_medio', ...), ($constructora_id, 'DEPTO-SEED-001', 'Departamento Tipo A', 'departamento', 'interes_social', ...); -- 3. Configurar limites por plan INSERT INTO constructoras.constructora_limits ( constructora_id, limit_key, limit_value ) VALUES ($constructora_id, 'max_active_projects', 15); -- Plan Profesional ``` ### Aislamiento de Datos (RLS) Todas las tablas del modulo MAI-002 estan protegidas con Row-Level Security (RLS): ```sql -- Configuracion de contexto por sesion SET app.current_constructora_id = 'uuid-de-constructora'; -- Toda query SELECT filtra automaticamente por constructora SELECT * FROM projects.projects; -- Retorna solo proyectos de la constructora actual ``` **Politicas RLS completas:** Ver archivos `implementacion/ET-PROJ-*-rls-policies.sql` --- ## Documentacion Adicional ### Resumen Ejecutivo - [RESUMEN-EPICA-MAI-002.md](./RESUMEN-EPICA-MAI-002.md) - Resumen completo de la epica con estado de completitud ### Implementacion - [implementacion/](./implementacion/) - Codigo fuente, migraciones, tests - Scripts SQL de creacion de tablas - Politicas RLS por tabla - Funciones SQL para calculos - Triggers automaticos - Seeds de datos iniciales ### Documentacion de Referencia - [Guia de Uso de Referencias Odoo](/home/isem/workspace/projects/erp-suite/apps/verticales/construccion/docs/GUIA-USO-REFERENCIAS-ODOO.md) - [Mapeo MAI to MGN](/home/isem/workspace/projects/erp-suite/apps/verticales/construccion/docs/01-analisis-referencias/MAPEO-MAI-TO-MGN.md) - [Analisis de Reutilizacion GAMILIT](../ANALISIS-REUTILIZACION-GAMILIT.md) ### Roadmap - **Fase 1 (Semanas 1-2):** Implementacion de RF-PROJ-001 y RF-PROJ-002 (Catalogo y Jerarquia) - **Fase 2 (Semanas 3-4):** Implementacion de RF-PROJ-003 (Prototipos) - **Fase 3 (Semanas 5-6):** Implementacion de RF-PROJ-004 (Equipo y Calendario) - **Fase 4 (Semanas 7-8):** Testing, refinamiento y deployment --- ## Contacto y Soporte **Equipo responsable:** - Tech Lead: @tech-lead - Backend Team: @backend-team - Frontend Team: @frontend-team - Database Team: @database-team **Documentacion generada:** 2025-11-17 **Estado del modulo:** Completo (documentacion 100%) **Proximo paso:** Iniciar implementacion (Sprint 3) --- ## Licencia Copyright (c) 2025 - ERP Suite Construccion Todos los derechos reservados.