Comandos operativos
Objetivo
Referencia completa de los comandos de consola de sy-energy: qué hace cada uno, qué parámetros acepta y qué hay que cuidar al ejecutarlo.
Audiencia
Soporte, infraestructura y desarrollo interno.
Alcance
Todos los comandos propios del sistema. No incluye los comandos estándar de Laravel (migrate, cache:clear, etc.) salvo los de cola, que sí son parte de la operación diaria.
Estado documental
- Estado: Borrador
- Última actualización: 2026-08-02
- Owner: Pendiente
- SME requerido: soporte técnico / desarrollo
- Fuente resumida: firmas y descripciones declaradas en el código de los comandos.
Antes de ejecutar en producción
Las firmas y parámetros de esta página están tomados del código. Lo que no está verificado es el efecto operativo de cada comando en producción: si es idempotente, si se puede repetir sin duplicar datos y cómo se revierte.
Los comandos marcados con ⚠️ escriben datos, generan documentos fiscales o disparan procesos externos. No ejecutarlos sin confirmar periodo, participante y alcance.
Cómo leer esta página
Todos los comandos se ejecutan desde la raíz de la instancia del participante:
php artisan <comando>Como hay una instancia por participante, lo primero siempre es confirmar en cuál se está trabajando. Un comando correcto en la instancia equivocada produce datos incorrectos sin marcar error.
ECD y documentos de CENACE
Descarga y procesamiento de los Estados de Cuenta Diarios.
| Comando | Qué hace |
|---|---|
ecd:sync {date?} {subaccounts?*} {--from=} {--to=} | Encola los estados de cuenta por subcuenta. Sin fecha usa la que reciba el scheduler. Acepta un rango con --from y --to. |
ecd:sync-store {operation_date} {subaccount} | Llama a la API de CENACE y descarga el ECD de una fecha y subcuenta concretas. Es el paso que ejecuta cada trabajo encolado por ecd:sync. |
edocuenta:sync {date?} | Sincroniza los estados de cuenta de todas las subcuentas registradas. |
sync:cenace-cfdi {--file=} {--date=} | Sincroniza los CFDI emitidos por CENACE. |
relate:cfdis {filename} {--step_2=} | Relaciona el UUID de un CFDI con su archivo usando el FUF. |
Para reprocesar un día puntual, ecd:sync-store es más preciso que volver a correr ecd:sync completo.
Facturación
⚠️ Todo lo de esta sección genera o mueve documentos fiscales.
| Comando | Qué hace |
|---|---|
ecd:create_invoices {--chunk=} {--total=} ⚠️ | Crea todas las facturas pendientes. Encola un trabajo por lote; --chunk es el tamaño del lote (1 por omisión) y --total limita cuántas se crean. |
ecd:create_invoice {--id=} {--csv} {--csv-path=} ⚠️ | Crea una factura pendiente. Con --id procesa un documento específico. Con --csv exporta los documentos seleccionados y no crea la factura. |
ecd:upload_invoices_to_s3 {date?} {--ids=} | Sube a S3 las facturas creadas en la fecha dada (hoy por omisión). Es el paso previo a que el bot las cargue al SIM. |
ecd:upload_invoices {date?} {--chunk=} {--ids=} ⚠️ | Encola en SQS la carga de las facturas al portal de CENACE. --chunk controla cuántos archivos van por mensaje (5 por omisión). |
ecd:invoices_status {--from=} {--to=} | Consulta en el SIM el estatus de las facturas cargadas. Las fechas van en formato d/m/Y. |
Usa --csv para inspeccionar antes de facturar
ecd:create_invoice --csv permite ver qué documentos están pendientes y con qué datos se facturarían, sin emitir nada. Es la forma segura de revisar antes de un cierre mensual.
Estados de cuenta
| Comando | Qué hace |
|---|---|
run:statement-account {--year=} {--month=} ⚠️ | Genera el estado de cuenta de todos los centros de carga del participante. Sin --year/--month usa el mes anterior al día en que se ejecuta. |
file:statement-account {--rmu=} {--year=} {--month=} ⚠️ | Genera el estado de cuenta de un centro de carga. Es lo que ejecuta cada trabajo encolado por run:statement-account. |
verify:mda-deals {--year=} {--month=} {--fix=} {--element_key=} | Compara la potencia MDA contratada contra la del estado de cuenta. Con --fix=true corrige las diferencias. |
file:statement-account elige el constructor según el tipo de producto del contrato activo:
| Tipo de producto | Constructor |
|---|---|
fixed (Fijo) | Estado de cuenta de costo fijo |
fixed-with-energy-loss (Fijo con pérdidas) | Estado de cuenta de costo fijo |
pass-through (Pass Through) | Estado de cuenta pass-through |
El comando falla si el centro de carga no existe, si no hay contrato activo en el periodo o si hay más de un contrato activo. Los tres casos notifican al administrador.
Cálculos pass-through
Calculan los componentes que forman el costo pass-through de un centro de carga.
| Comando | Qué hace |
|---|---|
passthrough:mda {--rmu=} {--operation_date=} | Componente del Mercado de Día en Adelanto para una fecha de operación. |
passthrough:mtr {--rmu=} {--operation_date=} | Componente del Mercado de Tiempo Real. |
passthrough:congestion {--rmu=} {--operation_date=} | Componente de congestión. |
passthrough:bandwidth {--rmu=} {--operation_date=} | Ancho de banda del centro de carga. |
passthrough:distribution {--operation_date=} | Distribución. Aplica a todos los centros de carga, no recibe RMU. |
passthrough:estimated {--rmu=} {--year=} {--month=} | Cálculo estimado del mes. |
passthrough:check-cenace-energy {starting_at} {ending_at} | Verificación, no cálculo. Revisa si falta energía de CENACE en el periodo para los contratos activos. No escribe datos. |
calculate:by-passthrough {--rmu=} {--year=} {--month=} ⚠️ | Cálculo integral del mes para un RMU: bloque de energía, CELs, capacidad y pass-through de CENACE sobre los contratos activos. |
passthrough:check-cenace-energy es la validación previa recomendada: si reporta energía faltante, los cálculos posteriores quedarán incompletos.
Cálculos por documento
| Comando | Qué hace |
|---|---|
calculate:by-ecd {slug} {--fuecd=} {--operation_date=} {--ending_at=} {--element_key=} | Ejecuta un cálculo asociado a un ECD. |
calculate:by-fuf {slug} {--fuf=} {--fuecd=} {--operation_date=} {--ending_at=} | Ejecuta un cálculo asociado a un FUF. |
calculate:critical-hours {--year=} | Calcula las 100 horas críticas del año. |
calculate:by-charge-center {--slug=} {--year=} | Cálculos anuales por centro de carga. Slug soportado: year-capacity. |
Slugs soportados por calculate:by-ecd:
cenace-energy · cenace-by-charge-center · cenace-trading · cenace-balance · tbfin-capacity · tbfin-cel · tbfin-agent-commission · fixed-energy · fixed-mda · fixed-mtr
Slug soportado por calculate:by-fuf: balance.
No todos los slugs aplican a todos los participantes
El comando dispatch:calculations excluye ciertos cálculos según el participante: para algunos, los slugs tbfin-* y fixed-* no se despachan. Es intencional y depende del modelo de negocio de cada participante, no un error de configuración.
Despacho a colas
Estos comandos no calculan: encolan trabajos para que los workers los procesen. Se usan cuando hay que recalcular volumen sin bloquear la terminal.
| Comando | Qué hace |
|---|---|
dispatch:calculations {--fuecd=} {--operation_date=} {--ending_at=} ⚠️ | Despacha los cálculos por FUF y por ECD del participante, aplicando sus exclusiones. |
dispatch:by-charge-center {--slug=} {--rmu=} {--operation_date=} {--ending_at=} | Encola cálculos por RMU. Slugs: mda, mtr, bandwidth, congestion. Sin --rmu despacha todos los centros de carga. |
dispatch:by-operation-date {--slug=} {--operation_date=} {--ending_at=} | Encola cálculos por fecha de operación. Slug: distribution. |
dispatch:by-ecd {slug} {--fuecd=} {--operation_date=} {--ending_at=} {--element_key=} | Encola un cálculo por ECD. |
dispatch:by-fuf {slug} {--fuecd=} {--fuf=} {--operation_date=} {--ending_at=} | Encola un cálculo por FUF. |
dispatch:report {--slug=} {--operation_date=} {--ending_at=} | Encola la generación de un reporte. Slug: hourly-concepts. |
dispatch:sync-service | Encola la sincronización de datos de Factura.com desde CSV. |
Efecto multiplicador de --ending_at
Con --ending_at, estos comandos recorren día por día el rango. Combinado con la ausencia de --rmu, un solo comando puede encolar miles de trabajos (centros de carga × días). Antes de usar un rango largo, correr primero un día suelto y verificar el resultado.
Demanda
| Comando | Qué hace |
|---|---|
service:demand-sync {--rmu=} {--rpu=} {--start_date=} {--end_date=} | Sincroniza la demanda desde el servicio externo. Es la tarea diaria de las 06:00. |
demand:monthly {date} {rmu} {--force=} {--retry=} ⚠️ | Crea la demanda mensual de un centro de carga. --force la crea aunque ya exista; --retry la reprocesa. |
demand:fix-hourly {starting_at} {ending_at?} {--rmu=} ⚠️ | Recalcula la demanda horaria a partir de los datos de 5 minutos. --rmu acepta varios RMU separados por coma. |
demand:fixfdp {--rmu=} {starting_at} {ending_at} ⚠️ | Corrige el FDP de un RMU en un periodo. |
Precios del MEM
| Comando | Qué hace |
|---|---|
sync:prices {type} {system} {process} {sync_type} {from_date} {to_date} ... | Sincroniza precios del mercado. Acepta filtros opcionales de nodo. |
produce:prices {limit} {type} {system} {process} {sync_type} {from_date} {to_date} ... | Obtiene los nodos y los encola para sincronizar. |
consume:prices {limit} {attempt?} | Procesa los nodos encolados. |
remove:prices {limit} {start_date} {end_date?} ⚠️ | Elimina precios ya sincronizados en el rango. |
remove:prices borra datos
No tiene confirmación interactiva ni modo de simulación. Verificar el rango de fechas antes de ejecutarlo y confirmar que existe respaldo del periodo.
Bots del SIM
| Comando | Qué hace |
|---|---|
bot:queue {--slug=} {--date=} | Encola la ejecución de un bot del SIM. |
Slugs disponibles: rea · bank-one · bank-two · bank-three · cenace-notifications · cenace-documents.
Detalle de cada bot en Bots y automatizaciones.
Reportes y consultas
Ninguno de estos modifica datos operativos.
| Comando | Qué hace |
|---|---|
validate:rates {--date=} | Revisión de cierre. Imprime, para cada estado de cuenta generado del mes de la fecha dada, el desglose por concepto: transmisión, administrativo, potencia MTR y MDA, pérdidas, capacidad, congestión y total. No valida tarifas de CFE ni escribe datos. |
export:report {--slug=} {--operation_date=} {--clear=} | Genera un reporte CSV. Slug: hourly-concepts. --clear sobrescribe el archivo si ya existe. |
contracts:active {--date=} | Exporta a CSV los contratos activos en una fecha. Útil como evidencia previa a un cierre. |
validate:rates es el último paso de los dos días del ciclo mensual: permite comparar centros de carga entre sí y detectar totales en cero, importes anómalos o conceptos faltantes antes de emitir.
Integraciones externas
| Comando | Qué hace |
|---|---|
sync:service {slug} {--uuid=} {--date=} | Sincroniza datos de servicios externos. Slugs permitidos: document, cfe-tx. |
Colas
Comandos estándar de Laravel, parte de la operación diaria.
| Comando | Qué hace |
|---|---|
queue:retry all | Reintenta todos los trabajos fallidos. Corre automáticamente a las 05:00. |
queue:failed | Lista los trabajos fallidos. Primer paso al diagnosticar un proceso que no terminó. |
queue:forget {id} | Descarta un trabajo fallido concreto. |
queue:work <conexión> | Levanta un worker. En producción los gestiona Supervisor: no lanzarlos a mano salvo para diagnóstico. |
Conexiones de cola configuradas: sqsfifo, sqscustom, database, redis, sync.
Mantenimiento
| Comando | Qué hace |
|---|---|
demo:sanitize {--dry-run} {--participant-key=} {--date-shift-years=} {--start-from=} {--only-step=} | Anonimiza una base de datos de demostración: RFC falsos, nombres de empresa ficticios, formatos RMU/RPU de demo y desplazamiento de fechas. |
Solo para bases de demostración
demo:sanitize está bloqueado en producción y exige que el nombre de la base termine en _demo. Ese bloqueo es deliberado y no debe removerse. Usar siempre --dry-run primero.
Riesgos y gaps
- No está confirmado qué comandos son idempotentes. Antes de repetir cualquiera marcado con ⚠️ sobre un periodo ya procesado, validar con desarrollo.
- No hay procedimiento documentado de reversión para los comandos que generan documentos fiscales.
- Varios comandos conservan la descripción por omisión
Command description(ecd:upload_invoices_to_s3,passthrough:check-cenace-energy,service:demand-sync,sync:prices); su propósito aquí se dedujo del código y requiere confirmación. - Falta documentar el orden correcto de los cálculos pass-through cuando se reprocesa un mes completo.
Próxima revisión
Tras la validación de soporte sobre idempotencia y reversión.