paperclip-plugin-autopilot-ops 0.1.63 → 0.1.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/manifest.js +1 -1
- package/dist/ui/index.js +1 -1
- package/dist/worker.js +16 -12
- package/package.json +1 -1
package/dist/manifest.js
CHANGED
package/dist/ui/index.js
CHANGED
package/dist/worker.js
CHANGED
|
@@ -39932,7 +39932,7 @@ function startWorkerRpcHost(options) {
|
|
|
39932
39932
|
|
|
39933
39933
|
// src/manifest.ts
|
|
39934
39934
|
var PLUGIN_ID = "alephoo.autopilot-ops";
|
|
39935
|
-
var PLUGIN_VERSION = "0.1.
|
|
39935
|
+
var PLUGIN_VERSION = "0.1.64";
|
|
39936
39936
|
var DB_NAMESPACE_SLUG = "autopilot_ops";
|
|
39937
39937
|
var PAGE_ROUTE = "autopilot";
|
|
39938
39938
|
var TOOL_NAMES = {
|
|
@@ -44720,7 +44720,7 @@ function evaluarRentabilidad(input2) {
|
|
|
44720
44720
|
if ((clase2 === "perdida" || clase2 === "margen_bajo") && honorarioBase !== null) {
|
|
44721
44721
|
const sinInsumos = valor - descuento - honorarioBase - indUsado;
|
|
44722
44722
|
const llegan = reparto.filter((r) => r.margen >= minimo);
|
|
44723
|
-
const noLlegan = reparto.filter((r) => r.margen < minimo);
|
|
44723
|
+
const noLlegan = reparto.filter((r) => r.margen < minimo).sort((a, b) => a.margen - b.margen);
|
|
44724
44724
|
if (llegan.length > 0 && noLlegan.length > 0) {
|
|
44725
44725
|
causa = "honorario_profesional";
|
|
44726
44726
|
causaProfesionales = noLlegan.map((r) => ({ profesional_id: r.profesional_id, profesional: r.profesional, honorario: r.honorario, margen: r.margen }));
|
|
@@ -44771,7 +44771,7 @@ function evaluarRentabilidad(input2) {
|
|
|
44771
44771
|
insumos_objetivo: causa === "insumos" ? insumosObjetivo : null,
|
|
44772
44772
|
descuento,
|
|
44773
44773
|
descuento_pct: descuentoPct,
|
|
44774
|
-
no_es_practica: noEsPractica(l),
|
|
44774
|
+
no_es_practica: !input2.esPractica && noEsPractica(l),
|
|
44775
44775
|
perdida_menor: impacto !== null && impacto < 0 && Math.abs(impacto) < perdidaMenor,
|
|
44776
44776
|
porque: null,
|
|
44777
44777
|
faltas,
|
|
@@ -45215,7 +45215,8 @@ function opcionesRentabilidad(op) {
|
|
|
45215
45215
|
sinInsumos: Array.isArray(op.practicas_sin_insumos) ? op.practicas_sin_insumos.map(String).slice(0, 5e3) : [],
|
|
45216
45216
|
descuento: porcentajeDescuento(op.descuento_cobro) ?? 0,
|
|
45217
45217
|
descuentoPorFinanciador: leerDescuentos(op.descuentos_financiador),
|
|
45218
|
-
rutina: op.rutina_liquidacion === "mensual" ? "mensual" : "nueva"
|
|
45218
|
+
rutina: op.rutina_liquidacion === "mensual" ? "mensual" : "nueva",
|
|
45219
|
+
sonPracticas: Array.isArray(op.son_practicas) ? op.son_practicas.map(String).slice(0, 5e3) : []
|
|
45219
45220
|
};
|
|
45220
45221
|
}
|
|
45221
45222
|
async function leerBases(ctx, companyId) {
|
|
@@ -45225,7 +45226,7 @@ async function leerBases(ctx, companyId) {
|
|
|
45225
45226
|
async function recalcularBases(ctx, companyId, costos) {
|
|
45226
45227
|
const ms = await listarMediciones(ctx, companyId);
|
|
45227
45228
|
if (!ms.length) return null;
|
|
45228
|
-
const lecturas = ms.map((m) => ({ minutos: m.minutos, tipo: m.tipo, volumen: m.evaluacion.volumen ?? 0, dias: m.evaluacion.dias ?? 90, componentes: m.componentes }));
|
|
45229
|
+
const lecturas = ms.filter((m) => !m.evaluacion.no_es_practica).map((m) => ({ minutos: m.minutos, tipo: m.tipo, volumen: m.evaluacion.volumen ?? 0, dias: m.evaluacion.dias ?? 90, componentes: m.componentes }));
|
|
45229
45230
|
const bases = basesIndirectos(lecturas, costos);
|
|
45230
45231
|
await ctx.db.execute(
|
|
45231
45232
|
`INSERT INTO ${t3(ctx, "rentabilidad_base")} (company_id, bases, practicas, calculada_el) VALUES ($1, $2::jsonb, $3, now())
|
|
@@ -45770,7 +45771,7 @@ function resultadoPedido(d, e) {
|
|
|
45770
45771
|
return { accion, pedido: null, ahora: null, cumple: e.clase === "rentable" ? true : null };
|
|
45771
45772
|
}
|
|
45772
45773
|
function evaluarConOpciones(l, hoy, op, bases) {
|
|
45773
|
-
return evaluarRentabilidad({ lectura: l, hoy, umbral: op.umbral, mesesPrecio: op.mesesPrecio, indirectos: op.indirectos, bases, medirCon: op.medirCon, perdidaMenor: op.perdidaMenor, sinInsumos: op.sinInsumos.includes(normalizarCodigo(l.codigo) ?? ""), descuento: descuentoDe(op, l.financiador), rutina: op.rutina });
|
|
45774
|
+
return evaluarRentabilidad({ lectura: l, hoy, umbral: op.umbral, mesesPrecio: op.mesesPrecio, indirectos: op.indirectos, bases, medirCon: op.medirCon, perdidaMenor: op.perdidaMenor, sinInsumos: op.sinInsumos.includes(normalizarCodigo(l.codigo) ?? ""), descuento: descuentoDe(op, l.financiador), rutina: op.rutina, esPractica: op.sonPracticas.includes(normalizarCodigo(l.codigo) ?? "") });
|
|
45774
45775
|
}
|
|
45775
45776
|
async function evaluarRentabilidades(ctx, companyId, lecturas) {
|
|
45776
45777
|
if (!Array.isArray(lecturas)) throw new OpsError("validacion", "lecturas: tiene que ser una lista");
|
|
@@ -45784,11 +45785,11 @@ async function evaluarRentabilidades(ctx, companyId, lecturas) {
|
|
|
45784
45785
|
imputarMinutos(validas);
|
|
45785
45786
|
const anteriores = new Map((await listarMediciones(ctx, companyId)).map((m) => [m.referencia, m]));
|
|
45786
45787
|
const completa = validas.length > 0 && validas.length >= anteriores.size * 0.8;
|
|
45787
|
-
const
|
|
45788
|
+
const practicas = validas.filter((l) => opciones.sonPracticas.includes(normalizarCodigo(l.codigo) ?? "") || !noEsPractica(l));
|
|
45789
|
+
const bases = completa ? await guardarBases(ctx, companyId, practicas, opciones.indirectos) : await leerBases(ctx, companyId);
|
|
45788
45790
|
const pedidos = await ultimosPedidos(ctx, companyId);
|
|
45789
45791
|
const medidas = [];
|
|
45790
45792
|
const resultados = [];
|
|
45791
|
-
const noSonPracticas = [];
|
|
45792
45793
|
for (const [indice, l] of leidas.entries()) {
|
|
45793
45794
|
if ("error" in l) {
|
|
45794
45795
|
resultados.push({ indice, error: l.error });
|
|
@@ -45797,8 +45798,7 @@ async function evaluarRentabilidades(ctx, companyId, lecturas) {
|
|
|
45797
45798
|
const evaluacion = evaluarConOpciones(l.lectura, hoy, opciones, bases);
|
|
45798
45799
|
const referencia = `rentabilidad:${l.lectura.prestacion_id}:${l.lectura.financiador_id}`;
|
|
45799
45800
|
const previa = anteriores.get(referencia);
|
|
45800
|
-
if (evaluacion.no_es_practica)
|
|
45801
|
-
else await registrarCambiosHis(ctx, {
|
|
45801
|
+
if (!evaluacion.no_es_practica) await registrarCambiosHis(ctx, {
|
|
45802
45802
|
companyId,
|
|
45803
45803
|
referencia,
|
|
45804
45804
|
codigo: l.lectura.codigo,
|
|
@@ -45806,11 +45806,11 @@ async function evaluarRentabilidades(ctx, companyId, lecturas) {
|
|
|
45806
45806
|
antes: previa ? { valor: previa.evaluacion.valor, honorarios: (previa.evaluacion.honorarios ?? []).map((h) => ({ profesional_id: h.profesional_id, profesional: h.profesional, honorario: h.honorario })) } : null,
|
|
45807
45807
|
despues: { valor: evaluacion.valor, honorarios: evaluacion.honorarios.map((h) => ({ profesional_id: h.profesional_id, profesional: h.profesional, honorario: h.honorario })) }
|
|
45808
45808
|
});
|
|
45809
|
-
|
|
45809
|
+
medidas.push({ lectura: l.lectura, evaluacion });
|
|
45810
45810
|
const apertura = decidirApertura(evaluacion, pedidos.get(referencia) ?? null, hoy, opciones.perdidaMenor);
|
|
45811
45811
|
resultados.push({ clave: `${l.lectura.prestacion_id}:${l.lectura.financiador_id}`, referencia, codigo: l.lectura.codigo, practica: l.lectura.nombre, financiador: l.lectura.financiador, evaluacion, oracion: oracionRentabilidad(l.lectura, evaluacion), abrir: apertura.abrir, motivo_abrir: apertura.motivo });
|
|
45812
45812
|
}
|
|
45813
|
-
await guardarMediciones(ctx, companyId, medidas
|
|
45813
|
+
await guardarMediciones(ctx, companyId, medidas);
|
|
45814
45814
|
return { resultados, opciones };
|
|
45815
45815
|
}
|
|
45816
45816
|
function enteroEntre2(v, min, max) {
|
|
@@ -45922,6 +45922,10 @@ async function cambiarPolitica(ctx, input2) {
|
|
|
45922
45922
|
}
|
|
45923
45923
|
if (opciones.rutina_liquidacion !== void 0 && opciones.rutina_liquidacion !== "nueva" && opciones.rutina_liquidacion !== "mensual") throw new OpsError("validacion", "rutina_liquidacion: tiene que ser \xABnueva\xBB o \xABmensual\xBB");
|
|
45924
45924
|
if (opciones.descuentos_financiador !== void 0) opciones.descuentos_financiador = leerDescuentos(opciones.descuentos_financiador);
|
|
45925
|
+
if (opciones.son_practicas !== void 0) {
|
|
45926
|
+
if (!Array.isArray(opciones.son_practicas)) throw new OpsError("validacion", "son_practicas: tiene que ser una lista de c\xF3digos");
|
|
45927
|
+
opciones.son_practicas = [...new Set(opciones.son_practicas.map((c) => normalizarCodigo(String(c ?? ""))).filter((c) => Boolean(c)))].slice(0, 5e3);
|
|
45928
|
+
}
|
|
45925
45929
|
if (opciones.practicas_sin_insumos !== void 0) {
|
|
45926
45930
|
if (!Array.isArray(opciones.practicas_sin_insumos)) throw new OpsError("validacion", "practicas_sin_insumos: tiene que ser una lista de c\xF3digos");
|
|
45927
45931
|
opciones.practicas_sin_insumos = [...new Set(opciones.practicas_sin_insumos.map((c) => normalizarCodigo(String(c ?? ""))).filter((c) => Boolean(c)))].slice(0, 5e3);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "paperclip-plugin-autopilot-ops",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.64",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Autopilot Care · operación autónoma gobernada para instituciones de salud: workflows determinísticos, validaciones, registro de negocio, políticas (observa/propone/ejecuta/corte) y tablero del director, como plugin de Paperclip.",
|
|
6
6
|
"files": [
|