diff --git a/scripts/verificar-propuesta-pdf.ts b/scripts/verificar-propuesta-pdf.ts index f9ecdb6..c527b7d 100644 --- a/scripts/verificar-propuesta-pdf.ts +++ b/scripts/verificar-propuesta-pdf.ts @@ -72,7 +72,7 @@ const propuesta: PropuestaConsultiva = { { id: "D02", urgencia: "verde", titulo: "MARCADORVERDE", descripcion: "Ya tienen la base de clientes ordenada.", confianza: "confirmado", citas: ["C01"], hechos: ["H01"] }, ], valorProblema: { - dimensiones: [{ tipo: "tiempo", descripcion: "MARCADORVALOR horas perdidas", calculo: { factores: [{ nombre: "h", valor: 8 }, { nombre: "s", valor: 52 }, { nombre: "c", valor: 400 }], montoAnualMXN: 166400 }, confianza: "estimado", hechos: ["H01"] }], + dimensiones: [{ tipo: "tiempo", descripcion: "MARCADORVALOR horas perdidas", calculo: { factores: [{ nombre: "h", valor: 8, confianza: "confirmado" }, { nombre: "s", valor: 52, confianza: "confirmado" }, { nombre: "c", valor: 400, confianza: "estimado" }], montoAnualMXN: 166400 }, confianza: "estimado", hechos: ["H01"] }], notaMetodologia: "MARCADORMETODO ocho horas por semana a costo cargado.", }, resultados: [{ enunciado: "MARCADORRESULTADO cero mensajes sin respuesta", metrica: "tiempo", lineaBase: null, periodoMedicion: "mensual" }], @@ -156,6 +156,17 @@ async function main() { check("el anexo calcula el ratio", txtA.includes("75.3"), "125280/166400"); check("el anexo interpreta el ratio", txtA.includes("objecion probable")); check("el anexo sugiere responder con alcance", txtA.includes("no con descuento")); + check("el anexo desglosa de donde sale el valor anual", txtA.includes("De donde sale el valor anual")); + check("el anexo muestra los factores con su confianza", txtA.includes("confirmado") && txtA.includes("estimado")); + + // R5b: una cifra sostenida solo por estimaciones debe llevar alerta visible. + const soloEstimado = await generarAnexoInternoPDF({ + ...datos, + propuesta: { ...propuesta, diagnostico: { ...propuesta.diagnostico, valorProblema: { ...propuesta.diagnostico.valorProblema, + dimensiones: [{ ...propuesta.diagnostico.valorProblema.dimensiones[0], calculo: { factores: [{ nombre: "a", valor: 8, confianza: "estimado" as const }, { nombre: "b", valor: 20800, confianza: "estimado" as const }], montoAnualMXN: 166400 } }] } } }, + }); + check("el anexo alerta si la cifra descansa solo en estimaciones", textoDePdf(soloEstimado).includes("puede cuadrar y aun asi estar inflada")); + check("el anexo NO alerta si hay factores confirmados", !txtA.includes("puede cuadrar y aun asi estar inflada")); // Robustez del branding: la API de configuracion no valida los valores. for (const malo of ["