Skip to content

Plataforma técnica · Orchestrator

Command (Bounded Context)

Orchestrator Command Admin

Command es el bounded context que opera la plataforma SaaS: provisiona tenants, vigila sesiones activas, expone el dashboard ejecutivo y administra el catálogo canónico (manual y plan de cuentas template) que se distribuye a cada tenant.

Vive en orchestrator/src/domain/command/ y se expone bajo prefijos /api/tenant*, /api/sessions, /api/command/* y /api/monitoring. Acceso restringido a roles SUPER_ADMIN y ADMIN.

flowchart LR
  subgraph CLI["Super Admin (Sevastopol islands)"]
    UI["Command Center"]
  end

  subgraph CMD["domain/command/"]
    direction TB
    T["TenantService"]
    S["SessionService"]
    M["MonitoringService"]
    MC["manual-cuentas/<br/>ManualCuentasService"]
    PCS["plan-cuentas-sync/<br/>PlanCuentasSyncService"]
  end

  subgraph PG[("PostgreSQL · nostromo_command")]
    TT["command.tenants"]
    VTI["command.v_tenant_info"]
    AUS["auth.user_sessions"]
    VDS["monitoring.v_dashboard_summary"]
  end

  subgraph MG[("MongoDB · nostromo_manual")]
    CUE["cuentas"]
  end

  subgraph TPL[("PostgreSQL · accounting_template")]
    PCT["plan_contable"]
  end

  subgraph TNT[("PostgreSQL · nostromo_&lt;rut&gt; (cada tenant)")]
    PCN["plan_contable"]
  end

  UI --> T & S & M & MC & PCS
  T --> TT & VTI
  S --> AUS
  M --> VDS
  MC --> CUE
  MC -. valida códigos .-> PCT
  PCS <-->|diff &amp; sync| PCT
  PCS -->|propaga| PCN
Necesidad operacionalServicio responsable
”Necesito dar de alta una empresa nueva.”TenantService + tenant-db.ts
”Hay un usuario sospechoso conectado, sácalo.”SessionService.terminateSession
”¿Cómo está el sistema?” (CEO dashboard)MonitoringService.getSummary
”Falta documentación para la cuenta 1101030.”ManualCuentasService.save
”Agregamos una cuenta nueva al template, propágala a todos.”PlanCuentasSyncService.createCuentaInTemplate({ propagate: true })
”Tenant X tiene cuentas que no están en template — ¿son locales o huérfanas?”PlanCuentasSyncService.getDiff
  • api/endpoints/: contratos HTTP de estos servicios documentados en Command Center API y Auth y Sesión API.
  • services/: los servicios de dominios de negocio (payroll, activo-fijo, etc.) no viven aquí — son bounded contexts separados.
  • observabilidad/: el sistema de audit log y métricas Prometheus es infraestructura cross-cutting (middleware en lib/audit.ts y middleware/metrics.ts), distinta del MonitoringService que solo lee dashboards.
  • agentes: el registry de agentes (/api/agent/registry, /api/agent/tasks) se documenta como parte de Command Center API. Se enruta bajo routes/command/ por conveniencia administrativa pero vive en services/agent/, fuera del dominio Command.
BasePoolSchemas/Colecciones consumidos
nostromo_commandcentralPoolcommand.tenants, command.v_tenant_info, auth.user_sessions, monitoring.v_dashboard_summary
accounting_templategetTenantPool('accounting_template')plan_contable (template canónico)
nostromo_<rut>getTenantPool(db)plan_contable por tenant (sync destino)
nostromo_manualgetManualDb() (MongoDB)cuentas (documentación contable)

Todos los endpoints del dominio Command están protegidos por authenticateToken + authorizeRoute. Las operaciones destructivas (PUT/DELETE de tenants, terminate session, delete cuenta del template) verifican adicionalmente req.user.role === 'SUPER_ADMIN' en el handler. Ver Auth y Sesión API para el contrato de roles.