US-031 — Reporte de cotizaciones no aprobadas
Detalle de la historia¶
Historia¶
Como operador de FleteChat que monitorea la operación comercial, quiero un reporte de cotizaciones emitidas que no llegaron a aprobarse, para identificar oportunidades perdidas, patrones comunes y clientes a los que vale la pena contactar proactivamente.
Persona de usuario¶
Aplica a los operadores de FleteChat con rol admin u operator. El rol price_manager no tiene acceso a este reporte (no gestiona relación comercial con clientes).
Contexto de negocio¶
Una cotización emitida que nunca se aprueba es información valiosa: cuando se repite un patrón (mismo cliente, misma ruta, misma modalidad), la causa puede ser precio, tiempo de respuesta, desajuste con lo que el cliente esperaba, o simplemente que el cliente cambió de plan. Sin una vista que agregue estas cotizaciones, la información se pierde entre miles de registros operativos.
El reporte vive en el backoffice y se accede bajo demanda. Muestra las cotizaciones emitidas cuyo ciclo de aprobación no se completó (cotización vencida sin aprobar, cotización cancelada por el cliente, cotización abandonada por el cliente sin avanzar). Filtros típicos: rango de fechas, cliente, modalidad. El objetivo es accionable: identificar oportunidades, no producir un dashboard estadístico.
Criterios de aceptación¶
Acceso¶
- El reporte está disponible en el backoffice de FleteChat a los roles admin y operator. Al rol price_manager se le deniega el acceso con un mensaje claro de permisos insuficientes.
- El reporte se genera bajo demanda a partir de los filtros que el operador define; no hay generación programada en v1.0.
Contenido¶
- El reporte incluye todas las cotizaciones cuyo estado final es "no aprobada" en alguna de sus variantes: vencida sin aprobarse, cancelada por el cliente, abandonada por el cliente (por ejemplo, nunca confirmó intención).
- Cada fila muestra: código corto
CNNN, cliente (nombre del titular), contacto que cotizó (titular o colaborador), fecha de emisión, fecha de vencimiento, ruta (origen/destino), modalidad, total cotizado y motivo del no-aprobación (vencida, cancelada, abandonada). - La tabla es ordenable por columnas y paginada cuando el volumen es alto.
Filtros¶
- Filtros disponibles: rango de fechas (de emisión), cliente (por nombre o código), modalidad, nivel corporativo (si aplica), motivo del no-aprobación.
- Los filtros son combinables con AND. Pueden guardarse como vista favorita del operador para reutilizar.
Export y trazabilidad¶
- El reporte se puede exportar a CSV desde la misma vista, con los filtros aplicados.
- Cada generación y export queda registrado en el audit log (operador, filtros, timestamp, cantidad de filas).
Recordatorios al cliente pre-vencimiento¶
- Mientras una cotización emitida esté vigente y aún no haya sido aprobada, el cliente recibe uno o dos recordatorios por WhatsApp antes del vencimiento (intervalos parametrizables; ver US-016 para el caso del formulario operativo y US-026 para la regla general de proactivas). Cada recordatorio menciona el código
CNNN, el tiempo restante y ofrece tres caminos: aprobar, aclarar dudas (handoff al asesor) o declinar explícitamente.
Captura de razón cuando el cliente declina¶
-
Si el cliente declina espontáneamente una cotización (por mensaje natural: "no la voy a tomar", "ya decidí no continuar", "mejor con otro"), FleteChat pide una razón breve con opciones cerradas más opción libre: precio, tiempo, otro proveedor, otro motivo (texto libre). El motivo de la declinación queda almacenado y aparece en el reporte como columna adicional.
-
La plantilla Meta del recordatorio pre-vencimiento (AC 10) no incluye botón interactivo "NO APRUEBO" en v1.0: el cliente declina por mensaje natural (AC 11) o no actúa hasta el vencimiento. La dependencia con plantilla Meta aprobada + costo por uso vive en PR-243; su materialización está prevista para v1.1.
Edge cases¶
- Cotización vencida pero re-cotizada automáticamente (ver historia de vigencia y expiración). La cotización original aparece como "vencida sin aprobarse"; la re-cotización derivada es una fila propia con su propio estado final.
- Cotización de un cliente que ya no existe (eliminación de datos ejercida por el cliente, ver historia de eliminación de datos). La fila muestra "cliente eliminado" y el código
CNNNpara trazabilidad, sin exponer datos personales. - Operador aplica filtros que producen cero resultados. La vista muestra estado vacío con mensaje y sugiere relajar filtros.
- Volumen muy alto (miles de filas). La tabla pagina y el export CSV se genera con streaming para no bloquear el backoffice.
Tamaño, prioridad y tipo¶
- Tamaño: S
- Prioridad: P1 — valor comercial claro, no bloquea la operación cotidiana.
- 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-130 — Categorías de no-aprobación. Las cotizaciones "no aprobadas" se clasifican en vencida, cancelada por el cliente, abandonada (el cliente nunca confirmó intención). Otras categorías se evalúan en versiones posteriores.
- PR-131 — Acceso por rol. El reporte es accesible únicamente a admin y operator. El rol price_manager no tiene acceso.
- PR-132 — Generación bajo demanda. En v1.0 no hay generación programada ni envío automático por correo del reporte. El operador lo consulta desde el backoffice cuando lo necesita.
- PR-243 — Botón interactivo "NO APRUEBO" diferido a v1.1. El botón interactivo "NO APRUEBO" sobre plantilla Meta queda diferido a v1.1 por dependencia con (a) aprobación de la plantilla por Meta y (b) costo por uso. En v1.0 el cliente declina por mensaje natural conforme a AC 11.
Refinamiento y Definition of Ready¶
Notas¶
| Fecha | Participantes | Acuerdo / Nota |
|---|---|---|
| 2026-04-19 | Kaeus | Versión inicial. |
| 2026-04-19 | Kaeus | Aprobación interna: pase a 🔵 Refinada. |
| 2026-05-27 | Kaeus | v2.0 — Refinamientos derivados del feedback de Zeverium consolidado en docs/spec/customer-feedback/impact-analysis-2026-05.md. AC 10 (1–2 recordatorios al cliente pre-vencimiento con caminos aprobar/aclarar/declinar; comentario #57 a). AC 11 (captura de razón breve cuando el cliente declina espontáneamente: precio/tiempo/otro proveedor/otro; comentario #57 b). AC 12 (decisión explícita: botón "NO APRUEBO" diferido a v1.1; comentario #57 c). Premisa nueva PR-243 (botón Meta diferido v1.1). |
| 2026-05-27 | Kaeus | v2.0 (corrección de calidad) — AC 12 reformulado como AC observable (la plantilla Meta de v1.0 no incluye botón interactivo). El subencabezado "Botón interactivo NO APRUEBO — diferido a v1.1" se retira para que la decisión viva solo en PR-243 + AC 12, sin triplicación. |
| 2026-05-27 | Kaeus | v2.0 (corrección de calidad) — AC 1 reformulado para retirar el código HTTP "403" del AC narrativo (denegación de acceso descrita en términos observables). AC 11 reformulado para retirar el nombre técnico de columna (motivo_declinacion) y hablar del motivo de la declinación en términos funcionales. Defectos §2 del quality-review-v2.0.md. |
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-130 a PR-132 y PR-243 confirmadas por el cliente
- ⬜ Reglas de negocio aplicables aprobadas
- ⬜ Requerimientos funcionales aplicables aprobados
- ⬜ Historia aprobada formalmente por el cliente