Billing
Objetivo
Documentar cómo sy-energy convierte la energía consumida en un importe a cobrar, y qué diferencia hay entre los dos modelos comerciales que soporta.
Responsabilidad del módulo
Calcular el costo de la energía por centro de carga según el contrato vigente, consolidarlo en un estado de cuenta y dejarlo listo para facturar.
Audiencia
Finanzas, operación y desarrollo interno.
Estado documental
- Estado: Borrador
- Última actualización: 2026-08-02
- Owner: Pendiente
- SME requerido: finanzas / operación
- Fuente resumida: constructores de estado de cuenta, tipos de producto y comandos de cálculo.
Los dos modelos
Todo el módulo gira alrededor de una decisión: cómo se determina el precio de la energía en el contrato.
| Tipo de producto | Cómo se cobra | Cuándo se puede facturar |
|---|---|---|
fixed — Fijo | Precio pactado en el contrato. | En cuanto cierra el mes: solo hace falta la demanda. |
fixed-with-energy-loss — Fijo con pérdidas | Precio pactado, considerando pérdidas de energía. | Igual que el fijo. |
pass-through — Pass Through | Se traslada al cliente el costo real del mercado. | Solo cuando CENACE publicó la información del periodo. |
Esa diferencia es la razón de que el ciclo mensual tenga dos fechas: día 1 para los contratos fijos, día 4 para los pass-through.
Entidades principales
| Entidad | Rol |
|---|---|
| Contrato | Vincula un centro de carga con un tipo de producto y una vigencia. |
| Centro de carga | El punto que consume energía, identificado por RMU. |
| Estado de cuenta | Documento mensual con el desglose del periodo. |
| Factura / Orden | Documento fiscal derivado del estado de cuenta. |
Un solo contrato activo
El sistema exige exactamente un contrato activo por centro de carga en el periodo. Con cero o con más de uno, la generación del estado de cuenta falla y notifica al administrador.
Es la causa más frecuente de que un centro de carga quede sin facturar en el cierre mensual.
Cómo se arma el estado de cuenta
file:statement-account --rmu --year --month
│
├─ busca el contrato activo del periodo
│
└─ según el tipo de producto:
fixed / fixed-with-energy-loss → constructor de costo fijo
pass-through → constructor pass-throughEl comando falla, sin generar documento, si el centro de carga no existe, si no hay contrato activo o si hay más de uno.
run:statement-account hace lo mismo para todos los centros de carga del participante, encolando un trabajo por cada uno. Sin --year y --month usa el mes anterior al día en que se ejecuta.
Componentes del costo pass-through
Cuando el contrato es pass-through, el costo se compone de varios conceptos que se calculan por fecha de operación:
| Componente | Comando |
|---|---|
| Mercado de Día en Adelanto | passthrough:mda |
| Mercado de Tiempo Real | passthrough:mtr |
| Congestión | passthrough:congestion |
| Distribución | passthrough:distribution |
| Ancho de banda | passthrough:bandwidth |
| Estimado del mes | passthrough:estimated |
Y el cálculo integral del mes, sobre los contratos activos del centro de carga:
php artisan calculate:by-passthrough --rmu=<RMU> --year=<YYYY> --month=<MM>Cubre bloque de energía, CELs, capacidad y pass-through de CENACE.
Otros conceptos
| Concepto | Dónde se calcula |
|---|---|
| Capacidad anual | calculate:critical-hours y calculate:by-charge-center --slug=year-capacity |
| CELs — Certificados de Energías Limpias | Dominio de CELs; entra en el cálculo integral. |
| Balances de CENACE, energía, trading y pass-through | Estrategias de reporte del sistema. |
Las 100 horas críticas del año determinan la capacidad; se calculan una vez por año, no en cada cierre.
Validaciones disponibles
| Validación | Comando |
|---|---|
| Potencia MDA contratada vs. la del estado de cuenta | verify:mda-deals --year= --month= |
| Completitud de la energía de CENACE en un periodo | passthrough:check-cenace-energy <inicio> <fin> |
| Contratos activos en una fecha | contracts:active --date= |
Las tres conviene correrlas antes de facturar, no después.
Errores comunes
| Síntoma | Causa probable |
|---|---|
| Un centro de carga no generó estado de cuenta | Cero o más de un contrato activo en el periodo. |
| Importes en cero en un contrato pass-through | El periodo se calculó antes de que CENACE publicara la información. |
| Importes incompletos | Faltan datos de demanda o huecos en el ECD. |
| Diferencias de potencia MDA | Discrepancia entre contrato y estado de cuenta; revisar con verify:mda-deals. |
Evidencia esperada
- Exportación de contratos activos del periodo.
- Estado de cuenta generado para cada centro de carga esperado.
- Resultado de las validaciones previas al cierre.
Riesgos y gaps
- No está documentada la fórmula de cada componente pass-through; esta página describe el flujo, no el cálculo.
- No está documentado el tratamiento de un periodo reliquidado por CENACE después de facturar.
- No hay una vista única que muestre qué centros de carga quedaron sin estado de cuenta en un cierre.
- No está confirmado si los cálculos son idempotentes al repetirse sobre un periodo ya procesado.
Próxima revisión
Al resolver las preguntas abiertas del ciclo mensual de facturación.