erp-construccion/docs/04-modelado/trazabilidad/INVENTARIO-OBJETOS-BD.yml

614 lines
19 KiB
YAML

# =============================================================================
# INVENTARIO DE OBJETOS DE BASE DE DATOS - ERP CONSTRUCCION
# =============================================================================
# Fecha: 2025-11-24
# Version: 1.0.0
# Basado en: ADR-007, ADR-012
# DBMS: PostgreSQL 15+ con PostGIS
# =============================================================================
metadata:
proyecto: ERP Construccion
version: 1.0.0
fecha_actualizacion: 2025-11-24
responsable: Architecture-Analyst
total_schemas: 8
total_tablas: 67
total_enums: 22
total_funciones: 6
total_triggers: 5
total_policies: 47
# =============================================================================
# SCHEMAS
# =============================================================================
schemas:
- name: auth
tipo: generico
origen: ERP-Generico
descripcion: Autenticacion, usuarios, roles, permisos
modulos: [MAI-001, MAI-013]
- name: core
tipo: generico
origen: ERP-Generico
descripcion: Datos maestros, catalogos, partners
modulos: [MAI-001]
- name: construction
tipo: especifico
origen: ERP-Construccion
descripcion: Obras, proyectos, lotes, prototipos, avances
modulos: [MAI-002, MAI-003, MAI-005, MAI-009, MAI-012]
- name: estimates
tipo: especifico
origen: ERP-Construccion
descripcion: Estimaciones, anticipos, retenciones
modulos: [MAI-008]
- name: infonavit
tipo: especifico
origen: ERP-Construccion
descripcion: Cumplimiento INFONAVIT, derechohabientes
modulos: [MAI-010, MAI-011]
- name: inventory
tipo: generico_ext
origen: ERP-Generico + Extension
descripcion: Inventarios con extensiones de obra
modulos: [MAI-004]
- name: purchase
tipo: generico_ext
origen: ERP-Generico + Extension
descripcion: Compras con extensiones de obra
modulos: [MAI-004]
- name: hr
tipo: generico_ext
origen: ERP-Generico + Extension
descripcion: RRHH con asistencias GPS y destajo
modulos: [MAI-007]
# =============================================================================
# TABLAS POR SCHEMA
# =============================================================================
tablas:
# ---------------------------------------------------------------------------
# SCHEMA: construction (25 tablas)
# ---------------------------------------------------------------------------
construction:
- nombre: fraccionamientos
modulo: MAI-002
descripcion: Desarrollos inmobiliarios/fraccionamientos
campos_clave: [id, tenant_id, code, name, status]
rls: true
postgis: true
- nombre: etapas
modulo: MAI-002
descripcion: Etapas/fases de un fraccionamiento
campos_clave: [id, tenant_id, fraccionamiento_id, code, status]
rls: true
- nombre: manzanas
modulo: MAI-002
descripcion: Manzanas dentro de una etapa
campos_clave: [id, tenant_id, etapa_id, code]
rls: true
postgis: true
- nombre: lotes
modulo: MAI-002
descripcion: Lotes/terrenos vendibles (horizontal)
campos_clave: [id, tenant_id, manzana_id, prototipo_id, code, status]
rls: true
postgis: true
- nombre: torres
modulo: MAI-002
descripcion: Torres/edificios (vertical)
campos_clave: [id, tenant_id, etapa_id, code, status]
rls: true
postgis: true
- nombre: niveles
modulo: MAI-002
descripcion: Pisos de una torre
campos_clave: [id, tenant_id, torre_id, floor_number]
rls: true
- nombre: departamentos
modulo: MAI-002
descripcion: Departamentos/unidades en torre
campos_clave: [id, tenant_id, nivel_id, prototipo_id, code, status]
rls: true
- nombre: prototipos
modulo: MAI-002
descripcion: Tipos de vivienda/prototipos
campos_clave: [id, tenant_id, code, name, type]
rls: true
- nombre: conceptos
modulo: MAI-003
descripcion: Catalogo de conceptos de obra
campos_clave: [id, tenant_id, code, name, parent_id, unit_price]
rls: true
- nombre: presupuestos
modulo: MAI-003
descripcion: Presupuestos por prototipo u obra
campos_clave: [id, tenant_id, code, fraccionamiento_id, prototipo_id, version]
rls: true
- nombre: presupuesto_partidas
modulo: MAI-003
descripcion: Lineas de presupuesto
campos_clave: [id, tenant_id, presupuesto_id, concepto_id, quantity, unit_price]
rls: true
- nombre: programa_obra
modulo: MAI-005
descripcion: Programa maestro de obra
campos_clave: [id, tenant_id, fraccionamiento_id, code, version]
rls: true
- nombre: programa_actividades
modulo: MAI-005
descripcion: Actividades del programa
campos_clave: [id, tenant_id, programa_id, concepto_id, wbs_code]
rls: true
- nombre: avances_obra
modulo: MAI-005
descripcion: Captura de avances fisicos
campos_clave: [id, tenant_id, lote_id, concepto_id, capture_date, status]
rls: true
- nombre: fotos_avance
modulo: MAI-005
descripcion: Evidencia fotografica de avances
campos_clave: [id, tenant_id, avance_id, file_url]
rls: true
postgis: true
- nombre: bitacora_obra
modulo: MAI-005
descripcion: Bitacora diaria de obra
campos_clave: [id, tenant_id, fraccionamiento_id, entry_date, entry_number]
rls: true
- nombre: checklists
modulo: MAI-009
descripcion: Plantillas de verificacion de calidad
campos_clave: [id, tenant_id, code, name, prototipo_id]
rls: true
- nombre: checklist_items
modulo: MAI-009
descripcion: Items del checklist
campos_clave: [id, tenant_id, checklist_id, sequence, name]
rls: true
- nombre: inspecciones
modulo: MAI-009
descripcion: Inspecciones de calidad
campos_clave: [id, tenant_id, checklist_id, lote_id, status]
rls: true
- nombre: inspeccion_resultados
modulo: MAI-009
descripcion: Resultados de inspeccion por item
campos_clave: [id, tenant_id, inspeccion_id, checklist_item_id, is_passed]
rls: true
- nombre: tickets_postventa
modulo: MAI-009
descripcion: Tickets de garantia/postventa
campos_clave: [id, tenant_id, ticket_number, lote_id, status]
rls: true
- nombre: subcontratistas
modulo: MAI-012
descripcion: Catalogo de subcontratistas
campos_clave: [id, tenant_id, code, name, specialty]
rls: true
- nombre: contratos
modulo: MAI-012
descripcion: Contratos con subcontratistas
campos_clave: [id, tenant_id, contract_number, subcontratista_id, status]
rls: true
- nombre: contrato_partidas
modulo: MAI-012
descripcion: Lineas del contrato
campos_clave: [id, tenant_id, contrato_id, concepto_id, quantity, unit_price]
rls: true
# ---------------------------------------------------------------------------
# SCHEMA: estimates (8 tablas)
# ---------------------------------------------------------------------------
estimates:
- nombre: estimaciones
modulo: MAI-008
descripcion: Estimaciones de obra periodicas
campos_clave: [id, tenant_id, estimate_number, contrato_id, status]
rls: true
- nombre: estimacion_conceptos
modulo: MAI-008
descripcion: Lineas de concepto por estimacion
campos_clave: [id, tenant_id, estimacion_id, concepto_id, quantity_current]
rls: true
- nombre: generadores
modulo: MAI-008
descripcion: Generadores de cantidades
campos_clave: [id, tenant_id, estimacion_concepto_id, generator_number, quantity]
rls: true
- nombre: anticipos
modulo: MAI-008
descripcion: Anticipos otorgados a subcontratistas
campos_clave: [id, tenant_id, advance_number, contrato_id, net_amount]
rls: true
- nombre: amortizaciones
modulo: MAI-008
descripcion: Amortizaciones de anticipos
campos_clave: [id, tenant_id, anticipo_id, estimacion_id, amount]
rls: true
- nombre: retenciones
modulo: MAI-008
descripcion: Retenciones aplicadas
campos_clave: [id, tenant_id, estimacion_id, retention_type, amount]
rls: true
- nombre: fondo_garantia
modulo: MAI-008
descripcion: Fondo de garantia por contrato
campos_clave: [id, tenant_id, contrato_id, accumulated_amount]
rls: true
- nombre: estimacion_workflow
modulo: MAI-008
descripcion: Historial de workflow de estimaciones
campos_clave: [id, tenant_id, estimacion_id, from_status, to_status, action]
rls: true
# ---------------------------------------------------------------------------
# SCHEMA: infonavit (8 tablas)
# ---------------------------------------------------------------------------
infonavit:
- nombre: registro_infonavit
modulo: MAI-011
descripcion: Registro del constructor ante INFONAVIT
campos_clave: [id, tenant_id, registro_number, company_id]
rls: true
- nombre: oferta_vivienda
modulo: MAI-011
descripcion: Oferta de viviendas ante INFONAVIT
campos_clave: [id, tenant_id, oferta_number, fraccionamiento_id, status]
rls: true
- nombre: derechohabientes
modulo: MAI-010
descripcion: Derechohabientes INFONAVIT/compradores
campos_clave: [id, tenant_id, nss, full_name, status, credit_type]
rls: true
- nombre: asignacion_vivienda
modulo: MAI-010
descripcion: Asignacion de vivienda a derechohabiente
campos_clave: [id, tenant_id, derechohabiente_id, lote_id, status]
rls: true
- nombre: actas
modulo: MAI-011
descripcion: Actas oficiales INFONAVIT
campos_clave: [id, tenant_id, acta_number, acta_type, status]
rls: true
- nombre: acta_viviendas
modulo: MAI-011
descripcion: Viviendas incluidas en acta
campos_clave: [id, tenant_id, acta_id, lote_id]
rls: true
- nombre: reportes_infonavit
modulo: MAI-011
descripcion: Reportes periodicos a INFONAVIT
campos_clave: [id, tenant_id, report_number, report_type, status]
rls: true
- nombre: historico_puntos
modulo: MAI-010
descripcion: Historico de puntos INFONAVIT
campos_clave: [id, tenant_id, derechohabiente_id, query_date, puntos]
rls: true
# ---------------------------------------------------------------------------
# SCHEMA: inventory (EXTENSIONES - 4 tablas)
# ---------------------------------------------------------------------------
inventory_ext:
- nombre: almacenes_proyecto
modulo: MAI-004
descripcion: Almacenes por proyecto de construccion
campos_clave: [id, tenant_id, warehouse_id, fraccionamiento_id, warehouse_type]
rls: true
postgis: true
- nombre: requisiciones_obra
modulo: MAI-004
descripcion: Requisiciones de material desde obra
campos_clave: [id, tenant_id, requisition_number, fraccionamiento_id, status]
rls: true
- nombre: requisicion_lineas
modulo: MAI-004
descripcion: Lineas de requisicion de obra
campos_clave: [id, tenant_id, requisicion_id, product_id, quantity_requested]
rls: true
- nombre: consumos_obra
modulo: MAI-004
descripcion: Consumos de materiales por obra/lote
campos_clave: [id, tenant_id, fraccionamiento_id, lote_id, product_id, quantity]
rls: true
# ---------------------------------------------------------------------------
# SCHEMA: purchase (EXTENSIONES - 5 tablas)
# ---------------------------------------------------------------------------
purchase_ext:
- nombre: purchase_order_construction
modulo: MAI-004
descripcion: Extension de OC para construccion
campos_clave: [id, tenant_id, purchase_order_id, fraccionamiento_id]
rls: true
- nombre: supplier_construction
modulo: MAI-004
descripcion: Extension de proveedores para construccion
campos_clave: [id, tenant_id, supplier_id, specialties, overall_rating]
rls: true
- nombre: comparativo_cotizaciones
modulo: MAI-004
descripcion: Cuadro comparativo de cotizaciones
campos_clave: [id, tenant_id, code, requisicion_id, status]
rls: true
- nombre: comparativo_proveedores
modulo: MAI-004
descripcion: Proveedores en comparativo
campos_clave: [id, tenant_id, comparativo_id, supplier_id, total_amount]
rls: true
- nombre: comparativo_productos
modulo: MAI-004
descripcion: Productos cotizados por proveedor
campos_clave: [id, tenant_id, comparativo_proveedor_id, product_id, unit_price]
rls: true
# ---------------------------------------------------------------------------
# SCHEMA: hr (EXTENSIONES - 8 tablas)
# ---------------------------------------------------------------------------
hr_ext:
- nombre: employee_construction
modulo: MAI-007
descripcion: Extension de empleados para construccion
campos_clave: [id, tenant_id, employee_id, worker_type, specialty]
rls: true
- nombre: asistencias
modulo: MAI-007
descripcion: Registro de asistencia con GPS/biometrico
campos_clave: [id, tenant_id, employee_id, attendance_date, attendance_type]
rls: true
postgis: true
- nombre: asistencia_biometrico
modulo: MAI-007
descripcion: Detalles de registro biometrico
campos_clave: [id, tenant_id, asistencia_id, device_id, biometric_type]
rls: true
- nombre: geocercas
modulo: MAI-007
descripcion: Geocercas para validacion de ubicacion
campos_clave: [id, tenant_id, fraccionamiento_id, name, polygon]
rls: true
postgis: true
- nombre: destajo
modulo: MAI-007
descripcion: Trabajo a destajo/precio unitario
campos_clave: [id, tenant_id, employee_id, concepto_id, quantity_measured, status]
rls: true
- nombre: destajo_detalle
modulo: MAI-007
descripcion: Detalle de mediciones de destajo
campos_clave: [id, tenant_id, destajo_id, description, quantity]
rls: true
- nombre: cuadrillas
modulo: MAI-007
descripcion: Cuadrillas de trabajo
campos_clave: [id, tenant_id, fraccionamiento_id, code, name, leader_id]
rls: true
- nombre: cuadrilla_miembros
modulo: MAI-007
descripcion: Miembros de cuadrillas
campos_clave: [id, tenant_id, cuadrilla_id, employee_id, role]
rls: true
# =============================================================================
# ENUMs / TYPES
# =============================================================================
enums:
# Construction
- schema: construction
name: project_status
values: [draft, planning, in_progress, paused, completed, cancelled]
- schema: construction
name: lot_status
values: [available, reserved, sold, under_construction, delivered, warranty]
- schema: construction
name: prototype_type
values: [horizontal, vertical, commercial, mixed]
- schema: construction
name: advance_status
values: [pending, captured, reviewed, approved, rejected]
- schema: construction
name: quality_status
values: [pending, in_review, approved, rejected, rework]
- schema: construction
name: contract_type
values: [fixed_price, unit_price, cost_plus, mixed]
- schema: construction
name: contract_status
values: [draft, pending_approval, active, suspended, terminated, closed]
# Estimates
- schema: estimates
name: estimate_status
values: [draft, submitted, reviewed, approved, invoiced, paid, rejected, cancelled]
- schema: estimates
name: advance_type
values: [initial, progress, materials]
- schema: estimates
name: retention_type
values: [guarantee, tax, penalty, other]
- schema: estimates
name: generator_status
values: [draft, in_progress, completed, approved]
# Infonavit
- schema: infonavit
name: derechohabiente_status
values: [prospect, pre_qualified, qualified, assigned, in_process, owner, cancelled]
- schema: infonavit
name: credit_type
values: [infonavit_tradicional, infonavit_total, cofinavit, mejoravit, fovissste, fovissste_infonavit, bank_credit, cash]
- schema: infonavit
name: acta_type
values: [inicio_obra, verificacion_avance, entrega_recepcion, conclusion_obra, liberacion_vivienda]
- schema: infonavit
name: acta_status
values: [draft, pending, signed, submitted, approved, rejected, cancelled]
- schema: infonavit
name: report_type
values: [avance_fisico, avance_financiero, inventario_viviendas, asignaciones, escrituraciones, cartera_vencida]
# Inventory Extensions
- schema: inventory
name: warehouse_type_construction
values: [central, obra, temporal, transito]
- schema: inventory
name: requisition_status
values: [draft, submitted, approved, partially_served, served, cancelled]
# HR Extensions
- schema: hr
name: attendance_type_construction
values: [manual, biometric, gps, qr_code]
- schema: hr
name: worker_type
values: [permanent, temporary, subcontract, piece_rate]
- schema: hr
name: destajo_status
values: [pending, measured, approved, paid]
# =============================================================================
# FUNCIONES
# =============================================================================
funciones:
- schema: estimates
name: calculate_estimate_totals
parametros: [p_estimacion_id UUID]
retorno: VOID
descripcion: Recalcula los totales de una estimacion
- schema: estimates
name: update_advance_amortization
parametros: []
retorno: TRIGGER
descripcion: Actualiza amortizacion de anticipo
- schema: hr
name: validate_attendance_location
parametros: [p_location GEOMETRY, p_fraccionamiento_id UUID]
retorno: BOOLEAN
descripcion: Valida si ubicacion esta dentro de geocercas
# =============================================================================
# TRIGGERS
# =============================================================================
triggers:
- schema: estimates
name: trg_update_advance_amortization
tabla: amortizaciones
eventos: [INSERT, UPDATE, DELETE]
funcion: update_advance_amortization
# =============================================================================
# VISTAS
# =============================================================================
vistas: []
# Pendiente: Definir vistas en sprints posteriores
# =============================================================================
# ESTADISTICAS
# =============================================================================
estadisticas:
por_schema:
construction: 25
estimates: 8
infonavit: 8
inventory_ext: 4
purchase_ext: 5
hr_ext: 8
por_modulo:
MAI-002: 8 # Proyectos y Estructura
MAI-003: 3 # Presupuestos y Costos
MAI-004: 9 # Compras e Inventarios
MAI-005: 6 # Control de Obra
MAI-007: 8 # RRHH y Asistencias
MAI-008: 8 # Estimaciones
MAI-009: 5 # Calidad y Postventa
MAI-010: 3 # CRM Derechohabientes
MAI-011: 5 # INFONAVIT
MAI-012: 3 # Contratos
tablas_con_postgis: 7
tablas_con_rls: 58
# =============================================================================
# FIN DEL INVENTARIO
# =============================================================================