paperclip-plugin-autopilot-ops 0.1.21 → 0.1.23

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.21";
3
+ var PLUGIN_VERSION = "0.1.23";
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.21";
11
+ var PLUGIN_VERSION = "0.1.23";
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.21";
39935
+ var PLUGIN_VERSION = "0.1.23";
39936
39936
  var DB_NAMESPACE_SLUG = "autopilot_ops";
39937
39937
  var PAGE_ROUTE = "autopilot";
39938
39938
  var TOOL_NAMES = {
@@ -40512,35 +40512,54 @@ function cruzarCircular(input2) {
40512
40512
  const porA = new Map(filasA.map((f) => [f.codigo, f]));
40513
40513
  const porB = new Map(filasB.map((f) => [f.codigo, f]));
40514
40514
  const porHis = new Map(act.practicas.map((p) => [p.codigo, p]));
40515
+ const porBase = /* @__PURE__ */ new Map();
40516
+ for (const p of act.practicas) {
40517
+ const raiz = p.codigo.replace(/[A-Z]$/, "");
40518
+ if (raiz !== p.codigo) porBase.set(raiz, [...porBase.get(raiz) ?? [], p]);
40519
+ }
40520
+ const usadas = /* @__PURE__ */ new Set();
40515
40521
  const codigos = [.../* @__PURE__ */ new Set([...filasA.map((f) => f.codigo), ...filasB.map((f) => f.codigo)])];
40516
40522
  const items = [];
40517
- for (const codigo of codigos) {
40518
- const fa = porA.get(codigo);
40519
- const fb = porB.get(codigo);
40520
- const his = porHis.get(codigo);
40523
+ for (const codigoCircular of codigos) {
40524
+ const fa = porA.get(codigoCircular);
40525
+ const fb = porB.get(codigoCircular);
40526
+ let his = porHis.get(codigoCircular);
40527
+ const variantes = his ? [] : porBase.get(codigoCircular) ?? [];
40528
+ if (!his && variantes.length === 1) his = variantes[0];
40529
+ const codigo = his?.codigo ?? codigoCircular;
40521
40530
  const nombre = his?.nombre ?? fb?.nombre ?? fa?.nombre ?? codigo;
40522
40531
  const valorActual = his ? redondear(his.componentes.reduce((s, c) => s + c.monto, 0)) : null;
40523
- const base = { codigo, codigo_his: his?.codigo_his ?? fb?.codigo_original ?? fa?.codigo_original ?? codigo, nombre, valor_a: fa?.valor_nuevo ?? null, valor_b: fb?.valor_nuevo ?? null, valor_actual: valorActual, valor_nuevo: null, variacion: null, estado: "revisar", motivo: null, componentes_nuevos: null };
40532
+ const base = { codigo, codigo_his: his?.codigo_his ?? fb?.codigo_original ?? fa?.codigo_original ?? codigo, nombre, valor_a: fa?.valor_nuevo ?? null, valor_b: fb?.valor_nuevo ?? null, valor_actual: valorActual, valor_nuevo: null, variacion: null, estado: "revisar", causa: null, coinciden: false, motivo: null, componentes_nuevos: null };
40524
40533
  if (!fa || !fb) {
40525
- items.push({ ...base, motivo: fa ? "solo la ley\xF3 el agente: el programa no la encontr\xF3 en la circular" : "solo la ley\xF3 el programa: el agente no la inform\xF3" });
40534
+ items.push({ ...base, causa: "una_sola_lectura", motivo: fa ? "solo la ley\xF3 el agente: el programa no la encontr\xF3 en la circular" : "solo la ley\xF3 el programa: el agente no la inform\xF3" });
40526
40535
  continue;
40527
40536
  }
40528
40537
  if (Math.abs(fa.valor_nuevo - fb.valor_nuevo) / Math.max(fa.valor_nuevo, fb.valor_nuevo) > TOLERANCIA_EXTRACCIONES) {
40529
- items.push({ ...base, motivo: `las dos lecturas no coinciden: el agente ley\xF3 ${pesos(fa.valor_nuevo)} y el programa ${pesos(fb.valor_nuevo)}` });
40538
+ items.push({ ...base, causa: "lecturas_distintas", motivo: `las dos lecturas no coinciden: el agente ley\xF3 ${pesos(fa.valor_nuevo)} y el programa ${pesos(fb.valor_nuevo)}` });
40530
40539
  continue;
40531
40540
  }
40532
40541
  const nuevo = fb.valor_nuevo;
40542
+ const leido = { ...base, valor_nuevo: nuevo, coinciden: true };
40543
+ if (variantes.length > 1) {
40544
+ items.push({ ...leido, causa: "variantes", motivo: `el convenio del HIS tiene ${variantes.length} variantes de este c\xF3digo (${variantes.map((v) => v.codigo_his).join(", ")}): no se carga hasta decidir a cu\xE1l corresponde` });
40545
+ continue;
40546
+ }
40547
+ if (his && usadas.has(his.codigo)) {
40548
+ items.push({ ...leido, causa: "fila_repetida", motivo: `otra fila de la circular ya corresponde a la pr\xE1ctica ${his.codigo_his} del HIS` });
40549
+ continue;
40550
+ }
40551
+ if (his) usadas.add(his.codigo);
40533
40552
  if (!his) {
40534
- items.push({ ...base, valor_nuevo: nuevo, estado: "sin_convenio", motivo: "la circular la trae y el convenio del HIS no la tiene: no se carga" });
40553
+ items.push({ ...leido, estado: "sin_convenio", motivo: "la circular la trae y el convenio del HIS no la tiene: no se carga" });
40535
40554
  continue;
40536
40555
  }
40537
40556
  const componentes = repartir(his.componentes, nuevo);
40538
40557
  if (!componentes) {
40539
- items.push({ ...base, valor_nuevo: nuevo, motivo: "tiene varios componentes de arancel en $0: no se puede repartir el valor nuevo" });
40558
+ items.push({ ...leido, causa: "componentes_en_cero", motivo: "tiene varios componentes de arancel en $0: no se puede repartir el valor nuevo" });
40540
40559
  continue;
40541
40560
  }
40542
40561
  const variacion = valorActual && valorActual > 0 ? redondear((nuevo - valorActual) / valorActual * 100, 1) : null;
40543
- items.push({ ...base, valor_nuevo: nuevo, variacion, estado: "propuesta", componentes_nuevos: componentes });
40562
+ items.push({ ...leido, variacion, estado: "propuesta", componentes_nuevos: componentes });
40544
40563
  }
40545
40564
  const conVariacion = items.filter((i) => i.estado === "propuesta" && i.variacion !== null);
40546
40565
  const declarado = typeof input2.porcentajeDeclarado === "number" && Number.isFinite(input2.porcentajeDeclarado) ? input2.porcentajeDeclarado : null;
@@ -40568,9 +40587,11 @@ function cruzarCircular(input2) {
40568
40587
  filas_a: nA,
40569
40588
  filas_b: nB,
40570
40589
  filas_declaradas: declaradas,
40571
- coinciden: items.filter((i) => i.valor_a !== null && i.valor_b !== null && (i.estado !== "revisar" || i.valor_nuevo !== null)).length,
40590
+ coinciden: items.filter((i) => i.coinciden).length,
40572
40591
  propuestas: items.filter((i) => i.estado === "propuesta").length,
40573
40592
  revisar: items.filter((i) => i.estado === "revisar").length,
40593
+ revisar_lecturas: items.filter((i) => i.causa === "lecturas_distintas" || i.causa === "una_sola_lectura").length,
40594
+ revisar_variantes: items.filter((i) => i.causa === "variantes" || i.causa === "fila_repetida").length,
40574
40595
  sin_convenio: items.filter((i) => i.estado === "sin_convenio").length,
40575
40596
  excepciones: items.filter((i) => i.estado === "excepcion").length,
40576
40597
  bajas: items.filter((i) => i.variacion !== null && i.variacion < 0).length,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "paperclip-plugin-autopilot-ops",
3
- "version": "0.1.21",
3
+ "version": "0.1.23",
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": [