// Auto-generated by MCX from API documentation
// Generated: 2026-02-16T22:26:28.836Z
// Endpoints: 233
import { defineAdapter, z } from '@mcx/core';
// Common schemas
const IdParam = z.object({ id: z.string() });
const PaginationParams = z.object({
start: z.number().optional(),
limit: z.number().optional(),
});
export const alegra = defineAdapter({
name: 'alegra',
config: z.object({
token: z.string().describe('API token (base64 encoded credentials)'),
baseUrl: z.string().default('https://api.alegra.com/api/v1'),
}),
methods: {
updateWebhooksSubscriptionsById: {
description: "Editar una suscripción",
input: z.object({
id: z.string(),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/webhooks/subscriptions/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createWebhooksSubscriptions: {
description: "Crear una suscripción",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/webhooks/subscriptions`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getWebhooksSubscriptions: {
description: "Listar suscripciones",
input: z.object({}),
output: z.any(),
async handler(params, ctx) {
const url = `/webhooks/subscriptions`;
const res = await ctx.fetch(url);
return res.json();
},
},
getWebhooksSubscriptionsById: {
description: "Consultar una suscripción",
input: z.object({
id: z.string(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/webhooks/subscriptions/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
deleteWebhooksSubscriptionsById: {
description: "Eliminar una suscripción",
input: z.object({
id: z.string(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/webhooks/subscriptions/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
getSellers: {
description: "Endpoint para consultar vendedores",
input: z.object({
start: z.number().optional().describe("Desde cual vendedor se quiere consultar. Por ejemplo para consultar desde el vendedor 20, se envía s"),
limit: z.number().optional().describe("Cantidad de vendedores a partir del inicio que se desea retornar. Por defecto retorna 30 vendedores"),
status: z.array(z.any()).optional().describe("Filtrar por estado del vendedor"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.status !== undefined) query.set('status', String(params.status));
const url = `/sellers` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getSellersById: {
description: "Endpoint para consultar un vendedor",
input: z.object({
id: z.number().describe("Identificador del vendedor"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/sellers/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
updateSellersById: {
description: "Endpoint para editar un vendedor",
input: z.object({
id: z.number().describe("Identificador del vendedor"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/sellers/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
deleteSellersById: {
description: "Endpoint para eliminar un vendedor",
input: z.object({
id: z.number().describe("Identificador del vendedor"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/sellers/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
createSellers: {
description: "Endpoint para crear un vendedor",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/sellers`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
updateVariantAttributesById: {
description: "Editar atributos variante",
input: z.object({
id: z.string().describe("Identificador de la variante que se quiere editar."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/variant-attributes/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createVariantAttributes: {
description: "Crear atributos variante",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/variant-attributes`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getVariantAttributes: {
description: "Listado de atributos variantes",
input: z.object({
start: z.number().optional().describe("Desde cual variante se quiere consultar. Por ejemplo para consultar desde el registro 20, se envía s"),
limit: z.number().optional().describe("Cantidad de registros a partir del inicio que se desea retornar. Por defecto retorna 30 registros. S"),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
order_field: z.string().optional().describe("Campo por el cual ordenar. Valores posibles 'name'"),
order_direction: z.string().optional().describe("ASC o DESC"),
fields: z.string().optional().describe("Campos adicionales para retornar. Se puede enviar los siguientes valores separados por coma: editabl"),
name: z.string().optional().describe("Filtrar variantes por nombre"),
options: z.string().optional().describe("Filtrar variantes por opciones"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.fields !== undefined) query.set('fields', String(params.fields));
if (params.name !== undefined) query.set('name', String(params.name));
if (params.options !== undefined) query.set('options', String(params.options));
const url = `/variant-attributes` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getVariantAttributesById: {
description: "Consultar atributos variante",
input: z.object({
id: z.string().describe("Identificador de la variante que se desea consultar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/variant-attributes/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
deleteVariantAttributesById: {
description: "Eliminar atributos variante",
input: z.object({
id: z.string().describe("Identificador de la variante que se desea eliminar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/variant-attributes/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateWarehouseTransfersById: {
description: "Editar transferencia de bodegas",
input: z.object({
id: z.string().describe("Id de la transferencia que se quiere editar"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/warehouse-transfers/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createWarehouseTransfers: {
description: "Crear transferencia de bodegas",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/warehouse-transfers`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getWarehouseTransfers: {
description: "Listado de transferencias de bodegas",
input: z.object({
start: z.number().optional().describe("Desde cual transferencia se quiere consultar"),
limit: z.number().optional().describe("Cantidad de transferencias a partir del inicio que se desea retornar"),
item_id: z.number().optional().describe("Recuperar las transferencias que ha tenido un ítem especifico"),
date: z.string().optional().describe("Filtrar transferencias por una fecha especifica"),
editable: z.boolean().optional().describe("Retorna si la transferencia de bodegas se puede editar. Se debe enviar con el parámetro `fields`. Ej"),
deletable: z.boolean().optional().describe("Retorna si la transferencia de bodegas se puede eliminar. Se debe enviar con el parámetro `fields`. "),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.item_id !== undefined) query.set('item_id', String(params.item_id));
if (params.date !== undefined) query.set('date', String(params.date));
if (params.editable !== undefined) query.set('editable', String(params.editable));
if (params.deletable !== undefined) query.set('deletable', String(params.deletable));
const url = `/warehouse-transfers` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getWarehouseTransfersById: {
description: "Consultar una transferencia de bodegas",
input: z.object({
id: z.string().describe("Id de la transferencia que se quiere consultar"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/warehouse-transfers/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
deleteWarehouseTransfersById: {
description: "Eliminar transferencia de bodegas",
input: z.object({
id: z.string().describe("Id de la transferencia que se quiere eliminar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/warehouse-transfers/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updatePriceListsById: {
description: "Editar lista de precio",
input: z.object({
id: z.string().describe("Identificador de la lista de precios que se quiere editar."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/price-lists/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createPriceLists: {
description: "Crear lista de precio",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/price-lists`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getPriceLists: {
description: "Listar listas de precios",
input: z.object({
query: z.string().optional().describe("Cadena de texto que se quiere utilizar para buscar las listas de precio que en su nombre contienen d"),
start: z.string().optional().describe("Desde cual registro se desea consultar. Por ejemplo para consultar desde el registro 20, se envía st"),
limit: z.string().optional().describe("Cantidad de registros a partir del inicio que se desea retornar. Por defecto retorna 30 registros. S"),
metadata: z.string().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
order_field: z.string().optional().describe("Campo por el cual ordenar. Valores posibles 'name', 'id'"),
order_direction: z.string().optional().describe("ASC o DESC"),
fields: z.string().optional().describe("Campos adicionales para retornar. Se puede enviar los siguientes valores separados por coma: editabl"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.query !== undefined) query.set('query', String(params.query));
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/price-lists` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getPriceListsById: {
description: "Consultar lista de precio",
input: z.object({
id: z.string().describe("Identificador de la lista de precios que se desea consultar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/price-lists/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
deletePriceListsById: {
description: "Eliminar lista de precio",
input: z.object({
id: z.string().describe("Identificador de la lista de precios que se desea eliminar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/price-lists/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateItemsById: {
description: "Editar ítem",
input: z.object({
id: z.string().describe("Identificador del producto o servicio que se desea editar. Se debe enviar en la URL"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/items/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createItems: {
description: "Crear ítem",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/items`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createItemsByIdAttachment: {
description: "Adjuntar un archivo a un ítem",
input: z.object({
id: z.string().describe("Identificador del producto o servicio al cual se desea adjuntar el archivo o la imagen"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/items/${params.id}/attachment`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getItems: {
description: "Listado de items",
input: z.object({
start: z.number().optional().describe("Desde cual producto/servicio se quiere consultar. Por ejemplo para consultar desde el producto/servi"),
limit: z.number().optional().describe("Cantidad de productos/servicios a partir del inicio que se desea retornar. Por defecto retorna 30 pr"),
order_direction: z.string().optional().describe("Orden ascendente o descendente en el cual se quieren retornar los productos/servicios. Opciones disp"),
order_field: z.string().optional().describe("Campo por el cual se desea ordenar, las opciones posibles son name, id, reference, description."),
query: z.string().optional().describe("Cadena de texto que se quiere utilizar para buscar los productos/servicios que en su nombre o refere"),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el obje"),
idWarehouse: z.string().optional().describe("Identificador de bodega/almacén. Si se especifica este parámetro se retornan únicamente los producto"),
name: z.string().optional().describe("Nombre del producto o servicio. Longitud máxima permitida: 150."),
reference: z.string().optional().describe("Para Costa Rica, el atributo reference es un objeto compuesto por los siguientes atributos: `type(st"),
price: z.string().optional().describe("Array de objetos que indica las listas de precio asociadas al producto o servicio. Los objetos debe"),
description: z.string().optional().describe("Descripción del producto o servicio. Longitud máxima permitida: 500."),
priceList_id: z.string().optional().describe("Filtrar por el id de la lista de precios."),
idItemCategory: z.string().optional().describe("Identificador de categoría de ítem. Si se especifica este parámetro se retornan únicamente los produ"),
type: z.string().optional().describe("Indica el tipo de producto. Las opciones posibles son simple o kit"),
variantAttribute_id: z.string().optional().describe("Identificador de atributo variante. Si se especifica este parámetro se retornan únicamente los produ"),
variantAttributeOption_id: z.string().optional().describe("Identificador de la opción de un atributo variante. Si se especifica este parámetro se retornan únic"),
variantParent_id: z.string().optional().describe("Identificador del item con variantes (item padre). Si se especifica este parámetro se retornan única"),
customField_id: z.string().optional().describe("Identificador del campo adicional. Si se especifica este parámetro se retornan únicamente los produc"),
customField_value: z.string().optional().describe("Valor del campo adicional. Si se especifica este parámetro se retornan únicamente los productos que "),
status: z.string().optional().describe("Estado del producto o servicio, las opciones posibles son: active o inactive. Se debe tener en cuen"),
inventariable: z.boolean().optional().describe("Filtrar items inventariables, envía true si deseas obtener únicamente items inventariables."),
fields: z.string().optional().describe("Identificador de atributos que se desean obtener en la respuesta separados por coma (,). Ej: variant"),
mode: z.enum(["advanced", "simple"]).optional().describe("El modo simple permite traer los items excluyendo los siguientes atributos: `category`, `attachments"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.query !== undefined) query.set('query', String(params.query));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.idWarehouse !== undefined) query.set('idWarehouse', String(params.idWarehouse));
if (params.name !== undefined) query.set('name', String(params.name));
if (params.reference !== undefined) query.set('reference', String(params.reference));
if (params.price !== undefined) query.set('price', String(params.price));
if (params.description !== undefined) query.set('description', String(params.description));
if (params.priceList_id !== undefined) query.set('priceList_id', String(params.priceList_id));
if (params.idItemCategory !== undefined) query.set('idItemCategory', String(params.idItemCategory));
if (params.type !== undefined) query.set('type', String(params.type));
if (params.variantAttribute_id !== undefined) query.set('variantAttribute_id', String(params.variantAttribute_id));
if (params.variantAttributeOption_id !== undefined) query.set('variantAttributeOption_id', String(params.variantAttributeOption_id));
if (params.variantParent_id !== undefined) query.set('variantParent_id', String(params.variantParent_id));
if (params.customField_id !== undefined) query.set('customField_id', String(params.customField_id));
if (params.customField_value !== undefined) query.set('customField_value', String(params.customField_value));
if (params.status !== undefined) query.set('status', String(params.status));
if (params.inventariable !== undefined) query.set('inventariable', String(params.inventariable));
if (params.fields !== undefined) query.set('fields', String(params.fields));
if (params.mode !== undefined) query.set('mode', String(params.mode));
const url = `/items` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getItemsById: {
description: "Consultar un ítem",
input: z.object({
id: z.string().describe("Id del producto o servicio que se desea consultar."),
fields: z.string().optional().describe("Identificador de atributos que se desean obtener en la respuesta separados por coma (,). Ej: variant"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/items/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteItems: {
description: "Eliminar ítem",
input: z.object({
id: z.string().optional().describe("Identificadores de los productos que se desean eliminar se parados por (,). Ejemplo: `/items?id=1,2,"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.id !== undefined) query.set('id', String(params.id));
const url = `/items` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
deleteItemsById: {
description: "Eliminar ítem",
input: z.object({
id: z.string().describe("Identificador del producto o servicio que se desea eliminar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/items/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
deleteItemsAttachmentById: {
description: "Eliminar un adjunto de un ítem",
input: z.object({
idAttachment: z.string().describe("Identificador del archivo adjunto que se desea eliminar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/items/attachment/${params.idAttachment}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateItemCategoriesById: {
description: "Editar categoría de item",
input: z.object({
id: z.string().describe("Identificador de la categoría de item que se quiere editar."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/item-categories/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createItemCategories: {
description: "Crear categoría de item",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/item-categories`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createItemCategoriesByIdAttachment: {
description: "Adjuntar archivo a una categoría de items",
input: z.object({
id: z.string().describe("Identificador de la categoría de item al cual se desea adjuntar el archivo o la imagen"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/item-categories/${params.id}/attachment`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getItemCategories: {
description: "Listado de categoría de items",
input: z.object({
start: z.number().optional().describe("Desde cual categoría de item se quiere consultar. Por ejemplo para consultar desde el registro 20, s"),
limit: z.number().optional().describe("Cantidad de registros a partir del inicio que se desea retornar. Por defecto retorna 30 registros. S"),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
order_field: z.string().optional().describe("Campo por el cual ordenar. Valores posibles 'name'"),
status: z.string().optional().describe("Filtrar categoría de items por estado. Se puede enviar los estados: active, inactive"),
name: z.string().optional().describe("Filtrar categoría de items por nombre"),
description: z.string().optional().describe("Filtrar categoría de items por descripción"),
order_direction: z.string().optional().describe("ASC o DESC"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.status !== undefined) query.set('status', String(params.status));
if (params.name !== undefined) query.set('name', String(params.name));
if (params.description !== undefined) query.set('description', String(params.description));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
const url = `/item-categories` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getItemCategoriesById: {
description: "Consultar categoría de item",
input: z.object({
id: z.string().describe("Identificador de la categoría de item que se desea consultar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/item-categories/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
deleteItemCategoriesById: {
description: "Eliminar categoría de item",
input: z.object({
id: z.string().describe("Identificador de la categoría de item que se desea eliminar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/item-categories/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
deleteItemCategoriesAttachmentById: {
description: "Eliminar un archivo adjunto de una categoría de items",
input: z.object({
idAttachment: z.string().describe("Identificador del archivo adjunto que se desea eliminar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/item-categories/attachment/${params.idAttachment}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateWarehousesById: {
description: "Editar bodega",
input: z.object({
id: z.string().describe("Identificador de la bodega que se quiere editar."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/warehouses/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createWarehouses: {
description: "Crear bodega",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/warehouses`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getWarehouses: {
description: "Listado de bodegas",
input: z.object({
start: z.number().optional().describe("Desde cual bodega se quiere consultar. Por ejemplo para consultar desde el registro 20, se envía sta"),
limit: z.number().optional().describe("Cantidad de registros a partir del inicio que se desea retornar. Por defecto retorna 30 registros. S"),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
order_field: z.string().optional().describe("Campo por el cual ordenar. Valores posibles 'name', 'id'"),
order_direction: z.string().optional().describe("ASC o DESC"),
fields: z.string().optional().describe("Campos adicionales para retornar. Se puede enviar los siguientes valores separados por coma: editabl"),
name: z.string().optional().describe("Filtrar bodega por nombre"),
status: z.string().optional().describe("Filtrar bodega por estado. Valores permitidos: 'active', 'inactive'"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.fields !== undefined) query.set('fields', String(params.fields));
if (params.name !== undefined) query.set('name', String(params.name));
if (params.status !== undefined) query.set('status', String(params.status));
const url = `/warehouses` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getWarehousesById: {
description: "Consultar bodega",
input: z.object({
id: z.string().describe("Identificador de la bodega que se desea consultar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/warehouses/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
deleteWarehousesById: {
description: "Eliminar bodega",
input: z.object({
id: z.string().describe("Identificador de la bodega que se desea eliminar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/warehouses/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateCustomFieldsById: {
description: "Editar campo adicional",
input: z.object({
id: z.string().describe("Identificador del campo adicional que se quiere editar."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/custom-fields/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createCustomFields: {
description: "Crear campo adicional",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/custom-fields`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getCustomFields: {
description: "Listar campos adicionales",
input: z.object({
start: z.number().optional().describe("Desde cual campo se quiere consultar. Por ejemplo para consultar desde el campo 20, se envía start="),
limit: z.number().optional().describe("Cantidad de campos a partir del inicio que se desea retornar. Por defecto retorna 30 atributos. Si"),
name_query: z.string().optional().describe("Cadena de texto que se utiliza para consultar campos adicionales que contengan dicho texto en su no"),
description_query: z.string().optional().describe("Cadena de texto que se utiliza para consultar campos adicionales que contengan dicho texto en su de"),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
status: z.string().optional().describe("Filtrar campos adicionales por el estado. Se retornarán todos los campos adicionales cuyo estado ac"),
resourceType: z.string().optional().describe("Filtrar campos adicionales por el tipo de recurso asociado. Se retornarán todos los campos adiciona"),
type: z.string().optional().describe("Filtrar campos adicionales por el tipo de campo. Se retornarán todos los campos adicionales que sea"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.name_query !== undefined) query.set('name_query', String(params.name_query));
if (params.description_query !== undefined) query.set('description_query', String(params.description_query));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.status !== undefined) query.set('status', String(params.status));
if (params.resourceType !== undefined) query.set('resourceType', String(params.resourceType));
if (params.type !== undefined) query.set('type', String(params.type));
const url = `/custom-fields` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getCustomFieldsById: {
description: "Consultar campo adicional",
input: z.object({
id: z.string().describe("Identificador del campo adicional que se desea consultar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/custom-fields/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
deleteCustomFieldsById: {
description: "Eliminar campo adicional",
input: z.object({
id: z.string().describe("Identificador del campo adicional que se desea eliminar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/custom-fields/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateInventoryAdjustmentsNumerationsById: {
description: "Editar numeración de ajuste de inventario",
input: z.object({
id: z.string().describe("Identificador de la numeración que se quiere editar."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/inventory-adjustments/numerations/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
updateInventoryAdjustmentsById: {
description: "Editar ajuste de inventario",
input: z.object({
id: z.string().describe("Id del ajuste de inventario que se quiere editar"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/inventory-adjustments/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createInventoryAdjustments: {
description: "Crear ajuste de inventario",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/inventory-adjustments`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createInventoryAdjustmentsNumerations: {
description: "Crear numeración de ajuste de inventario",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/inventory-adjustments/numerations`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getInventoryAdjustments: {
description: "Listado de ajustes de inventario",
input: z.object({
start: z.number().optional().describe("Desde cual ajuste se quiere consultar. Por ejemplo para consultar desde el ajuste 20, se envía start"),
limit: z.number().optional().describe("Cantidad de ajustes a partir del inicio que se desea retornar. Por defecto retorna 30 ajustes. Si es"),
order_direction: z.string().optional().describe("Orden ascendente o descendente en el cual se quieren retornar la información. Opciones disponibles s"),
order_field: z.string().optional().describe("Campo por el cual se desea ordenar, las opciones posibles son id, number, date, observations, wareho"),
number: z.number().optional().describe("Campo para filtrar por id del ajuste"),
date: z.string().optional().describe("Campo para filtrar ajustes por fecha"),
warehouse_id: z.string().optional().describe("Campo para filtrar ajustes por id de bodega"),
metadata: z.string().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.number !== undefined) query.set('number', String(params.number));
if (params.date !== undefined) query.set('date', String(params.date));
if (params.warehouse_id !== undefined) query.set('warehouse_id', String(params.warehouse_id));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
const url = `/inventory-adjustments` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getInventoryAdjustmentsNumerations: {
description: "Listar numeraciones de ajustes de inventario",
input: z.object({
start: z.string().optional().describe("Desde cual registro se desea consultar. Por ejemplo para consultar desde el registro 20, se envía s"),
limit: z.string().optional().describe("Cantidad de registros a partir del inicio que se desea retornar. Por defecto retorna 20 registros. "),
name: z.string().optional().describe("Cadena de texto que se quiere utilizar para buscar las numeraciones que en su nombre contienen dicho"),
autoIncrement: z.boolean().optional().describe("Cuando es true retorna las numeraciones autoincrementales, y cuando es false se retornan las no auto"),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
status: z.boolean().optional().describe("Filtras las numeraciones por su estado, ya sea 'active' o 'inactive'"),
fields: z.string().optional().describe("Campos adicionales para retornar. Actualmente solo se puede enviar 'nextNumber'"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.name !== undefined) query.set('name', String(params.name));
if (params.autoIncrement !== undefined) query.set('autoIncrement', String(params.autoIncrement));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.status !== undefined) query.set('status', String(params.status));
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/inventory-adjustments/numerations` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getInventoryAdjustmentsNumerationsById: {
description: "Consultar una numeración de ajuste de inventario",
input: z.object({
id: z.string().describe("Identificador de la numeración que se desea consultar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/inventory-adjustments/numerations/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
getInventoryAdjustmentsById: {
description: "Consultar ajuste de inventario",
input: z.object({
id: z.string().describe("Id del ajuste de inventario que se quiere consultar"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/inventory-adjustments/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
deleteInventoryAdjustmentsNumerationsById: {
description: "Eliminar numeración de ajuste de inventario",
input: z.object({
id: z.string().describe("Identificador de la numeración que se desea eliminar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/inventory-adjustments/numerations/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
deleteInventoryAdjustmentsById: {
description: "Eliminar ajuste de inventario",
input: z.object({
id: z.string().describe("Id del ajuste de inventario que se quiere eliminar"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/inventory-adjustments/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateRemissionsById: {
description: "Editar una remisión",
input: z.object({
id: z.string().describe("Id de la remisión que se desea editar. Se debe enviar en la URL."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/remissions/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createRemissions: {
description: "Crea una remisión",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/remissions`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createRemissionsByIdVoid: {
description: "Anular remisión",
input: z.object({
id: z.string().describe("Id de la remisión que se desea anular."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/remissions/${params.id}/void`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createRemissionsByIdOpen: {
description: "Abrir remisión",
input: z.object({
id: z.string().describe("Id de la remisión que se desea abrir."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/remissions/${params.id}/open`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createRemissionsByIdAttachment: {
description: "Adjuntar archivos o imágenes",
input: z.object({
id: z.string().describe("Id de la remisión a la cual se desea adjuntar el archivo"),
Content-Type: z.string().describe("multipart/form-data"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/remissions/${params.id}/attachment`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getRemissions: {
description: "Lista de remisiones",
input: z.object({
start: z.number().optional().describe("Desde cual remisión se quiere consultar. Por ejemplo para consultar desde la remisión 20, se envía s"),
limit: z.number().optional().describe("Cantidad de remisiones a partir del inicio que se desea retornar. Por defecto retorna 30 remisiones"),
order_direction: z.string().optional().describe("Orden ascendente o descendente en el cual se quieren retornar las remisiones. Opciones disponibles "),
order_field: z.string().optional().describe("Campo por el cual se desea ordenar, las opciones posibles son id, name, date, dueDate."),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
client_id: z.string().optional().describe("Filtra las remisiones por id del cliente."),
attachment: z.boolean().optional().describe("Retornar los archivos adjuntos de la órden de compra."),
item_id: z.string().optional().describe("Filtra las remisiones por id del item."),
number: z.string().optional().describe("Numeración de la remisión por la cual se desea filtrar, se puede especificar el prefijo y el numero."),
client_name: z.string().optional().describe("Nombre del cliente el cual se desea filtrar las remisiones."),
date: z.string().optional().describe("Fecha de la remisión la cual se desea filtrar."),
dueDate: z.string().optional().describe("Fecha de vencimiento la cual se desea filtrar las remisiones."),
status: z.string().optional().describe("Estado de la remisión el cual se desea filtrar, las opciones disponibles son: `open`, `void` y `clos"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.client_id !== undefined) query.set('client_id', String(params.client_id));
if (params.attachment !== undefined) query.set('attachment', String(params.attachment));
if (params.item_id !== undefined) query.set('item_id', String(params.item_id));
if (params.number !== undefined) query.set('number', String(params.number));
if (params.client_name !== undefined) query.set('client_name', String(params.client_name));
if (params.date !== undefined) query.set('date', String(params.date));
if (params.dueDate !== undefined) query.set('dueDate', String(params.dueDate));
if (params.status !== undefined) query.set('status', String(params.status));
const url = `/remissions` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getRemissionsById: {
description: "Consultar una remisión",
input: z.object({
id: z.string().describe("Id de la remisión que se desea consultar. Se debe enviar en la URL."),
fields: z.string().optional().describe("Los campos adicionales que se requieran se deben especificar separados por `,` (Actualmente pdf, url"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/remissions/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteRemissionsById: {
description: "Eliminar una remisión",
input: z.object({
id: z.string().describe("Id de la remisión que se desea eliminar. Se debe enviar en la URL."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/remissions/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
deleteRemissionsAttachmentById: {
description: "Eliminar archivos adjuntos",
input: z.object({
idAttachment: z.string().describe("Id del archivo adjunto a la cual se desea eliminar el archivo"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/remissions/attachment/${params.idAttachment}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updatePaymentsById: {
description: "Editar pago",
input: z.object({
id: z.string().describe("Id del pago que se desea editar. Se debe enviar en la URL."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/payments/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createPaymentsByIdVoid: {
description: "Anular pago",
input: z.object({
id: z.string().describe("Id del pago que se desea anular. Se debe enviar en la URL."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/payments/${params.id}/void`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createPaymentsByIdOpen: {
description: "Convertir pago a abierto",
input: z.object({
id: z.string().describe("Id del pago al cual se le desea revertir la anulación. Se debe enviar en la URL."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/payments/${params.id}/open`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createPaymentsByIdAttachment: {
description: "Adjuntar archivos a pagos",
input: z.object({
id: z.string().describe("Id del pago al cual se desea adjuntar el archivo"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/payments/${params.id}/attachment`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createPayments: {
description: "Crear pago",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/payments`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getPaymentsById: {
description: "Consultar un pago",
input: z.object({
id: z.string().describe("Id del pago que se desea consultar. Se debe enviar en la URL."),
account_id: z.string().optional().describe("Id de la cuenta de banco por la que se desea filtrar"),
conciliated: z.boolean().optional().describe("Filtrar las transacciones conciliadas o no. Por default se devuelven ambas"),
fields: z.string().optional().describe("Para obtener los comentarios del pago se debe enviar el parámetro `fields` con el valor `comments`, "),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.account_id !== undefined) query.set('account_id', String(params.account_id));
if (params.conciliated !== undefined) query.set('conciliated', String(params.conciliated));
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/payments/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getPayments: {
description: "Lista de pagos",
input: z.object({
start: z.number().optional().describe("Desde cual pago se quiere consultar. Por ejemplo para consultar desde el pago 20, se envía start=20."),
limit: z.number().optional().describe("Cantidad de pagos a partir del inicio que se desea retornar. Por defecto retorna 30 pagos. Si este"),
order_direction: z.string().optional().describe("Orden ascendente o descendente en el cual se quieren retornar los pagos. Opciones disponibles son D"),
order_field: z.string().optional().describe("Campo por el cual se desea ordenar, las opciones posibles son id, number, date, type."),
type: z.string().optional().describe("Filtrar los pagos por ingresos o egresos, para ingresos se envía type como 'in', para egresos 'out'."),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el obje"),
id: z.string().optional().describe("Ids de los pagos. Sirve para consultar pagos específicos. Deben ir separados por coma (,) y sin espa"),
client_id: z.string().optional().describe("Filtra los ingresos y/o egresos por id del cliente."),
conciliation_id: z.string().optional().describe("Id de la conciliación. Permite recuperar los pagos asociados a una conciliación"),
includeUnconciliated: z.boolean().optional().describe("Incluye transacciones no conciliadas, debe ir junto con conciliation_id, de lo contrario se ignora e"),
fields: z.string().optional().describe("Permite recuperar campos adicionales. Se pueden incluir varios y deben ir separados por comas. Opcio"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.type !== undefined) query.set('type', String(params.type));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.id !== undefined) query.set('id', String(params.id));
if (params.client_id !== undefined) query.set('client_id', String(params.client_id));
if (params.conciliation_id !== undefined) query.set('conciliation_id', String(params.conciliation_id));
if (params.includeUnconciliated !== undefined) query.set('includeUnconciliated', String(params.includeUnconciliated));
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/payments` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deletePaymentsById: {
description: "Eliminar pago",
input: z.object({
id: z.string().describe("Id del pago que se desea editar. Se debe enviar en la URL."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/payments/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateRecurringInvoicesById: {
description: "Editar una factura recurrente",
input: z.object({
id: z.string().describe("Id de la factura recurrente que se desea editar."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/recurring-invoices/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createRecurringInvoices: {
description: "Crea una factura recurrente",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/recurring-invoices`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getRecurringInvoices: {
description: "Lista de facturas recurrentes",
input: z.object({
start: z.number().optional().describe("Índice a partir del cuál se devolverán las facturas recurrentes. Los resultados varian según el orde"),
limit: z.number().optional().describe("Cantidad de facturas recurrentes a partir del inicio que se desea retornar. Por defecto retorna 30 f"),
order_direction: z.string().optional().describe("Orden ascendente o descendente en el cual se quieren retornar las facturas recurrentes. Opciones dis"),
order_field: z.string().optional().describe("Campo por el cual se desea ordenar, las opciones posibles son name, startDate, endDate, repeatEvery "),
metadata: z.boolean().optional().describe("La cantidad total de facturas recurrentes se incluye en el resultado. Se debe tener en cuenta que si"),
startDate: z.string().optional().describe("Filtrar resultados según la fecha de inico de la factura recurrente."),
endDate: z.string().optional().describe("Filtrar resultados según la fecha de fin de la factura recurrente."),
repeatEvery: z.number().optional().describe("Filtrar resultados según el intervalo de la factura recurrente."),
term: z.number().optional().describe("Filtrar resultados según el término de pago de la factura recurrente."),
client_id: z.string().optional().describe("Filtrar resultados según el id del cliente de la factura recurrente."),
name: z.string().optional().describe("Filtrar resultados según el nombre del cliente de la factura recurrente."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.startDate !== undefined) query.set('startDate', String(params.startDate));
if (params.endDate !== undefined) query.set('endDate', String(params.endDate));
if (params.repeatEvery !== undefined) query.set('repeatEvery', String(params.repeatEvery));
if (params.term !== undefined) query.set('term', String(params.term));
if (params.client_id !== undefined) query.set('client_id', String(params.client_id));
if (params.name !== undefined) query.set('name', String(params.name));
const url = `/recurring-invoices` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getRecurringInvoicesById: {
description: "Consultar una factura recurrente",
input: z.object({
id: z.string().describe("Id de la factura recurrente que se desea consultar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/recurring-invoices/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
deleteRecurringInvoicesById: {
description: "Eliminar una factura recurrente",
input: z.object({
id: z.string().describe("Id de la factura recurrente que se desea eliminar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/recurring-invoices/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateGlobalInvoicesById: {
description: "Editar factura global",
input: z.object({
id: z.string().describe("Id de la factura global que se desea editar. Se debe enviar en la URL"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/global-invoices/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createGlobalInvoices: {
description: "Crear factura global",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/global-invoices`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getGlobalInvoices: {
description: "Lista de facturas globales",
input: z.object({}),
output: z.any(),
async handler(params, ctx) {
const url = `/global-invoices`;
const res = await ctx.fetch(url);
return res.json();
},
},
getGlobalInvoicesById: {
description: "Consultar una factura global",
input: z.object({
id: z.string().describe("Id de la factura global que se desea consultar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/global-invoices/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
deleteGlobalInvoicesById: {
description: "Eliminar factura global",
input: z.object({
id: z.string().describe("Identificador de la factura global que se desea eliminar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/global-invoices/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateCreditNotesById: {
description: "Editar nota crédito",
input: z.object({
id: z.string().describe("Identificador de la nota de crédito que se desea editar."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/credit-notes/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createCreditNotes: {
description: "Crear nota de crédito",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/credit-notes`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createCreditNotesByIdEmail: {
description: "Enviar nota de crédito por correo",
input: z.object({
id: z.string().describe("Identificador de la nota de crédito que se desea enviar por correo. Este parámetro se debe incluir e"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/credit-notes/${params.id}/email`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getCreditNotes: {
description: "Lista de notas de crédito",
input: z.object({
start: z.number().optional().describe("Desde cual nota de crédito se quiere consultar. Por ejemplo para consultar desde la nota de crédito "),
limit: z.number().optional().describe("Cantidad de notas de crédito a partir del inicio que se desea retornar. Por defecto retorna 30 nota"),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
id: z.string().optional().describe("Ids de las notas de crédito. Sirve para consultar notas específicas. Deben ir separados por coma (,)"),
item_id: z.string().optional().describe("Id del item por el cual se desea filtrar las notas de crédito."),
client_id: z.string().optional().describe("Id del cliente por el cual se desea filtrar las notas de crédito."),
attachment: z.boolean().optional().describe("Retorna un objeto attachment con los archivos adjuntos a la nota de crédito."),
number: z.string().optional().describe("Numeración de la nota de crédito por la cual se desea filtrar, se puede especificar el prefijo y el "),
client_name: z.string().optional().describe("Nombre del cliente el cual se desea filtrar las notas de crédito."),
date: z.string().optional().describe("Fecha de la nota de crédito la cual se desea filtrar."),
emission_status: z.string().optional().describe("Permite filtrar por estado de emisión de la nota crédito cuando es una nota crédito electrónica, los"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.id !== undefined) query.set('id', String(params.id));
if (params.item_id !== undefined) query.set('item_id', String(params.item_id));
if (params.client_id !== undefined) query.set('client_id', String(params.client_id));
if (params.attachment !== undefined) query.set('attachment', String(params.attachment));
if (params.number !== undefined) query.set('number', String(params.number));
if (params.client_name !== undefined) query.set('client_name', String(params.client_name));
if (params.date !== undefined) query.set('date', String(params.date));
if (params.emission_status !== undefined) query.set('emission_status', String(params.emission_status));
const url = `/credit-notes` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getCreditNotesById: {
description: "Consultar una nota de crédito",
input: z.object({
id: z.string().describe("Id de la nota de crédito que se desea consultar."),
fields: z.string().optional().describe("Para obtener los comentarios de la nota de crédito se debe enviar el parámetro `fields` con el valor"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/credit-notes/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteCreditNotesById: {
description: "Eliminar nota de crédito",
input: z.object({
id: z.string().describe("Identificador de la nota de crédito que se desea eliminar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/credit-notes/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateIncomeDebitNotesById: {
description: "Editar nota débito cliente",
input: z.object({
id: z.string().describe("Identificador de la nota de débito cliente que se desea editar."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/income-debit-notes/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createIncomeDebitNotes: {
description: "Crear nota débito cliente",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/income-debit-notes`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getIncomeDebitNotes: {
description: "Lista de notas débito cliente",
input: z.object({
status: z.enum(["open", "closed", "draft", "void"]).optional().describe("estado de la nota de debito cliente"),
client_name: z.string().optional().describe("Nombre del cliente por el cual se desea filtrar las notas de debito cliente."),
client_identification: z.string().optional().describe("Identificación del cliente por el cual se desea filtrar las notas de debito cliente."),
date: z.string().optional().describe("Fecha de la nota de debito cliente la cual se desea filtrar."),
dueDate: z.string().optional().describe("Fecha de vencimiento de la nota de debito cliente la cual se desea filtrar."),
prefix: z.string().optional().describe("Prefijo de la nota de debito cliente por el cual se desea filtrar."),
number: z.number().optional().describe("Numeración de la nota de debito cliente por la cual se desea filtrar."),
emission_status: z.enum(["PENDING", "STAMPED_AND_ACCEPTED", "STAMPED_AND_ACCEPTED_WITH_OBSERVATIONS", "STAMPED_AND_REJECTED", "STAMPED_AND_WAITING_RESPONSE"]).optional().describe("Estado de emisión de la nota debito cliente por la cual se desa filtrar."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.status !== undefined) query.set('status', String(params.status));
if (params.client_name !== undefined) query.set('client_name', String(params.client_name));
if (params.client_identification !== undefined) query.set('client_identification', String(params.client_identification));
if (params.date !== undefined) query.set('date', String(params.date));
if (params.dueDate !== undefined) query.set('dueDate', String(params.dueDate));
if (params.prefix !== undefined) query.set('prefix', String(params.prefix));
if (params.number !== undefined) query.set('number', String(params.number));
if (params.emission_status !== undefined) query.set('emission_status', String(params.emission_status));
const url = `/income-debit-notes` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getIncomeDebitNotesById: {
description: "Consultar una nota débito cliente",
input: z.object({
id: z.string().describe("Id de la nota de débito cliente que se desea consultar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/income-debit-notes/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
deleteIncomeDebitNotesById: {
description: "Eliminar nota débito cliente",
input: z.object({
id: z.string().describe("Identificador de la nota de débito cliente que se desea eliminar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/income-debit-notes/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateInvoicesById: {
description: "Editar factura de venta",
input: z.object({
id: z.string().describe("Identificador de la factura de venta que se desea editar."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
updateInvoicesByIdRetentionsApplied: {
description: "Edita las retenciones aplicadas a factura de venta",
input: z.object({
id: z.string().describe("Identificador de la factura de venta que se desea editar."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/${params.id}/retentionsApplied`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createInvoicesByIdEmail: {
description: "Enviar factura por correo",
input: z.object({
id: z.string().describe("Identificador de la factura que se desea enviar por correo. Este parámetro se debe incluir en la URL"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/${params.id}/email`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createInvoices: {
description: "Crear factura de venta",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createInvoicesStamp: {
description: "Emitir facturas de venta masivamente",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/stamp`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createInvoicesPreview: {
description: "Vista previa factura de venta",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/preview`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createInvoicesByIdVoid: {
description: "Anular factura de venta",
input: z.object({
id: z.string().describe("Identificador de la factura de venta que se desea anular."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/${params.id}/void`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createInvoicesByIdOpen: {
description: "Abrir factura de venta",
input: z.object({
id: z.string().describe("Identificador de la factura de venta que se desea abrir."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/${params.id}/open`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createInvoicesByIdAttachment: {
description: "Adjuntar archivos a facturas de venta",
input: z.object({
id: z.string().describe("Identificador de la factura de venta a la cual se desea adjuntar el archivo."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/${params.id}/attachment`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getInvoicesById: {
description: "Consultar una factura de venta",
input: z.object({
id: z.string().describe("Id de la factura que se desea consultar."),
fields: z.string().optional().describe("Se especifica los campos adicionales separados por , que se requieran (actualmente pdf, xml, comment"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/invoices/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getInvoices: {
description: "Lista de facturas de venta",
input: z.object({
start: z.number().optional().describe("Desde cual factura se quiere consultar. Por ejemplo para consultar desde la factura 20, se envía sta"),
limit: z.number().optional().describe("Cantidad de facturas a partir del inicio que se desea retornar. Por defecto retorna 30 facturas. Si"),
order_direction: z.string().optional().describe("Orden ascendente o descendente en el cual se quieren retornar las facturas. Opciones disponibles so"),
order_field: z.string().optional().describe("Campo por el cual se desea ordenar, las opciones posibles son id, name, date, dueDate, status."),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
id: z.string().optional().describe("Ids de las facturas de venta. Sirve para consultar facturas específicas. Deben ir separados por coma"),
date: z.string().optional().describe("Filtrar resultados según fecha de creación de la factura. Se retornarán todas las facturas de venta "),
dueDate: z.string().optional().describe("Filtrar resultados según fecha de vencimiento de la factura. Se retornarán todas las facturas de ve"),
status: z.string().optional().describe("Filtrar resultados según el estado de la factura. Se retornarán todas las facturas de venta que coi"),
client_id: z.string().optional().describe("Filtrar resultados según el identificador del cliente de la factura. Se retornarán todas las factur"),
client_name: z.string().optional().describe("Filtrar resultados según el nombre del cliente de la factura. Se retornarán todas las facturas de v"),
client_identification: z.string().optional().describe("Filtrar resultados según la identificación del cliente de la factura. Se retornarán todas las factu"),
numberTemplate_fullNumber: z.string().optional().describe("Filtrar resultados según la numeración de la factura. Se retornarán todas las facturas de venta que "),
item_id: z.string().optional().describe("Filtrar las facturas de venta por el id del item."),
date_after: z.string().optional().describe("Fecha del documento desde la cual se deben obtener los resultados. Consulta desde el dia siguiente e"),
date_afterOrNow: z.string().optional().describe("Fecha del documento desde la cual se deben obtener los resultados. Consulta desde el dia actual en a"),
date_before: z.string().optional().describe("Fecha del documento desde la cual se deben obtener los resultados. Consulta desde el dia anterior pa"),
date_beforeOrNow: z.string().optional().describe("Fecha del documento desde la cual se deben obtener los resultados. Consulta desde el dia actual para"),
dueDate_after: z.string().optional().describe("Fecha de vencimiento del documento desde la cual se deben obtener los resultados. Consulta desde el "),
dueDate_afterOrNow: z.string().optional().describe("Fecha de vencimiento del documento desde la cual se deben obtener los resultados. Consulta desde el "),
dueDate_before: z.string().optional().describe("Fecha de vencimeinto del documento desde la cual se deben obtener los resultados. Consulta desde el "),
dueDate_beforeOrNow: z.string().optional().describe("Fecha de vencimeinto del documento desde la cual se deben obtener los resultados. Consulta desde el "),
toReplace: z.boolean().optional().describe("Filtrar las facturas que necesitan ser sustituidas de un cliente. Cuando este campo se envía, es obl"),
download: z.boolean().optional().describe("Al enviar este parametro solicitas unicamente la descarga del PDF de hasta 10 facturas."),
downloadType: z.string().optional().describe("Las opciones pueden ser `1to1` y `all`. Al utilizar `all` solicitas unidos en un solo archivo pdf qu"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.id !== undefined) query.set('id', String(params.id));
if (params.date !== undefined) query.set('date', String(params.date));
if (params.dueDate !== undefined) query.set('dueDate', String(params.dueDate));
if (params.status !== undefined) query.set('status', String(params.status));
if (params.client_id !== undefined) query.set('client_id', String(params.client_id));
if (params.client_name !== undefined) query.set('client_name', String(params.client_name));
if (params.client_identification !== undefined) query.set('client_identification', String(params.client_identification));
if (params.numberTemplate_fullNumber !== undefined) query.set('numberTemplate_fullNumber', String(params.numberTemplate_fullNumber));
if (params.item_id !== undefined) query.set('item_id', String(params.item_id));
if (params.date_after !== undefined) query.set('date_after', String(params.date_after));
if (params.date_afterOrNow !== undefined) query.set('date_afterOrNow', String(params.date_afterOrNow));
if (params.date_before !== undefined) query.set('date_before', String(params.date_before));
if (params.date_beforeOrNow !== undefined) query.set('date_beforeOrNow', String(params.date_beforeOrNow));
if (params.dueDate_after !== undefined) query.set('dueDate_after', String(params.dueDate_after));
if (params.dueDate_afterOrNow !== undefined) query.set('dueDate_afterOrNow', String(params.dueDate_afterOrNow));
if (params.dueDate_before !== undefined) query.set('dueDate_before', String(params.dueDate_before));
if (params.dueDate_beforeOrNow !== undefined) query.set('dueDate_beforeOrNow', String(params.dueDate_beforeOrNow));
if (params.toReplace !== undefined) query.set('toReplace', String(params.toReplace));
if (params.download !== undefined) query.set('download', String(params.download));
if (params.downloadType !== undefined) query.set('downloadType', String(params.downloadType));
const url = `/invoices` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteInvoicesById: {
description: "Eliminar factura de venta",
input: z.object({
id: z.string().describe("Id de la factura que se desea eliminar. Ejemplo: /invoices/1"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
deleteInvoicesAttachmentById: {
description: "Eliminar archivos adjuntos",
input: z.object({
idAttachment: z.string().describe("Id del archivo adjunto a la cual se desea eliminar el archivo"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/attachment/${params.idAttachment}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateTransportationReceiptsById: {
description: "Editar documento de traslado",
input: z.object({
id: z.string().describe("Identificador del documento de traslado que se desea editar."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/transportation-receipts/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createTransportationReceipts: {
description: "Crear un documento de traslado",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/transportation-receipts`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createTransportationReceiptsPreview: {
description: "Vista previa de un documento de traslado",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/transportation-receipts/preview`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createTransportationReceiptsByIdVoid: {
description: "Anular documento de traslado",
input: z.object({
id: z.string().describe("Identificador del documento de traslado que se desea anular."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/transportation-receipts/${params.id}/void`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createTransportationReceiptsByIdOpen: {
description: "Abrir documento de traslado",
input: z.object({
id: z.string().describe("Identificador del documento de traslado que se desea abrir."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/transportation-receipts/${params.id}/open`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createTransportationReceiptsByIdEmail: {
description: "Enviar documento por correo",
input: z.object({
id: z.string().describe("Identificador de la factura que se desea enviar por correo. Este parámetro se debe incluir en la URL"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/transportation-receipts/${params.id}/email`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createTransportationReceiptsByIdAttachment: {
description: "Adjuntar archivos a un documento de traslado",
input: z.object({
id: z.string().describe("Identificador del documento de traslado a la cual se desea adjuntar el archivo."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/transportation-receipts/${params.id}/attachment`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getTransportationReceipts: {
description: "Lista de documentos de traslado",
input: z.object({
start: z.number().optional().describe("Desde cual factura se quiere consultar. Por ejemplo para consultar desde la factura 20, se envía sta"),
limit: z.number().optional().describe("Cantidad de facturas a partir del inicio que se desea retornar. Por defecto retorna 30 facturas. Si"),
order_direction: z.enum(["ASC", "DESC"]).optional().describe("Orden ascendente o descendente en el cual se quieren retornar las facturas. Opciones disponibles so"),
order_field: z.enum(["id", "date", "name", "dateShipping", "status", "number"]).optional().describe("Campo por el cual se desea ordenar, las opciones posibles son id, name, date, dueDate, status."),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
id: z.string().optional().describe("Ids de las facturas de tralasdo. Sirve para consultar facturas específicas. Deben ir separados por c"),
date: z.string().optional().describe("Filtrar resultados según fecha de creación de la factura. Se retornarán todas las facturas de tralas"),
dateShipping: z.string().optional().describe("Filtrar resultados según fecha de envio de la factura. Se retornarán todas las facturas de traslado"),
status: z.string().optional().describe("Filtrar resultados según el estado de la factura. Se retornarán todas las facturas de tralasdo que "),
client_id: z.string().optional().describe("Filtrar resultados según el identificador del cliente de la factura. Se retornarán todas las factur"),
number: z.string().optional().describe("Filtrar resultados según la numeración de la factura. Se retornarán todas las facturas de tralasdo q"),
item_id: z.string().optional().describe("Filtrar las facturas de tralasdo por el id del item."),
number_invoice: z.string().optional().describe("Filtrar resultados según la numeración de la factura de venta asociada al documento de traslado. Se "),
emission_status: z.enum(["STAMPED_AND_ACCEPTED", "STAMPED_AND_ACCEPTED_WITH_OBSERVATIONS", "STAMPED_AND_CANCELLED", "STAMPED_AND_WAITING_RESPONSE", "CANCELLED_AND_WAITING_RESPONS"]).optional().describe("Filtrar resultados según el estado de emisión de la factura. Se retornarán todas las facturas de tr"),
complement: z.enum(["yes", "no"]).optional().describe("Filtra los resultados según si cuenta con el complemento carta porte o no."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.id !== undefined) query.set('id', String(params.id));
if (params.date !== undefined) query.set('date', String(params.date));
if (params.dateShipping !== undefined) query.set('dateShipping', String(params.dateShipping));
if (params.status !== undefined) query.set('status', String(params.status));
if (params.client_id !== undefined) query.set('client_id', String(params.client_id));
if (params.number !== undefined) query.set('number', String(params.number));
if (params.item_id !== undefined) query.set('item_id', String(params.item_id));
if (params.number_invoice !== undefined) query.set('number_invoice', String(params.number_invoice));
if (params.emission_status !== undefined) query.set('emission_status', String(params.emission_status));
if (params.complement !== undefined) query.set('complement', String(params.complement));
const url = `/transportation-receipts` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getTransportationReceiptsById: {
description: "Consultar un documento de traslado",
input: z.object({
id: z.string().describe("Id de la factura que se desea consultar."),
fields: z.enum(["editable", "deletable", "voidable", "comments", "pdf", "url", "xml"]).optional().describe("Se especifica los campos adicionales separados por , que se requieran ,por ejemplo para obtener la u"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/transportation-receipts/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteTransportationReceiptsById: {
description: "Eliminar documento de traslado",
input: z.object({
id: z.string().describe("Id del documento que se desea eliminar. Ejemplo: /transportation-receipts/1"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/transportation-receipts/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
deleteTransportationReceiptsAttachmentById: {
description: "Eliminar archivos adjuntos",
input: z.object({
idAttachment: z.string().describe("Id del archivo adjunto que se desea eliminar"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/transportation-receipts/attachment/${params.idAttachment}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateEstimatesById: {
description: "Editar una cotización",
input: z.object({
id: z.string().describe("Id de la cotización que se desea editar. Se debe enviar en la URL."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/estimates/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createEstimates: {
description: "Crear una cotización",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/estimates`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createEstimatesByIdEmail: {
description: "Enviar cotización por correo",
input: z.object({
id: z.string().describe("Id de la cotización que se desea enviar por correo. Se debe enviar en la URL."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/estimates/${params.id}/email`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getEstimates: {
description: "Lista de cotizaciones",
input: z.object({
start: z.number().optional().describe("Desde cual cotización se quiere consultar. Por ejemplo para consultar desde la cotización 20, se env"),
limit: z.number().optional().describe("Cantidad de cotizaciones a partir del inicio que se desea retornar. Por defecto retorna 30 cotizaci"),
order_direction: z.string().optional().describe("Orden ascendente o descendente en el cual se quieren retornar las cotizaciones. Opciones disponible"),
order_field: z.string().optional().describe("Campo por el cual se desea ordenar, las opciones posibles son id, name, date, dueDate."),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
item_id: z.string().optional().describe("Filtrar las cotizaciones por el id del item."),
client_id: z.string().optional().describe("Filtra las cotizaciones por id del cliente."),
number: z.string().optional().describe("Numeración de la cotización por la cual se desea filtrar, se puede especificar el prefijo y el numer"),
client_name: z.string().optional().describe("Nombre del cliente el cual se desea filtrar las cotizaciones."),
date: z.string().optional().describe("Fecha de la cotización la cual se desea filtrar."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.item_id !== undefined) query.set('item_id', String(params.item_id));
if (params.client_id !== undefined) query.set('client_id', String(params.client_id));
if (params.number !== undefined) query.set('number', String(params.number));
if (params.client_name !== undefined) query.set('client_name', String(params.client_name));
if (params.date !== undefined) query.set('date', String(params.date));
const url = `/estimates` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getEstimatesById: {
description: "Consultar una cotización",
input: z.object({
id: z.string().describe("Id de la cotización que se desea consultar. Se debe enviar en la URL."),
fields: z.string().optional().describe("Para obtener los comentarios de la cotización se debe enviar el parámetro `fields` con el valor `com"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/estimates/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteEstimatesById: {
description: "Eliminar una cotización",
input: z.object({
id: z.string().describe("Id de la cotización que se desea eliminar. Se debe enviar en la URL."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/estimates/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
getRecurringPayments: {
description: "Consultar pagos recurrentes",
input: z.object({
start: z.number().optional().describe("Desde cuál pago se quiere consultar. Por ejemplo para consultar desde el pago 20, se envía start=20"),
limit: z.number().optional().describe("Cantidad de pagos a partir del inicio que se desea retornar. Por defecto retorna 30 pagos. Si este v"),
order_direction: z.enum(["ASC", "DESC"]).optional().describe("Orden ascendente o descendente en el cual se quieren retornar los pagos. Opciones disponibles son DE"),
order_field: z.enum(["id", "number", "date", "type"]).optional().describe("Campo por el cual se desea ordenar."),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
client_id: z.number().optional().describe("Filtra los pagos por id del cliente."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.client_id !== undefined) query.set('client_id', String(params.client_id));
const url = `/recurring-payments` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getRecurringPaymentsById: {
description: "Consultar un pago recurrente",
input: z.object({
id: z.number().describe("Identificador de un pago"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/recurring-payments/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
updatePurchaseOrdersById: {
description: "Editar una orden de compra",
input: z.object({
id: z.number().describe("Identificador único que representa una órden de compra específica."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/purchase-orders/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createPurchaseOrdersByIdVoid: {
description: "Anular orden de compra",
input: z.object({
id: z.number().describe("Identificador único que representa una órden de compra específica."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/purchase-orders/${params.id}/void`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createPurchaseOrdersByIdAttachment: {
description: "Adjuntar un archivo",
input: z.object({
id: z.number().describe("Identificador único que representa una órden de compra específica."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/purchase-orders/${params.id}/attachment`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getPurchaseOrders: {
description: "Retorna la lista de órdenes de compra",
input: z.object({
start: z.number().optional().describe("Desde cual órden de compra se quiere consultar. Por ejemplo para consultar desde la órden de compra "),
limit: z.number().optional().describe("Cantidad de órdenes de compra a partir del inicio que se desea retornar. Por defecto retorna 30 órde"),
order_direction: z.enum(["DESC", "ASC"]).optional().describe("Orden ascendente o descendente en el cual se quieren retornar las órdenes de compra."),
order_field: z.enum(["id", "date", "dueDate", "name (contacto)", "deliveryDate", "status"]).optional().describe("Campo por el cual se desea ordenar."),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
client_id: z.string().optional().describe("Filtra las órdenes de compra por id del cliente."),
id: z.number().optional().describe("Identificador único que representa una órden de compra específica. La aplicación lo asigna automátic"),
date: z.string().optional().describe("Fecha de la órden de compra."),
status: z.enum(["open", "close", "void"]).optional().describe("Notas de la órden de compra."),
item_id: z.number().optional().describe("Filtra las órdenes de compra por el id del item asociado."),
provider_name: z.string().optional().describe("Filtra las órdenes de compra por el nombre del cliente asociado."),
number: z.string().optional().describe("Numeración de la órden de compra por la cual se desea filtrar, se puede especificar el prefijo y el "),
delivery_date: z.string().optional().describe("Fecha de entrega de la órden de compra la cual se desea filtrar."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.client_id !== undefined) query.set('client_id', String(params.client_id));
if (params.id !== undefined) query.set('id', String(params.id));
if (params.date !== undefined) query.set('date', String(params.date));
if (params.status !== undefined) query.set('status', String(params.status));
if (params.item_id !== undefined) query.set('item_id', String(params.item_id));
if (params.provider_name !== undefined) query.set('provider_name', String(params.provider_name));
if (params.number !== undefined) query.set('number', String(params.number));
if (params.delivery_date !== undefined) query.set('delivery_date', String(params.delivery_date));
const url = `/purchase-orders` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getPurchaseOrdersById: {
description: "Consultar una una orden de compra",
input: z.object({
id: z.number().describe("Identificador único que representa una órden de compra específica."),
fields: z.string().optional().describe("Indica si se deben incluir los movimientos contables (journal) o los comentarios (comments) a la con"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/purchase-orders/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deletePurchaseOrdersById: {
description: "Eliminar una orden de compra",
input: z.object({
id: z.number().describe("Identificador único que representa una órden de compra específica."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/purchase-orders/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
deletePurchaseOrdersAttachmentById: {
description: "Eliminar un archivo",
input: z.object({
attachment_id: z.number().describe("Id de un archivo guardado"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/purchase-orders/attachment/${params.attachment_id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
createPurchaseOrders: {
description: "Crear una orden de compra",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/purchase-orders`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
updateDebitNotesById: {
description: "Editar una nota de débito",
input: z.object({
id: z.number().describe("Id de las nótas de débito"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/debit-notes/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createDebitNotes: {
description: "Crear una nota de débito",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/debit-notes`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getDebitNotes: {
description: "Consultar notas de débito",
input: z.object({
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
start: z.number().optional().describe("Desde cual nota débito se quiere consultar. Por ejemplo para consultar desde la nota débito 20, se e"),
limit: z.number().optional().describe("Cantidad de notas débito a partir del inicio que se desea retornar. Por defecto retorna 30 notas déb"),
id: z.string().optional().describe("Ids de las notas débito. Sirve para consultar notas débito específicas. Deben ir separados por coma "),
number: z.string().optional().describe("Numeración de la nota de debito por la cual se desea filtrar, se puede especificar el prefijo y el n"),
date: z.string().optional().describe("Fecha de la nota de débito la cual se desea filtrar."),
item_id: z.number().optional().describe("Id del item por el cual se desea filtrar las notas débito."),
client_id: z.number().optional().describe("Id del cliente por el cual se desea filtrar las notas débito."),
provider_name: z.string().optional().describe("Nombre del proveedor el cual se desea filtrar las notas de debito."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.id !== undefined) query.set('id', String(params.id));
if (params.number !== undefined) query.set('number', String(params.number));
if (params.date !== undefined) query.set('date', String(params.date));
if (params.item_id !== undefined) query.set('item_id', String(params.item_id));
if (params.client_id !== undefined) query.set('client_id', String(params.client_id));
if (params.provider_name !== undefined) query.set('provider_name', String(params.provider_name));
const url = `/debit-notes` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getDebitNotesById: {
description: "Consultar una nota de débito",
input: z.object({
id: z.number().describe("Id de las nótas de débito"),
fields: z.enum(["comments"]).optional().describe("Indica si se deben incluir campos adicionales a la consulta, estos campos van separados por una coma"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/debit-notes/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteDebitNotesById: {
description: "Eliminar una nota de débito",
input: z.object({
id: z.number().describe("Id de las nótas de débito"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/debit-notes/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updatePaymentsById1: {
description: "Editar un pago",
input: z.object({
id: z.number().describe("Identificador de un pago"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/payments/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createPayments1: {
description: "Crear un nuevo pago",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/payments`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createPaymentsByIdVoid1: {
description: "Anular un pago",
input: z.object({
id: z.number().describe("Identificador de un pago"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/payments/${params.id}/void`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createPaymentsByIdOpen1: {
description: "Convertir pago a abierto",
input: z.object({
id: z.number().describe("Identificador de un pago"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/payments/${params.id}/open`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createPaymentsByIdAttachment1: {
description: "Adjuntar un archivo",
input: z.object({
id: z.number().describe("Identificador de un pago"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/payments/${params.id}/attachment`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getPayments1: {
description: "Consultar pagos",
input: z.object({
start: z.number().optional().describe("Desde cuál pago se quiere consultar. Por ejemplo para consultar desde el pago 20, se envía start=20"),
limit: z.number().optional().describe("Cantidad de pagos a partir del inicio que se desea retornar. Por defecto retorna 30 pagos. Si este v"),
order_direction: z.enum(["ASC", "DESC"]).optional().describe("Orden ascendente o descendente en el cual se quieren retornar los pagos. Opciones disponibles son DE"),
order_field: z.enum(["id", "number", "date", "type"]).optional().describe("Campo por el cual se desea ordenar."),
type: z.enum(["in", "out"]).optional().describe("Filtrar los pagos por ingresos o egresos, para ingresos se envía type como 'in', para egresos 'out'."),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
client_id: z.number().optional().describe("Filtra los ingresos y/o egresos por id del cliente."),
conciliation_id: z.number().optional().describe("Id de la conciliación. Permite recuperar los pagos asociados a una conciliación."),
id: z.string().optional().describe("Ids de los pagos. Sirve para consultar pagos específicos. Deben ir separados por coma (,) y sin espa"),
includeUnconciliated: z.boolean().optional().describe("Incluye transacciones no conciliadas, debe ir junto con conciliation_id, de lo contrario se ignora e"),
fields: z.enum(["editable", "deletable", "voidable", "conciliation", "associations", "numberTemplate", "bills", "categories", "debitNote", "decimalPrecision"]).optional().describe("Indica si se deben incluir campos adicionales a la consulta, estos campos van separados por una coma"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.type !== undefined) query.set('type', String(params.type));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.client_id !== undefined) query.set('client_id', String(params.client_id));
if (params.conciliation_id !== undefined) query.set('conciliation_id', String(params.conciliation_id));
if (params.id !== undefined) query.set('id', String(params.id));
if (params.includeUnconciliated !== undefined) query.set('includeUnconciliated', String(params.includeUnconciliated));
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/payments` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getPaymentsById1: {
description: "Consultar un pago",
input: z.object({
id: z.number().describe("Identificador de un pago"),
fields: z.enum(["comments", "pdf", "editable", "deletable", "voidable", "simple", "billType", "balance", "totalPayed", "journal", "number", "decimalPrecision", "openable", "numberTemplate", "regimeClient"]).optional().describe("Indica si se deben incluir campos adicionales a la consulta, estos campos van separados por una coma"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/payments/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deletePaymentsById1: {
description: "Eliminar un pago",
input: z.object({
id: z.number().describe("Identificador de un pago"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/payments/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateBillsById: {
description: "Editar una factura de proveedor",
input: z.object({
id: z.number().describe("Id de la factura de proveedor"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/bills/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createBills: {
description: "Crear una factura de proveedor",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/bills`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createBillsByIdComments: {
description: "Agregar un nuevo comentario a una factura de proveedor",
input: z.object({
id: z.number().describe("Id de la factura de proveedor"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/bills/${params.id}/comments`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createBillsByIdClose: {
description: "Cerrar con saldo pendiente",
input: z.object({
id: z.number().describe("Id de la factura de proveedor"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/bills/${params.id}/close`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createBillsByIdAttachment: {
description: "Adjuntar un archivo",
input: z.object({
id: z.number().describe("Id de la factura de proveedor"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/bills/${params.id}/attachment`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getBills: {
description: "Lista de facturas de proveedor",
input: z.object({
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
start: z.number().optional().describe("Desde cuál factura de proveedor se quiere consultar. Por ejemplo para consultar desde la factura de "),
limit: z.number().optional().describe("Cantidad de facturas de proveedor a partir del inicio que se desea retornar. Por defecto retorna 30 "),
order_direction: z.enum(["ASC", "DESC"]).optional().describe("Orden ascendente o descendente en el cual se quieren retornar las facturas de proveedor. Opciones di"),
order_field: z.enum(["date", "name", "dueDate"]).optional().describe("Campo por el cual se desea ordenar."),
billNumber: z.string().optional().describe("Filtrar resultados según el número de la factura de proveedor. Se retornarán todas las facturas de p"),
client_name: z.string().optional().describe("Filtrar resultados según según el nombre del cliente de la factura de proveedor. Se retornarán todas"),
date: z.string().optional().describe("Filtrar resultados según la fecha de creación de la factura de proveedor. Se retornarán todas las fa"),
dueDate: z.string().optional().describe("Filtrar resultados según la fecha de vencimiento de la factura de proveedor. Se retornarán todas las"),
status: z.string().optional().describe("Filtra resultados según el estado de la factura de proveedor. Las opciones disponibles son open, clo"),
item_id: z.number().optional().describe("Filtrar las facturas de proveedor por el id del item."),
client_id: z.number().optional().describe("Filtra las facturas por id del cliente (proveedor)."),
provider_name: z.string().optional().describe("Filtrar resultados según el nombre del proveedor de la factura. Se retornarán todas las facturas de "),
uuid: z.string().optional().describe("Para Mexico se pueden filtrar los resultados segun el parámetro uuid de la factura de proveedor."),
purchaseOrder_id: z.number().optional().describe("Filtras las facturas de proveedor por id de la orden de compra."),
type: z.enum(["bill", "supportDocument", "all"]).optional().describe("Para el caso donde se cuente con diferentes tipos de factura de proveedor, permite obtener el tipo d"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.billNumber !== undefined) query.set('billNumber', String(params.billNumber));
if (params.client_name !== undefined) query.set('client_name', String(params.client_name));
if (params.date !== undefined) query.set('date', String(params.date));
if (params.dueDate !== undefined) query.set('dueDate', String(params.dueDate));
if (params.status !== undefined) query.set('status', String(params.status));
if (params.item_id !== undefined) query.set('item_id', String(params.item_id));
if (params.client_id !== undefined) query.set('client_id', String(params.client_id));
if (params.provider_name !== undefined) query.set('provider_name', String(params.provider_name));
if (params.uuid !== undefined) query.set('uuid', String(params.uuid));
if (params.purchaseOrder_id !== undefined) query.set('purchaseOrder_id', String(params.purchaseOrder_id));
if (params.type !== undefined) query.set('type', String(params.type));
const url = `/bills` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getBillsById: {
description: "Consultar una factura de proveedor",
input: z.object({
id: z.number().describe("Id de la factura de proveedor"),
fields: z.enum(["accountingDocuments", "additionalInfoStamp", "advances", "categories.tax.deductible", "categoryPurchaseOrder", "comments", "debitNotes", "deletable", "documentDate", "documentReceivedStatus", "editable", "includeInReport", "isNonDeductibleExpense", "itemPurchaseOrder", "items.tax.deductible", "journal", "provider.status", "purchaseOrders", "retentions", "retentions.itemOrServiceType", "retentions.operationType", "retentions.paymentDate", "retentions.recordNumber", "stamp", "stampFiles", "subTotal", "subtotalOfTaxedConcepts", "subtotalWithIva", "totalDebitNotes", "totalIva", "totalRetained", "totalTaxes", "url", "xml"]).optional().describe("Indica si se deben incluir campos adicionales a la consulta, estos campos van separados por una coma"),
includeVoidPayments: z.string().optional().describe("Incluye los pagos anulados en el arreglo de pagos de la factura de proveedor"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
if (params.includeVoidPayments !== undefined) query.set('includeVoidPayments', String(params.includeVoidPayments));
const url = `/bills/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteBillsById: {
description: "Eliminar una factura de proveedor",
input: z.object({
id: z.number().describe("Id de la factura de proveedor"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/bills/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
deleteBillsAttachmentById: {
description: "Eliminar un archivo",
input: z.object({
attachment_id: z.number().describe("Id de un archivo guardado"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/bills/attachment/${params.attachment_id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateContactsRestoreById: {
description: "Restaurar contacto",
input: z.object({
id: z.string().describe("Id del contacto para realizar la acción"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/contacts/restore/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createContacts: {
description: "Crear un contacto",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/contacts`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getContacts: {
description: "Listado de contactos",
input: z.object({
metadata: z.boolean().optional().describe("Incluye en la respuesta del request el total de contactos."),
start: z.number().optional().describe("A partir de cual contacto se desea consultar. Por ejemplo para consultar desde el contacto número 20"),
limit: z.number().optional().describe("Cantidad de contactos a consultar. Por defecto tiene valor 30 y es el máximo valor que acepta. En ca"),
order_direction: z.enum(["DESC", "ASC"]).optional().describe("Orden ascendente o descendente para el listado de contacto."),
order_field: z.enum(["id", "name", "email"]).optional().describe("Campo por el cual se desea ordenar."),
query: z.string().optional().describe("Cadena de texto que se quiere utilizar para buscar los contactos que en el nombre o en la identifica"),
identification: z.string().optional().describe("Filtrar resultados según la identificación del contacto. Se retornarán todos los contactos que en su"),
name: z.string().optional().describe("Filtrar resultados según el nombre del contacto. Se retornarán todos los contactos que en su nombre "),
type: z.enum(["client", "provider"]).optional().describe("Filtrar por clientes o proveedores, para filtrar por clientes se debe enviar 'client', para filtrar "),
mode: z.enum(["simple", "advanced"]).optional().describe("El modo simple permite traer los contacts excluyendo los siguientes atributos: `seller`, `term`, `pr"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.query !== undefined) query.set('query', String(params.query));
if (params.identification !== undefined) query.set('identification', String(params.identification));
if (params.name !== undefined) query.set('name', String(params.name));
if (params.type !== undefined) query.set('type', String(params.type));
if (params.mode !== undefined) query.set('mode', String(params.mode));
const url = `/contacts` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
updateContactsById: {
description: "Editar contacto",
input: z.object({
id: z.string().describe("Id del contacto para realizar la acción"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/contacts/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
deleteContacts: {
description: "Eliminar varios contactos",
input: z.object({
id: z.string().describe("Identificadores de los contactos que se desean eliminar se parados por (,)."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.id !== undefined) query.set('id', String(params.id));
const url = `/contacts` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
deleteContactsById: {
description: "Eliminar contacto",
input: z.object({
id: z.string().describe("Id del contacto para realizar la acción"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/contacts/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
getContactsById: {
description: "Obtener detalle de un contacto",
input: z.object({
id: z.string().describe("Id del contacto para realizar la acción"),
fields: z.enum(["url", "statementLink", "statementLink,url"]).optional().describe("Es utilizado para obtener información adicional como:\n * Al enviar `statementLink` en el parámetro "),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/contacts/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteContactsAttachmentById: {
description: "Eliminar archivos adjuntos",
input: z.object({
idAttachment: z.number().describe("Identificador del archivo adjunto que se desea eliminar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/contacts/attachment/${params.idAttachment}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
createContactsByIdAttachment: {
description: "Adjuntar archivos",
input: z.object({
id: z.string().describe("Id del contacto para realizar la acción"),
Content-Type: z.enum(["multipart/form-data"]).optional(),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/contacts/${params.id}/attachment`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getCategoriesById: {
description: "Detalle cuenta contable",
input: z.object({
id: z.number().describe("Id de cuenta contable"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/categories/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
updateCategoriesById: {
description: "Editar cuenta contable",
input: z.object({
id: z.number().describe("Id de cuenta contable"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/categories/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getCategoriesSettings: {
description: "Listar configuración del catálogo",
input: z.object({}),
output: z.any(),
async handler(params, ctx) {
const url = `/categories/settings`;
const res = await ctx.fetch(url);
return res.json();
},
},
updateCategoriesSettings: {
description: "Editar configuraciones del catálogo de cuentas",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/categories/settings`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getCategories: {
description: "Listar cuentas contables",
input: z.object({
format: z.enum(["tree", "plain"]).optional().describe("Formato de las cuentas contables. Las opciones posibles son 'plain' para que se retornen en un arreg"),
type: z.enum(["income", "expense", "asset", "liability", "equity", "cost", "productionCost", "order"]).optional().describe("Filtra las cuentas contables a partir de su tipo"),
types: z.enum(["income", "expense", "asset", "liability", "equity", "cost", "productionCost", "order"]).optional().describe("Filtra las cuentas contables a partir de varios tipos separados por coma"),
filter: z.string().optional().describe("Filtra las cuentas contables a partir de un filtro especifico que puede estar separado por coma"),
level_greaterThanOrEqualsTo: z.number().optional().describe("Filtra las cuentas contables a partir de un nivel mayor o igual al especificado"),
exclude: z.string().optional().describe("Excluye las cuentas contables que coincidan con el category rule key especificado"),
date: z.string().optional().describe("Filtrar las cuentas contables a partir de la fecha del catalogo. El formato de la fecha debe ser 'YY"),
fields: z.enum(["editable", "editableNature", "deletable", "deactivatable", "children", "metadata", "associated", "deletableByUI", "categoryRuleFull", "cannotDeleteReason", "includeAllDeletableReasons", "profitAndLossSection", "isRetention", "isTax", "automaticMovements", "idParent", "bankAccount", "sales", "contacts", "inventory", "equity", "adjustments", "behavior", "version", "hasBehaviorCategories", "parameterizedMovement"]).optional().describe("Campos adicionales separados por coma que se desean obtener en la respuesta"),
categoryRule_key: z.enum(["ASSETS", "FIXED_ASSET", "RETENTIONS_IN_FAVOR", "TAXES_IN_FAVOR", "RECEIVABLE_ACCOUNTS", "BANKS", "INVENTORY", "RECEIVABLE_ACCOUNTS_RETURNS", "ADVANCE_OUT", "LIABILITIES", "DEBTS_TO_PAY_PROVIDERS", "RETENTIONS_TO_PAY", "TAXES_TO_PAY", "DEBTS_TO_PAY_CREDIT_CARDS", "DEBTS_TO_PAY_RETURNS", "ADVANCE_IN", "EQUITY", "UTILITIES", "INITIAL_ADJUSTMENTS_BANKS", "INITIAL_ADJUSTMENTS_INVENTORY", "INCOME", "SALES", "INTEREST_INCOME", "NO_OPERATIONAL_INCOME", "SALES_RETURNS", "EXPENSES", "BANK_EXPENSES", "COST_OF_MERCHANDISE_SOLD", "UNCOLLECTIBLE_ACCOUNTS", "OTHER_TAXES", "INVENTARIABLE_PURCHASES", "SOLD_SERVICES_COST", "NO_OPERATIONAL_EXPENSES", "INVENTORY_ADJUSTMENTS", "ITEM_PURCHASES_RETURNS", "EXCHANGE_DIFFERENCE", "FINANCIAL_DISCOUNT", "BANK_TRANSFERS", "FUENTE_RETENTION_IN_FAVOR_COL", "INDUSTRY_RETENTION_IN_FAVOR_COL", "IVA_RETENTION_IN_FAVOR_COL", "IVA_IN_FAVOR_COL", "ICO_IN_FAVOR_COL", "IVA_TO_PAY_COL", "FUENTE_RETENTION_TO_PAY_COL", "INDUSTRY_RETENTION_TO_PAY_COL", "IVA_RETENTION_TO_PAY_COL", "ICO_TO_PAY_COL", "ISR_RETENTION_IN_FAVOR_MEX", "IVA_RETENTION_IN_FAVOR_MEX", "FLETES_IVA_RETENTION_IN_FAVOR_MEX", "IVA_IN_FAVOR_MEX", "ISR_RETENTION_TO_PAY_MEX", "IVA_RETENTION_TO_PAY_MEX", "FLETES_IVA_RETENTION_TO_PAY_MEX", "IVA_TO_PAY_MEX", "ITBIS_RETENTION_IN_FAVOR_DOM", "ISR_RETENTION_IN_FAVOR_DOM", "ITBIS_IN_FAVOR_DOM", "ITBIS_RETENTION_TO_PAY_DOM", "ISR_RETENTION_TO_PAY_DOM", "ITBIS_TO_PAY_DOM", "FUENTE_RETENTION_IN_FAVOR_PAN", "ITBMS_IN_FAVOR_PAN", "FUENTE_RETENTION_TO_PAY_PAN", "ITBMS_TO_PAY_PAN", "DETRACCION_RETENTION_IN_FAVOR_PER", "IGV_IN_FAVOR_PER", "DETRACCION_RETENTION_TO_PAY_PER", "IGV_TO_PAY_PER", "IRPF_RETENTION_IN_FAVOR_ESP", "IVA_IN_FAVOR_ESP", "IRPF_RETENTION_TO_PAY_ESP", "IVA_TO_PAY_ESP", "IVA_IN_FAVOR_CHL", "IVA_TO_PAY_CHL", "IV_IN_FAVOR_CRI", "EXENTO_IN_FAVOR_CRI", "IV_TO_BE_PAID_CRI", "EXENTO_TO_BE_PAID_CRI", "BANK_ACCOUNTS", "CASH_ACCOUNTS", "FEE_RETENTION_IN_FAVOR_CHL", "IVA_RETENTION_IN_FAVOR_CHL", "FEE_RETENTION_TO_PAY_CHL", "IVA_RETENTION_TO_PAY_CHL", "ITBMS_RETENTION_IN_FAVOR_DOM", "ITBMS_RETENTION_TO_PAY_DOM", "FIXED_ASSET_CAT_2", "FIXED_ASSET_CAT_3", "IEPS_TO_PAY_MEX", "IEPS_IN_FAVOR_MEX", "LOCAL_TAX_TO_PAY_MEX", "LOCAL_TAX_IN_FAVOR_MEX", "LOCAL_RETENTION_TO_PAY_MEX", "LOCAL_RETENTION_IN_FAVOR_MEX", "CALCULATIONS_APPROX", "ISC_TO_PAY_DOM", "ISC_IN_FAVOR_DOM", "TIPS_TO_PAY_DOM", "OTHER_TAX_TYPE_TO_PAY", "OTHER_TAX_TYPE_IN_FAVOR", "OTHER_RETENTION_TYPE_TO_PAY", "OTHER_RETENTION_TYPE_IN_FAVOR", "FIXED_ASSET_DEDUCTIBLE", "IVA_IN_FAVOR_ARG", "IVA_TO_PAY_ARG", "EXENTO_IN_FAVOR_ARG", "EXENTO_TO_PAY_ARG", "TAX_NOT_DEDUCTIBLE", "INPUT_VALUE_ADDED_TAX_CRI", "OUTPUT_VALUE_ADDED_TAX_CRI", "INPUT_IVA_CRI", "OUTPUT_IVA_CRI", "USED_GOODS_INPUT_IVA_CRI", "USED_GOODS_OUTPUT_IVA_CRI", "IVA_IN_FAVOR_NOT_CHARGED_MEX", "IVA_IN_FAVOR_CHARGED_MEX", "IVA_TO_PAY_NOT_CHARGED_MEX", "IVA_TO_PAY_CHARGED_MEX", "RETENTION_IVA_SUFFERED", "RETENTION_GROSS_INCOME_SUFFERED", "RETENTION_SOCIAL_CHARGES_SUFFERED", "RETENTION_PROFITS_SUFFERED", "OTHER_RETENTIONS_SUFFERED", "RETENTION_IVA_EFFECTED", "RETENTION_GROSS_INCOME_EFFECTED", "RETENTION_SOCIAL_CHARGES_EFFECTED", "RETENTION_PROFITS_EFFECTED", "OTHER_RETENTIONS_EFFECTED", "NATIONAL_RECEIVABLE_ACCOUNTS_MEX", "FOREIGN_RECEIVABLE_ACCOUNTS_MEX", "NATIONAL_DEBTS_TO_PAY_PROVIDERS_MEX", "FOREIGN_DEBTS_TO_PAY_PROVIDERS_MEX", "ISR_RETENTION_TO_PAY_NOT_CHARGED_MEX", "ISR_RETENTION_TO_PAY_CHARGED_MEX", "IVA_RETENTION_TO_PAY_NOT_CHARGED_MEX", "IVA_RETENTION_TO_PAY_CHARGED_MEX", "LOCAL_RETENTION_TO_PAY_NOT_CHARGED_MEX", "LOCAL_RETENTION_TO_PAY_CHARGED_MEX", "ISR_RETENTION_IN_FAVOR_NOT_CHARGED_MEX", "ISR_RETENTION_IN_FAVOR_CHARGED_MEX", "IVA_RETENTION_IN_FAVOR_NOT_CHARGED_MEX", "IVA_RETENTION_IN_FAVOR_CHARGED_MEX", "LOCAL_RETENTION_IN_FAVOR_NOT_CHARGED_MEX", "LOCAL_RETENTION_IN_FAVOR_CHARGED_MEX", "VAT_RETENTION_IN_FAVOR_ZA", "VAT_RETENTION_TO_PAY_ZA", "ISR_RETENTION_IN_FAVOR_ZA", "ISR_RETENTION_TO_PAY_ZA", "VAT_IN_FAVOR_ZA", "VAT_TO_PAY_ZA", "VAT_RETENTION_IN_FAVOR_NG", "VAT_RETENTION_TO_PAY_NG", "ISR_RETENTION_IN_FAVOR_NG", "ISR_RETENTION_TO_PAY_NG", "VAT_IN_FAVOR_NG", "VAT_TO_PAY_NG", "VAT_RETENTION_IN_FAVOR_KE", "VAT_RETENTION_TO_PAY_KE", "ISR_RETENTION_IN_FAVOR_KE", "ISR_RETENTION_TO_PAY_KE", "VAT_IN_FAVOR_KE", "VAT_TO_PAY_KE", "NATIONAL_CONSUMPTION_TAX_IN_FAVOR", "NATIONAL_CONSUMPTION_TAX_PAYABLE", "COSTS", "ASSUMED_RETENTION_AT_SOURCE_COL", "TAX_REFUND_IN_FAVOR", "UTILITIES_PERIOD", "LOSS_OF_PERIOD", "GAIN_EXCHANGE_DIFFERENCE", "INCOME_CALCULATIONS_APPROX", "PRODUCTION_COSTS", "ORDER", "ASSUMED_RETENTION_AT_SOURCE_MEX", "FOREIGN_BANK_ACCOUNTS_MEX", "FINANCIAL_BANK", "INCOME_TAX_TO_BE_PAID_CRI", "LIABILITIES_OTHER_CHARGES_CRI", "ISR_RETENTION_TO_BE_PAID_CRI", "EXEMPT_SALES_PAN", "EXEMPT_SALES_RETURNS_PAN", "ASSUMED_RETENTION_AT_SOURCE_ARG", "ASSUMED_RETENTION_AT_SOURCE_INT", "LOSS_ON_ASSETS_SALE", "ASSET_WITHDRAWAL", "GAIN_ON_ASSETS_SALE", "IVA_REFUNDED_ON_SALES_COL", "TRANSITIONAL_IVA", "ISR_IN_FAVOR_MEX", "IEPS_IN_FAVOR_NOT_CHARGED_MEX", "IEPS_IN_FAVOR_CHARGED_MEX", "IEPS_TO_PAY_NOT_CHARGED_MEX", "IEPS_TO_PAY_CHARGED_MEX", "ISR_TO_PAY_MEX", "DUTIES_TO_PAY_MEX", "FIXED_ASSET_CAT_1"]).optional().describe("Filtra las cuentas contables a partir de la clave de la regla de categoría."),
status: z.enum(["active", "inactive", "deleted"]).optional().describe("Filtra las cuentas contables a partir de su estado"),
name: z.string().optional().describe("Filtra las cuentas contables a partir de su nombre"),
description: z.string().optional().describe("Filtra las cuentas contables a partir de su descripción"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.format !== undefined) query.set('format', String(params.format));
if (params.type !== undefined) query.set('type', String(params.type));
if (params.types !== undefined) query.set('types', String(params.types));
if (params.filter !== undefined) query.set('filter', String(params.filter));
if (params.level_greaterThanOrEqualsTo !== undefined) query.set('level_greaterThanOrEqualsTo', String(params.level_greaterThanOrEqualsTo));
if (params.exclude !== undefined) query.set('exclude', String(params.exclude));
if (params.date !== undefined) query.set('date', String(params.date));
if (params.fields !== undefined) query.set('fields', String(params.fields));
if (params.categoryRule_key !== undefined) query.set('categoryRule_key', String(params.categoryRule_key));
if (params.status !== undefined) query.set('status', String(params.status));
if (params.name !== undefined) query.set('name', String(params.name));
if (params.description !== undefined) query.set('description', String(params.description));
const url = `/categories` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
createCategories: {
description: "Crear cuenta contables",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/categories`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getJournalsById: {
description: "Detalle de un comprobante contable",
input: z.object({
id: z.string().describe("Id del comprobante contable"),
fields: z.array(z.any()).optional().describe("Campos adicionales a retornar en la respuesta. Se pueden seleccionar varias opciones separadas por c"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/journals/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
updateJournalsById: {
description: "Editar un comprobante contable",
input: z.object({
id: z.number().describe("Id del comprobante contable"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/journals/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getJournals: {
description: "Lista de comprobantes contables",
input: z.object({
start: z.number().optional().describe("Desde cual comprobante contable se quiere consultar. Por ejemplo para consultar desde el comprobante"),
limit: z.number().optional().describe("Cantidad de comprobantes contables a partir del inicio que se desea retornar. Por defecto retorna 30"),
order_direction: z.string().optional().describe("Orden ascendente o descendente en el cual se quieren retornar los comprobantes contables. Opciones d"),
order_field: z.string().optional().describe("Campo por el cual se desea ordenar los comprobantes contables, las opciones posibles son date, name,"),
date: z.string().optional().describe("Filtrar resultados según fecha de creación del comprobante contable. Se retornarán todos los comprob"),
client_name: z.string().optional().describe("Filtrar resultados según el nombre del cliente del comprobante contable. Se retornarán todos los com"),
reference: z.string().optional().describe("Filtrar resultados según la referencia del comprobante contable. Se retornarán todos los comprobante"),
observations: z.string().optional().describe("Filtrar resultados según las observaciones del comprobante contable. Se retornarán todos los comprob"),
client_id: z.string().optional().describe("Filtra los resultados por id del cliente."),
id: z.string().optional().describe("Filtrar por el número del comprobante contable."),
number: z.string().optional().describe("Filtrar por la numeración del comprobante contable."),
fields: z.array(z.any()).optional().describe("Campos adicionales a retornar en la respuesta. Se pueden seleccionar varias opciones separadas por c"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.date !== undefined) query.set('date', String(params.date));
if (params.client_name !== undefined) query.set('client_name', String(params.client_name));
if (params.reference !== undefined) query.set('reference', String(params.reference));
if (params.observations !== undefined) query.set('observations', String(params.observations));
if (params.client_id !== undefined) query.set('client_id', String(params.client_id));
if (params.id !== undefined) query.set('id', String(params.id));
if (params.number !== undefined) query.set('number', String(params.number));
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/journals` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteJournalsById: {
description: "Eliminar un comprobante contable",
input: z.object({
id: z.number().describe("Id del comprobante contable"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/journals/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
createJournals: {
description: "Crear comprobante contable",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/journals`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getCostCentersById: {
description: "Consultar un centro de costos",
input: z.object({
id: z.number().describe("Id del centro de costos que se desea consultar"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/cost-centers/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
updateCostCentersById: {
description: "Editar un centro de costos",
input: z.object({
id: z.number().describe("Id del centro de costos"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/cost-centers/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getCostCenters: {
description: "Listar centros de costos",
input: z.object({
start: z.number().optional().describe("Indica a partir de cual centro de costo se desea consultar."),
limit: z.number().optional().describe("Cantidad de centros de costos a partir del inicio que se desea retornar.\nPor defecto retorna 30. Si "),
order_direction: z.enum(["DESC", "ASC"]).optional().describe("Orden ascendente o descendente en el cual se quieren retornar los centros de costos.\nOpciones dispon"),
order_field: z.enum(["id", "name", "code", "status"]).optional().describe("Campo por el cual se desea ordenar, las opciones posibles son id, name, code, status.\n"),
status: z.enum(["active", "inactive"]).optional().describe("Indica el estado del centro de costo. Las opciones posibles son: active e inactive\n"),
name: z.string().optional().describe("Permite filtrar por nombre de centro de costo,\nteniendo en cuenta si el nombre contiene el valor est"),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía\neste parámetro el objet"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.status !== undefined) query.set('status', String(params.status));
if (params.name !== undefined) query.set('name', String(params.name));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
const url = `/cost-centers` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteCostCentersById: {
description: "Eliminar un centro de costos",
input: z.object({
id: z.number().describe("Id del centro de costos que se desea eliminar"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/cost-centers/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
createCostCenters: {
description: "Crear centro de costos",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/cost-centers`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
updateUsersSelfMetadata: {
description: "Editar los metadatos del usuario autenticado",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/users/self/metadata`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
updateUsersSelf: {
description: "Editar el usuario autenticado",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/users/self`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
updateUsersById: {
description: "Editar un usuario",
input: z.object({
id: z.string().describe("Identificador del usuario"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/users/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
updateUsersByIdMetadata: {
description: "Editar los metadatos de un usuario",
input: z.object({
id: z.string().describe("Identificador del usuario"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/users/${params.id}/metadata`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createUsers: {
description: "Crear un usuario",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/users`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createUsersAttachment: {
description: "Subir un archivo adjunto al usuario autenticado",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/users/attachment`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getUsers: {
description: "Listado de usuarios",
input: z.object({
start: z.number().optional().describe("Índice inicial de la consulta."),
limit: z.number().optional().describe("Cantidad de registros a retornar"),
fields: z.enum(["idGlobal", "company", "signature", "hubspot", "membership", "profilepic", "authProvider", "isAccountant", "uuid", "registryDate", "s3SignatureName", "hasInvitationKey"]).optional().describe("Campos adicionales para incluir en la respuesta."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/users` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getUsersSelf: {
description: "Consultar el usuario autenticado",
input: z.object({
fields: z.enum(["idGlobal", "company", "signature", "hubspot", "membership", "profilepic", "authProvider", "isAccountant", "uuid", "registryDate", "s3SignatureName", "hasInvitationKey"]).optional().describe("Campos adicionales para incluir en la respuesta."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/users/self` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getUsersById: {
description: "Consultar un usuario",
input: z.object({
id: z.string().describe("Identificador del usuario"),
fields: z.enum(["idGlobal", "company", "signature", "hubspot", "membership", "profilepic", "authProvider", "isAccountant", "uuid", "registryDate", "s3SignatureName", "hasInvitationKey"]).optional().describe("Campos adicionales para incluir en la respuesta."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/users/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteUsersById: {
description: "Eliminar un usuario",
input: z.object({
id: z.string().describe("Identificador del usuario"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/users/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateTermsById: {
description: "Editar un término de pago",
input: z.object({
id: z.string().describe("Identificador del término de pago"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/terms/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createTerms: {
description: "Crear un término de pago",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/terms`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getTerms: {
description: "Listado de términos de pago",
input: z.object({
fields: z.enum(["deletable"]).optional().describe("Campos adicionales para incluir en la respuesta."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/terms` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getTermsById: {
description: "Consultar un término de pago",
input: z.object({
id: z.string().describe("Identificador del término de pago"),
fields: z.enum(["deletable"]).optional().describe("Campos adicionales para incluir en la respuesta."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/terms/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteTermsById: {
description: "Eliminar un término de pago",
input: z.object({
id: z.string().describe("Identificador del término de pago"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/terms/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateRetentionsById: {
description: "Editar una retención",
input: z.object({
id: z.string().describe("Identificador de la retención"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/retentions/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createRetentions: {
description: "Crear una retención",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/retentions`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getRetentions: {
description: "Listado de retenciones",
input: z.object({
start: z.number().optional().describe("Índice inicial de la consulta."),
limit: z.number().optional().describe("Cantidad de registros a retornar"),
fields: z.enum(["idGlobal"]).optional().describe("Campos adicionales para incluir en la respuesta."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/retentions` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getRetentionsById: {
description: "Consultar una retención",
input: z.object({
id: z.string().describe("Identificador de la retención"),
fields: z.enum(["idGlobal"]).optional().describe("Campos adicionales para incluir en la respuesta."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/retentions/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteRetentionsById: {
description: "Eliminar una retención",
input: z.object({
id: z.string().describe("Identificador de la retención"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/retentions/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateCurrenciesById: {
description: "Editar una moneda",
input: z.object({
code: z.string().describe("Código ISO de la moneda."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/currencies/${params.code}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createCurrencies: {
description: "Crear una moneda",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/currencies`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getCurrencies: {
description: "Listado de monedas",
input: z.object({
start: z.number().optional().describe("Índice inicial de la consulta."),
limit: z.number().optional().describe("Cantidad de registros a retornar"),
fields: z.enum(["deletable", "canBeInactive", "autoUpdate"]).optional().describe("Campos adicionales para incluir en la respuesta."),
metadata: z.boolean().optional().describe("Indica si se debe incluir metadata en la respuesta, información de paginado."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.fields !== undefined) query.set('fields', String(params.fields));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
const url = `/currencies` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getCurrenciesById: {
description: "Consultar un moneda",
input: z.object({
code: z.string().describe("Código ISO de la moneda."),
fields: z.enum(["deletable", "canBeInactive", "autoUpdate"]).optional().describe("Campos adicionales para incluir en la respuesta."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/currencies/${params.code}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteCurrenciesById: {
description: "Eliminar una moneda",
input: z.object({
code: z.string().describe("Código ISO de la moneda."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/currencies/${params.code}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateNumberTemplatesById: {
description: "Editar una numeración de facturación",
input: z.object({
id: z.string().describe("Identificador de la numeración de facturación"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/number-templates/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createNumberTemplates: {
description: "Crear una numeración de facturación",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/number-templates`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getNumberTemplatesById: {
description: "Consultar una numeración de facturación",
input: z.object({
id: z.string().describe("Identificador de la numeración de facturación"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/number-templates/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
getNumberTemplates: {
description: "Listado de numeraciones de facturación",
input: z.object({
start: z.number().optional().describe("Índice inicial de la consulta."),
limit: z.number().optional().describe("Cantidad de registros a retornar"),
documentType: z.enum(["invoice", "estimate", "transactionIn", "transactionOut", "creditNote", "debitNote", "incomeDebitNote"]).describe("Tipo de documento"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.documentType !== undefined) query.set('documentType', String(params.documentType));
const url = `/number-templates` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteNumberTemplatesById: {
description: "Eliminar una numeración de facturación",
input: z.object({
id: z.string().describe("Identificador de la numeración de facturación"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/number-templates/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateTaxesById: {
description: "Editar un impuesto",
input: z.object({
id: z.string().describe("Identificador del impuesto"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/taxes/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createTaxes: {
description: "Crear un impuesto",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/taxes`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getTaxes: {
description: "Listado de impuestos",
input: z.object({
start: z.number().optional().describe("Índice inicial de la consulta."),
limit: z.number().optional().describe("Cantidad de registros a retornar"),
fields: z.enum(["idGlobal", "categories"]).optional().describe("Campos adicionales para incluir en la respuesta."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/taxes` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getTaxesById: {
description: "Consultar un impuesto",
input: z.object({
id: z.string().describe("Identificador del impuesto"),
fields: z.enum(["idGlobal", "categories"]).optional().describe("Campos adicionales para incluir en la respuesta."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/taxes/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteTaxesById: {
description: "Eliminar un impuesto",
input: z.object({
id: z.string().describe("Identificador del impuesto"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/taxes/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateCompany: {
description: "Editar la empresa",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/company`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createCompanyAttachment: {
description: "Subir un archivo adjunto a la empresa",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/company/attachment`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getCompany: {
description: "Consultar la empresa",
input: z.object({
fields: z.enum(["origin", "interfaceSettings", "certificate", "invoiceText", "stampReceptionEmail", "sector", "uuid", "country", "mandateSignatureUrl", "swornDeclarationUrl", "manifestSignature", "simple", "status", "lastActivityDate", "sectorKey"]).optional().describe("Campos adicionales para incluir en la respuesta."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/company` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getBankAccounts: {
description: "Listado de cuentas bancarias",
input: z.object({
start: z.number().optional().describe("A partir de cual cuenta bancaria se desea consultar. Por ejemplo para consultar desde la cuenta banc"),
limit: z.number().optional().describe("Cantidad de cuentas bancarias a consultar. Por defecto tiene valor 30 y es el máximo valor que acept"),
order_direction: z.enum(["DESC", "ASC"]).optional().describe("Orden ascendente o descendente para el listado de cuentas bancarias\n"),
order_field: z.enum(["id", "date"]).optional().describe("Campo por el cual se desea ordenar, las opciones posibles son: `id`, `date`\n"),
fields: z.enum(["deletable", "journal", "lastMovementDate", "category"]).optional().describe("Es utilizado para obtener información adicional como:\n * Para obtener el campo para validar si las "),
includeInactive: z.boolean().optional().describe("Permite incluir las cuentas bancarias que se encuentran inactivas"),
includeBalance: z.boolean().optional().describe("Permite incluir los balances de las cuentas bancarias"),
metadata: z.boolean().optional().describe("Incluye en la respuesta del request el total de cuentas bancarias."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.fields !== undefined) query.set('fields', String(params.fields));
if (params.includeInactive !== undefined) query.set('includeInactive', String(params.includeInactive));
if (params.includeBalance !== undefined) query.set('includeBalance', String(params.includeBalance));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
const url = `/bank-accounts` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
createBankAccounts: {
description: "Crear cuenta bancaria",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/bank-accounts`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createBankAccountsByIdTransfer: {
description: "Realizar una transferencia a otra cuenta bancaria",
input: z.object({
id: z.string().describe("Identificar de la cuenta bancaria de destino"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/bank-accounts/${params.id}/transfer`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
updateBankAccountsById: {
description: "Editar cuenta bancaria",
input: z.object({
id: z.string().describe("Identificador de la cuenta bancaria"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/bank-accounts/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getBankAccountsById: {
description: "Consultar una cuenta bancaria",
input: z.object({
id: z.string().describe("Identificador de la cuenta bancaria"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/bank-accounts/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
deleteBankAccountsById: {
description: "Eliminar cuenta bancaria",
input: z.object({
id: z.string().describe("Identificador de la cuenta bancaria"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/bank-accounts/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
getConciliationsById: {
description: "Consultar una conciliación",
input: z.object({
id: z.string().describe("Identificador de la conciliación que se desea consultar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/conciliations/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
deleteConciliationsById: {
description: "Eliminar una conciliación",
input: z.object({
id: z.string().describe("Identificador de la conciliación que se desea eliminar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/conciliations/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
getConciliations: {
description: "Listar las conciliaciones",
input: z.object({
account_id: z.string().optional().describe("Identificador de la cuenta bancaria por la cual se desea filtrar los resultados de las conciliacione"),
start: z.number().optional().describe("A partir de cual conciliación se desea consultar. Por ejemplo para consultar desde la conciliación n"),
limit: z.number().optional().describe("Cantidad de conciliaciones a consultar. Por defecto tiene valor 30 y es el máximo valor que acepta. "),
order_direction: z.enum(["DESC", "ASC"]).optional().describe("Orden ascendente o descendente para el listado de conciliaciones\n"),
order_field: z.enum(["id", "date"]).optional().describe("Campo por el cual se desea ordenar, las opciones posibles son: `id`, `date`\n"),
fields: z.enum(["deletable", "balance", "simple"]).optional().describe("Es utilizado para obtener información adicional como:\n * Para obtener el campo para validar si las "),
metadata: z.boolean().optional().describe("Incluye en la respuesta del request el total de cuentas bancarias."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.account_id !== undefined) query.set('account_id', String(params.account_id));
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.fields !== undefined) query.set('fields', String(params.fields));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
const url = `/conciliations` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
createConciliations: {
description: "Crea/actualiza una conciliación",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/conciliations`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
},
});