import sys; sys.path.insert(0, '/tmp/manuales')
from manual_lib import *

c = []
# 1
c += [H1('1. Bienvenida'),
      P('Este manual explica el trabajo diario en recepción con Huésped Manager PMS: el ingreso de huéspedes (check-in), los acompañantes, '
        'la salida (check-out), los visitantes, los empleados y los paquetes. Está pensado para el perfil <b>Funcionario Lobby</b>; '
        'el perfil <b>Operador de Garita</b> encontrará lo suyo en las secciones de visitantes, empleados y paquetes.'),
      P('Las pantallas muestran los datos de su copropiedad. Los nombres, apartamentos y fechas de las imágenes son de ejemplo.'),
      caja('Algunas opciones solo aparecen para el Administrador (por ejemplo anular un registro o trasladarlo de apartamento). '
           'Si no ve una opción que este manual menciona, es porque su perfil no la tiene habilitada.', 'nota')]
# 2
c += [H1('2. Ingreso y salida del sistema'),
      H2('Iniciar sesión'),
      pasos(['Abra la dirección del sistema en el navegador (Chrome, Edge o Firefox actualizados).',
             'Escriba su <b>usuario</b> y su <b>contraseña</b> y pulse <b>Acceder</b>.',
             'El sistema abre el <b>Panel de recepción</b>.']),
      captura('login', 'Pantalla de ingreso.', 0.78),
      caja('Después de <b>5 intentos fallidos en 15 minutos</b> el usuario queda bloqueado por 15 minutos, aunque luego escriba la clave correcta. '
           'Espere o pida ayuda al Administrador. Nunca comparta su contraseña: cada acción queda registrada con su usuario.', 'aviso'),
      H2('Cerrar sesión'),
      P('Abra el menú de su nombre (arriba a la derecha) y elija <b>Salir</b>. Cierre siempre la sesión al terminar el turno o al dejar el equipo. '
        'Si deja la sesión abierta sin actividad por varias horas (4 horas por defecto), el sistema la cierra solo y le pedirá ingresar de nuevo.')]
# 3
c += [H1('3. La pantalla principal'),
      P('Todas las páginas comparten la misma barra superior y el mismo menú horizontal:'),
      *vinetas(['<b>Barra superior:</b> nombre de la copropiedad, fecha y hora, y el menú de su usuario (Mi perfil, Minuta digital, Manual, Salir).',
                '<b>Menú horizontal:</b> Manillas, Ingresos, Salidas, Edición, Consultas, Registros, Reportes, Parqueadero y Reservas. '
                'Cada opción despliega sus submenús al pasar el mouse o al hacer clic.']),
      captura('menu_ingresos', 'Menú Ingresos desplegado.'),
      H2('Panel de recepción'),
      P('Es la página de inicio. Resume la operación del día:'),
      *vinetas(['<b>Indicadores:</b> apartamentos ocupados y disponibles, llegadas y salidas de hoy, y huéspedes en casa.',
                '<b>Estado de apartamentos:</b> una tarjeta por apartamento, <font color="#9A3412"><b>Ocupado</b></font> (coral) o '
                '<font color="#15803D"><b>Disponible</b></font> (verde), con el número de huéspedes y la fecha de salida. Elija la torre, filtre por estado '
                'o escriba en el buscador un apartamento o un nombre. Un clic en un apartamento ocupado abre su check-out; en uno disponible, el check-in.',
                '<b>Llegadas pendientes:</b> reservas en línea que llegan hoy. El enlace <b>Verificar reservas</b> lleva a la lista para hacer su check-in.',
                '<b>Salidas pendientes:</b> estadías que salen hoy o que ya vencieron (en rojo), con acceso directo al check-out.',
                '<b>Calendario de reservas:</b> dos semanas por apartamento: en casa, llega hoy, sale hoy o vencida, confirmada y finalizada.',
                '<b>Accesos rápidos:</b> Paquete, Ingreso de invitado, Check-out y Nuevo check-in.']),
      captura('dashboard', 'Panel de recepción.'),
      captura('calendario', 'Calendario de reservas del panel.')]
# 4
c += [H1('4. Check-in (ingreso de huéspedes)'),
      P('Menú <b>Ingresos › CHECK-IN</b> o el botón <b>Nuevo check-in</b> del panel.'),
      H2('Datos del registro'),
      pasos(['Elija el <b>Apartamento</b>. Si está ocupado, el sistema lo avisa.',
             'Indique la <b>Ocupación</b> (Huésped, Propietario o Familiar) y la cantidad de <b>Huésped(es)</b>.',
             'Marque si llegan con <b>Vehículo</b> y escriba las placas separadas por coma.',
             'Escriba las <b>Noches</b>: la fecha de <b>Salida</b> se calcula sola. Revise la fecha y la hora de ingreso.',
             'Pulse <b>Checkin</b>. El sistema crea un <b>número de registro (folio)</b> único que identifica esta estadía en todo el sistema.']),
      captura('checkin', 'Formulario de check-in.'),
      caja('Para el tipo de ocupación <b>Huésped</b> existe un límite según la capacidad del apartamento. Para propietarios y familiares no aplica.', 'nota'),
      H2('Datos del huésped titular'),
      P('Al confirmar el registro se abre la ventana <b>Datos de usuario titular</b>. Al escribir la identificación, el sistema busca al huésped '
        'y completa sus datos si ya estuvo antes.'),
      *tabla(['Campo', 'Cómo diligenciarlo'], [
          ['Tipo ID', 'CC (cédula), CC nuevo formato, CE (cédula de extranjería), PA (pasaporte), TI (tarjeta de identidad), CD (carné diplomático), DE (documento extranjero) o RC (registro civil).'],
          ['Identificación', 'Número del documento, sin puntos ni espacios. Es único en el sistema.'],
          ['Apellidos y nombres', 'Primer apellido y primer nombre son obligatorios.'],
          ['Género', 'M (masculino) o F (femenino).'],
          ['Fecha de nacimiento', 'Formato ddmmaaaa, sin puntos ni barras. Ejemplo: 28041989 = 28 de abril de 1989.'],
          ['País y ciudades', 'País, ciudad de residencia y ciudad de procedencia (exigidos para migración).'],
          ['Contacto', 'Dirección, celular, correo y contactos de emergencia.'],
          ['Manilla (#M)', 'Número de la manilla entregada. Si la copropiedad no usa manillas, esta casilla no aparece.'],
          ['Fotografía', 'Botón <b>Cámara</b>: tome la foto del huésped.'],
      ], [0.27, 0.73]),
      captura('checkin_titular', 'Ventana de datos del huésped titular.'),
      caja('Tome siempre la fotografía y verifique el documento físico. No solicite RH ni otros datos que el escáner de cédulas ya trae.', 'ok')]
# 5
c += [H1('5. Acompañantes (Adicionar)'),
      P('Menú <b>Ingresos › Adicionar Huésped</b>. Sirve para agregar huéspedes a un registro que ya existe.'),
      pasos(['Elija el <b>Apartamento</b> (registro) en la lista.',
             'Revise <b>Datos del registro</b> y <b>Huéspedes registrados</b>, con el resumen de total de huéspedes, menores de 2 años y ocupación de adultos.',
             'Pulse <b>+ Huésped</b> para agregar una fila por cada acompañante y diligencie sus datos.',
             'Pulse <b>Guardar</b>. <b>Limpiar</b> vacía los campos; <b>Borrar campos</b> quita las filas agregadas.']),
      captura('adicionar', 'Adicionar acompañantes a un registro.'),
      caja('Tenga en cuenta la cantidad de huéspedes declarada en el check-in y la capacidad del apartamento.', 'aviso')]
# 6
c += [H1('6. Check-out (salida)'),
      P('Menú <b>Salidas › CHECK-OUT</b>, o desde el panel: <b>Salidas pendientes › Check-out</b> o un clic en un apartamento ocupado.'),
      pasos(['Elija el <b>Apartamento</b> (registro) y pulse <b>Buscar</b>.',
             'Revise los datos del registro y la lista de huéspedes.',
             'Use <b>OBS</b> para dejar observaciones de la salida.',
             'Pulse <b>CHECKOUT</b> para la salida del registro completo, o el botón de salida de cada huésped si salen en momentos distintos.',
             'Confirme en la ventana de aviso.']),
      captura('checkout', 'Check-out de un registro.'),
      captura('alerta', 'Confirmación antes de una acción importante.', 0.62),
      caja('Las salidas <b>vencidas</b> (fecha de salida anterior a hoy) aparecen en rojo en el panel: regístrelas cuanto antes para que el apartamento vuelva a estar disponible.', 'aviso')]
# 7
c += [H1('7. Visitantes'),
      H2('Ingreso de un visitante'),
      pasos(['Menú <b>Ingresos › Ingreso de Invitados</b> o el botón <b>Ingreso de invitado</b> del panel.',
             'Elija el <b>Apartamento</b> y pulse <b>Buscar</b>. Verá los ocupantes del registro para confirmar la visita.',
             'Diligencie los datos del visitante (y la manilla, si aplica) y pulse <b>Ingresar visita</b>.']),
      captura('visitante', 'Selección del apartamento para el ingreso de un visitante.'),
      H2('Salida de un visitante'),
      P('Menú <b>Salidas › Salida de visitantes</b>. Ubique al visitante y use el primer botón de <b>Acciones</b>. '
        'Registre la salida a tiempo: el sistema lleva el control de quién está dentro de la copropiedad.')]
# 8
c += [H1('8. Empleados y paquetes'),
      H2('Empleados (personal de servicio)'),
      P('Menú <b>Ingresos › Ingreso de empleados</b>: elija el apartamento, diligencie los datos, seleccione la actividad y pulse <b>Ingresar</b>. '
        'Para la salida: <b>Salidas › Salida de empleados</b>; el primer botón registra la salida y el segundo muestra o toma la fotografía.'),
      H2('Paquetes y mensajería'),
      P('Botón <b>Paquete</b> del panel (o el menú de Ingresos de Garita): registre el paquete con su apartamento. Si el apartamento tiene correo '
        'registrado, el propietario recibe la notificación. Consulte los paquetes pendientes en <b>Consultas › Consultar paquetes</b> y registre la entrega.')]
# 9
c += [H1('9. Reservas y consultas'),
      *vinetas(['<b>Reservas › Verificar reserva:</b> reservas hechas por los propietarios en el portal. Desde allí se realiza el check-in de quienes llegan.',
                '<b>Consultas › General:</b> listado de apartamentos, huéspedes, visitantes y otros datos, con buscador.',
                '<b>Consultas › Reporte de ocupación</b> y <b>Ocupación actual</b> por torres.',
                '<b>Reportes › Huésped en casa:</b> quién está alojado hoy.']),
      caja('Las tablas largas se pueden desplazar hacia los lados dentro de su recuadro. En pantallas pequeñas, deslice la tabla con el dedo o con la rueda del mouse + Shift.', 'nota')]
# 10
c += [H1('10. Mensajes frecuentes y qué hacer'),
      *tabla(['Mensaje o situación', 'Qué significa y qué hacer'], [
          ['La página vuelve a la pantalla de ingreso', 'La sesión expiró por inactividad. Ingrese de nuevo.'],
          ['"Recargue la página e intente de nuevo"', 'La página llevaba mucho tiempo abierta o se inició sesión en otra pestaña. Recargue (F5) y repita la acción.'],
          ['"Acceso denegado"', 'Su perfil no tiene permiso para esa opción. Si la necesita, consulte al Administrador.'],
          ['Demasiados intentos fallidos', 'Espere 15 minutos o pida al Administrador que revise su usuario.'],
          ['El apartamento aparece ocupado', 'Ya tiene un registro activo. Verifique en el panel o en Check-out antes de crear otro.'],
          ['Manilla 0000', 'Registro sin manilla: la copropiedad no usa manillas o es una excepción (por ejemplo, menores).'],
          ['No aparece una opción del manual', 'Su perfil no la tiene habilitada.'],
      ], [0.36, 0.64])]
# 11
c += [H1('11. Glosario'),
      *tabla(['Término', 'Significado'], [
          ['Registro / folio', 'Número único de cada estadía. Agrupa al titular y sus acompañantes.'],
          ['Check-in', 'Ingreso del registro y de sus huéspedes.'],
          ['Check-out', 'Salida del registro o de un huésped.'],
          ['Titular', 'Primer huésped del registro.'],
          ['Acompañante', 'Huésped agregado a un registro existente.'],
          ['Ocupación', 'Huésped, propietario o familiar.'],
          ['Manilla (#M)', 'Brazalete de identificación entregado al huésped o visitante.'],
          ['Salida vencida', 'Estadía cuya fecha de salida ya pasó sin registrar el check-out.'],
      ], [0.3, 0.7])]

construir(sys.argv[1], 'Recepción', 'Perfil Funcionario Lobby y Operador de Garita',
          'Guía del trabajo diario en recepción: panel de recepción, check-in, acompañantes, check-out, visitantes, empleados, paquetes y consultas.', c)
print('ok')
