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 CHANGED
@@ -1,6 +1,6 @@
1
1
  // src/manifest.ts
2
2
  var PLUGIN_ID = "alephoo.autopilot-ops";
3
- var PLUGIN_VERSION = "0.1.63";
3
+ var PLUGIN_VERSION = "0.1.64";
4
4
  var DB_NAMESPACE_SLUG = "autopilot_ops";
5
5
  var PAGE_ROUTE = "autopilot";
6
6
  var TOOL_NAMES = {
package/dist/ui/index.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
 
9
9
  // src/manifest.ts
10
10
  var PLUGIN_ID = "alephoo.autopilot-ops";
11
- var PLUGIN_VERSION = "0.1.63";
11
+ var PLUGIN_VERSION = "0.1.64";
12
12
  var DB_NAMESPACE_SLUG = "autopilot_ops";
13
13
  var PAGE_ROUTE = "autopilot";
14
14
  var TOOL_NAMES = {
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.63";
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 bases = completa ? await guardarBases(ctx, companyId, validas, opciones.indirectos) : await leerBases(ctx, companyId);
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) noSonPracticas.push(referencia);
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
- if (!evaluacion.no_es_practica) medidas.push({ lectura: l.lectura, evaluacion });
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, noSonPracticas);
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.63",
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": [