# ADR-004: Sistema de Constantes SSOT **Estado:** Aceptada **Fecha:** 2025-11-24 **Responsable:** Architecture-Analyst **Proyecto:** ERP Construccion ## Contexto Necesitamos eliminar duplicacion de constantes (enums, estados, schemas) entre capas para evitar inconsistencias. ## Decision **Backend como Single Source of Truth (SSOT)** con sincronizacion automatica a Frontend. ```typescript // backend/src/shared/constants/database.constants.ts export const DB_SCHEMAS = { AUTH: 'auth_management', PROJECTS: 'project_management', // Especifico construccion ESTIMATES: 'estimates_management', // Especifico construccion // ... }; export const PROJECT_STATUS = { PLANNING: 'planning', IN_PROGRESS: 'in_progress', COMPLETED: 'completed', SUSPENDED: 'suspended', }; ``` Script `sync-enums.ts` genera constantes para Frontend automaticamente. ## Justificacion ### Referencia a Gamilit - Elimina 96% de duplicacion - Refactoring 10x mas rapido - Validacion pre-commit de consistencia ### Especifico para Construccion - Estados de obra sincronizados (planeacion, ejecucion, terminada) - Estados INFONAVIT unificados - Constantes de presupuesto centralizadas ## Consecuencias ### Positivas - Eliminacion de duplicacion: 96% - Reduccion de bugs por inconsistencias: 80% - Tiempo de refactoring: -60% ### Negativas - Requiere disciplina para usar constantes - Mitigacion: Validacion pre-commit ## Implementacion ### Acciones Requeridas - [ ] Implementar script sync-enums.ts - [ ] Centralizar constantes en backend/src/shared/constants/ - [ ] Agregar constantes especificas de construccion - [ ] Agregar validacion pre-commit ### Criterios de Aceptacion - Frontend usa constantes generadas desde Backend - Zero hardcoding de valores criticos - Validacion pre-commit funcional ## Referencias - [ERP Generico ADR-004](../../erp-generic/docs/adr/ADR-004-sistema-constantes-ssot.md) - [Gamilit SSOT System](../../shared/reference/gamilit/ssot-system.md)