Skip to content

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:

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

ComandoQué 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.

ComandoQué 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

ComandoQué 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 productoConstructor
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.

ComandoQué 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

ComandoQué 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.

ComandoQué 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-serviceEncola 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

ComandoQué 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

ComandoQué 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

ComandoQué 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.

ComandoQué 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

ComandoQué 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.

ComandoQué hace
queue:retry allReintenta todos los trabajos fallidos. Corre automáticamente a las 05:00.
queue:failedLista 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

ComandoQué 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.