Saltar a contenido

Diseño de dominio — cortex-plugin-booking

Pista: Plugin (repo cortex-plugin-booking). El framework no implementa este dominio.

Documentación relacionada: api.md, events.md, dependencies.md.

Estado de implementación (2026-07)

Área Estado Notas
API REST slots/bookings/agenda Implementado Memoria + PostgreSQL; agenda derivada de bookings en PG
Persistencia PG Parcial postgres_store.py, Alembic en alembic/
Evento booking.confirmed Implementado Emisión en confirmación
MCP tools Implementado mcp_tools.py
UI CUS Implementado Widgets agenda/slots; sin términos legacy court
Integración payments Implementado Listener en plugin payments (booking.confirmed)

Modelo de dominio

Entidad Rol
Resource Recurso reservable (type: space, person, equipment). Atributos JSON. Dueño: plugin resources (HTTP).
Slot Ventana temporal: starts_at, ends_at, status (open, held, booked).
Booking Reserva: slot(s), client_ref, status, metadata.
AvailabilityQuery VO consulta (rango, filtros).

Tablas PostgreSQL (booking_*)

Tabla Campos clave
booking_slots id, resource_id, starts_at, ends_at, status
booking_bookings id, slot_id, client_ref, status, metadata, idempotency_key

Migraciones: alembic/. Convención ADR 017.

API REST (/api/v1/booking/)

Método Ruta Uso
GET /slots Disponibilidad (?from=&to=&resource_id=)
POST /bookings Crear reserva
GET /bookings Listar
GET /bookings/{id} Detalle
PATCH /bookings/{id}/cancel Cancelar
GET /agenda Vista agenda

Errores: SLOT_UNAVAILABLE (409), BOOKING_NOT_FOUND (404), INVALID_RANGE (422).

Eventos

Evento Cuándo
booking.confirmed Tras confirmar reserva con pago/capability

Ver events.md.

Tools MCP

Tool REST equivalente
booking_check_availability GET /slots
booking_create POST /bookings
booking_cancel PATCH /bookings/{id}/cancel
booking_list_agenda GET /agenda

Integración cross-plugin

Solo HTTP y events — sin imports Python a otros plugins.

Plugin Contrato
resources Catálogo de recursos reservables
clients client_ref vía REST
payments Listener booking.confirmed
pricing Cotización vía capability

Pendientes

  1. Tests de integración con grafo Reservas (products/unosportclub).
  2. Evento booking.cancelled (fase posterior).

Referencias