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>
203 lines
8.0 KiB
Markdown
203 lines
8.0 KiB
Markdown
# 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
|