Documentation includes: - README.md: Project overview and architecture - API.md: Complete API reference with endpoints - MANUAL_USUARIO.md: User manual in Spanish - INSTALACION.md: Installation and deployment guide - ARQUITECTURA.md: Architecture and database schema - UPLOAD_PANEL.md: CSV upload panel documentation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
11 KiB
11 KiB
Panel de Carga CSV
Descripcion
El Panel de Carga CSV es una aplicacion web independiente que permite subir datos de medidores y lecturas mediante archivos CSV, sin necesidad de autenticacion. Esta diseñado para uso interno y facilita la carga masiva de datos.
Acceso
- URL: https://panel.gestionrecursoshidricos.com
- Puerto local: 5174
- Autenticacion: No requerida
Interfaz de Usuario
┌─────────────────────────────────────────────────────────────────┐
│ Panel de Carga de Datos - GRH │
│ Sistema de Gestion de Recursos Hidricos │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────┐ ┌─────────────────────────┐ │
│ │ TOMAS DE AGUA │ │ LECTURAS │ │
│ │ (Medidores) │ │ │ │
│ │ │ │ │ │
│ │ Campos requeridos: │ │ Campos requeridos: │ │
│ │ - serial_number │ │ - meter_serial │ │
│ │ - name │ │ - reading_value │ │
│ │ - concentrator_serial │ │ │ │
│ │ │ │ │ │
│ │ [Descargar plantilla] │ │ [Descargar plantilla] │ │
│ │ │ │ │ │
│ │ ┌───────────────────┐ │ │ ┌───────────────────┐ │ │
│ │ │ Arrastra CSV aqui │ │ │ │ Arrastra CSV aqui │ │ │
│ │ │ o haz clic │ │ │ │ o haz clic │ │ │
│ │ └───────────────────┘ │ │ └───────────────────┘ │ │
│ │ │ │ │ │
│ │ [ SUBIR ARCHIVO ] │ │ [ SUBIR ARCHIVO ] │ │
│ └─────────────────────────┘ └─────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ Resultado de la carga: │ │
│ │ Total: 100 | Insertados: 95 | Actualizados: 3 | Errores: 2│ │
│ │ │ │
│ │ Errores: │ │
│ │ - Fila 15: Concentrador "XXX" no encontrado │ │
│ │ - Fila 42: Valor de lectura invalido │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
Carga de Medidores (Tomas de Agua)
Formato del CSV
serial_number,name,concentrator_serial,area_name,location,meter_type,status,installation_date
MED001,Medidor 001,Mexico-GRH,ZONA A,Depto 101,LORA,ACTIVE,2024-01-15
MED002,Medidor 002,Mexico-GRH,ZONA A,Depto 102,LORA,ACTIVE,2024-01-15
MED003,Medidor 003,Mexico-GRH,ZONA B,Depto 201,LORAWAN,ACTIVE,2024-01-16
Campos
| Campo | Requerido | Tipo | Descripcion | Ejemplo |
|---|---|---|---|---|
| serial_number | Si | Texto | Numero de serie unico del medidor | MED001 |
| name | Si | Texto | Nombre descriptivo | Medidor Depto 101 |
| concentrator_serial | Si | Texto | Serial del concentrador existente | Mexico-GRH |
| area_name | No | Texto | Nombre del area o zona | ZONA A |
| location | No | Texto | Ubicacion especifica | Depto 101, Piso 1 |
| meter_type | No | Texto | Tipo de medidor (default: LORA) | LORA |
| status | No | Texto | Estado inicial (default: ACTIVE) | ACTIVE |
| installation_date | No | Fecha | Fecha de instalacion (YYYY-MM-DD) | 2024-01-15 |
Tipos de Medidor Validos
LORA(default)LORAWANGRANDES CONSUMIDORESWATERGASELECTRIC
Estados Validos
ACTIVE(default)INACTIVEOFFLINEMAINTENANCEERROR
Logica de Upsert
El sistema utiliza el campo serial_number como identificador unico:
- Si el serial_number YA EXISTE: Se actualiza el medidor con los nuevos valores
- Si el serial_number NO EXISTE: Se crea un nuevo medidor
Esto permite:
- Agregar nuevos medidores
- Actualizar medidores existentes
- Hacer ambas operaciones en un solo archivo
Ejemplo de CSV para Actualizacion
serial_number,name,concentrator_serial,area_name,location,meter_type,status,installation_date
MED001,Medidor Actualizado,Mexico-GRH,ZONA B,Nueva Ubicacion,LORA,MAINTENANCE,2024-01-15
Solo se actualizaran los campos proporcionados (no vacios).
Carga de Lecturas
Formato del CSV
meter_serial,reading_value,received_at,reading_type,battery_level,signal_strength
MED001,1234.56,2024-01-20 10:30:00,MANUAL,85,-45
MED002,567.89,2024-01-20 10:35:00,MANUAL,90,-42
MED003,890.12,2024-01-20 10:40:00,AUTOMATIC,78,-50
Campos
| Campo | Requerido | Tipo | Descripcion | Ejemplo |
|---|---|---|---|---|
| meter_serial | Si | Texto | Serial del medidor existente | MED001 |
| reading_value | Si | Numero | Valor de la lectura | 1234.56 |
| received_at | No | Fecha/Hora | Fecha y hora de la lectura | 2024-01-20 10:30:00 |
| reading_type | No | Texto | Tipo de lectura (default: MANUAL) | MANUAL |
| battery_level | No | Entero | Nivel de bateria (0-100) | 85 |
| signal_strength | No | Entero | Intensidad de senal (dBm) | -45 |
Tipos de Lectura Validos
AUTOMATIC- Lectura automatica del dispositivoMANUAL- Lectura ingresada manualmente (default)SCHEDULED- Lectura programada
Notas Importantes
- El medidor debe existir: El
meter_serialdebe corresponder a un medidor ya registrado en el sistema - Fecha por defecto: Si no se especifica
received_at, se usa la fecha/hora actual - Actualizacion automatica: Al insertar una lectura, se actualiza automaticamente el
last_reading_valuedel medidor
Proceso de Carga
Paso 1: Descargar Plantilla
- Haga clic en "Descargar plantilla CSV"
- Se descargara un archivo con los encabezados correctos y una fila de ejemplo
Paso 2: Preparar el Archivo
- Abra la plantilla en Excel, Google Sheets o cualquier editor de texto
- Complete los datos manteniendo el formato CSV
- Guarde el archivo como
.csv(valores separados por comas)
Paso 3: Subir el Archivo
- Arrastre el archivo al area de carga, o haga clic para seleccionarlo
- Verifique que aparezca el nombre del archivo
- Haga clic en "Subir Archivo"
Paso 4: Revisar Resultados
El sistema mostrara:
- Total: Numero total de filas procesadas
- Insertados: Registros nuevos creados
- Actualizados: Registros existentes modificados
- Errores: Filas que no pudieron procesarse
Errores Comunes
| Error | Causa | Solucion |
|---|---|---|
| "serial_number es requerido" | Celda vacia | Agregar serial |
| "concentrator_serial es requerido" | Celda vacia | Agregar serial del concentrador |
| "Concentrador no encontrado" | Serial incorrecto | Verificar serial del concentrador |
| "Medidor no encontrado" | Serial de medidor incorrecto (lecturas) | Verificar que el medidor exista |
| "Valor de lectura invalido" | No es numero | Usar formato numerico (ej: 1234.56) |
| "Nivel de bateria invalido" | Fuera de rango | Usar valor entre 0 y 100 |
Ejemplos Practicos
Ejemplo 1: Cargar 3 Medidores Nuevos
serial_number,name,concentrator_serial,area_name,location,meter_type,status,installation_date
RES-001,Departamento 101,Mexico-GRH,TORRE A,Piso 1,LORA,ACTIVE,2024-01-15
RES-002,Departamento 102,Mexico-GRH,TORRE A,Piso 1,LORA,ACTIVE,2024-01-15
RES-003,Departamento 201,Mexico-GRH,TORRE A,Piso 2,LORA,ACTIVE,2024-01-15
Ejemplo 2: Actualizar Ubicacion de Medidores
serial_number,name,concentrator_serial,area_name,location,meter_type,status,installation_date
RES-001,,Mexico-GRH,,Nueva Ubicacion,,,
RES-002,,Mexico-GRH,,Bodega 1,,,
Solo los campos con valor seran actualizados.
Ejemplo 3: Cargar Lecturas Diarias
meter_serial,reading_value,received_at,reading_type,battery_level,signal_strength
RES-001,125.50,2024-01-20 08:00:00,MANUAL,95,-40
RES-002,89.75,2024-01-20 08:05:00,MANUAL,92,-38
RES-003,156.25,2024-01-20 08:10:00,MANUAL,88,-45
Ejemplo 4: Cargar Lecturas sin Fecha (Usa Fecha Actual)
meter_serial,reading_value,received_at,reading_type,battery_level,signal_strength
RES-001,130.25,,,85,
RES-002,92.50,,,90,
RES-003,161.00,,,85,
API Endpoints
El panel utiliza los siguientes endpoints de la API:
Medidores
Subir CSV:
POST /api/csv-upload/meters
Content-Type: multipart/form-data
file: archivo.csv
Descargar plantilla:
GET /api/csv-upload/meters/template
Lecturas
Subir CSV:
POST /api/csv-upload/readings
Content-Type: multipart/form-data
file: archivo.csv
Descargar plantilla:
GET /api/csv-upload/readings/template
Configuracion Tecnica
Variables de Entorno
Crear archivo .env en upload-panel/:
VITE_API_URL=https://api.gestionrecursoshidricos.com/api
Para desarrollo local:
VITE_API_URL=http://localhost:3000/api
Ejecutar Localmente
cd upload-panel
npm install
npm run dev
El panel estara disponible en: http://localhost:5174
Compilar para Produccion
npm run build
Los archivos compilados estaran en upload-panel/dist/