@nubiia/mcp-freematica 0.7.0 → 0.9.0

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 (56) hide show
  1. package/README.md +20 -7
  2. package/dist/clients/fiql-builder.d.ts +32 -8
  3. package/dist/clients/fiql-builder.js +42 -14
  4. package/dist/clients/fiql-builder.js.map +1 -1
  5. package/dist/clients/freematica-client.d.ts +165 -34
  6. package/dist/clients/freematica-client.js +355 -96
  7. package/dist/clients/freematica-client.js.map +1 -1
  8. package/dist/schemas/cartera.d.ts +7 -5
  9. package/dist/schemas/cartera.js +13 -11
  10. package/dist/schemas/cartera.js.map +1 -1
  11. package/dist/schemas/clientes.d.ts +164 -0
  12. package/dist/schemas/clientes.js +205 -0
  13. package/dist/schemas/clientes.js.map +1 -0
  14. package/dist/schemas/facturas-ventas.d.ts +20 -16
  15. package/dist/schemas/facturas-ventas.js +36 -32
  16. package/dist/schemas/facturas-ventas.js.map +1 -1
  17. package/dist/schemas/localizaciones.d.ts +90 -0
  18. package/dist/schemas/localizaciones.js +145 -0
  19. package/dist/schemas/localizaciones.js.map +1 -0
  20. package/dist/schemas/pedidos-compras.d.ts +8 -6
  21. package/dist/schemas/pedidos-compras.js +8 -6
  22. package/dist/schemas/pedidos-compras.js.map +1 -1
  23. package/dist/server-instructions.js +43 -0
  24. package/dist/server-instructions.js.map +1 -1
  25. package/dist/server.js +5 -3
  26. package/dist/server.js.map +1 -1
  27. package/dist/tools/articulos.d.ts +14 -0
  28. package/dist/tools/articulos.js +183 -0
  29. package/dist/tools/articulos.js.map +1 -0
  30. package/dist/tools/cartera.js +2 -2
  31. package/dist/tools/cartera.js.map +1 -1
  32. package/dist/tools/clientes.d.ts +2 -1
  33. package/dist/tools/clientes.js +63 -2
  34. package/dist/tools/clientes.js.map +1 -1
  35. package/dist/tools/contabilidad.js +7 -7
  36. package/dist/tools/contabilidad.js.map +1 -1
  37. package/dist/tools/contactos-clientes.d.ts +2 -1
  38. package/dist/tools/contactos-clientes.js +58 -4
  39. package/dist/tools/contactos-clientes.js.map +1 -1
  40. package/dist/tools/contratos/cabecera.d.ts +2 -3
  41. package/dist/tools/contratos/cabecera.js.map +1 -1
  42. package/dist/tools/facturas-ventas.js +12 -12
  43. package/dist/tools/facturas-ventas.js.map +1 -1
  44. package/dist/tools/helpers.d.ts +4 -0
  45. package/dist/tools/helpers.js.map +1 -1
  46. package/dist/tools/localizaciones.d.ts +3 -2
  47. package/dist/tools/localizaciones.js +151 -13
  48. package/dist/tools/localizaciones.js.map +1 -1
  49. package/dist/tools/personal.js +13 -17
  50. package/dist/tools/personal.js.map +1 -1
  51. package/dist/tools/prl.js +15 -49
  52. package/dist/tools/prl.js.map +1 -1
  53. package/dist/tools/proveedores.d.ts +2 -2
  54. package/dist/tools/proveedores.js +8 -6
  55. package/dist/tools/proveedores.js.map +1 -1
  56. package/package.json +1 -1
@@ -0,0 +1,145 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Zod schemas (raw shapes) y builders de body para las tools de escritura de
4
+ * Localizaciones de Clientes (módulo pgrl, v2): cobro, envío, factura y
5
+ * servicio.
6
+ *
7
+ * Los cuatro tipos comparten la mayoría de campos (dirección, teléfonos,
8
+ * email, contacto) pero cada uno usa nombres de columna distintos para el
9
+ * código, el nombre, el domicilio y el contacto. `LOC_FIELD_MAP` centraliza
10
+ * ese mapeo.
11
+ */
12
+ /** Añade `target[key] = value` solo si value !== undefined. */
13
+ function setIf(target, key, value) {
14
+ if (value !== undefined)
15
+ target[key] = value;
16
+ }
17
+ export const LOC_TIPOS = ['cobro', 'envio', 'factura', 'servicio'];
18
+ export const LOC_FIELD_MAP = {
19
+ cobro: {
20
+ codField: 'LOC_CLI_COB',
21
+ nombreField: 'NOM_LOC_COB',
22
+ domicilioField: 'DOMICILIO',
23
+ contactoField: 'COB_CONTACTO',
24
+ nombreRequerido: true,
25
+ path: '/pgrl/v2/localizaciones-cobro-clientes',
26
+ getPath: '/pgrl/v2/localizaciones-cobro-clientes',
27
+ toolSuffix: 'cobro',
28
+ },
29
+ envio: {
30
+ codField: 'LOC_CLI_ENV',
31
+ nombreField: 'NOM_LOC_ENV',
32
+ domicilioField: 'DOMICILIO_ENVIO',
33
+ contactoField: 'ENV_CONTACTO',
34
+ nombreRequerido: false,
35
+ path: '/pgrl/v2/localizaciones-envio-clientes',
36
+ getPath: '/pgrl/v2/localizaciones-envio-clientes',
37
+ toolSuffix: 'envio',
38
+ },
39
+ factura: {
40
+ codField: 'LOC_CLI_FAC',
41
+ nombreField: 'NOM_LOC_FAC',
42
+ domicilioField: 'DOMICILIO',
43
+ contactoField: 'FAC_CONTACTO',
44
+ nombreRequerido: true,
45
+ path: '/pgrl/v2/localizaciones-factura-clientes',
46
+ // El GET singular v2 no existe para factura; se usa el v1 (mismas columnas).
47
+ getPath: '/pgrl/v1/localizaciones-factura-clientes',
48
+ toolSuffix: 'factura',
49
+ },
50
+ servicio: {
51
+ codField: 'LOC_CLI_SERV',
52
+ nombreField: 'DESCRIPCION',
53
+ domicilioField: 'DOMICILIO',
54
+ contactoField: 'CONTACTO',
55
+ nombreRequerido: true,
56
+ path: '/pgrl/v2/localizaciones-servicio-clientes',
57
+ getPath: '/pgrl/v2/localizaciones-servicio-clientes',
58
+ toolSuffix: 'servicio',
59
+ },
60
+ };
61
+ const localizacionOptionalFieldsShape = {
62
+ codPais: z.number().int().optional().describe('Código de país (COD_PAIS).'),
63
+ codProvincia: z.string().max(5).optional().describe('Código de provincia (COD_PROVINCIA, 5c).'),
64
+ codPoblacion: z.string().max(40).optional().describe('Código de población (COD_POBLACION, 40c).'),
65
+ codPostal: z.string().max(10).optional().describe('Código postal (COD_POSTAL, 10c).'),
66
+ domicilio: z
67
+ .string()
68
+ .max(100)
69
+ .optional()
70
+ .describe('Domicilio (DOMICILIO / DOMICILIO_ENVIO según el tipo).'),
71
+ email: z.string().max(100).optional().describe('Correo electrónico (E_MAIL, 100c).'),
72
+ telefono1: z.string().max(15).optional().describe('Teléfono 1 (TELEFONO1, 15c).'),
73
+ telefono2: z.string().max(15).optional().describe('Teléfono 2 (TELEFONO2, 15c).'),
74
+ contacto: z
75
+ .string()
76
+ .max(40)
77
+ .optional()
78
+ .describe('Persona de contacto (COB_CONTACTO / ENV_CONTACTO / FAC_CONTACTO / CONTACTO según el tipo).'),
79
+ camposAdicionales: z
80
+ .record(z.string().regex(/^[A-Z][A-Z0-9_]*$/, 'Las claves deben ser columnas Freemática (MAYUSCULAS_CON_GUION_BAJO)'), z.union([z.string(), z.number()]))
81
+ .optional()
82
+ .describe('Campos nativos adicionales del Vo del tipo (ej: cobro → CMCC_IBAN, COD_BANCO; servicio → COD_ZONA, LATITUD_LONGITUD, CMCS_COD_DLG). Ver spec OpenAPI.'),
83
+ };
84
+ /**
85
+ * Shape del alta de localización. `formaPago` solo lo exige el API en el tipo
86
+ * `cobro`; para el resto es ignorable (se valida en el handler).
87
+ */
88
+ export const CreateLocalizacionClienteShape = {
89
+ tipo: z
90
+ .enum(['cobro', 'envio', 'factura', 'servicio'])
91
+ .describe('Tipo de localización: cobro, envio, factura o servicio (instalación).'),
92
+ grupoCliente: z.number().int().describe('Código de grupo de cliente (COD_GRUPO_CLI). Requerido.'),
93
+ codCliente: z.string().max(10).describe('Código de cliente (COD_CLI, 10c). Requerido.'),
94
+ codLocalizacion: z
95
+ .number()
96
+ .int()
97
+ .describe('Código de la localización (LOC_CLI_COB/ENV/FAC/SERV según el tipo). Requerido.'),
98
+ nombre: z
99
+ .string()
100
+ .max(80)
101
+ .optional()
102
+ .describe('Denominación (NOM_LOC_COB / NOM_LOC_ENV / NOM_LOC_FAC / DESCRIPCION). Requerido por el API en cobro, factura y servicio.'),
103
+ formaPago: z
104
+ .string()
105
+ .max(3)
106
+ .optional()
107
+ .describe('Código de forma de pago (COD_FORMA_PAGO). Requerido por el API SOLO en tipo cobro.'),
108
+ ...localizacionOptionalFieldsShape,
109
+ };
110
+ export const UpdateLocalizacionClienteShape = {
111
+ tipo: z
112
+ .enum(['cobro', 'envio', 'factura', 'servicio'])
113
+ .describe('Tipo de localización: cobro, envio, factura o servicio.'),
114
+ idReg: z
115
+ .string()
116
+ .min(1)
117
+ .describe('idReg opaco de la localización (campo "idReg" en la list tool del tipo).'),
118
+ nombre: z.string().max(80).optional().describe('Nueva denominación.'),
119
+ formaPago: z.string().max(3).optional().describe('Código de forma de pago (solo tipo cobro).'),
120
+ ...localizacionOptionalFieldsShape,
121
+ };
122
+ /** Construye el body del Vo de localización correspondiente al tipo. */
123
+ export function buildLocalizacionClienteBody(tipo, args) {
124
+ const map = LOC_FIELD_MAP[tipo];
125
+ const body = {};
126
+ setIf(body, 'COD_GRUPO_CLI', args.grupoCliente);
127
+ setIf(body, 'COD_CLI', args.codCliente);
128
+ setIf(body, map.codField, args.codLocalizacion);
129
+ setIf(body, map.nombreField, args.nombre);
130
+ if (tipo === 'cobro')
131
+ setIf(body, 'COD_FORMA_PAGO', args.formaPago);
132
+ setIf(body, 'COD_PAIS', args.codPais);
133
+ setIf(body, 'COD_PROVINCIA', args.codProvincia);
134
+ setIf(body, 'COD_POBLACION', args.codPoblacion);
135
+ setIf(body, 'COD_POSTAL', args.codPostal);
136
+ setIf(body, map.domicilioField, args.domicilio);
137
+ setIf(body, 'E_MAIL', args.email);
138
+ setIf(body, 'TELEFONO1', args.telefono1);
139
+ setIf(body, 'TELEFONO2', args.telefono2);
140
+ setIf(body, map.contactoField, args.contacto);
141
+ if (args.camposAdicionales)
142
+ Object.assign(body, args.camposAdicionales);
143
+ return body;
144
+ }
145
+ //# sourceMappingURL=localizaciones.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localizaciones.js","sourceRoot":"","sources":["../../src/schemas/localizaciones.ts"],"names":[],"mappings":"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"}
@@ -20,12 +20,14 @@ import { z } from 'zod';
20
20
  * - recibido=true → `ALCC_PED_RECIB!=''` (campo tiene valor → recibido)
21
21
  * - pendiente → ambos campos vacíos
22
22
  *
23
- * Esta convención NO ha sido verificada contra la API real de Freemática.
24
- * Si en pruebas funcionales el filtro no actúa correctamente, puede que el
25
- * centinela sea el literal `null` (como en CARCL_FECIMPAG), un valor 'S'/'N'
26
- * o un valor numérico '1'/'0'. Documentado para futura verificación empírica.
27
- *
28
- * TODO(TD-152): verificar contra API real cuando esté disponible.
23
+ * Verificación parcial contra la API real (v0.9.0): estado=bloqueado devuelve
24
+ * 7059/33545 pedidos (subconjunto real) y estado=pendiente devuelve 0 en esta
25
+ * organización la convención `!=''`/`==''` funciona sobre columnas de texto.
26
+ * AVISO: NO usar el literal `null` como centinela alternativo — está
27
+ * desacreditado empíricamente en v0.9.0 (`==null` devuelve 0 resultados
28
+ * silenciosamente y `=='null'` responde 500; ver CARCL_FECIMPAG y FECHA_BAJA
29
+ * de proveedores, que migraron a rangos de fecha). Sobre columnas de FECHA la
30
+ * comparación con `''` tampoco funciona (devuelve 0).
29
31
  */
30
32
  export declare const EstadoPedidoEnum: z.ZodEnum<{
31
33
  pendiente: "pendiente";
@@ -21,12 +21,14 @@ import { PaginationSchema } from './pagination.js';
21
21
  * - recibido=true → `ALCC_PED_RECIB!=''` (campo tiene valor → recibido)
22
22
  * - pendiente → ambos campos vacíos
23
23
  *
24
- * Esta convención NO ha sido verificada contra la API real de Freemática.
25
- * Si en pruebas funcionales el filtro no actúa correctamente, puede que el
26
- * centinela sea el literal `null` (como en CARCL_FECIMPAG), un valor 'S'/'N'
27
- * o un valor numérico '1'/'0'. Documentado para futura verificación empírica.
28
- *
29
- * TODO(TD-152): verificar contra API real cuando esté disponible.
24
+ * Verificación parcial contra la API real (v0.9.0): estado=bloqueado devuelve
25
+ * 7059/33545 pedidos (subconjunto real) y estado=pendiente devuelve 0 en esta
26
+ * organización la convención `!=''`/`==''` funciona sobre columnas de texto.
27
+ * AVISO: NO usar el literal `null` como centinela alternativo — está
28
+ * desacreditado empíricamente en v0.9.0 (`==null` devuelve 0 resultados
29
+ * silenciosamente y `=='null'` responde 500; ver CARCL_FECIMPAG y FECHA_BAJA
30
+ * de proveedores, que migraron a rangos de fecha). Sobre columnas de FECHA la
31
+ * comparación con `''` tampoco funciona (devuelve 0).
30
32
  */
31
33
  export const EstadoPedidoEnum = z.enum(['pendiente', 'bloqueado', 'recibido']);
32
34
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"pedidos-compras.js","sourceRoot":"","sources":["../../src/schemas/pedidos-compras.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pedidos-compras.js","sourceRoot":"","sources":["../../src/schemas/pedidos-compras.ts"],"names":[],"mappings":"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"}
@@ -5,10 +5,29 @@ Este servidor expone operaciones del API REST de Freemática como tools MCP.
5
5
 
6
6
  ## Tools destacadas (lista parcial; el resto se descubren vía tools/list)
7
7
 
8
+ ### Artículos — catálogo de inventario (3)
9
+
10
+ - **freematica_list_articulos(page, items, filtros?)** — Catálogo completo de
11
+ artículos/materiales/consumibles con referencias. Filtros (EXACTOS, sin
12
+ búsqueda parcial): codArticulo, tipoCodigo, codProveedor, linea, familia,
13
+ subfamilia, descripcion, codigoBarras, activo. Cada item incluye \`idReg\`.
14
+ - **freematica_get_articulo(id)** — Detalle de un artículo. \`id\` = \`idReg\`.
15
+ - **freematica_get_precio_articulo(id)** — Precios de venta (PRECIO_VENTA,
16
+ DESCUENTO, FACTURABLE). \`id\` = \`idReg\` de list_articulos.
17
+
8
18
  ### Materiales (1)
9
19
 
10
20
  - **freematica_list_materiales_asignados_servicios** — Lista de material
11
21
  asignado a servicios (sin parámetros). Devuelve { items, count, total }.
22
+ OJO: es material YA asignado a servicios de contratos; para el catálogo de
23
+ referencias/consumibles usa freematica_list_articulos.
24
+
25
+ ### Personal (2)
26
+
27
+ - **freematica_list_personal(page, items, filtros?)** — Lista paginada de
28
+ empleados. Filtros EXACTOS (sin búsqueda parcial): empresa, delegacion,
29
+ codPersona, nombre, apellido, nif, situacion, departamento, seccion.
30
+ - **freematica_get_persona(id)** — Detalle. \`id\` = \`idReg\` de list_personal.
12
31
 
13
32
  ### Datos maestros (1)
14
33
 
@@ -91,6 +110,30 @@ Flujo típico para crear un contrato completo:
91
110
  3. freematica_create_servicio_historico_precios con los precios.
92
111
  4. (opcional) freematica_create_servicio_facturacion_txt.
93
112
 
113
+ ## Clientes, Contactos y Localizaciones — escritura
114
+
115
+ Con FREEMATICA_ENABLE_WRITES=true (no existe borrado):
116
+
117
+ - **freematica_create_cliente** — requeridos: grupoCliente, codCliente,
118
+ nombre, nif, tipoImpuesto, divisa, tipoFacturacion (D/M/Q). El idReg se
119
+ calcula automáticamente.
120
+ - **freematica_update_cliente(idReg, …)** — actualización parcial: la tool
121
+ recupera el cliente y fusiona los cambios antes del PUT.
122
+ - **freematica_create_contacto_cliente** — requeridos: grupoCliente y
123
+ codCliente. Opcionales: nombreApellidos, cargo, telefono, movil, email…
124
+ - **freematica_update_contacto_cliente(idReg, …)** — parcial (fetch+merge).
125
+ - **freematica_create_localizacion_cliente(tipo, …)** — tipo: cobro | envio |
126
+ factura | servicio. formaPago solo se exige en cobro; nombre en todos salvo
127
+ envío. Campos específicos del tipo vía camposAdicionales.
128
+ - **freematica_update_localizacion_cliente(tipo, idReg, …)** — parcial
129
+ (fetch+merge). El idReg sale de la list tool del tipo.
130
+
131
+ Flujo típico cliente nuevo completo:
132
+ 1. freematica_create_cliente
133
+ 2. freematica_create_contacto_cliente
134
+ 3. freematica_create_localizacion_cliente (tipo=servicio, y cobro/factura si aplica)
135
+ 4. freematica_create_contrato + servicios (ver sección Contratos)
136
+
94
137
  ## IDs opacos en endpoints de detalle
95
138
 
96
139
  Las tools \`freematica_get_*\` requieren un \`id\` que es el campo \`idReg\` de los
@@ -1 +1 @@
1
- {"version":3,"file":"server-instructions.js","sourceRoot":"","sources":["../src/server-instructions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4H1C,CAAC,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"server-instructions.js","sourceRoot":"","sources":["../src/server-instructions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuK1C,CAAC,IAAI,EAAE,CAAC"}
package/dist/server.js CHANGED
@@ -2,6 +2,7 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { FREEMATICA_MCP_INSTRUCTIONS } from './server-instructions.js';
3
3
  import { VERSION } from './version.js';
4
4
  import { registerAlbaranesTools } from './tools/albaranes.js';
5
+ import { registerArticulosTools } from './tools/articulos.js';
5
6
  import { registerCalendariosTools } from './tools/calendarios.js';
6
7
  import { registerCarteraTools } from './tools/cartera.js';
7
8
  import { registerClientesTools } from './tools/clientes.js';
@@ -22,21 +23,22 @@ export function createFreematicaServer(opts) {
22
23
  const server = new McpServer({ name: 'freematica-mcp', version: VERSION }, { instructions: FREEMATICA_MCP_INSTRUCTIONS });
23
24
  registerContratosTools(server, opts.client, { enableWrites: opts.enableWrites ?? false });
24
25
  registerMasterDataTools(server, opts.client);
25
- registerClientesTools(server, opts.client);
26
- registerContactosClientesTools(server, opts.client);
26
+ registerClientesTools(server, opts.client, { enableWrites: opts.enableWrites ?? false });
27
+ registerContactosClientesTools(server, opts.client, { enableWrites: opts.enableWrites ?? false });
27
28
  registerOportunidadesNegocioTools(server, opts.client);
28
29
  registerCarteraTools(server, opts.client);
29
30
  registerFacturasVentasTools(server, opts.client);
30
31
  registerFacturasComprasTools(server, opts.client);
31
32
  registerPedidosComprasTools(server, opts.client);
32
33
  registerProveedoresTools(server, opts.client);
33
- registerLocalizacionesTools(server, opts.client);
34
+ registerLocalizacionesTools(server, opts.client, { enableWrites: opts.enableWrites ?? false });
34
35
  registerContabilidadTools(server, opts.client);
35
36
  registerPrlTools(server, opts.client);
36
37
  registerPersonalTools(server, opts.client);
37
38
  registerCalendariosTools(server, opts.client);
38
39
  registerFacturasElectronicasTools(server, opts.client);
39
40
  registerAlbaranesTools(server, opts.client);
41
+ registerArticulosTools(server, opts.client);
40
42
  return server;
41
43
  }
42
44
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAC;AACrF,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAC;AACrF,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAYlE,MAAM,UAAU,sBAAsB,CAAC,IAAmC;IACxE,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC5C,EAAE,YAAY,EAAE,2BAA2B,EAAE,CAC9C,CAAC;IAEF,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,KAAK,EAAE,CAAC,CAAC;IAC1F,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7C,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,8BAA8B,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACpD,iCAAiC,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACvD,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,2BAA2B,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,4BAA4B,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,2BAA2B,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9C,2BAA2B,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/C,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9C,iCAAiC,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACvD,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAE5C,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.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 MCP del dominio Artículos (catálogo de inventario).
5
+ *
6
+ * Tools expuestas:
7
+ * 1. freematica_list_articulos — lista paginada con filtros FIQL
8
+ * 2. freematica_get_articulo — detalle por idReg
9
+ * 3. freematica_get_precio_articulo — precios de venta por idReg
10
+ *
11
+ * @param server - Instancia del servidor MCP.
12
+ * @param client - Cliente Freemática autenticado.
13
+ */
14
+ export declare function registerArticulosTools(server: McpServer, client: FreematicaClient): void;
@@ -0,0 +1,183 @@
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_articulos';
9
+ const GET_TOOL_NAME = 'freematica_get_articulo';
10
+ const PRECIO_TOOL_NAME = 'freematica_get_precio_articulo';
11
+ // ---------------------------------------------------------------------------
12
+ // Descriptions
13
+ // ---------------------------------------------------------------------------
14
+ const LIST_DESCRIPTION = [
15
+ 'Devuelve la lista paginada del catálogo de artículos (materiales, consumibles,',
16
+ 'productos) de Freemática.',
17
+ '',
18
+ 'Endpoint: GET /part/v1/articulos',
19
+ '',
20
+ 'Cada item incluye COD_ARTICULO (referencia), DESC_ART (descripción), COD_PROVEEDOR,',
21
+ 'COD_LIN_ART (línea), COD_FAMILIA, COD_SUBFAM, COD_IVA, CODIGO_BARRAS, FECHA_ALTA,',
22
+ 'FECHA_BAJA/MOTIVO_BAJA (baja del artículo) y el `idReg` opaco para usar en',
23
+ 'freematica_get_articulo y freematica_get_precio_articulo.',
24
+ '',
25
+ 'Los códigos de familia/subfamilia/línea se pueden resolver con',
26
+ 'freematica_get_master_data (catalogs: familias, subfamilias).',
27
+ '',
28
+ 'AVISO: todos los filtros son de coincidencia EXACTA (el API no soporta búsqueda',
29
+ 'parcial en este endpoint). COD_ARTICULO puede llevar espacios iniciales que forman',
30
+ 'parte del código (ej. " QQ10615"). Para explorar por texto, filtra por familia o',
31
+ 'proveedor y revisa las descripciones de los resultados.',
32
+ ].join('\n');
33
+ const GET_DESCRIPTION = [
34
+ 'Devuelve el detalle completo de un artículo del catálogo.',
35
+ '',
36
+ 'Endpoint: GET /part/v1/articulos/{idreg}',
37
+ '',
38
+ 'El parámetro `id` DEBE ser el campo `idReg` (string opaco base64) que aparece',
39
+ 'en los items de freematica_list_articulos.',
40
+ ].join('\n');
41
+ const PRECIO_DESCRIPTION = [
42
+ 'Devuelve los precios de venta de un artículo: PRECIO_VENTA, DESCUENTO y FACTURABLE.',
43
+ '',
44
+ 'Endpoint: GET /pgrl/v1/precio-articulo/{idreg}',
45
+ '',
46
+ 'El parámetro `id` DEBE ser el campo `idReg` (string opaco base64) que aparece',
47
+ 'en los items de freematica_list_articulos (el mismo que usa freematica_get_articulo).',
48
+ ].join('\n');
49
+ // ---------------------------------------------------------------------------
50
+ // Schemas
51
+ // ---------------------------------------------------------------------------
52
+ /** Schema para freematica_list_articulos. */
53
+ const ListArticulosSchema = {
54
+ ...PaginationSchema,
55
+ codArticulo: z
56
+ .string()
57
+ .min(1)
58
+ .optional()
59
+ .describe('Referencia del artículo (COD_ARTICULO). Coincidencia EXACTA — respeta los ' +
60
+ 'espacios iniciales del código si los tiene (ej. " QQ10615").'),
61
+ tipoCodigo: z
62
+ .string()
63
+ .min(1)
64
+ .optional()
65
+ .describe('Tipo de código del artículo (TIPO_CODIGO, ej. "NC").'),
66
+ codProveedor: z
67
+ .string()
68
+ .min(1)
69
+ .optional()
70
+ .describe('Código del proveedor habitual (COD_PROVEEDOR).'),
71
+ linea: z
72
+ .string()
73
+ .min(1)
74
+ .optional()
75
+ .describe('Código de línea de inventario (COD_LIN_ART).'),
76
+ familia: z
77
+ .string()
78
+ .min(1)
79
+ .optional()
80
+ .describe('Código de familia (COD_FAMILIA). Ver freematica_get_master_data catalog=familias.'),
81
+ subfamilia: z
82
+ .string()
83
+ .min(1)
84
+ .optional()
85
+ .describe('Código de subfamilia (COD_SUBFAM). Ver freematica_get_master_data catalog=subfamilias.'),
86
+ descripcion: z
87
+ .string()
88
+ .min(1)
89
+ .optional()
90
+ .describe('Descripción del artículo (DESC_ART). Coincidencia EXACTA con la descripción ' +
91
+ 'completa — no soporta búsqueda parcial.'),
92
+ codigoBarras: z
93
+ .string()
94
+ .min(1)
95
+ .optional()
96
+ .describe('Código de barras (CODIGO_BARRAS). Coincidencia exacta.'),
97
+ activo: z
98
+ .boolean()
99
+ .optional()
100
+ .describe('true = artículos sin motivo de baja (MOTIVO_BAJA vacío); false = artículos ' +
101
+ 'dados de baja. Si se omite, devuelve todos.'),
102
+ };
103
+ // ---------------------------------------------------------------------------
104
+ // Register function
105
+ // ---------------------------------------------------------------------------
106
+ /**
107
+ * Registra las tools MCP del dominio Artículos (catálogo de inventario).
108
+ *
109
+ * Tools expuestas:
110
+ * 1. freematica_list_articulos — lista paginada con filtros FIQL
111
+ * 2. freematica_get_articulo — detalle por idReg
112
+ * 3. freematica_get_precio_articulo — precios de venta por idReg
113
+ *
114
+ * @param server - Instancia del servidor MCP.
115
+ * @param client - Cliente Freemática autenticado.
116
+ */
117
+ export function registerArticulosTools(server, client) {
118
+ // -------------------------------------------------------------------------
119
+ // 1. freematica_list_articulos
120
+ // -------------------------------------------------------------------------
121
+ server.tool(LIST_TOOL_NAME, LIST_DESCRIPTION, ListArticulosSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ page, items, codArticulo, tipoCodigo, codProveedor, linea, familia, subfamilia, descripcion, codigoBarras, activo, }) => {
122
+ try {
123
+ const result = await client.listArticulos({
124
+ page,
125
+ items,
126
+ codArticulo,
127
+ tipoCodigo,
128
+ codProveedor,
129
+ linea,
130
+ familia,
131
+ subfamilia,
132
+ descripcion,
133
+ codigoBarras,
134
+ activo,
135
+ });
136
+ return okList({ items: result.items, total: result.total, page, itemsPerPage: items });
137
+ }
138
+ catch (err) {
139
+ if (err instanceof FreematicaError)
140
+ return error(err);
141
+ return error(err instanceof Error ? err : new Error(String(err)));
142
+ }
143
+ });
144
+ // -------------------------------------------------------------------------
145
+ // 2. freematica_get_articulo
146
+ // -------------------------------------------------------------------------
147
+ server.tool(GET_TOOL_NAME, GET_DESCRIPTION, {
148
+ id: z
149
+ .string()
150
+ .min(1)
151
+ .describe('idReg opaco del artículo (campo "idReg" en los items de freematica_list_articulos).'),
152
+ }, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ id }) => {
153
+ try {
154
+ const articulo = await client.getArticulo(id);
155
+ return ok(articulo);
156
+ }
157
+ catch (err) {
158
+ if (err instanceof FreematicaError)
159
+ return error(err);
160
+ return error(err instanceof Error ? err : new Error(String(err)));
161
+ }
162
+ });
163
+ // -------------------------------------------------------------------------
164
+ // 3. freematica_get_precio_articulo
165
+ // -------------------------------------------------------------------------
166
+ server.tool(PRECIO_TOOL_NAME, PRECIO_DESCRIPTION, {
167
+ id: z
168
+ .string()
169
+ .min(1)
170
+ .describe('idReg opaco del artículo (campo "idReg" en los items de freematica_list_articulos).'),
171
+ }, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ id }) => {
172
+ try {
173
+ const precios = await client.getPrecioArticulo(id);
174
+ return ok(precios);
175
+ }
176
+ catch (err) {
177
+ if (err instanceof FreematicaError)
178
+ return error(err);
179
+ return error(err instanceof Error ? err : new Error(String(err)));
180
+ }
181
+ });
182
+ }
183
+ //# sourceMappingURL=articulos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"articulos.js","sourceRoot":"","sources":["../../src/tools/articulos.ts"],"names":[],"mappings":"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"}
@@ -16,8 +16,8 @@ const LIST_DESCRIPTION = [
16
16
  '',
17
17
  'Filtros disponibles:',
18
18
  '- empresa, codCliente, grupoCliente, representante, formaPago, modoPago',
19
- '- fechaDocDesde/Hasta (rango de fecha del documento)',
20
- '- fechaVencimientoDesde/Hasta (rango de vencimiento)',
19
+ '- fechaDocDesde O fechaDocHasta (excluyentes: el API no soporta ambos a la vez)',
20
+ '- fechaVencimientoDesde (no existe fecha fin: el API la ignora)',
21
21
  '- estado: "pendiente" | "cancelado" | "derivado"',
22
22
  '- soloImpagados: true → solo documentos con impago registrado (CARCL_FECIMPAG no nulo)',
23
23
  '- referencia: referencia exacta del documento (CARCL_REFCAR)',
@@ -1 +1 @@
1
- {"version":3,"file":"cartera.js","sourceRoot":"","sources":["../../src/tools/cartera.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cartera.js","sourceRoot":"","sources":["../../src/tools/cartera.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import type { FreematicaClient } from '../clients/freematica-client.js';
3
- export declare function registerClientesTools(server: McpServer, client: FreematicaClient): void;
3
+ import { type RegisterOptions } from './helpers.js';
4
+ export declare function registerClientesTools(server: McpServer, client: FreematicaClient, opts?: RegisterOptions): void;