erp-construccion/orchestration/propagacion-fase8/FASE-2-ANALISIS-DETALLADO.md
rckrdmrd 7f422e51db
Some checks failed
CI Pipeline / Lint & Type Check (push) Has been cancelled
CI Pipeline / Validate SSOT Constants (push) Has been cancelled
CI Pipeline / Backend Tests (push) Has been cancelled
CI Pipeline / Frontend Tests (push) Has been cancelled
CI Pipeline / Build (push) Has been cancelled
CI Pipeline / Docker Build (push) Has been cancelled
feat: Documentation and orchestration updates
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 05:35:28 -06:00

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_to VARCHAR(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 Aplicable
  • amount_residual Para saldo estimaciones
  • invoice_date_due Vencimiento estimaciones
  • incoterm_id ⚠️ Solo importaciones

Campos en payments:

  • is_matched Conciliación
  • partner_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