@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.
- package/LICENSE +21 -0
- package/README.md +485 -0
- package/dist/clients/base-client.d.ts +31 -0
- package/dist/clients/base-client.js +102 -0
- package/dist/clients/base-client.js.map +1 -0
- package/dist/clients/fiql-builder.d.ts +118 -0
- package/dist/clients/fiql-builder.js +257 -0
- package/dist/clients/fiql-builder.js.map +1 -0
- package/dist/clients/freematica-client.d.ts +659 -0
- package/dist/clients/freematica-client.js +1327 -0
- package/dist/clients/freematica-client.js.map +1 -0
- package/dist/clients/hardened-base-client.d.ts +143 -0
- package/dist/clients/hardened-base-client.js +366 -0
- package/dist/clients/hardened-base-client.js.map +1 -0
- package/dist/config.d.ts +104 -0
- package/dist/config.js +105 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +71 -0
- package/dist/logger.js +114 -0
- package/dist/logger.js.map +1 -0
- package/dist/schemas/albaranes.d.ts +124 -0
- package/dist/schemas/albaranes.js +250 -0
- package/dist/schemas/albaranes.js.map +1 -0
- package/dist/schemas/cartera.d.ts +70 -0
- package/dist/schemas/cartera.js +104 -0
- package/dist/schemas/cartera.js.map +1 -0
- package/dist/schemas/contratos.d.ts +7 -0
- package/dist/schemas/contratos.js +2 -0
- package/dist/schemas/contratos.js.map +1 -0
- package/dist/schemas/facturas-electronicas.d.ts +60 -0
- package/dist/schemas/facturas-electronicas.js +79 -0
- package/dist/schemas/facturas-electronicas.js.map +1 -0
- package/dist/schemas/facturas-ventas.d.ts +118 -0
- package/dist/schemas/facturas-ventas.js +153 -0
- package/dist/schemas/facturas-ventas.js.map +1 -0
- package/dist/schemas/filters.d.ts +92 -0
- package/dist/schemas/filters.js +76 -0
- package/dist/schemas/filters.js.map +1 -0
- package/dist/schemas/master-data.d.ts +26 -0
- package/dist/schemas/master-data.js +86 -0
- package/dist/schemas/master-data.js.map +1 -0
- package/dist/schemas/pagination.d.ts +14 -0
- package/dist/schemas/pagination.js +27 -0
- package/dist/schemas/pagination.js.map +1 -0
- package/dist/schemas/pedidos-compras.d.ts +92 -0
- package/dist/schemas/pedidos-compras.js +189 -0
- package/dist/schemas/pedidos-compras.js.map +1 -0
- package/dist/server-instructions.d.ts +1 -0
- package/dist/server-instructions.js +83 -0
- package/dist/server-instructions.js.map +1 -0
- package/dist/server.d.ts +6 -0
- package/dist/server.js +41 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/albaranes.d.ts +16 -0
- package/dist/tools/albaranes.js +202 -0
- package/dist/tools/albaranes.js.map +1 -0
- package/dist/tools/calendarios.d.ts +13 -0
- package/dist/tools/calendarios.js +82 -0
- package/dist/tools/calendarios.js.map +1 -0
- package/dist/tools/cartera.d.ts +13 -0
- package/dist/tools/cartera.js +78 -0
- package/dist/tools/cartera.js.map +1 -0
- package/dist/tools/clientes.d.ts +3 -0
- package/dist/tools/clientes.js +48 -0
- package/dist/tools/clientes.js.map +1 -0
- package/dist/tools/contabilidad.d.ts +14 -0
- package/dist/tools/contabilidad.js +259 -0
- package/dist/tools/contabilidad.js.map +1 -0
- package/dist/tools/contactos-clientes.d.ts +3 -0
- package/dist/tools/contactos-clientes.js +25 -0
- package/dist/tools/contactos-clientes.js.map +1 -0
- package/dist/tools/contratos.d.ts +10 -0
- package/dist/tools/contratos.js +35 -0
- package/dist/tools/contratos.js.map +1 -0
- package/dist/tools/facturas-compras.d.ts +13 -0
- package/dist/tools/facturas-compras.js +131 -0
- package/dist/tools/facturas-compras.js.map +1 -0
- package/dist/tools/facturas-electronicas.d.ts +17 -0
- package/dist/tools/facturas-electronicas.js +268 -0
- package/dist/tools/facturas-electronicas.js.map +1 -0
- package/dist/tools/facturas-ventas.d.ts +16 -0
- package/dist/tools/facturas-ventas.js +181 -0
- package/dist/tools/facturas-ventas.js.map +1 -0
- package/dist/tools/helpers.d.ts +17 -0
- package/dist/tools/helpers.js +36 -0
- package/dist/tools/helpers.js.map +1 -0
- package/dist/tools/localizaciones.d.ts +17 -0
- package/dist/tools/localizaciones.js +192 -0
- package/dist/tools/localizaciones.js.map +1 -0
- package/dist/tools/master-data.d.ts +10 -0
- package/dist/tools/master-data.js +70 -0
- package/dist/tools/master-data.js.map +1 -0
- package/dist/tools/oportunidades-negocio.d.ts +3 -0
- package/dist/tools/oportunidades-negocio.js +68 -0
- package/dist/tools/oportunidades-negocio.js.map +1 -0
- package/dist/tools/pedidos-compras.d.ts +14 -0
- package/dist/tools/pedidos-compras.js +105 -0
- package/dist/tools/pedidos-compras.js.map +1 -0
- package/dist/tools/personal.d.ts +13 -0
- package/dist/tools/personal.js +154 -0
- package/dist/tools/personal.js.map +1 -0
- package/dist/tools/prl.d.ts +47 -0
- package/dist/tools/prl.js +242 -0
- package/dist/tools/prl.js.map +1 -0
- package/dist/tools/proveedores.d.ts +14 -0
- package/dist/tools/proveedores.js +122 -0
- package/dist/tools/proveedores.js.map +1 -0
- package/dist/transports/http.d.ts +12 -0
- package/dist/transports/http.js +110 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/stdio.d.ts +12 -0
- package/dist/transports/stdio.js +15 -0
- package/dist/transports/stdio.js.map +1 -0
- package/dist/types/api-envelope.d.ts +27 -0
- package/dist/types/api-envelope.js +2 -0
- package/dist/types/api-envelope.js.map +1 -0
- package/dist/types/clientes.d.ts +9 -0
- package/dist/types/clientes.js +2 -0
- package/dist/types/clientes.js.map +1 -0
- package/dist/types/contactos-clientes.d.ts +7 -0
- package/dist/types/contactos-clientes.js +2 -0
- package/dist/types/contactos-clientes.js.map +1 -0
- package/dist/types/contratos.d.ts +8 -0
- package/dist/types/contratos.js +2 -0
- package/dist/types/contratos.js.map +1 -0
- package/dist/types/master-data.d.ts +9 -0
- package/dist/types/master-data.js +2 -0
- package/dist/types/master-data.js.map +1 -0
- package/dist/types/oportunidades-negocio.d.ts +8 -0
- package/dist/types/oportunidades-negocio.js +2 -0
- package/dist/types/oportunidades-negocio.js.map +1 -0
- package/dist/utils/size-guardrail.d.ts +22 -0
- package/dist/utils/size-guardrail.js +31 -0
- package/dist/utils/size-guardrail.js.map +1 -0
- package/package.json +90 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { FreematicaError } from '../clients/base-client.js';
|
|
2
|
+
import { error, okList } from './helpers.js';
|
|
3
|
+
const LIST_MATERIALES_TOOL_NAME = 'freematica_list_materiales_asignados_servicios';
|
|
4
|
+
const LIST_MATERIALES_TOOL_DESCRIPTION = [
|
|
5
|
+
'Devuelve la lista completa de material asignado a servicios.',
|
|
6
|
+
'',
|
|
7
|
+
'Endpoint: GET /pvss/v2/contratos-servicios-material (Freemática API).',
|
|
8
|
+
'Tipo de respuesta: VoContratosServMatAsignado[].',
|
|
9
|
+
'',
|
|
10
|
+
'Esta operación no acepta parámetros: siempre devuelve la lista entera para',
|
|
11
|
+
'la organización autenticada. La respuesta es un objeto con dos campos:',
|
|
12
|
+
' - items: array de objetos VoContratosServMatAsignado',
|
|
13
|
+
' - count: número total de elementos',
|
|
14
|
+
].join('\n');
|
|
15
|
+
/**
|
|
16
|
+
* Registers every MCP tool that maps to operations in the "Contratos" API group
|
|
17
|
+
* (Postman: app `pvss` → group `Contratos`).
|
|
18
|
+
*
|
|
19
|
+
* Add new tools here by calling `server.tool(...)` again. When this file grows
|
|
20
|
+
* past ~15 tools, split it into `src/tools/contratos/<entity>.ts`.
|
|
21
|
+
*/
|
|
22
|
+
export function registerContratosTools(server, client) {
|
|
23
|
+
server.tool(LIST_MATERIALES_TOOL_NAME, LIST_MATERIALES_TOOL_DESCRIPTION, {}, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async () => {
|
|
24
|
+
try {
|
|
25
|
+
const { items, total } = await client.getMaterialesAsignadosServicios();
|
|
26
|
+
return okList({ items, total });
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
if (err instanceof FreematicaError)
|
|
30
|
+
return error(err);
|
|
31
|
+
return error(err instanceof Error ? err : new Error(String(err)));
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=contratos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contratos.js","sourceRoot":"","sources":["../../src/tools/contratos.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,yBAAyB,GAAG,gDAAgD,CAAC;AAEnF,MAAM,gCAAgC,GAAG;IACvC,8DAA8D;IAC9D,EAAE;IACF,uEAAuE;IACvE,kDAAkD;IAClD,EAAE;IACF,4EAA4E;IAC5E,wEAAwE;IACxE,wDAAwD;IACxD,sCAAsC;CACvC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,MAAwB;IAChF,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,gCAAgC,EAChC,EAAE,EACF,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,EACnE,KAAK,IAA6B,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,EAAE,CAAC;YACxE,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAmB,CAAC;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,eAAe;gBAAE,OAAO,KAAK,CAAC,GAAG,CAAmB,CAAC;YACxE,OAAO,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAmB,CAAC;QACtF,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -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 de facturas de compras en el servidor MCP.
|
|
5
|
+
*
|
|
6
|
+
* Tools registradas:
|
|
7
|
+
* - `freematica_list_facturas_compras`: lista paginada con filtros FIQL + exportado nativo.
|
|
8
|
+
* - `freematica_get_factura_compra`: detalle por idReg opaco.
|
|
9
|
+
*
|
|
10
|
+
* @param server - Instancia del servidor MCP.
|
|
11
|
+
* @param client - Cliente Freemática autenticado.
|
|
12
|
+
*/
|
|
13
|
+
export declare function registerFacturasComprasTools(server: McpServer, client: FreematicaClient): void;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { FreematicaError } from '../clients/base-client.js';
|
|
3
|
+
import { PaginationSchema } from '../schemas/pagination.js';
|
|
4
|
+
import { DateRangeSchema } from '../schemas/filters.js';
|
|
5
|
+
import { error, ok, okList } from './helpers.js';
|
|
6
|
+
const LIST_TOOL_NAME = 'freematica_list_facturas_compras';
|
|
7
|
+
const GET_TOOL_NAME = 'freematica_get_factura_compra';
|
|
8
|
+
const LIST_DESCRIPTION = [
|
|
9
|
+
'Devuelve la lista paginada de facturas de compras de Freemática.',
|
|
10
|
+
'',
|
|
11
|
+
'Cada item contiene campos como FCC_CODEMP (empresa), FCC_CODPRO (proveedor), FCC_FCHFAC (fecha factura),',
|
|
12
|
+
'FCC_SERIEFRA (serie), FCC_NUMFRA (número), FCC_FPAGO (forma de pago), FCC_TRASP_CONTAB (traspasado contabilidad),',
|
|
13
|
+
'FCC_DELEG (delegación), FCC_LIN_NEGOCIO (línea negocio), más `idReg` opaco para el endpoint singular.',
|
|
14
|
+
'',
|
|
15
|
+
'Paginación 1-indexed. Los filtros de fecha aplican sobre la fecha de la factura (FCC_FCHFAC).',
|
|
16
|
+
'',
|
|
17
|
+
'El parámetro `exportado` acepta exactamente: "all" (todas) | "not_exported" (no exportadas).',
|
|
18
|
+
'Se envía como query param nativo, no como FIQL.',
|
|
19
|
+
].join('\n');
|
|
20
|
+
const GET_DESCRIPTION = [
|
|
21
|
+
'Devuelve el detalle completo de una factura de compra.',
|
|
22
|
+
'',
|
|
23
|
+
'El parámetro `id` DEBE ser el campo `idReg` (string opaco base64) que aparece en los items de',
|
|
24
|
+
'freematica_list_facturas_compras. NO usar FCC_NUMFRA ni otro código natural.',
|
|
25
|
+
].join('\n');
|
|
26
|
+
/**
|
|
27
|
+
* Enum nativo del endpoint de facturas de compras para el filtro de exportación.
|
|
28
|
+
*
|
|
29
|
+
* - `all`: todas las facturas independientemente de si han sido exportadas.
|
|
30
|
+
* - `not_exported`: sólo facturas que aún no han sido exportadas.
|
|
31
|
+
*/
|
|
32
|
+
const ExportadoEnum = z.enum(['all', 'not_exported']).optional().describe('Filtro de exportación. Valores: "all" (todas) | "not_exported" (no exportadas). ' +
|
|
33
|
+
'Se envía como query param nativo, no FIQL.');
|
|
34
|
+
const LIST_SCHEMA = {
|
|
35
|
+
...PaginationSchema,
|
|
36
|
+
...DateRangeSchema.shape,
|
|
37
|
+
empresa: z
|
|
38
|
+
.string()
|
|
39
|
+
.min(1)
|
|
40
|
+
.optional()
|
|
41
|
+
.describe('Código de empresa (FCC_CODEMP en Freemática).'),
|
|
42
|
+
codProveedor: z
|
|
43
|
+
.string()
|
|
44
|
+
.min(1)
|
|
45
|
+
.optional()
|
|
46
|
+
.describe('Código natural del proveedor (FCC_CODPRO en Freemática).'),
|
|
47
|
+
serie: z
|
|
48
|
+
.string()
|
|
49
|
+
.min(1)
|
|
50
|
+
.optional()
|
|
51
|
+
.describe('Serie de la factura (FCC_SERIEFRA en Freemática).'),
|
|
52
|
+
numFactura: z
|
|
53
|
+
.string()
|
|
54
|
+
.min(1)
|
|
55
|
+
.optional()
|
|
56
|
+
.describe('Número de factura (FCC_NUMFRA en Freemática).'),
|
|
57
|
+
formaPago: z
|
|
58
|
+
.string()
|
|
59
|
+
.min(1)
|
|
60
|
+
.optional()
|
|
61
|
+
.describe('Código de forma de pago (FCC_FPAGO en Freemática).'),
|
|
62
|
+
traspasadoContabilidad: z
|
|
63
|
+
.boolean()
|
|
64
|
+
.optional()
|
|
65
|
+
.describe('Filtra facturas traspasadas a contabilidad (FCC_TRASP_CONTAB en Freemática).'),
|
|
66
|
+
delegacion: z
|
|
67
|
+
.string()
|
|
68
|
+
.min(1)
|
|
69
|
+
.optional()
|
|
70
|
+
.describe('Código de delegación (FCC_DELEG en Freemática).'),
|
|
71
|
+
lineaNegocio: z
|
|
72
|
+
.string()
|
|
73
|
+
.min(1)
|
|
74
|
+
.optional()
|
|
75
|
+
.describe('Código de línea de negocio (FCC_LIN_NEGOCIO en Freemática).'),
|
|
76
|
+
exportado: ExportadoEnum,
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Registra las tools de facturas de compras en el servidor MCP.
|
|
80
|
+
*
|
|
81
|
+
* Tools registradas:
|
|
82
|
+
* - `freematica_list_facturas_compras`: lista paginada con filtros FIQL + exportado nativo.
|
|
83
|
+
* - `freematica_get_factura_compra`: detalle por idReg opaco.
|
|
84
|
+
*
|
|
85
|
+
* @param server - Instancia del servidor MCP.
|
|
86
|
+
* @param client - Cliente Freemática autenticado.
|
|
87
|
+
*/
|
|
88
|
+
export function registerFacturasComprasTools(server, client) {
|
|
89
|
+
server.tool(LIST_TOOL_NAME, LIST_DESCRIPTION, LIST_SCHEMA, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ page, items, fechaDesde, fechaHasta, empresa, codProveedor, serie, numFactura, formaPago, traspasadoContabilidad, delegacion, lineaNegocio, exportado, }) => {
|
|
90
|
+
try {
|
|
91
|
+
const result = await client.listFacturasCompras({
|
|
92
|
+
page,
|
|
93
|
+
items,
|
|
94
|
+
fechaDesde,
|
|
95
|
+
fechaHasta,
|
|
96
|
+
empresa,
|
|
97
|
+
codProveedor,
|
|
98
|
+
serie,
|
|
99
|
+
numFactura,
|
|
100
|
+
formaPago,
|
|
101
|
+
traspasadoContabilidad,
|
|
102
|
+
delegacion,
|
|
103
|
+
lineaNegocio,
|
|
104
|
+
exportado,
|
|
105
|
+
});
|
|
106
|
+
return okList({ items: result.items, total: result.total, page, itemsPerPage: items });
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
if (err instanceof FreematicaError)
|
|
110
|
+
return error(err);
|
|
111
|
+
return error(err instanceof Error ? err : new Error(String(err)));
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
server.tool(GET_TOOL_NAME, GET_DESCRIPTION, {
|
|
115
|
+
id: z
|
|
116
|
+
.string()
|
|
117
|
+
.min(1)
|
|
118
|
+
.describe('idReg opaco de la factura de compra (campo "idReg" en los items de freematica_list_facturas_compras).'),
|
|
119
|
+
}, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ id }) => {
|
|
120
|
+
try {
|
|
121
|
+
const factura = await client.getFacturaCompra(id);
|
|
122
|
+
return ok(factura);
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
if (err instanceof FreematicaError)
|
|
126
|
+
return error(err);
|
|
127
|
+
return error(err instanceof Error ? err : new Error(String(err)));
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=facturas-compras.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facturas-compras.js","sourceRoot":"","sources":["../../src/tools/facturas-compras.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
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 facturas electrónicas (Facturae/EDICOM/FACe) en el servidor MCP.
|
|
5
|
+
*
|
|
6
|
+
* Tools registradas:
|
|
7
|
+
* - `freematica_list_facturas_electronicas`: lista paginada con filtros nativos (NO FIQL).
|
|
8
|
+
* - `freematica_get_factura_electronica`: detalle por idReg opaco.
|
|
9
|
+
* - `freematica_get_factura_documento`: documento binario en base64 con size guardrail.
|
|
10
|
+
* - `freematica_get_factura_log`: log de auditoría de eventos de una factura.
|
|
11
|
+
* - `freematica_get_edicom_info`: configuración de integración EDICOM.
|
|
12
|
+
* - `freematica_list_facturas_documentos`: descarga masiva de documentos con size guardrail.
|
|
13
|
+
*
|
|
14
|
+
* @param server - Instancia del servidor MCP.
|
|
15
|
+
* @param client - Cliente Freemática autenticado.
|
|
16
|
+
*/
|
|
17
|
+
export declare function registerFacturasElectronicasTools(server: McpServer, client: FreematicaClient): void;
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { FreematicaError } from '../clients/base-client.js';
|
|
3
|
+
import { PaginationSchema } from '../schemas/pagination.js';
|
|
4
|
+
import { ListFacturasElectronicasFiltersSchema, ListFacturasDocumentosFiltersSchema, } from '../schemas/facturas-electronicas.js';
|
|
5
|
+
import { error, ok, okList } from './helpers.js';
|
|
6
|
+
import { loadMaxResponseSizeMb } from '../utils/size-guardrail.js';
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Tool names
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
const LIST_TOOL_NAME = 'freematica_list_facturas_electronicas';
|
|
11
|
+
const GET_TOOL_NAME = 'freematica_get_factura_electronica';
|
|
12
|
+
const DOCUMENTO_TOOL_NAME = 'freematica_get_factura_documento';
|
|
13
|
+
const LOG_TOOL_NAME = 'freematica_get_factura_log';
|
|
14
|
+
const EDICOM_INFO_TOOL_NAME = 'freematica_get_edicom_info';
|
|
15
|
+
const LIST_DOCUMENTOS_TOOL_NAME = 'freematica_list_facturas_documentos';
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Descriptions
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
const LIST_DESCRIPTION = [
|
|
20
|
+
'Devuelve la lista paginada de facturas electrónicas (Facturae firmadas / EDICOM / FACe) de Freemática.',
|
|
21
|
+
'',
|
|
22
|
+
'Diferente de freematica_list_facturas_cabecera: ésta expone las facturas firmadas y enviadas a AAPP/portales.',
|
|
23
|
+
'Los campos de respuesta usan el prefijo FACED_* (factura electrónica). Campos clave:',
|
|
24
|
+
' FACED_CODEMP (empresa), FACED_FCHFAC (fecha), FACED_SERIEFRA (serie), FACED_NUMFRA (número),',
|
|
25
|
+
' FACED_ESTADO / FACED_ESTADO_DESC (estado firma), FACED_LEIDO (flag leído),',
|
|
26
|
+
' COD_CLI (código cliente), NIF, NOMBRE_CLI (nombre), TIENE_DOC_PDF / TIENE_DOC_XML (tiene documentos).',
|
|
27
|
+
'',
|
|
28
|
+
'Todos los filtros son query params nativos (NO FIQL). Paginación 1-indexed.',
|
|
29
|
+
].join('\n');
|
|
30
|
+
const GET_DESCRIPTION = [
|
|
31
|
+
'Devuelve el detalle completo de una factura electrónica (Facturae/EDICOM/FACe).',
|
|
32
|
+
'',
|
|
33
|
+
'El parámetro `id` DEBE ser el campo `idReg` (string opaco base64) que aparece en los items de',
|
|
34
|
+
'freematica_list_facturas_electronicas. NO usar FACED_NUMFRA ni otro código natural.',
|
|
35
|
+
].join('\n');
|
|
36
|
+
const DOCUMENTO_DESCRIPTION = [
|
|
37
|
+
'Devuelve el documento binario (PDF o XML Facturae firmado) de una factura electrónica.',
|
|
38
|
+
'',
|
|
39
|
+
'El documento se devuelve como objeto JSON con los campos de VoFacturasDocumento (FACED_DOCUMENTO_PDF,',
|
|
40
|
+
'FACED_DOCUMENTO_XML, FACED_DOCUMENTO_XML2, etc.) que contienen el contenido codificado en base64.',
|
|
41
|
+
'',
|
|
42
|
+
'Si el tamaño del response supera FREEMATICA_MAX_RESPONSE_SIZE_MB, se devuelve `truncated: true`',
|
|
43
|
+
'con `warning` y `sizeBytes` pero sin el contenido del documento.',
|
|
44
|
+
'',
|
|
45
|
+
'Parámetros opcionales:',
|
|
46
|
+
' - documentType: tipo de documento a recuperar (ej. "PDF", "XML")',
|
|
47
|
+
' - actualizaLeido: si true, marca la factura como leída al recuperar el documento',
|
|
48
|
+
].join('\n');
|
|
49
|
+
const LOG_DESCRIPTION = [
|
|
50
|
+
'Devuelve el log de auditoría de una factura electrónica: envío, recepción, aceptación AAPP, etc.',
|
|
51
|
+
'',
|
|
52
|
+
'El parámetro `id` DEBE ser el campo `idReg` opaco de freematica_list_facturas_electronicas.',
|
|
53
|
+
'Campos de respuesta con prefijo FVCTRLE_*:',
|
|
54
|
+
' FVCTRLE_CODEMP (empresa), FVCTRLE_FCHFRA (fecha factura), FVCTRLE_SERIEFRA (serie),',
|
|
55
|
+
' FVCTRLE_NUMFRA (número), FVCTRLE_FCH_MOV (fecha movimiento), FVCTRLE_CODCLI (cliente).',
|
|
56
|
+
].join('\n');
|
|
57
|
+
const EDICOM_INFO_DESCRIPTION = [
|
|
58
|
+
'Devuelve la configuración de integración con EDICOM (empresa emisora, aplicación, credenciales, URLs).',
|
|
59
|
+
'',
|
|
60
|
+
'Útil para diagnosticar el estado de la integración EDICOM/FACe y verificar la configuración.',
|
|
61
|
+
'Campos de respuesta: EDICOM_COMPANY_ID, EDICOM_APPLICATION, EDICOM_CLIENT_ID, EDICOM_DOMAIN,',
|
|
62
|
+
'EDICOM_SERVER_URL, EDICOM_RAZON_SOCIAL, EDICOM_MESSAGE_FORMAT, entre otros.',
|
|
63
|
+
'',
|
|
64
|
+
'NOTA: incluye campos sensibles (EDICOM_USER, EDICOM_PASSWORD). Usar con precaución.',
|
|
65
|
+
].join('\n');
|
|
66
|
+
const LIST_DOCUMENTOS_DESCRIPTION = [
|
|
67
|
+
'Descarga masiva de documentos de facturas electrónicas (PDF/XML/ERROR).',
|
|
68
|
+
'',
|
|
69
|
+
'Permite recuperar múltiples documentos a la vez filtrando por identificadores y tipo de documento.',
|
|
70
|
+
'Los documentos se devuelven en formato base64 dentro de los campos documentoPdf, documentoXml, etc.',
|
|
71
|
+
'',
|
|
72
|
+
'CUIDADO: este endpoint puede devolver respuestas muy grandes. Si supera FREEMATICA_MAX_RESPONSE_SIZE_MB',
|
|
73
|
+
'los items se truncarán y se añadirá `truncated: true` + `warning` en la respuesta.',
|
|
74
|
+
'',
|
|
75
|
+
'Campos de respuesta (prefijo VoEFraDoc): empresa, fecha, serie, numFra, documentoPdf, documentoXml,',
|
|
76
|
+
'documentoXml2, decError, decError2, documentoError, documentoGuid, documentoFSDir.',
|
|
77
|
+
].join('\n');
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
// Registration
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
/**
|
|
82
|
+
* Registra las tools de facturas electrónicas (Facturae/EDICOM/FACe) en el servidor MCP.
|
|
83
|
+
*
|
|
84
|
+
* Tools registradas:
|
|
85
|
+
* - `freematica_list_facturas_electronicas`: lista paginada con filtros nativos (NO FIQL).
|
|
86
|
+
* - `freematica_get_factura_electronica`: detalle por idReg opaco.
|
|
87
|
+
* - `freematica_get_factura_documento`: documento binario en base64 con size guardrail.
|
|
88
|
+
* - `freematica_get_factura_log`: log de auditoría de eventos de una factura.
|
|
89
|
+
* - `freematica_get_edicom_info`: configuración de integración EDICOM.
|
|
90
|
+
* - `freematica_list_facturas_documentos`: descarga masiva de documentos con size guardrail.
|
|
91
|
+
*
|
|
92
|
+
* @param server - Instancia del servidor MCP.
|
|
93
|
+
* @param client - Cliente Freemática autenticado.
|
|
94
|
+
*/
|
|
95
|
+
export function registerFacturasElectronicasTools(server, client) {
|
|
96
|
+
// -------------------------------------------------------------------------
|
|
97
|
+
// 1. freematica_list_facturas_electronicas
|
|
98
|
+
// -------------------------------------------------------------------------
|
|
99
|
+
server.tool(LIST_TOOL_NAME, LIST_DESCRIPTION, ListFacturasElectronicasFiltersSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ page, items, empresa, codCliente, fechaDesde, fechaHasta, estado, leido, order, }) => {
|
|
100
|
+
try {
|
|
101
|
+
const result = await client.listFacturasElectronicas({
|
|
102
|
+
page,
|
|
103
|
+
items,
|
|
104
|
+
empresa,
|
|
105
|
+
codCliente,
|
|
106
|
+
fechaDesde,
|
|
107
|
+
fechaHasta,
|
|
108
|
+
estado,
|
|
109
|
+
leido,
|
|
110
|
+
order,
|
|
111
|
+
});
|
|
112
|
+
return okList({ items: result.items, total: result.total, page, itemsPerPage: items });
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
if (err instanceof FreematicaError)
|
|
116
|
+
return error(err);
|
|
117
|
+
return error(err instanceof Error ? err : new Error(String(err)));
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
// -------------------------------------------------------------------------
|
|
121
|
+
// 2. freematica_get_factura_electronica
|
|
122
|
+
// -------------------------------------------------------------------------
|
|
123
|
+
server.tool(GET_TOOL_NAME, GET_DESCRIPTION, {
|
|
124
|
+
id: z
|
|
125
|
+
.string()
|
|
126
|
+
.min(1)
|
|
127
|
+
.describe('idReg opaco de la factura electrónica (campo "idReg" en los items de freematica_list_facturas_electronicas).'),
|
|
128
|
+
}, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ id }) => {
|
|
129
|
+
try {
|
|
130
|
+
const factura = await client.getFacturaElectronica(id);
|
|
131
|
+
return ok(factura);
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
if (err instanceof FreematicaError)
|
|
135
|
+
return error(err);
|
|
136
|
+
return error(err instanceof Error ? err : new Error(String(err)));
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
// -------------------------------------------------------------------------
|
|
140
|
+
// 3. freematica_get_factura_documento
|
|
141
|
+
// -------------------------------------------------------------------------
|
|
142
|
+
server.tool(DOCUMENTO_TOOL_NAME, DOCUMENTO_DESCRIPTION, {
|
|
143
|
+
id: z
|
|
144
|
+
.string()
|
|
145
|
+
.min(1)
|
|
146
|
+
.describe('idReg opaco de la factura electrónica (campo "idReg" en freematica_list_facturas_electronicas).'),
|
|
147
|
+
documentType: z
|
|
148
|
+
.string()
|
|
149
|
+
.optional()
|
|
150
|
+
.describe('Tipo de documento a recuperar: "PDF", "XML". Si no se especifica, devuelve el tipo por defecto.'),
|
|
151
|
+
actualizaLeido: z
|
|
152
|
+
.boolean()
|
|
153
|
+
.optional()
|
|
154
|
+
.describe('Si true, marca la factura como leída al recuperar el documento. Por defecto: false.'),
|
|
155
|
+
}, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ id, documentType, actualizaLeido }) => {
|
|
156
|
+
try {
|
|
157
|
+
const result = await client.getFacturaDocumento(id, { documentType, actualizaLeido });
|
|
158
|
+
return ok(result);
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
if (err instanceof FreematicaError)
|
|
162
|
+
return error(err);
|
|
163
|
+
return error(err instanceof Error ? err : new Error(String(err)));
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
// -------------------------------------------------------------------------
|
|
167
|
+
// 4. freematica_get_factura_log
|
|
168
|
+
// -------------------------------------------------------------------------
|
|
169
|
+
server.tool(LOG_TOOL_NAME, LOG_DESCRIPTION, {
|
|
170
|
+
id: z
|
|
171
|
+
.string()
|
|
172
|
+
.min(1)
|
|
173
|
+
.describe('idReg opaco de la factura electrónica (campo "idReg" en freematica_list_facturas_electronicas).'),
|
|
174
|
+
...PaginationSchema,
|
|
175
|
+
}, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ id, page, items }) => {
|
|
176
|
+
try {
|
|
177
|
+
const result = await client.getFacturaLog(id, { page, items });
|
|
178
|
+
return okList({ items: result.items, total: result.total, page, itemsPerPage: items });
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
if (err instanceof FreematicaError)
|
|
182
|
+
return error(err);
|
|
183
|
+
return error(err instanceof Error ? err : new Error(String(err)));
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
// -------------------------------------------------------------------------
|
|
187
|
+
// 5. freematica_get_edicom_info
|
|
188
|
+
// -------------------------------------------------------------------------
|
|
189
|
+
server.tool(EDICOM_INFO_TOOL_NAME, EDICOM_INFO_DESCRIPTION, {
|
|
190
|
+
...PaginationSchema,
|
|
191
|
+
}, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ page, items }) => {
|
|
192
|
+
try {
|
|
193
|
+
const result = await client.getEdicomInfo({ page, items });
|
|
194
|
+
return okList({ items: result.items, total: result.total, page, itemsPerPage: items });
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
if (err instanceof FreematicaError)
|
|
198
|
+
return error(err);
|
|
199
|
+
return error(err instanceof Error ? err : new Error(String(err)));
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
// -------------------------------------------------------------------------
|
|
203
|
+
// 6. freematica_list_facturas_documentos
|
|
204
|
+
// -------------------------------------------------------------------------
|
|
205
|
+
server.tool(LIST_DOCUMENTOS_TOOL_NAME, LIST_DOCUMENTOS_DESCRIPTION, ListFacturasDocumentosFiltersSchema, { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, async ({ documents, documentType }) => {
|
|
206
|
+
try {
|
|
207
|
+
const maxMb = loadMaxResponseSizeMb();
|
|
208
|
+
const maxBytes = maxMb * 1024 * 1024;
|
|
209
|
+
const result = await client.listFacturasDocumentos({ documents, documentType });
|
|
210
|
+
// Size guardrail for bulk document download
|
|
211
|
+
const serialized = JSON.stringify(result.items);
|
|
212
|
+
const sizeBytes = Buffer.byteLength(serialized, 'utf8');
|
|
213
|
+
if (sizeBytes > maxBytes) {
|
|
214
|
+
// Truncate items using binary search
|
|
215
|
+
const truncatedItems = truncateItemsToLimit(result.items, maxBytes);
|
|
216
|
+
return ok({
|
|
217
|
+
items: truncatedItems,
|
|
218
|
+
count: truncatedItems.length,
|
|
219
|
+
total: result.total,
|
|
220
|
+
truncated: true,
|
|
221
|
+
warning: [
|
|
222
|
+
`La respuesta ha sido truncada porque superaba el límite de ${maxMb} MB.`,
|
|
223
|
+
`Items devueltos: ${truncatedItems.length} de ${result.items.length} totales.`,
|
|
224
|
+
`Usa el parámetro "documents" con menos identificadores para obtener datos completos.`,
|
|
225
|
+
].join(' '),
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
return okList({ items: result.items, total: result.total });
|
|
229
|
+
}
|
|
230
|
+
catch (err) {
|
|
231
|
+
if (err instanceof FreematicaError)
|
|
232
|
+
return error(err);
|
|
233
|
+
return error(err instanceof Error ? err : new Error(String(err)));
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
// ---------------------------------------------------------------------------
|
|
238
|
+
// Private helpers
|
|
239
|
+
// ---------------------------------------------------------------------------
|
|
240
|
+
/**
|
|
241
|
+
* Trunca un array de items para que su JSON serializado no supere `maxBytes`.
|
|
242
|
+
*
|
|
243
|
+
* Utiliza búsqueda binaria para encontrar eficientemente el número máximo de
|
|
244
|
+
* items que caben dentro del límite.
|
|
245
|
+
*
|
|
246
|
+
* @param items - Items originales.
|
|
247
|
+
* @param maxBytes - Límite en bytes.
|
|
248
|
+
* @returns Subarray de items que cabe dentro del límite.
|
|
249
|
+
*/
|
|
250
|
+
function truncateItemsToLimit(items, maxBytes) {
|
|
251
|
+
if (items.length === 0)
|
|
252
|
+
return [];
|
|
253
|
+
// Búsqueda binaria: encuentra el máximo n tal que JSON([0..n-1]) <= maxBytes
|
|
254
|
+
let lo = 0;
|
|
255
|
+
let hi = items.length;
|
|
256
|
+
while (lo < hi) {
|
|
257
|
+
const mid = Math.floor((lo + hi) / 2);
|
|
258
|
+
const size = Buffer.byteLength(JSON.stringify(items.slice(0, mid + 1)), 'utf8');
|
|
259
|
+
if (size <= maxBytes) {
|
|
260
|
+
lo = mid + 1;
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
hi = mid;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return items.slice(0, lo);
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=facturas-electronicas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facturas-electronicas.js","sourceRoot":"","sources":["../../src/tools/facturas-electronicas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
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 "Facturas de Ventas".
|
|
5
|
+
*
|
|
6
|
+
* Expone 5 tools:
|
|
7
|
+
* - `freematica_list_facturas_cabecera`: listado paginado de cabeceras con filtros FIQL
|
|
8
|
+
* - `freematica_get_factura_cabecera`: detalle de una factura por idReg
|
|
9
|
+
* - `freematica_list_factura_lineas`: líneas de una factura (path param: idFactura)
|
|
10
|
+
* - `freematica_list_factura_iva`: líneas de IVA de una factura (path param: idFactura)
|
|
11
|
+
* - `freematica_list_factura_vencimientos`: vencimientos de una factura (path param: idFactura)
|
|
12
|
+
*
|
|
13
|
+
* @param server - Instancia MCP donde se registran las tools.
|
|
14
|
+
* @param client - Cliente tipado de Freemática.
|
|
15
|
+
*/
|
|
16
|
+
export declare function registerFacturasVentasTools(server: McpServer, client: FreematicaClient): void;
|