How nmartinezr-qa/boleteria works
1. Tipo de aplicación y runtime
- Es una aplicación de escritorio WinForms sobre .NET 8 (net8.0-windows) llamada Boletería.
- No hay base de datos ni servicios externos: la persistencia es en memoria durante la ejecución.
2. Arquitectura general por capas
- El sistema está dividido en cuatro capas claras:
- Presentación: formularios WinForms.
- Lógica de negocio: servicios con validaciones y reglas.
- Acceso a datos: gestores que administran colecciones en memoria.
- Entidades: modelo de dominio.
- Esta separación es el boundary principal del repositorio.
3. Punto de entrada y navegación
- Program.cs inicia la app y abre Presentacion/Principal.cs.
- Desde el formulario principal se navega a tres grupos funcionales:
- Gestiones
- Consultas
- Operaciones
- Los formularios intermedios (FrmGestiones, FrmConsultas, FrmOperaciones) actúan como menús de navegación, no como lógica de negocio.
4. Subsistema de gestión de maestros
- Los formularios de gestión registran entidades base:
- clientes, vendedores, partidos y localidades.
- Cada formulario tiene su servicio correspondiente:
- ServicioCliente, ServicioVendedor, ServicioPartido, ServicioLocalidad.
- El flujo típico es: formulario → servicio → gestor → DatosSistema.
- Aquí se crean y validan los datos maestros que luego usa el módulo de ventas.
5. Subsistema de asignación de capacidad por partido
- LocalidadPorPartido es una entidad de relación entre Partido y Localidad.
- Este módulo define qué localidades están disponibles para cada partido y en qué cantidad.
- Lo manejan ServicioLocalidadPorPartido y GestorLocalidadesPorPartido.
- Es un boundary importante porque conecta catálogo de localidades con disponibilidad real para ventas.
6. Subsistema de venta de entradas
- FrmVentaDeEntradas es el flujo operativo más importante.
- ServicioVenta valida:
- existencia de cliente, vendedor, partido y localidad,
- existencia de la relación LocalidadPorPartido,
- disponibilidad de entradas,
- cantidad solicitada,
- cálculo del total.
- Luego registra la Venta mediante GestorVentas y descuenta stock en la asignación partido-localidad.
- Este es el flujo con más dependencias cruzadas entre capas.
7. Subsistema de consultas
- Los formularios FrmConsultar* exponen lectura de clientes, vendedores, partidos, localidades, relaciones y ventas.
- No modifican estado: consumen servicios para listar y filtrar información.
- La consulta de ventas muestra una vista compuesta con cliente, vendedor, partido, localidad, cantidad, fecha y total.
8. Modelo de dominio
- Persona es la base común para Cliente y Vendedor.
- Partido, Localidad, LocalidadPorPartido y Venta modelan el negocio de boletería.
- Venta referencia a las demás entidades y representa la transacción final.
- El diagrama debe mostrar claramente estas relaciones, sobre todo la composición de Venta y la relación muchos-a-muchos resuelta por LocalidadPorPartido.
9. Acceso a datos en memoria
- DatosSistema.cs centraliza las colecciones compartidas del sistema.
- Los gestores (GestorClientes, GestorVendedores, GestorPartidos, GestorLocalidades, GestorLocalidadesPorPartido, GestorVentas) son wrappers sobre ese almacén común.
- No hay repositorios separados por base de datos; el “storage” real es una clase estática compartida.
10. Reglas y validaciones
- Las reglas de negocio viven en la capa de servicios, no en los formularios.
- Se validan campos requeridos, duplicados, identificadores, estado activo del partido, disponibilidad de localidades y stock suficiente.
- MensajesError y MensajesExito centralizan el texto de feedback para mantener consistencia entre formularios y servicios.
11. Infraestructura de UI
- La interfaz usa formularios .Designer.cs y recursos .resx de WinForms.
- Presentacion/Utilidades/EstilosUI.cs sugiere un pequeño soporte de estilo visual compartido.
- La UI está organizada por módulos funcionales, no por tipo técnico.
12. Lectura arquitectónica para diagrama
- Dibujar de arriba abajo:
- Presentación como capa de entrada.
- Servicios como frontera de validación y coordinación.
- Gestores + DatosSistema como almacenamiento operativo.
- Entidades como núcleo de dominio.
- El flujo más crítico a destacar es el de ventas, porque conecta casi todo el sistema y actualiza disponibilidad.
Main entry points: FrmConsultas.cs Consultas · MensajesError.cs MensajesError · DatosSistema.cs DatosSistema · FrmGestiones.cs Gestiones
Components 34
Presentación
Entrada WinForms, navegación y formularios por módulo
- Program · Punto de entrada de la aplicación WinForms
Program.cs - Principal · Ventana principal que deriva la navegación a los módulos
Presentacion/Principal.cs - Gestiones · Menú de navegación para altas y mantenimiento
Presentacion/Gestiones/FrmGestiones.cs - Consultas · Menú de navegación para pantallas de lectura
Presentacion/Consultas/FrmConsultas.cs - Operaciones · Menú de navegación para flujos operativos
Presentacion/Operaciones/FrmOperaciones.cs - Clientes · Alta y edición de clientes
Presentacion/Gestiones/FrmClientes.cs - Vendedores · Alta y edición de vendedores
Presentacion/Gestiones/FrmVendedores.cs - Partidos · Alta y edición de partidos
Presentacion/Gestiones/FrmPartidos.cs - Localidades · Alta y edición de localidades
Presentacion/Gestiones/FrmLocalidades.cs - Localidad/Partido · Asignación de localidades disponibles por partido
Presentacion/Operaciones/FrmLocalidadPorPartido.cs - Venta entradas · Flujo principal para registrar ventas
Presentacion/Operaciones/FrmVentaDeEntradas.cs - Consulta clientes · Listado y lectura de clientes
Presentacion/Consultas/FrmConsultarClientes.cs - Consulta vendedores · Listado y lectura de vendedores
Presentacion/Consultas/FrmConsultarVendedores.cs - Consulta partidos · Listado y lectura de partidos
Presentacion/Consultas/FrmConsultarPartidos.cs - Consulta localidades · Listado y lectura de localidades
Presentacion/Consultas/FrmConsultarLocalidades.cs - Consulta rel. partido · Listado de localidades por partido
Presentacion/Consultas/FrmConsultarLocalidadesPorPartido.cs - Consulta ventas · Vista compuesta de ventas y sus entidades relacionadas
Presentacion/Consultas/FrmConsultarVentas.cs
Lógica de negocio
Servicios, validaciones y mensajes compartidos
- ServicioCliente · Validación y coordinación de clientes
LogicaNegocios/Servicios/ServicioCliente.cs - ServicioVendedor · Validación y coordinación de vendedores
LogicaNegocios/Servicios/ServicioVendedor.cs - ServicioPartido · Validación y coordinación de partidos
LogicaNegocios/Servicios/ServicioPartido.cs - ServicioLocalidad · Validación y coordinación de localidades
LogicaNegocios/Servicios/ServicioLocalidad.cs - ServicioLocalidadPartido · Administra la disponibilidad de localidades por partido
LogicaNegocios/Servicios/ServicioLocalidadPorPartido.cs - ServicioVenta · Valida y registra ventas, calcula total y descuenta stock
LogicaNegocios/Servicios/ServicioVenta.cs - MensajesError · Textos centralizados de error
LogicaNegocios/Mensajes/MensajesError.cs - MensajesExito · Textos centralizados de éxito
LogicaNegocios/Mensajes/MensajesExito.cs
Acceso a datos
Gestores en memoria y almacenamiento compartido
- DatosSistema · Colecciones compartidas en memoria para todo el sistema
AccesoDatos/DatosSistema.cs - GestorClientes · Wrapper de acceso en memoria para clientes
AccesoDatos/GestorClientes.cs - GestorVendedores · Wrapper de acceso en memoria para vendedores
AccesoDatos/GestorVendedores.cs - GestorPartidos · Wrapper de acceso en memoria para partidos
AccesoDatos/GestorPartidos.cs - GestorLocalidades · Wrapper de acceso en memoria para localidades
AccesoDatos/GestorLocalidades.cs - GestorLoc/Partido · Wrapper de acceso en memoria para localidades por partido
AccesoDatos/GestorLocalidadPorPartido.cs - GestorVentas · Wrapper de acceso en memoria para ventas
AccesoDatos/GestorVentas.cs
Connections 48
- Program → Principal: abre · El arranque muestra la ventana principal
- Principal → Gestiones: navega · Deriva a mantenimiento de maestros
- Principal → Consultas: navega · Deriva a pantallas de lectura
- Principal → Operaciones: navega · Deriva a flujos operativos
- Gestiones → Clientes: abre · Acceso al alta de clientes
- Gestiones → Vendedores: abre · Acceso al alta de vendedores
- Gestiones → Partidos: abre · Acceso al alta de partidos
- Gestiones → Localidades: abre · Acceso al alta de localidades
- Operaciones → Localidad/Partido: abre · Acceso a la asignación de localidades por partido
- Operaciones → Venta entradas: abre · Acceso al flujo de venta de entradas
- Consultas → Consulta clientes: abre · Acceso a consulta de clientes
- Consultas → Consulta vendedores: abre · Acceso a consulta de vendedores
- Consultas → Consulta partidos: abre · Acceso a consulta de partidos
- Consultas → Consulta localidades: abre · Acceso a consulta de localidades
- Consultas → Consulta rel. partido: abre · Acceso a consulta de relaciones partido-localidad
- Consultas → Consulta ventas: abre · Acceso a consulta de ventas
- Clientes → ServicioCliente: usa · La UI delega validación y registro al servicio
- Vendedores → ServicioVendedor: usa · La UI delega validación y registro al servicio
- Partidos → ServicioPartido: usa · La UI delega validación y registro al servicio
- Localidades → ServicioLocalidad: usa · La UI delega validación y registro al servicio
- Localidad/Partido → ServicioLocalidadPartido: usa · La UI delega la asignación al servicio
- Venta entradas → ServicioVenta: usa · La UI delega validaciones y persistencia de venta
- Consulta clientes → ServicioCliente: lee · Consulta información de clientes
- Consulta vendedores → ServicioVendedor: lee · Consulta información de vendedores
- Consulta partidos → ServicioPartido: lee · Consulta información de partidos
- Consulta localidades → ServicioLocalidad: lee · Consulta información de localidades
- Consulta rel. partido → ServicioLocalidadPartido: lee · Consulta la asignación partido-localidad
- Consulta ventas → ServicioVenta: lee · Consulta ventas y su vista compuesta
- ServicioCliente → GestorClientes: coordina · Servicio de clientes coordina con el gestor
- ServicioVendedor → GestorVendedores: coordina · Servicio de vendedores coordina con el gestor
- ServicioPartido → GestorPartidos: coordina · Servicio de partidos coordina con el gestor
- ServicioLocalidad → GestorLocalidades: coordina · Servicio de localidades coordina con el gestor
- ServicioLocalidadPartido → GestorLoc/Partido: coordina · Servicio de relaciones coordina con el gestor
- ServicioVenta → GestorVentas: registra · Servicio de ventas persiste la transacción
- GestorClientes → DatosSistema: usa · Lee y escribe la colección compartida
- GestorVendedores → DatosSistema: usa · Lee y escribe la colección compartida
- GestorPartidos → DatosSistema: usa · Lee y escribe la colección compartida
- GestorLocalidades → DatosSistema: usa · Lee y escribe la colección compartida
- GestorLoc/Partido → DatosSistema: usa · Lee y escribe la colección compartida
- GestorVentas → DatosSistema: usa · Lee y escribe la colección compartida
- ServicioCliente → MensajesError: valida · Usa mensajes centralizados de error
- ServicioVendedor → MensajesError: valida · Usa mensajes centralizados de error
- ServicioPartido → MensajesError: valida · Usa mensajes centralizados de error
- ServicioLocalidad → MensajesError: valida · Usa mensajes centralizados de error
- ServicioLocalidadPartido → MensajesError: valida · Usa mensajes centralizados de error
- ServicioVenta → MensajesError: valida · Usa mensajes centralizados de error
- ServicioVenta → MensajesExito: confirma · Usa mensajes centralizados de éxito
- Persona → Cliente: base de · Cliente hereda de Persona