Files
GRH/ESTADO_ACTUAL.md
Exteban08 61dafa83ac Update all project documentation to reflect current state
Rewrite README.md, DOCUMENTATION.md, ESTADO_ACTUAL.md and CAMBIOS_SESION.md
to accurately document the full-stack architecture, all modules, API endpoints,
JWT auth, database schema, and features added in February 2026.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 07:48:54 +00:00

11 KiB

Estado Actual del Proyecto GRH

Fecha: 2026-02-09 Ultima actualizacion: Documentacion actualizada para reflejar el estado completo del proyecto


Resumen del Proyecto

Sistema full-stack de gestion de medidores de agua con:

  • Frontend: React 18 + TypeScript + Vite (puerto 5173)
  • Backend: Node.js + Express + TypeScript (puerto 3000)
  • Base de datos: PostgreSQL
  • Upload Panel: App separada para carga CSV masiva

Jerarquia de datos:

Projects → Concentrators → Meters → Readings
         → Gateways → Devices ↗

URLs de produccion:

Repositorios:


Arquitectura del Sistema

┌─────────────────────────────────────────────────────────────┐
│                      FRONTEND (React SPA)                    │
│                    http://localhost:5173                      │
├─────────────────────────────────────────────────────────────┤
│  React 18 + TypeScript + Vite                                │
│  Tailwind CSS (paleta Zinc) + Material-UI 7                  │
│  Recharts (graficos) + Leaflet (mapas)                       │
│  Cliente API con JWT + refresh automatico                    │
│  Dark mode / Light mode / System                             │
└──────────────────────────┬──────────────────────────────────┘
                           │ REST API + JWT Bearer
                           ▼
┌─────────────────────────────────────────────────────────────┐
│                      BACKEND (Express)                       │
│                    http://localhost:3000                      │
├─────────────────────────────────────────────────────────────┤
│  Express + TypeScript + Zod (validacion)                     │
│  JWT access (15m) + refresh (7d) tokens                      │
│  17 archivos de rutas, 18 servicios                          │
│  Helmet, CORS, Bcrypt, Winston logging                       │
│  node-cron (deteccion flujo negativo)                        │
│  Multer + XLSX (carga masiva)                                │
│  Webhooks TTS (The Things Stack / LoRaWAN)                   │
└──────────────────────────┬──────────────────────────────────┘
                           │
                           ▼
┌─────────────────────────────────────────────────────────────┐
│                      PostgreSQL                              │
├─────────────────────────────────────────────────────────────┤
│  10 tablas: roles, users, projects, concentrators,           │
│  gateways, devices, meters, meter_readings,                  │
│  tts_uplink_logs, refresh_tokens                             │
│  2 vistas: meter_stats_by_project, device_status_summary     │
│  7 archivos SQL (schema + 6 migraciones)                     │
│  Triggers de updated_at, indices compuestos, JSONB           │
└─────────────────────────────────────────────────────────────┘

Funcionalidades Implementadas

1. Autenticacion y Autorizacion

  • Login con JWT: access token (15 min) + refresh token (7 dias)
  • Refresh automatico de tokens en el cliente (cola de peticiones)
  • 3 roles con permisos JSONB: ADMIN, OPERATOR, VIEWER
  • Relacion usuario-proyecto para acceso por scope
  • Hash de contrasenas con bcrypt (12 rounds)
  • Proteccion de rutas por rol en backend y frontend

2. Dashboard (Home)

  • KPIs: Total medidores, medidores activos, consumo promedio, alertas
  • Grafico de barras: Medidores por proyecto (Recharts)
  • Selector de organismos operadores (CESPT Tijuana, Tecate, Mexicali)
  • Historial reciente de actividades
  • Panel de ultimas alertas
  • Soporte por rol (ADMIN, OPERATOR, VIEWER)

3. Gestion de Proyectos

  • CRUD completo
  • Estados: ACTIVE, INACTIVE, COMPLETED
  • Estadisticas por proyecto (medidores, lecturas, areas)

4. Gestion de Concentradores

  • CRUD completo
  • Vinculados a proyectos
  • Estado: ACTIVE, INACTIVE, OFFLINE, MAINTENANCE, ERROR
  • IP, firmware, ultima comunicacion

5. Gestion de Medidores

  • CRUD completo con tabla, sidebar de detalle y modal de edicion
  • Tipos de medidor: WATER, GAS, ELECTRIC
  • Protocolos: GENERAL, LORA, LORAWAN
  • Estados: ACTIVE, INACTIVE, OFFLINE, MAINTENANCE, ERROR
  • Carga masiva via Excel y CSV
  • Busqueda, filtros por proyecto/tipo/estado
  • Ultima lectura visible en tabla
  • Campos extendidos: protocolo, MAC, gateway, voltaje, senal, flujo, coordenadas
  • Tipos adicionales: LORA, LORAWAN, GRANDES CONSUMIDORES

6. Consumo y Lecturas

  • CRUD de lecturas
  • Tipos: AUTOMATIC, MANUAL, SCHEDULED
  • Carga masiva via Excel y CSV
  • Filtros por proyecto, medidor, rango de fechas
  • Resumen de consumo (total, promedio, min, max)
  • Indicadores de bateria y senal
  • Exportacion

7. Analytics

  • Mapa: Visualizacion de medidores con coordenadas en mapa Leaflet interactivo
  • Reportes: Dashboard de estadisticas y reportes de consumo
  • Servidor: Metricas del sistema (CPU, memoria, uptime, requests)

8. Conectores Externos

  • SH-Meters: Integracion con sistema de medidores SH
  • XMeters: Integracion con sistema XMeters
  • The Things Stack (TTS): Webhooks LoRaWAN para uplink, join y downlink/ack
  • Sincronizacion programada a las 9:00 AM
  • Seguimiento de ultima conexion y estado

9. Gestion de Usuarios

  • CRUD completo (solo ADMIN)
  • Asignacion de roles
  • Asignacion de proyecto
  • Estados: activo/inactivo
  • Cambio de contrasena

10. Gestion de Roles

  • 3 roles predefinidos: ADMIN, OPERATOR, VIEWER
  • Permisos granulares JSONB por recurso
  • CRUD de roles (solo ADMIN)
  • Conteo de usuarios por rol

11. Auditoria

  • Registro automatico de todas las acciones via middleware
  • Visor de logs con filtros (solo ADMIN)
  • Actividad del usuario actual (todos los roles)
  • Estadisticas de auditoria
  • Busqueda por registro especifico

12. Notificaciones

  • Notificaciones in-app
  • Conteo de no leidas en tiempo real
  • Marcar como leida (individual y masiva)
  • Generacion automatica por flujo negativo (cron job)
  • Dropdown en TopMenu

13. Dark Mode

  • Soporte completo: Dark / Light / System
  • Paleta Zinc de Tailwind
  • Aplicado a todas las paginas, modales, tablas, formularios
  • Persistencia en localStorage

14. Upload Panel

  • Aplicacion separada (upload-panel/) para carga CSV
  • Dropzone para archivos
  • Carga de medidores (upsert)
  • Carga de lecturas
  • Descarga de plantillas
  • Visualizacion de resultados y errores

Carga Masiva

Medidores (Excel / CSV)

Columnas requeridas:

  • serial_number - Numero de serie del medidor (unico)
  • name - Nombre del medidor
  • concentrator_serial - Serial del concentrador existente

Columnas opcionales:

  • meter_id - ID del medidor
  • location - Ubicacion
  • type - LORA, LORAWAN, GRANDES (default: LORA)
  • status - ACTIVE, INACTIVE, etc. (default: ACTIVE)
  • installation_date - Fecha de instalacion (YYYY-MM-DD)

Mapeos automaticos de columnas: device_s/nserial_number, device_namename, device_statusstatus, etc.

Normalizacion de status: "Installed" → ACTIVE, "New_LoRa" → ACTIVE, "Enabled" → ACTIVE, "Disabled" → INACTIVE.

Lecturas (Excel / CSV)

Columnas requeridas:

  • meter_serial - Serial del medidor existente
  • reading_value - Valor de la lectura

Columnas opcionales:

  • reading_type - AUTOMATIC, MANUAL, SCHEDULED (default: MANUAL)
  • received_at - Fecha/hora (default: ahora)
  • battery_level - Nivel de bateria (%)
  • signal_strength - Intensidad de senal (dBm)

Datos en Base de Datos

Proyectos

  • ADAMANT
  • OLE
  • LUZIA
  • ATELIER

Concentradores

Serial Nombre Proyecto
2024072612 Adamant ADAMANT
2024030601 OLE OLE
2024030402 LUZIA LUZIA
2024072602 ATELIER ATELIER

Medidores

  • ADAMANT: 201 medidores
  • OLE: 5 medidores

Historial de Correcciones

2026-01-23: Fix pantalla blanca y carga masiva

  1. Fix .toFixed() con strings - PostgreSQL devuelve DECIMAL como string. Se envuelve con Number().
  2. Fix modal de carga masiva - Separar recarga de datos del cierre del modal.
  3. Fix fechas invalidas en carga masiva - Validacion de formato con regex + mapeos de columnas + normalizacion de status.

2026-02-03: Dark mode, Analytics, Conectores, CSV Upload

  • Implementacion completa de dark mode con paleta Zinc
  • Seccion Analytics: mapa, reportes, servidor
  • Seccion Conectores: SH-Meters, XMeters, TTS
  • Toggle dark/light theme
  • Panel CSV para carga masiva
  • Nuevos tipos de medidor: LORA, LORAWAN, GRANDES CONSUMIDORES
  • Documentacion completa del proyecto

2026-02-04: Favicon y conectores

  • Actualizacion de favicon
  • Mejoras en tiempo de ultima conexion de conectores
  • Plan de implementacion para rol ORGANISMOS_OPERADORES

2026-02-05: Sincronizacion de conectores

  • Cambio de hora de sincronizacion de 2:00 AM a 9:00 AM

Comandos Utiles

# Iniciar backend (desarrollo)
cd /home/GRH/water-project/water-api
npm run dev

# Iniciar frontend (desarrollo)
cd /home/GRH/water-project
npm run dev

# Iniciar upload panel (desarrollo)
cd /home/GRH/water-project/upload-panel
npm run dev

# Compilar backend para produccion
cd /home/GRH/water-project/water-api
npm run build && npm run start

# Compilar frontend para produccion
cd /home/GRH/water-project
npm run build

# Ejecutar schema de base de datos
psql -d water_project -f water-api/sql/schema.sql

Proximos Pasos Sugeridos

  1. Rol ORGANISMOS_OPERADORES - Implementar nuevo rol segun plan existente
  2. Reportes PDF - Generacion y descarga de reportes en PDF
  3. Tests - Suite de tests con Vitest (frontend) y Supertest (backend)
  4. CI/CD - Pipeline de integracion continua
  5. Docker - Containerizacion del proyecto completo