"use strict";
/**
 * Database Constants - SSOT (Single Source of Truth)
 *
 * IMPORTANTE: Este archivo es la UNICA fuente de verdad para nombres de
 * schemas, tablas y columnas. Cualquier hardcoding sera detectado por
 * el script validate-constants-usage.ts
 *
 * @module @shared/constants/database
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.TABLE_REFS = exports.DB_COLUMNS = exports.DB_TABLES = exports.DB_SCHEMAS = void 0;
exports.getFullTableName = getFullTableName;
/**
 * Database Schemas
 * Todos los schemas de la base de datos PostgreSQL
 */
exports.DB_SCHEMAS = {
    // Auth & Core
    AUTH: 'auth',
    CORE: 'core',
    // Domain Schemas
    CONSTRUCTION: 'construction',
    HR: 'hr',
    HSE: 'hse',
    ESTIMATES: 'estimates',
    INFONAVIT: 'infonavit',
    INVENTORY: 'inventory',
    PURCHASE: 'purchase',
    // System Schemas
    FINANCIAL: 'financial',
    ANALYTICS: 'analytics',
    AUDIT: 'audit',
    SYSTEM: 'system',
};
/**
 * Database Tables organized by Schema
 */
exports.DB_TABLES = {
    // Auth Schema
    [exports.DB_SCHEMAS.AUTH]: {
        USERS: 'users',
        ROLES: 'roles',
        PERMISSIONS: 'permissions',
        ROLE_PERMISSIONS: 'role_permissions',
        USER_ROLES: 'user_roles',
        SESSIONS: 'sessions',
        REFRESH_TOKENS: 'refresh_tokens',
        TENANTS: 'tenants',
        TENANT_USERS: 'tenant_users',
        PASSWORD_RESETS: 'password_resets',
    },
    // Core Schema
    [exports.DB_SCHEMAS.CORE]: {
        COMPANIES: 'companies',
        PARTNERS: 'partners',
        CURRENCIES: 'currencies',
        COUNTRIES: 'countries',
        STATES: 'states',
        CITIES: 'cities',
        UOM: 'units_of_measure',
        UOM_CATEGORIES: 'uom_categories',
        SEQUENCES: 'sequences',
        ATTACHMENTS: 'attachments',
    },
    // Construction Schema (24 tables)
    [exports.DB_SCHEMAS.CONSTRUCTION]: {
        // Project Structure (8)
        PROYECTOS: 'proyectos',
        FRACCIONAMIENTOS: 'fraccionamientos',
        ETAPAS: 'etapas',
        MANZANAS: 'manzanas',
        LOTES: 'lotes',
        TORRES: 'torres',
        NIVELES: 'niveles',
        DEPARTAMENTOS: 'departamentos',
        PROTOTIPOS: 'prototipos',
        // Budget & Concepts (3)
        CONCEPTOS: 'conceptos',
        PRESUPUESTOS: 'presupuestos',
        PRESUPUESTO_PARTIDAS: 'presupuesto_partidas',
        // Schedule & Progress (5)
        PROGRAMA_OBRA: 'programa_obra',
        PROGRAMA_ACTIVIDADES: 'programa_actividades',
        AVANCES_OBRA: 'avances_obra',
        FOTOS_AVANCE: 'fotos_avance',
        BITACORA_OBRA: 'bitacora_obra',
        // Quality (5)
        CHECKLISTS: 'checklists',
        CHECKLIST_ITEMS: 'checklist_items',
        INSPECCIONES: 'inspecciones',
        INSPECCION_RESULTADOS: 'inspeccion_resultados',
        TICKETS_POSTVENTA: 'tickets_postventa',
        // Contracts (3)
        SUBCONTRATISTAS: 'subcontratistas',
        CONTRATOS: 'contratos',
        CONTRATO_PARTIDAS: 'contrato_partidas',
    },
    // HR Schema (8 tables)
    [exports.DB_SCHEMAS.HR]: {
        EMPLOYEES: 'employees',
        EMPLOYEE_CONSTRUCTION: 'employee_construction',
        PUESTOS: 'puestos',
        ASISTENCIAS: 'asistencias',
        ASISTENCIA_BIOMETRICO: 'asistencia_biometrico',
        GEOCERCAS: 'geocercas',
        DESTAJO: 'destajo',
        DESTAJO_DETALLE: 'destajo_detalle',
        CUADRILLAS: 'cuadrillas',
        CUADRILLA_MIEMBROS: 'cuadrilla_miembros',
        EMPLOYEE_FRACCIONAMIENTOS: 'employee_fraccionamientos',
    },
    // HSE Schema (58 tables - main groups)
    [exports.DB_SCHEMAS.HSE]: {
        // Incidents (5)
        INCIDENTES: 'incidentes',
        INCIDENTE_INVOLUCRADOS: 'incidente_involucrados',
        INCIDENTE_ACCIONES: 'incidente_acciones',
        INCIDENTE_EVIDENCIAS: 'incidente_evidencias',
        INCIDENTE_CAUSAS: 'incidente_causas',
        // Training (6)
        CAPACITACIONES: 'capacitaciones',
        CAPACITACION_PARTICIPANTES: 'capacitacion_participantes',
        CAPACITACION_MATERIALES: 'capacitacion_materiales',
        CERTIFICACIONES: 'certificaciones',
        CERTIFICACION_EMPLEADOS: 'certificacion_empleados',
        PLAN_CAPACITACION: 'plan_capacitacion',
        // Inspections (7)
        INSPECCIONES_SEGURIDAD: 'inspecciones_seguridad',
        INSPECCION_HALLAZGOS: 'inspeccion_hallazgos',
        CHECKLIST_SEGURIDAD: 'checklist_seguridad',
        CHECKLIST_SEGURIDAD_ITEMS: 'checklist_seguridad_items',
        AREAS_RIESGO: 'areas_riesgo',
        RONDAS_SEGURIDAD: 'rondas_seguridad',
        RONDA_PUNTOS: 'ronda_puntos',
        // EPP (7)
        EPP_CATALOGO: 'epp_catalogo',
        EPP_ASIGNACIONES: 'epp_asignaciones',
        EPP_ENTREGAS: 'epp_entregas',
        EPP_DEVOLUCIONES: 'epp_devoluciones',
        EPP_INSPECCIONES: 'epp_inspecciones',
        EPP_VIDA_UTIL: 'epp_vida_util',
        EPP_STOCK: 'epp_stock',
        // STPS Compliance (11)
        NORMAS_STPS: 'normas_stps',
        REQUISITOS_NORMA: 'requisitos_norma',
        CUMPLIMIENTO_NORMA: 'cumplimiento_norma',
        AUDITORIAS_STPS: 'auditorias_stps',
        AUDITORIA_HALLAZGOS: 'auditoria_hallazgos',
        PLANES_ACCION: 'planes_accion',
        ACCIONES_CORRECTIVAS: 'acciones_correctivas',
        COMISION_SEGURIDAD: 'comision_seguridad',
        COMISION_MIEMBROS: 'comision_miembros',
        RECORRIDOS_COMISION: 'recorridos_comision',
        ACTAS_COMISION: 'actas_comision',
        // Environmental (9)
        IMPACTOS_AMBIENTALES: 'impactos_ambientales',
        RESIDUOS: 'residuos',
        RESIDUO_MOVIMIENTOS: 'residuo_movimientos',
        MANIFIESTOS_RESIDUOS: 'manifiestos_residuos',
        MONITOREO_AMBIENTAL: 'monitoreo_ambiental',
        PERMISOS_AMBIENTALES: 'permisos_ambientales',
        PROGRAMAS_AMBIENTALES: 'programas_ambientales',
        INDICADORES_AMBIENTALES: 'indicadores_ambientales',
        EVENTOS_AMBIENTALES: 'eventos_ambientales',
        // Work Permits (8)
        PERMISOS_TRABAJO: 'permisos_trabajo',
        PERMISO_RIESGOS: 'permiso_riesgos',
        PERMISO_AUTORIZACIONES: 'permiso_autorizaciones',
        PERMISOS_ALTURA: 'permisos_altura',
        PERMISOS_CALIENTE: 'permisos_caliente',
        PERMISOS_CONFINADO: 'permisos_confinado',
        PERMISOS_ELECTRICO: 'permisos_electrico',
        PERMISOS_EXCAVACION: 'permisos_excavacion',
        // KPIs (7)
        KPI_CONFIGURACION: 'kpi_configuracion',
        KPI_VALORES: 'kpi_valores',
        KPI_METAS: 'kpi_metas',
        DASHBOARDS_HSE: 'dashboards_hse',
        ALERTAS_HSE: 'alertas_hse',
        REPORTES_HSE: 'reportes_hse',
        ESTADISTICAS_PERIODO: 'estadisticas_periodo',
    },
    // Estimates Schema (8 tables)
    [exports.DB_SCHEMAS.ESTIMATES]: {
        ESTIMACIONES: 'estimaciones',
        ESTIMACION_CONCEPTOS: 'estimacion_conceptos',
        GENERADORES: 'generadores',
        ANTICIPOS: 'anticipos',
        AMORTIZACIONES: 'amortizaciones',
        RETENCIONES: 'retenciones',
        FONDO_GARANTIA: 'fondo_garantia',
        ESTIMACION_WORKFLOW: 'estimacion_workflow',
    },
    // INFONAVIT Schema (8 tables)
    [exports.DB_SCHEMAS.INFONAVIT]: {
        REGISTRO_INFONAVIT: 'registro_infonavit',
        OFERTA_VIVIENDA: 'oferta_vivienda',
        DERECHOHABIENTES: 'derechohabientes',
        ASIGNACION_VIVIENDA: 'asignacion_vivienda',
        ACTAS: 'actas',
        ACTA_VIVIENDAS: 'acta_viviendas',
        REPORTES_INFONAVIT: 'reportes_infonavit',
        HISTORICO_PUNTOS: 'historico_puntos',
    },
    // Inventory Extension Schema (4 tables)
    [exports.DB_SCHEMAS.INVENTORY]: {
        ALMACENES_PROYECTO: 'almacenes_proyecto',
        REQUISICIONES_OBRA: 'requisiciones_obra',
        REQUISICION_LINEAS: 'requisicion_lineas',
        CONSUMOS_OBRA: 'consumos_obra',
        // Base tables (reference)
        PRODUCTS: 'products',
        LOCATIONS: 'locations',
        STOCK_MOVES: 'stock_moves',
        STOCK_QUANTS: 'stock_quants',
    },
    // Purchase Extension Schema (5 tables)
    [exports.DB_SCHEMAS.PURCHASE]: {
        PURCHASE_ORDER_CONSTRUCTION: 'purchase_order_construction',
        SUPPLIER_CONSTRUCTION: 'supplier_construction',
        COMPARATIVO_COTIZACIONES: 'comparativo_cotizaciones',
        COMPARATIVO_PROVEEDORES: 'comparativo_proveedores',
        COMPARATIVO_PRODUCTOS: 'comparativo_productos',
        // Base tables (reference)
        PURCHASE_ORDERS: 'purchase_orders',
        PURCHASE_ORDER_LINES: 'purchase_order_lines',
        SUPPLIERS: 'suppliers',
    },
    // Audit Schema
    [exports.DB_SCHEMAS.AUDIT]: {
        AUDIT_LOG: 'audit_log',
        CHANGE_HISTORY: 'change_history',
        USER_ACTIVITY: 'user_activity',
    },
};
/**
 * Common Column Names (to avoid hardcoding)
 */
exports.DB_COLUMNS = {
    // Audit columns
    ID: 'id',
    CREATED_AT: 'created_at',
    UPDATED_AT: 'updated_at',
    CREATED_BY: 'created_by',
    UPDATED_BY: 'updated_by',
    DELETED_AT: 'deleted_at',
    // Multi-tenant columns
    TENANT_ID: 'tenant_id',
    // Common FK columns
    USER_ID: 'user_id',
    PROJECT_ID: 'proyecto_id',
    FRACCIONAMIENTO_ID: 'fraccionamiento_id',
    EMPLOYEE_ID: 'employee_id',
    // Status columns
    STATUS: 'status',
    IS_ACTIVE: 'is_active',
    // Analytic columns (Odoo pattern)
    ANALYTIC_ACCOUNT_ID: 'analytic_account_id',
};
/**
 * Helper function to get full table name
 */
function getFullTableName(schema, table) {
    return `${schema}.${table}`;
}
/**
 * Get schema.table reference
 */
exports.TABLE_REFS = {
    // Auth
    USERS: getFullTableName(exports.DB_SCHEMAS.AUTH, exports.DB_TABLES[exports.DB_SCHEMAS.AUTH].USERS),
    TENANTS: getFullTableName(exports.DB_SCHEMAS.AUTH, exports.DB_TABLES[exports.DB_SCHEMAS.AUTH].TENANTS),
    ROLES: getFullTableName(exports.DB_SCHEMAS.AUTH, exports.DB_TABLES[exports.DB_SCHEMAS.AUTH].ROLES),
    // Construction
    PROYECTOS: getFullTableName(exports.DB_SCHEMAS.CONSTRUCTION, exports.DB_TABLES[exports.DB_SCHEMAS.CONSTRUCTION].PROYECTOS),
    FRACCIONAMIENTOS: getFullTableName(exports.DB_SCHEMAS.CONSTRUCTION, exports.DB_TABLES[exports.DB_SCHEMAS.CONSTRUCTION].FRACCIONAMIENTOS),
    // HR
    EMPLOYEES: getFullTableName(exports.DB_SCHEMAS.HR, exports.DB_TABLES[exports.DB_SCHEMAS.HR].EMPLOYEES),
    // HSE
    INCIDENTES: getFullTableName(exports.DB_SCHEMAS.HSE, exports.DB_TABLES[exports.DB_SCHEMAS.HSE].INCIDENTES),
    CAPACITACIONES: getFullTableName(exports.DB_SCHEMAS.HSE, exports.DB_TABLES[exports.DB_SCHEMAS.HSE].CAPACITACIONES),
};
//# sourceMappingURL=database.constants.js.map