Skip to content

oleksiymumzhu/test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gestion-de-turismo

Una empresa de turismo quiere desarrollar un sistema para gestionar sus operaciones. El sistema debe permitir administrar experiencias turísticas, manejar reservas y realizar ciertas automatizaciones sobre los servicios ofrecidos.


Historias de Usuario y Criterios de Aceptación


Historia de Usuario 1: Administración de Experiencias Turísticas

Como operador de la empresa de turismo,
quiero crear, editar, consultar y eliminar experiencias turísticas de diferentes tipos (excursiones guiadas y paquetes de aventura),
para gestionar la oferta de servicios, controlar la capacidad, la duración, la disponibilidad, las reglas de reserva y el cálculo de precios de cada experiencia.

Criterios de aceptación y detalles técnicos

  • Debo poder crear una experiencia turística usando la clase Experience (o sus derivadas GuidedTour y AdventurePackage) indicando nombre, descripción, tipo, capacidad máxima y duración.
  • Para excursiones guiadas (GuidedTour):
    • Debo poder asociar un guía (TourGuide).
    • Implementar el método requiresGuide() para que retorne true.
    • Validar que haya un guía disponible antes de permitir reservas (canBeBooked()).
  • Para paquetes de aventura (AdventurePackage):
    • Debo poder asociar múltiples actividades (Activity).
    • Implementar el método checkAvailability(fecha, cantidad) para validar que haya cupo en todas las actividades.
  • El método calculateTotalPrice(personas) debe estar implementado en cada experiencia, aplicando reglas específicas (por ejemplo, suma de precios de actividades en paquetes).
  • El método applyDiscount(personas) debe aplicar descuentos automáticos para grupos grandes.
  • El método checkAvailability(fecha, cantidad) debe validar la capacidad máxima y la disponibilidad de guías si corresponde.
  • Todos estos métodos deben ser implementados en los archivos correspondientes de /src/models/.
  • Los tests deben cubrir la creación, consulta de disponibilidad, cálculo de precios y restricciones de reserva según el tipo de experiencia.

Historia de Usuario 2: Gestión de Reservas y Lista de Espera

Como cliente del sistema,
quiero reservar experiencias turísticas y, si no hay cupo, inscribirme en una lista de espera,
para asegurarme de que mi reserva sea válida, recibir notificaciones si se libera un lugar y aprovechar descuentos para grupos grandes.

Criterios de aceptación y detalles técnicos

  • Al reservar, se debe usar la clase Booking, que asocia una Experience, un Customer, la fecha y la cantidad de personas.
  • Implementar en Booking el método calculateTotalCost() para calcular el costo total usando la lógica de la experiencia y aplicar descuentos.
  • El método canBePaid() debe validar si la reserva puede ser pagada (por ejemplo, si está dentro del plazo).
  • Implementar la lógica de lista de espera:
    • Añadir una estructura de lista de espera (puede ser un array estático o gestionado externamente).
    • Métodos como addCustomerToWaitingList(), getNextFromWaitingList() y lógica para avanzar automáticamente la lista cuando se cancela una reserva.
  • El estado de la reserva (status) debe actualizarse correctamente según las acciones (pendiente, confirmada, en espera, cancelada).
  • Los tests deben cubrir la validación de disponibilidad, funcionamiento de la lista de espera, cálculo de costos y aplicación de descuentos.

Historia de Usuario 3: Pagos, Facturación y Automatizaciones

Como responsable administrativo,
quiero gestionar los pagos de las reservas, calcular los saldos pendientes y cancelar automáticamente las reservas impagas en el plazo límite,
para asegurar la correcta facturación, liberar cupos y mantener la información financiera actualizada y disponible para reportes.

Criterios de aceptación y detalles técnicos

  • Cada reserva (Booking) debe tener un atributo paymentDeadline y un método para verificar si el pago se realizó a tiempo.
  • Implementar en la clase Payment la lógica para registrar pagos, asociar el pago a una reserva y almacenar la fecha y el monto.
  • Si el pago no se realiza en el plazo, implementar la lógica automática para cambiar el estado de la reserva a "cancelada" y reasignar el cupo al siguiente en la lista de espera.
  • Implementar en Booking el método para calcular el saldo pendiente y generar comprobantes/facturas (puede ser un objeto o string con los datos relevantes).
  • Agregar funciones para generar reportes de facturación y pagos pendientes, filtrando por experiencia, cliente o fecha.
  • Los tests deben cubrir la gestión de plazos, cancelación automática, asignación de cupos, generación de comprobantes y reportes.

Notas técnicas generales

  • Todos los métodos mencionados deben implementarse en los modelos correspondientes dentro de /src/models/.
  • El código debe estar cubierto por tests automatizados en Jest, ubicados en /tests/.
  • Se recomienda mantener la consistencia en nombres de métodos y atributos, y documentar cada función con comentarios claros sobre su propósito y uso.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors