🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
12 KiB
FASE 2: Análisis Detallado - ERP Construcción
Proyecto: erp-construccion Fecha: 2026-01-04 Estado: Completado Base: FASE-1-ANALISIS-INICIAL.md
1. Análisis por Corrección Aplicable
1.1 FINANCIAL (COR-035 a COR-039)
COR-035: Payment Term Lines
Tabla Core:
financial.payment_term_lines (
id, payment_term_id, sequence, value, value_amount,
days, day_of_month, end_month, created_at
)
Adaptación Construcción:
- Aplicable para términos de pago de estimaciones
- Ejemplo: 30% anticipo, 70% contra estimación
- Campos adicionales sugeridos:
applies_toVARCHAR(50) - 'anticipo', 'estimacion', 'retencion'
Dependencias:
financial.payment_terms(debe existir en core)
COR-036: Incoterms
Tabla Core:
financial.incoterms (
id, code, name, is_active, created_at
)
Adaptación Construcción:
- Aplicable para importación de maquinaria/materiales especiales
- Usar tabla del core directamente (no extender)
Datos Seed: Usar seed del core (11 incoterms estándar)
COR-037: Payment Methods
Tabla Core:
financial.payment_methods (
id, name, code, payment_type, is_active, created_at
)
Adaptación Construcción:
- Métodos de pago específicos de construcción:
- Transferencia bancaria (anticipo)
- Cheque (estimaciones)
- Factoring (financiamiento)
Seed Data Construcción:
('Anticipo de Obra', 'anticipo_obra', 'outbound')
('Pago Estimación', 'pago_estimacion', 'outbound')
('Pago Destajo', 'pago_destajo', 'outbound')
COR-038: Reconcile Models
Tabla Core:
financial.reconcile_models (...)
financial.reconcile_model_lines (...)
Adaptación Construcción:
- Parcialmente aplicable
- Útil para conciliación de estimaciones vs facturas
- Crear reglas específicas:
- Conciliación anticipo-amortización
- Conciliación estimación-factura
COR-039: Campos Adicionales
Campos en journal_entries:
payment_state✅ Aplicableamount_residual✅ Para saldo estimacionesinvoice_date_due✅ Vencimiento estimacionesincoterm_id⚠️ Solo importaciones
Campos en payments:
is_matched✅ Conciliaciónpartner_bank_id✅ Cuenta contratista
1.2 INVENTORY (COR-040 a COR-044)
COR-040: Packages
Tablas Core:
inventory.package_types (
id, tenant_id, name, sequence, height, width, length,
base_weight, max_weight, barcode, created_at
)
inventory.packages (
id, tenant_id, name, package_type_id, shipping_weight,
location_id, created_at
)
Adaptación Construcción:
- Muy útil para materiales empacados:
- Tarimas de block
- Paquetes de varilla
- Rollos de cable
Seed Data Construcción:
-- Tipos de paquete
('Tarima Block', 150.0, 100.0, 100.0, 5.0, 500.0)
('Paquete Varilla', 600.0, 30.0, 30.0, 2.0, 1000.0)
('Rollo Cable', 50.0, 50.0, 20.0, 0.5, 50.0)
COR-041: Putaway Rules
Tabla Core:
inventory.putaway_rules (
id, tenant_id, product_id, category_id,
location_in_id, location_out_id, sequence,
storage_category_id, company_id, is_active
)
Adaptación Construcción:
- Aplicable para almacenes de obra
- Reglas por tipo de material:
- Cemento → Área techada
- Varilla → Área descubierta
- Acabados → Bodega cerrada
COR-042: Storage Categories
Tabla Core:
inventory.storage_categories (
id, tenant_id, name, max_weight, allow_new_product
)
Adaptación Construcción:
('Área Techada', 10000.0, 'mixed') -- Cemento, yeso
('Área Descubierta', 50000.0, 'mixed') -- Varilla, block
('Bodega Cerrada', 5000.0, 'mixed') -- Acabados, herrajes
('Caseta Herramienta', 500.0, 'same') -- Herramienta menor
COR-043: Campos Adicionales en Products
Campos Aplicables:
tracking: "lot" # Para lotes de concreto, acero
sale_ok: false # Materiales no se venden
purchase_ok: true
volume: "Para transporte"
weight: "Para carga"
hs_code: "Para importación"
origin_country_id: "Procedencia material"
COR-044: Removal Strategies
Seed Core: FIFO, LIFO, FEFO, Closest
Uso en Construcción:
- FIFO: Cemento, perecederos
- Closest: Herramienta
- FEFO: Materiales con caducidad (selladores)
1.3 PURCHASE (COR-045 a COR-047)
COR-045: Product Supplierinfo
Tabla Core:
purchase.product_supplierinfo (
id, tenant_id, company_id, partner_id, product_id,
product_name, product_code, sequence, min_qty,
price, currency_id, delay, date_start, date_end
)
Adaptación Construcción:
- Crítico para:
- Catálogo de proveedores por material
- Precios pactados por proyecto
- Lead times de materiales
Campos Adicionales Sugeridos:
proyecto_id UUID -- Precio por proyecto
aplica_iva BOOLEAN -- Si el precio incluye IVA
flete_incluido BOOLEAN -- Si incluye flete
COR-046: PO Additional Fields
Campos Aplicables:
origin: "Requisición de obra REQ-001"
partner_ref: "Cotización proveedor"
date_approve: "Fecha aprobación"
receipt_status: "pending/partial/received"
incoterm_id: "Para importaciones"
COR-047: action_create_stock_moves
Función Core:
purchase.action_create_stock_moves(p_order_id UUID)
RETURNS UUID -- picking_id
Uso en Construcción:
- Crear recepciones desde OC
- Asignar almacén de obra destino
- Generar movimientos por línea
1.4 PROJECTS (COR-056 a COR-060)
COR-056: Project Collaborators
Tabla Core:
projects.collaborators (
id, project_id, partner_id, user_id,
can_read, can_write, created_at, invited_by
)
Adaptación Construcción:
- Colaboradores de obra:
- Supervisor de INFONAVIT
- Perito de calidad
- Representante cliente
Extensión Sugerida:
rol VARCHAR(50) -- 'supervisor', 'perito', 'representante'
vigencia_desde DATE
vigencia_hasta DATE
COR-057: Project Additional Fields
Campos Aplicables a construction.proyectos:
sequence: "Orden de visualización"
is_favorite: "Proyectos destacados"
task_count: "Partidas del proyecto"
open_task_count: "Partidas pendientes"
closed_task_count: "Partidas completadas"
last_update_status: "on_track/at_risk/off_track"
COR-058: Task Count Trigger
Función Core:
projects.update_project_task_count()
TRIGGER: AFTER INSERT OR UPDATE OR DELETE ON projects.tasks
Adaptación:
- Crear trigger similar en construction.partidas
- Actualizar conteos en construction.presupuestos
COR-059: Project Ratings
Tabla Core:
projects.ratings (
id, tenant_id, res_model, res_id,
rating, feedback, partner_id, create_date
)
Uso en Construcción:
- Calificación de proveedores por obra
- Evaluación de contratistas
- Retroalimentación de cliente
COR-060: Burndown Chart Data
Tabla Core:
projects.burndown_chart_data (
id, project_id, date,
total_tasks, completed_tasks, remaining_tasks,
total_hours, completed_hours, remaining_hours
)
Adaptación Construcción:
CREATE TABLE construction.avance_programado (
id UUID PRIMARY KEY,
proyecto_id UUID REFERENCES construction.proyectos(id),
fecha DATE NOT NULL,
-- Avance físico
total_partidas INTEGER,
partidas_completadas INTEGER,
partidas_pendientes INTEGER,
-- Avance financiero
presupuesto_total DECIMAL(20,2),
ejercido DECIMAL(20,2),
por_ejercer DECIMAL(20,2),
-- Porcentajes
avance_fisico_pct DECIMAL(5,2),
avance_financiero_pct DECIMAL(5,2),
UNIQUE(proyecto_id, fecha)
);
1.5 HR (COR-061 a COR-066)
COR-061: Employee Additional Fields
Campos Aplicables:
# Datos de obra
work_location_id: "Frente de obra asignado"
badge_id: "Gafete de obra"
pin: "PIN para entrada"
barcode: "Código para asistencia"
# Documentación
visa_no: "Para extranjeros"
work_permit_no: "Permiso trabajo"
certificate: "Nivel educativo"
# Adicionales
vehicle: "Vehículo asignado"
vehicle_license_plate: "Placas"
km_home_work: "Distancia a obra"
COR-062: Work Locations
Tabla Core:
hr.work_locations (
id, tenant_id, company_id, name,
location_type, address_id, is_active
)
Adaptación Construcción:
-- Extensión para obras
CREATE TABLE construction.ubicaciones_obra (
id UUID PRIMARY KEY,
work_location_id UUID REFERENCES hr.work_locations(id),
proyecto_id UUID REFERENCES construction.proyectos(id),
tipo VARCHAR(50), -- 'frente', 'almacen', 'oficina_obra'
coordenadas POINT, -- Geocerca
radio_metros INTEGER DEFAULT 100
);
COR-063: Skills System
Tablas Core:
hr.skill_types (id, tenant_id, name)
hr.skills (id, tenant_id, skill_type_id, name)
hr.skill_levels (id, tenant_id, skill_type_id, name, level)
hr.employee_skills (id, employee_id, skill_id, skill_level_id)
Seed Data Construcción:
-- Tipos de habilidad
INSERT INTO hr.skill_types VALUES
('Albañilería'),
('Plomería'),
('Electricidad'),
('Herrería'),
('Carpintería'),
('Acabados'),
('Maquinaria Pesada');
-- Niveles
INSERT INTO hr.skill_levels VALUES
('Ayudante', 1),
('Oficial', 2),
('Maestro', 3),
('Especialista', 4);
-- Habilidades específicas
INSERT INTO hr.skills VALUES
-- Albañilería
('Cimentación'),
('Muros de block'),
('Losas'),
('Castillos y dalas'),
-- Plomería
('Instalación hidráulica'),
('Instalación sanitaria'),
('Gas'),
-- etc.
COR-064: Expense System
Tablas Core:
hr.expense_sheets (...)
hr.expenses (...)
Uso en Construcción:
- Gastos de residentes de obra
- Viáticos de supervisión
- Compras menores de caja chica
Campos Adicionales:
proyecto_id UUID -- Asignar a proyecto
centro_costo VARCHAR(50) -- Por frente/etapa
COR-065: Resume Lines
Tabla Core:
hr.employee_resume_lines (
id, employee_id, name, date_start, date_end,
line_type, company_name, job_title, ...
)
Uso en Construcción:
- Experiencia en obras anteriores
- Certificaciones (STPS, NOM)
- Cursos de seguridad
COR-066: Payslip Basics
Tablas Core:
hr.payslip_structures
hr.payslips
hr.payslip_lines
Adaptación Construcción:
- Estructura para pago a destajo
- Cálculo por rendimiento (m², ml, pza)
- Integración con hr.destajo existente
2. Matriz de Dependencias Detallada
2.1 Dependencias por Corrección
| Corrección | Depende de Core | Depende de Construcción |
|---|---|---|
| COR-035 | payment_terms | - |
| COR-036 | - | - |
| COR-037 | - | - |
| COR-038 | accounts | - |
| COR-040 | locations | almacenes_proyecto |
| COR-041 | products, locations | - |
| COR-045 | partners, products | - |
| COR-056 | - | proyectos |
| COR-060 | - | proyectos, partidas |
| COR-062 | - | proyectos |
| COR-063 | employees | cuadrillas |
| COR-066 | employees, contracts | destajo |
3. Funciones Nuevas Requeridas
3.1 Funciones a Crear
| Función | Propósito | Basada en Core |
|---|---|---|
construction.update_proyecto_avance() |
Actualizar conteos | COR-058 |
construction.generate_avance_snapshot() |
Burndown diario | COR-060 |
hr.calculate_destajo_amount() |
Cálculo destajo | Nueva |
purchase.create_reception_from_po() |
Recepción OC | COR-047 |
4. Resumen de Impacto
4.1 Por Módulo
| Módulo | Tablas Nuevas | Campos Nuevos | Funciones | Seed Data |
|---|---|---|---|---|
| Financial | 4 | 8 | 0 | 3 |
| Inventory | 5 | 10 | 0 | 4 |
| Purchase | 1 | 6 | 1 | 0 |
| Projects/Construction | 3 | 12 | 2 | 0 |
| HR | 11 | 25 | 1 | 3 |
| TOTAL | 24 | 61 | 4 | 10 |
4.2 Esfuerzo Estimado
| Fase | Complejidad |
|---|---|
| DDL nuevos | Media |
| DDL modificados | Baja |
| Migraciones | Media |
| Seed data | Baja |
| Funciones | Media |
| Documentación | Baja |
Estado: FASE 2 COMPLETADA Siguiente: FASE 3 - Plan de Implementación Fecha: 2026-01-04