Reflect current project state across all 8 docs: ADMIN/ORGANISMO_OPERADOR/OPERATOR role hierarchy, scope filtering, organismos_operadores table, Histórico de Tomas page, new SQL migrations, and updated API endpoints with auth requirements. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
8.0 KiB
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_operadorescon migracion SQL - JWT actualizado con campo
organismoOperadorId - Scope filtering en todos los servicios: meter, reading, project, user, concentrator, notification
- Utility
scope.tspara 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.tsxcon 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.tsxsrc/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 medidoresAnalyticsReportsPage.tsx- Dashboard de reportes y estadisticasAnalyticsServerPage.tsx- Metricas del servidor (CPU, memoria, requests)MapComponents.tsx- Componentes auxiliares del mapa
Seccion Conectores (3 paginas)
SHMetersPage.tsx- Conector para sistema SH-MetersXMetersPage.tsx- Conector para sistema XMetersTTSPage.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 CSVFileDropzone.tsx- Componente de dropzone para archivosResultsDisplay.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:75src/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:
- Validar formato de fecha con regex antes de usarla
- Agregar mapeos de columnas comunes (
device_s/n→serial_number, etc.) - 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