nexusflex-mcp 3.67.0 → 3.68.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/docs.mjs +8 -0
  2. package/package.json +1 -1
  3. package/server.mjs +3 -1
package/docs.mjs CHANGED
@@ -410,6 +410,14 @@ const CONTROL_POR_FOTO = [
410
410
  " → [si pasás `grupo`, ej. 'Bonorino': En camino, con su integrante] → Entregado. Cada estado",
411
411
  " queda registrado con QUIÉN lo hizo (vos, el usuario MCP) — es la vía rápida del clearing;",
412
412
  " • `autoRutear: true`: además, manda el paquete al nodo/mensajero responsable de su zona.",
413
+ " • `nodoEntrega` (con `grupo`): el nodo del grupo que RECIBIÓ y entregó el paquete (ej.",
414
+ " 'FastCorreo'). Es lo que hace que el envío entre al CIERRE SEMANAL entre nodos (origen =",
415
+ " nodo del cliente → entrega = este nodo). Sin esto solo entra si autoRutear encuentra UN",
416
+ " responsable de zona. Decilo siempre que sepas quién lo entregó;",
417
+ " • PLANILLA ATRASADA: `fecha` = el día real (dd/mm/aaaa). Ej.: 5 envíos de un cliente de",
418
+ " Envíos Frank que entregó FastCorreo el lunes 14 → cliente, fecha:'14/09/2026',",
419
+ " avanzarA:'entregado', grupo:'Portela', nodoEntrega:'FastCorreo'. Si esa semana ya",
420
+ " cerró, entra en el cierre siguiente marcado como tarde, con su fecha real.",
413
421
  "",
414
422
  "AL TERMINAR: devolvé el CONTEO total + desglose por cliente/zona/estado + qué quedó sin",
415
423
  " responsable de zona (avisá para configurarla). Cuando el nodo real se dé de alta puede",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexusflex-mcp",
3
- "version": "3.67.0",
3
+ "version": "3.68.0",
4
4
  "description": "MCP de Nexus Flex: operá tu nodo/cuenta desde un asistente de IA (altas de clientes, stock, KPIs). Login por autorización web (device-flow). NO toca dinero.",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/server.mjs CHANGED
@@ -54,8 +54,9 @@ const truthy = (v) => /^(1|true|yes|si|sí)$/i.test(v ?? "");
54
54
  const ALLOW_WRITE = truthy(process.env.NEXUSFLEX_MCP_ALLOW_WRITE);
55
55
  const ALLOW_PRECIOS = truthy(process.env.NEXUSFLEX_MCP_ALLOW_PRECIOS);
56
56
 
57
- const MCP_VERSION = "3.67.0"; // bumpear junto con package.json + backend/services/mcp-remote.ts
57
+ const MCP_VERSION = "3.68.0"; // bumpear junto con package.json + backend/services/mcp-remote.ts
58
58
  const NOVEDADES = [
59
+ "3.68.0 — Control por foto: `envio_desde_etiqueta_ml` acepta `nodoEntrega` (nombre o id de un nodo del `grupo`) = el nodo que RECIBIÓ y entregó el paquete. Con `fecha` + `grupo` + `nodoEntrega` una planilla atrasada entra al CIERRE SEMANAL entre nodos en su día real (ej. 5 envíos de un cliente de Envíos Frank que entregó FastCorreo el lunes 14: fecha 14/09, grupo Portela, nodoEntrega FastCorreo). Antes solo se ponía con `autoRutear` y si la zona tenía un único responsable; si no, quedaba fuera del cierre. Si el envío ya tenía OTRO nodo que entrega no se pisa (avisa). Si la semana ya cerró, entra en el cierre siguiente marcado como tarde, con su fecha real. No mueve dinero.",
59
60
  "3.67.0 — TARIFA de grupo de una: `grupo_tarifa_set` fija la tarifa de clearing por zona (cercana/media/lejana/muyLejana) de TODO un grupo — el default del grupo y el precio de cada nodo miembro — en una sola llamada, sin ir nodo por nodo (ej. dejar un grupo nuevo en 2700 los 4 tramos). Con `soloDef` toca solo el default. Solo la comisión (admin) del grupo o el admin global. Es config del clearing, no mueve dinero.",
60
61
  "3.66.0 — COMPOSICIÓN de zonas de grupo: `zona_mover_metazona` reclasifica una metazona/localidad de una zona de grupo a otra del mismo grupo sin tocar el nodo responsable (ej. 'El Palomar' mal puesto en Morón → Tres de Febrero). `zona_componer_grupo` crea/edita una zona de grupo agregando/quitando metazonas y sumándole un nodo responsable — sirve para armar las zonas de un grupo NUEVO con su composición completa (el ruteo matchea por metazona exacta, así que una zona de CABA necesita 'CABA · Barrio' y 'Barrio'). Solo la comisión (admin) del grupo o el admin global.",
61
62
  "3.65.0 — SIN VENDEDOR: `sin_vendedor` muestra las cuentas de Mercado Libre y los envíos cargados con foto que tu nodo tiene sin vendedor (por ejemplo, un nodo recién dado de alta con etiquetas de cuentas no vinculadas ya escaneadas), y `asignar_sin_vendedor` los asigna a UN vendedor en un paso: asocia cada cuenta, le pasa todos sus envíos, le crea el usuario si hace falta y devuelve un enlace de vinculación por cuenta. Cuando el vendedor autoriza el enlace, lo que quedaba de esa cuenta se le engancha solo.",
@@ -866,6 +867,7 @@ if (ALLOW_WRITE) {
866
867
  avanzarA: z.enum(["colectado", "procesado", "entregado"]).optional().describe("Control por foto: avanza el envío EN UN PASO registrando CADA estado intermedio (atribuido a vos, el usuario MCP). 'colectado' / 'procesado' (En centro) / 'entregado' (recorre A retirar→Colectado→En centro→[grupo=En camino]→Entregado). 'entregado' es la vía rápida para el clearing entre nodos."),
867
868
  autoRutear: z.boolean().optional().describe("Planilla: asigna automáticamente el NODO y/o MENSAJERO responsable de la ZONA de reparto del destino. Configurá antes los responsables con `asignar_nodo_zona`/`asignar_mensajero_zona`."),
868
869
  grupo: zStr().describe("Control por foto: nombre o id de un GRUPO logístico tuyo (ej. 'Bonorino') — despacha por ese grupo (queda 'En camino', su mensajero es el integrante del grupo)."),
870
+ nodoEntrega: zStr().describe("Solo staff, va con `grupo`: nodo (nombre o id) del grupo que RECIBIÓ y entregó el paquete (ej. 'FastCorreo'). Es el que cobra el traspaso en el cierre semanal entre nodos; sin esto el envío solo entra al cierre si `autoRutear` encuentra UN responsable de zona. Si el envío ya tenía otro nodo que entrega, no se pisa."),
869
871
  fotoRuta: zStr().describe("RUTA LOCAL de la foto de la etiqueta en tu compu (ej. 'C:\\\\Users\\\\...\\\\Desktop\\\\etiquetas\\\\ml_123.jpg') — NO la imagen, solo la ruta, para reencontrar la foto. Mandala SIEMPRE que la dirección tenga '*'."),
870
872
  montoCobro: zNum(), mensajero: zStr().describe("Mensajero que hizo el paquete (de tu nodo)"),
871
873
  reusarEtiqueta: z.boolean().optional().describe("ML MANUAL (no vinculado): true = REUSA el mismo tracking/QR/etiqueta de ML que ya viene impreso (NO genera uno nuevo), lo marca 'ml_manual' y es idempotente. Usalo cuando el paquete YA está etiquetado por ML pero no está vinculado a una cuenta."),