erp-construccion/README.md

365 lines
12 KiB
Markdown

# ERP Construccion - Sistema de Administracion de Obra e INFONAVIT
Sistema ERP especializado para empresas de construccion de vivienda con integracion INFONAVIT. Arquitectura multi-tenant SaaS con Row Level Security (RLS).
## Estado del Proyecto
| Campo | Valor |
|-------|-------|
| **Estado** | 🚧 En desarrollo (55%) |
| **Version** | 0.2.0 |
| **Modulos** | 18 (14 MAI + 3 MAE + 1 MAA) |
| **DDL Schemas** | 7 (110 tablas) |
| **Entidades Backend** | 30 |
| **Services Backend** | 8 |
---
## Quick Start
### Prerequisitos
- Node.js >= 18.0.0
- Docker & Docker Compose
- PostgreSQL 15+ con PostGIS (incluido en docker-compose)
### Instalacion
```bash
# Clonar repositorio
cd apps/verticales/construccion
# Copiar variables de entorno
cp .env.example .env
# Levantar servicios con Docker
docker-compose up -d
# O desarrollo local
cd backend && npm install && npm run dev
```
### URLs de Desarrollo
| Servicio | URL |
|----------|-----|
| Backend API | http://localhost:3000 |
| Frontend | http://localhost:5173 |
| Adminer (DB) | http://localhost:8080 |
| Mailhog | http://localhost:8025 |
---
## Arquitectura
```
┌─────────────────────────────────────────────────────────┐
│ Frontend (React) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Budgets │ │Progress │ │Estimates│ │ HSE │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
└───────┼────────────┼────────────┼────────────┼──────────┘
│ │ │ │
┌───────▼────────────▼────────────▼────────────▼──────────┐
│ Backend (Express + TypeORM) │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Auth Middleware (JWT + RLS) │ │
│ └──────────────────────────────────────────────────┘ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Budgets │ │Progress │ │Estimates│ │ Auth │ │
│ │ Service │ │ Service │ │ Service │ │ Service │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
└───────┼────────────┼────────────┼────────────┼──────────┘
│ │ │ │
┌───────▼────────────▼────────────▼────────────▼──────────┐
│ PostgreSQL 15 + PostGIS │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Row Level Security (tenant_id) │ │
│ └──────────────────────────────────────────────────┘ │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌──────┐ │
│ │ auth │ │constru.│ │ hr │ │ hse │ │estim.│ │
│ └────────┘ └────────┘ └────────┘ └────────┘ └──────┘ │
└─────────────────────────────────────────────────────────┘
```
### Stack Tecnologico
| Capa | Tecnologia |
|------|------------|
| **Backend** | Node.js 20, Express 4, TypeORM 0.3 |
| **Frontend** | React 18, Vite 5, TypeScript 5 |
| **Database** | PostgreSQL 15 + PostGIS |
| **Cache** | Redis 7 |
| **Auth** | JWT + Refresh Tokens |
| **Multi-tenant** | RLS (Row Level Security) |
---
## Estructura del Proyecto
```
construccion/
├── backend/
│ └── src/
│ ├── modules/
│ │ ├── auth/ # Autenticacion JWT
│ │ ├── budgets/ # MAI-003 Presupuestos
│ │ ├── progress/ # MAI-005 Control de Obra
│ │ ├── estimates/ # MAI-008 Estimaciones
│ │ ├── construction/ # MAI-002 Proyectos
│ │ ├── hr/ # MAI-007 RRHH
│ │ ├── hse/ # MAA-017 HSE
│ │ └── core/ # Entidades base
│ └── shared/
│ ├── constants/ # SSOT (schemas, rutas, enums)
│ └── services/ # BaseService multi-tenant
├── frontend/
│ ├── web/ # App web React
│ └── mobile/ # App movil (futuro)
├── database/
│ └── schemas/ # DDL por schema
│ ├── 01-construction-schema-ddl.sql # 24 tablas
│ ├── 02-hr-schema-ddl.sql # 8 tablas
│ ├── 03-hse-schema-ddl.sql # 58 tablas
│ ├── 04-estimates-schema-ddl.sql # 8 tablas
│ ├── 05-infonavit-schema-ddl.sql # 8 tablas
│ ├── 06-inventory-ext-schema-ddl.sql # 4 tablas
│ └── 07-purchase-ext-schema-ddl.sql # 5 tablas
├── docs/ # Documentacion completa
├── devops/
│ └── scripts/ # Validacion SSOT
├── docker-compose.yml
└── .env.example
```
---
## Modulos Implementados
### MAI-003: Presupuestos y Costos ✅
```typescript
// Entidades
- Concepto // Catalogo jerarquico de conceptos
- Presupuesto // Presupuestos versionados
- PresupuestoPartida // Lineas con calculo automatico
// Services
- ConceptoService // Arbol, busqueda
- PresupuestoService // CRUD, versionamiento, aprobacion
```
### MAI-005: Control de Obra ✅
```typescript
// Entidades
- AvanceObra // Avances fisicos con workflow
- FotoAvance // Evidencias con GPS
- BitacoraObra // Bitacora diaria
- ProgramaObra // Programa maestro
- ProgramaActividad // WBS/Actividades
// Services
- AvanceObraService // Workflow captura->revision->aprobacion
- BitacoraObraService // Entradas secuenciales
```
### MAI-008: Estimaciones ✅
```typescript
// Entidades
- Estimacion // Estimaciones periodicas
- EstimacionConcepto // Lineas con acumulados
- Generador // Numeros generadores
- Anticipo // Anticipos con amortizacion
- Amortizacion // Descuentos por estimacion
- Retencion // Fondo de garantia
- FondoGarantia // Acumulado por contrato
- EstimacionWorkflow // Historial de estados
// Services
- EstimacionService // Workflow completo, calculo totales
```
### Auth: Autenticacion JWT ✅
```typescript
// Funcionalidades
- Login con email/password
- Registro de usuarios
- Refresh tokens
- Logout (revocacion)
- Middleware de autorizacion por roles
- Configuracion RLS por tenant
```
---
## API Endpoints
### Autenticacion
```http
POST /api/v1/auth/login
POST /api/v1/auth/register
POST /api/v1/auth/refresh
POST /api/v1/auth/logout
POST /api/v1/auth/change-password
```
### Presupuestos
```http
GET /api/v1/conceptos
GET /api/v1/conceptos/:id
POST /api/v1/conceptos
GET /api/v1/conceptos/tree
GET /api/v1/presupuestos
GET /api/v1/presupuestos/:id
POST /api/v1/presupuestos
POST /api/v1/presupuestos/:id/partidas
POST /api/v1/presupuestos/:id/approve
POST /api/v1/presupuestos/:id/version
```
### Control de Obra
```http
GET /api/v1/avances
GET /api/v1/avances/:id
POST /api/v1/avances
POST /api/v1/avances/:id/fotos
POST /api/v1/avances/:id/review
POST /api/v1/avances/:id/approve
GET /api/v1/bitacora/:fraccionamientoId
POST /api/v1/bitacora
```
### Estimaciones
```http
GET /api/v1/estimaciones
GET /api/v1/estimaciones/:id
POST /api/v1/estimaciones
POST /api/v1/estimaciones/:id/conceptos
POST /api/v1/estimaciones/:id/submit
POST /api/v1/estimaciones/:id/review
POST /api/v1/estimaciones/:id/approve
```
---
## Base de Datos
### Schemas (7 total, 110 tablas)
| Schema | Tablas | Descripcion |
|--------|--------|-------------|
| `auth` | 10 | Usuarios, roles, permisos, tenants |
| `construction` | 24 | Proyectos, lotes, presupuestos, avances |
| `hr` | 8 | Empleados, asistencias, cuadrillas |
| `hse` | 58 | Incidentes, capacitaciones, EPP, STPS |
| `estimates` | 8 | Estimaciones, anticipos, retenciones |
| `infonavit` | 8 | Registro RUV, derechohabientes |
| `inventory` | 4 | Almacenes, requisiciones |
### Row Level Security
```sql
-- Todas las tablas tienen RLS activado
ALTER TABLE construction.fraccionamientos ENABLE ROW LEVEL SECURITY;
-- Politica de aislamiento por tenant
CREATE POLICY tenant_isolation ON construction.fraccionamientos
FOR ALL USING (tenant_id = current_setting('app.current_tenant_id')::UUID);
```
---
## Scripts NPM
```bash
# Backend
npm run dev # Desarrollo con hot-reload
npm run build # Compilar TypeScript
npm run start # Produccion
npm run lint # ESLint
npm run test # Jest tests
npm run validate:constants # Validar SSOT
npm run sync:enums # Sincronizar enums a frontend
# Docker
docker-compose up -d # Levantar servicios
docker-compose --profile dev up # Con Adminer y Mailhog
docker-compose down # Detener servicios
```
---
## Variables de Entorno
```bash
# Application
NODE_ENV=development
APP_PORT=3000
# Database
DB_HOST=localhost
DB_PORT=5432
DB_USER=construccion
DB_PASSWORD=construccion_dev_2024
DB_NAME=erp_construccion
# JWT
JWT_SECRET=your-secret-key-min-32-chars
JWT_EXPIRES_IN=1d
JWT_REFRESH_EXPIRES_IN=7d
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
```
Ver `.env.example` para la lista completa.
---
## Documentacion
| Documento | Ubicacion |
|-----------|-----------|
| Estado del Proyecto | `PROJECT-STATUS.md` |
| Mapa de Base de Datos | `database/_MAP.md` |
| Constantes SSOT | `backend/src/shared/constants/` |
| Modulos (18) | `docs/02-definicion-modulos/` |
| Requerimientos (87 RF) | `docs/03-requerimientos/` |
| User Stories (149 US) | `docs/05-user-stories/` |
| ADRs (12) | `docs/97-adr/` |
---
## Proximos Pasos
1. **Corto Plazo**
- Controllers REST para modulos nuevos
- Backend MAI-009 (Calidad y Postventa)
- Backend MAI-011 (INFONAVIT)
- Testing de modulos existentes
2. **Mediano Plazo**
- Frontend: Integracion con API
- Modulos de Presupuestos y Estimaciones
- Curva S y reportes de avance
---
## Licencia
UNLICENSED - Proyecto privado
---
**Ultima actualizacion:** 2025-12-12