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.
| 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
- Tests de integración con grafo Reservas (
products/unosportclub). - Evento
booking.cancelled (fase posterior).
Referencias