@nubiia/mcp-freematica 0.6.1

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.
Files changed (138) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +485 -0
  3. package/dist/clients/base-client.d.ts +31 -0
  4. package/dist/clients/base-client.js +102 -0
  5. package/dist/clients/base-client.js.map +1 -0
  6. package/dist/clients/fiql-builder.d.ts +118 -0
  7. package/dist/clients/fiql-builder.js +257 -0
  8. package/dist/clients/fiql-builder.js.map +1 -0
  9. package/dist/clients/freematica-client.d.ts +659 -0
  10. package/dist/clients/freematica-client.js +1327 -0
  11. package/dist/clients/freematica-client.js.map +1 -0
  12. package/dist/clients/hardened-base-client.d.ts +143 -0
  13. package/dist/clients/hardened-base-client.js +366 -0
  14. package/dist/clients/hardened-base-client.js.map +1 -0
  15. package/dist/config.d.ts +104 -0
  16. package/dist/config.js +105 -0
  17. package/dist/config.js.map +1 -0
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.js +55 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/logger.d.ts +71 -0
  22. package/dist/logger.js +114 -0
  23. package/dist/logger.js.map +1 -0
  24. package/dist/schemas/albaranes.d.ts +124 -0
  25. package/dist/schemas/albaranes.js +250 -0
  26. package/dist/schemas/albaranes.js.map +1 -0
  27. package/dist/schemas/cartera.d.ts +70 -0
  28. package/dist/schemas/cartera.js +104 -0
  29. package/dist/schemas/cartera.js.map +1 -0
  30. package/dist/schemas/contratos.d.ts +7 -0
  31. package/dist/schemas/contratos.js +2 -0
  32. package/dist/schemas/contratos.js.map +1 -0
  33. package/dist/schemas/facturas-electronicas.d.ts +60 -0
  34. package/dist/schemas/facturas-electronicas.js +79 -0
  35. package/dist/schemas/facturas-electronicas.js.map +1 -0
  36. package/dist/schemas/facturas-ventas.d.ts +118 -0
  37. package/dist/schemas/facturas-ventas.js +153 -0
  38. package/dist/schemas/facturas-ventas.js.map +1 -0
  39. package/dist/schemas/filters.d.ts +92 -0
  40. package/dist/schemas/filters.js +76 -0
  41. package/dist/schemas/filters.js.map +1 -0
  42. package/dist/schemas/master-data.d.ts +26 -0
  43. package/dist/schemas/master-data.js +86 -0
  44. package/dist/schemas/master-data.js.map +1 -0
  45. package/dist/schemas/pagination.d.ts +14 -0
  46. package/dist/schemas/pagination.js +27 -0
  47. package/dist/schemas/pagination.js.map +1 -0
  48. package/dist/schemas/pedidos-compras.d.ts +92 -0
  49. package/dist/schemas/pedidos-compras.js +189 -0
  50. package/dist/schemas/pedidos-compras.js.map +1 -0
  51. package/dist/server-instructions.d.ts +1 -0
  52. package/dist/server-instructions.js +83 -0
  53. package/dist/server-instructions.js.map +1 -0
  54. package/dist/server.d.ts +6 -0
  55. package/dist/server.js +41 -0
  56. package/dist/server.js.map +1 -0
  57. package/dist/tools/albaranes.d.ts +16 -0
  58. package/dist/tools/albaranes.js +202 -0
  59. package/dist/tools/albaranes.js.map +1 -0
  60. package/dist/tools/calendarios.d.ts +13 -0
  61. package/dist/tools/calendarios.js +82 -0
  62. package/dist/tools/calendarios.js.map +1 -0
  63. package/dist/tools/cartera.d.ts +13 -0
  64. package/dist/tools/cartera.js +78 -0
  65. package/dist/tools/cartera.js.map +1 -0
  66. package/dist/tools/clientes.d.ts +3 -0
  67. package/dist/tools/clientes.js +48 -0
  68. package/dist/tools/clientes.js.map +1 -0
  69. package/dist/tools/contabilidad.d.ts +14 -0
  70. package/dist/tools/contabilidad.js +259 -0
  71. package/dist/tools/contabilidad.js.map +1 -0
  72. package/dist/tools/contactos-clientes.d.ts +3 -0
  73. package/dist/tools/contactos-clientes.js +25 -0
  74. package/dist/tools/contactos-clientes.js.map +1 -0
  75. package/dist/tools/contratos.d.ts +10 -0
  76. package/dist/tools/contratos.js +35 -0
  77. package/dist/tools/contratos.js.map +1 -0
  78. package/dist/tools/facturas-compras.d.ts +13 -0
  79. package/dist/tools/facturas-compras.js +131 -0
  80. package/dist/tools/facturas-compras.js.map +1 -0
  81. package/dist/tools/facturas-electronicas.d.ts +17 -0
  82. package/dist/tools/facturas-electronicas.js +268 -0
  83. package/dist/tools/facturas-electronicas.js.map +1 -0
  84. package/dist/tools/facturas-ventas.d.ts +16 -0
  85. package/dist/tools/facturas-ventas.js +181 -0
  86. package/dist/tools/facturas-ventas.js.map +1 -0
  87. package/dist/tools/helpers.d.ts +17 -0
  88. package/dist/tools/helpers.js +36 -0
  89. package/dist/tools/helpers.js.map +1 -0
  90. package/dist/tools/localizaciones.d.ts +17 -0
  91. package/dist/tools/localizaciones.js +192 -0
  92. package/dist/tools/localizaciones.js.map +1 -0
  93. package/dist/tools/master-data.d.ts +10 -0
  94. package/dist/tools/master-data.js +70 -0
  95. package/dist/tools/master-data.js.map +1 -0
  96. package/dist/tools/oportunidades-negocio.d.ts +3 -0
  97. package/dist/tools/oportunidades-negocio.js +68 -0
  98. package/dist/tools/oportunidades-negocio.js.map +1 -0
  99. package/dist/tools/pedidos-compras.d.ts +14 -0
  100. package/dist/tools/pedidos-compras.js +105 -0
  101. package/dist/tools/pedidos-compras.js.map +1 -0
  102. package/dist/tools/personal.d.ts +13 -0
  103. package/dist/tools/personal.js +154 -0
  104. package/dist/tools/personal.js.map +1 -0
  105. package/dist/tools/prl.d.ts +47 -0
  106. package/dist/tools/prl.js +242 -0
  107. package/dist/tools/prl.js.map +1 -0
  108. package/dist/tools/proveedores.d.ts +14 -0
  109. package/dist/tools/proveedores.js +122 -0
  110. package/dist/tools/proveedores.js.map +1 -0
  111. package/dist/transports/http.d.ts +12 -0
  112. package/dist/transports/http.js +110 -0
  113. package/dist/transports/http.js.map +1 -0
  114. package/dist/transports/stdio.d.ts +12 -0
  115. package/dist/transports/stdio.js +15 -0
  116. package/dist/transports/stdio.js.map +1 -0
  117. package/dist/types/api-envelope.d.ts +27 -0
  118. package/dist/types/api-envelope.js +2 -0
  119. package/dist/types/api-envelope.js.map +1 -0
  120. package/dist/types/clientes.d.ts +9 -0
  121. package/dist/types/clientes.js +2 -0
  122. package/dist/types/clientes.js.map +1 -0
  123. package/dist/types/contactos-clientes.d.ts +7 -0
  124. package/dist/types/contactos-clientes.js +2 -0
  125. package/dist/types/contactos-clientes.js.map +1 -0
  126. package/dist/types/contratos.d.ts +8 -0
  127. package/dist/types/contratos.js +2 -0
  128. package/dist/types/contratos.js.map +1 -0
  129. package/dist/types/master-data.d.ts +9 -0
  130. package/dist/types/master-data.js +2 -0
  131. package/dist/types/master-data.js.map +1 -0
  132. package/dist/types/oportunidades-negocio.d.ts +8 -0
  133. package/dist/types/oportunidades-negocio.js +2 -0
  134. package/dist/types/oportunidades-negocio.js.map +1 -0
  135. package/dist/utils/size-guardrail.d.ts +22 -0
  136. package/dist/utils/size-guardrail.js +31 -0
  137. package/dist/utils/size-guardrail.js.map +1 -0
  138. package/package.json +90 -0
@@ -0,0 +1,14 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { FreematicaClient } from '../clients/freematica-client.js';
3
+ /**
4
+ * Registra las tools de pedidos de compra en el servidor MCP.
5
+ *
6
+ * Tools registradas:
7
+ * - `freematica_list_pedidos_compra`: lista paginada con filtros mixtos
8
+ * (4 query params nativos + FIQL vía rQuery).
9
+ * - `freematica_get_pedido_compra`: detalle por idReg opaco (objeto compuesto sin aplanar).
10
+ *
11
+ * @param server - Instancia del servidor MCP.
12
+ * @param client - Cliente Freemática autenticado.
13
+ */
14
+ export declare function registerPedidosComprasTools(server: McpServer, client: FreematicaClient): void;
@@ -0,0 +1,105 @@
1
+ import { z } from 'zod';
2
+ import { FreematicaError } from '../clients/base-client.js';
3
+ import { ListPedidosCompraFiltersSchema } from '../schemas/pedidos-compras.js';
4
+ import { error, ok, okList } from './helpers.js';
5
+ const LIST_TOOL_NAME = 'freematica_list_pedidos_compra';
6
+ const GET_TOOL_NAME = 'freematica_get_pedido_compra';
7
+ const LIST_DESCRIPTION = [
8
+ 'Devuelve la lista paginada de pedidos de compra de Freemática.',
9
+ '',
10
+ 'DISEÑO MIXTO: este endpoint tiene 4 filtros como query params nativos (no FIQL)',
11
+ 'y el resto de filtros vía rQuery (FIQL con campos ALCC_*).',
12
+ '',
13
+ 'Filtros nativos (van directamente como query params):',
14
+ ' - empresa (4c) → codEmpresa',
15
+ ' - codProveedor (≤10c) → codProveedor',
16
+ ' - fechaPedidoDesde (ISO) → desdeFecha',
17
+ ' - fechaPedidoHasta (ISO) → hastaFecha',
18
+ '',
19
+ 'Filtros FIQL (van en rQuery con campos ALCC_*):',
20
+ ' - numPedido → ALCC_NUMDOC',
21
+ ' - codDocumento → ALCC_CODDOC',
22
+ ' - delegacion → ALCC_DELEG',
23
+ ' - formaPago → ALCC_FPAGO',
24
+ ' - tipoIva → ALCC_TIPO_IVA',
25
+ ' - codCliente → ALCC_COD_CLIENTE',
26
+ ' - codInstalador → ALCC_COD_INSTALADOR',
27
+ ' - codMantenedor → ALCC_COD_MANTENEDOR',
28
+ ' - fechaEntregaDesde / fechaEntregaHasta → ALCC_FCHENTREGA con =ge=/=le=',
29
+ ' - referencia → ALCC_REFERENCIA (match exacto)',
30
+ ' - estado → enum: pendiente | bloqueado | recibido',
31
+ '',
32
+ 'Cada item contiene los campos del pedido (ALCC_*) más `idReg` opaco para el endpoint singular.',
33
+ '',
34
+ 'Paginación 1-indexed.',
35
+ ].join('\n');
36
+ const GET_DESCRIPTION = [
37
+ 'Devuelve el detalle completo de un pedido de compra.',
38
+ '',
39
+ 'El parámetro `id` DEBE ser el campo `idReg` (string opaco base64) que aparece en los items de',
40
+ 'freematica_list_pedidos_compra. NO usar ALCC_NUMDOC ni otro código natural.',
41
+ '',
42
+ 'La respuesta es un objeto compuesto: { VoPedidosCompraCab, cabecera_proveedor, lineas[] }.',
43
+ 'Se devuelve sin aplanar para conservar la estructura original del API.',
44
+ ].join('\n');
45
+ /**
46
+ * Registra las tools de pedidos de compra en el servidor MCP.
47
+ *
48
+ * Tools registradas:
49
+ * - `freematica_list_pedidos_compra`: lista paginada con filtros mixtos
50
+ * (4 query params nativos + FIQL vía rQuery).
51
+ * - `freematica_get_pedido_compra`: detalle por idReg opaco (objeto compuesto sin aplanar).
52
+ *
53
+ * @param server - Instancia del servidor MCP.
54
+ * @param client - Cliente Freemática autenticado.
55
+ */
56
+ export function registerPedidosComprasTools(server, client) {
57
+ server.tool(LIST_TOOL_NAME, LIST_DESCRIPTION, ListPedidosCompraFiltersSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ page, items, empresa, codProveedor, fechaPedidoDesde, fechaPedidoHasta, numPedido, codDocumento, delegacion, formaPago, tipoIva, codCliente, codInstalador, codMantenedor, fechaEntregaDesde, fechaEntregaHasta, referencia, estado, }) => {
58
+ try {
59
+ const result = await client.listPedidosCompra({
60
+ page,
61
+ items,
62
+ empresa,
63
+ codProveedor,
64
+ fechaPedidoDesde,
65
+ fechaPedidoHasta,
66
+ numPedido,
67
+ codDocumento,
68
+ delegacion,
69
+ formaPago,
70
+ tipoIva,
71
+ codCliente,
72
+ codInstalador,
73
+ codMantenedor,
74
+ fechaEntregaDesde,
75
+ fechaEntregaHasta,
76
+ referencia,
77
+ estado,
78
+ });
79
+ return okList({ items: result.items, total: result.total, page, itemsPerPage: items });
80
+ }
81
+ catch (err) {
82
+ if (err instanceof FreematicaError)
83
+ return error(err);
84
+ return error(err instanceof Error ? err : new Error(String(err)));
85
+ }
86
+ });
87
+ server.tool(GET_TOOL_NAME, GET_DESCRIPTION, {
88
+ id: z
89
+ .string()
90
+ .min(1)
91
+ .describe('idReg opaco del pedido de compra (campo "idReg" en los items de freematica_list_pedidos_compra). ' +
92
+ 'Puede contener caracteres especiales como "==" (base64); se URL-encodeará automáticamente.'),
93
+ }, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ id }) => {
94
+ try {
95
+ const pedido = await client.getPedidoCompra(id);
96
+ return ok(pedido);
97
+ }
98
+ catch (err) {
99
+ if (err instanceof FreematicaError)
100
+ return error(err);
101
+ return error(err instanceof Error ? err : new Error(String(err)));
102
+ }
103
+ });
104
+ }
105
+ //# sourceMappingURL=pedidos-compras.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pedidos-compras.js","sourceRoot":"","sources":["../../src/tools/pedidos-compras.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { FreematicaClient } from '../clients/freematica-client.js';
3
+ /**
4
+ * Registra las tools MCP del dominio Personal (RRHH).
5
+ *
6
+ * Tools expuestas:
7
+ * 1. freematica_list_personal — lista paginada con filtros FIQL
8
+ * 2. freematica_get_persona — detalle por idReg
9
+ *
10
+ * @param server - Instancia del servidor MCP.
11
+ * @param client - Cliente Freemática autenticado.
12
+ */
13
+ export declare function registerPersonalTools(server: McpServer, client: FreematicaClient): void;
@@ -0,0 +1,154 @@
1
+ import { z } from 'zod';
2
+ import { FreematicaError } from '../clients/base-client.js';
3
+ import { PaginationSchema } from '../schemas/pagination.js';
4
+ import { error, ok, okList } from './helpers.js';
5
+ // ---------------------------------------------------------------------------
6
+ // Tool names
7
+ // ---------------------------------------------------------------------------
8
+ const LIST_TOOL_NAME = 'freematica_list_personal';
9
+ const GET_TOOL_NAME = 'freematica_get_persona';
10
+ // ---------------------------------------------------------------------------
11
+ // Descriptions
12
+ // ---------------------------------------------------------------------------
13
+ const LIST_DESCRIPTION = [
14
+ 'Devuelve la lista paginada de personas (empleados / personal) de Freemática.',
15
+ '',
16
+ 'Endpoint: GET /pers/v2/personal',
17
+ '',
18
+ 'Permite filtrar por empresa (VSSPER_EMP), delegación (VSSPER_DELEG), código',
19
+ 'de persona (VSSPER_COD), nombre (VSSPER_NOM, búsqueda parcial), primer',
20
+ 'apellido (VSSPER_APELL1, búsqueda parcial), NIF (VSSPER_NIF), situación',
21
+ '(VSSPER_SIT), departamento (VSSPER_DPTO), sección (VSSPER_SECCION) y activo',
22
+ '(boolean traducido a FIQL VSSPER_ACTIVO==S o VSSPER_ACTIVO==N).',
23
+ '',
24
+ 'Cada item incluye `idReg` opaco para usar en freematica_get_persona.',
25
+ ].join('\n');
26
+ const GET_DESCRIPTION = [
27
+ 'Devuelve el detalle completo de una persona.',
28
+ '',
29
+ 'Endpoint: GET /pers/v2/personal/{idreg}',
30
+ '',
31
+ 'El parámetro `id` DEBE ser el campo `idReg` (string opaco base64) que aparece',
32
+ 'en los items de freematica_list_personal.',
33
+ ].join('\n');
34
+ // ---------------------------------------------------------------------------
35
+ // Schemas
36
+ // ---------------------------------------------------------------------------
37
+ /** Schema para freematica_list_personal. */
38
+ const ListPersonalSchema = {
39
+ ...PaginationSchema,
40
+ empresa: z
41
+ .string()
42
+ .min(1)
43
+ .optional()
44
+ .describe('Código de empresa (campo VSSPER_EMP en Freemática).'),
45
+ delegacion: z
46
+ .string()
47
+ .min(1)
48
+ .optional()
49
+ .describe('Código de delegación (campo VSSPER_DELEG en Freemática).'),
50
+ codPersona: z
51
+ .string()
52
+ .min(1)
53
+ .optional()
54
+ .describe('Código natural de la persona (campo VSSPER_COD en Freemática).'),
55
+ nombre: z
56
+ .string()
57
+ .min(1)
58
+ .optional()
59
+ .describe('Nombre de la persona — búsqueda parcial con FIQL LIKE (campo VSSPER_NOM). ' +
60
+ 'Introduce parte del nombre para buscar (ej. "Juan" encuentra "Juan Carlos").'),
61
+ apellido: z
62
+ .string()
63
+ .min(1)
64
+ .optional()
65
+ .describe('Primer apellido — búsqueda parcial con FIQL LIKE (campo VSSPER_APELL1). ' +
66
+ 'Introduce parte del apellido para buscar.'),
67
+ nif: z
68
+ .string()
69
+ .min(1)
70
+ .optional()
71
+ .describe('NIF/DNI de la persona (campo VSSPER_NIF en Freemática). Coincidencia exacta.'),
72
+ situacion: z
73
+ .string()
74
+ .min(1)
75
+ .optional()
76
+ .describe('Código de situación laboral (campo VSSPER_SIT en Freemática).'),
77
+ departamento: z
78
+ .string()
79
+ .min(1)
80
+ .optional()
81
+ .describe('Código de departamento (campo VSSPER_DPTO en Freemática).'),
82
+ seccion: z
83
+ .string()
84
+ .min(1)
85
+ .optional()
86
+ .describe('Código de sección (campo VSSPER_SECCION en Freemática).'),
87
+ activo: z
88
+ .boolean()
89
+ .optional()
90
+ .describe('Filtra por personas activas (true → VSSPER_ACTIVO==S) o inactivas (false → VSSPER_ACTIVO==N). ' +
91
+ 'Si se omite, devuelve todas.'),
92
+ };
93
+ // ---------------------------------------------------------------------------
94
+ // Register function
95
+ // ---------------------------------------------------------------------------
96
+ /**
97
+ * Registra las tools MCP del dominio Personal (RRHH).
98
+ *
99
+ * Tools expuestas:
100
+ * 1. freematica_list_personal — lista paginada con filtros FIQL
101
+ * 2. freematica_get_persona — detalle por idReg
102
+ *
103
+ * @param server - Instancia del servidor MCP.
104
+ * @param client - Cliente Freemática autenticado.
105
+ */
106
+ export function registerPersonalTools(server, client) {
107
+ // -------------------------------------------------------------------------
108
+ // 1. freematica_list_personal
109
+ // -------------------------------------------------------------------------
110
+ server.tool(LIST_TOOL_NAME, LIST_DESCRIPTION, ListPersonalSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ page, items, empresa, delegacion, codPersona, nombre, apellido, nif, situacion, departamento, seccion, activo, }) => {
111
+ try {
112
+ const result = await client.listPersonal({
113
+ page,
114
+ items,
115
+ empresa,
116
+ delegacion,
117
+ codPersona,
118
+ nombre,
119
+ apellido,
120
+ nif,
121
+ situacion,
122
+ departamento,
123
+ seccion,
124
+ activo,
125
+ });
126
+ return okList({ items: result.items, total: result.total, page, itemsPerPage: items });
127
+ }
128
+ catch (err) {
129
+ if (err instanceof FreematicaError)
130
+ return error(err);
131
+ return error(err instanceof Error ? err : new Error(String(err)));
132
+ }
133
+ });
134
+ // -------------------------------------------------------------------------
135
+ // 2. freematica_get_persona
136
+ // -------------------------------------------------------------------------
137
+ server.tool(GET_TOOL_NAME, GET_DESCRIPTION, {
138
+ id: z
139
+ .string()
140
+ .min(1)
141
+ .describe('idReg opaco de la persona (campo "idReg" en los items de freematica_list_personal).'),
142
+ }, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ id }) => {
143
+ try {
144
+ const persona = await client.getPersona(id);
145
+ return ok(persona);
146
+ }
147
+ catch (err) {
148
+ if (err instanceof FreematicaError)
149
+ return error(err);
150
+ return error(err instanceof Error ? err : new Error(String(err)));
151
+ }
152
+ });
153
+ }
154
+ //# sourceMappingURL=personal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personal.js","sourceRoot":"","sources":["../../src/tools/personal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { z } from 'zod';
3
+ import type { FreematicaClient } from '../clients/freematica-client.js';
4
+ /**
5
+ * Schema Zod con `.refine()` para validar "al menos uno de los 4 identificadores".
6
+ *
7
+ * Se usa en los tests y dentro del handler. NO se pasa directamente a server.tool
8
+ * porque ZodEffects no es ZodRawShapeCompat.
9
+ */
10
+ export declare const FichaPrevClienteRefinedSchema: z.ZodEffects<z.ZodObject<{
11
+ codCliente: z.ZodOptional<z.ZodString>;
12
+ grupoCliente: z.ZodOptional<z.ZodNumber>;
13
+ codLocalizacionServicio: z.ZodOptional<z.ZodNumber>;
14
+ codigoFicha: z.ZodOptional<z.ZodString>;
15
+ }, "strip", z.ZodTypeAny, {
16
+ codCliente?: string | undefined;
17
+ grupoCliente?: number | undefined;
18
+ codLocalizacionServicio?: number | undefined;
19
+ codigoFicha?: string | undefined;
20
+ }, {
21
+ codCliente?: string | undefined;
22
+ grupoCliente?: number | undefined;
23
+ codLocalizacionServicio?: number | undefined;
24
+ codigoFicha?: string | undefined;
25
+ }>, {
26
+ codCliente?: string | undefined;
27
+ grupoCliente?: number | undefined;
28
+ codLocalizacionServicio?: number | undefined;
29
+ codigoFicha?: string | undefined;
30
+ }, {
31
+ codCliente?: string | undefined;
32
+ grupoCliente?: number | undefined;
33
+ codLocalizacionServicio?: number | undefined;
34
+ codigoFicha?: string | undefined;
35
+ }>;
36
+ /**
37
+ * Registra las tools MCP del dominio PRL (Prevención de Riesgos Laborales).
38
+ *
39
+ * Tools expuestas:
40
+ * 1. freematica_get_ficha_prev_cliente — ficha PRL de un cliente
41
+ * 2. freematica_list_vigilancia_salud — lista paginada de VS con filtros
42
+ * 3. freematica_get_vigilancia_salud — detalle de un registro VS por idReg
43
+ *
44
+ * @param server - Instancia del servidor MCP.
45
+ * @param client - Cliente Freemática autenticado.
46
+ */
47
+ export declare function registerPrlTools(server: McpServer, client: FreematicaClient): void;
@@ -0,0 +1,242 @@
1
+ import { z } from 'zod';
2
+ import { FreematicaError } from '../clients/base-client.js';
3
+ import { PaginationSchema } from '../schemas/pagination.js';
4
+ import { error, ok, okList } from './helpers.js';
5
+ // ---------------------------------------------------------------------------
6
+ // Tool names
7
+ // ---------------------------------------------------------------------------
8
+ const FICHA_TOOL_NAME = 'freematica_get_ficha_prev_cliente';
9
+ const LIST_VS_TOOL_NAME = 'freematica_list_vigilancia_salud';
10
+ const GET_VS_TOOL_NAME = 'freematica_get_vigilancia_salud';
11
+ // ---------------------------------------------------------------------------
12
+ // Descriptions
13
+ // ---------------------------------------------------------------------------
14
+ const FICHA_DESCRIPTION = [
15
+ 'Devuelve la ficha de Prevención de Riesgos Laborales (PRL) de un cliente.',
16
+ '',
17
+ 'Endpoint: GET /pprl/v2/ficha-prev-cliente',
18
+ '',
19
+ 'Los filtros se envían como query params nativos (NO FIQL). Al menos uno de los',
20
+ 'cuatro identificadores es obligatorio: codCliente, grupoCliente,',
21
+ 'codLocalizacionServicio o codigoFicha. Si se pasan varios se combinan con AND.',
22
+ '',
23
+ 'IMPORTANTE: si no se pasa ningún identificador, la tool devuelve un error de',
24
+ 'validación sin llamar al API.',
25
+ '',
26
+ 'Campos de respuesta principales: COD_CLI, NOMBRE_CLI, COD_GRUPO_CLI,',
27
+ 'COD_LOC_SERV, CODIGO_FICHA, FECHA_ALTA, ESTADO, etc.',
28
+ ].join('\n');
29
+ const LIST_VS_DESCRIPTION = [
30
+ 'Devuelve la lista paginada de registros de Vigilancia de la Salud.',
31
+ '',
32
+ 'Endpoint: GET /pprl/v1/vigilancia-salud',
33
+ '',
34
+ 'Permite filtrar por persona (idRegPersona nativo), empresa (PERVS_EMP),',
35
+ 'delegación (PERVS_DELEG), código de persona (PERVS_PERSO), tipo de revisión',
36
+ '(PERVS_TIPO_REVISION), resultado (PERVS_RESULTADO) y rango de fecha de cita',
37
+ '(PERVS_FCH_CITA). Los filtros FIQL se combinan con AND.',
38
+ '',
39
+ 'Campos principales: PERVS_EMP, PERVS_DELEG, PERVS_PERSO, PERVS_TIPO_REVISION,',
40
+ 'PERVS_RESULTADO, PERVS_FCH_CITA, idReg.',
41
+ ].join('\n');
42
+ const GET_VS_DESCRIPTION = [
43
+ 'Devuelve el detalle completo de un registro de Vigilancia de la Salud.',
44
+ '',
45
+ 'Endpoint: GET /pprl/v1/vigilancia-salud/{idreg}',
46
+ '',
47
+ 'El parámetro `id` DEBE ser el campo `idReg` (string opaco base64) que aparece',
48
+ 'en los items de freematica_list_vigilancia_salud.',
49
+ ].join('\n');
50
+ // ---------------------------------------------------------------------------
51
+ // Schemas (ZodRawShape: plain objects of zod fields, compatible with server.tool)
52
+ // ---------------------------------------------------------------------------
53
+ /**
54
+ * Shape de Zod para freematica_get_ficha_prev_cliente.
55
+ *
56
+ * El MCP SDK requiere un ZodRawShape (objeto plano de esquemas Zod), no un
57
+ * ZodObject ni ZodEffects. La validación "al menos uno requerido" se ejecuta
58
+ * dentro del handler mediante `FichaPrevClienteRefinedSchema.safeParse()`.
59
+ *
60
+ * Campos:
61
+ * - codCliente → query param codCli (string)
62
+ * - grupoCliente → query param grpCli (number, máx. 2 dígitos)
63
+ * - codLocalizacionServicio → query param locServ (number, máx. 5 dígitos)
64
+ * - codigoFicha → query param codigo (string)
65
+ */
66
+ const FichaPrevClienteShape = {
67
+ codCliente: z
68
+ .string()
69
+ .min(1)
70
+ .optional()
71
+ .describe('Código natural del cliente (query param codCli). Opcional: al menos uno requerido.'),
72
+ grupoCliente: z
73
+ .number()
74
+ .int()
75
+ .min(1)
76
+ .max(99)
77
+ .optional()
78
+ .describe('Código de grupo de clientes (query param grpCli, máx. 2 dígitos). Opcional: al menos uno requerido.'),
79
+ codLocalizacionServicio: z
80
+ .number()
81
+ .int()
82
+ .min(1)
83
+ .max(99999)
84
+ .optional()
85
+ .describe('Código de localización de servicio (query param locServ, máx. 5 dígitos). Opcional: al menos uno requerido.'),
86
+ codigoFicha: z
87
+ .string()
88
+ .min(1)
89
+ .optional()
90
+ .describe('Código de ficha PRL (query param codigo). Opcional: al menos uno requerido.'),
91
+ };
92
+ /**
93
+ * Schema Zod con `.refine()` para validar "al menos uno de los 4 identificadores".
94
+ *
95
+ * Se usa en los tests y dentro del handler. NO se pasa directamente a server.tool
96
+ * porque ZodEffects no es ZodRawShapeCompat.
97
+ */
98
+ export const FichaPrevClienteRefinedSchema = z
99
+ .object(FichaPrevClienteShape)
100
+ .refine((v) => v.codCliente !== undefined ||
101
+ v.grupoCliente !== undefined ||
102
+ v.codLocalizacionServicio !== undefined ||
103
+ v.codigoFicha !== undefined, {
104
+ message: 'Se requiere al menos un identificador: codCliente, grupoCliente, codLocalizacionServicio o codigoFicha. ' +
105
+ 'Llamar sin ningún filtro devolvería el dataset completo.',
106
+ });
107
+ /** Schema para freematica_list_vigilancia_salud. */
108
+ const ListVigilanciaSaludShape = {
109
+ ...PaginationSchema,
110
+ idRegPersona: z
111
+ .string()
112
+ .min(1)
113
+ .optional()
114
+ .describe('idReg opaco de la persona (query param nativo del API, no FIQL). Filtra registros de una persona concreta.'),
115
+ empresa: z
116
+ .string()
117
+ .min(1)
118
+ .optional()
119
+ .describe('Código de empresa (campo PERVS_EMP en Freemática).'),
120
+ delegacion: z
121
+ .string()
122
+ .min(1)
123
+ .optional()
124
+ .describe('Código de delegación (campo PERVS_DELEG en Freemática).'),
125
+ codPersona: z
126
+ .string()
127
+ .min(1)
128
+ .optional()
129
+ .describe('Código natural de la persona (campo PERVS_PERSO en Freemática).'),
130
+ tipoRevision: z
131
+ .string()
132
+ .min(1)
133
+ .optional()
134
+ .describe('Tipo de revisión médica (campo PERVS_TIPO_REVISION en Freemática).'),
135
+ resultado: z
136
+ .string()
137
+ .min(1)
138
+ .optional()
139
+ .describe('Resultado de la revisión (campo PERVS_RESULTADO en Freemática).'),
140
+ fechaCitaDesde: z
141
+ .string()
142
+ .regex(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2})?)?$/, 'Debe ser una fecha ISO 8601 (YYYY-MM-DD)')
143
+ .optional()
144
+ .describe('Fecha inicio del rango de cita (campo PERVS_FCH_CITA, ISO 8601, inclusive).'),
145
+ fechaCitaHasta: z
146
+ .string()
147
+ .regex(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2})?)?$/, 'Debe ser una fecha ISO 8601 (YYYY-MM-DD)')
148
+ .optional()
149
+ .describe('Fecha fin del rango de cita (campo PERVS_FCH_CITA, ISO 8601, inclusive).'),
150
+ };
151
+ // ---------------------------------------------------------------------------
152
+ // Register function
153
+ // ---------------------------------------------------------------------------
154
+ /**
155
+ * Registra las tools MCP del dominio PRL (Prevención de Riesgos Laborales).
156
+ *
157
+ * Tools expuestas:
158
+ * 1. freematica_get_ficha_prev_cliente — ficha PRL de un cliente
159
+ * 2. freematica_list_vigilancia_salud — lista paginada de VS con filtros
160
+ * 3. freematica_get_vigilancia_salud — detalle de un registro VS por idReg
161
+ *
162
+ * @param server - Instancia del servidor MCP.
163
+ * @param client - Cliente Freemática autenticado.
164
+ */
165
+ export function registerPrlTools(server, client) {
166
+ // -------------------------------------------------------------------------
167
+ // 1. freematica_get_ficha_prev_cliente
168
+ // -------------------------------------------------------------------------
169
+ server.tool(FICHA_TOOL_NAME, FICHA_DESCRIPTION, FichaPrevClienteShape, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ codCliente, grupoCliente, codLocalizacionServicio, codigoFicha }) => {
170
+ // Validación "al menos uno requerido" — previene llamadas sin filtro que
171
+ // devolverían el dataset completo (potencialmente miles de registros).
172
+ const validation = FichaPrevClienteRefinedSchema.safeParse({
173
+ codCliente,
174
+ grupoCliente,
175
+ codLocalizacionServicio,
176
+ codigoFicha,
177
+ });
178
+ if (!validation.success) {
179
+ const msg = validation.error.errors.map((e) => e.message).join('; ');
180
+ return error(new Error(msg));
181
+ }
182
+ try {
183
+ const result = await client.getFichaPrevCliente({
184
+ codCliente,
185
+ grupoCliente,
186
+ codLocalizacionServicio,
187
+ codigoFicha,
188
+ });
189
+ return okList({ items: result.items, total: result.total });
190
+ }
191
+ catch (err) {
192
+ if (err instanceof FreematicaError)
193
+ return error(err);
194
+ return error(err instanceof Error ? err : new Error(String(err)));
195
+ }
196
+ });
197
+ // -------------------------------------------------------------------------
198
+ // 2. freematica_list_vigilancia_salud
199
+ // -------------------------------------------------------------------------
200
+ server.tool(LIST_VS_TOOL_NAME, LIST_VS_DESCRIPTION, ListVigilanciaSaludShape, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ page, items, idRegPersona, empresa, delegacion, codPersona, tipoRevision, resultado, fechaCitaDesde, fechaCitaHasta, }) => {
201
+ try {
202
+ const result = await client.listVigilanciaSalud({
203
+ page,
204
+ items,
205
+ idRegPersona,
206
+ empresa,
207
+ delegacion,
208
+ codPersona,
209
+ tipoRevision,
210
+ resultado,
211
+ fechaCitaDesde,
212
+ fechaCitaHasta,
213
+ });
214
+ return okList({ items: result.items, total: result.total, page, itemsPerPage: items });
215
+ }
216
+ catch (err) {
217
+ if (err instanceof FreematicaError)
218
+ return error(err);
219
+ return error(err instanceof Error ? err : new Error(String(err)));
220
+ }
221
+ });
222
+ // -------------------------------------------------------------------------
223
+ // 3. freematica_get_vigilancia_salud
224
+ // -------------------------------------------------------------------------
225
+ server.tool(GET_VS_TOOL_NAME, GET_VS_DESCRIPTION, {
226
+ id: z
227
+ .string()
228
+ .min(1)
229
+ .describe('idReg opaco del registro de vigilancia de la salud (campo "idReg" en los items de freematica_list_vigilancia_salud).'),
230
+ }, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ id }) => {
231
+ try {
232
+ const vs = await client.getVigilanciaSalud(id);
233
+ return ok(vs);
234
+ }
235
+ catch (err) {
236
+ if (err instanceof FreematicaError)
237
+ return error(err);
238
+ return error(err instanceof Error ? err : new Error(String(err)));
239
+ }
240
+ });
241
+ }
242
+ //# sourceMappingURL=prl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prl.js","sourceRoot":"","sources":["../../src/tools/prl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { FreematicaClient } from '../clients/freematica-client.js';
3
+ /**
4
+ * Registra las tools de proveedores en el servidor MCP.
5
+ *
6
+ * Tools registradas:
7
+ * - `freematica_list_proveedores`: lista paginada con filtros FIQL (incluye búsqueda parcial por nombre
8
+ * con =lk= y filtro activo/inactivo vía FECHA_BAJA).
9
+ * - `freematica_get_proveedor`: detalle por idReg opaco.
10
+ *
11
+ * @param server - Instancia del servidor MCP.
12
+ * @param client - Cliente Freemática autenticado.
13
+ */
14
+ export declare function registerProveedoresTools(server: McpServer, client: FreematicaClient): void;