Documento vivo del plan de RenfyGrid — un Meter Data Management System propio para empresas de servicios públicos (energía, agua, gas), con captura multi-protocolo/multi-marca de medidores, aseguramiento de la medición y comandos de suspensión/reconexión.
Idea propia del equipo, en desarrollo desde hace varios años. En 2024 se materializó en una propuesta comercial para el sector eléctrico colombiano que no avanzó a contratación. Ahora se retoma como producto propio de rensoftlabs, en fase de ideación formal.
Construir un MDM completo con HES propio capaz de capturar mediciones multi-protocolo/ multi-marca, procesarlas con un pipeline VEE auditable, entregar consumos validados al sistema comercial, y enviar comandos de control (suspensión/corte/reconexión).
| Capa | Responsabilidad |
|---|---|
| HES (Head End System) | Registro y gestión de medidores/concentradores, conversión multi-protocolo, lectura remota, eventos/alarmas, comandos SCR |
| Almacenamiento | Histórico de lecturas crudas, metadatos, retención y respaldo |
| VEE | Validación → Estimación → Edición, con auditoría |
| Gestión de Consumos | Agregación en consumo facturable, reglas de crítica, órdenes de relectura/inspección |
| Control | Solicitud, aprobación y ejecución de suspensión/corte/reconexión |
Fuera de alcance por ahora: CIS/facturación completo, GIS/SCADA/ADMS/OMS, app móvil de campo y BI avanzado.
ESP pequeñas/medianas (energía, acueducto, gas) en LatAm que ya invirtieron o van a invertir en medición inteligente pero no tienen presupuesto ni interés en un MDM de gran escala. Primer piloto natural: sector eléctrico colombiano, por el interés ya validado en 2024.
Principios rectores, stack tecnológico y vista de componentes de extremo a extremo (Meter to Cash).
flowchart LR
subgraph MED["Medición"]
M1[Medidores / Concentradores]
end
subgraph HES["HES · Head End System"]
AD[Adaptadores de protocolo\nDLMS/COSEM · ANSI C12 · propietario]
SCR[Módulo SCR\nSuspensión/Corte/Reconexión]
SCH[Programador de lecturas\ny comandos]
end
subgraph MDM["MDM · Meter Data Management"]
RAW[(Almacén crudo\nlecturas + eventos)]
VEE[Motor VEE\nValidación→Estimación→Edición]
CONS[Gestión de Consumos\nagregación, reglas de crítica]
end
BUS{{Bus de eventos / API interna}}
CIS[CIS/Facturación\npropio o del cliente]
PORTAL[Portal web + API pública\nmulti-tenant]
M1 <--> AD
AD --> SCH --> RAW
SCR --> AD
RAW --> VEE --> CONS
CONS --> BUS
BUS --> CIS
BUS --> PORTAL
PORTAL --> SCR
| Capa | Propuesta | Por qué |
|---|---|---|
| Adaptadores HES | Python + Gurux.DLMS (open source, IEC 62056) | Evita reimplementar el protocolo; librería madura y activa |
| Ingesta / campo | MQTT (Mosquitto/EMQX) + Redis Streams/RabbitMQ | Encaja con el volumen esperado sin el peso operativo de Kafka |
| Almacén crudo | PostgreSQL + TimescaleDB | Un solo motor para series de tiempo y datos relacionales |
| Motor VEE | Servicio Python, reglas configurables por tenant | Parametrizable sin desplegar código nuevo por cliente |
| Gestión de Consumos | Servicio Python | Aísla lógica de crítica/facturación de la calidad del dato |
| Módulo SCR | Servicio aislado, solo habla con adaptadores HES | Minimiza superficie de ataque del componente más riesgoso |
| Autenticación | JWT propio (Keycloak si se necesita SSO complejo) | Consistencia con el resto del portafolio |
| Despliegue | Docker Compose + systemd + nginx | Reutiliza la operación ya conocida del equipo |
Esquema compartido con Row-Level Security de PostgreSQL como aislamiento entre clientes — cada tenant es una fila más, no un despliegue aparte. El módulo SCR nunca se expone directo al portal: toda orden de control requiere rol autorizado explícito, queda firmada y con auditoría inmutable antes de llegar al adaptador HES.
Modelo de datos, contratos de API y flujos de secuencia, bajo un principio no negociable.
sequenceDiagram
participant BD as PostgreSQL (fuente de verdad)
participant Loader as Config Loader (job)
participant Cache as Snapshot local (JSON)
participant Motor as Motor VEE / Adaptador HES
BD->>Loader: SELECT reglas/mapeos vigentes
Loader->>Cache: escribe snapshot versionado
Motor->>Cache: carga al iniciar y en cada refresco
Note over Motor: Procesa lecturas sin tocar la BD por registro
BD-->>Loader: cambio de regla (evento)
Loader-->>Cache: nuevo snapshot
Cache-->>Motor: recarga en caliente
tenant, medidor, concentrador, protocolo_medidor, regla_vee (versionada), regla_critica_consumo, nivel_aprobacion_control, rol_permiso, lectura_cruda (hypertable Timescale), lectura_validada, evento_medidor, orden_control, consumo
sequenceDiagram
participant Medidor
participant HES as Adaptador HES
participant Raw as Almacén crudo
participant VEE as Motor VEE
participant Cons as Gestión de Consumos
participant CIS
Medidor->>HES: trama de protocolo
HES->>HES: normaliza con mapeo OBIS (caché)
HES->>Raw: inserta lectura_cruda
Raw-->>VEE: notifica nueva lectura
VEE->>VEE: aplica reglas_vee vigentes (caché)
VEE->>Raw: inserta lectura_validada
VEE-->>Cons: evento lectura.validada
Cons-->>CIS: consumo facturable listo
sequenceDiagram
participant Portal
participant Cons as Gestión de Consumos/CIS
participant SCR as Módulo SCR
participant HES as Adaptador HES
participant Medidor
Portal->>Cons: solicita orden_control
Cons->>Cons: valida nivel de aprobación (BD)
Note over Cons: rol autorizado aprueba si aplica
Cons->>SCR: orden aprobada (firmada)
SCR->>HES: ejecutar comando
HES->>Medidor: comando nativo del protocolo
Medidor-->>HES: confirmación
HES-->>SCR: resultado
SCR-->>Cons: orden_control.confirmada (auditoría)
MVP acotado a un solo protocolo y un solo tenant piloto, para no repetir el patrón de 2024 (propuesta grande, ninguna oportunidad avanzó).
Supuesto de equipo (ajustable): 2 desarrolladores backend + 1 QA a medio tiempo + el usuario como Product Owner/arquitecto. Sprints de 2 semanas.
| Sprint | Objetivo | Entregable verificable |
|---|---|---|
| 0 | Fundaciones: multi-tenant, auth, esquema BD, patrón config cacheada | Un servicio lee su config desde snapshot, no desde código |
| 1 | Adaptador HES conecta a medidor/simulador DLMS/COSEM real | Lectura real ingresa a lectura_cruda |
| 2 | Mapeo OBIS configurable + manejo de reintentos | Cambiar mapeo en BD cambia el parseo sin desplegar |
| 3 | Motor VEE: validación sobre lecturas reales | Lecturas fuera de rango marcadas y trazables |
| 4 | Motor VEE: estimación + edición auditada | Historias de usuario del diseño verificadas |
| 5 | Gestión de Consumos: agregación + reglas de crítica | API de consumo facturable responde para el piloto |
| 6 | Módulo SCR: estados de orden + flujo de aprobación | Orden de prueba con auditoría completa |
| 7 | SCR: ejecución real vía adaptador HES + confirmación | Suspensión/reconexión real o en simulador |
| 8 | Portal/API multi-tenant con RLS end-to-end | Un tenant solo ve sus propios datos, verificado con un segundo tenant |
| 9 | Hardening + observabilidad | Panel mínimo de métricas y alertas funcionando |
| 10 | Piloto real en producción | Primer ciclo de facturación completo con datos reales |