@nubiia/mcp-freematica 0.6.3 → 0.7.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 (43) hide show
  1. package/README.md +63 -13
  2. package/dist/clients/freematica-client.d.ts +190 -1
  3. package/dist/clients/freematica-client.js +281 -1
  4. package/dist/clients/freematica-client.js.map +1 -1
  5. package/dist/config.d.ts +22 -1
  6. package/dist/config.js +29 -1
  7. package/dist/config.js.map +1 -1
  8. package/dist/schemas/contratos.d.ts +268 -5
  9. package/dist/schemas/contratos.js +402 -1
  10. package/dist/schemas/contratos.js.map +1 -1
  11. package/dist/server-instructions.js +44 -1
  12. package/dist/server-instructions.js.map +1 -1
  13. package/dist/server.d.ts +6 -0
  14. package/dist/server.js +2 -2
  15. package/dist/server.js.map +1 -1
  16. package/dist/tools/contratos/cabecera.d.ts +7 -0
  17. package/dist/tools/contratos/cabecera.js +128 -0
  18. package/dist/tools/contratos/cabecera.js.map +1 -0
  19. package/dist/tools/contratos/index.d.ts +21 -0
  20. package/dist/tools/contratos/index.js +31 -0
  21. package/dist/tools/contratos/index.js.map +1 -0
  22. package/dist/tools/contratos/materiales.d.ts +4 -0
  23. package/dist/tools/{contratos.js → contratos/materiales.js} +5 -11
  24. package/dist/tools/contratos/materiales.js.map +1 -0
  25. package/dist/tools/contratos/opcionales.d.ts +5 -0
  26. package/dist/tools/contratos/opcionales.js +106 -0
  27. package/dist/tools/contratos/opcionales.js.map +1 -0
  28. package/dist/tools/contratos/servicios.d.ts +5 -0
  29. package/dist/tools/contratos/servicios.js +215 -0
  30. package/dist/tools/contratos/servicios.js.map +1 -0
  31. package/dist/transports/http.d.ts +2 -0
  32. package/dist/transports/http.js +3 -1
  33. package/dist/transports/http.js.map +1 -1
  34. package/dist/transports/stdio.d.ts +2 -0
  35. package/dist/transports/stdio.js +3 -1
  36. package/dist/transports/stdio.js.map +1 -1
  37. package/dist/types/contratos.d.ts +29 -0
  38. package/dist/utils/idreg.d.ts +37 -0
  39. package/dist/utils/idreg.js +52 -0
  40. package/dist/utils/idreg.js.map +1 -0
  41. package/package.json +21 -4
  42. package/dist/tools/contratos.d.ts +0 -10
  43. package/dist/tools/contratos.js.map +0 -1
@@ -1,2 +1,403 @@
1
- export {};
1
+ import { z } from 'zod';
2
+ /**
3
+ * Zod schemas (raw shapes) e builders de body para las tools del grupo
4
+ * "Contratos y Servicios" (módulos pvss y ppre).
5
+ *
6
+ * Convención: las tools exponen nombres amigables en castellano
7
+ * (descripcion, codCliente, fechaAlta…) y los builders los traducen a los
8
+ * campos nativos del API (CTRT_*, CTRTS_*, SERVHPR_*, CTRTFL_*, CON2_*).
9
+ * Solo se incluyen en el body los campos definidos por el caller.
10
+ *
11
+ * Los límites de longitud provienen del spec OpenAPI
12
+ * (https://api-config.freefy.cloud/openapi.json).
13
+ */
14
+ // ---------------------------------------------------------------------------
15
+ // Helpers
16
+ // ---------------------------------------------------------------------------
17
+ /** Fecha en formato ISO YYYY-MM-DD (Freemática también acepta datetime). */
18
+ const isoDate = () => z
19
+ .string()
20
+ .regex(/^\d{4}-\d{2}-\d{2}([ T]\d{2}:\d{2}(:\d{2})?)?$/, 'Formato esperado: YYYY-MM-DD')
21
+ .describe('Fecha en formato YYYY-MM-DD.');
22
+ /** Añade `target[key] = value` solo si value !== undefined. */
23
+ function setIf(target, key, value) {
24
+ if (value !== undefined)
25
+ target[key] = value;
26
+ }
27
+ // ---------------------------------------------------------------------------
28
+ // Cabecera de contrato (VoContratos, campos CTRT_*)
29
+ // ---------------------------------------------------------------------------
30
+ const contratoOptionalFieldsShape = {
31
+ empresa: z.string().max(4).optional().describe('Código de empresa (CTRT_EMP, 4c).'),
32
+ codContrato: z
33
+ .string()
34
+ .max(10)
35
+ .optional()
36
+ .describe('Código del contrato (CTRT_COD, 10c). Si se omite en el alta, lo asigna Freemática.'),
37
+ pais: z.number().int().optional().describe('Código de país (CTRT_PAIS).'),
38
+ provincia: z.string().max(5).optional().describe('Provincia (CTRT_PROV, 5c).'),
39
+ codPostal: z.string().max(10).optional().describe('Código postal (CTRT_CPOSTAL, 10c).'),
40
+ poblacion: z.string().max(40).optional().describe('Población (CTRT_POB, 40c).'),
41
+ tipoVia: z.string().max(10).optional().describe('Tipo de vía (CTRT_TVIA, 10c). Ej: CL, AV, PZ.'),
42
+ nombreVia: z.string().max(80).optional().describe('Nombre de vía (CTRT_NOMVIA, 80c).'),
43
+ ubicacionVia: z.string().max(40).optional().describe('Ubicación vía (CTRT_UBIVIA, 40c).'),
44
+ abierto: z
45
+ .boolean()
46
+ .optional()
47
+ .describe('Contrato abierto (CTRT_ABIERTO): true → "1", false → "0".'),
48
+ localizacionServicio: z
49
+ .number()
50
+ .int()
51
+ .optional()
52
+ .describe('Localización de servicio (CTRT_LOC_SERV).'),
53
+ estadistico: z.string().max(20).optional().describe('Estadístico (CTRT_ESTADISTICO, 20c).'),
54
+ };
55
+ export const CreateContratoShape = {
56
+ delegacion: z.string().max(4).describe('Código de delegación (CTRT_DELEG, 4c). Requerido.'),
57
+ descripcion: z.string().max(40).describe('Descripción del contrato (CTRT_DES, 40c). Requerido.'),
58
+ fecha: isoDate().describe('Fecha del contrato (CTRT_FECHA, YYYY-MM-DD). Requerido.'),
59
+ codCliente: z.string().max(10).describe('Código de cliente (CTRT_COD_CLI, 10c). Requerido.'),
60
+ ...contratoOptionalFieldsShape,
61
+ };
62
+ export const UpdateContratoShape = {
63
+ idReg: z
64
+ .string()
65
+ .min(1)
66
+ .describe('idReg opaco del contrato (campo "idReg" en freematica_list_contratos).'),
67
+ delegacion: z.string().max(4).optional().describe('Código de delegación (CTRT_DELEG, 4c).'),
68
+ descripcion: z.string().max(40).optional().describe('Descripción del contrato (CTRT_DES, 40c).'),
69
+ fecha: isoDate().optional().describe('Fecha del contrato (CTRT_FECHA).'),
70
+ codCliente: z.string().max(10).optional().describe('Código de cliente (CTRT_COD_CLI, 10c).'),
71
+ ...contratoOptionalFieldsShape,
72
+ };
73
+ /** Construye el body VoContratos a partir de los campos amigables definidos. */
74
+ export function buildContratoBody(args) {
75
+ const body = {};
76
+ setIf(body, 'CTRT_EMP', args.empresa);
77
+ setIf(body, 'CTRT_DELEG', args.delegacion);
78
+ setIf(body, 'CTRT_COD', args.codContrato);
79
+ setIf(body, 'CTRT_DES', args.descripcion);
80
+ setIf(body, 'CTRT_FECHA', args.fecha);
81
+ setIf(body, 'CTRT_COD_CLI', args.codCliente);
82
+ setIf(body, 'CTRT_PAIS', args.pais);
83
+ setIf(body, 'CTRT_PROV', args.provincia);
84
+ setIf(body, 'CTRT_CPOSTAL', args.codPostal);
85
+ setIf(body, 'CTRT_POB', args.poblacion);
86
+ setIf(body, 'CTRT_TVIA', args.tipoVia);
87
+ setIf(body, 'CTRT_NOMVIA', args.nombreVia);
88
+ setIf(body, 'CTRT_UBIVIA', args.ubicacionVia);
89
+ if (args.abierto !== undefined)
90
+ body['CTRT_ABIERTO'] = args.abierto ? '1' : '0';
91
+ setIf(body, 'CTRT_LOC_SERV', args.localizacionServicio);
92
+ setIf(body, 'CTRT_ESTADISTICO', args.estadistico);
93
+ return body;
94
+ }
95
+ // ---------------------------------------------------------------------------
96
+ // Servicios de contrato (VoServicios, campos CTRTS_*)
97
+ // ---------------------------------------------------------------------------
98
+ const servicioFieldsShape = {
99
+ codServicio: z
100
+ .string()
101
+ .max(10)
102
+ .optional()
103
+ .describe('Código del servicio (CTRTS_COD, 10c). Si se omite, lo asigna Freemática.'),
104
+ descripcion: z.string().max(40).optional().describe('Descripción del servicio (CTRTS_DES, 40c).'),
105
+ inspector: z.string().max(10).optional().describe('Código de inspector (CTRTS_INSP).'),
106
+ tipo: z.string().max(1).optional().describe('Tipo de servicio (CTRTS_TIPO, 1c).'),
107
+ fechaAlta: isoDate().optional().describe('Fecha de alta del servicio (CTRTS_FECALTA).'),
108
+ fechaFin: isoDate().optional().describe('Fecha fin del servicio (CTRTS_FECFIN).'),
109
+ precioEspecial: z
110
+ .enum(['0', '1', '2'])
111
+ .optional()
112
+ .describe('Tipo de cálculo en precio especial (CTRTS_PRECIO_ESP): 0=Nada, 1=Siempre, 2=Solo si hay precio especial.'),
113
+ nombreResponsable: z
114
+ .string()
115
+ .max(40)
116
+ .optional()
117
+ .describe('Descripción responsable cliente (CTRTS_NOMPROD, 40c).'),
118
+ situacion: z.string().max(100).optional().describe('Situación del servicio (CTRTS_SITUACION, 100c).'),
119
+ calendarioFestivo: z
120
+ .string()
121
+ .max(6)
122
+ .optional()
123
+ .describe('Calendario festivo (CTRTS_CALFEST, 6c). Ej: código postal.'),
124
+ secuencial: z.string().max(1).optional().describe('Tipo base operativa (CTRTS_SECUENCIAL, 1c).'),
125
+ clase: z.string().max(4).optional().describe('Código de la clase de servicio (CTRTS_CLASE, 4c).'),
126
+ mesIncremento: z.number().int().min(1).max(12).optional().describe('Mes incremento (CTRTS_MES_INCRE).'),
127
+ observacionesPuesto: z
128
+ .string()
129
+ .max(255)
130
+ .optional()
131
+ .describe('Observaciones puesto (CTRTS_OBS_PUESTO, 255c).'),
132
+ };
133
+ export const CreateServicioShape = {
134
+ idContrato: z
135
+ .string()
136
+ .min(1)
137
+ .describe('idReg opaco del contrato (Base64 "EMP__DELEG__COD"). Los campos requeridos CTRTS_EMP/CTRTS_DELEG/CTRTS_CTRT se derivan de él automáticamente.'),
138
+ ...servicioFieldsShape,
139
+ };
140
+ export const UpdateServicioFechasShape = {
141
+ idContrato: z.string().min(1).describe('idReg opaco del contrato.'),
142
+ idServicio: z
143
+ .string()
144
+ .min(1)
145
+ .describe('idReg opaco del servicio (campo "idReg" en freematica_list_servicios_contrato).'),
146
+ fechaAlta: isoDate().optional().describe('Nueva fecha de inicio (CTRTS_FECALTA).'),
147
+ fechaFin: isoDate().optional().describe('Nueva fecha fin (CTRTS_FECFIN).'),
148
+ };
149
+ /**
150
+ * Construye el body VoServicios. Los tres campos requeridos por el API
151
+ * (CTRTS_EMP, CTRTS_DELEG, CTRTS_CTRT) se pasan como `parts` (decodificados
152
+ * del idReg del contrato).
153
+ */
154
+ export function buildServicioBody(parts, args) {
155
+ const body = {
156
+ CTRTS_EMP: parts.empresa,
157
+ CTRTS_DELEG: parts.delegacion,
158
+ CTRTS_CTRT: parts.codContrato,
159
+ };
160
+ setIf(body, 'CTRTS_COD', args.codServicio);
161
+ setIf(body, 'CTRTS_DES', args.descripcion);
162
+ setIf(body, 'CTRTS_INSP', args.inspector);
163
+ setIf(body, 'CTRTS_TIPO', args.tipo);
164
+ setIf(body, 'CTRTS_FECALTA', args.fechaAlta);
165
+ setIf(body, 'CTRTS_FECFIN', args.fechaFin);
166
+ setIf(body, 'CTRTS_PRECIO_ESP', args.precioEspecial);
167
+ setIf(body, 'CTRTS_NOMPROD', args.nombreResponsable);
168
+ setIf(body, 'CTRTS_SITUACION', args.situacion);
169
+ setIf(body, 'CTRTS_CALFEST', args.calendarioFestivo);
170
+ setIf(body, 'CTRTS_SECUENCIAL', args.secuencial);
171
+ setIf(body, 'CTRTS_CLASE', args.clase);
172
+ setIf(body, 'CTRTS_MES_INCRE', args.mesIncremento);
173
+ setIf(body, 'CTRTS_OBS_PUESTO', args.observacionesPuesto);
174
+ return body;
175
+ }
176
+ // ---------------------------------------------------------------------------
177
+ // Histórico de precios de servicio (VoServiciosHistPr, campos SERVHPR_*)
178
+ // ---------------------------------------------------------------------------
179
+ const historicoPreciosFieldsShape = {
180
+ fecha: isoDate().optional().describe('Fecha del registro (SERVHPR_FCH).'),
181
+ porcentajeIncremento: z.number().optional().describe('Porcentaje incremento (SERVHPR_PORC_INCR).'),
182
+ precioHoraGlobal: z.number().optional().describe('Precio hora global (SERVHPR_PR_H_GLOBAL).'),
183
+ precioHoraGlobalAnterior: z
184
+ .number()
185
+ .optional()
186
+ .describe('Precio hora global anterior (SERVHPR_PR_H_GLOBAL_ANT).'),
187
+ precioHoraDiurna: z.number().optional().describe('Precio hora diurna (SERVHPR_PR_H_DIUR).'),
188
+ precioHoraDiurnaAnterior: z
189
+ .number()
190
+ .optional()
191
+ .describe('Precio hora diurna anterior (SERVHPR_PR_H_DIUR_ANT).'),
192
+ precioHoraNocturna: z.number().optional().describe('Precio hora nocturna (SERVHPR_PR_H_NOCT).'),
193
+ precioHoraNocturnaAnterior: z
194
+ .number()
195
+ .optional()
196
+ .describe('Precio hora nocturna anterior (SERVHPR_PR_H_NOCT_ANT).'),
197
+ precioHoraFestiva: z.number().optional().describe('Precio hora festiva (SERVHPR_PR_H_FEST).'),
198
+ precioHoraFestivaAnterior: z
199
+ .number()
200
+ .optional()
201
+ .describe('Precio hora festiva anterior (SERVHPR_PR_H_FEST_ANT).'),
202
+ precioHoraNocturnaFestiva: z
203
+ .number()
204
+ .optional()
205
+ .describe('Precio hora nocturna festiva (SERVHPR_PR_H_NOCFEST).'),
206
+ precioHoraNocturnaFestivaAnterior: z
207
+ .number()
208
+ .optional()
209
+ .describe('Precio hora nocturna festiva anterior (SERVHPR_PR_H_NOCFEST_ANT).'),
210
+ importeFijo: z.number().optional().describe('Importe fijo (SERVHPR_IMP_FIJO).'),
211
+ importeFijoAnterior: z.number().optional().describe('Importe fijo anterior (SERVHPR_IMP_FIJO_ANT).'),
212
+ fechaIncremento: isoDate().optional().describe('Fecha incremento (SERVHPR_FCH_INCR).'),
213
+ tipoRevision: z.number().optional().describe('Tipo revisión (SERVHPR_TIPO_REV).'),
214
+ noAplicado: z
215
+ .boolean()
216
+ .optional()
217
+ .describe('No aplicado (SERVHPR_NO_APLICADO): true → "1", false → "0".'),
218
+ origen: z.string().max(1).optional().describe('Origen (SERVHPR_ORIGEN, 1c).'),
219
+ };
220
+ export const ServicioHistoricoPreciosShape = {
221
+ idContrato: z.string().min(1).describe('idReg opaco del contrato.'),
222
+ idServicio: z.string().min(1).describe('idReg opaco del servicio.'),
223
+ ...historicoPreciosFieldsShape,
224
+ };
225
+ /**
226
+ * Construye el body VoServiciosHistPr. Los campos requeridos SERVHPR_EMP /
227
+ * SERVHPR_DELEG / SERVHPR_CTRT se derivan del idReg del contrato; SERVHPR_SERV
228
+ * del idReg del servicio.
229
+ */
230
+ export function buildHistoricoPreciosBody(parts, args) {
231
+ const body = {
232
+ SERVHPR_EMP: parts.empresa,
233
+ SERVHPR_DELEG: parts.delegacion,
234
+ SERVHPR_CTRT: parts.codContrato,
235
+ SERVHPR_SERV: parts.codServicio,
236
+ };
237
+ setIf(body, 'SERVHPR_FCH', args.fecha);
238
+ setIf(body, 'SERVHPR_PORC_INCR', args.porcentajeIncremento);
239
+ setIf(body, 'SERVHPR_PR_H_GLOBAL', args.precioHoraGlobal);
240
+ setIf(body, 'SERVHPR_PR_H_GLOBAL_ANT', args.precioHoraGlobalAnterior);
241
+ setIf(body, 'SERVHPR_PR_H_DIUR', args.precioHoraDiurna);
242
+ setIf(body, 'SERVHPR_PR_H_DIUR_ANT', args.precioHoraDiurnaAnterior);
243
+ setIf(body, 'SERVHPR_PR_H_NOCT', args.precioHoraNocturna);
244
+ setIf(body, 'SERVHPR_PR_H_NOCT_ANT', args.precioHoraNocturnaAnterior);
245
+ setIf(body, 'SERVHPR_PR_H_FEST', args.precioHoraFestiva);
246
+ setIf(body, 'SERVHPR_PR_H_FEST_ANT', args.precioHoraFestivaAnterior);
247
+ setIf(body, 'SERVHPR_PR_H_NOCFEST', args.precioHoraNocturnaFestiva);
248
+ setIf(body, 'SERVHPR_PR_H_NOCFEST_ANT', args.precioHoraNocturnaFestivaAnterior);
249
+ setIf(body, 'SERVHPR_IMP_FIJO', args.importeFijo);
250
+ setIf(body, 'SERVHPR_IMP_FIJO_ANT', args.importeFijoAnterior);
251
+ setIf(body, 'SERVHPR_FCH_INCR', args.fechaIncremento);
252
+ setIf(body, 'SERVHPR_TIPO_REV', args.tipoRevision);
253
+ if (args.noAplicado !== undefined)
254
+ body['SERVHPR_NO_APLICADO'] = args.noAplicado ? '1' : '0';
255
+ setIf(body, 'SERVHPR_ORIGEN', args.origen);
256
+ return body;
257
+ }
258
+ // ---------------------------------------------------------------------------
259
+ // Textos de facturación de servicio (VoServiciosFacTxt, campos CTRTFL_*)
260
+ // ---------------------------------------------------------------------------
261
+ export const CreateServicioFacturacionTxtShape = {
262
+ idContrato: z.string().min(1).describe('idReg opaco del contrato.'),
263
+ idServicio: z.string().min(1).describe('idReg opaco del servicio.'),
264
+ linea: z.string().max(4).describe('Código de línea (CTRTFL_LIN, 4c). Requerido.'),
265
+ texto: z.string().max(40).optional().describe('Descripción (CTRTFL_TXT, 40c).'),
266
+ textoAmpliado: z
267
+ .string()
268
+ .max(255)
269
+ .optional()
270
+ .describe('Descripción ampliada (CTRTFL_TXT_AMPLIADO, 255c).'),
271
+ };
272
+ /** Construye el body VoServiciosFacTxt (5 campos requeridos derivados + textos). */
273
+ export function buildFacturacionTxtBody(parts, args) {
274
+ const body = {
275
+ CTRTFL_EMP: parts.empresa,
276
+ CTRTFL_DELEG: parts.delegacion,
277
+ CTRTFL_CTRT: parts.codContrato,
278
+ CTRTFL_SERV: parts.codServicio,
279
+ CTRTFL_LIN: args.linea,
280
+ };
281
+ setIf(body, 'CTRTFL_TXT', args.texto);
282
+ setIf(body, 'CTRTFL_TXT_AMPLIADO', args.textoAmpliado);
283
+ return body;
284
+ }
285
+ // ---------------------------------------------------------------------------
286
+ // Datos de facturación de servicio (VoServiciosFac, campos CTRTF_*)
287
+ // ---------------------------------------------------------------------------
288
+ /**
289
+ * VoServiciosFac tiene 42 campos; se exponen con nombre amigable los de uso
290
+ * común y el resto puede pasarse en `camposAdicionales` con su nombre nativo
291
+ * CTRTF_* (passthrough validado por prefijo).
292
+ */
293
+ export const UpdateServicioFacturacionShape = {
294
+ idContrato: z.string().min(1).describe('idReg opaco del contrato.'),
295
+ idServicio: z.string().min(1).describe('idReg opaco del servicio.'),
296
+ tipoCobro: z.string().max(1).optional().describe('Tipo de cobro (CTRTF_TIPCOB, 1c).'),
297
+ horasContrato: z.number().optional().describe('Horas contrato (CTRTF_HHCTRT).'),
298
+ precioHora: z.number().optional().describe('Precio hora (CTRTF_PRECIOH).'),
299
+ importeFacturacion: z.number().optional().describe('Importe facturación (CTRTF_IMPFACF).'),
300
+ claveFacturacion: z.string().max(4).optional().describe('Clave facturación (CTRTF_CLAVEF, 4c).'),
301
+ referencia: z.string().max(40).optional().describe('Referencia (CTRTF_REF, 40c).'),
302
+ formaPago: z.string().max(3).optional().describe('Forma de pago (CTRTF_FPAGO, 3c).'),
303
+ descuentoEspecial: z
304
+ .number()
305
+ .optional()
306
+ .describe('Porcentaje descuento especial (CTRTF_DTO_ESP).'),
307
+ precioHoraDiurna: z.number().optional().describe('Precio hora diurna (CTRTF_PRECIOH_D).'),
308
+ precioHoraNocturna: z.number().optional().describe('Precio hora nocturna (CTRTF_PRECIOH_N).'),
309
+ precioHoraFestiva: z.number().optional().describe('Precio hora festiva (CTRTF_PRECIOH_F).'),
310
+ precioHoraNocturnaFestiva: z
311
+ .number()
312
+ .optional()
313
+ .describe('Precio hora nocturno festivo (CTRTF_PRECIOH_NF).'),
314
+ ivaIncluido: z
315
+ .boolean()
316
+ .optional()
317
+ .describe('IVA incluido (CTRTF_IVA_INC): true → "1", false → "0".'),
318
+ camposAdicionales: z
319
+ .record(z.string().regex(/^CTRTF_/, 'Las claves deben empezar por CTRTF_'), z.union([z.string(), z.number()]))
320
+ .optional()
321
+ .describe('Campos VoServiciosFac adicionales con su nombre nativo CTRTF_* (ej: CTRTF_PORCFAC, CTRTF_SERVFAC). Ver spec OpenAPI.'),
322
+ };
323
+ /** Construye el body VoServiciosFac (requeridos derivados + campos amigables + passthrough). */
324
+ export function buildServicioFacturacionBody(parts, args) {
325
+ const body = {
326
+ CTRTF_EMP: parts.empresa,
327
+ CTRTF_DELEG: parts.delegacion,
328
+ CTRTF_CTRT: parts.codContrato,
329
+ CTRTF_SERV: parts.codServicio,
330
+ };
331
+ setIf(body, 'CTRTF_TIPCOB', args.tipoCobro);
332
+ setIf(body, 'CTRTF_HHCTRT', args.horasContrato);
333
+ setIf(body, 'CTRTF_PRECIOH', args.precioHora);
334
+ setIf(body, 'CTRTF_IMPFACF', args.importeFacturacion);
335
+ setIf(body, 'CTRTF_CLAVEF', args.claveFacturacion);
336
+ setIf(body, 'CTRTF_REF', args.referencia);
337
+ setIf(body, 'CTRTF_FPAGO', args.formaPago);
338
+ setIf(body, 'CTRTF_DTO_ESP', args.descuentoEspecial);
339
+ setIf(body, 'CTRTF_PRECIOH_D', args.precioHoraDiurna);
340
+ setIf(body, 'CTRTF_PRECIOH_N', args.precioHoraNocturna);
341
+ setIf(body, 'CTRTF_PRECIOH_F', args.precioHoraFestiva);
342
+ setIf(body, 'CTRTF_PRECIOH_NF', args.precioHoraNocturnaFestiva);
343
+ if (args.ivaIncluido !== undefined)
344
+ body['CTRTF_IVA_INC'] = args.ivaIncluido ? '1' : '0';
345
+ if (args.camposAdicionales)
346
+ Object.assign(body, args.camposAdicionales);
347
+ return body;
348
+ }
349
+ // ---------------------------------------------------------------------------
350
+ // Opcionales de contrato (VoContratosOpcionales, campos CON2_*, módulo ppre)
351
+ // ---------------------------------------------------------------------------
352
+ const opcionalesCamposAdicionales = z
353
+ .record(z.string().regex(/^CON2_/, 'Las claves deben empezar por CON2_'), z.union([z.string(), z.number()]))
354
+ .optional()
355
+ .describe('Campos VoContratosOpcionales adicionales con su nombre nativo CON2_* (ej: CON2_OPC_NUM1..10, CON2_OPC_ALFA1..10, CON2_DTO_CUOTA). Ver spec OpenAPI.');
356
+ export const CreateContratoOpcionalesShape = {
357
+ empresa: z.string().max(4).describe('Empresa (CON2_CODEMP, 4c). Requerido.'),
358
+ delegacion: z.string().max(4).describe('Delegación (CON2_DELEG, 4c). Requerido.'),
359
+ tipoContrato: z.string().max(4).describe('Tipo de contrato (CON2_TIPOCONT, 4c). Requerido.'),
360
+ numContrato: z.number().describe('Número de contrato (CON2_NUMCONT). Requerido.'),
361
+ fechaContrato: isoDate().describe('Fecha del contrato (CON2_FCHCONT). Requerido.'),
362
+ observaciones1: z.string().max(255).optional().describe('Observaciones 1 (CON2_OBSERV1, 255c).'),
363
+ observaciones2: z.string().max(255).optional().describe('Observaciones 2 (CON2_OBSERV2, 255c).'),
364
+ servicio: z.string().max(4).optional().describe('Servicio (CON2_SERVICIO, 4c).'),
365
+ categoria: z.string().max(4).optional().describe('Categoría (CON2_CATEGORIA, 4c).'),
366
+ importeFijo: z.number().optional().describe('Importe fijo (CON2_IMPORTE_FIJO).'),
367
+ camposAdicionales: opcionalesCamposAdicionales,
368
+ };
369
+ export const UpdateContratoOpcionalesShape = {
370
+ idReg: z
371
+ .string()
372
+ .min(1)
373
+ .describe('idReg opaco del registro de opcionales (campo "idReg" en freematica_list_contratos_opcionales).'),
374
+ empresa: z.string().max(4).optional().describe('Empresa (CON2_CODEMP, 4c).'),
375
+ delegacion: z.string().max(4).optional().describe('Delegación (CON2_DELEG, 4c).'),
376
+ tipoContrato: z.string().max(4).optional().describe('Tipo de contrato (CON2_TIPOCONT, 4c).'),
377
+ numContrato: z.number().optional().describe('Número de contrato (CON2_NUMCONT).'),
378
+ fechaContrato: isoDate().optional().describe('Fecha del contrato (CON2_FCHCONT).'),
379
+ observaciones1: z.string().max(255).optional().describe('Observaciones 1 (CON2_OBSERV1, 255c).'),
380
+ observaciones2: z.string().max(255).optional().describe('Observaciones 2 (CON2_OBSERV2, 255c).'),
381
+ servicio: z.string().max(4).optional().describe('Servicio (CON2_SERVICIO, 4c).'),
382
+ categoria: z.string().max(4).optional().describe('Categoría (CON2_CATEGORIA, 4c).'),
383
+ importeFijo: z.number().optional().describe('Importe fijo (CON2_IMPORTE_FIJO).'),
384
+ camposAdicionales: opcionalesCamposAdicionales,
385
+ };
386
+ /** Construye el body VoContratosOpcionales a partir de los campos definidos. */
387
+ export function buildContratoOpcionalesBody(args) {
388
+ const body = {};
389
+ setIf(body, 'CON2_CODEMP', args.empresa);
390
+ setIf(body, 'CON2_DELEG', args.delegacion);
391
+ setIf(body, 'CON2_TIPOCONT', args.tipoContrato);
392
+ setIf(body, 'CON2_NUMCONT', args.numContrato);
393
+ setIf(body, 'CON2_FCHCONT', args.fechaContrato);
394
+ setIf(body, 'CON2_OBSERV1', args.observaciones1);
395
+ setIf(body, 'CON2_OBSERV2', args.observaciones2);
396
+ setIf(body, 'CON2_SERVICIO', args.servicio);
397
+ setIf(body, 'CON2_CATEGORIA', args.categoria);
398
+ setIf(body, 'CON2_IMPORTE_FIJO', args.importeFijo);
399
+ if (args.camposAdicionales)
400
+ Object.assign(body, args.camposAdicionales);
401
+ return body;
402
+ }
2
403
  //# sourceMappingURL=contratos.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contratos.js","sourceRoot":"","sources":["../../src/schemas/contratos.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"contratos.js","sourceRoot":"","sources":["../../src/schemas/contratos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;GAWG;AAEH,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,4EAA4E;AAC5E,MAAM,OAAO,GAAG,GAAG,EAAE,CACnB,CAAC;KACE,MAAM,EAAE;KACR,KAAK,CAAC,gDAAgD,EAAE,8BAA8B,CAAC;KACvF,QAAQ,CAAC,8BAA8B,CAAC,CAAC;AAE9C,+DAA+D;AAC/D,SAAS,KAAK,CAAC,MAA+B,EAAE,GAAW,EAAE,KAAc;IACzE,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC/C,CAAC;AAED,8EAA8E;AAC9E,oDAAoD;AACpD,8EAA8E;AAE9E,MAAM,2BAA2B,GAAG;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACnF,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,EAAE;SACV,QAAQ,CAAC,oFAAoF,CAAC;IACjG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACzE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC9E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACvF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC/E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IAChG,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACtF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACzF,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,2DAA2D,CAAC;IACxE,oBAAoB,EAAE,CAAC;SACpB,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,CAAC,2CAA2C,CAAC;IACxD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;CAC5F,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IAC3F,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,sDAAsD,CAAC;IAChG,KAAK,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;IACpF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IAC5F,GAAG,2BAA2B;CAC/B,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,wEAAwE,CAAC;IACrF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC3F,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IAChG,KAAK,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACxE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC5F,GAAG,2BAA2B;CAC/B,CAAC;AAqBF,gFAAgF;AAChF,MAAM,UAAU,iBAAiB,CAAC,IAAoB;IACpD,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1C,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1C,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9C,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAChF,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,EAAE,kBAAkB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,sDAAsD;AACtD,8EAA8E;AAE9E,MAAM,mBAAmB,GAAG;IAC1B,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,EAAE;SACV,QAAQ,CAAC,0EAA0E,CAAC;IACvF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IACjG,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACtF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACjF,SAAS,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IACvF,QAAQ,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IACjF,cAAc,EAAE,CAAC;SACd,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;SACrB,QAAQ,EAAE;SACV,QAAQ,CACP,0GAA0G,CAC3G;IACH,iBAAiB,EAAE,CAAC;SACjB,MAAM,EAAE;SACR,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,EAAE;SACV,QAAQ,CAAC,uDAAuD,CAAC;IACpE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IACrG,iBAAiB,EAAE,CAAC;SACjB,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,4DAA4D,CAAC;IACzE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IAChG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IACjG,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACvG,mBAAmB,EAAE,CAAC;SACnB,MAAM,EAAE;SACR,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,gDAAgD,CAAC;CAC9D,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,+IAA+I,CAChJ;IACH,GAAG,mBAAmB;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACnE,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,iFAAiF,CAAC;IAC9F,SAAS,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAClF,QAAQ,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAC3E,CAAC;AAmBF;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAmE,EACnE,IAAoB;IAEpB,MAAM,IAAI,GAA4B;QACpC,SAAS,EAAE,KAAK,CAAC,OAAO;QACxB,WAAW,EAAE,KAAK,CAAC,UAAU;QAC7B,UAAU,EAAE,KAAK,CAAC,WAAW;KAC9B,CAAC;IACF,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,EAAE,kBAAkB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,EAAE,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,EAAE,kBAAkB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,yEAAyE;AACzE,8EAA8E;AAE9E,MAAM,2BAA2B,GAAG;IAClC,KAAK,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACzE,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IAClG,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IAC7F,wBAAwB,EAAE,CAAC;SACxB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,wDAAwD,CAAC;IACrE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAC3F,wBAAwB,EAAE,CAAC;SACxB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,sDAAsD,CAAC;IACnE,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IAC/F,0BAA0B,EAAE,CAAC;SAC1B,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,wDAAwD,CAAC;IACrE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IAC7F,yBAAyB,EAAE,CAAC;SACzB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uDAAuD,CAAC;IACpE,yBAAyB,EAAE,CAAC;SACzB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,sDAAsD,CAAC;IACnE,iCAAiC,EAAE,CAAC;SACjC,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,mEAAmE,CAAC;IAChF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC/E,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IACpG,eAAe,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACtF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACjF,UAAU,EAAE,CAAC;SACV,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,6DAA6D,CAAC;IAC1E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CAC9E,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACnE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACnE,GAAG,2BAA2B;CAC/B,CAAC;AAuBF;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAAwF,EACxF,IAA4B;IAE5B,MAAM,IAAI,GAA4B;QACpC,WAAW,EAAE,KAAK,CAAC,OAAO;QAC1B,aAAa,EAAE,KAAK,CAAC,UAAU;QAC/B,YAAY,EAAE,KAAK,CAAC,WAAW;QAC/B,YAAY,EAAE,KAAK,CAAC,WAAW;KAChC,CAAC;IACF,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC5D,KAAK,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,EAAE,yBAAyB,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,EAAE,uBAAuB,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACpE,KAAK,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,EAAE,uBAAuB,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,EAAE,uBAAuB,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACrE,KAAK,CAAC,IAAI,EAAE,sBAAsB,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACpE,KAAK,CAAC,IAAI,EAAE,0BAA0B,EAAE,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAChF,KAAK,CAAC,IAAI,EAAE,kBAAkB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,EAAE,sBAAsB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC9D,KAAK,CAAC,IAAI,EAAE,kBAAkB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,EAAE,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACnD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;QAAE,IAAI,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC7F,KAAK,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,yEAAyE;AACzE,8EAA8E;AAE9E,MAAM,CAAC,MAAM,iCAAiC,GAAG;IAC/C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACnE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACnE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IACjF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC/E,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,mDAAmD,CAAC;CACjE,CAAC;AAEF,oFAAoF;AACpF,MAAM,UAAU,uBAAuB,CACrC,KAAwF,EACxF,IAA+D;IAE/D,MAAM,IAAI,GAA4B;QACpC,UAAU,EAAE,KAAK,CAAC,OAAO;QACzB,YAAY,EAAE,KAAK,CAAC,UAAU;QAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,UAAU,EAAE,IAAI,CAAC,KAAK;KACvB,CAAC;IACF,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,oEAAoE;AACpE,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACnE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACnE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACrF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC/E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC1E,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IAC1F,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAChG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAClF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACpF,iBAAiB,EAAE,CAAC;SACjB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,gDAAgD,CAAC;IAC7D,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACzF,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAC7F,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC3F,yBAAyB,EAAE,CAAC;SACzB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,WAAW,EAAE,CAAC;SACX,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,wDAAwD,CAAC;IACrE,iBAAiB,EAAE,CAAC;SACjB,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,qCAAqC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;SAC7G,QAAQ,EAAE;SACV,QAAQ,CACP,sHAAsH,CACvH;CACJ,CAAC;AAmBF,gGAAgG;AAChG,MAAM,UAAU,4BAA4B,CAC1C,KAAwF,EACxF,IAA+B;IAE/B,MAAM,IAAI,GAA4B;QACpC,SAAS,EAAE,KAAK,CAAC,OAAO;QACxB,WAAW,EAAE,KAAK,CAAC,UAAU;QAC7B,UAAU,EAAE,KAAK,CAAC,WAAW;QAC7B,UAAU,EAAE,KAAK,CAAC,WAAW;KAC9B,CAAC;IACF,KAAK,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,EAAE,kBAAkB,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAChE,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;QAAE,IAAI,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACzF,IAAI,IAAI,CAAC,iBAAiB;QAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAE9E,MAAM,2BAA2B,GAAG,CAAC;KAClC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,oCAAoC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;KAC3G,QAAQ,EAAE;KACV,QAAQ,CACP,qJAAqJ,CACtJ,CAAC;AAEJ,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC5E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACjF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IAC5F,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IACjF,aAAa,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IAClF,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAChG,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAChG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAChF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACnF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAChF,iBAAiB,EAAE,2BAA2B;CAC/C,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,iGAAiG,CAAC;IAC9G,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC5E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACjF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC5F,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACjF,aAAa,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAClF,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAChG,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAChG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAChF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACnF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAChF,iBAAiB,EAAE,2BAA2B;CAC/C,CAAC;AAgBF,gFAAgF;AAChF,MAAM,UAAU,2BAA2B,CACzC,IAA8B;IAE9B,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,IAAI,CAAC,iBAAiB;QAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxE,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -3,7 +3,7 @@ export const FREEMATICA_MCP_INSTRUCTIONS = `
3
3
 
4
4
  Este servidor expone operaciones del API REST de Freemática como tools MCP.
5
5
 
6
- ## Tools disponibles (8)
6
+ ## Tools destacadas (lista parcial; el resto se descubren vía tools/list)
7
7
 
8
8
  ### Materiales (1)
9
9
 
@@ -48,6 +48,49 @@ para que puedas paginar (\`page = total / items + 1\`).
48
48
  AVISO: NO uses \`page=0\` (este parámetro lo bloquea al mínimo 1). El API real
49
49
  trata \`page=0\` como "devuelve TODO el dataset" — puede ser muchos MB.
50
50
 
51
+ ## Contratos y Servicios
52
+
53
+ Lectura (siempre disponibles):
54
+
55
+ - **freematica_list_contratos(page, items, empresa?, delegacion?, order?)** —
56
+ Cabeceras de contratos (campos CTRT_*). AVISO: el API ignora los filtros
57
+ FIQL en este endpoint; solo funcionan empresa/delegacion (params nativos).
58
+ - **freematica_get_contrato(empresa, codContrato, delegacion?)** — Busca un
59
+ contrato por códigos naturales paginando internamente (puede tardar en
60
+ datasets grandes). Devuelve la cabecera con su \`idReg\`.
61
+ - **freematica_list_servicios_contrato(idContrato, page, items)** — Servicios
62
+ de un contrato (campos CTRTS_*). \`idContrato\` = idReg del contrato.
63
+ - **freematica_get_servicio_contrato(idReg)** — Detalle de un servicio.
64
+ - **freematica_list_contratos_opcionales(page, items)** /
65
+ **freematica_get_contrato_opcionales(idReg)** — Opcionales de contratos
66
+ (campos CON2_*, módulo ppre).
67
+
68
+ Escritura (solo si el servidor arranca con FREEMATICA_ENABLE_WRITES=true;
69
+ no existe borrado):
70
+
71
+ - **freematica_create_contrato** / **freematica_update_contrato** — Alta y
72
+ actualización de cabeceras. Requeridos en alta: delegacion, descripcion,
73
+ fecha, codCliente.
74
+ - **freematica_create_servicio_contrato(idContrato, …)** — Alta de servicio;
75
+ los campos de identificación se derivan del idReg del contrato.
76
+ - **freematica_update_servicio_fechas(idContrato, idServicio, fechaAlta?,
77
+ fechaFin?)** — Único mecanismo de "baja" de un servicio: informar fechaFin.
78
+ - **freematica_create_servicio_historico_precios** /
79
+ **freematica_update_servicio_historico_precios** — Los precios de un
80
+ servicio se gestionan como histórico versionado, separado del servicio.
81
+ - **freematica_create_servicio_facturacion_txt** — Líneas de texto de factura.
82
+ - **freematica_update_servicio_facturacion** — Datos de facturación (precios
83
+ hora, importes, forma de pago); campos avanzados vía camposAdicionales
84
+ (CTRTF_*).
85
+ - **freematica_create_contrato_opcionales** /
86
+ **freematica_update_contrato_opcionales** — Opcionales (campos CON2_*).
87
+
88
+ Flujo típico para crear un contrato completo:
89
+ 1. freematica_create_contrato → devuelve idReg.
90
+ 2. freematica_create_servicio_contrato por cada servicio.
91
+ 3. freematica_create_servicio_historico_precios con los precios.
92
+ 4. (opcional) freematica_create_servicio_facturacion_txt.
93
+
51
94
  ## IDs opacos en endpoints de detalle
52
95
 
53
96
  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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiF1C,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4H1C,CAAC,IAAI,EAAE,CAAC"}
package/dist/server.d.ts CHANGED
@@ -2,5 +2,11 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import type { FreematicaClient } from './clients/freematica-client.js';
3
3
  export interface CreateFreematicaServerOptions {
4
4
  client: FreematicaClient;
5
+ /**
6
+ * Registra también las tools de escritura (freematica_create_* /
7
+ * freematica_update_*). Default: false (servidor de solo lectura).
8
+ * Los transports lo alimentan desde FREEMATICA_ENABLE_WRITES.
9
+ */
10
+ enableWrites?: boolean;
5
11
  }
6
12
  export declare function createFreematicaServer(opts: CreateFreematicaServerOptions): McpServer;
package/dist/server.js CHANGED
@@ -7,7 +7,7 @@ import { registerCarteraTools } from './tools/cartera.js';
7
7
  import { registerClientesTools } from './tools/clientes.js';
8
8
  import { registerContactosClientesTools } from './tools/contactos-clientes.js';
9
9
  import { registerContabilidadTools } from './tools/contabilidad.js';
10
- import { registerContratosTools } from './tools/contratos.js';
10
+ import { registerContratosTools } from './tools/contratos/index.js';
11
11
  import { registerFacturasComprasTools } from './tools/facturas-compras.js';
12
12
  import { registerFacturasElectronicasTools } from './tools/facturas-electronicas.js';
13
13
  import { registerFacturasVentasTools } from './tools/facturas-ventas.js';
@@ -20,7 +20,7 @@ import { registerPrlTools } from './tools/prl.js';
20
20
  import { registerProveedoresTools } from './tools/proveedores.js';
21
21
  export function createFreematicaServer(opts) {
22
22
  const server = new McpServer({ name: 'freematica-mcp', version: VERSION }, { instructions: FREEMATICA_MCP_INSTRUCTIONS });
23
- registerContratosTools(server, opts.client);
23
+ registerContratosTools(server, opts.client, { enableWrites: opts.enableWrites ?? false });
24
24
  registerMasterDataTools(server, opts.client);
25
25
  registerClientesTools(server, opts.client);
26
26
  registerContactosClientesTools(server, opts.client);
@@ -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,sBAAsB,CAAC;AAC9D,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;AAMlE,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,CAAC,CAAC;IAC5C,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,7 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { FreematicaClient } from '../../clients/freematica-client.js';
3
+ export interface RegisterOptions {
4
+ enableWrites: boolean;
5
+ }
6
+ /** Tools de cabecera de contrato: list/get (lectura) + create/update (escritura). */
7
+ export declare function registerCabeceraTools(server: McpServer, client: FreematicaClient, opts: RegisterOptions): void;