paperclip-plugin-autopilot-ops 0.1.64 → 0.1.66

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.64";
3
+ var PLUGIN_VERSION = "0.1.66";
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.64";
11
+ var PLUGIN_VERSION = "0.1.66";
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.64";
39935
+ var PLUGIN_VERSION = "0.1.66";
39936
39936
  var DB_NAMESPACE_SLUG = "autopilot_ops";
39937
39937
  var PAGE_ROUTE = "autopilot";
39938
39938
  var TOOL_NAMES = {
@@ -45483,21 +45483,27 @@ function evaluarCostoInternacion(input2) {
45483
45483
  const costo = redondear7(honorarios + insumos + cama + quirofano);
45484
45484
  const calculable = faltas.length === 0 && facturado > 0;
45485
45485
  const margen = calculable ? redondear7(facturado - costo) : null;
45486
- const margen_pct = margen !== null ? Math.round(margen / facturado * 1e3) / 10 : null;
45486
+ let margen_pct = margen !== null ? Math.round(margen / facturado * 1e3) / 10 : null;
45487
+ if (margen_pct !== null && margen_pct < -RESULTADO_DUDOSO_PCT) {
45488
+ faltas.push("facturado_dudoso");
45489
+ margen_pct = null;
45490
+ }
45487
45491
  let clase2;
45488
45492
  if (margen === null || margen_pct === null) clase2 = "datos_incompletos";
45489
45493
  else if (margen < 0) clase2 = "perdida";
45490
45494
  else if (margen_pct < umbral) clase2 = "margen_bajo";
45491
45495
  else clase2 = "rentable";
45492
- return { clase: clase2, facturado, honorarios, insumos, cama, quirofano, costo, margen, margen_pct, umbral, dias: total, dias_por_servicio, minutos_quirofano: minutos, faltas, avisos, insumos_sin_costo: sinCosto, prestaciones_sin_regla: sinRegla };
45496
+ return { clase: clase2, facturado, honorarios, insumos, cama, quirofano, costo, margen: margen_pct === null ? null : margen, margen_pct, umbral, dias: total, dias_por_servicio, minutos_quirofano: minutos, faltas, avisos, insumos_sin_costo: sinCosto, prestaciones_sin_regla: sinRegla };
45493
45497
  }
45494
45498
  var NOMBRE_FALTA2 = {
45495
45499
  sin_facturar: "no tiene nada facturado",
45496
45500
  insumo_sin_costo: "hay insumos sin costo de compra en el HIS",
45497
45501
  sin_costo_cama: "falta el costo del d\xEDa cama",
45498
45502
  sin_costo_quirofano: "falta el costo de la hora de quir\xF3fano",
45499
- cirugia_sin_duracion: "hay cirug\xEDas sin la duraci\xF3n en el parte quir\xFArgico"
45503
+ cirugia_sin_duracion: "hay cirug\xEDas sin la duraci\xF3n en el parte quir\xFArgico",
45504
+ facturado_dudoso: "lo que cost\xF3 es m\xE1s de cuatro veces lo facturado: hay que verificar la facturaci\xF3n o los d\xEDas"
45500
45505
  };
45506
+ var RESULTADO_DUDOSO_PCT = 300;
45501
45507
  var porcentaje2 = (n2) => `${n2.toLocaleString("es-AR", { maximumFractionDigits: 1 })} %`;
45502
45508
  var enumerar = (xs) => xs.length > 1 ? `${xs.slice(0, -1).join(", ")} y ${xs[xs.length - 1]}` : xs[0] ?? "";
45503
45509
  function oracionCostoInternacion(l, e) {
@@ -46558,13 +46564,18 @@ async function transicionar(ctx, input2) {
46558
46564
  delete datos.lectura;
46559
46565
  }
46560
46566
  if (caso.workflow === "rentabilidad_practica") {
46561
- for (const k of ["evaluacion", "oracion", "practica", "financiador", "codigo", "componentes", "insumos", "honorarios", "volumen_90d", "comprobado_el", "tipo", "minutos", "aceptada_hasta", "perdida_aceptada", "calculo_aceptado", "peor_aceptada", "clase_aceptada", "hecho_el", "pedido_enviado_el", "resultado_pedido"]) delete datos[k];
46567
+ for (const k of ["evaluacion", "oracion", "practica", "financiador", "codigo", "componentes", "insumos", "honorarios", "volumen_90d", "comprobado_el", "tipo", "minutos", "aceptada_hasta", "perdida_aceptada", "calculo_aceptado", "peor_aceptada", "clase_aceptada", "hecho_el", "pedido_enviado_el", "resultado_pedido", "impacto_al_decidir", "decidido_el", "recuperado_mensual", "resuelta_el", "no_cambio_el"]) delete datos[k];
46562
46568
  if (resultado.via === "no_se_pudo") {
46563
46569
  datos.no_se_pudo = { motivo: str2(datos.motivo) ?? "", accion: str2(caso.datos.accion) ?? null, el: contexto.hoy ?? ahoraEnHospital().hoy };
46564
46570
  datos.accion = null;
46565
46571
  datos.precio_propuesto = null;
46566
46572
  }
46567
- if (resultado.via === "aprobar") datos.no_se_pudo = null;
46573
+ if (resultado.via === "aprobar") {
46574
+ datos.no_se_pudo = null;
46575
+ const ev = caso.datos.evaluacion && typeof caso.datos.evaluacion === "object" ? caso.datos.evaluacion : {};
46576
+ datos.impacto_al_decidir = typeof ev.impacto_mensual === "number" ? ev.impacto_mensual : null;
46577
+ datos.decidido_el = contexto.hoy ?? ahoraEnHospital().hoy;
46578
+ }
46568
46579
  if (resultado.via === "hecho") {
46569
46580
  datos.hecho_el = contexto.hoy ?? ahoraEnHospital().hoy;
46570
46581
  if (str2(caso.datos.accion) === "pedir_aumento" || !str2(caso.datos.accion)) datos.pedido_enviado_el = datos.hecho_el;
@@ -46595,6 +46606,8 @@ async function transicionar(ctx, input2) {
46595
46606
  evaluacion: r.evaluacion,
46596
46607
  // Si el equipo ya hizo lo que pidió la dirección: ¿el HIS tiene el valor pedido? (no solo «cambió la clase»).
46597
46608
  ...caso.datos.hecho_el ? { resultado_pedido: resultadoPedido(caso.datos, r.evaluacion) } : {},
46609
+ ...resultado.a === "resuelta" && typeof caso.datos.impacto_al_decidir === "number" && typeof r.evaluacion.impacto_mensual === "number" ? { recuperado_mensual: Math.round(r.evaluacion.impacto_mensual - caso.datos.impacto_al_decidir), resuelta_el: contexto.hoy ?? null } : {},
46610
+ ...resultado.a === "pendiente_aprobacion" && caso.datos.hecho_el ? { no_cambio_el: contexto.hoy ?? null } : {},
46598
46611
  oracion: oracionRentabilidad(l.lectura, r.evaluacion),
46599
46612
  comprobado_el: contexto.hoy ?? null
46600
46613
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "paperclip-plugin-autopilot-ops",
3
- "version": "0.1.64",
3
+ "version": "0.1.66",
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": [