Fix: Corregir pantalla blanca y mejorar carga masiva

- Fix error .toFixed() con valores DECIMAL de PostgreSQL (string vs number)
- Fix modal de carga masiva que se cerraba sin mostrar resultados
- Validar fechas antes de insertar en BD (evita error con "Installed")
- Agregar mapeos de columnas comunes (device_status, device_name, etc.)
- Normalizar valores de status (Installed -> ACTIVE, New_LoRa -> ACTIVE)
- Actualizar documentación del proyecto

Archivos modificados:
- src/pages/meters/MetersTable.tsx
- src/pages/consumption/ConsumptionPage.tsx
- src/pages/meters/MeterPage.tsx
- water-api/src/services/bulk-upload.service.ts
- ESTADO_ACTUAL.md
- CAMBIOS_SESION.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Exteban08
2026-01-23 23:13:48 +00:00
parent ab97987c6a
commit 6c7d448b2f
6 changed files with 388 additions and 299 deletions

View File

@@ -130,7 +130,7 @@ export default function ConsumptionPage() {
r.meterName || "—",
r.meterSerialNumber || "—",
r.meterLocation || "—",
r.readingValue.toFixed(2),
Number(r.readingValue).toFixed(2),
r.readingType || "—",
r.batteryLevel !== null ? `${r.batteryLevel}%` : "—",
r.signalStrength !== null ? `${r.signalStrength} dBm` : "—",
@@ -210,7 +210,7 @@ export default function ConsumptionPage() {
<StatCard
icon={<Droplets />}
label="Consumo Promedio"
value={`${summary?.avgReading.toFixed(1) ?? "0"}`}
value={`${summary?.avgReading != null ? Number(summary.avgReading).toFixed(1) : "0"}`}
loading={loadingSummary}
gradient="from-violet-500 to-purple-600"
/>
@@ -429,7 +429,7 @@ export default function ConsumptionPage() {
</td>
<td className="px-5 py-3.5 text-right">
<span className="text-sm font-semibold text-slate-800 tabular-nums">
{reading.readingValue.toFixed(2)}
{Number(reading.readingValue).toFixed(2)}
</span>
<span className="text-xs text-slate-400 ml-1">m³</span>
</td>

View File

@@ -331,11 +331,13 @@ export default function MetersPage({
{showBulkUpload && (
<MetersBulkUploadModal
onClose={() => setShowBulkUpload(false)}
onSuccess={() => {
onClose={() => {
m.loadMeters();
setShowBulkUpload(false);
}}
onSuccess={() => {
m.loadMeters();
}}
/>
)}
</div>

View File

@@ -72,7 +72,7 @@ export default function MetersTable({
),
},
{ title: "Concentrador", field: "concentratorName", render: (r: Meter) => r.concentratorName || "-" },
{ title: "Última Lectura", field: "lastReadingValue", render: (r: Meter) => r.lastReadingValue?.toFixed(2) ?? "-" },
{ title: "Última Lectura", field: "lastReadingValue", render: (r: Meter) => r.lastReadingValue != null ? Number(r.lastReadingValue).toFixed(2) : "-" },
]}
data={disabled ? [] : data}
onRowClick={(_, rowData) => onRowClick(rowData as Meter)}