# Historial de Cambios - Proyecto GRH Registro cronologico de cambios significativos realizados al proyecto. --- ## 2026-02-09: Organismos Operadores + Historico de Tomas + Documentacion ### Resumen Implementacion completa del sistema de 3 niveles de roles (ADMIN → ORGANISMO_OPERADOR → OPERATOR), nueva pagina Historico de Tomas, y actualizacion de toda la documentacion. ### Nuevas Funcionalidades **Rol ORGANISMO_OPERADOR (8 fases completas)** - Nueva tabla `organismos_operadores` con migracion SQL - JWT actualizado con campo `organismoOperadorId` - Scope filtering en todos los servicios: meter, reading, project, user, concentrator, notification - Utility `scope.ts` para centralizar logica de filtrado - Pagina OrganismosPage.tsx para gestion de organismos (ADMIN only) - UsersPage actualizada con campo organismo y filtrado por scope - ProjectsPage con campo organismo_operador_id - Sidebar con visibilidad de 3 niveles por rol **Historico de Tomas** - Nueva pagina `HistoricoPage.tsx` con selector de medidor searchable - Busqueda por nombre, serial, ubicacion, cuenta CESPT, clave catastral - Tarjeta de informacion del medidor seleccionado - Cards de consumo: Actual (diario), Pasado (1er dia mes anterior), Diferencial con tendencia - Grafica AreaChart (Recharts) con gradiente y eje Y ajustado al rango de datos - Tabla paginada de lecturas (10/20/50 por pagina) - Filtros de rango de fechas - Exportacion CSV - authenticateToken en rutas GET de medidores para scope filtering **Documentacion** - Actualizacion completa de 8 archivos de documentacion ### Archivos Nuevos | Archivo | Descripcion | |---------|-------------| | `src/pages/OrganismosPage.tsx` | Pagina CRUD de organismos operadores | | `src/pages/historico/HistoricoPage.tsx` | Pagina de historico de tomas | | `src/api/organismos.ts` | Cliente API para organismos operadores | | `water-api/src/services/organismo-operador.service.ts` | Servicio backend organismos | | `water-api/src/controllers/organismo-operador.controller.ts` | Controlador organismos | | `water-api/src/routes/organismo-operador.routes.ts` | Rutas organismos | | `water-api/src/utils/scope.ts` | Utility de filtrado por scope | | `water-api/sql/add_organismos_operadores.sql` | Migracion SQL organismos | | `water-api/sql/add_user_meter_fields.sql` | Migracion campos usuario/medidor | ### Archivos Modificados (28+) | Archivo | Cambio | |---------|--------| | `src/App.tsx` | Agregados tipos "organismos" y "historico" al Page type | | `src/components/layout/Sidebar.tsx` | Visibilidad de 3 niveles por rol | | `src/api/auth.ts` | Helpers de rol actualizados (organismoOperadorId) | | `src/api/meters.ts` | Interfaces MeterReadingFilters, PaginatedMeterReadings, fetchMeterReadings con paginacion | | `src/api/users.ts` | Campo organismo_operador_id | | `src/api/projects.ts` | Campo organismo_operador_id | | `src/pages/Home.tsx` | Filtrado por scope | | `src/pages/UsersPage.tsx` | Campo organismo y filtrado | | `src/pages/projects/ProjectsPage.tsx` | Campo organismo | | `src/pages/meters/MetersModal.tsx` | Campo project_id | | `water-api/src/types/index.ts` | organismoOperadorId en tipos | | `water-api/src/utils/jwt.ts` | organismoOperadorId en JWT payload | | `water-api/src/middleware/auth.middleware.ts` | Extraccion de organismoOperadorId | | `water-api/src/services/*.ts` | Scope filtering en todos los servicios | | `water-api/src/controllers/*.ts` | requestingUser pass-through | | `water-api/src/routes/*.ts` | authenticateToken en rutas GET | | `water-api/src/validators/*.ts` | Campos de organismo | --- ## 2026-02-09: Actualizacion de documentacion (anterior) ### Resumen Actualizacion de los 4 archivos de documentacion principales. ### Motivo La documentacion previa describia una version temprana del proyecto y no reflejaba el backend Express propio ni los modulos agregados. --- ## 2026-02-05: Sincronizacion de conectores ### Cambio Cambio de hora de sincronizacion de conectores de 2:00 AM a 9:00 AM. ### Archivos Modificados (2) - `src/pages/conectores/SHMetersPage.tsx` - `src/pages/conectores/XMetersPage.tsx` --- ## 2026-02-04: Favicon y conectores ### Cambios - Actualizacion de favicon del sistema - Mejoras en la visualizacion de tiempo de ultima conexion en paginas de conectores - Agregado plan de implementacion para rol ORGANISMOS_OPERADORES ### Archivos Modificados (4+1) - Favicon actualizado - Paginas de conectores actualizadas - `PLAN_ORGANISMOS_OPERADORES.md` (plan de implementacion) --- ## 2026-02-03: Dark mode, Analytics, Conectores y CSV Upload ### Resumen Sesion mayor con multiples funcionalidades nuevas implementadas en una serie de 12 commits. ### Nuevas Funcionalidades **Dark Mode Completo** - Toggle dark/light/system en configuracion - Paleta Zinc de Tailwind aplicada a todas las paginas - Soporte en tablas, modales, formularios, sidebars - Cards de ConsumptionPage y tabla de AuditoriaPage **Seccion Analytics (3 paginas)** - `AnalyticsMapPage.tsx` - Mapa Leaflet con ubicaciones de medidores - `AnalyticsReportsPage.tsx` - Dashboard de reportes y estadisticas - `AnalyticsServerPage.tsx` - Metricas del servidor (CPU, memoria, requests) - `MapComponents.tsx` - Componentes auxiliares del mapa **Seccion Conectores (3 paginas)** - `SHMetersPage.tsx` - Conector para sistema SH-Meters - `XMetersPage.tsx` - Conector para sistema XMeters - `TTSPage.tsx` - Conector para The Things Stack (LoRaWAN) **Upload Panel (app separada)** - Nueva aplicacion en `upload-panel/` con React + Vite + Tailwind - `MetersUpload.tsx` - Carga de medidores via CSV (upsert) - `ReadingsUpload.tsx` - Carga de lecturas via CSV - `FileDropzone.tsx` - Componente de dropzone para archivos - `ResultsDisplay.tsx` - Visualizacion de resultados **Otros** - Nuevos tipos de medidor: LORA, LORAWAN, GRANDES CONSUMIDORES - Documentacion completa del proyecto (6 archivos) ### Archivos Modificados Aproximadamente 50+ archivos en 12 commits. --- ## 2026-01-23: Fix pantalla blanca y carga masiva ### Resumen Correccion de errores criticos que causaban pantalla blanca y mejoras en el sistema de carga masiva. ### Problema 1: Pantalla Blanca en Water Meters y Consumo **Sintoma:** Al navegar a "Water Meters" o "Consumo", la pagina se quedaba en blanco. **Causa:** PostgreSQL devuelve valores DECIMAL como strings (ej: `"300.0000"`). El codigo llamaba `.toFixed()` directamente sobre estos strings. **Solucion:** Convertir a numero con `Number()` antes de `.toFixed()`. **Archivos:** - `src/pages/meters/MetersTable.tsx:75` - `src/pages/consumption/ConsumptionPage.tsx:133, 213, 432` ### Problema 2: Modal de Carga Masiva se Cerraba sin Resultados **Sintoma:** El modal se cerraba automaticamente despues de la carga sin mostrar resultados. **Causa:** El callback `onSuccess` cerraba el modal automaticamente. **Solucion:** Separar recarga de datos (`onSuccess`) del cierre del modal (`onClose`). **Archivo:** `src/pages/meters/MeterPage.tsx:332-340` ### Problema 3: Error de Fecha Invalida en Carga Masiva **Sintoma:** Error `invalid input syntax for type date: "Installed"` al subir medidores. **Causa:** Columnas con valores como "Installed" o "New_LoRa" se interpretaban como fechas. **Solucion:** 1. Validar formato de fecha con regex antes de usarla 2. Agregar mapeos de columnas comunes (`device_s/n` → `serial_number`, etc.) 3. Normalizar status ("Installed" → ACTIVE, "New_LoRa" → ACTIVE, etc.) **Archivo:** `water-api/src/services/bulk-upload.service.ts` ### Archivos Modificados | Archivo | Cambio | |---------|--------| | `src/pages/meters/MetersTable.tsx` | Fix `.toFixed()` en lastReadingValue | | `src/pages/consumption/ConsumptionPage.tsx` | Fix `.toFixed()` en readingValue y avgReading | | `src/pages/meters/MeterPage.tsx` | Fix modal de carga masiva | | `water-api/src/services/bulk-upload.service.ts` | Validacion de fechas, mapeos, normalizacion | ### Verificacion - La pagina de Water Meters carga correctamente - La pagina de Consumo carga correctamente - El modal de carga masiva muestra resultados - Errores de carga masiva se muestran claramente - Valores como "Installed" no causan error de fecha