Diagramas de Ingeniería
Los diagramas de esta página reflejan la arquitectura v0.4.x. El detalle tabular de entidades está en Modelo de Datos; el despliegue operativo en el manual de integración (deployment).
Arquitectura General
Nota histórica: versiones anteriores desplegaban la API en Firebase Functions; el runtime principal en v0.4.x es Express en imagen Docker unificada (ver xref:diagrams.adoc#_arquitectura_de_despliegue).
Flujos del Sistema
Flujo de reserva (operador / panel)
Alineado con xref:workflows.adoc#_flujo_de_reserva_por_operador y ruta panel /booking.
Flujo cuenta: el cliente puede reservar vía app (/account/*); los estados y la hora mural siguen la misma tabla reservation.
Comprobante de pago en reserva
Subida al crear el pago (POST /admin/booking/{bookingId}/payment) o actualizar uno existente (PATCH …/payment/{paymentId} en multipart con campo foto). El bucket S3/R2 permanece privado; la URL en payment.foto es referencia interna para el proxy de descarga.
Migración: functions/db/migrations/089_payment_foto.sql (payment.foto TEXT).
Límites: JPEG, PNG o WebP; máximo 5 MB. En POST JSON sin archivo conserva compatibilidad con integraciones que no envían comprobante. Si el Content-Type es multipart/form-data, el campo foto es obligatorio (POST al crear; PATCH para añadir o reemplazar comprobante).
Variables de entorno: ver Almacenamiento de comprobantes.
Visualización privada del comprobante
El panel no expone la URL de R2 al navegador. El operador abre el comprobante desde /booking/payment/:id con el botón Ver (si payment.foto está presente), lo sube con el botón verde (Subir) o lo quita desde el modal con el botón rojo (Eliminar comprobante).
Flujo creación de evento (panel PMV)
Ver xref:events-tournaments-module.adoc y xref:workflows.adoc#_flujo_de_creación_de_evento_operador.
Modelo de Datos
Diagrama ER resumido coherente con xref:data-model.adoc. No incluye todas las tablas del sistema.
Arquitectura de Despliegue
Tags CI: rama N.M publica imagen staging; tag vX.Y.Z dispara build + release a GHCR.
Sistema Relay
Notificaciones en tiempo real vía Socket.io. El subgraph DomainEvents son mensajes de dominio (reservas, pagos); no es el módulo «Eventos» del panel (event / event_participant).