Saltar a contenido

Composición — caso de uso Reservas

Grafo canónico del caso de uso Reservas (implementación UnoSportClub). Fuente machine-readable: composition.py (REFERENCE_GRAPH).

Árbol por capas

Capa Plugins
Fundación clients, resources, payments, discounts
Catálogo pricing
Operaciones booking, sales
Extensión events, store, subscriptions
Finanzas accounting, billing
Plataforma ai-agents

Grafo de dominio

plugin_id requires (hard) optional_requires provides
clients — — clients
resources — — resources
pricing resources — pricing
booking resources clients, pricing, payments, discounts booking
payments — — payments
sales clients, payments pricing, discounts sales
events booking, clients sales events
discounts — — discounts
accounting — payments, sales accounting
store — sales store
subscriptions clients payments subscriptions
billing clients payments, accounting billing
ai-agents — booking, clients, payments ai-agents

Leyenda:

  • requires: boot falla en CORTEX_PLUGIN_DEPS=strict si el proveedor no está activo.
  • optional_requires: el plugin carga; UI y flujos consultan capabilities y degradan.
  • provides: capability indexada en GET /api/v1/control/capabilities.

Validación en CI

Capa Qué valida
products/unosportclub/tests Descriptores == REFERENCE_GRAPH; bundles cerrados; sin ciclos; sin imports cruzados entre plugins
Boot validate_plugin_dependencies requires hard según CORTEX_PLUGIN_DEPS (framework, agnóstico de producto)

Añadir un plugin al caso de uso

  1. Descriptor en el plugin (requires, optional_requires, provides).
  2. Nodo en REFERENCE_GRAPH del paquete cortex-product-unosportclub.
  3. Entrada en dependency-contracts.md y docs locales del plugin.
  4. Perfil pip si aplica (bundles.md).