# nmartinezr-qa/boleteria architecture

> Architecture diagram of the GitHub repository nmartinezr-qa/boleteria, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-06-20). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/nmartinezr-qa/boleteria
- Repository: https://github.com/nmartinezr-qa/boleteria

## Overview

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: [`Presentacion/Consultas/FrmConsultas.cs`](https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Consultas/FrmConsultas.cs) (Consultas), [`LogicaNegocios/Mensajes/MensajesError.cs`](https://github.com/nmartinezr-qa/boleteria/blob/master/LogicaNegocios/Mensajes/MensajesError.cs) (MensajesError), [`AccesoDatos/DatosSistema.cs`](https://github.com/nmartinezr-qa/boleteria/blob/master/AccesoDatos/DatosSistema.cs) (DatosSistema), [`Presentacion/Gestiones/FrmGestiones.cs`](https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Gestiones/FrmGestiones.cs) (Gestiones)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_presentation["Presentación"]
  node_program["Program<br/>startup<br/>[Program.cs]"]
  node_principal["Principal<br/>shell form<br/>[Principal.cs]"]
  node_frm_gestiones["Gestiones<br/>menu form<br/>[FrmGestiones.cs]"]
  node_frm_consultas["Consultas<br/>menu form<br/>[FrmConsultas.cs]"]
  node_frm_operaciones["Operaciones<br/>menu form<br/>[FrmOperaciones.cs]"]
  node_frm_clientes["Clientes<br/>maintenance form<br/>[FrmClientes.cs]"]
  node_frm_vendedores["Vendedores<br/>maintenance form<br/>[FrmVendedores.cs]"]
  node_frm_partidos["Partidos<br/>maintenance form<br/>[FrmPartidos.cs]"]
  node_frm_localidades["Localidades<br/>maintenance form<br/>[FrmLocalidades.cs]"]
  node_frm_loc_partido["Localidad/Partido<br/>operation form"]
  node_frm_venta["Venta entradas<br/>operation form"]
  node_frm_cons_cli["Consulta clientes<br/>query form"]
  node_frm_cons_ven["Consulta vendedores<br/>query form"]
  node_frm_cons_par["Consulta partidos<br/>query form"]
  node_frm_cons_loc["Consulta localidades<br/>query form"]
  node_frm_cons_rel["Consulta rel. partido<br/>query form"]
  node_frm_cons_vent["Consulta ventas<br/>query form"]
end

subgraph group_business["Lógica de negocio"]
  node_serv_cliente["ServicioCliente<br/>[ServicioCliente.cs]"]
  node_serv_vendedor["ServicioVendedor"]
  node_serv_partido["ServicioPartido<br/>[ServicioPartido.cs]"]
  node_serv_localidad["ServicioLocalidad"]
  node_serv_loc_partido["ServicioLocalidadPartido"]
  node_serv_venta["ServicioVenta<br/>[ServicioVenta.cs]"]
  node_msg_error["MensajesError<br/>message catalog<br/>[MensajesError.cs]"]
  node_msg_exito["MensajesExito<br/>message catalog<br/>[MensajesExito.cs]"]
end

subgraph group_data["Acceso a datos"]
  node_datos[("DatosSistema<br/>in-memory store<br/>[DatosSistema.cs]")]
  node_gest_clientes["GestorClientes<br/>manager<br/>[GestorClientes.cs]"]
  node_gest_vendedores["GestorVendedores<br/>manager"]
  node_gest_partidos["GestorPartidos<br/>manager<br/>[GestorPartidos.cs]"]
  node_gest_localidades["GestorLocalidades<br/>manager"]
  node_gest_loc_partido["GestorLoc/Partido<br/>manager"]
  node_gest_ventas["GestorVentas<br/>manager<br/>[GestorVentas.cs]"]
end

subgraph group_domain["Entidades"]
  node_persona(("Persona<br/>entity base<br/>[Persona.cs]"))
  node_cliente(("Cliente<br/>entity<br/>[Cliente.cs]"))
end

node_program -->|"abre"| node_principal
node_principal -->|"navega"| node_frm_gestiones
node_principal -->|"navega"| node_frm_consultas
node_principal -->|"navega"| node_frm_operaciones
node_frm_gestiones -->|"abre"| node_frm_clientes
node_frm_gestiones -->|"abre"| node_frm_vendedores
node_frm_gestiones -->|"abre"| node_frm_partidos
node_frm_gestiones -->|"abre"| node_frm_localidades
node_frm_operaciones -->|"abre"| node_frm_loc_partido
node_frm_operaciones -->|"abre"| node_frm_venta
node_frm_consultas -->|"abre"| node_frm_cons_cli
node_frm_consultas -->|"abre"| node_frm_cons_ven
node_frm_consultas -->|"abre"| node_frm_cons_par
node_frm_consultas -->|"abre"| node_frm_cons_loc
node_frm_consultas -->|"abre"| node_frm_cons_rel
node_frm_consultas -->|"abre"| node_frm_cons_vent
node_frm_clientes -->|"usa"| node_serv_cliente
node_frm_vendedores -->|"usa"| node_serv_vendedor
node_frm_partidos -->|"usa"| node_serv_partido
node_frm_localidades -->|"usa"| node_serv_localidad
node_frm_loc_partido -->|"usa"| node_serv_loc_partido
node_frm_venta -->|"usa"| node_serv_venta
node_frm_cons_cli -->|"lee"| node_serv_cliente
node_frm_cons_ven -->|"lee"| node_serv_vendedor
node_frm_cons_par -->|"lee"| node_serv_partido
node_frm_cons_loc -->|"lee"| node_serv_localidad
node_frm_cons_rel -->|"lee"| node_serv_loc_partido
node_frm_cons_vent -->|"lee"| node_serv_venta
node_serv_cliente -->|"coordina"| node_gest_clientes
node_serv_vendedor -->|"coordina"| node_gest_vendedores
node_serv_partido -->|"coordina"| node_gest_partidos
node_serv_localidad -->|"coordina"| node_gest_localidades
node_serv_loc_partido -->|"coordina"| node_gest_loc_partido
node_serv_venta -->|"registra"| node_gest_ventas
node_gest_clientes -->|"usa"| node_datos
node_gest_vendedores -->|"usa"| node_datos
node_gest_partidos -->|"usa"| node_datos
node_gest_localidades -->|"usa"| node_datos
node_gest_loc_partido -->|"usa"| node_datos
node_gest_ventas -->|"usa"| node_datos
node_serv_cliente -.->|"valida"| node_msg_error
node_serv_vendedor -.->|"valida"| node_msg_error
node_serv_partido -.->|"valida"| node_msg_error
node_serv_localidad -.->|"valida"| node_msg_error
node_serv_loc_partido -.->|"valida"| node_msg_error
node_serv_venta -.->|"valida"| node_msg_error
node_serv_venta -.->|"confirma"| node_msg_exito
node_persona -->|"base de"| node_cliente

click node_program "https://github.com/nmartinezr-qa/boleteria/blob/master/Program.cs"
click node_principal "https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Principal.cs"
click node_frm_gestiones "https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Gestiones/FrmGestiones.cs"
click node_frm_consultas "https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Consultas/FrmConsultas.cs"
click node_frm_operaciones "https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Operaciones/FrmOperaciones.cs"
click node_frm_clientes "https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Gestiones/FrmClientes.cs"
click node_frm_vendedores "https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Gestiones/FrmVendedores.cs"
click node_frm_partidos "https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Gestiones/FrmPartidos.cs"
click node_frm_localidades "https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Gestiones/FrmLocalidades.cs"
click node_frm_loc_partido "https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Operaciones/FrmLocalidadPorPartido.cs"
click node_frm_venta "https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Operaciones/FrmVentaDeEntradas.cs"
click node_frm_cons_cli "https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Consultas/FrmConsultarClientes.cs"
click node_frm_cons_ven "https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Consultas/FrmConsultarVendedores.cs"
click node_frm_cons_par "https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Consultas/FrmConsultarPartidos.cs"
click node_frm_cons_loc "https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Consultas/FrmConsultarLocalidades.cs"
click node_frm_cons_rel "https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Consultas/FrmConsultarLocalidadesPorPartido.cs"
click node_frm_cons_vent "https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Consultas/FrmConsultarVentas.cs"
click node_serv_cliente "https://github.com/nmartinezr-qa/boleteria/blob/master/LogicaNegocios/Servicios/ServicioCliente.cs"
click node_serv_vendedor "https://github.com/nmartinezr-qa/boleteria/blob/master/LogicaNegocios/Servicios/ServicioVendedor.cs"
click node_serv_partido "https://github.com/nmartinezr-qa/boleteria/blob/master/LogicaNegocios/Servicios/ServicioPartido.cs"
click node_serv_localidad "https://github.com/nmartinezr-qa/boleteria/blob/master/LogicaNegocios/Servicios/ServicioLocalidad.cs"
click node_serv_loc_partido "https://github.com/nmartinezr-qa/boleteria/blob/master/LogicaNegocios/Servicios/ServicioLocalidadPorPartido.cs"
click node_serv_venta "https://github.com/nmartinezr-qa/boleteria/blob/master/LogicaNegocios/Servicios/ServicioVenta.cs"
click node_msg_error "https://github.com/nmartinezr-qa/boleteria/blob/master/LogicaNegocios/Mensajes/MensajesError.cs"
click node_msg_exito "https://github.com/nmartinezr-qa/boleteria/blob/master/LogicaNegocios/Mensajes/MensajesExito.cs"
click node_datos "https://github.com/nmartinezr-qa/boleteria/blob/master/AccesoDatos/DatosSistema.cs"
click node_gest_clientes "https://github.com/nmartinezr-qa/boleteria/blob/master/AccesoDatos/GestorClientes.cs"
click node_gest_vendedores "https://github.com/nmartinezr-qa/boleteria/blob/master/AccesoDatos/GestorVendedores.cs"
click node_gest_partidos "https://github.com/nmartinezr-qa/boleteria/blob/master/AccesoDatos/GestorPartidos.cs"
click node_gest_localidades "https://github.com/nmartinezr-qa/boleteria/blob/master/AccesoDatos/GestorLocalidades.cs"
click node_gest_loc_partido "https://github.com/nmartinezr-qa/boleteria/blob/master/AccesoDatos/GestorLocalidadPorPartido.cs"
click node_gest_ventas "https://github.com/nmartinezr-qa/boleteria/blob/master/AccesoDatos/GestorVentas.cs"
click node_persona "https://github.com/nmartinezr-qa/boleteria/blob/master/Entidades/Persona.cs"
click node_cliente "https://github.com/nmartinezr-qa/boleteria/blob/master/Entidades/Cliente.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_program,node_principal,node_frm_gestiones,node_frm_consultas,node_frm_operaciones,node_frm_clientes,node_frm_vendedores,node_frm_partidos,node_frm_localidades,node_frm_loc_partido,node_frm_venta,node_frm_cons_cli,node_frm_cons_ven,node_frm_cons_par,node_frm_cons_loc,node_frm_cons_rel,node_frm_cons_vent toneBlue
class node_serv_cliente,node_serv_vendedor,node_serv_partido,node_serv_localidad,node_serv_loc_partido,node_serv_venta,node_msg_error,node_msg_exito toneAmber
class node_datos,node_gest_clientes,node_gest_vendedores,node_gest_partidos,node_gest_localidades,node_gest_loc_partido,node_gest_ventas toneMint
class node_persona,node_cliente toneRose
```

## Components

### Presentación

Entrada WinForms, navegación y formularios por módulo

- [Program](https://github.com/nmartinezr-qa/boleteria/blob/master/Program.cs): startup · Punto de entrada de la aplicación WinForms · `Program.cs`
- [Principal](https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Principal.cs): shell form · Ventana principal que deriva la navegación a los módulos · `Presentacion/Principal.cs`
- [Gestiones](https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Gestiones/FrmGestiones.cs): menu form · Menú de navegación para altas y mantenimiento · `Presentacion/Gestiones/FrmGestiones.cs`
- [Consultas](https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Consultas/FrmConsultas.cs): menu form · Menú de navegación para pantallas de lectura · `Presentacion/Consultas/FrmConsultas.cs`
- [Operaciones](https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Operaciones/FrmOperaciones.cs): menu form · Menú de navegación para flujos operativos · `Presentacion/Operaciones/FrmOperaciones.cs`
- [Clientes](https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Gestiones/FrmClientes.cs): maintenance form · Alta y edición de clientes · `Presentacion/Gestiones/FrmClientes.cs`
- [Vendedores](https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Gestiones/FrmVendedores.cs): maintenance form · Alta y edición de vendedores · `Presentacion/Gestiones/FrmVendedores.cs`
- [Partidos](https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Gestiones/FrmPartidos.cs): maintenance form · Alta y edición de partidos · `Presentacion/Gestiones/FrmPartidos.cs`
- [Localidades](https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Gestiones/FrmLocalidades.cs): maintenance form · Alta y edición de localidades · `Presentacion/Gestiones/FrmLocalidades.cs`
- [Localidad/Partido](https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Operaciones/FrmLocalidadPorPartido.cs): operation form · Asignación de localidades disponibles por partido · `Presentacion/Operaciones/FrmLocalidadPorPartido.cs`
- [Venta entradas](https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Operaciones/FrmVentaDeEntradas.cs): operation form · Flujo principal para registrar ventas · `Presentacion/Operaciones/FrmVentaDeEntradas.cs`
- [Consulta clientes](https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Consultas/FrmConsultarClientes.cs): query form · Listado y lectura de clientes · `Presentacion/Consultas/FrmConsultarClientes.cs`
- [Consulta vendedores](https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Consultas/FrmConsultarVendedores.cs): query form · Listado y lectura de vendedores · `Presentacion/Consultas/FrmConsultarVendedores.cs`
- [Consulta partidos](https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Consultas/FrmConsultarPartidos.cs): query form · Listado y lectura de partidos · `Presentacion/Consultas/FrmConsultarPartidos.cs`
- [Consulta localidades](https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Consultas/FrmConsultarLocalidades.cs): query form · Listado y lectura de localidades · `Presentacion/Consultas/FrmConsultarLocalidades.cs`
- [Consulta rel. partido](https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Consultas/FrmConsultarLocalidadesPorPartido.cs): query form · Listado de localidades por partido · `Presentacion/Consultas/FrmConsultarLocalidadesPorPartido.cs`
- [Consulta ventas](https://github.com/nmartinezr-qa/boleteria/blob/master/Presentacion/Consultas/FrmConsultarVentas.cs): query form · Vista compuesta de ventas y sus entidades relacionadas · `Presentacion/Consultas/FrmConsultarVentas.cs`

### Lógica de negocio

Servicios, validaciones y mensajes compartidos

- [ServicioCliente](https://github.com/nmartinezr-qa/boleteria/blob/master/LogicaNegocios/Servicios/ServicioCliente.cs): service · Validación y coordinación de clientes · `LogicaNegocios/Servicios/ServicioCliente.cs`
- [ServicioVendedor](https://github.com/nmartinezr-qa/boleteria/blob/master/LogicaNegocios/Servicios/ServicioVendedor.cs): service · Validación y coordinación de vendedores · `LogicaNegocios/Servicios/ServicioVendedor.cs`
- [ServicioPartido](https://github.com/nmartinezr-qa/boleteria/blob/master/LogicaNegocios/Servicios/ServicioPartido.cs): service · Validación y coordinación de partidos · `LogicaNegocios/Servicios/ServicioPartido.cs`
- [ServicioLocalidad](https://github.com/nmartinezr-qa/boleteria/blob/master/LogicaNegocios/Servicios/ServicioLocalidad.cs): service · Validación y coordinación de localidades · `LogicaNegocios/Servicios/ServicioLocalidad.cs`
- [ServicioLocalidadPartido](https://github.com/nmartinezr-qa/boleteria/blob/master/LogicaNegocios/Servicios/ServicioLocalidadPorPartido.cs): service · Administra la disponibilidad de localidades por partido · `LogicaNegocios/Servicios/ServicioLocalidadPorPartido.cs`
- [ServicioVenta](https://github.com/nmartinezr-qa/boleteria/blob/master/LogicaNegocios/Servicios/ServicioVenta.cs): service · Valida y registra ventas, calcula total y descuenta stock · `LogicaNegocios/Servicios/ServicioVenta.cs`
- [MensajesError](https://github.com/nmartinezr-qa/boleteria/blob/master/LogicaNegocios/Mensajes/MensajesError.cs): message catalog · Textos centralizados de error · `LogicaNegocios/Mensajes/MensajesError.cs`
- [MensajesExito](https://github.com/nmartinezr-qa/boleteria/blob/master/LogicaNegocios/Mensajes/MensajesExito.cs): message catalog · Textos centralizados de éxito · `LogicaNegocios/Mensajes/MensajesExito.cs`

### Acceso a datos

Gestores en memoria y almacenamiento compartido

- [DatosSistema](https://github.com/nmartinezr-qa/boleteria/blob/master/AccesoDatos/DatosSistema.cs): in-memory store · Colecciones compartidas en memoria para todo el sistema · `AccesoDatos/DatosSistema.cs`
- [GestorClientes](https://github.com/nmartinezr-qa/boleteria/blob/master/AccesoDatos/GestorClientes.cs): manager · Wrapper de acceso en memoria para clientes · `AccesoDatos/GestorClientes.cs`
- [GestorVendedores](https://github.com/nmartinezr-qa/boleteria/blob/master/AccesoDatos/GestorVendedores.cs): manager · Wrapper de acceso en memoria para vendedores · `AccesoDatos/GestorVendedores.cs`
- [GestorPartidos](https://github.com/nmartinezr-qa/boleteria/blob/master/AccesoDatos/GestorPartidos.cs): manager · Wrapper de acceso en memoria para partidos · `AccesoDatos/GestorPartidos.cs`
- [GestorLocalidades](https://github.com/nmartinezr-qa/boleteria/blob/master/AccesoDatos/GestorLocalidades.cs): manager · Wrapper de acceso en memoria para localidades · `AccesoDatos/GestorLocalidades.cs`
- [GestorLoc/Partido](https://github.com/nmartinezr-qa/boleteria/blob/master/AccesoDatos/GestorLocalidadPorPartido.cs): manager · Wrapper de acceso en memoria para localidades por partido · `AccesoDatos/GestorLocalidadPorPartido.cs`
- [GestorVentas](https://github.com/nmartinezr-qa/boleteria/blob/master/AccesoDatos/GestorVentas.cs): manager · Wrapper de acceso en memoria para ventas · `AccesoDatos/GestorVentas.cs`

### Entidades

Modelo de dominio de boletería

- [Persona](https://github.com/nmartinezr-qa/boleteria/blob/master/Entidades/Persona.cs): entity base · Base común para personas del sistema · `Entidades/Persona.cs`
- [Cliente](https://github.com/nmartinezr-qa/boleteria/blob/master/Entidades/Cliente.cs): entity · Comprador registrado · `Entidades/Cliente.cs`

## Connections

- 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
