← Volver a Back.Domain

CajaAperturaRequest

DTO para la solicitud de apertura de caja

📊 Descripción General

El DTO CajaAperturaRequest representa la solicitud para abrir una caja en el sistema RestMaster. Este DTO contiene toda la información necesaria para iniciar una sesión de caja, incluyendo el cajero responsable, el importe inicial y el desglose detallado de monedas y billetes.

🎯 Propósito del DTO

  • Apertura de Caja: Inicio de sesión de caja
  • Control de Efectivo: Importe inicial y desglose
  • Identificación: Cajero y caja responsable
  • Auditoría: Trazabilidad de aperturas
  • Validación: Verificación de datos de entrada

📋 Propiedades del DTO

CajeroId

double
ID del cajero que abre la caja (requerido)

ImporteInicial

double
Importe inicial con el que se abre la caja (requerido, ≥ 0)

NombreCaja

string
Nombre o código de la caja (requerido, máx. 20 caracteres)

FechaApertura

DateTime?
Fecha de apertura (opcional, usa fecha actual si no se proporciona)

DesgloseMonedas

List<CajaDesgloseRequest>?
Lista de desglose de monedas y billetes (opcional)

📋 DTO Relacionado: CajaDesgloseRequest

🎯 Propósito del DTO Relacionado

El DTO CajaDesgloseRequest proporciona el desglose detallado de monedas y billetes utilizados en la apertura de caja.

Codigo

string
Código de la moneda o billete (ej: "2EUR", "0.50EUR") (requerido, máx. 20 caracteres)

Cantidad

double
Cantidad contada (requerido, ≥ 0)

💡 Ejemplo de Uso

// Crear solicitud de apertura de caja var aperturaRequest = new CajaAperturaRequest { CajeroId = 1, ImporteInicial = 100.00, NombreCaja = "CAJA_01", FechaApertura = DateTime.Now, DesgloseMonedas = new List<CajaDesgloseRequest> { new CajaDesgloseRequest { Codigo = "2EUR", Cantidad = 10 }, new CajaDesgloseRequest { Codigo = "1EUR", Cantidad = 20 }, new CajaDesgloseRequest { Codigo = "0.50EUR", Cantidad = 40 }, new CajaDesgloseRequest { Codigo = "0.20EUR", Cantidad = 50 }, new CajaDesgloseRequest { Codigo = "0.10EUR", Cantidad = 100 } } }; // Validar el DTO var validationResults = new List<ValidationResult>(); var isValid = Validator.TryValidateObject(aperturaRequest, new ValidationContext(aperturaRequest), validationResults, true); if (!isValid) { foreach (var error in validationResults) { Console.WriteLine($"Error: {error.ErrorMessage}"); } } // Calcular total del desglose var totalDesglose = aperturaRequest.DesgloseMonedas? .Sum(d => d.Cantidad * ParseMoneda(d.Codigo)) ?? 0; // Verificar que coincida con el importe inicial if (Math.Abs(totalDesglose - aperturaRequest.ImporteInicial) > 0.01) { throw new ValidationException("El desglose no coincide con el importe inicial"); } // Serializar a JSON var jsonRequest = JsonSerializer.Serialize(aperturaRequest, new JsonSerializerOptions { WriteIndented = true }); // Enviar solicitud a la API var response = await httpClient.PostAsJsonAsync("/api/caja/apertura", aperturaRequest); // Función auxiliar para parsear monedas double ParseMoneda(string codigo) { return codigo switch { "2EUR" => 2.0, "1EUR" => 1.0, "0.50EUR" => 0.50, "0.20EUR" => 0.20, "0.10EUR" => 0.10, "0.05EUR" => 0.05, "0.02EUR" => 0.02, "0.01EUR" => 0.01, _ => 0.0 }; }

🔗 Integración con Otros Componentes

📚 Componentes Relacionados

  • CajaController: Endpoint que recibe este DTO
  • CajaService: Servicio que procesa la apertura
  • ICajaService: Interfaz del servicio de caja
  • Back.Application: Lógica de negocio
  • Validators: Validaciones de entrada

🎯 Casos de Uso

  • Apertura Diaria: Inicio de jornada de caja
  • Control de Efectivo: Verificación de importe inicial
  • Desglose Detallado: Control de monedas y billetes
  • Auditoría: Trazabilidad de aperturas
  • Validación: Verificación de datos
  • Reportes: Análisis de aperturas

🔧 Consideraciones Técnicas

⚙️ Validaciones

  • CajeroId: Debe ser un ID válido de cajero
  • ImporteInicial: Debe ser mayor o igual a 0
  • NombreCaja: Máximo 20 caracteres
  • FechaApertura: Debe ser una fecha válida
  • Desglose: Total debe coincidir con importe inicial

🔒 Seguridad

  • Autorización: Solo cajeros autorizados
  • Validación: Verificación de datos de entrada
  • Auditoría: Registro de aperturas
  • Integridad: Control de importes