IPSmart · Plan de trabajo · 9 de septiembre de 2026 · v2

Motor de Vida
para la operación de IPSmart

La base tiene 60.000 abonados, 723.664 facturas y 18 meses de historia — y lleva siete días sin que pase nada. Esto es un plan para que opere sola de aquí a fin de año: todos los días se vende, se instala, se cobra, se avería, se reclama y se retira gente. Con un panel donde tú mueves los números — cuántos instaladores, cuántos vendedores, cuánto churn — y la operación responde.

Base ipsmart · PostgreSQL 16.14 · Railway/IPSmart Punto de partida 60.001 suscripciones · 88 técnicos · 44 cuadrillas Ventana 10-sep → 31-dic 2026

01 — DIAGNÓSTICO EN VIVOQué encontré en Railway

Entré al servicio postgres del proyecto IPSmart y conté filas de verdad. El punto de partida es bueno: no arrancas de cero, arrancas de una empresa de 60.000 abonados que alguien apagó.

Abonados
60.112
2 empresas demo
Suscripciones
60.001
55.231 activas
Facturas
723.664
18 meses
Pagos
696.121
cartera cuadrada
Técnicos
88
en 44 cuadrillas
ARPU
40,90
USD/mes · agosto

El problema, en un solo dato

TablaPrimer movimientoÚltimo movimientoFilas
billing.invoice2025-04-012026-09-02723.664
payments.payment2026-08-152026-09-02696.121
subscription.subscription2026-08-122026-09-0260.001
field_ops.work_order2026-09-022026-09-0211.924
party.party2026-08-102026-09-0360.112

La foto

Todo se detiene el 2 de septiembre. Hoy es 9. Ningún pago nuevo, ninguna venta, ninguna orden cerrada, ningún cliente dado de alta ni retirado. Lo que se siente estático no es la falta de datos: es la falta de movimiento.

02 — HUECOSLos dominios que están en cero

De los 32 schemas de la base, doce no tienen ni una fila. Sus módulos enseñan pantallas en blanco por más que el resto tenga un millón de facturas.

SchemaTablas en 0Qué módulo deja ciegoTratamiento
network40Red — OLT, ONU, NAP, alarmas, incidenciassembrar + simular
messaging16Notificaciones y bandeja omnicanalsimular
contact_center15Call center — llamadas, colas, QAsembrar + simular
sales_crm12Ventas — leads, oportunidades, comisionessembrar + simular
support10Soporte — tickets, SLA, PQR→ va a GLPI
inventory10Almacén — stock, seriales, movimientossembrar + simular
credit8Crédito / BNPLsimular
analytics24Todos los tableros y reportes agregadosETL nocturno
collections~11Cobranza — convenios, promesas, cortessimular
audit.outbox_event1 filaLa capa de IA y el Pulso del Sistemaemitir siempre

Dos hallazgos que cambian el plan

Soporte no va a support.ticket. El ADR-0019 dice que GLPI 11 es la fuente de verdad del dominio y el núcleo lo lee por su API v2; el propio DDL lleva escrito «NO implementar módulo sobre este schema». Los tickets y quejas simulados se crean en GLPI, y work_order.ticket_id apunta allá.

Analytics vacío es la razón real de que los tableros se vean planos. Los reportes que leen OLTP devuelven cifras; los que leen fact_* / mrr_daily / arpu_monthly devuelven cero. Sin ETL nocturno, el motor mueve tablas pero medio sistema sigue en blanco.

03 — ARQUITECTURAEl motor: cuatro piezas

Un servicio pequeño en Railway que despierta solo, un modelo de operación que convierte tus parámetros en eventos, un panel donde mueves esos parámetros, y una pantalla para ver el resultado. Sin IA en el bucle: el modelo es determinista y auditable; la IA consume lo que el motor produce.

Pieza 1

El Reloj

Servicio sim-engine (Node, sin volumen) en el proyecto IPSmart. Solo despierta y llama funciones SQL.

  • Latido — cada 3 min: lo que pasa en el momento.
  • Cierre del día — 23:50: aging, cortes, ETL, rollups.
  • Cierre del mes — día 1: tasa BCV, comisiones, contabilidad.
Pieza 2

El Modelo

Schema sim: los parámetros, el modelo de capacidad y los generadores por dominio.

  • sim.parametro — las ~50 perillas.
  • sim.escenario — juegos de parámetros guardados.
  • sim.tick — bitácora de cada latido.
  • Todo marcado y borrable de un tirón.
Pieza 3

El Panel de Mando

El formulario grande: personal, comercial, churn, cobranza, red, almacén y tiempo.

  • Cada cambio recalcula la proyección antes de aplicarlo.
  • Escenarios guardados y comparables.
  • Aplicar en caliente, sin redesplegar nada.
Pieza 4

La Sala de Control

Web propia en latido.ipsmart.app. Es donde se ve la vida pasando.

  • Cinta de eventos en vivo (SSE).
  • Contadores del día que suben solos.
  • Embudo, capacidad y cuello de botella.
  • Salud del motor y pausa.

Por dónde escribe

Por SQL directo, en funciones dentro del schema sim, una transacción por latido. No por la API: aguanta el volumen, no depende de despliegues y reusa los invariantes que ya validó la siembra (saldo cuadrado, tasa congelada en la fila, PII cifrada, cero cruces entre empresas). Con una excepción deliberada: cada escritura emite su evento en audit.outbox_event, que es lo que despierta la capa de IA, alimenta el Pulso horario y le da material al ETL.

04 — EL VOLANTEPanel de Mando

Esto es lo que pediste: mover los números y ver cómo se desenvuelve la operación. La maqueta de abajo funciona de verdad — mueve las perillas y mira qué pasa. Es el mismo modelo que irá dentro del motor, con los valores de arranque calibrados contra tu base.

Dónde está esto ya funcionando

El Panel de Mando está construido y en vivo en db.ipsmart.app, con dos pestañas: Panel de Mando — las ~75 perillas, el veredicto, el semáforo de alertas y el estado de resultados en tablas — y Tablero económico, con seis cifras de cabecera y ocho gráficos que se recalculan al mover cualquier perilla: la cascada del resultado, las partidas de costo, el movimiento del MRR, la proyección a 90 días, el punto de equilibrio, la recuperación del CAC, la sensibilidad del EBITDA a cada palanca y el efecto de la devaluación.

La idea de fondo

Las instalaciones por día no son un número que se escribe: salen de la capacidad. Vendedores × visitas × conversión te da la demanda; cuadrillas × órdenes por cuadrilla te da la capacidad; y la diferencia es la cola de instalación. Por eso el simulador sirve para planificar y no solo para decorar: si contratas vendedores sin contratar cuadrillas, la cola crece y se ve.

Panel de Mando · maqueta viva
Fuerza de ventas
24
12
22 %
12
Fuerza de campo
44
6,0
6 %
Base de abonados
60.000
2,5 %
6,5
40,90
Demanda OT —
Capacidad OT —
Ventas al día
—
—
Instalaciones al día
—
—
Bajas al día
—
churn + mora
Crecimiento neto mensual
—
—
Cola de instalación
—
días de espera del cliente
Abonados a 90 días
—
—
MRR a 90 días
—
USD al mes
Tickets al día
—
quejas, fallas y consultas
Arranque calibrado contra la base real: 60.001 suscripciones · 44 cuadrillas · 88 técnicos · ARPU USD 40,90 (facturas de agosto).

05 — PARÁMETROSTodas las variables del simulador

La maqueta de arriba expone once perillas para que se entienda el mecanismo. El panel real lleva las ~50 de esta tabla, agrupadas igual, con su valor de arranque y su rango. Todas viven en sim.parametro y se cambian en caliente.

VariableArranqueRangoQué mueve
Personal comercial
Vendedores de calle240 – 80Visitas y ventas diarias
Visitas por vendedor / día124 – 24Embudo de leads
Conversión visita → venta22 %5 – 45 %Ventas cerradas
Ventas web + call center / día120 – 80Canal digital
Desistimiento antes de instalar8 %0 – 25 %Ventas que nunca se instalan
Mix de planes6 planes% por planARPU y consumo de ONU
Comisión por venta instaladaUSD 120 – 40Nómina comercial
Personal de campo
Cuadrillas445 – 120Capacidad total de órdenes
Técnicos por cuadrilla21 – 4Nómina y rendimiento
Órdenes por cuadrilla / día6,02 – 12Capacidad total
Duración media: instalación95 min45 – 240Mezcla de la agenda
Duración media: avería55 min20 – 180Mezcla de la agenda
Días laborables por semana65 – 7Capacidad semanal
Capacidad en sábado / domingo60 % / 20 %0 – 100 %Guardia de fin de semana
Ausentismo6 %0 – 25 %Capacidad efectiva
Órdenes reprogramadas (cliente ausente)11 %0 – 30 %Cola y reintentos
Abonados y churn
Abonados al arrancar60.001realBase de todo
Churn mensual2,5 %0,5 – 6 %Bajas voluntarias
Motivos de baja4% cada unoPrecio, mudanza, calidad, mora
Reactivaciones de retirados7 %0 – 25 %Recuperación
Cambios de plan (upgrade / downgrade)1,8 % / 0,9 %0 – 6 %ARPU
Mudanzas0,5 %/mes0 – 3 %Órdenes de campo
Facturación y cobranza
Ciclos de facturación31 – 4Días 1, 10 y 20
ARPU mensualUSD 40,9010 – 90Ingreso
Perfil de pago (al día / retraso / mora)84 / 12 / 4 %suma 100 %Cartera y morosidad
Días de gracia tras vencimiento50 – 15Cuándo entra en mora
Suspensión por mora45 días15 – 90Suspensiones diarias
Corte definitivo75 días45 – 180Retiros por mora
Reconexión tras pagar72 %20 – 95 %Recuperación de cortados
Pagos móviles sin conciliar6 %0 – 20 %Bandeja de caja
Devaluación mensual de la tasa2,5 %0 – 15 %Tasa BCV del mes
Soporte, red y contacto
Averías al mes por 100 abonados6,51 – 20Carga de campo
Tickets al mes por 100 abonados8,52 – 30Carga de soporte
Mix de tickets4 tipos% cada unoFalla, factura, consulta, queja
Agentes de call center120 – 60Llamadas atendidas y abandono
Contactos por agente / día4515 – 90Capacidad de atención
Gestores de cobranza80 – 40Gestiones y promesas
SLA por prioridad4 / 8 / 24 h1 – 72 hCumplimiento y alarmas
Alarmas de red / día250 – 200Ruido operativo
Incidencia mayor: cada10 días1 – 90Picos de tickets y SLA en rojo
Abonados afectados por incidencia400 – 2.500rangoTamaño del pico
Almacén
Stock inicial de ONU3.0000 – 20.000Instalaciones posibles
Punto de reorden1.2000 – 10.000Cuándo se compra
Tiempo de reposición21 días3 – 90Riesgo de desabastecimiento
Equipo recuperado en retiros65 %0 – 100 %Reingreso a almacén
Economía y costos
Cargo de instalación al clienteUSD 250 – 120Ingreso no recurrente
Cargo de reconexiónUSD 50 – 40Ingreso no recurrente
ONU y materiales por instalaciónUSD 4510 – 150CAPEX y CAC
Vida útil de la ONU5 años2 – 10Depreciación → EBIT
Ancho de banda mayoristaUSD 8,50/ab0 – 25El costo variable más grande
Energía y mantenimiento de redUSD 4,20/ab0 – 15Costo variable
Postería y derecho de víaUSD 2,60/ab0 – 10Costo variable
Salario cargado: técnicoUSD 420100 – 2.000Nómina técnica (× cuadrillas × técnicos)
Salario cargado: vendedor (fijo)USD 320100 – 2.000Nómina comercial → CAC
Salario cargado: agente de call centerUSD 360100 – 2.000Nómina de atención
Salario cargado: gestor de cobranzaUSD 380100 – 2.000Nómina de cobranza
Personal administrativo y soporte1200 – 600Nómina fija
Salario cargado: administrativoUSD 520100 – 3.000Nómina fija
Transporte por orden ejecutadaUSD 60 – 40Costo por orden de campo
Licencias y plataformaUSD 24.000/mes0 – 200.000Costo fijo
Gastos generales fijosUSD 60.000/mes0 – 400.000Costo fijo
Provisión de incobrables2,5 %0 – 15 %Sobre la facturación
Tasas regulatorias y municipales2,5 %0 – 12 %Sobre los ingresos
Marketing y publicidad2,0 %0 – 15 %Sobre los ingresos → CAC
Motor y tiempo
Velocidadtiempo real×1 / ×10 / ×60Modo demo
Cadencia del latido3 min1 – 30 minGranularidad de la cinta
Aleatoriedad (jitter)12 %0 – 40 %Que dos días no salgan iguales
SemillafijatextoReproducibilidad
Empresas activas2demo-andina, demo-caribeAlcance del motor

Lo que sale del otro lado: el estado de resultados

Las mismas perillas que arreglan la cola de instalación mueven la nómina, y por tanto el margen. Esa tensión es el corazón del simulador: contratar cuadrillas quita cola y quita EBITDA a la vez, y el panel enseña las dos cosas al mismo tiempo. Cada indicador lleva su ⓘ explicando qué es, cómo se calcula y en qué rango se mueve un operador sano.

El panel no muestra un OPEX de una línea: despliega el estado de resultados completo, con las quince partidas de costo, su peso sobre los ingresos, y las tres paradas del camino — margen bruto, EBITDA y utilidad neta.

IndicadorCon los valores de arranqueQué te dice
Resultado
Ingresos mensualesUSD 2.386.435Servicio 97,7 % · instalación 2,1 % · reconexión 0,2 %
Cobrado de verdadUSD 2.276.65995,4 % — la diferencia es la mora, y es la que aprieta la caja
Margen brutoUSD 1.381.764 · 57,9 %Ingresos menos el costo directo de prestar el servicio (banda, red, postería, nómina técnica, transporte)
EBITDAUSD 1.029.574 · 43,1 %Un ISP de fibra sano vive entre 35 % y 45 %
EBITDA por abonadoUSD 17,16El número que hace comparables dos empresas de tamaño distinto
EBITUSD 984.574Ya descontando la depreciación de la ONU
Utilidad netaUSD 634.041 · 26,6 %Después de IGTF sobre cobros en divisas e ISLR
Caja e inversión
CAPEX del mesUSD 377.459ONU 45k + acometida y NAP 237k + troncal 95k. 15,8 % de los ingresos, que es la intensidad de capital típica de un operador de fibra
Flujo de caja operativoUSD 542.338Cobrado − costos − inversión. No es el EBITDA: la mora y el CAPEX se llevan la mitad
DSO26,4 díasCapital de trabajo parado en la calle. Cuadra con los ~25 días de la siembra real
Movimiento del ingreso recurrente
MRR nuevo · expansión+80.778 · +12.589Instalaciones y subidas de plan
MRR contracción · perdido−6.295 · −61.350Bajadas de plan y bajas
MRR neto del mes+USD 25.722Lo que de verdad creció el ingreso recurrente
Churn de ingresos · NRR2,63 % · 97,6 %El que se va no siempre es el que menos paga: por eso el churn en dinero se mide aparte del churn de clientes
Lo que cuesta el churn al añoUSD 736.200Ingreso anual que se pierde por las bajas
Economía unitaria
CACUSD 231,20Comercial + comisiones + marketing + equipo y obra, por cliente captado
LTVUSD 899Margen bruto × 40 meses de vida media (churn 2,5 %)
LTV / CAC · payback3,9× · 10,3 mesesPor debajo de 3× crecer destruye valor; por debajo de 12 meses de payback el crecimiento se autofinancia
Estructura y riesgo
Costos fijos · variables21,2 % · 35,7 %La postería y el mantenimiento de red son fijos: se pagan por poste, no por cliente
Punto de equilibrio19.761 abonadosUn colchón del 67 % sobre la base actual. Es el número que dice cuánto puedes caer antes de perder dinero
Apalancamiento operativo1,34×Cuánto se multiplica el EBITDA por cada punto de ingreso
Abonados / ingreso por empleado238 · USD 9.470Productividad, con 252 empleados en total
Costo de servir por abonadoUSD 21,42Todo el gasto de operar, sin lo comercial
Riesgo cambiario−USD 30.128 al mesFacturas en bolívares y cobras 26 días después con la tasa ya movida: una devaluación del 2,5 % mensual se lleva 1,2 puntos de margen. El descalce de costos en divisas queda cubierto porque el 35 % de los cobros ya entran en divisas

Tres palancas, tres efectos opuestos — probadas en el panel

Subir a 70 vendedores sin tocar el campo: las instalaciones suben de 66 a 90 al día (ahí se topa la capacidad), pero la cola de instalación salta a 32 días de espera. Vender más de lo que puedes instalar no es crecer: es acumular clientes molestos.

Añadir cuadrillas hasta 90: las instalaciones llegan a 171 al día, la cola cae a 14 días y el crecimiento se dispara a +3.626 al mes — pero el margen baja a 40,1 % por la nómina. Ese es el precio de quitar la cola, y ahora se ve antes de pagarlo.

Que el ancho de banda mayorista suba a USD 20 por abonado: la operación no cambia ni un día de espera, y el margen se desploma a 14,2 %. El panel lo dice sin rodeos: «la operación no se paga».

Escenarios guardados

Cada juego completo de parámetros se guarda con nombre en sim.escenario y se cambia de un clic: Operación base, Campaña de captación, Crisis de red, Recorte de personal, Temporada alta. Se pueden programar por fecha, que es exactamente lo que arma el arco de tres meses de la sección 08 — sin que nadie toque nada.

06 — RITMOEl día tipo: todo pasa todos los días

Esta es la corrección importante frente a la primera versión del plan. No es que el día 1 se factura y el resto del mes no pasa nada: todos los días hay ventas, instalaciones, averías, quejas, cobros y retiros. El calendario del mes solo marca los hitos que se concentran en una fecha; el resto es continuo.

Todos los días, sin excepciónAl día (base)Cómo se calcula
Leads que entran~300Vendedores × visitas + canal digital
Ventas cerradas~75Visitas × conversión + digital
Instalaciones ejecutadas~69Ventas menos desistimiento, limitado por capacidad
Averías atendidas~130Abonados × tasa de avería
Órdenes de campo totales~250Instalación + avería + mudanza + retiro + inspección
Pagos recibidos~2.000Perfil de pago sobre la cartera del mes
Tickets y quejas~170Abonados × tasa de contacto
Llamadas al call center~520Tickets × factor de contacto
Bajas de abonado~50Churn 2,5 % mensual repartido
Alarmas de red~25Planta externa simulada
Eventos en el outbox~4.000Uno por cada cosa que pasa

Con la forma de un día real

  • Curva horaria: arranque 7–9 h, meseta 9–13 h, pico 14–17 h, cola hasta las 20 h, madrugada casi muerta. Nada repartido plano en 24 horas — eso se nota a la legua.
  • Semana: lunes y martes cargados, viernes de cierre, sábado al 60 %, domingo al 20 % y solo guardia. Se calcula contra el calendario real, no contra el número del día.
  • Encadenado: la venta de hoy es la instalación de dentro de dos a cinco días, que es la primera factura del ciclo siguiente, que es el pago de la semana que viene. Nada aparece de la nada.

07 — COHERENCIAQue el motor no diga tonterías

Al que acaba de pagar no se le corta. Al que ya está instalado no se le instala. Al que ya se retiró no se le da de baja otra vez. Esta es la regla dura del motor, y no es un detalle de acabado: sin ella, en una semana la demo tiene facturas cobradas dos veces, cortados sin deuda y órdenes de instalación para gente que lleva tres años conectada. Una base así miente, y eso es peor que una base congelada.

La regla

Ninguna acción elige a su sujeto al azar. Cada una tiene su vista de elegibilidad — sim.elegibles_suspension(...), sim.elegibles_instalacion(...) — que devuelve exactamente a quién se le puede hacer eso, ahora, sin contradecir el estado en que está. Si la vista devuelve cero filas, la acción no ocurre ese tick. No se fuerza, no se «escoge otro parecido».

Los estados por los que se pasa

SuscripciónSe llega desdeSe sale haciaQué lo dispara
pending_installventa cerradaactiveInstalación conforme, con equipo entregado
activeinstalación · reconexiónsuspended · terminatedMora, o baja voluntaria
suspendedactive con mora > 45 dactive · cutPaga y reconecta, o la mora llega a 75 d
cutsuspended con mora > 75 dactive · terminatedPaga (72 % de los casos) o se pierde
terminatedbaja o corte definitivonada — es finalSi vuelve, entra como venta nueva con contrato nuevo

Que terminated sea terminal no es capricho: es lo que permite medir reactivación como algo distinto de reconexión, que en un ISP son dos números que no se parecen en nada.

Quién es elegible para qué

AcciónSolo si…Nunca
InstalarEstá en pending_install, tiene orden abierta y hay ONU en el almacén de su zonaAlguien ya active · sin stock (queda en cola, no se instala a la fuerza)
SuspenderEstá active, debe más de 45 días, no ha pagado en 72 h, no tiene convenio ni promesa vivaEl que acaba de pagar · el que tiene convenio · el que está en días de gracia
CortarEstá suspended y la mora pasó de 75 díasUn active — primero se suspende, siempre
ReconectarEstá suspended o cut y un pago le dejó la deuda vencida en ceroEl que nunca estuvo suspendido · el que sigue debiendo
FacturarEstá active o suspended, le toca el ciclo y no tiene ya factura de ese períodocut · terminated · doble emisión del mismo mes
CobrarLa factura tiene saldo > 0 y es del propio abonadoPagar más que el saldo · tocar factura de la otra empresa
Dar de bajaEstá active o suspended y lleva al menos 30 díasEl que ya está terminated
Abrir averíaEstá active y no tiene ya otra avería abiertaUn suspendido o cortado — no tiene servicio que se le dañe
VenderLa dirección no tiene servicio activo y su zona tiene coberturaVenderle a quien ya es cliente en esa misma dirección
Cambiar de planEstá active y no cambió en los últimos 30 díasCambiar al mismo plan que ya tiene

Y cuatro reglas que atraviesan todo

  • Los pagos se procesan antes que los castigos. El motor cobra primero y suspende después, de modo que quien pagó esta mañana no aparece en la lista de la tarde. La ventana de 72 h cubre además el pago móvil sin conciliar: quien reportó pago y todavía no se le aplica tampoco se corta.
  • Causalidad con retardo, no por arte de magia. La venta de hoy es la instalación de dentro de dos a cinco días, que es la primera factura del ciclo siguiente, que es el pago de la semana que viene. El aviso de cobranza precede a la suspensión, nunca al revés.
  • Nada de UPDATE desnudo. Todo cambio de estado escribe su fila de historia con motivo y actor, y emite su evento en el outbox. Un estado que cambió sin historia es un bug, y el verificador nocturno lo caza.
  • Capacidad antes que deseo. Si el panel pide 90 instalaciones y las cuadrillas dan para 60, se hacen 60 y 30 quedan en cola. El motor nunca infla la capacidad para cumplir un número.

El verificador nocturno

A las 23:55 corre once comprobaciones. Todas tienen que dar cero; si alguna no da, para el motor y avisa por ntfy.

ComprobaciónDebe dar
Suscripciones active con mora por encima del umbral de corte y sin convenio0
Suscripciones cut sin deuda vencida desde hace más de 48 h0
Órdenes de instalación sobre suscripciones ya active0
Suscripciones terminated con factura emitida después de la baja0
Facturas donde el saldo no cuadra con lo aplicado0
Pagos aplicados a facturas de otro tenant0
Cambios de estado sin fila de historia0
Órdenes cerradas sin cuadrilla asignada0
Abonados con dos órdenes abiertas del mismo tipo0
Instalaciones ejecutadas sin movimiento de stock de ONU0
Fugas entre empresas en las 7 relaciones que podrían cruzarse0

08 — HITOSLo que además se concentra en un día

Sobre el fondo continuo de la sección anterior, estos son los picos que caen en fecha fija. Con jitter, para que dos meses nunca salgan idénticos.

01Ciclo A: 20.000 facturas · tasa BCV del mes · cierre contable · metas de venta
02Pico de cobro · conciliación bancaria
03Pico de cobro · avisos de factura
05Vence ciclo A → primer tramo de aging
06Cobranza paso 1: recordatorio automático
07Promesas de pago y convenios
10Ciclo B · suspensiones por mora > 45 días
11Reconexiones de los que pagaron ayer
12Mantenimiento programado de red · ventana nocturna
14Cobranza paso 2: llamada del call center
15Quincena · segundo pico de cobro · nómina · comisiones
16Cola del pico · reconexiones masivas
20Ciclo C · revisión de convenios vencidos
21Auditoría de inventario · reposición de almacén
22Encuestas de satisfacción de órdenes cerradas
24Cobranza paso 3: última gestión antes del corte
25Cortes definitivos > 75 días · retiro de equipos
27Cierre comercial: oportunidades ganadas y perdidas
28Provisión de incobrables · write-off trimestral
29Cierre analítico: rollups · ARPU · churn
30Cierre de mes: Pulso del Sistema · reporte a gerencia
Hito de negocio Rutina concentrada Los días no listados son operación continua pura

09 — NARRATIVAEl arco de septiembre a diciembre

Cada mes cambia de escenario solo, en la fecha programada. Quien mire el sistema en noviembre no ve lo mismo que en septiembre.

MesQué cambia en el panelQué se ve
Septiembre
arranque
Operación base: 24 vendedores, 44 cuadrillas, churn 2,5 %. Crecimiento neto suave, cola de instalación estable, campo al día. Es la línea base contra la que se compara todo.
Octubre
campaña
Vendedores 24→40, conversión +6 pts, comisión al doble. Las cuadrillas no suben. Embudo lleno, ventas disparadas — y la cola de instalación creciendo día a día hasta que se ve el cuello de botella. Es la lección que enseña el simulador.
Noviembre
crisis
Incidencia mayor de 6 h en una zona completa; tasa de avería ×3 esa semana. Avalancha de tickets y llamadas, SLA en rojo, cuadrillas desviadas de instalación a avería, notas de crédito por indisponibilidad, y la recuperación día a día.
Diciembre
temporada
Perfil de pago al 92 % al día (aguinaldos), ausentismo 6→18 % (vacaciones), ventas −30 %. Pico de recaudo con la mora derrumbándose, campo lento por personal de vacaciones, cierre fiscal y contable, y el reporte anual con doce meses de curva real.

10 — FRONTLa Sala de Control

Dos pantallas en una: arriba el volante (el Panel de Mando de la sección 04), abajo el tablero de lo que está pasando ahora mismo. Pensada para dejarla abierta en un monitor.

latido.ipsmart.app · en vivo · último tick hace 47 s
14:22:08 andina PAGO Bs 1.240,00 · pago móvil · San Cristóbal · factura F-2026-441207
14:22:11 andina VENTA vendedor R. Salas · plan Fibra 200 · zona Táriba · instalación para el jueves
14:22:14 caribe OT-8841 avería asignada a cuadrilla C-12 · Porlamar
14:22:33 andina PAGO Bs 890,00 · transferencia · Mérida
14:22:49 andina ALARMA ONU sin señal · NAP-0417 · 3 abonados afectados
14:23:02 caribe OT-8802 cerrada · instalación conforme · firma capturada
14:23:07 caribe TICKET queja por lentitud · prioridad media · SLA 8 h
14:23:11 andina SUSPENSIÓN mora 47 días · Bs 3.120,00 · aviso enviado
14:23:19 andina RETIRO baja voluntaria · motivo: mudanza · equipo por recuperar

Qué muestra el tablero

  • La cinta. Cada evento que escribe el motor, en el momento en que lo escribe, por SSE. Filtrable por empresa y por tipo. Es la prueba visual de que hay pulso.
  • Ocho contadores del día que suben solos: abonados activos, ventas, instalaciones, facturado, cobrado, órdenes cerradas, tickets abiertos, alarmas. Con delta contra ayer y contra el mismo día del mes pasado.
  • Capacidad contra demanda en vivo: las dos barras que ves en la maqueta, pero con lo que realmente lleva ejecutado el día — y el cuello de botella dicho con palabras.
  • Embudo comercial de hoy: leads → visitas → ventas → instalaciones, con la cola pendiente y los días de espera del cliente.
  • Las últimas 24 horas en un área, sobre la curva esperada, para ver si el día va adelantado o atrasado.
  • Mapa de zonas. Los 46 sectores de Táchira, Mérida, Nueva Esparta y Sucre se encienden donde está pasando algo. Hace obvio, sin explicarlo, que las dos empresas no se cruzan.
  • Salud del motor. Último tick, próximo tick, eventos por minuto, errores de 24 h, y los controles: pausar, reanudar, acelerar, cambiar de escenario y rebobinar el día.

Vive en su propio subdominio, con la paleta canónica de la casa (violeta / índigo / cian, tema claro y oscuro), y entra como tarjeta en el escritorio IPSmart. Como todo host que sirve tráfico, queda registrada en uptime.ipsmart.app en el mismo trabajo que la publica.

Estado hoy

latido.ipsmart.app ya existe y está vigilado, pero sirve una página de espera: dice sin rodeos que todavía no hay latido y enseña qué mostrará cuando el motor arranque. No inventa una cinta de eventos que no ocurre — una sala de control con datos falsos sería exactamente el tipo de mentira que este plan existe para evitar. Se enciende de verdad en la Fase 8, cuando el motor escriba.

11 — SEGURIDADBarandas: nada de esto es irreversible

  • Candado por empresa. El motor solo escribe en tenants cuyo slug empieza por demo-. La empresa de la casa (IPSmart, 4 clientes reales) queda fuera por construcción, verificado en cada tick.
  • Todo marcado. Cada fila que escribe el motor lleva su marca de origen y el id del tick. sim.rebobinar(desde, hasta) deja la base exactamente como estaba antes de esa ventana.
  • Interruptor de emergencia. Una fila en sim.config apaga el motor sin redesplegar nada; el botón del panel hace lo mismo.
  • Verificador nocturno. Corre cada noche las mismas comprobaciones que validaron la siembra — cero descuadres de saldo, cero fugas entre empresas en las siete relaciones que podrían cruzarse — y si falla, para el motor y avisa por ntfy. Mejor un motor parado que una base mentirosa.
  • Parámetros con tope. Cada perilla tiene rango máximo; no se puede poner el motor a generar un millón de órdenes por descuido.
  • Respaldo previo. Antes del primer tick, volcado completo de los dos tenants demo a ~/Downloads, más rama y commit, según la regla de la casa.

12 — EDTCómo se construye

Once jornadas de construcción; después corre solo hasta el 31 de diciembre sin que nadie lo vigile. Esfuerzo en jornadas de trabajo, no en días de calendario.

F0

Respaldo y barandas

Volcado de los tenants demo, rama de trabajo, schema sim, marca de origen, candado por empresa, interruptor y función de rebobinado. Nada escribe todavía.

0,5 j
F1

Elegibilidad, parámetros y capacidad

sim.parametro y sim.escenario con las ~50 variables, el modelo de capacidad (demanda contra capacidad, cola, cuello de botella) y su proyección a 90 días. Y las vistas de elegibilidad de la sección 07, que son las que impiden cortar a quien acaba de pagar o instalar a quien ya está instalado. Es el corazón: todo lo demás lo consume.

2,5 j
F2

Reloj y bitácora

El servicio sim-engine en Railway, el latido, la curva horaria y semanal, el jitter con semilla, la bitácora de ticks y el emisor de outbox. Se prueba con un solo tipo de evento.

1 j
F3

Cimientos de los dominios vacíos

Siembra mínima para que puedan tener vida: red (OLT, PON, NAP y ONU derivadas de las 46 zonas existentes), almacén con stock, equipos de venta con metas, agentes y colas del call center. Solo tenants demo; no toca ManagerOLT.

1 j
F4

Ciclo comercial diario

Lead → visita → oportunidad → venta → orden de instalación → suscripción activa → primera factura. Con vendedores, metas, comisiones y desistimiento.

1,5 j
F5

Ciclo financiero

Facturación en tres ciclos, pagos por perfil, conciliación, aging, cobranza escalonada, promesas, convenios, suspensiones, reconexiones, cortes y write-off.

1,5 j
F6

Campo, red, soporte y churn

Órdenes con traza y evidencia limitadas por capacidad real, cola de instalación, alarmas, incidencia mayor programable, llamadas, tickets contra la API de GLPI y bajas por churn con su motivo y su retiro de equipo.

2 j
F7

Analítica e IA

ETL nocturno de OLTP a dim_* / fact_*, rollups diarios (MRR, ARPU, churn, aging, productividad) y Pulso del Sistema horario. Es lo que enciende los tableros.

1 j
F8

Panel de Mando y Sala de Control

El formulario grande con las ~50 perillas, escenarios guardados y proyección en vivo; y el tablero: cinta SSE, contadores, capacidad contra demanda, embudo, curva de 24 h, mapa y salud del motor.

2 j
F9

Puesta en marcha

Despliegue en Railway, DNS de latido.ipsmart.app, alta en uptime, avisos por ntfy, ADR de la decisión y manual de operación (arrancar, parar, rebobinar, calibrar).

0,5 j

Total ≈ 13 jornadas · el grueso es delegable al copiloto; la calibración y el cuadre financiero, no.

13 — TU TURNOSeis decisiones antes de escribir código

Cada una lleva mi recomendación. Si estás de acuerdo con todas, basta con que digas «dale» y arranco por la Fase 0.

1 · ¿El motor escribe por SQL o por la API?

Recomiendo SQL directo, con emisión de outbox.

Aguanta el volumen, no depende de despliegues de la API y reusa los invariantes ya validados. El outbox mantiene viva la capa de IA igual que si pasara por el núcleo.

2 · ¿Los tickets y quejas van a GLPI o a support.ticket?

Recomiendo GLPI, por su API v2, respetando el ADR-0019.

Es más trabajo (otro proyecto de Railway y otro motor de base), pero llenar support.ticket crearía el maestro duplicado que la arquitectura prohíbe expresamente.

3 · ¿Se siembra el schema network?

Recomiendo sí, solo para los tenants demo.

Son 40 tablas en cero: sin planta externa no hay alarmas, ni incidencias, ni ONU que apagar al cortar a alguien. La topología se deriva de las 46 zonas ya sembradas y no toca el inventario real de ManagerOLT.

4 · ¿Un ciclo de facturación al mes, o tres?

Recomiendo tres ciclos: días 1, 10 y 20.

Con uno solo, 60.000 facturas caen el día 1 y el resto del mes la facturación está muerta — justo lo que quieres evitar. Con tres hay movimiento repartido, y es como opera un ISP de este tamaño.

5 · ¿Tiempo real o acelerado?

Recomiendo tiempo real, con latido cada 3 minutos, y modo acelerado como botón.

El calendario avanza con el calendario de verdad, así que las fechas siempre cuadran con «hoy». El ×60 queda en el panel para demos: comprime un mes en diez minutos cuando lo necesites enseñar.

6 · ¿Los parámetros arrancan en los valores que propongo?

Recomiendo arrancar con la tabla de la sección 05 y calibrar sobre la marcha.

Están calculados contra tu base real (60.001 suscripciones, 44 cuadrillas, ARPU USD 40,90) y dan una empresa que crece ~0,9 % al mes con la cola de instalación al límite — tensa pero sana. Si tienes cifras de un ISP que conozcas mejor, se cambian en un minuto: son filas de una tabla, no código.

14 — RIESGOSLo que puede salir mal

RiesgoImpactoCómo se corta
El motor escribe en la empresa realAltoCandado demo-% verificado en cada tick; el verificador nocturno para el motor si falla
Se rompe el cuadre de saldos y la demo queda mintiendoAltoLas comprobaciones de la siembra corriendo cada noche; motor parado ante el primer descuadre
Parámetros mal puestos generan una operación absurdaMedioEl panel proyecta a 90 días antes de aplicar, con rangos topados y aviso cuando el resultado no tiene sentido
Crecimiento de disco en RailwayMedioRetención de 90 días en el outbox, particiones mensuales por adelantado, revisión de tamaño semanal
Datos que se ven falsos (curvas planas, todo a la misma hora)MedioCurva horaria, estacionalidad semanal y jitter con sal distinta por decisión — igual que hace la siembra actual
La API de GLPI cambia o se caeMedioEl generador de tickets encola y reintenta, sin parar el resto del motor
El motor corre y nadie lo mira hasta diciembreBajoResumen diario por ntfy y la Sala de Control como tablero permanente