Propuesta IA: modelo PropuestaIA y capa de datos economicos

La capa de economia existe para que el dinero viva en un solo sitio y nunca
cruce hacia el prompt. El pipeline recibe de ahi solo refPartida y nombre.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
urieljareth
2026-07-28 18:10:51 -06:00
co-authored by Claude Opus 5
parent 20f535d485
commit 4e103beb27
4 changed files with 173 additions and 0 deletions
+26
View File
@@ -0,0 +1,26 @@
import { calcularRatio } from "@/lib/propuesta/economia";
let fallas = 0;
function check(n: string, ok: boolean, d = "") {
console.log(`${ok ? " OK " : " FALLA"} | ${n}${d ? " -> " + d : ""}`);
if (!ok) fallas++;
}
check("sin valor anual no hay ratio", calcularRatio(100000, null) === null);
check("valor anual cero no divide entre cero", calcularRatio(100000, 0) === null);
check("valor anual negativo no produce ratio", calcularRatio(100000, -5) === null);
check("ratio 5% = subcotizado", calcularRatio(50000, 1000000)?.lectura === "subcotizado");
check("ratio 20% = en rango", calcularRatio(200000, 1000000)?.lectura === "en_rango");
check("ratio 35% = alto", calcularRatio(350000, 1000000)?.lectura === "alto");
check("ratio 60% = objecion probable", calcularRatio(600000, 1000000)?.lectura === "objecion_probable");
// Los cortes exactos: 0.10 entra en rango, 0.25 sigue en rango, 0.40 sigue alto.
check("corte 10% cae en rango", calcularRatio(100000, 1000000)?.lectura === "en_rango");
check("corte 25% cae en rango", calcularRatio(250000, 1000000)?.lectura === "en_rango");
check("corte 40% cae en alto", calcularRatio(400000, 1000000)?.lectura === "alto");
check("ratio redondeado a 3 decimales", calcularRatio(123456, 1000000)?.ratio === 0.123);
console.log(fallas === 0 ? "\ntodo paso\n" : `\n${fallas} fallas\n`);
process.exit(fallas === 0 ? 0 : 1);