paperclip-plugin-autopilot-ops 0.1.13 → 0.1.15
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 +81 -4
- package/dist/ui/index.js +81 -4
- package/dist/worker.js +870 -182
- package/migrations/004_reglas.sql +25 -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.15";
|
|
4
4
|
var DB_NAMESPACE_SLUG = "autopilot_ops";
|
|
5
5
|
var PAGE_ROUTE = "autopilot";
|
|
6
6
|
var TOOL_NAMES = {
|
|
@@ -11,7 +11,9 @@ var TOOL_NAMES = {
|
|
|
11
11
|
registrarAccion: "ops_registrar_accion",
|
|
12
12
|
consultarIndicador: "ops_consultar_indicador",
|
|
13
13
|
publicarTablero: "ops_publicar_tablero",
|
|
14
|
-
listarTableros: "ops_listar_tableros"
|
|
14
|
+
listarTableros: "ops_listar_tableros",
|
|
15
|
+
listarReglas: "ops_listar_reglas",
|
|
16
|
+
informarPruebaRegla: "ops_informar_prueba_regla"
|
|
15
17
|
};
|
|
16
18
|
var DATA_KEYS = {
|
|
17
19
|
tablero: "tablero",
|
|
@@ -71,6 +73,33 @@ var manifest = {
|
|
|
71
73
|
}
|
|
72
74
|
}
|
|
73
75
|
},
|
|
76
|
+
{
|
|
77
|
+
name: TOOL_NAMES.listarReglas,
|
|
78
|
+
displayName: "Listar reglas",
|
|
79
|
+
description: "Lista las reglas que el hospital 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 el hospital desde el portal.",
|
|
80
|
+
parametersSchema: {
|
|
81
|
+
type: "object",
|
|
82
|
+
properties: {
|
|
83
|
+
workflow: { type: "string" },
|
|
84
|
+
estado: { type: "string", enum: ["borrador", "activa", "pausada"] }
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: TOOL_NAMES.informarPruebaRegla,
|
|
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, el hospital no puede activar la regla.",
|
|
92
|
+
parametersSchema: {
|
|
93
|
+
type: "object",
|
|
94
|
+
properties: {
|
|
95
|
+
reglaId: { type: "string" },
|
|
96
|
+
alcanza: { type: "number" },
|
|
97
|
+
muestra: { type: "array", items: { type: "string" } },
|
|
98
|
+
consulta: { type: "string", description: "La consulta que se corri\xF3 (opcional, para auditor\xEDa)." }
|
|
99
|
+
},
|
|
100
|
+
required: ["reglaId", "alcanza"]
|
|
101
|
+
}
|
|
102
|
+
},
|
|
74
103
|
{
|
|
75
104
|
name: TOOL_NAMES.leerCaso,
|
|
76
105
|
displayName: "Leer caso",
|
|
@@ -84,7 +113,7 @@ var manifest = {
|
|
|
84
113
|
{
|
|
85
114
|
name: TOOL_NAMES.abrirCaso,
|
|
86
115
|
displayName: "Abrir caso",
|
|
87
|
-
description: 'Abre un caso nuevo en un workflow, en su estado inicial. Workflows: `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 del hospital), 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.',
|
|
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 del hospital), 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.',
|
|
88
117
|
parametersSchema: {
|
|
89
118
|
type: "object",
|
|
90
119
|
properties: {
|
|
@@ -101,7 +130,7 @@ var manifest = {
|
|
|
101
130
|
{
|
|
102
131
|
name: TOOL_NAMES.transicionar,
|
|
103
132
|
displayName: "Transicionar caso",
|
|
104
|
-
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 del hospital 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 `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.',
|
|
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 del hospital 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 de Alephoo, 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.',
|
|
105
134
|
parametersSchema: {
|
|
106
135
|
type: "object",
|
|
107
136
|
properties: {
|
|
@@ -300,6 +329,54 @@ var manifest = {
|
|
|
300
329
|
auth: "board",
|
|
301
330
|
capability: "api.routes.register",
|
|
302
331
|
companyResolution: { from: "query", key: "companyId" }
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
routeKey: "reglas",
|
|
335
|
+
method: "GET",
|
|
336
|
+
path: "/reglas",
|
|
337
|
+
auth: "board",
|
|
338
|
+
capability: "api.routes.register",
|
|
339
|
+
companyResolution: { from: "query", key: "companyId" }
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
routeKey: "crear-regla",
|
|
343
|
+
method: "POST",
|
|
344
|
+
path: "/reglas",
|
|
345
|
+
auth: "board",
|
|
346
|
+
capability: "api.routes.register",
|
|
347
|
+
companyResolution: { from: "body", key: "companyId" }
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
routeKey: "editar-regla",
|
|
351
|
+
method: "POST",
|
|
352
|
+
path: "/reglas/:reglaId",
|
|
353
|
+
auth: "board",
|
|
354
|
+
capability: "api.routes.register",
|
|
355
|
+
companyResolution: { from: "body", key: "companyId" }
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
routeKey: "estado-regla",
|
|
359
|
+
method: "POST",
|
|
360
|
+
path: "/reglas/:reglaId/estado",
|
|
361
|
+
auth: "board",
|
|
362
|
+
capability: "api.routes.register",
|
|
363
|
+
companyResolution: { from: "body", key: "companyId" }
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
routeKey: "probar-regla",
|
|
367
|
+
method: "POST",
|
|
368
|
+
path: "/reglas/:reglaId/probar",
|
|
369
|
+
auth: "board",
|
|
370
|
+
capability: "api.routes.register",
|
|
371
|
+
companyResolution: { from: "body", key: "companyId" }
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
routeKey: "contacto",
|
|
375
|
+
method: "POST",
|
|
376
|
+
path: "/casos/:casoId/contacto",
|
|
377
|
+
auth: "board",
|
|
378
|
+
capability: "api.routes.register",
|
|
379
|
+
companyResolution: { from: "body", key: "companyId" }
|
|
303
380
|
}
|
|
304
381
|
],
|
|
305
382
|
ui: {
|
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.15";
|
|
12
12
|
var DB_NAMESPACE_SLUG = "autopilot_ops";
|
|
13
13
|
var PAGE_ROUTE = "autopilot";
|
|
14
14
|
var TOOL_NAMES = {
|
|
@@ -19,7 +19,9 @@ var TOOL_NAMES = {
|
|
|
19
19
|
registrarAccion: "ops_registrar_accion",
|
|
20
20
|
consultarIndicador: "ops_consultar_indicador",
|
|
21
21
|
publicarTablero: "ops_publicar_tablero",
|
|
22
|
-
listarTableros: "ops_listar_tableros"
|
|
22
|
+
listarTableros: "ops_listar_tableros",
|
|
23
|
+
listarReglas: "ops_listar_reglas",
|
|
24
|
+
informarPruebaRegla: "ops_informar_prueba_regla"
|
|
23
25
|
};
|
|
24
26
|
var DATA_KEYS = {
|
|
25
27
|
tablero: "tablero",
|
|
@@ -79,6 +81,33 @@ var manifest = {
|
|
|
79
81
|
}
|
|
80
82
|
}
|
|
81
83
|
},
|
|
84
|
+
{
|
|
85
|
+
name: TOOL_NAMES.listarReglas,
|
|
86
|
+
displayName: "Listar reglas",
|
|
87
|
+
description: "Lista las reglas que el hospital 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 el hospital desde el portal.",
|
|
88
|
+
parametersSchema: {
|
|
89
|
+
type: "object",
|
|
90
|
+
properties: {
|
|
91
|
+
workflow: { type: "string" },
|
|
92
|
+
estado: { type: "string", enum: ["borrador", "activa", "pausada"] }
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: TOOL_NAMES.informarPruebaRegla,
|
|
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, el hospital no puede activar la regla.",
|
|
100
|
+
parametersSchema: {
|
|
101
|
+
type: "object",
|
|
102
|
+
properties: {
|
|
103
|
+
reglaId: { type: "string" },
|
|
104
|
+
alcanza: { type: "number" },
|
|
105
|
+
muestra: { type: "array", items: { type: "string" } },
|
|
106
|
+
consulta: { type: "string", description: "La consulta que se corri\xF3 (opcional, para auditor\xEDa)." }
|
|
107
|
+
},
|
|
108
|
+
required: ["reglaId", "alcanza"]
|
|
109
|
+
}
|
|
110
|
+
},
|
|
82
111
|
{
|
|
83
112
|
name: TOOL_NAMES.leerCaso,
|
|
84
113
|
displayName: "Leer caso",
|
|
@@ -92,7 +121,7 @@ var manifest = {
|
|
|
92
121
|
{
|
|
93
122
|
name: TOOL_NAMES.abrirCaso,
|
|
94
123
|
displayName: "Abrir caso",
|
|
95
|
-
description: 'Abre un caso nuevo en un workflow, en su estado inicial. Workflows: `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 del hospital), 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.',
|
|
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 del hospital), 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.',
|
|
96
125
|
parametersSchema: {
|
|
97
126
|
type: "object",
|
|
98
127
|
properties: {
|
|
@@ -109,7 +138,7 @@ var manifest = {
|
|
|
109
138
|
{
|
|
110
139
|
name: TOOL_NAMES.transicionar,
|
|
111
140
|
displayName: "Transicionar caso",
|
|
112
|
-
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 del hospital 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 `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.',
|
|
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 del hospital 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 de Alephoo, 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.',
|
|
113
142
|
parametersSchema: {
|
|
114
143
|
type: "object",
|
|
115
144
|
properties: {
|
|
@@ -308,6 +337,54 @@ var manifest = {
|
|
|
308
337
|
auth: "board",
|
|
309
338
|
capability: "api.routes.register",
|
|
310
339
|
companyResolution: { from: "query", key: "companyId" }
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
routeKey: "reglas",
|
|
343
|
+
method: "GET",
|
|
344
|
+
path: "/reglas",
|
|
345
|
+
auth: "board",
|
|
346
|
+
capability: "api.routes.register",
|
|
347
|
+
companyResolution: { from: "query", key: "companyId" }
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
routeKey: "crear-regla",
|
|
351
|
+
method: "POST",
|
|
352
|
+
path: "/reglas",
|
|
353
|
+
auth: "board",
|
|
354
|
+
capability: "api.routes.register",
|
|
355
|
+
companyResolution: { from: "body", key: "companyId" }
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
routeKey: "editar-regla",
|
|
359
|
+
method: "POST",
|
|
360
|
+
path: "/reglas/:reglaId",
|
|
361
|
+
auth: "board",
|
|
362
|
+
capability: "api.routes.register",
|
|
363
|
+
companyResolution: { from: "body", key: "companyId" }
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
routeKey: "estado-regla",
|
|
367
|
+
method: "POST",
|
|
368
|
+
path: "/reglas/:reglaId/estado",
|
|
369
|
+
auth: "board",
|
|
370
|
+
capability: "api.routes.register",
|
|
371
|
+
companyResolution: { from: "body", key: "companyId" }
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
routeKey: "probar-regla",
|
|
375
|
+
method: "POST",
|
|
376
|
+
path: "/reglas/:reglaId/probar",
|
|
377
|
+
auth: "board",
|
|
378
|
+
capability: "api.routes.register",
|
|
379
|
+
companyResolution: { from: "body", key: "companyId" }
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
routeKey: "contacto",
|
|
383
|
+
method: "POST",
|
|
384
|
+
path: "/casos/:casoId/contacto",
|
|
385
|
+
auth: "board",
|
|
386
|
+
capability: "api.routes.register",
|
|
387
|
+
companyResolution: { from: "body", key: "companyId" }
|
|
311
388
|
}
|
|
312
389
|
],
|
|
313
390
|
ui: {
|