# =============================================================================
# DATABASE INVENTORY - ERP CONSTRUCCION
# =============================================================================
# Version: 1.3.0
# Ultima actualizacion: 2025-12-09
# Proposito: Inventario canonico de objetos de base de datos
# Nomenclatura: Ver NAMING-CONVENTIONS.md
# =============================================================================

metadata:
  proyecto: ERP Construccion
  version: 2.1.0
  fecha_actualizacion: 2025-12-09
  motor: PostgreSQL 15+
  extensiones: [uuid-ossp, pg_trgm, btree_gist, pgcrypto, postgis]

# =============================================================================
# HERENCIA DE ERP CORE
# =============================================================================
herencia_core:
  version_core: "1.2.0"
  tablas_heredadas: 144  # Total de tablas del core (actualizado 2025-12-09)
  schemas_heredados:
    - auth: 26       # 10 (auth.sql) + 16 (auth-extensions.sql)
    - core: 12       # Partners, catálogos, monedas, UoM
    - financial: 15  # Contabilidad, facturas, pagos
    - inventory: 20  # 10 (inventory.sql) + 10 (inventory-extensions.sql)
    - purchase: 8    # Órdenes de compra, proveedores
    - sales: 10      # Órdenes de venta, clientes
    - projects: 10   # Proyectos, tareas, dependencias
    - hr: 6          # RRHH base, empleados
    - analytics: 7   # Centros de costo, cuentas analíticas
    - system: 13     # Mensajes, notificaciones, logs
    - billing: 11    # SaaS multi-tenant (opcional)
    - crm: 6         # CRM leads, opportunities (opcional)
  referencia: "apps/erp-core/database/ddl/"
  documento_herencia: "../database/HERENCIA-ERP-CORE.md"

# =============================================================================
# RESUMEN DE OBJETOS (ACTUALIZADO 2025-12-09)
# =============================================================================
resumen:
  schemas_core: 12        # Heredados de erp-core
  schemas_especificos: 7  # construction, hr, hse, estimates, infonavit, inventory-ext, purchase-ext
  tablas_heredadas: 144   # Del core (actualizado 2025-12-09)
  tablas_especificas: 110 # 24 construction + 8 hr + 58 hse + 8 estimates + 8 infonavit + 4 inventory + 5 purchase
  tablas_total: 254       # 144 + 110
  enums: 89               # 22 base + 67 HSE
  funciones: 13
  triggers: 15
  rls_policies: 254       # 1 policy por tabla con tenant_id (144 core + 110 construcción)
  indices: 350+
  estado_implementacion:
    database_core: "100%"      # ERP Core validado con carga limpia
    database_construccion: "100%"  # DDL completo - 7 schemas, 110 tablas
    backend: "5%"              # Solo entidades base
    frontend: "2%"             # Solo estructura
  ddl_files_core:
    - "erp-core/database/ddl/00-prerequisites.sql"
    - "erp-core/database/ddl/01-auth.sql"
    - "erp-core/database/ddl/01-auth-extensions.sql"
    - "erp-core/database/ddl/02-core.sql"
    - "erp-core/database/ddl/03-analytics.sql"
    - "erp-core/database/ddl/04-financial.sql"
    - "erp-core/database/ddl/05-inventory.sql"
    - "erp-core/database/ddl/05-inventory-extensions.sql"
    - "erp-core/database/ddl/06-purchase.sql"
    - "erp-core/database/ddl/07-sales.sql"
    - "erp-core/database/ddl/08-projects.sql"
    - "erp-core/database/ddl/09-system.sql"
    - "erp-core/database/ddl/10-billing.sql"
    - "erp-core/database/ddl/11-crm.sql"
    - "erp-core/database/ddl/12-hr.sql"
  ddl_files_extension:
    - schemas/01-construction-schema-ddl.sql   # 24 tablas
    - schemas/02-hr-schema-ddl.sql             # 8 tablas
    - schemas/03-hse-schema-ddl.sql            # 58 tablas
    - schemas/04-estimates-schema-ddl.sql      # 8 tablas
    - schemas/05-infonavit-schema-ddl.sql      # 8 tablas
    - schemas/06-inventory-ext-schema-ddl.sql  # 4 tablas
    - schemas/07-purchase-ext-schema-ddl.sql   # 5 tablas

# =============================================================================
# SCHEMAS - NOMENCLATURA UNIFICADA
# =============================================================================
schemas:
  # ---------------------------------------------------------------------------
  # Schemas heredados de erp-core (NO MODIFICAR)
  # ---------------------------------------------------------------------------
  - nombre: auth
    origen: erp-core
    descripcion: Autenticacion JWT, sesiones
    tablas: 6
    estado: implementado

  - nombre: core_tenants
    origen: erp-core
    descripcion: Multi-tenancy
    tablas: 8
    estado: implementado

  - nombre: core_shared
    origen: erp-core
    descripcion: Funciones compartidas
    funciones: 10
    estado: implementado

  # ---------------------------------------------------------------------------
  # Schemas ESPECIFICOS de construccion
  # ---------------------------------------------------------------------------
  - nombre: construction
    origen: construccion
    descripcion: Proyectos, estructura obra, avances, calidad, contratos
    tablas: 24
    ddl: construction-schema-ddl.sql
    modulos: [MAI-002, MAI-003, MAI-005, MAI-009, MAI-012]
    estado: definido

  - nombre: estimates
    origen: construccion
    descripcion: Presupuestos, estimaciones, anticipos, retenciones
    tablas: 8
    ddl: estimates-schema-ddl.sql
    modulos: [MAI-003, MAI-008]
    estado: definido

  - nombre: infonavit
    origen: construccion
    descripcion: Integracion INFONAVIT, RUV, derechohabientes
    tablas: 8
    ddl: infonavit-schema-ddl.sql
    modulos: [MAI-010, MAI-011]
    estado: definido

  # ---------------------------------------------------------------------------
  # Schemas de EXTENSION (extienden ERP Core)
  # ---------------------------------------------------------------------------
  - nombre: hr
    origen: construccion
    descripcion: Extension RRHH - asistencias, destajo, cuadrillas
    tablas: 8
    ddl: hr-ext-schema-ddl.sql
    modulos: [MAI-007]
    extiende: core.hr
    estado: definido

  - nombre: inventory
    origen: construccion
    descripcion: Extension Inventario - almacenes obra, requisiciones
    tablas: 4
    ddl: inventory-ext-schema-ddl.sql
    modulos: [MAI-004]
    extiende: core.inventory
    estado: definido

  - nombre: purchase
    origen: construccion
    descripcion: Extension Compras - OC construccion, comparativos
    tablas: 5
    ddl: purchase-ext-schema-ddl.sql
    modulos: [MAI-004]
    extiende: core.purchase
    estado: definido

# =============================================================================
# TABLAS POR SCHEMA (ALINEADO CON DDL)
# =============================================================================
tablas:
  # ---------------------------------------------------------------------------
  # construction (24 tablas)
  # ---------------------------------------------------------------------------
  construction:
    # Estructura de Proyecto (8 tablas)
    - nombre: fraccionamientos
      descripcion: Desarrollos/fraccionamientos de vivienda
      modulo: MAI-002
      columnas:
        - { nombre: id, tipo: UUID, pk: true, default: gen_random_uuid() }
        - { nombre: tenant_id, tipo: UUID, fk: auth.tenants, nullable: false }
        - { nombre: code, tipo: VARCHAR(20), unique: true }
        - { nombre: name, tipo: VARCHAR(200), nullable: false }
        - { nombre: project_type, tipo: project_type_enum }
        - { nombre: location, tipo: GEOMETRY(Point, 4326) }
        - { nombre: address, tipo: TEXT }
        - { nombre: status, tipo: project_status_enum, default: active }
        - { nombre: start_date, tipo: DATE }
        - { nombre: estimated_end_date, tipo: DATE }
        - { nombre: created_at, tipo: TIMESTAMPTZ, default: CURRENT_TIMESTAMP }
        - { nombre: created_by, tipo: UUID, fk: auth.users }
        - { nombre: updated_at, tipo: TIMESTAMPTZ }
        - { nombre: updated_by, tipo: UUID }
        - { nombre: deleted_at, tipo: TIMESTAMPTZ }
        - { nombre: deleted_by, tipo: UUID }
      rls: true

    - nombre: etapas
      descripcion: Etapas de un fraccionamiento
      modulo: MAI-002
      fk_parent: fraccionamientos
      rls: true

    - nombre: manzanas
      descripcion: Manzanas de una etapa (horizontal)
      modulo: MAI-002
      fk_parent: etapas
      rls: true

    - nombre: lotes
      descripcion: Lotes individuales (vivienda horizontal)
      modulo: MAI-002
      fk_parent: manzanas
      rls: true

    - nombre: torres
      descripcion: Torres de una etapa (vertical)
      modulo: MAI-002
      fk_parent: etapas
      rls: true

    - nombre: niveles
      descripcion: Niveles de una torre
      modulo: MAI-002
      fk_parent: torres
      rls: true

    - nombre: departamentos
      descripcion: Departamentos (vivienda vertical)
      modulo: MAI-002
      fk_parent: niveles
      rls: true

    - nombre: prototipos
      descripcion: Catalogo de prototipos de vivienda
      modulo: MAI-002
      rls: true

    # Presupuestos y Conceptos (3 tablas)
    - nombre: conceptos
      descripcion: Catalogo de conceptos de obra (APU)
      modulo: MAI-003
      rls: true

    - nombre: presupuestos
      descripcion: Presupuestos de obra
      modulo: MAI-003
      fk_parent: fraccionamientos
      rls: true

    - nombre: presupuesto_partidas
      descripcion: Partidas de presupuesto
      modulo: MAI-003
      fk_parent: presupuestos
      rls: true

    # Programacion y Avances (5 tablas)
    - nombre: programa_obra
      descripcion: Programa general de obra
      modulo: MAI-005
      fk_parent: fraccionamientos
      rls: true

    - nombre: programa_actividades
      descripcion: Actividades del programa
      modulo: MAI-005
      fk_parent: programa_obra
      rls: true

    - nombre: avances_obra
      descripcion: Registro de avances de obra
      modulo: MAI-005
      rls: true

    - nombre: fotos_avance
      descripcion: Fotos de evidencia de avance
      modulo: MAI-005
      fk_parent: avances_obra
      rls: true

    - nombre: bitacora_obra
      descripcion: Entradas de bitacora de obra
      modulo: MAI-005
      fk_parent: fraccionamientos
      rls: true

    # Calidad (5 tablas)
    - nombre: checklists
      descripcion: Plantillas de checklist
      modulo: MAI-009
      rls: true

    - nombre: checklist_items
      descripcion: Items de checklist
      modulo: MAI-009
      fk_parent: checklists
      rls: true

    - nombre: inspecciones
      descripcion: Inspecciones realizadas
      modulo: MAI-009
      rls: true

    - nombre: inspeccion_resultados
      descripcion: Resultados de inspeccion
      modulo: MAI-009
      fk_parent: inspecciones
      rls: true

    - nombre: tickets_postventa
      descripcion: Tickets de postventa/garantia
      modulo: MAI-009
      rls: true

    # Contratos (3 tablas)
    - nombre: subcontratistas
      descripcion: Catalogo de subcontratistas
      modulo: MAI-012
      rls: true

    - nombre: contratos
      descripcion: Contratos de obra/subcontrato
      modulo: MAI-012
      fk_parent: fraccionamientos
      rls: true

    - nombre: contrato_partidas
      descripcion: Partidas de contrato
      modulo: MAI-012
      fk_parent: contratos
      rls: true

  # ---------------------------------------------------------------------------
  # estimates (8 tablas)
  # ---------------------------------------------------------------------------
  estimates:
    - nombre: estimaciones
      descripcion: Estimaciones de obra
      modulo: MAI-008
      columnas:
        - { nombre: id, tipo: UUID, pk: true }
        - { nombre: tenant_id, tipo: UUID, nullable: false }
        - { nombre: fraccionamiento_id, tipo: UUID, fk: construction.fraccionamientos }
        - { nombre: contrato_id, tipo: UUID, fk: construction.contratos }
        - { nombre: numero, tipo: INTEGER }
        - { nombre: tipo, tipo: estimate_type_enum }
        - { nombre: period_start, tipo: DATE }
        - { nombre: period_end, tipo: DATE }
        - { nombre: gross_amount, tipo: DECIMAL(16,2) }
        - { nombre: deductions, tipo: DECIMAL(16,2) }
        - { nombre: net_amount, tipo: DECIMAL(16,2), computed: true }
        - { nombre: status, tipo: estimate_status_enum }
      rls: true

    - nombre: estimacion_conceptos
      descripcion: Detalle conceptos de estimacion
      modulo: MAI-008
      fk_parent: estimaciones
      rls: true

    - nombre: generadores
      descripcion: Numeros generadores
      modulo: MAI-008
      fk_parent: estimacion_conceptos
      rls: true

    - nombre: anticipos
      descripcion: Anticipos de obra
      modulo: MAI-008
      fk_parent: contratos
      rls: true

    - nombre: amortizaciones
      descripcion: Amortizaciones de anticipos
      modulo: MAI-008
      fk_parent: anticipos
      rls: true

    - nombre: retenciones
      descripcion: Retenciones (garantia, IMSS, ISR)
      modulo: MAI-008
      fk_parent: estimaciones
      rls: true

    - nombre: fondo_garantia
      descripcion: Fondo de garantia
      modulo: MAI-008
      fk_parent: contratos
      rls: true

    - nombre: estimacion_workflow
      descripcion: Historial workflow de estimacion
      modulo: MAI-008
      fk_parent: estimaciones
      rls: true

  # ---------------------------------------------------------------------------
  # infonavit (8 tablas)
  # ---------------------------------------------------------------------------
  infonavit:
    - nombre: registro_infonavit
      descripcion: Registro de obra ante INFONAVIT (RUV)
      modulo: MAI-011
      fk_parent: construction.fraccionamientos
      rls: true

    - nombre: oferta_vivienda
      descripcion: Oferta de vivienda registrada
      modulo: MAI-011
      rls: true

    - nombre: derechohabientes
      descripcion: Derechohabientes INFONAVIT
      modulo: MAI-010
      columnas:
        - { nombre: id, tipo: UUID, pk: true }
        - { nombre: tenant_id, tipo: UUID }
        - { nombre: nss, tipo: VARCHAR(11) }
        - { nombre: curp, tipo: VARCHAR(18) }
        - { nombre: nombre_completo, tipo: VARCHAR(200) }
        - { nombre: puntos_infonavit, tipo: INTEGER }
        - { nombre: monto_credito, tipo: DECIMAL(14,2) }
        - { nombre: status, tipo: beneficiary_status_enum }
      rls: true

    - nombre: asignacion_vivienda
      descripcion: Asignacion derechohabiente-vivienda
      modulo: MAI-011
      rls: true

    - nombre: actas
      descripcion: Actas de entrega
      modulo: MAI-011
      rls: true

    - nombre: acta_viviendas
      descripcion: Viviendas incluidas en acta
      modulo: MAI-011
      fk_parent: actas
      rls: true

    - nombre: reportes_infonavit
      descripcion: Reportes enviados a INFONAVIT
      modulo: MAI-011
      rls: true

    - nombre: historico_puntos
      descripcion: Historico puntos ecologicos
      modulo: MAI-011
      rls: true

  # ---------------------------------------------------------------------------
  # hr - Extension (8 tablas)
  # ---------------------------------------------------------------------------
  hr:
    - nombre: employee_construction
      descripcion: Extension de empleados para construccion
      modulo: MAI-007
      extiende: core.hr.employees
      columnas:
        - { nombre: id, tipo: UUID, pk: true }
        - { nombre: tenant_id, tipo: UUID }
        - { nombre: employee_id, tipo: UUID, fk: core.hr.employees }
        - { nombre: worker_type, tipo: worker_type_enum }
        - { nombre: subcontratista_id, tipo: UUID, fk: construction.subcontratistas }
        - { nombre: nss, tipo: VARCHAR(15) }
        - { nombre: stps_dc3_number, tipo: VARCHAR(50) }
        - { nombre: default_fraccionamiento_id, tipo: UUID }
        - { nombre: specialty, tipo: VARCHAR(100) }
      rls: true

    - nombre: asistencias
      descripcion: Registro de asistencias con GPS/biometrico
      modulo: MAI-007
      columnas:
        - { nombre: id, tipo: UUID, pk: true }
        - { nombre: tenant_id, tipo: UUID }
        - { nombre: employee_id, tipo: UUID }
        - { nombre: fraccionamiento_id, tipo: UUID }
        - { nombre: attendance_date, tipo: DATE }
        - { nombre: attendance_type, tipo: attendance_type_construction_enum }
        - { nombre: check_in_time, tipo: TIMESTAMP }
        - { nombre: check_out_time, tipo: TIMESTAMP }
        - { nombre: worked_hours, tipo: DECIMAL(4,2), computed: true }
        - { nombre: check_in_location, tipo: GEOMETRY(Point, 4326) }
        - { nombre: check_out_location, tipo: GEOMETRY(Point, 4326) }
        - { nombre: is_valid, tipo: BOOLEAN }
      rls: true

    - nombre: asistencia_biometrico
      descripcion: Registros biometricos
      modulo: MAI-007
      fk_parent: asistencias
      rls: true

    - nombre: geocercas
      descripcion: Geocercas para validacion GPS
      modulo: MAI-007
      columnas:
        - { nombre: id, tipo: UUID, pk: true }
        - { nombre: tenant_id, tipo: UUID }
        - { nombre: fraccionamiento_id, tipo: UUID }
        - { nombre: name, tipo: VARCHAR(100) }
        - { nombre: polygon, tipo: GEOMETRY(Polygon, 4326) }
        - { nombre: radius_meters, tipo: DECIMAL(8,2) }
        - { nombre: is_active, tipo: BOOLEAN }
      rls: true

    - nombre: destajo
      descripcion: Trabajo a destajo/precio unitario
      modulo: MAI-007
      rls: true

    - nombre: destajo_detalle
      descripcion: Detalle de mediciones de destajo
      modulo: MAI-007
      fk_parent: destajo
      rls: true

    - nombre: cuadrillas
      descripcion: Cuadrillas de trabajo
      modulo: MAI-007
      rls: true

    - nombre: cuadrilla_miembros
      descripcion: Miembros de cuadrillas
      modulo: MAI-007
      fk_parent: cuadrillas
      rls: true

  # ---------------------------------------------------------------------------
  # inventory - Extension (4 tablas)
  # ---------------------------------------------------------------------------
  inventory:
    - nombre: almacenes_proyecto
      descripcion: Almacenes por proyecto de construccion
      modulo: MAI-004
      extiende: core.inventory.warehouses
      rls: true

    - nombre: requisiciones_obra
      descripcion: Requisiciones de material desde obra
      modulo: MAI-004
      rls: true

    - nombre: requisicion_lineas
      descripcion: Lineas de requisicion de obra
      modulo: MAI-004
      fk_parent: requisiciones_obra
      rls: true

    - nombre: consumos_obra
      descripcion: Consumos de materiales por obra/lote
      modulo: MAI-004
      rls: true

  # ---------------------------------------------------------------------------
  # purchase - Extension (5 tablas)
  # ---------------------------------------------------------------------------
  purchase:
    - nombre: purchase_order_construction
      descripcion: Extension OC para construccion
      modulo: MAI-004
      extiende: core.purchase.purchase_orders
      rls: true

    - nombre: supplier_construction
      descripcion: Extension proveedores para construccion
      modulo: MAI-004
      extiende: core.purchase.suppliers
      columnas:
        - { nombre: id, tipo: UUID, pk: true }
        - { nombre: tenant_id, tipo: UUID }
        - { nombre: supplier_id, tipo: UUID, fk: core.purchase.suppliers }
        - { nombre: is_materials_supplier, tipo: BOOLEAN }
        - { nombre: is_services_supplier, tipo: BOOLEAN }
        - { nombre: is_equipment_supplier, tipo: BOOLEAN }
        - { nombre: specialties, tipo: TEXT[] }
        - { nombre: quality_rating, tipo: DECIMAL(3,2) }
        - { nombre: delivery_rating, tipo: DECIMAL(3,2) }
        - { nombre: price_rating, tipo: DECIMAL(3,2) }
        - { nombre: overall_rating, tipo: DECIMAL(3,2), computed: true }
      rls: true

    - nombre: comparativo_cotizaciones
      descripcion: Cuadro comparativo de cotizaciones
      modulo: MAI-004
      rls: true

    - nombre: comparativo_proveedores
      descripcion: Proveedores participantes en comparativo
      modulo: MAI-004
      fk_parent: comparativo_cotizaciones
      rls: true

    - nombre: comparativo_productos
      descripcion: Productos cotizados por proveedor
      modulo: MAI-004
      fk_parent: comparativo_proveedores
      rls: true

  # ---------------------------------------------------------------------------
  # hse - Seguridad HSE (58 tablas) - IMPLEMENTADO
  # ---------------------------------------------------------------------------
  hse:
    # RF-MAA017-001: Gestion de Incidentes (5 tablas)
    - nombre: incidentes
      descripcion: Registro de incidentes y accidentes
      modulo: MAA-017
      rf: RF-MAA017-001
      rls: true
      columnas:
        - { nombre: id, tipo: UUID, pk: true }
        - { nombre: tenant_id, tipo: UUID, fk: core.tenants }
        - { nombre: folio, tipo: VARCHAR(20), unique: true }
        - { nombre: fecha_hora, tipo: TIMESTAMPTZ }
        - { nombre: fraccionamiento_id, tipo: UUID, fk: construction.fraccionamientos }
        - { nombre: ubicacion_geo, tipo: GEOMETRY(Point, 4326) }
        - { nombre: tipo, tipo: tipo_incidente }
        - { nombre: gravedad, tipo: gravedad_incidente }
        - { nombre: estado, tipo: estado_incidente }

    - nombre: incidente_involucrados
      descripcion: Personas involucradas en incidente
      modulo: MAA-017
      rf: RF-MAA017-001
      fk_parent: incidentes
      rls: false

    - nombre: incidente_investigacion
      descripcion: Investigacion del incidente
      modulo: MAA-017
      rf: RF-MAA017-001
      fk_parent: incidentes
      rls: false

    - nombre: incidente_acciones
      descripcion: Acciones correctivas
      modulo: MAA-017
      rf: RF-MAA017-001
      fk_parent: incidentes
      rls: false

    - nombre: incidente_evidencias
      descripcion: Fotos y evidencias
      modulo: MAA-017
      rf: RF-MAA017-001
      fk_parent: incidentes
      rls: false

    # RF-MAA017-002: Control de Capacitaciones (6 tablas)
    - nombre: capacitaciones
      descripcion: Catalogo de capacitaciones
      modulo: MAA-017
      rf: RF-MAA017-002
      rls: true

    - nombre: capacitacion_matriz
      descripcion: Matriz capacitacion por puesto
      modulo: MAA-017
      rf: RF-MAA017-002
      rls: true

    - nombre: instructores
      descripcion: Instructores internos/externos
      modulo: MAA-017
      rf: RF-MAA017-002
      rls: true

    - nombre: capacitacion_sesiones
      descripcion: Sesiones programadas
      modulo: MAA-017
      rf: RF-MAA017-002
      rls: true

    - nombre: capacitacion_asistentes
      descripcion: Asistencia a sesiones
      modulo: MAA-017
      rf: RF-MAA017-002
      fk_parent: capacitacion_sesiones
      rls: false

    - nombre: constancias_dc3
      descripcion: Constancias STPS DC-3
      modulo: MAA-017
      rf: RF-MAA017-002
      rls: true

    # RF-MAA017-003: Inspecciones de Seguridad (7 tablas)
    - nombre: tipos_inspeccion
      descripcion: Tipos de inspeccion
      modulo: MAA-017
      rf: RF-MAA017-003
      rls: true

    - nombre: checklist_items
      descripcion: Items de checklist
      modulo: MAA-017
      rf: RF-MAA017-003
      fk_parent: tipos_inspeccion
      rls: false

    - nombre: programa_inspecciones
      descripcion: Programa de inspecciones
      modulo: MAA-017
      rf: RF-MAA017-003
      rls: true

    - nombre: inspecciones
      descripcion: Inspecciones ejecutadas
      modulo: MAA-017
      rf: RF-MAA017-003
      rls: true

    - nombre: inspeccion_evaluaciones
      descripcion: Evaluacion de items
      modulo: MAA-017
      rf: RF-MAA017-003
      fk_parent: inspecciones
      rls: false

    - nombre: hallazgos
      descripcion: Hallazgos detectados
      modulo: MAA-017
      rf: RF-MAA017-003
      rls: true

    - nombre: hallazgo_evidencias
      descripcion: Evidencias de hallazgos
      modulo: MAA-017
      rf: RF-MAA017-003
      fk_parent: hallazgos
      rls: false

    # RF-MAA017-004: Control de EPP (7 tablas)
    - nombre: epp_catalogo
      descripcion: Catalogo de EPP
      modulo: MAA-017
      rf: RF-MAA017-004
      rls: true

    - nombre: epp_matriz_puesto
      descripcion: EPP requerido por puesto
      modulo: MAA-017
      rf: RF-MAA017-004
      rls: true

    - nombre: epp_asignaciones
      descripcion: EPP asignado a trabajadores
      modulo: MAA-017
      rf: RF-MAA017-004
      rls: true

    - nombre: epp_inspecciones
      descripcion: Inspecciones de EPP
      modulo: MAA-017
      rf: RF-MAA017-004
      fk_parent: epp_asignaciones
      rls: false

    - nombre: epp_bajas
      descripcion: Bajas de EPP
      modulo: MAA-017
      rf: RF-MAA017-004
      fk_parent: epp_asignaciones
      rls: false

    - nombre: epp_inventario
      descripcion: Inventario de EPP
      modulo: MAA-017
      rf: RF-MAA017-004
      rls: true

    - nombre: epp_movimientos
      descripcion: Movimientos de inventario EPP
      modulo: MAA-017
      rf: RF-MAA017-004
      rls: true

    # RF-MAA017-005: Cumplimiento STPS (11 tablas)
    - nombre: normas_stps
      descripcion: Catalogo normas STPS
      modulo: MAA-017
      rf: RF-MAA017-005
      rls: false
      seed_data: true

    - nombre: norma_requisitos
      descripcion: Requisitos por norma
      modulo: MAA-017
      rf: RF-MAA017-005
      fk_parent: normas_stps
      rls: false

    - nombre: cumplimiento_obra
      descripcion: Estado cumplimiento por obra
      modulo: MAA-017
      rf: RF-MAA017-005
      rls: true

    - nombre: comision_seguridad
      descripcion: Comisiones de seguridad e higiene
      modulo: MAA-017
      rf: RF-MAA017-005
      rls: true

    - nombre: comision_integrantes
      descripcion: Integrantes de comision
      modulo: MAA-017
      rf: RF-MAA017-005
      fk_parent: comision_seguridad
      rls: false

    - nombre: comision_recorridos
      descripcion: Recorridos de comision
      modulo: MAA-017
      rf: RF-MAA017-005
      fk_parent: comision_seguridad
      rls: false

    - nombre: programa_seguridad
      descripcion: Programa anual de seguridad
      modulo: MAA-017
      rf: RF-MAA017-005
      rls: true

    - nombre: programa_actividades
      descripcion: Actividades del programa
      modulo: MAA-017
      rf: RF-MAA017-005
      fk_parent: programa_seguridad
      rls: false

    - nombre: documentos_stps
      descripcion: Documentos STPS emitidos
      modulo: MAA-017
      rf: RF-MAA017-005
      rls: true

    - nombre: auditorias
      descripcion: Auditorias HSE
      modulo: MAA-017
      rf: RF-MAA017-005
      rls: true

    # RF-MAA017-006: Gestion Ambiental (9 tablas)
    - nombre: residuos_catalogo
      descripcion: Catalogo de residuos
      modulo: MAA-017
      rf: RF-MAA017-006
      rls: false
      seed_data: true

    - nombre: residuos_generacion
      descripcion: Registro generacion residuos
      modulo: MAA-017
      rf: RF-MAA017-006
      rls: true

    - nombre: almacen_temporal
      descripcion: Almacenes temporales de residuos
      modulo: MAA-017
      rf: RF-MAA017-006
      rls: true

    - nombre: proveedores_ambientales
      descripcion: Proveedores ambientales autorizados
      modulo: MAA-017
      rf: RF-MAA017-006
      rls: true

    - nombre: manifiestos_residuos
      descripcion: Manifiestos de residuos peligrosos
      modulo: MAA-017
      rf: RF-MAA017-006
      rls: true

    - nombre: manifiesto_detalle
      descripcion: Detalle de manifiestos
      modulo: MAA-017
      rf: RF-MAA017-006
      fk_parent: manifiestos_residuos
      rls: false

    - nombre: impacto_ambiental
      descripcion: Matriz de impacto ambiental
      modulo: MAA-017
      rf: RF-MAA017-006
      rls: true

    - nombre: quejas_ambientales
      descripcion: Quejas ambientales recibidas
      modulo: MAA-017
      rf: RF-MAA017-006
      rls: true

    # RF-MAA017-007: Permisos de Trabajo (8 tablas)
    - nombre: tipos_permiso_trabajo
      descripcion: Tipos de permiso de trabajo
      modulo: MAA-017
      rf: RF-MAA017-007
      rls: true

    - nombre: permisos_trabajo
      descripcion: Permisos de trabajo de alto riesgo
      modulo: MAA-017
      rf: RF-MAA017-007
      rls: true

    - nombre: permiso_personal
      descripcion: Personal asignado a permiso
      modulo: MAA-017
      rf: RF-MAA017-007
      fk_parent: permisos_trabajo
      rls: false

    - nombre: permiso_autorizaciones
      descripcion: Autorizaciones de permiso
      modulo: MAA-017
      rf: RF-MAA017-007
      fk_parent: permisos_trabajo
      rls: false

    - nombre: permiso_checklist
      descripcion: Checklist pre/durante/post trabajo
      modulo: MAA-017
      rf: RF-MAA017-007
      fk_parent: permisos_trabajo
      rls: false

    - nombre: permiso_monitoreos
      descripcion: Monitoreos durante ejecucion
      modulo: MAA-017
      rf: RF-MAA017-007
      fk_parent: permisos_trabajo
      rls: false

    - nombre: permiso_eventos
      descripcion: Eventos del permiso
      modulo: MAA-017
      rf: RF-MAA017-007
      fk_parent: permisos_trabajo
      rls: false

    - nombre: permiso_documentos
      descripcion: Documentos adjuntos
      modulo: MAA-017
      rf: RF-MAA017-007
      fk_parent: permisos_trabajo
      rls: false

    # RF-MAA017-008: Indicadores HSE (7 tablas)
    - nombre: indicadores_config
      descripcion: Configuracion de indicadores
      modulo: MAA-017
      rf: RF-MAA017-008
      rls: true

    - nombre: indicadores_meta_obra
      descripcion: Metas por obra
      modulo: MAA-017
      rf: RF-MAA017-008
      rls: false

    - nombre: indicadores_valores
      descripcion: Valores calculados
      modulo: MAA-017
      rf: RF-MAA017-008
      rls: true

    - nombre: horas_trabajadas
      descripcion: Horas hombre por obra
      modulo: MAA-017
      rf: RF-MAA017-008
      rls: true

    - nombre: dias_sin_accidente
      descripcion: Contador dias sin accidente
      modulo: MAA-017
      rf: RF-MAA017-008
      rls: true

    - nombre: reportes_programados
      descripcion: Reportes programados HSE
      modulo: MAA-017
      rf: RF-MAA017-008
      rls: true

    - nombre: alertas_indicadores
      descripcion: Alertas de indicadores
      modulo: MAA-017
      rf: RF-MAA017-008
      rls: true

# =============================================================================
# ENUMS
# =============================================================================
enums:
  # Proyectos
  - nombre: project_type_enum
    schema: construction
    valores: [horizontal, vertical, mixed]

  - nombre: project_status_enum
    schema: construction
    valores: [planning, active, paused, completed, cancelled]

  - nombre: stage_status_enum
    schema: construction
    valores: [pending, in_progress, completed]

  - nombre: unit_status_enum
    schema: construction
    valores: [available, reserved, sold, under_construction, delivered]

  - nombre: housing_type_enum
    schema: construction
    valores: [house, apartment, duplex, townhouse]

  # Presupuestos y Estimaciones
  - nombre: budget_status_enum
    schema: estimates
    valores: [draft, approved, active, closed]

  - nombre: estimate_type_enum
    schema: estimates
    valores: [client, subcontractor, piece_rate]

  - nombre: estimate_status_enum
    schema: estimates
    valores: [draft, in_review, observations, approved, invoiced, paid, cancelled]

  # Control de Obra
  - nombre: logbook_type_enum
    schema: construction
    valores: [progress, incident, weather, visit, general]

  - nombre: checklist_status_enum
    schema: construction
    valores: [pending, in_progress, approved, rejected]

  # RRHH
  - nombre: worker_type_enum
    schema: hr
    valores: [permanent, temporary, subcontract, piece_rate]

  - nombre: attendance_type_construction_enum
    schema: hr
    valores: [manual, biometric, gps, qr_code]

  - nombre: destajo_status_enum
    schema: hr
    valores: [pending, measured, approved, paid]

  # Compras
  - nombre: requisition_status_enum
    schema: inventory
    valores: [draft, submitted, approved, partially_served, served, cancelled]

  - nombre: warehouse_type_construction_enum
    schema: inventory
    valores: [central, obra, temporal, transito]

  # INFONAVIT
  - nombre: beneficiary_status_enum
    schema: infonavit
    valores: [prospect, qualified, assigned, delivered]

  - nombre: cofinavit_program_enum
    schema: infonavit
    valores: [tradicional, total, infonavit_fovissste, apoyo_infonavit]

  # HSE - Seguridad (67 ENUMs)
  # Incidentes
  - nombre: tipo_incidente
    schema: hse
    valores: [accidente, incidente, casi_accidente]

  - nombre: gravedad_incidente
    schema: hse
    valores: [leve, moderado, grave, fatal]

  - nombre: estado_incidente
    schema: hse
    valores: [abierto, en_investigacion, cerrado]

  - nombre: rol_involucrado
    schema: hse
    valores: [lesionado, testigo, responsable]

  - nombre: factor_causa
    schema: hse
    valores: [acto_inseguro, condicion_insegura]

  # Capacitaciones
  - nombre: tipo_capacitacion
    schema: hse
    valores: [induccion, especifica, certificacion, reentrenamiento]

  - nombre: estado_sesion
    schema: hse
    valores: [programada, en_curso, completada, cancelada]

  # Inspecciones
  - nombre: frecuencia
    schema: hse
    valores: [diaria, semanal, quincenal, mensual, eventual]

  - nombre: estado_inspeccion
    schema: hse
    valores: [programada, en_progreso, completada, cancelada, vencida]

  - nombre: resultado_evaluacion
    schema: hse
    valores: [cumple, no_cumple, no_aplica]

  - nombre: gravedad_hallazgo
    schema: hse
    valores: [critico, mayor, menor]

  - nombre: estado_hallazgo
    schema: hse
    valores: [abierto, en_correccion, verificando, cerrado, reabierto]

  - nombre: tipo_evidencia
    schema: hse
    valores: [hallazgo, correccion]

  # EPP
  - nombre: categoria_epp
    schema: hse
    valores: [cabeza, ojos, auditiva, respiratoria, manos, pies, caidas, ropa]

  - nombre: estado_epp
    schema: hse
    valores: [activo, vencido, danado, perdido, devuelto]

  - nombre: estado_inspeccion_epp
    schema: hse
    valores: [bueno, regular, malo, danado]

  - nombre: motivo_baja_epp
    schema: hse
    valores: [vencimiento, danado, perdido, terminacion_laboral]

  - nombre: tipo_movimiento_epp
    schema: hse
    valores: [entrada, salida, transferencia, ajuste]

  # STPS
  - nombre: estado_comision
    schema: hse
    valores: [activa, vencida, renovada]

  - nombre: rol_comision
    schema: hse
    valores: [presidente, secretario, vocal_patronal, vocal_trabajador]

  - nombre: representacion
    schema: hse
    valores: [patronal, trabajadores]

  - nombre: estado_recorrido
    schema: hse
    valores: [programado, realizado, cancelado, pendiente]

  - nombre: estado_programa
    schema: hse
    valores: [borrador, activo, finalizado]

  - nombre: tipo_actividad_programa
    schema: hse
    valores: [capacitacion, inspeccion, simulacro, campana, otro]

  - nombre: estado_actividad
    schema: hse
    valores: [pendiente, en_progreso, completada, cancelada]

  - nombre: tipo_documento_stps
    schema: hse
    valores: [dc1, dc2, dc3, dc4, st7, st9]

  - nombre: tipo_auditoria
    schema: hse
    valores: [interna, simulada, stps, cliente, certificadora]

  - nombre: resultado_auditoria
    schema: hse
    valores: [aprobada, aprobada_observaciones, no_aprobada]

  - nombre: estado_cumplimiento
    schema: hse
    valores: [cumple, parcial, no_cumple, no_aplica]

  # Ambiental
  - nombre: categoria_residuo
    schema: hse
    valores: [peligroso, manejo_especial, urbano]

  - nombre: unidad_residuo
    schema: hse
    valores: [kg, litros, m3, piezas]

  - nombre: estado_residuo
    schema: hse
    valores: [almacenado, en_transito, dispuesto]

  - nombre: estado_almacen
    schema: hse
    valores: [operativo, lleno, mantenimiento]

  - nombre: tipo_proveedor_ambiental
    schema: hse
    valores: [transportista, reciclador, confinamiento]

  - nombre: estado_manifiesto
    schema: hse
    valores: [emitido, en_transito, entregado, cerrado]

  - nombre: tipo_impacto
    schema: hse
    valores: [ruido, polvo, vibraciones, agua, emision, vegetacion, otro]

  - nombre: severidad
    schema: hse
    valores: [bajo, medio, alto]

  - nombre: probabilidad
    schema: hse
    valores: [baja, media, alta]

  - nombre: nivel_riesgo
    schema: hse
    valores: [tolerable, moderado, significativo]

  - nombre: estado_impacto
    schema: hse
    valores: [identificado, mitigando, controlado]

  - nombre: origen_queja
    schema: hse
    valores: [vecino, autoridad, interno, anonimo]

  - nombre: tipo_queja
    schema: hse
    valores: [ruido, polvo, olores, agua, otro]

  - nombre: estado_queja
    schema: hse
    valores: [recibida, atendiendo, cerrada]

  # Permisos de trabajo
  - nombre: estado_permiso
    schema: hse
    valores: [borrador, solicitado, aprobado_parcial, autorizado, en_ejecucion, suspendido, cerrado, rechazado, vencido]

  - nombre: rol_permiso
    schema: hse
    valores: [ejecutor, supervisor, vigia, operador, senalero]

  - nombre: decision_autorizacion
    schema: hse
    valores: [aprobado, rechazado]

  - nombre: momento_checklist
    schema: hse
    valores: [pre_trabajo, durante, post_trabajo]

  - nombre: tipo_evento_permiso
    schema: hse
    valores: [inicio, suspension, reanudacion, extension, anomalia, cierre]

  # Indicadores
  - nombre: tipo_indicador
    schema: hse
    valores: [reactivo, proactivo, ambiental]

  - nombre: frecuencia_calculo
    schema: hse
    valores: [diario, semanal, mensual]

  - nombre: periodo_tipo
    schema: hse
    valores: [diario, semanal, mensual, anual]

  - nombre: estado_semaforo
    schema: hse
    valores: [verde, amarillo, rojo]

  - nombre: fuente_horas
    schema: hse
    valores: [asistencia, manual]

  - nombre: tipo_reporte_hse
    schema: hse
    valores: [semanal, mensual, trimestral, anual]

  - nombre: formato_reporte
    schema: hse
    valores: [pdf, excel, ambos]

  - nombre: tipo_alerta_indicador
    schema: hse
    valores: [meta_superada, tendencia_negativa, sin_datos]

# =============================================================================
# FUNCIONES
# =============================================================================
funciones:
  core_shared:
    - nombre: set_updated_at()
      descripcion: Trigger para actualizar updated_at
      trigger: BEFORE UPDATE

    - nombre: audit_log_changes()
      descripcion: Log de auditoria
      trigger: AFTER INSERT/UPDATE/DELETE

    - nombre: validate_rfc()
      descripcion: Validacion RFC mexicano
      parametros: [rfc VARCHAR]
      retorna: BOOLEAN

    - nombre: generate_code()
      descripcion: Generacion de codigos secuenciales
      parametros: [prefix VARCHAR, sequence_name VARCHAR]
      retorna: VARCHAR

    - nombre: calculate_working_days()
      descripcion: Calcula dias habiles entre fechas
      parametros: [start_date DATE, end_date DATE]
      retorna: INTEGER

    - nombre: get_current_tenant_id()
      descripcion: Obtiene tenant_id de session
      retorna: UUID

    - nombre: validate_tenant_access()
      descripcion: Valida acceso del usuario al tenant
      parametros: [user_id UUID, tenant_id UUID]
      retorna: BOOLEAN

    - nombre: log_user_action()
      descripcion: Log de acciones de usuario
      trigger: AFTER INSERT/UPDATE/DELETE

  estimates:
    - nombre: calculate_estimate_totals()
      descripcion: Calcula totales de estimacion
      parametros: [estimate_id UUID]
      retorna: RECORD

    - nombre: update_advance_amortization()
      descripcion: Actualiza amortizacion de anticipos
      trigger: AFTER INSERT ON estimaciones

  hr:
    - nombre: validate_attendance_location()
      descripcion: Valida ubicacion dentro de geocerca
      parametros: [location GEOMETRY, fraccionamiento_id UUID]
      retorna: BOOLEAN

  construction:
    - nombre: calculate_unit_progress()
      descripcion: Calcula avance de unidad
      parametros: [unit_id UUID, unit_type VARCHAR]
      retorna: DECIMAL

# =============================================================================
# RLS POLICIES (template)
# =============================================================================
rls_template:
  descripcion: Todas las tablas tienen policy de tenant isolation
  funcion: get_current_tenant_id()

  policy_standard:
    nombre: tenant_isolation
    operacion: ALL
    using: tenant_id = get_current_tenant_id()
    with_check: tenant_id = get_current_tenant_id()

# =============================================================================
# INDICES ESPECIALES
# =============================================================================
indices_especiales:
  postgis:
    - tabla: construction.fraccionamientos
      columna: location
      tipo: GIST

    - tabla: hr.asistencias
      columna: check_in_location
      tipo: GIST

    - tabla: hr.asistencias
      columna: check_out_location
      tipo: GIST

    - tabla: hr.geocercas
      columna: polygon
      tipo: GIST

  trigram:
    - tabla: construction.fraccionamientos
      columna: name
      tipo: GIN
      usando: pg_trgm

    - tabla: infonavit.derechohabientes
      columna: nombre_completo
      tipo: GIN
      usando: pg_trgm

# =============================================================================
# NOMENCLATURA DEPRECADA (NO USAR)
# =============================================================================
schemas_deprecados:
  - project_management: "usar 'construction'"
  - financial_management: "usar 'estimates'"
  - hr_management: "usar 'hr'"
  - purchasing_management: "usar 'purchase'"
  - construction_management: "usar 'construction'"
  - quality_management: "integrado en 'construction'"
  - contract_management: "integrado en 'construction'"
  - crm_management: "integrado en 'infonavit'"
  - infonavit_management: "usar 'infonavit'"
  - assets_management: "usar 'assets' (pendiente)"
  - documents_management: "usar 'documents' (pendiente)"

# =============================================================================
# VALIDACION DDL (2025-12-09)
# =============================================================================
validacion_ddl:
  fecha: "2025-12-09"
  estado: "✅ COMPLETO - 7 schemas, 110 tablas"
  total_archivos_ddl: 7
  archivos_ddl:
    - archivo: "schemas/01-construction-schema-ddl.sql"
      tablas: 24
      estado: "implementado"
    - archivo: "schemas/02-hr-schema-ddl.sql"
      tablas: 8
      estado: "implementado"
    - archivo: "schemas/03-hse-schema-ddl.sql"
      tablas: 58
      estado: "implementado"
    - archivo: "schemas/04-estimates-schema-ddl.sql"
      tablas: 8
      estado: "implementado"
    - archivo: "schemas/05-infonavit-schema-ddl.sql"
      tablas: 8
      estado: "implementado"
    - archivo: "schemas/06-inventory-ext-schema-ddl.sql"
      tablas: 4
      estado: "implementado"
    - archivo: "schemas/07-purchase-ext-schema-ddl.sql"
      tablas: 5
      estado: "implementado"
  alineacion_erp_core:
    rls_variable: "app.current_tenant_id"
    fk_tenants: "auth.tenants"
    fk_users: "auth.users"
    prerequisitos_verificados: true
  verificaciones_prerequisitos:
    - "DDL verifica existencia de auth.tenants"
    - "DDL verifica existencia de auth.users"
    - "DDL verifica existencia de schemas dependientes"
    - "ERP-Core debe estar instalado antes de ejecutar DDL"
  compatible_erp_core: true

# =============================================================================
# METADATA
# =============================================================================
metadata:
  creado_por: Requirements-Analyst
  fecha_creacion: 2025-12-06
  ultima_actualizacion: 2025-12-09
  version_documento: 1.3.0
  cambios_version:
    - "1.3.0: DDL completo - 7 schemas, 110 tablas (2025-12-09)"
    - "1.3.0: Nuevos DDL: estimates, infonavit, inventory-ext, purchase-ext"
    - "1.3.0: Variable RLS corregida a app.current_tenant_id"
    - "1.2.0: Validacion DDL - 50 FK corregidas a auth.* (2025-12-08)"
    - "1.1.0: Nomenclatura unificada segun NAMING-CONVENTIONS.md"
