Cargando aplicación...
Si esto persiste, hay un error de JavaScript
🎛️ CONTROL PANEL
currentView:
showExperienceModal:
experienceForm.id:
currentStep:
Other modals:
Hero

Experiencias Destacadas

{{ exp.title }}

{{ exp.description }}

📍 {{ exp.city }}, {{ exp.country_code }}
{{ formatCurrency(exp.price_per_person, exp.price_currency || exp.currency) }} +IVA
{{ exp.average_rating || 'N/A' }} ({{ exp.total_reviews || 0 }} reseñas)
🤝

¡Gana Dinero Compartiendo Experiencias!

Únete a nuestro programa de afiliados y obtén comisiones por cada venta que generes.

Comisiones hasta 15%
Dashboard en tiempo real
Pagos mensuales

Explora Experiencias

{{ exp.title }}

{{ exp.description }}

📍 {{ exp.city }}
{{ formatCurrency(exp.price_per_person, exp.price_currency || exp.currency) }} +IVA

{{ selectedExperience.title }}

📍 {{ selectedExperience.city }}, {{ selectedExperience.country_code }} ⏱️ {{ selectedExperience.duration_hours }}h {{ selectedExperience.average_rating || 'N/A' }} 📋 RNT: {{ selectedExperience.provider.rnt }}

{{ selectedExperience.long_description || selectedExperience.description || selectedExperience.short_description }}

{{ formatCurrency(selectedExperience.price_per_person, selectedExperience.price_currency || selectedExperience.currency) }} / persona +IVA

Iniciar Sesión

{{ error }}

¿No tienes cuenta?

Únete a {{ platformConfig.platform_name }}

Selecciona el tipo de cuenta que deseas crear

🎒

Cliente

Descubre y reserva experiencias únicas

  • ✓ Acceso a todas las experiencias
  • ✓ Guardar favoritos
  • ✓ Gestionar reservas
  • ✓ Dejar reseñas
🏢

Proveedor

Ofrece tus experiencias al mundo

  • ✓ Publicar experiencias
  • ✓ Gestionar reservas
  • ✓ Dashboard de ventas
  • ✓ Análisis de rendimiento
🤝

Afiliado

Gana comisiones promocionando

  • ✓ Enlaces de afiliado únicos
  • ✓ Comisiones por ventas
  • ✓ Dashboard de estadísticas
  • ✓ Pagos mensuales

🎒 Registro de Cliente 🏢 Registro de Proveedor 🤝 Registro de Afiliado

{{ registerForm.password.length >= 6 ? '✓' : '○' }} Mínimo 6 caracteres
{{ passwordHasUppercase ? '✓' : '○' }} Al menos una letra mayúscula
{{ passwordHasNumber ? '✓' : '○' }} Al menos un número

Información del Negocio

Información de Marketing

{{ successMessage }}
{{ error }}

¿Ya tienes cuenta?

Mi Wishlist ❤️

Tu wishlist está vacía

{{ item.experience.title }}

{{ item.experience.city }}

{{ formatCurrency(item.experience.price_per_person, item.experience.currency || item.experience.price_currency) }}

🎫 Mis Reservas

Cargando reservas...

⚠️

{{ error }}

📋

No tienes reservas aún

{{ booking.experience_title || 'Experiencia' }}

{{ booking.booking_number }}

👤 Reservado por: {{ booking.customer_name }}

{{ getBookingStatusText(booking.status) }}

Fecha

{{ booking.booking_date }}

Participantes

{{ booking.participants_count }} personas

Total

{{ formatCurrency(booking.total_price, booking.currency) }}

Estado de Pago

{{ booking.payment_status === 'PAID' ? 'Pagado' : booking.payment_status === 'PENDING' ? 'Pendiente' : booking.payment_status }}

💳 Anticipo {{ booking.deposit_paid ? 'Pagado' : 'Requerido' }}

{{ formatCurrency(booking.deposit_amount || (booking.total_price * ((booking.deposit_percentage || 20) / 100)), booking.currency) }}

📅 {{ formatDateTime(booking.deposit_paid_at) }}

⏳ Pendiente de pago

💰 Saldo Pendiente

{{ formatCurrency(booking.remaining_amount || (booking.total_price * (1 - ((booking.deposit_percentage || 20) / 100))), booking.currency) }}

Pagar al proveedor en el servicio

📊 Distribución de Pago

{{ booking.deposit_percentage || 20 }}% anticipo

{{ 100 - (booking.deposit_percentage || 20) }}% al completar

Solicitudes Especiales

{{ booking.special_requests }}

Cancelada: {{ booking.cancellation_reason || 'Sin motivo especificado' }}

✓ Completada - ¡Esperamos que hayas disfrutado tu experiencia!

🔄 Cancelar Reserva

Información de la Reserva

Experiencia: {{ cancelForm.booking.experience_title }}

Fecha: {{ cancelForm.booking.booking_date }}

Participantes: {{ cancelForm.booking.participants_count }} personas

Total Pagado: ${{ cancelForm.booking.total_price }} {{ cancelForm.booking.currency }}

Calculando reembolso...

📋 Política de Cancelación Aplicable

{{ refundCalculation.policy_name }} ({{ refundCalculation.policy_applied }})

{{ refundCalculation.message }}

💰 Resumen de Reembolso

Total Pagado: ${{ refundCalculation.total_paid.toFixed(2) }}
Porcentaje de Reembolso: {{ refundCalculation.refund_percentage }}%
Monto de Reembolso: ${{ refundCalculation.refund_amount.toFixed(2) }}
Comisión de Cancelación: -${{ refundCalculation.cancellation_fee.toFixed(2) }}
Reembolso Neto: ${{ refundCalculation.net_refund.toFixed(2) }}

⏱️ Tiempo restante hasta la experiencia: {{ refundCalculation.hours_before_experience.toFixed(1) }} horas

⚠️ Sin reembolso: De acuerdo a la política de cancelación, no recibirás reembolso por esta cancelación.

📋 Detalles de la Reserva

Información de la Reserva

Número: {{ detailsBooking.booking_number }}

Estado: {{ getBookingStatusText(detailsBooking.status) }}

Estado de Pago: {{ detailsBooking.payment_status === 'PAID' ? 'Pagado' : 'Pendiente' }}

Experiencia

{{ detailsBooking.experience_title }}

Fecha y Hora

Fecha: {{ detailsBooking.booking_date }}

Hora: {{ detailsBooking.start_datetime }}

Participantes

Cantidad: {{ detailsBooking.participants_count }} personas

Información de Pago

Total: ${{ detailsBooking.total_price }} {{ detailsBooking.currency }}

Solicitudes Especiales

{{ detailsBooking.special_requests }}

Motivo de Cancelación

{{ detailsBooking.cancellation_reason }}

Conviértete en Afiliado

Gana comisiones promocionando nuestras experiencias increíbles

💰

Comisiones Atractivas

Gana hasta 15% por venta

📊

Dashboard Completo

Monitorea tus estadísticas

Pagos Rápidos

Recibe pagos mensuales

Información de la Empresa

Formato JSON con tus redes sociales

Información de Marketing

Información Bancaria

Cargando dashboard...

Solicitud en Revisión

Tu solicitud de afiliado está siendo revisada por nuestro equipo.

Código de Afiliado: {{ affiliateProfile.affiliate_code }}
Enviada: {{ formatDate(affiliateProfile.created_at) }}

Solicitud Rechazada

Lamentamos informarte que tu solicitud no fue aprobada.

Motivo: {{ affiliateProfile.rejection_reason }}

Dashboard de Afiliado

Código: {{ affiliateProfile.affiliate_code }} ✓ Activo
Clicks
{{ affiliateDashboard.period_clicks || 0 }}

Total de clicks

Conversiones
{{ affiliateDashboard.period_conversions || 0 }}

Ventas realizadas

Tasa
{{ formatPercentage(affiliateDashboard.conversion_rate) }}

Conversión

Ganado
{{ formatCurrency(affiliateDashboard.period_commission) }}

Total comisiones

Pendiente
{{ formatCurrency(affiliateProfile?.pending_commission || 0) }}

Por pagar

🔗 Generar Enlace de Afiliado

🔄 Cargando experiencias... No hay experiencias activas {{ availableExperiencesForAffiliates.length }} experiencia(s) disponible(s)

🔗 Generar Enlace de Afiliado

🔄 Cargando experiencias... No hay experiencias activas {{ availableExperiencesForAffiliates.length }} experiencia(s) disponible(s)

🎨 Generador de Widget Embebible

Genera un formulario de reserva personalizado para incrustar en tu sitio web. ¡Aumenta tus conversiones con una integración perfecta!

⚙️ Configuración

🎨 Personalización de Colores

Dejar en blanco o "transparent" para fondo invisible

{{ generatedEmbedCode }}

🌐 Dominios Permitidos

Configura los dominios donde podrás embeber el widget. Si no configuras ninguno, se permitirán todos los dominios.

Dominios ya permitidos por defecto:
• crea.b2d.top (este sitio)
• yourxperiences.com (dominio principal)

💡 Tip: Solo escribe el dominio (sin http:// o https://). Deja vacío si solo usarás los dominios por defecto.

Instrucciones de Uso

  1. Configura los dominios donde usarás el widget (opcional)
  2. Selecciona la experiencia que deseas promocionar
  3. Personaliza los colores según tu marca
  4. Copia el código generado arriba
  5. Pégalo en el HTML de tu sitio web
  6. ¡Listo! El widget rastreará automáticamente tus conversiones

👁️ Vista Previa en Vivo

Selecciona una experiencia

para ver el preview del widget

🖥️ tusitio.com

Cargando preview...

Este es un preview simulado. El widget se verá así en tu sitio web.

✨ Características del Widget

  • Responsive: Se adapta a móviles, tablets y desktop
  • Tracking automático: Todas las conversiones se registran a tu cuenta
  • Sin autenticación: Los clientes reservan sin necesidad de registrarse
  • Colores personalizados: Combina con tu marca perfectamente
  • Proceso completo: Selección de fecha, horario y datos de contacto

🗺️ Mis Rutas Turísticas

Cargando rutas...

No tienes rutas creadas

Crea tu primera ruta turística combinando múltiples experiencias.

🗺️
{{ route.status === 'active' ? 'Activa' : route.status === 'draft' ? 'Borrador' : route.status === 'inactive' ? 'Inactiva' : 'Archivada' }}

{{ route.title }}

{{ route.short_description }}

📅 {{ route.duration_days }} día{{ route.duration_days > 1 ? 's' : '' }} {{ formatCurrency(route.base_price) }}
👁️ {{ route.views_count || 0 }} vistas 🎫 {{ route.total_bookings || 0 }} reservas ⭐ {{ route.rating_average.toFixed(1) }}

🏆 Experiencias Más Exitosas

Experiencia Clicks Conversiones Tasa Comisión
{{ exp.experience_title }} {{ exp.clicks }} {{ exp.conversions }} {{ formatPercentage(exp.conversion_rate) }} {{ formatCurrency(exp.commission_earned) }}
No hay clicks registrados aún
Fecha Experiencia Referrer Convertido
{{ formatDate(click.created_at) }} {{ click.experience_title || 'N/A' }} {{ click.referrer || 'Directo' }} -
No hay conversiones registradas aún
Fecha Booking ID Total Comisión % Comisión $ Estado
{{ formatDate(conv.created_at) }} #{{ conv.booking_id }} {{ formatCurrency(conv.booking_total) }} {{ conv.commission_percentage }}% {{ formatCurrency(conv.commission_amount) }} {{ conv.commission_status }}
No hay comisiones aprobadas aún
Fecha Período Cantidad Estado
{{ formatDate(comm.approved_at) }} {{ formatDate(comm.period_start) }} - {{ formatDate(comm.period_end) }} {{ formatCurrency(comm.amount) }} {{ comm.status }}
No hay pagos realizados aún
Fecha Pago Método Cantidad Referencia Estado
{{ formatDate(payout.paid_at) }} {{ payout.payment_method }} {{ formatCurrency(payout.amount) }} {{ payout.transaction_reference || 'N/A' }} {{ payout.status }}

Cargando dashboard...

Dashboard de Proveedor

Gestiona tus experiencias y reservas

Experiencias

{{ providerStats.total_experiences || 0 }}

{{ providerStats.active_experiences || 0 }} activas

🎯

Reservas

{{ providerStats.total_bookings || 0 }}

{{ providerStats.pending_bookings || 0 }} pendientes

📅

Ingresos Totales

{{ formatCurrency(providerStats.total_revenue || 0) }}

Este mes

💰

Rating Promedio

{{ (providerStats.average_rating || 0).toFixed(1) }} ⭐

{{ providerStats.total_reviews || 0 }} reseñas

Nueva Experiencia

Crea una nueva experiencia para tus clientes

🎯

Mis Experiencias

Gestiona y edita tus {{ providerStats.total_experiences || 0 }} experiencias

📅

Ver Reservas

{{ providerStats.pending_bookings || 0 }} reservas pendientes

🚀

¡Bienvenido a {{ platformConfig.platform_name }}!

Aún no tienes experiencias creadas. Comienza creando tu primera experiencia para empezar a recibir reservas.

Reservas Recientes

ID Experiencia Fecha Total Estado
#{{ booking.id }} {{ booking.experience_title }} {{ formatDateShort(booking.booking_date) }} {{ formatCurrency(booking.total_amount) }} {{ booking.status }}
No hay reservas recientes

Reseñas Recientes

{{ review.customer_name || 'Cliente' }} {{ '⭐'.repeat(review.rating || 5) }} {{ formatDate(review.created_at) }}

{{ review.comment || 'Sin comentario' }}

No hay reseñas recientes

Mis Experiencias

Aún no tienes experiencias creadas

Crea tu primera experiencia para empezar a recibir reservas

📷

{{ exp.title || 'Sin título' }}

✓ Activa ⊗ Inactiva ⚠ Borrador

{{ exp.short_description || 'Sin descripción' }}

💰 {{ formatCurrency(exp.price_base, exp.price_currency) }} ⏱️ {{ exp.duration_minutes }} min ⭐ {{ (exp.rating_average || 0).toFixed(1) }} 👥 {{ exp.bookings_count || 0 }} reservas

📋 Gestión de Reservas

No hay reservas

Reserva #{{ booking.booking_number || booking.id }}

{{ booking.status === 'no_show' ? 'No Show' : booking.status }}

{{ booking.experience_title || 'Experiencia' }}

📅 {{ formatDate(booking.booking_date) }} 🕐 {{ formatTime(booking.start_time) }} 👥 {{ booking.participants }} participante{{ booking.participants > 1 ? 's' : '' }}

{{ formatCurrency(booking.total_amount || booking.total_price) }}

💳 {{ booking.payment_status || 'Pendiente' }}
Cliente: {{ booking.customer.name }} 📧 {{ booking.customer.email }} 📱 {{ booking.customer.phone }}

💳 Anticipo pagado el: {{ formatDate(booking.deposit_paid_at) }} a las {{ formatTime(booking.deposit_paid_at) }}

Anticipo {{ booking.deposit_paid ? 'Pagado' : 'Requerido' }}

{{ formatCurrency(booking.deposit_amount || (booking.total_amount * ((booking.deposit_percentage || 20) / 100))) }}

({{ booking.deposit_percentage || 20 }}%)

Comisión Plataforma

{{ formatCurrency(booking.commission_amount || booking.deposit_amount) }}

{{ booking.commission_status }}

Tu Pago

{{ formatCurrency(booking.provider_payout_amount || ((booking.total_amount || booking.total_price) - (booking.commission_amount || booking.deposit_amount))) }}

({{ 100 - (booking.deposit_percentage || 20) }}%)

Saldo Cliente

{{ formatCurrency(booking.remaining_amount || ((booking.total_amount || booking.total_price) * (1 - ((booking.deposit_percentage || 20) / 100)))) }}

Paga en sitio

Estado del Servicio: {{ getServiceStatusLabel(booking.service_status) }} Confirmado: {{ formatDate(booking.service_confirmed_at) }} Completado: {{ formatDate(booking.service_completed_at) }}

⚠️ Solicitudes especiales:

{{ booking.special_requests }}

Servicio completado. Tu pago de {{ formatCurrency(booking.provider_payout_amount) }} será procesado en los próximos 7 días.

🚫 No-show reportado. La plataforma retiene el anticipo. No recibirás pago por este servicio.

Servicio cancelado. El anticipo fue reembolsado al cliente.

Reseñas de Clientes

Aún no tienes reseñas
{{ review.customer_name || 'Cliente' }} {{ '⭐'.repeat(review.rating || 5) }} {{ formatDate(review.created_at) }}

{{ review.comment || 'Sin comentario' }}

📅 Gestión de Disponibilidad y Cupos

⚙️ Configuración de Capacidad

Sistema de Cupos

{{ capacityConfig.capacity_enabled ? '✅ Habilitado' : '❌ Deshabilitado' }}

Auto-Confirmación

{{ capacityConfig.auto_confirm_booking ? '✅ Activa' : '❌ Inactiva' }}

Participantes Máximo

{{ capacityConfig.max_capacity || 'N/A' }} personas

Campo sincronizado con experiencia

🕐 Horarios Disponibles

Cargando horarios...

{{ getDayIcon(slot.day_of_week) }}

{{ getDayName(slot.day_of_week) }} ({{ new Date(slot.specific_date + 'T00:00:00').toLocaleDateString('es-ES') }})

⏰ {{ slot.start_time }} 👥 {{ slot.capacity }} personas 💰 ${{ slot.price_override }} ❌ Inactivo
🕐

No hay horarios definidos

Los horarios determinan cuándo está disponible tu experiencia y cuántas personas pueden asistir.

📅 Calendario de Disponibilidad

{{ calendarMonth.toLocaleDateString('es-ES', { month: 'long', year: 'numeric' }) }}

Cargando calendario...

Dom
Lun
Mar
Mié
Jue
Vie
Sáb
{{ day.day }}
✅ {{ day.available }}/{{ day.total_capacity }} ⚠️ {{ day.available }}/{{ day.total_capacity }} 🔴 Lleno ⛔ Bloqueado
👁️
Disponible
Limitado
Lleno
Bloqueado
No hay datos de disponibilidad para este mes
Selecciona una experiencia para gestionar su disponibilidad

📅 Reservas del Día

{{ selectedBookingsDate ? new Date(selectedBookingsDate + 'T00:00:00').toLocaleDateString('es-ES', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }) : '' }}

Cargando reservas...

{{ bookingsError }}

{{ dayBookings.length }}
Reservas Totales
{{ dayBookings.reduce((sum, b) => sum + (b.participants || 1), 0) }}
Participantes
{{ formatCurrency(dayBookings.reduce((sum, b) => sum + (b.total_amount || 0), 0)) }}
Ingresos

Listado de Reservas

{{ booking.customer_name ? booking.customer_name.charAt(0).toUpperCase() : '?' }}
{{ booking.customer_name || 'Cliente Anónimo' }}

{{ booking.customer_email || 'Sin email' }}

🕐 Hora: {{ booking.booking_time || 'Sin especificar' }}
👥 Participantes: {{ booking.participants || 1 }}
💵 Monto: {{ formatCurrency(booking.total_amount) }}
🔖 Booking ID: #{{ booking.booking_id }}
{{ getBookingStatusLabel(booking.status) }}

📝 Notas: {{ booking.special_requests }}

📭

No hay reservas para este día

Este día está disponible para nuevas reservas

Experiencia: {{ providerExperiences.find(e => e.id === selectedExperienceForCapacity)?.title || 'N/A' }}

{{ editingTimeSlot ? '✏️ Editar Horario' : '➕ Agregar Horario' }}

Hora en la que comienza la experiencia

Número máximo de participantes para este horario

Si especificas un precio, este horario tendrá un costo diferente

Los horarios inactivos no aparecen en el calendario

📧 Información de Contacto

Configura los emails y teléfonos donde recibirás notificaciones

Email principal para correspondencia

Recibirás notificaciones de reservas en este email

🔔 Preferencias de Notificaciones

Selecciona qué notificaciones deseas recibir por email

🏢 Información de la Empresa

Actualiza la información básica de tu empresa

Importante: El RNT es obligatorio para poder verificar tu cuenta y publicar experiencias.

⚙️ Configuración de Pagos

Configura tu cuenta de Wompi para recibir pagos de tus experiencias

Cargando...

Habilitar pagos con Wompi

Permite que los clientes paguen directamente a tu cuenta

Usa "Sandbox" para pruebas y "Producción" para pagos reales

Llave pública de tu cuenta de Wompi

Llave privada (se almacena de forma segura)

Secret para validar webhooks de Wompi

¿Cómo obtener mis credenciales de Wompi?

  1. Crea una cuenta en wompi.co
  2. Ve a "Configuración" → "Llaves de integración"
  3. Copia tu Public Key y Private Key
  4. Pégalas aquí y guarda

{{ wompiTestResult.message }}

Merchant ID: {{ wompiTestResult.merchant_id }}

Nombre: {{ wompiTestResult.merchant_name }}

Entorno: {{ wompiTestResult.environment }}

{{ wompiTestResult.error }}

🔄 Políticas de Cancelación

Gestiona las políticas de cancelación para tus experiencias

Cargando políticas...

{{ policy.name }}

{{ getPolicyTypeLabel(policy.policy_type) }} ⭐ Default

{{ policy.description || 'Sin descripción' }}

✓ Reembolso 100%: {{ policy.full_refund_hours }}h antes
⚠ Reembolso {{ policy.partial_refund_percentage }}%: {{ policy.partial_refund_hours }}h antes
✗ Sin reembolso: Después de {{ policy.full_refund_hours }}h
📊 {{ policy.experience_count || 0 }} experiencias 🔄 {{ policy.cancellation_count || 0 }} cancelaciones
📋

No tienes políticas de cancelación

Crea tu primera política para empezar

📝 Plantillas Predefinidas

Usa estas plantillas como punto de partida para crear tus políticas

{{ template.name }}

{{ getPolicyTypeLabel(template.type) }}

{{ template.description }}

✓ 100% reembolso: {{ template.full_refund_hours }}h antes
⚠ {{ template.partial_refund_percentage }}% reembolso: {{ template.partial_refund_hours }}h antes

Cargando panel de administración...

🛡️ Panel de Administración

Gestión completa de la plataforma {{ platformConfig.platform_name }}

Usuarios

{{ adminStats.total_users || 0 }}

+{{ adminStats.new_users || 0 }} nuevos

👥

Proveedores

{{ adminStats.verified_providers || 0 }}

{{ adminStats.pending_verification || 0 }} pendientes

🏪

Experiencias

{{ adminStats.active_experiences || 0 }}

{{ adminStats.pending_review || 0 }} por revisar

🎯

Ingresos

{{ formatCurrency(adminStats.total_revenue || 0) }}

Comisión: {{ formatCurrency(adminStats.platform_commission || 0) }}

💰

📈 Estadísticas de la Plataforma

{{ adminStats.total_bookings || 0 }}

Reservas Totales

{{ adminStats.total_experiences || 0 }}

Experiencias Publicadas

{{ adminStats.total_reviews || 0 }}

Reseñas Publicadas

⚠️

{{ adminStats.pending_verification }} Proveedores Pendientes

Requieren verificación

🔍

{{ adminStats.pending_review }} Experiencias

Esperando revisión

📝

{{ adminStats.pending_moderation }} Reseñas

Requieren moderación

Gestión de Usuarios

Usuario Email Tipo Registro Estado Acciones
{{ user.first_name ? user.first_name[0] : '?' }}

{{ user.first_name }} {{ user.last_name }}

{{ user.email }} {{ user.user_type }} {{ formatDate(user.created_at) }} {{ user.is_active ? 'Activo' : 'Inactivo' }}
No hay usuarios
🏪

No hay proveedores en esta categoría

{{ provider.business_name || 'Sin nombre' }}

{{ provider.verification_status }}

{{ provider.business_description || 'Sin descripción' }}

📧 {{ provider.contact_email || provider.email }}
📞 {{ provider.contact_phone || 'Sin teléfono' }}
🏪 {{ provider.total_experiences || 0 }} experiencias
📅 {{ provider.total_bookings || 0 }} reservas
ID: #{{ provider.id }} Creado: {{ formatDate(provider.created_at) }} Verificado: {{ formatDate(provider.verified_at) }}

Gestión de Experiencias

Aprueba, destaca o rechaza experiencias de los proveedores

{{ exp.title || 'Sin título' }}

{{ exp.status }} ⭐ Destacada

{{ exp.short_description || 'Sin descripción' }}

💰 {{ formatCurrency(exp.base_price) }} 📍 {{ exp.city }}, {{ exp.country_code }} ⭐ {{ (exp.rating_average || 0).toFixed(1) }} 📅 {{ exp.total_bookings || 0 }} reservas
Proveedor: 🏪 {{ exp.provider_name || 'Sin nombre' }}
📋 No hay experiencias registradas

Moderación de Reseñas

{{ review.customer_name || 'Cliente' }} {{ '⭐'.repeat(review.rating || 5) }} {{ review.status }}

{{ review.experience_title }}

{{ review.comment || 'Sin comentario' }}

{{ formatDate(review.created_at) }}

No hay reseñas

📋 Gestión de Reservas

Administra todas las reservas con información completa de pago y notificaciones

Acciones Cliente Experiencia Fecha/Hora Total Anticipo Saldo Método Pago Estado Notificaciones ID
{{ booking.customer_name }}
{{ booking.customer_email }}
{{ booking.experience_title }}
📅 {{ formatDate(booking.booking_date) }}
🕐 {{ formatTime(booking.start_datetime) }}
{{ formatCurrency(booking.total_price, booking.currency) }}
{{ booking.currency || 'COP' }}
{{ formatCurrency(booking.deposit_amount, booking.currency) }}
✓ Pagado ({{ booking.deposit_percentage || 20 }}%)
📅 {{ formatDateShort(booking.deposit_paid_at) }}
{{ formatCurrency(booking.deposit_amount || (booking.total_price * ((booking.deposit_percentage || 20) / 100)), booking.currency) }}
⏳ Pendiente ({{ booking.deposit_percentage || 20 }}%)
{{ formatCurrency(booking.remaining_amount || (booking.total_price * (1 - ((booking.deposit_percentage || 20) / 100))), booking.currency) }}
En sitio ({{ 100 - (booking.deposit_percentage || 20) }}%)
💳 Wompi 🏦 Breve 💵 Sin pago {{ booking.payment_method_label }}
✓ Pagado
Pago en lugar
⏳ Pendiente pago
Sin método
(Legacy)
{{ booking.status }}
✅ Confirmación: {{ formatDateTime(booking.confirmation_sent_at) }}
⏳ Sin confirmación
🔔 Recordatorio: {{ formatDateTime(booking.reminder_sent_at) }}
#{{ booking.booking_number }}
{{ booking.participants }} pax
No hay reservas

📁 Gestión de Categorías

Administra las categorías de experiencias y sus traducciones

Icono Nombre (ES) Slug Categoría Padre Experiencias Orden Estado Acciones
{{ category.icon }}
{{ category.name }}
{{ category.description.substring(0, 50) }}...
{{ category.slug }} {{ adminCategories.find(c => c.id === category.parent_id)?.name || 'N/A' }} - {{ category.experience_count || 0 }} experiencias {{ category.sort_order || 0 }} ✓ Activa ✗ Inactiva
📁

No hay categorías registradas

🌍 Gestión de Traducciones

Administra todas las traducciones de la interfaz de usuario

{{ translationStats.total_keys || 0 }}
Claves Totales
{{ translationStats.translated_keys || 0 }}
Traducidas
{{ translationStats.missing_translations || 0 }}
Pendientes
{{ translationStats.coverage_percentage || 0 }}%
Cobertura
Clave Categoría Español English Otros Acciones
{{ key.key }}
{{ key.description }}
{{ key.category || 'Sin categoría' }}
{{ key.translations?.es?.value || '-' }}
{{ key.translations?.en?.value || '-' }}
PT FR DE -
🌍

No hay claves de traducción

🤝 Sistema de Afiliados

Gestiona solicitudes, comisiones y pagos a afiliados

No hay solicitudes de afiliados
ID Empresa Email Código Ventas/Mes Fecha Estado Acciones
#{{ affiliate.id }} {{ affiliate.company_name }} {{ affiliate.user_email }} {{ affiliate.affiliate_code }} {{ affiliate.expected_monthly_sales }} {{ formatDate(affiliate.created_at) }} {{ affiliate.status }}
No hay afiliados activos
Empresa Código Comisión Clicks Conversiones Ingresos Ganado Pendiente Acciones
{{ affiliate.company_name }} {{ affiliate.affiliate_code }} {{ affiliate.commission_value }}% {{ formatCurrency(affiliate.commission_value) }} {{ affiliate.total_clicks }} {{ affiliate.total_conversions }} {{ formatCurrency(affiliate.total_revenue) }} {{ formatCurrency(affiliate.total_commission_earned) }} {{ formatCurrency(affiliate.pending_commission) }}

Comisiones Pendientes de Aprobación

Total pendiente: {{ formatCurrency(adminPendingCommissionsTotal) }}

No hay comisiones pendientes
ID Afiliado Booking Total Venta Comisión Fecha Acciones
#{{ commission.id }} {{ commission.affiliate_company }} #{{ commission.booking_id }} {{ formatCurrency(commission.booking_total) }} {{ formatCurrency(commission.commission_amount) }} {{ formatDate(commission.created_at) }}

Historial de Pagos

No hay pagos registrados
ID Afiliado Cantidad Método Referencia Fecha Estado
#{{ payout.id }} {{ payout.affiliate_company }} {{ formatCurrency(payout.amount) }} {{ payout.payment_method }} {{ payout.transaction_reference || 'N/A' }} {{ formatDate(payout.paid_at) }} {{ payout.status }}

⚙️ Configuración Global de Afiliados

Si es porcentaje: 10 = 10%. Si es fija: cantidad en COP

Tiempo que se mantiene el código de afiliado en el navegador

Si está activado, cada comisión debe ser aprobada manualmente

Monto mínimo acumulado para poder realizar un pago

⚙️ Configuración Global

Administra parámetros y configuraciones de la plataforma

📤 Configuración Email SMTP (Envío)

Configura el servidor SMTP para enviar notificaciones a clientes y proveedores

Habilitar sistema de notificaciones por email

⚙️ Notificaciones Activas

🌐 Configuración de Plataforma

Personaliza la identidad y apariencia de tu plataforma

🎯 Identidad de Marca

📞 Información de Contacto

🎨 Colores de Marca

🌍 Región y Moneda

🔍 SEO y Metadata

{{ (platformConfig.meta_title || '').length }}/60 caracteres

{{ (platformConfig.meta_description || '').length }}/160 caracteres

📱 Redes Sociales

🔑 Configuraciones Key-Value

Parámetros personalizados de la plataforma

Clave Valor Tipo Descripción Última Actualización Acciones
{{ config.key }}
{{ config.value }}
{{ config.data_type }}
{{ config.description || '-' }}
{{ config.updated_at ? new Date(config.updated_at).toLocaleDateString('es-ES') : '-' }}
⚙️

No hay configuraciones registradas

💳 Configuración de Métodos de Pago

Habilita o deshabilita métodos de pago a nivel de plataforma

{{ method.icon }}

{{ method.name }}

{{ method.description }}

✓ Habilitado ✗ Deshabilitado
💳

Cargando métodos de pago...

ℹ️ Información importante
  • • Los métodos de pago deshabilitados no aparecerán como opción para los clientes
  • • Los proveedores deben configurar individualmente cada método en su panel
  • • Los cambios se aplican inmediatamente a nivel de plataforma

🏦 Sistema de Pagos Breve

Transferencias bancarias con verificación automática por email

🏦

Cuentas Activas

{{ breveStats.active_configs || 0 }}

Pendientes

{{ breveStats.pending_payments || 0 }}

Confirmados

{{ breveStats.confirmed_payments || 0 }}

💰

Total Recibido

{{ formatCurrency(breveStats.total_amount || 0) }}

Pagos Recientes

Últimas transferencias recibidas

Referencia Usuario Monto Estado Fecha Acciones
{{ payment.breve_reference }}
{{ payment.payer_name }}
{{ payment.payer_bank }}
Sin banco especificado
{{ formatCurrency(payment.amount) }} {{ payment.status }} {{ formatDate(payment.created_at) }}
💳

No hay pagos registrados

Configuraciones Bancarias

Gestiona las cuentas bancarias para recibir transferencias

🏦

{{ config.bank_name }}

{{ config.account_holder_name }}

{{ config.is_active ? '✓ Activa' : '⊘ Inactiva' }}
Cuenta: {{ config.account_number }}
Tipo: {{ config.account_type === 'savings' ? 'Ahorros' : 'Corriente' }}
Email IMAP: {{ config.imap_email }}
Expiración: {{ config.expiration_hours }}h
🏦

No hay configuraciones bancarias

🟢 🔴 Estado del Servicio de Verificación Automática

Estado del Servicio
{{ serviceStatus.service.status }}
Se ejecuta cada {{ serviceStatus.service.check_interval_display }}
Última Verificación
{{ serviceStatus.service.time_since_last_display }}
{{ serviceStatus.service.last_execution ? new Date(serviceStatus.service.last_execution).toLocaleString('es-CO') : 'Nunca' }}
Pagos Pendientes
{{ serviceStatus.pending_payments?.total || 0 }}
Esperando verificación
📊 Estadísticas de Hoy
Pagos Confirmados: {{ serviceStatus.today_stats.payments_confirmed }}
Verificaciones Ejecutadas: {{ serviceStatus.today_stats.verifications_run }}
⏰ Próximas Verificaciones
{{ check.breve_reference }} {{ formatCurrency(check.expected_amount, 'COP') }}
{{ check.time_until_display }}

🔴 Monitoreo en Tiempo Real

Verificaciones activas y logs de email

📧 Sistema de Verificación de Transferencias {{ activeVerifications.length }} pendientes

Conectando al servidor de email...

Error al obtener emails

{{ emailMonitoringError }}

Banco:

{{ emailMonitoringData.bank_name }}

Email monitoreado:

{{ emailMonitoringData.inbox_email }}

Remitente banco:

{{ emailMonitoringData.bank_sender }}

Total emails:

{{ emailMonitoringData.total_emails }}

🔍 Patrones de Subject
{{ pattern }} Sin patrones
📝 Patrones de Extracción
{{ key }}: {{ pattern }}
Sin patrones
📨 Últimos {{ emailMonitoringData.emails.length }} Emails del Banco ({{ getMatchingEmailsCount() }} coincidencias potenciales)
📭

No se encontraron emails del banco

{{ email.matching_payment ? '🎯 COINCIDE con pago' : email.status }} {{ email.matching_payment.breve_reference }}
{{ email.date }}
🎯 Pago Pendiente Encontrado
Score: {{ email.match_score }}%
Usuario: {{ email.matching_payment.payer_name }}
Monto esperado: ${{ formatCOP(email.matching_payment.expected_amount) }}
✅ Titular (usuario indicó): {{ email.matching_payment.account_holder_name }} (coincide con email)
Esperando desde: {{ formatRelativeTime(email.matching_payment.created_at) }}
De: {{ email.sender }}
Asunto:
{{ email.subject }}
📊 Datos Extraídos:
Monto: ${{ formatCOP(email.extracted_data.amount) }}
Nombre: {{ email.extracted_data.sender_name }}
Fecha: {{ email.extracted_data.transaction_date }}
Hora: {{ email.extracted_data.time }}
{{ email.body_preview }}

{{ email.body_preview.substring(0, 150) }}...

📧

Click en "Refrescar" para cargar los emails del banco

📊 Logs de Verificación Recientes ({{ recentLogs.length }})

{{ log.breve_reference }} {{ log.status_before }} → {{ log.status_after }} {{ formatRelativeTime(log.created_at) }}
Tipo: {{ log.verification_type }}
Emails revisados: {{ log.emails_checked }}
Coincidencias: {{ log.emails_matched }}
❌ Error: {{ log.error_message }}
👤 Por: {{ log.verified_by }}
📋

No hay logs de verificación disponibles

💱 Tasas de Cambio

Actualiza manualmente las tasas de conversión a pesos colombianos (COP)

Última actualización: {{ new Date(exchangeRatesLastUpdated).toLocaleString('es-CO') }}

Tasas Actuales

1 unidad de la moneda = X pesos colombianos

🇺🇸

Dólar Estadounidense

USD

🇪🇺

Euro

EUR

🇧🇷

Real Brasileño

BRL

🇲🇽

Peso Mexicano

MXN

🇦🇷

Peso Argentino

ARS

🇨🇱

Peso Chileno

CLP

📌 Referencia Rápida

• Las tasas se aplican automáticamente en el sistema Breve

• 1 USD = {{ exchangeRates?.USD || 4000 }} COP

• 1 EUR = {{ exchangeRates?.EUR || 4400 }} COP

• Los cambios se reflejan inmediatamente en nuevas reservas

🔧

Mantenimiento de Base de Datos

Herramientas avanzadas para gestión y limpieza de datos

⚠️

Zona de Peligro

Las acciones en esta sección son irreversibles

🗑️

Eliminar Todas las Reservas y Transacciones

Esta acción eliminará permanentemente todos los registros de:

  • ✗ Todas las reservas (bookings)
  • ✗ Participantes de reservas
  • ✗ Pagos y transacciones (Wompi, Breve, etc.)
  • ✗ Conversiones de afiliados
  • ✗ Reseñas de clientes
  • ✗ Capacidades reservadas
  • ✗ Cancelaciones y historial
📊 Registros a eliminar:

{{ maintenanceStats.bookings || 0 }}

Reservas

{{ maintenanceStats.payments || 0 }}

Pagos

{{ maintenanceStats.transactions || 0 }}

Transacciones

{{ maintenanceStats.reviews || 0 }}

Reseñas

⚠️ Advertencia: Se creará un backup automático antes de eliminar. Los datos NO se pueden recuperar después de la eliminación.

ℹ️ Información de Base de Datos

Motor:

MySQL

Servidor:

{{ platformConfig.database_host || 'srv1102.hstgr.io' }}

Base de datos:

{{ platformConfig.database_name || 'u172501971_25561' }}

Último backup:

{{ lastBackupDate }}

No disponible

💡 Mejores Prácticas

  • Siempre verifica las estadísticas antes de eliminar
  • El sistema crea un backup automático en SQL antes de eliminar
  • Los backups se guardan en el directorio raíz con timestamp
  • Usa esta función solo en entornos de desarrollo o testing
  • En producción, coordina con el equipo antes de ejecutar
🌍

GetYourGuide Integration

Gestión de la integración como proveedor en GetYourGuide

🔑 Configuración de API

Estado de API ✓ Configurada

API Key y credenciales configuradas correctamente

Modo 🧪 Sandbox

Entorno de pruebas activo

Supplier ID tuguia_colombia

Identificador único en GYG

Base URL crea.b2d.top

URL pública de la API

Reservas

{{ gygStats.total_reservations || 0 }}

📋

Bookings

{{ gygStats.total_bookings || 0 }}

Productos

{{ gygStats.mapped_products || 0 }}

🎯

Tickets

{{ gygStats.total_tickets || 0 }}

🎫

🎯 Mapeo de Productos

GYG Product ID Experiencia Local Estado Creado
{{ mapping.gyg_product_id }} {{ mapping.experience_title }} {{ mapping.is_active ? '✓ Activo' : '○ Inactivo' }} {{ formatDate(mapping.created_at) }}

📭 No hay productos mapeados aún

Los productos se mapean automáticamente al recibir reservas de GYG

📊 Actividad Reciente

{{ activity.type === 'booking' ? '✓' : '📋' }} {{ activity.reference }} {{ activity.status }}

{{ activity.product_id }} - {{ activity.participants }} pax

{{ formatDate(activity.created_at) }}

📭 Sin actividad reciente

Las reservas y bookings aparecerán aquí

🔗 Endpoints de la API

Health Check GET /1/health
Get Availabilities GET /1/get-availabilities/
Reserve POST /1/reserve/
Book POST /1/book/
Cancel Reservation DELETE /1/cancel-reservation/
Cancel Booking DELETE /1/cancel-booking/

📚 Documentación

Para más información sobre la integración GetYourGuide, consulta los siguientes archivos:

  • 📄 GYG_INTEGRATION_CREDENTIALS.md - Credenciales y acceso al portal
  • 📄 GYG_API_INFO_FOR_INTEGRATION.md - Información técnica para GYG
  • 📄 GYG_INTEGRATION_PROGRESS.md - Estado y progreso de la integración

{{ categoryForm.id ? '✏️ Editar Categoría' : '➕ Nueva Categoría' }}

Identificador único (sin espacios, solo letras minúsculas y guiones)

Un emoji que represente la categoría

Selecciona una categoría padre si esta es una subcategoría

Menor número = aparece primero

{{ configForm.isEdit ? '✏️ Editar Configuración' : '➕ Nueva Configuración' }}

Identificador único en snake_case (no se puede modificar después)

Escribe "true" o "false" Escribe un número (ej: 15 o 3.14) Escribe un JSON válido (ej: {"key": "value"}) Escribe el valor de texto

{{ breveConfigForm.id ? '✏️ Editar Configuración Bancaria' : '➕ Nueva Configuración Bancaria' }}

🏦 Información Bancaria

Identificador único (no se puede cambiar)

📧 Configuración de Email (IMAP)

🏦 Email del Banco (Notificaciones)

Configuración del email desde donde el banco envía las notificaciones de transferencias

Email desde donde llegan las notificaciones

Opcional

🔍 Patrones de Extracción

💡 Cómo funciona:

Para cada dato que necesitas extraer (monto, nombre, fecha), define:

  • BEFORE: El texto que aparece ANTES del dato
  • AFTER: El texto que aparece DESPUÉS del dato
  • TYPE: El tipo de dato (money, text, number, date, time)

📝 Ejemplo: "Recibiste $50,000 de PEDRO"

Para el monto: before="Recibiste $", after=" de", type="money"

Array JSON con palabras clave del asunto del email

JSON con patrones para extraer: amount, sender_name, date, time, etc

⏱️ Configuración de Tiempos

Tiempo límite para realizar el pago

Cada cuánto verificar emails

🎫 Reservar Experiencia

{{ bookingData.experience.translations?.es?.title || bookingData.experience.title }}

Paso {{ bookingData.step }} de {{ bookingData.maxSteps }}
{{ bookingError }}

📅 Selecciona Fecha y Participantes

📍 {{ selectedTimeSlotInfo.available_capacity }} cupos disponibles • Precio especial: {{ formatCurrency(selectedTimeSlotInfo.price_override, bookingData.experience?.currency) }}

⚠️ No hay horarios disponibles para esta fecha. Por favor selecciona otra fecha.
{{ getCategoryLabel(priceCategory.category) }}
${{ (priceCategory.retail_price / 100).toFixed(2) }} {{ priceCategory.currency }} / persona
Edad: {{ priceCategory.age_from || 0 }} - {{ priceCategory.age_to || '99+' }} años
{{ bookingData.categoryCounts[priceCategory.category] || 0 }}
Total: {{ getTotalParticipantsFromCategories() }} participantes ({{ selectedTimeSlotInfo.available_capacity }} disponibles)
{{ bookingData.participantsCount }}
Disponibles: {{ selectedTimeSlotInfo.available_capacity }} (Mín: {{ bookingData.experience?.min_participants || 1 }}, Máx: {{ bookingData.experience?.max_participants || 10 }})

⚠️ Solo quedan {{ selectedTimeSlotInfo.available_capacity }} cupos disponibles para este horario

{{ item.categoryLabel }} ({{ item.count }} × ${{ item.unitPrice.toFixed(2) }}): ${{ item.subtotal.toFixed(2) }}
Subtotal{{ hasGygPriceCategories() ? '' : ' (' + bookingData.participantsCount + ' participantes)' }}: {{ formatCurrency(bookingData.pricing.subtotal, bookingData.experience?.currency || bookingData.experience?.price_currency) }}
Descuento: -{{ formatCurrency(bookingData.pricing.discount, bookingData.experience?.currency || bookingData.experience?.price_currency) }}
{{ bookingData.pricing.taxName || 'IVA' }} ({{ bookingData.pricing.taxPercentage || 19 }}%): +{{ formatCurrency(bookingData.pricing.tax, bookingData.experience?.currency || bookingData.experience?.price_currency) }}
Precio estimado: {{ formatCurrency(bookingData.pricing.total, bookingData.experience?.currency || bookingData.experience?.price_currency) }}
ℹ️ Incluye {{ bookingData.pricing.taxName || 'IVA' }} ({{ bookingData.pricing.taxPercentage || 19 }}%)

👥 Datos de los Participantes

👤 Participante {{ index + 1 }} Contacto Principal

📋 Resumen de tu Reserva

Experiencia

Nombre: {{ bookingData.experience?.translations?.es?.title || bookingData.experience?.title }}
Fecha: {{ bookingData.selectedDate }}
Hora: {{ bookingData.selectedTime }}
Duración: {{ bookingData.experience?.duration_minutes || 0 }} min

Participantes ({{ bookingData.participantsCount }})

{{ i + 1 }} {{ p.first_name }} {{ p.last_name }} Principal

💰 Desglose de Precio

Subtotal: ${{ bookingData.pricing.subtotal }} {{ bookingData.experience?.price_currency || 'USD' }}
Descuento: -${{ bookingData.pricing.discount }} {{ bookingData.experience?.price_currency || 'USD' }}
{{ bookingData.pricing.taxName || 'IVA' }} ({{ bookingData.pricing.taxPercentage || 19 }}%): +${{ bookingData.pricing.tax }} {{ bookingData.experience?.price_currency || 'USD' }}
TOTAL: ${{ bookingData.pricing.total }} {{ bookingData.experience?.price_currency || 'USD' }}
ℹ️ Incluye {{ bookingData.pricing.taxName || 'IVA' }} ({{ bookingData.pricing.taxPercentage || 19 }}%): ${{ bookingData.pricing.tax }} {{ bookingData.experience?.price_currency || 'USD' }}
💵 Modalidad de Pago: Anticipo
Anticipo ({{ bookingData.experience?.deposit_percentage || 20 }}%): {{ formatCurrency(bookingData.pricing.total * ((bookingData.experience?.deposit_percentage || 20) / 100), bookingData.experience?.price_currency) }}
Saldo restante: {{ formatCurrency(bookingData.pricing.total * ((100 - (bookingData.experience?.deposit_percentage || 20)) / 100), bookingData.experience?.price_currency) }}
ℹ️ Pagarás el {{ bookingData.experience?.deposit_percentage || 20 }}% ahora. El saldo restante se paga al finalizar la experiencia.

Procesando reserva...

🏦 Pago por Transferencia Breve (Bre-B)

Reserva creada: {{ createdBooking.booking_number }}

Ref. pago: {{ brevePaymentCreated.breve_reference }}

💰 Desglose de Pago

Precio total de la experiencia:
${{ formatCOP(bookingData.pricing.total) }} COP
Anticipo ({{ getDepositPercentage() }}%):

Pagas ahora por Breve

${{ formatCOP(calculateDepositInCOP(bookingData.pricing.total, bookingData.experience?.price_currency, getDepositPercentage())) }} COP ${{ formatCOP(brevePaymentCreated.expected_amount) }} COP

≈ ${{ calculateDepositInOriginalCurrency(bookingData.pricing.total, getDepositPercentage()) }} {{ bookingData.experience?.price_currency || 'USD' }}

Saldo ({{ 100 - getDepositPercentage() }}%):

Pagas en la experiencia

${{ formatCOP(calculateRemainingInCOP(bookingData.pricing.total, bookingData.experience?.price_currency, getDepositPercentage())) }} COP

≈ ${{ calculateRemainingAmount(bookingData.pricing.total, getDepositPercentage()) }} {{ bookingData.experience?.price_currency || 'USD' }}

ℹ️ El anticipo es 100% reembolsable si cancelas con al menos {{ bookingData.experience?.free_cancellation_hours || 24 }} horas de anticipación.

🏦 Datos para tu Transferencia

🔑 Llave Bre-B:
{{ brevePaymentCreated.breve_key || brevePaymentCreated.account_number }}
Banco: {{ brevePaymentCreated.bank_name }}
💵 Monto Exacto a Transferir:
${{ formatCOP(brevePaymentCreated.expected_amount) }} COP

📱 Pasos:

  1. Abre tu app bancaria
  2. Selecciona "Transferencia Bre-B"
  3. Ingresa la Llave Bre-B como destino
  4. Transfiere el monto exacto
  5. Confirma abajo cuando termines

⚠️ IMPORTANTE: Debe coincidir exactamente con el nombre registrado en tu cuenta bancaria

Cargando opciones de pago...

⚠️

No hay opciones de pago disponibles para esta experiencia.

💳 Selecciona tu método de pago

ℹ️

Reserva creada exitosamente

N° de reserva: {{ createdBooking.booking_number }}

Total de la experiencia: {{ formatCurrency(bookingData.pricing.total, bookingData.experience?.price_currency) }}

💵 Monto a pagar ahora (anticipo {{ bookingData.experience?.deposit_percentage || 20 }}%):

{{ formatCurrency(bookingData.pricing.total * ((bookingData.experience?.deposit_percentage || 20) / 100), bookingData.experience?.price_currency) }}

Saldo restante: {{ formatCurrency(bookingData.pricing.total * ((100 - (bookingData.experience?.deposit_percentage || 20)) / 100), bookingData.experience?.price_currency) }} (pagas al finalizar)

Monto a pagar: {{ formatCurrency(bookingData.pricing.total, bookingData.experience?.price_currency) }}

🔒 Pago seguro - Tus datos están protegidos
🔍

Verificando tu transferencia...

Estamos revisando las notificaciones del banco para confirmar tu pago

Tiempo restante para verificación automática:
{{ Math.floor(breveCountdownSeconds / 60) }}:{{ String(breveCountdownSeconds % 60).padStart(2, '0') }}
El sistema verifica cada 10 segundos

Verificación en proceso

El sistema está consultando el correo del banco donde se reciben las notificaciones de transferencias Bre-B. Este proceso es completamente automático.

Cuando se confirme tu pago

  • Tu reserva se confirmará automáticamente
  • Recibirás un email de confirmación
  • Podrás ver los detalles en "Mis Reservas"
⚠️

Si no se aprueba en 15 minutos

Esto puede suceder si:

  • Aún no has realizado la transferencia
  • El monto transferido no coincide exactamente
  • Usaste una llave Bre-B diferente
  • El banco tiene demora en enviar la notificación

📧 En ese caso, nuestro equipo revisará manualmente y te contactará por email.

Referencia Breve: {{ brevePaymentCreated.breve_reference }}
Número de Reserva: {{ createdBooking.booking_number }}
Monto: ${{ brevePaymentCreated.expected_amount.toLocaleString('es-CO') }} COP

Puedes cerrar esta ventana. Te notificaremos por email cuando se confirme el pago.

¡Reserva Confirmada!

N° de Reserva: {{ createdBooking?.booking_number }}

Hemos enviado la confirmación a {{ user?.email }}

📧 Próximos pasos:

  • Revisa tu correo para los detalles de la reserva
  • El proveedor confirmará tu reserva en breve
  • Recibirás un recordatorio antes de la experiencia

{{ translationForm.id ? '✏️ Editar Traducciones' : '➕ Nueva Clave de Traducción' }}

📝 Información de la Clave

❌ Cancelar Servicio

⚠️ Importante: Al cancelar el servicio, el anticipo será reembolsado al cliente. No recibirás ningún pago por esta reserva.

Reserva: #{{ cancelServiceForm.booking.booking_number }}

Experiencia: {{ cancelServiceForm.booking.experience_title }}

Cliente: {{ cancelServiceForm.booking.customer?.name }}

Caracteres: {{ cancelServiceForm.cancellation_reason?.length || 0 }} / 10 mínimo

🚫 Reportar No-Show

⚠️ Importante: Al reportar un no-show:

  • El cliente pierde el anticipo
  • La plataforma retiene la comisión
  • NO recibirás pago (servicio no prestado)

Reserva: #{{ noShowForm.booking.booking_number }}

Experiencia: {{ noShowForm.booking.experience_title }}

Fecha: {{ formatDate(noShowForm.booking.booking_date) }}

Cliente: {{ noShowForm.booking.customer?.name }}

Puedes subir una imagen a Imgur o similar y pegar el enlace aquí

Formato: categoria.identificador

📅

Selecciona un Horario

{{ availabilityModal.experience?.title || 'Experiencia' }}

📍 Día {{ availabilityModal.dayNumber }} de la ruta

Fecha: {{ availabilityModal.date }}

✓ Gestión de capacidad habilitada

{{ slot.start_time }} - {{ slot.end_time }}
{{ slot.available_capacity }} / {{ slot.total_capacity }} disponibles
⚠️

No hay horarios disponibles para esta fecha

🕐

Selecciona Horarios

{{ timeSlotSelectionModal.experience?.title || 'Experiencia' }}

📍 Día {{ timeSlotSelectionModal.dayNumber }} de la ruta

Selecciona uno o más horarios que usará esta experiencia en la ruta

⚠️

Esta experiencia no tiene horarios configurados

{{ timeSlotSelectionModal.selectedSlotIds.length }} horario(s) seleccionado(s)
🔐

¿Olvidaste tu contraseña?

Ingresa tu email y te enviaremos un enlace para recuperarla

{{ passwordResetMessage }}

{{ error }}
🔑

Restablecer Contraseña

Ingresa tu nueva contraseña

{{ passwordResetMessage }}

✅ Las contraseñas coinciden ❌ Las contraseñas no coinciden
{{ error }}