paperclip-plugin-autopilot-ops 0.1.48 → 0.1.49

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.48";
3
+ var PLUGIN_VERSION = "0.1.49";
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.48";
11
+ var PLUGIN_VERSION = "0.1.49";
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.48";
39935
+ var PLUGIN_VERSION = "0.1.49";
39936
39936
  var DB_NAMESPACE_SLUG = "autopilot_ops";
39937
39937
  var PAGE_ROUTE = "autopilot";
39938
39938
  var TOOL_NAMES = {
@@ -44976,6 +44976,11 @@ function opcionesCostos(op) {
44976
44976
  function opcionesRentabilidad(op) {
44977
44977
  return { umbral: enteroEntre(op.umbral_margen, 0, 90) ?? UMBRAL_MARGEN_POR_DEFECTO, mesesPrecio: enteroEntre(op.meses_precio, 1, 36) ?? MESES_PRECIO_POR_DEFECTO };
44978
44978
  }
44979
+ function pareceNoProfesional(nombre) {
44980
+ const n = nombre.trim();
44981
+ const [apellido = "", nombres = ""] = n.split(",").map((x) => x.trim().toLowerCase());
44982
+ return /^[^a-záéíóúñü]/i.test(n) || /\d/.test(n) || apellido !== "" && apellido === nombres || /\b(admin|administrador|prueba|test|sistema|usuario)\b/i.test(n);
44983
+ }
44979
44984
  async function evaluarRentabilidades(ctx, companyId, lecturas) {
44980
44985
  if (!Array.isArray(lecturas)) throw new OpsError("validacion", "lecturas: tiene que ser una lista");
44981
44986
  if (lecturas.length > 2e3) throw new OpsError("validacion", "lecturas: como m\xE1ximo 2000 por llamada");
@@ -45479,12 +45484,14 @@ async function transicionar(ctx, input2) {
45479
45484
  const lecturaId = str2(datos.lectura_id);
45480
45485
  if (lecturaId) {
45481
45486
  const rows = await ctx.db.query(
45482
- `SELECT id, caso_id, tipo, resultado, created_at FROM ${t3(ctx, "accion")} WHERE company_id = $1 AND id = $2 LIMIT 1`,
45487
+ `SELECT id, caso_id, tipo, resultado, evidencia, created_at FROM ${t3(ctx, "accion")} WHERE company_id = $1 AND id = $2 LIMIT 1`,
45483
45488
  [input2.companyId, lecturaId]
45484
45489
  );
45485
45490
  const lectura = rows[0];
45491
+ const evidencia = lectura && lectura.evidencia && typeof lectura.evidencia === "object" ? lectura.evidencia : null;
45492
+ const distinta = lectura && caso.workflow === "credencial_profesional" && resultado.via === "verificar" && evidencia ? evidencia.profesional_id !== void 0 && String(evidencia.profesional_id) !== String(datos.profesional_id ?? caso.datos.profesional_id ?? "") ? `la lectura ${lecturaId} es de otro profesional (${String(evidencia.profesional_id)})` : evidencia.matricula !== void 0 && datos.matricula !== void 0 && datos.matricula !== null && String(evidencia.matricula) !== String(datos.matricula) ? `la lectura ${lecturaId} es de la matr\xEDcula ${String(evidencia.matricula)} y se informa la ${String(datos.matricula)}` : null : null;
45486
45493
  let vieja = false;
45487
- if (lectura && (resultado.via === "comprobar" || (caso.workflow === "circular_aranceles" || caso.workflow === "ajuste_convenio") && resultado.via === "verificar")) {
45494
+ if (lectura && (resultado.via === "comprobar" || (caso.workflow === "circular_aranceles" || caso.workflow === "ajuste_convenio") && resultado.via === "verificar" || caso.workflow === "credencial_profesional" && resultado.via === "verificar" && caso.estado === "corregida")) {
45488
45495
  const ultima = await ctx.db.query(
45489
45496
  `SELECT max(created_at) AS ultima FROM ${t3(ctx, "transicion")} WHERE company_id = $1 AND caso_id = $2`,
45490
45497
  [input2.companyId, caso.id]
@@ -45492,7 +45499,7 @@ async function transicionar(ctx, input2) {
45492
45499
  const desde = ultima[0]?.ultima ? Date.parse(iso2(ultima[0].ultima)) : NaN;
45493
45500
  vieja = Number.isFinite(desde) && Date.parse(iso2(lectura.created_at)) <= desde;
45494
45501
  }
45495
- const problema = !lectura ? `lectura_id ${lecturaId} no existe en esta instituci\xF3n` : String(lectura.caso_id) !== caso.id ? `la lectura ${lecturaId} pertenece a otro caso` : !["lectura", "verificacion"].includes(String(lectura.tipo)) ? `la acci\xF3n ${lecturaId} es de tipo ${String(lectura.tipo)}; hace falta una lectura o verificaci\xF3n` : String(lectura.resultado) !== "ok" ? `la lectura ${lecturaId} termin\xF3 con resultado ${String(lectura.resultado)}` : vieja ? `la lectura ${lecturaId} es anterior al \xFAltimo cambio del caso: volver a leer el bono y registrar esa lectura` : null;
45502
+ const problema = !lectura ? `lectura_id ${lecturaId} no existe en esta instituci\xF3n` : String(lectura.caso_id) !== caso.id ? `la lectura ${lecturaId} pertenece a otro caso` : !["lectura", "verificacion"].includes(String(lectura.tipo)) ? `la acci\xF3n ${lecturaId} es de tipo ${String(lectura.tipo)}; hace falta una lectura o verificaci\xF3n` : String(lectura.resultado) !== "ok" ? `la lectura ${lecturaId} termin\xF3 con resultado ${String(lectura.resultado)}` : vieja ? `la lectura ${lecturaId} es anterior al \xFAltimo cambio del caso: volver a leer y registrar esa lectura` : distinta;
45496
45503
  if (problema) {
45497
45504
  throw new OpsError("validacion", `lectura_registrada: ${problema}`, { validaciones: [{ regla: "lectura_registrada", ok: false, detalle: problema }], estado: caso.estado });
45498
45505
  }
@@ -45819,6 +45826,12 @@ async function transicionar(ctx, input2) {
45819
45826
  datos.observacion = observacionDe(r);
45820
45827
  datos.verificada_el = contexto.hoy ?? null;
45821
45828
  }
45829
+ if (caso.estado === "corregida") {
45830
+ const antes = [caso.datos.matricula_nacional, caso.datos.matricula_provincial].map((v) => String(v ?? "").replace(/\D/g, ""));
45831
+ const ahora = [datos.matricula_nacional ?? caso.datos.matricula_nacional, datos.matricula_provincial ?? caso.datos.matricula_provincial].map((v) => String(v ?? "").replace(/\D/g, ""));
45832
+ datos.ficha_sin_cambios = datos.observacion !== null && antes.join("|") === ahora.join("|");
45833
+ } else delete datos.ficha_sin_cambios;
45834
+ datos.posible_no_profesional = pareceNoProfesional(String(datos.profesional ?? caso.datos.profesional ?? caso.titulo.split(" \xB7 ")[0] ?? ""));
45822
45835
  const ag = datos.agenda && typeof datos.agenda === "object" ? datos.agenda : null;
45823
45836
  if (ag) {
45824
45837
  const proximo = typeof ag.proximo_turno === "string" && /^\d{4}-\d{2}-\d{2}( \d{2}:\d{2})?$/.test(ag.proximo_turno) ? ag.proximo_turno : null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "paperclip-plugin-autopilot-ops",
3
- "version": "0.1.48",
3
+ "version": "0.1.49",
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": [