paperclip-plugin-autopilot-ops 0.1.17 → 0.1.19
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 +48 -8
- package/dist/ui/index.js +49 -9
- package/dist/worker.js +499 -119
- package/migrations/005_contactos_avisos.sql +44 -0
- package/package.json +1 -1
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.
|
|
3
|
+
var PLUGIN_VERSION = "0.1.19";
|
|
4
4
|
var DB_NAMESPACE_SLUG = "autopilot_ops";
|
|
5
5
|
var PAGE_ROUTE = "autopilot";
|
|
6
6
|
var TOOL_NAMES = {
|
|
@@ -76,7 +76,7 @@ var manifest = {
|
|
|
76
76
|
{
|
|
77
77
|
name: TOOL_NAMES.listarReglas,
|
|
78
78
|
displayName: "Listar reglas",
|
|
79
|
-
description: "Lista las reglas que
|
|
79
|
+
description: "Lista las reglas que la instituci\xF3n arm\xF3 para un puesto (demanda_pendiente): tipo, par\xE1metros, contacto (canal, intentos, horario), cierre, estado y versi\xF3n. Filtro opcional: estado (activa). Solo lectura: las reglas las crea y activa la instituci\xF3n desde el portal.",
|
|
80
80
|
parametersSchema: {
|
|
81
81
|
type: "object",
|
|
82
82
|
properties: {
|
|
@@ -88,7 +88,7 @@ var manifest = {
|
|
|
88
88
|
{
|
|
89
89
|
name: TOOL_NAMES.informarPruebaRegla,
|
|
90
90
|
displayName: "Informar prueba de regla",
|
|
91
|
-
description: "Informa el resultado de probar una regla sobre los datos reales: a cu\xE1ntos pacientes alcanza hoy (alcanza) y hasta 10 referencias de muestra (orden:<id>, solicitud:<id>, control:<persona>:<regla>; nunca datos personales). Sin esta prueba de la versi\xF3n vigente,
|
|
91
|
+
description: "Informa el resultado de probar una regla sobre los datos reales: a cu\xE1ntos pacientes alcanza hoy (alcanza) y hasta 10 referencias de muestra (orden:<id>, solicitud:<id>, control:<persona>:<regla>; nunca datos personales). Sin esta prueba de la versi\xF3n vigente, la instituci\xF3n no puede activar la regla.",
|
|
92
92
|
parametersSchema: {
|
|
93
93
|
type: "object",
|
|
94
94
|
properties: {
|
|
@@ -113,7 +113,7 @@ var manifest = {
|
|
|
113
113
|
{
|
|
114
114
|
name: TOOL_NAMES.abrirCaso,
|
|
115
115
|
displayName: "Abrir caso",
|
|
116
|
-
description: 'Abre un caso nuevo en un workflow, en su estado inicial. Workflows: `demanda_pendiente` (referencia obligatoria `orden:<id>`, `solicitud:<id>` o `control:<persona_id>:<regla_id>`; datos: regla_id obligatorio y la regla tiene que estar activa, persona_id, tipo de origen, estudio o especialidad o prestacion, fecha_origen AAAA-MM-DD, dias; el plugin fija regla_version, canal, intentos, vence_el; nunca nombre, documento ni tel\xE9fono del paciente),`actualizacion_arancel`, `tarea_operativa`, `recupero_turno` (datos: fecha AAAA-MM-DD, hora HH:MM, profesional, especialidad del turno libre; referencia "AAAA-MM-DD HH:MM \xB7 Profesional"), `cuenta_completa` (una prestaci\xF3n pendiente de facturar con faltantes; referencia obligatoria "bono:<n\xFAmero>", datos: bono_id, bono_numero, obra_social, plan, prestacion, fecha_prestacion AAAA-MM-DD, monto_pesos), `facturacion_pendiente` (una prestaci\xF3n sin facturar; misma referencia `bono:<n\xFAmero>` y mismos datos; el plugin calcula plazo_dias, vence_el y plazo_confirmado con los plazos por obra social de la instituci\xF3n), `credencial_profesional` (un profesional con agenda; referencia obligatoria `profesional:<id>`; datos: profesional_id, profesional (apellido y nombre, es personal
|
|
116
|
+
description: 'Abre un caso nuevo en un workflow, en su estado inicial. Workflows: `demanda_pendiente` (referencia obligatoria `orden:<id>`, `solicitud:<id>` o `control:<persona_id>:<regla_id>`; datos: regla_id obligatorio y la regla tiene que estar activa, persona_id, tipo de origen, estudio o especialidad o prestacion, fecha_origen AAAA-MM-DD, dias; el plugin fija regla_version, canal, intentos, vence_el; nunca nombre, documento ni tel\xE9fono del paciente),`actualizacion_arancel`, `tarea_operativa`, `recupero_turno` (datos: fecha AAAA-MM-DD, hora HH:MM, profesional, especialidad del turno libre; referencia "AAAA-MM-DD HH:MM \xB7 Profesional"), `cuenta_completa` (una prestaci\xF3n pendiente de facturar con faltantes; referencia obligatoria "bono:<n\xFAmero>", datos: bono_id, bono_numero, obra_social, plan, prestacion, fecha_prestacion AAAA-MM-DD, monto_pesos, internacion_id opcional; en faltantes, `responsable` {tipo profesional, id, nombre} opcional para que el plugin avise a quien resuelve), `facturacion_pendiente` (una prestaci\xF3n sin facturar; misma referencia `bono:<n\xFAmero>` y mismos datos; el plugin calcula plazo_dias, vence_el y plazo_confirmado con los plazos por obra social de la instituci\xF3n), `credencial_profesional` (un profesional con agenda; referencia obligatoria `profesional:<id>`; datos: profesional_id, profesional (apellido y nombre, es personal de la instituci\xF3n), matricula_nacional, matricula_provincial, codigo_provincia, especialidades). `referencia` identifica el objeto real (convenio, cuenta, turno) y evita duplicados: si ya existe un caso abierto con la misma referencia, se devuelve ese. Pasar `idempotencyKey` para reintentos seguros.',
|
|
117
117
|
parametersSchema: {
|
|
118
118
|
type: "object",
|
|
119
119
|
properties: {
|
|
@@ -130,7 +130,7 @@ var manifest = {
|
|
|
130
130
|
{
|
|
131
131
|
name: TOOL_NAMES.transicionar,
|
|
132
132
|
displayName: "Transicionar caso",
|
|
133
|
-
description: 'Aplica una transici\xF3n del workflow al caso (p. ej. `proponer`, `aplicar`, `verificar`). El plugin valida contra la tabla de transiciones, la pol\xEDtica vigente (observa / propone / ejecuta / corte) y las reglas de negocio; si algo falla, el caso no cambia y se devuelve el motivo. Las transiciones humanas (aprobar, rechazar, corregir) no est\xE1n disponibles para agentes. Cuando una persona
|
|
133
|
+
description: 'Aplica una transici\xF3n del workflow al caso (p. ej. `proponer`, `aplicar`, `verificar`). El plugin valida contra la tabla de transiciones, la pol\xEDtica vigente (observa / propone / ejecuta / corte) y las reglas de negocio; si algo falla, el caso no cambia y se devuelve el motivo. Las transiciones humanas (aprobar, rechazar, corregir) no est\xE1n disponibles para agentes. Cuando una persona de la instituci\xF3n carga a mano lo aprobado, el caso queda en `aplicado`: el agente lo comprueba releyendo el sistema y llamando `verificar` con `datos.valor_leido`. En `recupero_turno`: `proponer` con solicitud_id, solicitud_estado, solicitud_especialidad, cola (la lista de espera pendiente de esa especialidad tal como se vio: [{solicitud_id, prioridad, alta}]; el plugin la ordena y exige justificaci\xF3n para no elegir la primera) y fuente; si la instituci\xF3n pide consulta previa (ops_leer_caso lo dice), `ofrecer` con canal y esperar `aceptar`/`no_acepta`; **antes de escribir en el sistema, `autorizar`** (sin esa autorizaci\xF3n no se escribe); despu\xE9s de escribir, `asignar` con accion_id; `verificar` con leido_fecha, leido_hora, leido_profesional y leido_solicitud_id; `sin_candidato` y `descartar` con motivo. En `cuenta_completa` el agente solo lee: `observar` con bono_id, bono_estado (no_confirmado, confirmado o prefacturado), faltantes [{regla, detalle, item?}] con reglas del cat\xE1logo (autorizacion_faltante, validacion_faltante, afiliado_faltante, orden_faltante, prestacion_sin_valor, epicrisis_faltante), lectura_id (la lectura registrada con ops_registrar_accion, conector "base") y fuente; `comprobar` con faltantes_leidos (lista vac\xEDa si ya est\xE1 completo), bono_estado_leido y lectura_id; `descartar` con motivo si el bono se elimin\xF3 o anul\xF3. En `facturacion_pendiente` (solo lee): `observar` con bono_id, bono_estado, fecha_prestacion, obra_social, lectura_id (conector "base") y fuente; `comprobar` con bono_estado_leido y lectura_id (facturado/refacturado \u2192 facturada; prefacturado \u2192 en prefactura; si no, sigue por presentar); `descartar` con motivo. En `demanda_pendiente`: `contactar` (nivel ejecuta; datos: canal igual al de la regla y accion_id de la escritura registrada; el plugin controla regla activa, intentos, espera entre intentos y horario), `responder` (respuesta: acepta|rechaza|no_contesta), `comprobar` (lectura_id de la relectura del HIS, turno_id y turno_estado del turno encontrado), `cerrar` (motivo; solo con los intentos agotados o el plazo vencido), `descartar` (motivo). `credencial_profesional` (solo lee): `verificar` con profesional_id, matricula y tipo_matricula (nacional|provincial) si hay matr\xEDcula, resultado = el objeto que devuelve verificar-matriculas.mjs tal cual ({sin_matricula, encontrada, coincide_nombre, situacion, sancion, profesion, provincia, emisor}), lectura_id (conector "api", la consulta al registro) y fuente; el plugin decide vigente u observada y fija la observaci\xF3n (sin_matricula, no_figura, otra_persona, inhabilitada, sancion); `descartar` con motivo si el profesional ya no est\xE1 activo.',
|
|
134
134
|
parametersSchema: {
|
|
135
135
|
type: "object",
|
|
136
136
|
properties: {
|
|
@@ -146,13 +146,13 @@ var manifest = {
|
|
|
146
146
|
{
|
|
147
147
|
name: TOOL_NAMES.registrarAccion,
|
|
148
148
|
displayName: "Registrar acci\xF3n",
|
|
149
|
-
description: "Registra una acci\xF3n ejecutada sobre un sistema externo (lectura, escritura o verificaci\xF3n) con su evidencia. Toda acci\xF3n sobre el
|
|
149
|
+
description: "Registra una acci\xF3n ejecutada sobre un sistema externo (lectura, escritura o verificaci\xF3n) con su evidencia. Toda acci\xF3n sobre el HIS debe quedar registrada ac\xE1.",
|
|
150
150
|
parametersSchema: {
|
|
151
151
|
type: "object",
|
|
152
152
|
properties: {
|
|
153
153
|
casoId: { type: "string" },
|
|
154
154
|
tipo: { type: "string", enum: ["lectura", "escritura", "verificacion"] },
|
|
155
|
-
conector: { type: "string", enum: ["api", "base", "archivo", "pantalla", "manual"], description: "Por d\xF3nde se ley\xF3 o escribi\xF3: api, base (lectura de la base de datos del
|
|
155
|
+
conector: { type: "string", enum: ["api", "base", "archivo", "pantalla", "manual"], description: "Por d\xF3nde se ley\xF3 o escribi\xF3: api, base (lectura de la base de datos del HIS), archivo, pantalla o manual." },
|
|
156
156
|
objetivo: { type: "string" },
|
|
157
157
|
resultado: { type: "string", enum: ["ok", "error", "pendiente"] },
|
|
158
158
|
evidencia: { type: "object" },
|
|
@@ -178,7 +178,7 @@ var manifest = {
|
|
|
178
178
|
{
|
|
179
179
|
name: TOOL_NAMES.publicarTablero,
|
|
180
180
|
displayName: "Publicar tablero",
|
|
181
|
-
description: "Publica o actualiza un tablero de gesti\xF3n para la direcci\xF3n
|
|
181
|
+
description: "Publica o actualiza un tablero de gesti\xF3n para la direcci\xF3n de la instituci\xF3n, armado sobre datos reales del HIS (turnos, facturaci\xF3n, internaci\xF3n, producci\xF3n). `clave` identifica el tablero de forma estable (min\xFAsculas y guiones; volver a publicar con la misma clave lo actualiza en el lugar). `widgets` es la lista de piezas que se muestran, en orden: {tipo:'indicador', etiqueta, valor, unidad?, contexto?, tono?: neutro|ambar|senal|corte} \xB7 {tipo:'barras', titulo, unidad?, series:[{etiqueta, valor}]} \xB7 {tipo:'linea', titulo, unidad?, puntos:[{x, y}]} \xB7 {tipo:'tabla', titulo, columnas:[\u2026], filas:[[\u2026]]} \xB7 {tipo:'texto', titulo?, texto}. Cada widget admite `ancho` 1, 2 o 3 (columnas de 3). **N\xFAmeros oficiales:** cada indicador, barras, l\xEDnea o tabla calculado con calcular.mjs lleva `calculo` = el bloque `calculo` que devuelve calcular.mjs, tal cual (cat\xE1logo, m\xE9tricas con versi\xF3n, par\xE1metros, huella, consulta); el plugin lo valida contra el cat\xE1logo de m\xE9tricas y marca el widget como certificado, propuesta (m\xE9trica sin aprobar) o exploratorio (sin `calculo`). Controles que frenan la publicaci\xF3n: una tabla con fila \xABTOTAL\xBB tiene que sumar ese total en cada columna num\xE9rica (las filas \xABSubtotal \u2026\xBB no suman); un desglose con `calculo` y `por` lleva la fila TOTAL; un porcentaje (`unidad` '%' o columna con '%') va de 0 a 100 salvo que el t\xEDtulo diga variaci\xF3n, diferencia o cumplimiento de meta. `fuentes` lista qu\xE9 se consult\xF3 (p. ej. 'Alephoo \xB7 base \xB7 semantica_turnos \xB7 turnos 01/09\u201330/09'). Si el pedido vino de una tarea, pasar `issueId`.",
|
|
182
182
|
parametersSchema: {
|
|
183
183
|
type: "object",
|
|
184
184
|
properties: {
|
|
@@ -370,6 +370,46 @@ var manifest = {
|
|
|
370
370
|
capability: "api.routes.register",
|
|
371
371
|
companyResolution: { from: "body", key: "companyId" }
|
|
372
372
|
},
|
|
373
|
+
{
|
|
374
|
+
routeKey: "contactos",
|
|
375
|
+
method: "GET",
|
|
376
|
+
path: "/contactos",
|
|
377
|
+
auth: "board",
|
|
378
|
+
capability: "api.routes.register",
|
|
379
|
+
companyResolution: { from: "query", key: "companyId" }
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
routeKey: "guardar-contacto",
|
|
383
|
+
method: "POST",
|
|
384
|
+
path: "/contactos",
|
|
385
|
+
auth: "board",
|
|
386
|
+
capability: "api.routes.register",
|
|
387
|
+
companyResolution: { from: "body", key: "companyId" }
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
routeKey: "avisos-pendientes",
|
|
391
|
+
method: "GET",
|
|
392
|
+
path: "/avisos/pendientes",
|
|
393
|
+
auth: "board",
|
|
394
|
+
capability: "api.routes.register",
|
|
395
|
+
companyResolution: { from: "query", key: "companyId" }
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
routeKey: "avisos",
|
|
399
|
+
method: "GET",
|
|
400
|
+
path: "/avisos",
|
|
401
|
+
auth: "board",
|
|
402
|
+
capability: "api.routes.register",
|
|
403
|
+
companyResolution: { from: "query", key: "companyId" }
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
routeKey: "resultado-aviso",
|
|
407
|
+
method: "POST",
|
|
408
|
+
path: "/avisos/:avisoId/resultado",
|
|
409
|
+
auth: "board",
|
|
410
|
+
capability: "api.routes.register",
|
|
411
|
+
companyResolution: { from: "body", key: "companyId" }
|
|
412
|
+
},
|
|
373
413
|
{
|
|
374
414
|
routeKey: "contacto",
|
|
375
415
|
method: "POST",
|
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.
|
|
11
|
+
var PLUGIN_VERSION = "0.1.19";
|
|
12
12
|
var DB_NAMESPACE_SLUG = "autopilot_ops";
|
|
13
13
|
var PAGE_ROUTE = "autopilot";
|
|
14
14
|
var TOOL_NAMES = {
|
|
@@ -84,7 +84,7 @@ var manifest = {
|
|
|
84
84
|
{
|
|
85
85
|
name: TOOL_NAMES.listarReglas,
|
|
86
86
|
displayName: "Listar reglas",
|
|
87
|
-
description: "Lista las reglas que
|
|
87
|
+
description: "Lista las reglas que la instituci\xF3n arm\xF3 para un puesto (demanda_pendiente): tipo, par\xE1metros, contacto (canal, intentos, horario), cierre, estado y versi\xF3n. Filtro opcional: estado (activa). Solo lectura: las reglas las crea y activa la instituci\xF3n desde el portal.",
|
|
88
88
|
parametersSchema: {
|
|
89
89
|
type: "object",
|
|
90
90
|
properties: {
|
|
@@ -96,7 +96,7 @@ var manifest = {
|
|
|
96
96
|
{
|
|
97
97
|
name: TOOL_NAMES.informarPruebaRegla,
|
|
98
98
|
displayName: "Informar prueba de regla",
|
|
99
|
-
description: "Informa el resultado de probar una regla sobre los datos reales: a cu\xE1ntos pacientes alcanza hoy (alcanza) y hasta 10 referencias de muestra (orden:<id>, solicitud:<id>, control:<persona>:<regla>; nunca datos personales). Sin esta prueba de la versi\xF3n vigente,
|
|
99
|
+
description: "Informa el resultado de probar una regla sobre los datos reales: a cu\xE1ntos pacientes alcanza hoy (alcanza) y hasta 10 referencias de muestra (orden:<id>, solicitud:<id>, control:<persona>:<regla>; nunca datos personales). Sin esta prueba de la versi\xF3n vigente, la instituci\xF3n no puede activar la regla.",
|
|
100
100
|
parametersSchema: {
|
|
101
101
|
type: "object",
|
|
102
102
|
properties: {
|
|
@@ -121,7 +121,7 @@ var manifest = {
|
|
|
121
121
|
{
|
|
122
122
|
name: TOOL_NAMES.abrirCaso,
|
|
123
123
|
displayName: "Abrir caso",
|
|
124
|
-
description: 'Abre un caso nuevo en un workflow, en su estado inicial. Workflows: `demanda_pendiente` (referencia obligatoria `orden:<id>`, `solicitud:<id>` o `control:<persona_id>:<regla_id>`; datos: regla_id obligatorio y la regla tiene que estar activa, persona_id, tipo de origen, estudio o especialidad o prestacion, fecha_origen AAAA-MM-DD, dias; el plugin fija regla_version, canal, intentos, vence_el; nunca nombre, documento ni tel\xE9fono del paciente),`actualizacion_arancel`, `tarea_operativa`, `recupero_turno` (datos: fecha AAAA-MM-DD, hora HH:MM, profesional, especialidad del turno libre; referencia "AAAA-MM-DD HH:MM \xB7 Profesional"), `cuenta_completa` (una prestaci\xF3n pendiente de facturar con faltantes; referencia obligatoria "bono:<n\xFAmero>", datos: bono_id, bono_numero, obra_social, plan, prestacion, fecha_prestacion AAAA-MM-DD, monto_pesos), `facturacion_pendiente` (una prestaci\xF3n sin facturar; misma referencia `bono:<n\xFAmero>` y mismos datos; el plugin calcula plazo_dias, vence_el y plazo_confirmado con los plazos por obra social de la instituci\xF3n), `credencial_profesional` (un profesional con agenda; referencia obligatoria `profesional:<id>`; datos: profesional_id, profesional (apellido y nombre, es personal
|
|
124
|
+
description: 'Abre un caso nuevo en un workflow, en su estado inicial. Workflows: `demanda_pendiente` (referencia obligatoria `orden:<id>`, `solicitud:<id>` o `control:<persona_id>:<regla_id>`; datos: regla_id obligatorio y la regla tiene que estar activa, persona_id, tipo de origen, estudio o especialidad o prestacion, fecha_origen AAAA-MM-DD, dias; el plugin fija regla_version, canal, intentos, vence_el; nunca nombre, documento ni tel\xE9fono del paciente),`actualizacion_arancel`, `tarea_operativa`, `recupero_turno` (datos: fecha AAAA-MM-DD, hora HH:MM, profesional, especialidad del turno libre; referencia "AAAA-MM-DD HH:MM \xB7 Profesional"), `cuenta_completa` (una prestaci\xF3n pendiente de facturar con faltantes; referencia obligatoria "bono:<n\xFAmero>", datos: bono_id, bono_numero, obra_social, plan, prestacion, fecha_prestacion AAAA-MM-DD, monto_pesos, internacion_id opcional; en faltantes, `responsable` {tipo profesional, id, nombre} opcional para que el plugin avise a quien resuelve), `facturacion_pendiente` (una prestaci\xF3n sin facturar; misma referencia `bono:<n\xFAmero>` y mismos datos; el plugin calcula plazo_dias, vence_el y plazo_confirmado con los plazos por obra social de la instituci\xF3n), `credencial_profesional` (un profesional con agenda; referencia obligatoria `profesional:<id>`; datos: profesional_id, profesional (apellido y nombre, es personal de la instituci\xF3n), matricula_nacional, matricula_provincial, codigo_provincia, especialidades). `referencia` identifica el objeto real (convenio, cuenta, turno) y evita duplicados: si ya existe un caso abierto con la misma referencia, se devuelve ese. Pasar `idempotencyKey` para reintentos seguros.',
|
|
125
125
|
parametersSchema: {
|
|
126
126
|
type: "object",
|
|
127
127
|
properties: {
|
|
@@ -138,7 +138,7 @@ var manifest = {
|
|
|
138
138
|
{
|
|
139
139
|
name: TOOL_NAMES.transicionar,
|
|
140
140
|
displayName: "Transicionar caso",
|
|
141
|
-
description: 'Aplica una transici\xF3n del workflow al caso (p. ej. `proponer`, `aplicar`, `verificar`). El plugin valida contra la tabla de transiciones, la pol\xEDtica vigente (observa / propone / ejecuta / corte) y las reglas de negocio; si algo falla, el caso no cambia y se devuelve el motivo. Las transiciones humanas (aprobar, rechazar, corregir) no est\xE1n disponibles para agentes. Cuando una persona
|
|
141
|
+
description: 'Aplica una transici\xF3n del workflow al caso (p. ej. `proponer`, `aplicar`, `verificar`). El plugin valida contra la tabla de transiciones, la pol\xEDtica vigente (observa / propone / ejecuta / corte) y las reglas de negocio; si algo falla, el caso no cambia y se devuelve el motivo. Las transiciones humanas (aprobar, rechazar, corregir) no est\xE1n disponibles para agentes. Cuando una persona de la instituci\xF3n carga a mano lo aprobado, el caso queda en `aplicado`: el agente lo comprueba releyendo el sistema y llamando `verificar` con `datos.valor_leido`. En `recupero_turno`: `proponer` con solicitud_id, solicitud_estado, solicitud_especialidad, cola (la lista de espera pendiente de esa especialidad tal como se vio: [{solicitud_id, prioridad, alta}]; el plugin la ordena y exige justificaci\xF3n para no elegir la primera) y fuente; si la instituci\xF3n pide consulta previa (ops_leer_caso lo dice), `ofrecer` con canal y esperar `aceptar`/`no_acepta`; **antes de escribir en el sistema, `autorizar`** (sin esa autorizaci\xF3n no se escribe); despu\xE9s de escribir, `asignar` con accion_id; `verificar` con leido_fecha, leido_hora, leido_profesional y leido_solicitud_id; `sin_candidato` y `descartar` con motivo. En `cuenta_completa` el agente solo lee: `observar` con bono_id, bono_estado (no_confirmado, confirmado o prefacturado), faltantes [{regla, detalle, item?}] con reglas del cat\xE1logo (autorizacion_faltante, validacion_faltante, afiliado_faltante, orden_faltante, prestacion_sin_valor, epicrisis_faltante), lectura_id (la lectura registrada con ops_registrar_accion, conector "base") y fuente; `comprobar` con faltantes_leidos (lista vac\xEDa si ya est\xE1 completo), bono_estado_leido y lectura_id; `descartar` con motivo si el bono se elimin\xF3 o anul\xF3. En `facturacion_pendiente` (solo lee): `observar` con bono_id, bono_estado, fecha_prestacion, obra_social, lectura_id (conector "base") y fuente; `comprobar` con bono_estado_leido y lectura_id (facturado/refacturado \u2192 facturada; prefacturado \u2192 en prefactura; si no, sigue por presentar); `descartar` con motivo. En `demanda_pendiente`: `contactar` (nivel ejecuta; datos: canal igual al de la regla y accion_id de la escritura registrada; el plugin controla regla activa, intentos, espera entre intentos y horario), `responder` (respuesta: acepta|rechaza|no_contesta), `comprobar` (lectura_id de la relectura del HIS, turno_id y turno_estado del turno encontrado), `cerrar` (motivo; solo con los intentos agotados o el plazo vencido), `descartar` (motivo). `credencial_profesional` (solo lee): `verificar` con profesional_id, matricula y tipo_matricula (nacional|provincial) si hay matr\xEDcula, resultado = el objeto que devuelve verificar-matriculas.mjs tal cual ({sin_matricula, encontrada, coincide_nombre, situacion, sancion, profesion, provincia, emisor}), lectura_id (conector "api", la consulta al registro) y fuente; el plugin decide vigente u observada y fija la observaci\xF3n (sin_matricula, no_figura, otra_persona, inhabilitada, sancion); `descartar` con motivo si el profesional ya no est\xE1 activo.',
|
|
142
142
|
parametersSchema: {
|
|
143
143
|
type: "object",
|
|
144
144
|
properties: {
|
|
@@ -154,13 +154,13 @@ var manifest = {
|
|
|
154
154
|
{
|
|
155
155
|
name: TOOL_NAMES.registrarAccion,
|
|
156
156
|
displayName: "Registrar acci\xF3n",
|
|
157
|
-
description: "Registra una acci\xF3n ejecutada sobre un sistema externo (lectura, escritura o verificaci\xF3n) con su evidencia. Toda acci\xF3n sobre el
|
|
157
|
+
description: "Registra una acci\xF3n ejecutada sobre un sistema externo (lectura, escritura o verificaci\xF3n) con su evidencia. Toda acci\xF3n sobre el HIS debe quedar registrada ac\xE1.",
|
|
158
158
|
parametersSchema: {
|
|
159
159
|
type: "object",
|
|
160
160
|
properties: {
|
|
161
161
|
casoId: { type: "string" },
|
|
162
162
|
tipo: { type: "string", enum: ["lectura", "escritura", "verificacion"] },
|
|
163
|
-
conector: { type: "string", enum: ["api", "base", "archivo", "pantalla", "manual"], description: "Por d\xF3nde se ley\xF3 o escribi\xF3: api, base (lectura de la base de datos del
|
|
163
|
+
conector: { type: "string", enum: ["api", "base", "archivo", "pantalla", "manual"], description: "Por d\xF3nde se ley\xF3 o escribi\xF3: api, base (lectura de la base de datos del HIS), archivo, pantalla o manual." },
|
|
164
164
|
objetivo: { type: "string" },
|
|
165
165
|
resultado: { type: "string", enum: ["ok", "error", "pendiente"] },
|
|
166
166
|
evidencia: { type: "object" },
|
|
@@ -186,7 +186,7 @@ var manifest = {
|
|
|
186
186
|
{
|
|
187
187
|
name: TOOL_NAMES.publicarTablero,
|
|
188
188
|
displayName: "Publicar tablero",
|
|
189
|
-
description: "Publica o actualiza un tablero de gesti\xF3n para la direcci\xF3n
|
|
189
|
+
description: "Publica o actualiza un tablero de gesti\xF3n para la direcci\xF3n de la instituci\xF3n, armado sobre datos reales del HIS (turnos, facturaci\xF3n, internaci\xF3n, producci\xF3n). `clave` identifica el tablero de forma estable (min\xFAsculas y guiones; volver a publicar con la misma clave lo actualiza en el lugar). `widgets` es la lista de piezas que se muestran, en orden: {tipo:'indicador', etiqueta, valor, unidad?, contexto?, tono?: neutro|ambar|senal|corte} \xB7 {tipo:'barras', titulo, unidad?, series:[{etiqueta, valor}]} \xB7 {tipo:'linea', titulo, unidad?, puntos:[{x, y}]} \xB7 {tipo:'tabla', titulo, columnas:[\u2026], filas:[[\u2026]]} \xB7 {tipo:'texto', titulo?, texto}. Cada widget admite `ancho` 1, 2 o 3 (columnas de 3). **N\xFAmeros oficiales:** cada indicador, barras, l\xEDnea o tabla calculado con calcular.mjs lleva `calculo` = el bloque `calculo` que devuelve calcular.mjs, tal cual (cat\xE1logo, m\xE9tricas con versi\xF3n, par\xE1metros, huella, consulta); el plugin lo valida contra el cat\xE1logo de m\xE9tricas y marca el widget como certificado, propuesta (m\xE9trica sin aprobar) o exploratorio (sin `calculo`). Controles que frenan la publicaci\xF3n: una tabla con fila \xABTOTAL\xBB tiene que sumar ese total en cada columna num\xE9rica (las filas \xABSubtotal \u2026\xBB no suman); un desglose con `calculo` y `por` lleva la fila TOTAL; un porcentaje (`unidad` '%' o columna con '%') va de 0 a 100 salvo que el t\xEDtulo diga variaci\xF3n, diferencia o cumplimiento de meta. `fuentes` lista qu\xE9 se consult\xF3 (p. ej. 'Alephoo \xB7 base \xB7 semantica_turnos \xB7 turnos 01/09\u201330/09'). Si el pedido vino de una tarea, pasar `issueId`.",
|
|
190
190
|
parametersSchema: {
|
|
191
191
|
type: "object",
|
|
192
192
|
properties: {
|
|
@@ -378,6 +378,46 @@ var manifest = {
|
|
|
378
378
|
capability: "api.routes.register",
|
|
379
379
|
companyResolution: { from: "body", key: "companyId" }
|
|
380
380
|
},
|
|
381
|
+
{
|
|
382
|
+
routeKey: "contactos",
|
|
383
|
+
method: "GET",
|
|
384
|
+
path: "/contactos",
|
|
385
|
+
auth: "board",
|
|
386
|
+
capability: "api.routes.register",
|
|
387
|
+
companyResolution: { from: "query", key: "companyId" }
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
routeKey: "guardar-contacto",
|
|
391
|
+
method: "POST",
|
|
392
|
+
path: "/contactos",
|
|
393
|
+
auth: "board",
|
|
394
|
+
capability: "api.routes.register",
|
|
395
|
+
companyResolution: { from: "body", key: "companyId" }
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
routeKey: "avisos-pendientes",
|
|
399
|
+
method: "GET",
|
|
400
|
+
path: "/avisos/pendientes",
|
|
401
|
+
auth: "board",
|
|
402
|
+
capability: "api.routes.register",
|
|
403
|
+
companyResolution: { from: "query", key: "companyId" }
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
routeKey: "avisos",
|
|
407
|
+
method: "GET",
|
|
408
|
+
path: "/avisos",
|
|
409
|
+
auth: "board",
|
|
410
|
+
capability: "api.routes.register",
|
|
411
|
+
companyResolution: { from: "query", key: "companyId" }
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
routeKey: "resultado-aviso",
|
|
415
|
+
method: "POST",
|
|
416
|
+
path: "/avisos/:avisoId/resultado",
|
|
417
|
+
auth: "board",
|
|
418
|
+
capability: "api.routes.register",
|
|
419
|
+
companyResolution: { from: "body", key: "companyId" }
|
|
420
|
+
},
|
|
381
421
|
{
|
|
382
422
|
routeKey: "contacto",
|
|
383
423
|
method: "POST",
|
|
@@ -413,7 +453,7 @@ var MODOS = [
|
|
|
413
453
|
{ valor: "corte", etiqueta: "Corte", ayuda: "Los agentes no pueden abrir ni mover casos." },
|
|
414
454
|
{ valor: "observa", etiqueta: "Observa", ayuda: "Los agentes leen, registran y verifican; no proponen." },
|
|
415
455
|
{ valor: "propone", etiqueta: "Propone", ayuda: "Los agentes proponen; un humano aprueba y aplica." },
|
|
416
|
-
{ valor: "ejecuta", etiqueta: "Ejecuta", ayuda: "Los agentes aplican lo aprobado en el
|
|
456
|
+
{ valor: "ejecuta", etiqueta: "Ejecuta", ayuda: "Los agentes aplican lo aprobado en el HIS." },
|
|
417
457
|
{ valor: "autonomo", etiqueta: "Aut\xF3nomo", ayuda: "Aprobaci\xF3n autom\xE1tica salvo excepciones (variaci\xF3n alta, sin valor actual, reintento, baja de valor)." }
|
|
418
458
|
];
|
|
419
459
|
var fuente = 'ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif';
|