Plan de producto · rensoftlabs.com

MDM/AMI completo: Head End System, VEE, gestión de consumos y control remoto

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.

Planteamiento
Arquitectura general
Diseño
Plan de sprints

1. Planteamiento Completo

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.

Problema a resolver

  1. Fragmentación de fuentes: medidores y concentradores de múltiples marcas y protocolos (DLMS/COSEM, ANSI C12.19/C12.22, propietarios) que no hablan entre sí ni con el sistema comercial sin una capa de integración dedicada.
  2. Calidad de la medición: sin un proceso VEE sistemático, cientos o miles de lecturas por medidor-mes producen facturación incorrecta y reclamos.
  3. Desconexión entre medición y control operativo: suspender/reconectar el servicio depende de visitas de campo sin un canal de comandos confiable.

Objetivo del producto

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).

Alcance

CapaResponsabilidad
HES (Head End System)Registro y gestión de medidores/concentradores, conversión multi-protocolo, lectura remota, eventos/alarmas, comandos SCR
AlmacenamientoHistórico de lecturas crudas, metadatos, retención y respaldo
VEEValidación → Estimación → Edición, con auditoría
Gestión de ConsumosAgregación en consumo facturable, reglas de crítica, órdenes de relectura/inspección
ControlSolicitud, 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.

Mercado objetivo

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.

Riesgos identificados

Decisiones tomadas para avanzar: modelo de despliegue SaaS multi-tenant como primario (con opción a dedicado para clientes grandes); energía eléctrica como utility inicial; nombre comercial definido — RenfyGrid.

2. Arquitectura general Completo

Principios rectores, stack tecnológico y vista de componentes de extremo a extremo (Meter to Cash).

Principios rectores

Vista de componentes

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
    

Stack tecnológico por capa

CapaPropuestaPor qué
Adaptadores HESPython + Gurux.DLMS (open source, IEC 62056)Evita reimplementar el protocolo; librería madura y activa
Ingesta / campoMQTT (Mosquitto/EMQX) + Redis Streams/RabbitMQEncaja con el volumen esperado sin el peso operativo de Kafka
Almacén crudoPostgreSQL + TimescaleDBUn solo motor para series de tiempo y datos relacionales
Motor VEEServicio Python, reglas configurables por tenantParametrizable sin desplegar código nuevo por cliente
Gestión de ConsumosServicio PythonAísla lógica de crítica/facturación de la calidad del dato
Módulo SCRServicio aislado, solo habla con adaptadores HESMinimiza superficie de ataque del componente más riesgoso
AutenticaciónJWT propio (Keycloak si se necesita SSO complejo)Consistencia con el resto del portafolio
DespliegueDocker Compose + systemd + nginxReutiliza la operación ya conocida del equipo

Multi-tenencia y seguridad

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.

3. Diseño Completo

Modelo de datos, contratos de API y flujos de secuencia, bajo un principio no negociable.

Principio obligatorio: cero datos hardcodeados. Todo valor que pueda variar por tenant, marca de medidor, protocolo o regulación vive en base de datos versionada. Para los procesos de alto desempeño (motor VEE, adaptadores HES) esa configuración se cachea en snapshot (archivo plano/memoria), refrescado por evento desde la BD — nunca un round-trip a la base de datos por cada lectura, y nunca un valor fijo en el código fuente.

Patrón de configuración cacheada

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
    

Modelo de datos — entidades núcleo

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

Flujo de lectura (Meter to Cash)

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
    

Flujo de control (SCR) con aprobación

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)
    

Historias de usuario base (motor VEE)

4. Plan de sprints Completo

MVP acotado a un solo protocolo y un solo tenant piloto, para no repetir el patrón de 2024 (propuesta grande, ninguna oportunidad avanzó).

Alcance del MVP

Supuesto de equipo (ajustable): 2 desarrolladores backend + 1 QA a medio tiempo + el usuario como Product Owner/arquitecto. Sprints de 2 semanas.

Roadmap — 10 sprints (~5 meses)

SprintObjetivoEntregable verificable
0Fundaciones: multi-tenant, auth, esquema BD, patrón config cacheadaUn servicio lee su config desde snapshot, no desde código
1Adaptador HES conecta a medidor/simulador DLMS/COSEM realLectura real ingresa a lectura_cruda
2Mapeo OBIS configurable + manejo de reintentosCambiar mapeo en BD cambia el parseo sin desplegar
3Motor VEE: validación sobre lecturas realesLecturas fuera de rango marcadas y trazables
4Motor VEE: estimación + edición auditadaHistorias de usuario del diseño verificadas
5Gestión de Consumos: agregación + reglas de críticaAPI de consumo facturable responde para el piloto
6Módulo SCR: estados de orden + flujo de aprobaciónOrden de prueba con auditoría completa
7SCR: ejecución real vía adaptador HES + confirmaciónSuspensión/reconexión real o en simulador
8Portal/API multi-tenant con RLS end-to-endUn tenant solo ve sus propios datos, verificado con un segundo tenant
9Hardening + observabilidadPanel mínimo de métricas y alertas funcionando
10Piloto real en producciónPrimer ciclo de facturación completo con datos reales

Criterios de éxito del piloto

Siguiente paso: Sprint 0 — repositorio, esqueleto multi-tenant y librería de configuración cacheada.