Saltar a contenido

US-030 — Enlace a vista web detallada

Detalle de la historia

Historia

Como cliente de FleteChat pidiendo un reporte con volumen alto de resultados, quiero recibir un enlace a una vista web que muestre el reporte completo con los filtros ya aplicados, para revisar, refinar y exportar la información con comodidad en pantalla.

Persona de usuario

Aplica a todo cliente verificado que realiza una consulta de reportes (ver historias de consulta conversacional y filtrado libre) cuyo resultado supera el umbral inline y se deriva a vista web.

Contexto de negocio

Una lista de 47 embarques no cabe cómoda en un chat de WhatsApp. El cliente necesita: ver los registros en tabla, ordenarlos, aplicar filtros adicionales, y —muy frecuentemente— exportarlos a un archivo que pueda pegar en un correo a su equipo o a un cliente suyo.

La vista web detallada cumple ese rol: FleteChat genera un enlace firmado que, al abrirse, pide un código de verificación enviado por WhatsApp al mismo cliente que originó la consulta. Ingresado el código, se establece una sesión web con los filtros del cliente ya aplicados y la tabla paginada. Desde ahí el cliente puede refinar filtros, ordenar columnas y exportar a CSV. El enlace expira en una ventana corta y el código tiene vida útil aún más breve, para proteger los datos en tránsito y mitigar reenvíos accidentales del enlace.

Criterios de aceptación

Emisión del enlace

  1. Cuando el resultado de una consulta de reportes supera el umbral inline (ver historia de consulta conversacional, PR-121), FleteChat emite un enlace firmado a la vista web detallada y lo envía por WhatsApp en la respuesta.
  2. El enlace contiene los filtros ya aplicados que FleteChat extrajo del mensaje del cliente; una vez autenticada la sesión, esos filtros están visibles y se pueden modificar.
  3. El enlace es firmado y ligado al cliente que consultó; al abrirse, la vista resuelve el alcance de la cuenta del cliente.
  4. El enlace expira en una ventana corta (por defecto 1 hora; ver PR-127) para proteger los datos en tránsito. Pasada la ventana, abrir el enlace muestra una página de "enlace vencido" con instrucciones para pedir uno nuevo por WhatsApp.

Autenticación por código (OTP de sesión)

  1. Al abrir el enlace, la página solicita un código de verificación antes de mostrar los datos (ver PR-148). FleteChat envía el código por WhatsApp al mismo contacto que originó la consulta; como la ventana de conversación está activa, el código se envía como mensaje de sesión (no requiere plantilla Meta).
  2. Ingresado el código correcto, la página establece una sesión web ligada a ese navegador. La sesión es válida mientras dure la ventana del enlace (ver PR-127) y permite refinar filtros, ordenar y exportar sin pedir el código nuevamente.
  3. El código tiene vida útil corta y admite reintentos limitados de ingreso y de reenvío (ver PR-149). Agotados los reintentos, la sesión se bloquea y el cliente debe generar un enlace nuevo desde WhatsApp.
  4. Cada dispositivo o navegador que abra el enlace requiere su propio código; múltiples sesiones simultáneas quedan registradas en el audit log.

Vista web

  1. La vista web es una página responsiva, con la tabla de embarques, los filtros aplicados y controles para refinar (cambiar rango, agregar filtro, quitar filtro). El acceso requiere sesión autenticada por OTP (AC 5–6).
  2. La tabla es paginada y ordenable por columnas (código corto ENNN, fecha, origen, destino, modalidad, estatus).
  3. La vista ofrece exportar a CSV; el CSV contiene las mismas columnas visibles en la tabla, respetando los filtros aplicados. Export a Excel queda fuera del alcance de v1.0.
  4. La vista muestra en su cabecera el total de registros que cumplen los filtros y la fecha/hora de generación.

Aislamiento y seguridad

  1. El enlace resuelve siempre dentro del alcance de la cuenta del cliente que lo generó. El OTP garantiza además que sólo quien tenga acceso al WhatsApp del cliente original pueda autenticar la sesión: un reenvío del enlace a terceros no expone datos, porque el código se envía al número verificado del cliente y no al receptor del reenvío.
  2. FleteChat registra en el audit log cada solicitud de código, cada intento de ingreso (válido o inválido) y cada sesión establecida, con IP, user-agent y timestamp.
  3. Un enlace invalidado (porque el cliente pidió invalidación explícita o el operador lo revocó por sospecha de filtración) retorna "enlace invalidado" y el cliente debe generar uno nuevo desde WhatsApp. Sesiones activas sobre ese enlace se terminan al invalidarse.

Edge cases

  • Cliente abre el enlace después del vencimiento. La vista muestra "enlace vencido" y el mensaje sugiere volver a WhatsApp para generar uno nuevo.
  • Cliente reenvía el enlace a un colaborador o cliente suyo. El receptor abre la página pero no puede autenticar la sesión: el código llega al WhatsApp del cliente original, no al del receptor. El audit log registra el intento fallido con IP y user-agent.
  • Código OTP mal ingresado. La página acepta hasta un límite de intentos fallidos (ver PR-149). Agotados los intentos, la sesión se bloquea y el cliente debe generar un enlace nuevo desde WhatsApp.
  • Código OTP no llegó o se traspapeló. El cliente puede solicitar reenvío del código desde la misma página; se permiten reintentos limitados de reenvío por apertura (ver PR-149). Cada reenvío invalida el código anterior.
  • Código OTP expira antes de ser usado. Al vencer la vida útil del código (ver PR-149), la página pide solicitar uno nuevo.
  • Múltiples sesiones simultáneas. Si el cliente abre el enlace desde otro dispositivo dentro de la ventana de 1 hora, cada dispositivo pide su propio código y mantiene su sesión independiente. Todas quedan auditadas.
  • Filtros modificados en la vista producen cero resultados. La tabla muestra un estado vacío con un mensaje claro y sugiere relajar filtros.
  • Export CSV con caracteres especiales (nombres con acentos, comas en direcciones). El CSV usa codificación UTF-8 con BOM para compatibilidad con Excel y escapa correctamente los separadores.
  • Caída del servicio de generación de enlace o de envío de código. FleteChat lo declara al cliente por WhatsApp, reintenta una vez, y si sigue fallando activa handoff.

Tamaño, prioridad y tipo

  • Tamaño: M
  • Prioridad: P1 — complementa la experiencia conversacional de reportes para volúmenes reales.
  • Tipo: feature

Premisas

La historia está redactada bajo las siguientes premisas. Si alguna cambia, la historia debe revisarse y ajustarse en consecuencia. Todas deben ser confirmadas por el cliente antes de cerrar la historia.

  • PR-127 — Ventana del enlace al reporte. El enlace a la vista web detallada expira en 1 hora por defecto. Es un parámetro configurable por FleteChat. Reenviar la consulta por WhatsApp emite un enlace nuevo.
  • PR-128 — Export en CSV únicamente. En v1.0 la vista web sólo exporta a CSV. Export a Excel y otros formatos quedan fuera del alcance del MVP.
  • PR-129 — Trazabilidad del acceso. Cada solicitud de código, intento de ingreso (válido o inválido) y sesión establecida queda registrada en el audit log con IP, user-agent y timestamp.
  • PR-148 — OTP de sesión para vista web. Al abrir el enlace, la página solicita un código de verificación que FleteChat envía por WhatsApp al número verificado del cliente que originó la consulta. Ingresado el código correcto, se establece una sesión web válida mientras dure la ventana del enlace (PR-127). Mitiga el vector de reenvíos accidentales del enlace: el receptor del reenvío no puede autenticar porque el código va al cliente original.
  • PR-149 — Vida útil y reintentos del código OTP. El código OTP tiene vida útil corta: 10 minutos por defecto (parametrizable por FleteChat). Se admiten hasta 3 intentos de ingreso por código y hasta 3 reenvíos por apertura del enlace; cada reenvío invalida el código anterior. Agotados los reintentos, la sesión se bloquea y el cliente debe generar un enlace nuevo desde WhatsApp.

Refinamiento y Definition of Ready

Notas

Fecha Participantes Acuerdo / Nota
2026-04-19 Kaeus Versión inicial.
2026-04-19 Kaeus Ajuste: se agrega OTP de sesión para autenticar el acceso a la vista web. Nuevas premisas PR-148 (OTP de sesión) y PR-149 (vida y reintentos). Motivación: mitigar reenvíos accidentales del enlace dado que el reporte expone montos facturados.
2026-04-19 Kaeus Aprobación interna: pase a 🔵 Refinada.

Checklist

  • ✅ Historia escrita en formato Como / Quiero / Para
  • ✅ Persona de usuario identificada
  • ✅ Contexto de negocio documentado
  • ✅ Criterios de aceptación observables y pass/fail
  • ✅ Edge cases relevantes listados
  • ✅ Tamaño y prioridad asignados
  • ⬜ Premisas PR-127 a PR-129 y PR-148 a PR-149 confirmadas por el cliente
  • ⬜ Reglas de negocio aplicables aprobadas
  • ⬜ Requerimientos funcionales aplicables aprobados
  • ⬜ Historia aprobada formalmente por el cliente