2026-06-01 — Modelo de estados, roles y staff

Durante el fin de semana se hizo una actualización grande que toca las tres capas del sistema. Tres ejes principales:

  1. Modelo de estados de órdenes, pagos, cupones e inscripciones (más predecible, con correcciones explícitas).
  2. Nuevo modelo de roles anidados, con un permiso compartido de “gestionar inscripciones”.
  3. Adiós a los “Coordinadores”: ese concepto lo absorbió el Staff de cada actividad.

Para entender el porqué

El marco conceptual detrás de estos cambios está explicado en Modelo del dominio.

Backend (API y plugin)

  • Nuevo modelo de roles anidados. Se incorporaron los roles Gestor de inscripciones (registration_manager) y Gestor de productos (product_manager), y Gestor de tienda recuperó el poder de escritura completo sobre la tienda. Todos los roles de gestión comparten un permiso nuevo de gestionar inscripciones (cdc_manage_registrations). Los “gestores de tienda” que antes estaban forzados a sólo lectura se migraron automáticamente a Gestor de inscripciones.
  • Coordinadores → Staff. Se eliminó el campo coordinadores de las actividades. Las notificaciones de una actividad (nuevas inscripciones, activación de lista de espera, alertas de stock, copias de notas al inscripto) ahora se mandan al staff (inscripciones de tipo Staff). Una migración convirtió cada coordinador existente en una inscripción de staff con la nota “Coordinador migrado”.
  • Modelo de estados y cupones más robusto:
    • Predicado “¿está pagada?” único por medio de pago (tarjeta, transferencia, efectivo, cupón), consumido por todo el sistema.
    • Cupones de promoción como proyección: se recalculan según un estado deseado (se emiten también para transferencia y efectivo, y se borran solos al revertir un pago o cancelar la inscripción), en lugar de reglas por transición.
    • Una sola puerta de cancelación (CancelRegistration): el cambio de estado de la orden dejó de cancelar la inscripción “en cascada”.
    • Guarda de evidencia para confirmar: ya no se puede confirmar una inscripción sin una orden pagada que la respalde.
    • Comandos correctivos con nombre: Anular pago y Registrar devolución (con motivo / nota obligatoria), en reemplazo del dropdown libre.
  • Validación de Documento Nacional ajustada (se relaja para inscripciones de staff).
  • Despliegue (CI): el deploy del tema y los mu-plugins pasó a hacerse por SSH/rsync en lugar de FTPS.

Frontend (panel de administración)

  • Acciones correctivas en el detalle de la orden: botones “Anular pago” y “Registrar devolución” (con motivo/nota obligatoria). El dropdown de estado de la orden se restringió: la tarjeta queda de sólo lectura y ya no se ofrece cancelar/reembolsar la orden a mano (la salida es cancelar la inscripción). Se integró el medio de pago en las vistas de órdenes e inscripciones.
  • Nuevos roles en el panel: aparecen Gestor de productos y Gestor de inscripciones en la administración de usuarios, filtros y tooltips de ayuda.
  • Terminología Coordinadores → Staff en todos los componentes: alta de staff de una actividad, notas, barra de estadísticas, tooltips; y se quitó la funcionalidad de “coordinadores” de la tabla y el detalle de productos.
  • “Comprador” → “Usuario” en el detalle de inscripción, alineado con el nuevo modelo de roles.
  • Las inscripciones promocionales ocultan los campos de logística y dieta que no aplican, y se agregó un aviso para la emisión pendiente de cupón promocional.

Documentación (este sitio)

  • El repositorio de documentación se incorporó a la raíz del proyecto y la carpeta de contenido se renombró a docs.
  • Se publicó el artículo Modelo del dominio, con diagramas, como puerta de entrada conceptual.
  • Se actualizó la sección de Personas con el nuevo modelo de roles y se explicó el concepto de Staff (antes Coordinadores) en todas las páginas donde aparecía (Actividades, Inscripciones, Inventario, Lista de espera).
  • Se creó este apartado de Cambios.