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 +1 -1
- package/dist/ui/index.js +1 -1
- package/dist/worker.js +17 -4
- 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.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
|
|
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.
|
|
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": [
|