FulfyEcom
DASHBOARD ML COLOMBIA
Usuario
Contraseña
Usuario o contraseña incorrectos
☰
FulfyEcom
ML Colombia
Tienda
Período
Inicio Changelog
Analítica
Dashboard Rentabilidad Rendimientos Publicidad
Mercado Libre
Inventario Crear Publicación Crear infografías Promociones Liquidación
Postventa
Órdenes Calidad
Gestión
Envíos Full Importaciones IA Asistente
Config
Administración Costos Fijos
C
Camilo
Dashboard
Últimos 30 días · Mercado Libre Colombia
Cargando datos...
Órdenes
Órdenes pagadas · ML Colombia
Cargando...
Envíos Full?
Qué mandar a Full
Cargando...
Importaciones?
Qué pedir a China
Cargando...
📥 Importar hoja de pedidos a China
Excel/CSV del proveedor. Antes de guardar se abre una vista previa editable; solo entran las filas con Destino = MELI.
+ Registrar nuevo pedido a China
Cargando pedidos...
+ Registrar stock recibido en Cali
Se registra por familia. Si viene de un pedido a China, elegilo para marcarlo como recibido (acepta parciales).
Cargando stock de Cali...
Crear Publicación
Publicar un producto nuevo directo en Mercado Libre Colombia
1. Datos básicos
Título
Categoría
2. Características
Elegí una categoría en la sección 1 para ver las características.
Características secundarias (opcionales)
3. Imágenes
Carpeta de Google Drive (trae todas las imágenes sueltas en esa carpeta, ignora subcarpetas)
⚠️ La carpeta tiene que estar compartida como "Cualquier persona con el enlace puede ver".
4. Descripción
ℹ️ Para generar la descripción con IA, primero cargá los datos de arriba: como mínimo título, categoría e imágenes — cuantos más datos tengas cargados (características, tendencias, etc.), mejor va a salir.
⚠️ Para revisar antes de publicar
    💡 Sugerencias para características secundarias
    5. Información del producto
    Condición
    Tipo de publicación
     
    ML puede forzar envío gratis igual en Premium/Clásica por encima de cierto precio, sin importar lo que elijas acá.
    SKU / familia
    Código de barras (opcional)
    Precio (COP)
    Stock inicial
    Dimensiones y peso del paquete (para el envío) — precargado con un default, editable
    Altocm
    Anchocm
    Largocm
    Pesog
    📦 Se va a publicar como producto simple (sin variantes) — usa el SKU, precio, stock y dimensiones de arriba.
    6. Resumen
    ℹ️ Esta cuenta maneja el stock por bodega (multi-warehouse: bodega propia Fulfy Bogotá + Full ML). El "Stock inicial"/stock por variante cargado acá se asigna automáticamente a la bodega propia después de crear cada ítem. Full ML no se carga desde acá — para eso seguí usando "Envíos Full" como siempre.
    Rentabilidad por producto
    Revenue − comisión real − envío real − COGS − retención − Ads, por producto
    Cargando...
    Inicio
    Qué hacer hoy
    Inventario
    Stock por producto valorizado a costo Fulfy
    MOSTRAR:
    Cargando inventario...
    Calidad
    Reclamos y devoluciones por producto
    Cargando reclamos...
    Costos Fijos
    Bodega, personal, software y más
    IA Asistente
    Pregunta sobre tus ventas, márgenes y estrategia
    Crear infografías
    Imágenes de venta para ML / Shopify · la portada de ML va con fondo blanco y sin textos: usa estas desde la foto 2
    📸 Captura desde marketplace (prueba)
    1. Arrastra este botón a tu barra de marcadores (una sola vez): 📸 Mercametrics
    2. Abre el producto en Amazon, Temu, AliExpress o Mercado Libre, baja hasta las opiniones para que carguen y dale clic al marcador.
    3. Se abre esta página con lo que se pudo leer.
    Foto del producto *
    Arrastra la foto aquí o haz clic para elegir
    PNG, JPG o WEBP · máx. 20 MB
    Imágenes de ejemplo (estilo) hasta 4 · también puedes pegar con Ctrl+V
    Arrastra o haz clic para agregar ejemplos
    Título
    Beneficios uno por línea
    Especificaciones medidas, materiales, capacidad…
    Instrucciones de estilo
    Links uno por línea · imagen = ejemplo extra, página = contexto
    Escenas
    Los datos de arriba son la info general del producto. Cada escena genera una imagen distinta, con sus propios textos.
    Formato
    Calidad
    Cantidad
    Resultado
    Generando… puede tardar hasta 2 minutos
    🖼️
    Sube la foto del producto, escribe los textos y genera.
    Ver prompt usado
    Historial
    Administración
    Tiendas (cuentas de Mercado Libre) y usuarios del equipo
    Tiendas
    Cuentas de Mercado Libre que maneja la app · el selector de arriba elige cuál ves
    Nueva tienda
    Nombre
    País
    API key de Fulfy — opcional: sin Fulfy la tienda no tiene stock de bodega ni costos
    Después de crearla, conectá su cuenta de Mercado Libre desde la tabla.
    Cómo conectar una cuenta de Mercado Libre
    Conectar con ML (recomendado): abre el login de Mercado Libre y vuelve solo. Entrá con la cuenta de ESA tienda: si el navegador ya tiene otra cuenta de ML abierta, usá una ventana de incógnito o cerrá la sesión de ML antes.
    Pegar tokens: Access Token (APP_USR-…) y Refresh Token (TG-…, permite la renovación automática) de la app en ML Developers →. El server los valida con Mercado Libre antes de guardarlos.
    🔒 Los tokens y la API key de Fulfy quedan solo en el servidor; nunca vuelven al navegador.
    Usuarios
    Equipo y roles (admin, dev, operador) · ven todas las tiendas
    Changelog
    Historial de versiones · MercaMetrics
    v3.2
    CALEVI SAS · meli.fulfyecom.com
    v3.2 Multi-tienda, Administración, roles e Inicio Octubre 2026 · versión actual
    NUEVO
    Crear infografías: serie armada desde la captura del marketplace (21-oct-2026)
    Después de capturar un producto con el marcador, eliges la foto y "✨ Armar serie" deja el formulario listo: foto del producto, título, beneficios, ficha técnica en sistema métrico y 7 escenas en español. Las opiniones guían qué destacar, sin inventar datos. Revisas y generas.
    NUEVO
    Liquidación: valor del stock por SKU y liquidar con el % de retorno que elijas (20-oct-2026)
    Panel nuevo en Mercado Libre (solo Admin/Dev). Un renglón por SKU con stock: unidades (bodega y Full), valor a costo Fulfy, rotación (ventas de 30 días y días de stock), precio y margen de hoy (la publicación que más vende, con los costos de Promociones) y valor + ganancia: el valor de la mercancía a costo más lo que se gana vendiendo todas las unidades. Arriba: valor del stock, valor + ganancia, valor con rotación lenta (más de 90 días o sin ventas) y la caja estimada de lo que está en liquidación. La tilde Liquidar pide el % de retorno (10% por defecto) y muestra el precio piso, el descuento, la caja y el valor + ganancia (costo + ganancia, en grande) antes de confirmar. Se pueden abrir varios a la vez, cada uno con su %: con 2 o más aparece Liquidar seleccionados para guardarlos todos juntos. Cada producto lleva su foto al lado del nombre. En Promociones, todas las publicaciones de ese SKU salen de todas las reglas (topes de descuento, margen mínimo de 20%, ticket mínimo, 2 por SKU, poco stock, rotura, dropshipping, Meli+) y van siempre con promo al precio más bajo que deje ese margen: la campaña de ML más profunda que cumpla o, si ninguna sirve, un descuento individual. Llevan la etiqueta 🔥 LIQUIDACIÓN, tienen su filtro y aparecen en 🚨 Faltan promo mientras no tengan promo. Se aplica a mano desde Promociones, como siempre. Se guarda por tienda y lo ven igual el operador e Inicio; al quitarla, el SKU vuelve a las reglas normales (lo ya aplicado en ML queda como está).
    NUEVO
    Envíos Full: el sugerido ya no se achica por un quiebre de stock (20-oct-2026)
    El sugerido usa las ventas de 30 días; si la publicación estuvo sin stock en Full, esas ventas quedan bajas y se sugería mandar de menos (o nada, si no vendió en 30 días). Ahora, si lo que hay en Full (+ stock propio) no alcanza para 7 días al ritmo de 60 días y ese ritmo es mayor que el de 30, se usa el de 60 para el sugerido, la cobertura y la reserva de bodega. La fila muestra ⚠️ Quiebre · ritmo 60d (al pasar el mouse, las dos cifras). Una publicación en quiebre tampoco se sugiere para "Sacar de Full" por haber vendido poco. Sin quiebre, todo igual que antes.
    NUEVO
    Inicio › Resumen: qué publicaciones explican cada cifra (20-oct-2026)
    Debajo de "Tus ingresos bajaron/subieron $X principalmente por…" y de lo que amortiguó o frenó, una línea ↳ Sobre todo: con las 3 publicaciones que más aportan a esa cifra (tráfico, conversión o ticket, con el mismo reparto hecho por publicación), su monto y clic para abrir en ML. Si entre todas no explican ni la mitad de la cifra es efecto mezcla (por ejemplo, el ticket promedio cae porque se vendió menos lo caro, aunque ninguna bajó su precio): se aclara y se listan las que más cambiaron sus ingresos. Sin visitas del período anterior, se listan las que más movieron los ingresos. Los avisos "📦 bajaron por quiebre de stock" y "🚚 bajaron sin stock para vender, pero hay en Fulfy" ahora nombran sus publicaciones (hasta 5, mayor caída primero, "y N más"), cada una con su caída y el stock de hoy (Full o ML y Fulfy).
    NUEVO
    Rendimientos: publicaciones que gastan en Ads sin vender (20-oct-2026)
    Antes la tabla salía solo de las órdenes y una publicación con gasto en Ads y cero ventas en el período no aparecía. Ahora se suman al final (sin ranking, facturación $0, mayor gasto primero), con un aviso arriba de la tabla que las cuenta y filtra al hacer clic. Etiqueta Gasta sin vender: se mide en plata contra lo que deja una venta al precio de hoy antes de Ads (comisión, envío y costo Fulfy estimados; sin costo Fulfy, 30% del precio). Rojo si ya gastó eso, o tiene 30+ clics sin compra, o a ese precio la venta no deja nada; ámbar desde la mitad; gris "Sin ventas aún" con menos. El texto dice si el problema parece el anuncio (CTR bajo) o la ficha/precio (clics sin compra). En la vista por SKU, si otra publicación del SKU vendió, el gasto se suma a ese SKU. Los promedios de CTR, CVR Ads, ACOS e Inversión Ads pasan a incluir ese gasto. Ads sin ventas (las que venden orgánico pero nada por Ads) usa el mismo criterio por plata, y también Sin ventas en Publicidad (contra el 30% del precio).
    NUEVO
    Inicio: ❓ Preguntas sin responder (20-oct-2026)
    En Qué hacer hoy, junto a Reclamos y mensajes, una tarjeta con las preguntas de compradores de los últimos 3 días que siguen sin respuesta: la más vieja primero, hace cuánto llegó (ámbar desde 6 h, rojo desde 24 h), la publicación (clic = abre en Mercado Libre) y el texto de la pregunta. ↗ Responder lleva a la página de preguntas del vendedor en ML. La ven todos los roles. Se actualiza cada 2 minutos.
    FIX
    Inicio: los botones de Promociones urgentes dejaban de andar (20-oct-2026)
    Después de aplicar una promo desde Inicio, el resto de los botones Entrar no hacía nada (o podía abrir la confirmación de otra publicación): al actualizar, se redibujaba el panel Promociones oculto y los botones de Inicio quedaban apuntando a la lista vieja. Ahora se redibuja Inicio con el plan nuevo (sin volver a pedir costos a Fulfy) y la publicación aplicada sale de la lista.
    NUEVO
    Relámpago y oferta del día solo en las 2 publicaciones del SKU (20-oct-2026)
    En Inicio y en el panel Promociones, el relámpago y la oferta del día se recomiendan solo en las 2 publicaciones que exponemos de cada SKU (líder y segunda), para concentrar exposición y ventas. Las de precio lleno ya no los recibían; ahora tampoco una 3ª publicación que lleva promo solo por tener stock en Full: queda con su promo principal y el relámpago aparece con el motivo "oferta corta solo en las 2 publicaciones que exponemos del SKU". En Inicio, los nombres abren la publicación en Mercado Libre y una campaña ya no se repite entre "Sin promo" y "Relámpago".
    NUEVO
    Inicio: Promociones urgentes = publicaciones sin promo para entrar (20-oct-2026)
    La tarjeta 🏷️ Promociones urgentes muestra solo publicaciones que hoy no tienen ninguna promo activa ni programada y para las que el plan propone Entrar ya: pasan los mismos filtros del panel Promociones (2 publicaciones con promo por SKU, stock, margen, tope, ticket mínimo). Primero las de 🚨 Faltan promo (Full, sobrestock…), después el resto. No aparecen las de poner en cola (arrancan más adelante), Meli+, las que van a precio lleno a propósito, las pausadas ni las sin stock. Debajo, los relámpago y oferta del día para entrar ya. El indicador 🚨 Faltan promo sigue igual a la pestaña del panel.
    NUEVO
    Promociones más simple (15-oct-2026)
    Pestañas por qué hacer: 🚨 Faltan promo · 🔁 Ajustar (ya tienen promo y hay que cambiarla o salir) · 🎯 Campañas ML (relámpago, del día y eventos ⭐ PREMIUM juntos) · 📋 Todo. El menú de la barra es la situación de cada publicación, la misma de ⚙ Config: Full, Sobrestock, Dropshipping, Sin costo, Poco stock, Normal e Inactivas (sin stock o pausadas). Cada producto lleva una sola etiqueta de situación más los días de stock (con 🛑 o ⚠ si rompe stock en Full); los productos arrancan cerrados y se abren con un clic. Se quitaron las tarjetas de arriba (Faltan promo, Hacer hoy, Para salir, Cupones), "Cómo se decide" y el botón de campañas por publicación: las campañas y el calendario siguen en + detalle. Meli+ se muestra en todas las publicaciones donde ML lo permite: en las que más venden (top 20, configurable) va activo con precio y entra en Aplicar; en el resto aparece calculado (promo + 5 pts) pero desactivado: en la confirmación hay una casilla Meli+ (marcada de entrada solo en las que más venden) y esas nunca entran en Aplicar. En ⚙ Config, "siempre con promo" es una casilla por situación (Full, Sobrestock, Dropshipping, Sin costo) y decide 🚨 Faltan promo; el valor original se ve al pasar el mouse.
    NUEVO
    Promociones: pestaña ⚙ Config (15-oct-2026)
    Los valores con los que se arma el plan se ven y se editan en la pestaña ⚙ Config, solo para Admin y Dev, en 3 tarjetas: Descuentos (2 niveles, Normal 30% y Alto 35%, y cuánto lleva cada situación: un nivel o un % propio; si cambiás el nivel cambian todas las que lo usan), Situaciones (cuándo un producto es Full por romper stock, poco stock, sobrestock, estrella, dropshipping o remate) y Límites (margen mínimo y objetivo, piso, precio mínimo, redondeo). Lo propio de Mercado Libre (revisiones, duración y mínimo del individual, relámpago, Meli+, paso fino, Ads/u y las palabras de los eventos ⭐ PREMIUM) va en Avanzado, plegado. Todo es editable; los cortes de dropshipping y el margen objetivo son copias propias de Promociones (Importaciones y Márgenes no cambian). Se guardan por tienda; al guardar se recalcula el plan sin volver a pedir datos a ML ni a Fulfy, y lo usan todos (también el operador y la tarjeta de Inicio). En ámbar, lo que no está en el original; Volver a los valores originales los restaura.
    NUEVO
    Promociones: pestañas ⚡ Relámpago y del día y ⭐ PREMIUM (14-oct-2026)
    ⚡ Hacer hoy se reemplazó (repetía casi todo Faltan promo; las acciones de salir quedan en Todo). ⚡ Relámpago y del día: todas las invitaciones a relámpago y oferta del día, también las de los próximos días, con precio, descuento y margen según las reglas de siempre (tope +5, principal +5, nunca salir): para entrar o poner en cola, las que no convienen con el motivo y las ya programadas. ⭐ PREMIUM: los eventos de ML (Hot Sale, Black Friday, Cyber, 10:10, liquidación post evento…), con el cálculo de cada publicación aunque arranquen después de la revisión: poner en cola si conviene (margen, tope, ticket mínimo, líder/segunda, stock) o el motivo si no. Aplicar actual en estas pestañas manda lo que conviene; en Todo no las incluye. En Inicio, el botón pasa a Relámpago y del día.
    MEJORA
    Promociones: menos filtros (14-oct-2026)
    Quedan 3 pestañas: ⚡ Hacer hoy · 🚨 Faltan promo · 📋 Todo (se quitaron En orden y Sin promo: se ven en Todo y cada producto ya muestra todas sus publicaciones). El menú queda en Todo · ⚡FULL · 📦 Sobrestock bodega · ⛔ Sin stock · ⏸ Pausadas en ML (se quitaron Resto y Activas en ML).
    MEJORA
    Promociones: "+ detalle" con campañas combinadas (14-oct-2026)
    El detalle es más corto: arriba el calendario del producto; después una línea por publicación (…1234, líder/segunda/precio lleno, ventas, visitas, precio y margen de hoy); y abajo cada campaña de ML una sola vez, con cada publicación adentro mostrando MCO · descuento · margen (● activa, verde = va en el plan, rojo = salir, gris = sin uso; el precio y el motivo al pasar el mouse) y su botón Salir o Entrar igual. Antes se repetía la misma campaña en cada publicación.
    MEJORA
    Promociones: la segunda publicación del producto va pegada a la líder y puede tomar la posta (14-oct-2026)
    En un producto con varias publicaciones, las dos con promo van coordinadas. La líder (la que más vende) lleva el descuento más alto y la segunda entre 0 y 3 puntos menos (antes 5). Cuando el precio lo elegimos nosotros, va 1 punto debajo, o 2 o 3 si hace falta para el margen. Si nunca supera a la líder, la campaña queda bien. O bien, con Meli+: la segunda va 5 puntos debajo y el Meli+ queda al mismo descuento que la líder (solo publicaciones del top de ventas, con margen y con la principal todavía sin activar). Pasar la posta: si la líder baja en ventas y visitas frente al período anterior y la segunda sube sin bajar en nada, la segunda pasa a ser la líder (lo dice el "por qué" con 🔁).
    MEJORA
    Promociones: un solo calendario por producto en "+ detalle" (14-oct-2026)
    Al abrir + detalle, el plan de todas las publicaciones del producto se ve en un solo calendario arriba de la tabla (cada barra dice de qué publicación es, …1234). La columna de cada publicación queda solo con sus campañas de ML.
    MEJORA
    Promociones: nombre corto y sin "Qué hacer" (14-oct-2026)
    En la cabecera de cada producto el nombre queda en 2 o 3 palabras (el nombre completo aparece al pasar el mouse). Se quitó la columna Qué hacer (el título y la etiqueta de cada fila): la acción se ve en el botón (Entrar, Salir…) y el motivo debajo de la campaña.
    MEJORA
    Promociones: cabecera del producto más simple (14-oct-2026)
    La cabecera de cada producto queda en unidades · nombre · SKU y después las etiquetas. Se quitó la parte que repetía unidades (días de stock en texto, unidades Full sueltas, bodega y ⭐). La etiqueta ⚡FULL lleva la cantidad adentro (⚡FULL 38), también en las filas de cada publicación y en Inicio. Al final va una etiqueta con el stock: N DÍAS (en rojo si es poco o rompió stock), SIN VENTAS o SIN STOCK.
    MEJORA
    Promociones: se ven todas las publicaciones, también las pausadas o sin stock (14-oct-2026)
    El panel ahora muestra también las publicaciones pausadas en Mercado Libre (por falta de stock o pausadas a mano), con la etiqueta ⏸ PAUSADA. No llevan plan de promo ni acciones (tampoco entran en Aplicar actual ni en Faltan promo) hasta que se reactiven. El menú de filtros suma ▶ Activas en ML, ⛔ Sin stock (activas o pausadas) y ⏸ Pausadas en ML; con Mostrar todo y Todo el stock se ve todo. Además, en cualquier pestaña, si un producto aparece se ven todas sus publicaciones con lo que corresponde a cada una (✓ promo activa en orden, entrar, salir o precio lleno), no solo las que cumplen la pestaña. Aplicar actual sigue mandando solo las acciones de la pestaña.
    MEJORA
    Promociones: Full mínimo 30%, aviso de rotura de stock, sobrestock 35% y dropshipping siempre con promo (14-oct-2026)
    Full: la promo va al 30%. Si al 30% el margen queda debajo de 20%, baja de a 1 punto hasta 20% de descuento; si ni así llega, queda sin promo con el aviso. Stock con la venta de 30 días: con menos de 30 días la promo va igual con el aviso ⚠ vamos a romper stock (en la fila, en la confirmación y en Aplicar actual). Con menos de 7 días no se propone promo (🛑 ROMPIÓ STOCK) y las activas quedan como están. Para hacerla igual, en las campañas de la publicación aparece Entrar igual: la confirmación vuelve a avisar que rompimos stock y hay que marcar "Confirmo" (nunca entra en Aplicar actual). Sobrestock en bodega: 35%, bajando si el margen no da 20%. Dropshipping (menos de 5 u. y menos de 10 ventas, sin Full): siempre al 30% sin ninguna otra regla (margen, ticket, líder del SKU, stock); si ML no la invita, descuento individual al 30%. Cuenta en 🚨 Faltan promo y lleva la etiqueta DROPSHIPPING.
    MEJORA
    Promociones: etiquetas SOBRESTOCK y SIN COSTO FULFY, promo al 29% sin costo, precios en 00 y stock primero (14-oct-2026)
    La cabecera de cada producto muestra etiquetas como la de ⚡FULL: 📦 SOBRESTOCK (bodega Fulfy para más de 90 días) y SIN COSTO FULFY. Las publicaciones sin costo en Fulfy ahora tienen plan: promo al 29% por defecto con las mismas prioridades (campaña larga, co-fondeada primero, la líder del SKU con más descuento y las demás 5 puntos menos, ticket mínimo $60.000, tope 30%); si ninguna campaña de ML sirve, descuento individual al 30%. Sin costo no hay margen, así que las promos activas no se sacan y no se sugiere Meli+. Todos los precios que elegimos (DEAL, relámpago, individual, Meli+, también el sugerido de ML) terminan en 00 (ej. $50.000 o $50.100, nunca $50.032); los de precio fijo de ML (co-fondeadas) van tal cual. La cabecera del producto arranca con el stock total.
    MEJORA
    Promociones: la ventana se cierra sola al aplicar con éxito (13-oct-2026)
    Cuando Mercado Libre acepta la promo, la ventana de confirmación se cierra sola y aparece un aviso ("✓ Mercado Libre aceptó…"), en Inicio y en Promociones. En Aplicar actual se cierra sola solo si se aceptaron todas. Si alguna falló o se detuvo el envío, queda abierta con el ✓/✕ de cada una. Si ML rechaza, la ventana sigue abierta con su mensaje.
    MEJORA
    Inicio: botón para aplicar la promo desde Qué hacer hoy (13-oct-2026)
    En la tarjeta Promociones urgentes de Inicio, cada fila (faltan promo y relámpago u oferta del día) tiene el mismo botón que el panel Promociones: Entrar, Poner en cola o Meli+. Abre la misma confirmación con precio, descuento, margen y avisos (con precio editable donde lo elige el vendedor), y al aplicar queda "✓ Aplicado". No vuelve a pedir costos a Fulfy.
    MEJORA
    Promociones: campañas en desplegable, sin columna Cuándo (13-oct-2026)
    Las campañas de ML de cada publicación quedan ocultas detrás del botón ▸ Campañas (N · X activas), debajo del título de la publicación. Al abrirlo, la lista aparece arriba de todo en la fila, antes de las acciones. Se quita la columna Cuándo: lo que va en cola ya dice "arranca dd/mm" en el por qué. El menú de stock (Todo el stock / FULL / Sobrestock / Resto) queda del tamaño de los botones; antes se estiraba a todo el ancho.
    MEJORA
    Promociones: una fila por publicación y ofertas del día con sobrestock o caída de ventas (13-oct-2026)
    La vista pasa a una fila por publicación, con un borde marcado entre una y otra. A la izquierda va la publicación (foto, título, MCO, Full o precio lleno). A la derecha, sus acciones en líneas compactas: qué hacer · campaña y por qué · precio · margen · cuándo · botón. Abajo, en la misma fila, todas sus campañas de ML. La oferta del día se recomienda aunque no baje más que la oferta principal. Si el producto tiene sobrestock en bodega o sus ventas cayeron 20% o más contra el período anterior, también se recomienda por encima del tope de descuento (siempre con margen mínimo y ticket mínimo); el motivo aparece en "por qué".
    MEJORA
    Promociones: relámpago y oferta del día solo para entrar (13-oct-2026)
    El plan ya no recomienda salir de un relámpago ni de una oferta del día: las activas quedan como están y cuentan como oferta corta. Solo se recomienda entrar, y esas recomendaciones aparecen en Hacer hoy del panel y en Inicio → Qué hacer hoy, en la tarjeta Promociones urgentes ("⚡ Relámpago y oferta del día para entrar"). Corregido: ML manda el precio mínimo del relámpago pero no el máximo, y por eso nunca se calculaba su precio ("sin precio para calcular el margen"). Ahora el techo es el precio original y se propone principal +5 puntos bajando hasta +1, con margen mínimo y tope de cortas.
    MEJORA
    Promociones: una sola vista, más simple (13-oct-2026)
    Se juntan Simple y Avanzada en una sola vista (sin selector). Debajo de cada publicación aparecen todas sus campañas de ML en una línea compacta (● = activa; verde = la usa el plan, rojo = salir, gris = no se usa; al pasar el mouse, precio, fechas y motivo). Cada producto tiene un botón + detalle que abre lo que antes estaba en Avanzada, con menos columnas: Publicación · Ventas y stock · Precio y margen de hoy · Plan (línea de tiempo) con la lista completa de campañas a la vista y Salir manual en las activas. Se quitó la columna "Por qué" de Avanzada. El filtro de stock (Todo / FULL / Sobrestock / Resto) pasa a un menú desplegable al lado de las pestañas, así queda una sola fila de botones.
    MEJORA
    Inicio: Promociones urgentes en lugar de Mayor caída / Mayor crecimiento (13-oct-2026)
    Qué hacer hoy queda más simple: se quitan las tarjetas Mayor caída y Mayor crecimiento (el análisis sigue en la pestaña Resumen). Junto a Stock para reponer aparece 🏷️ Promociones urgentes: los productos con unidades en Full o sobrestock en bodega que no tienen ninguna promo activa ni programada (lo mismo que la pestaña 🚨 Faltan promo de Promociones), con lo que propone el plan (entrar a qué campaña y con qué descuento). Botones para ir a Faltan promo y a Hacer hoy. El indicador "Mayor caída" pasa a ser 🚨 Faltan promo. Usa los mismos datos que el panel Promociones (sin llamadas extra a Fulfy) y si se abre Promociones enseguida, no vuelve a cargar todo.
    MEJORA
    Promociones: Aplicar actual y pestaña Mostrar todo (13-oct-2026)
    El botón ⚡ Aplicar todo pasa a llamarse ⚡ Aplicar actual y manda solo las acciones pendientes de lo que se ve en pantalla: la pestaña elegida, el filtro de stock (Full, sobrestock…) y el buscador. Nueva pestaña 📋 Mostrar todo en la vista simple con todos los productos; con Todo el stock y sin buscar, Aplicar actual manda todo lo pendiente (lo que antes hacía Aplicar todo). La revisión muestra qué pestaña y filtro se están aplicando.
    MEJORA
    Promociones: vista simple más limpia y etiqueta FULL (13-oct-2026)
    La vista Simple tiene 4 pestañas: 🚨 Faltan promo, ⚡ Hacer hoy (entrar, en cola, Meli+ y salir juntos), En orden y Sin promo. Las pestañas de cada acción siguen en Avanzada. La tabla pasa de 9 a 6 columnas: el descuento va al lado del precio, y el cuándo y el por qué van debajo de "Qué hacer". La explicación de reglas queda plegada en "ℹ Cómo se decide". El stock Full se marca en todo el panel con una etiqueta verde con letras blancas ⚡FULL y las unidades en verde. Los productos con unidades en Full llevan además un borde verde en su fila.
    FIX
    Promociones: se ven todas las publicaciones y "falta costo" ya no manda a salir (12-oct-2026)
    Las publicaciones a precio lleno (las que no llevan la promo porque otra del mismo SKU la lleva) ya no se ocultan: aparecen en gris dentro de su producto, en las dos vistas, con "💲 Precio lleno" y en qué publicación va la promo. El aviso en rojo "sacar la oferta" queda solo para las que todavía tienen una oferta activa. Si el SKU no tiene costo en Fulfy y no se puede calcular el margen, el panel ya no recomienda salir de las promos activas: muestra "⚠ Falta costo", las deja como están y la publicación aparece en la pestaña Todo. Las campañas sin precio (por ejemplo, cupones) ya no se marcan como "sin costo en Fulfy" cuando el costo sí está cargado.
    FIX
    Inicio adaptado a celular, tablet y laptop (08-oct-2026)
    En Qué hacer hoy las tarjetas Mayor caída, Mayor crecimiento y Stock para reponer van de a 3 en pantalla ancha. Si no entran, la que sobra baja a otra fila a todo el ancho, y en celular van una debajo de otra. En celular la página ya no se sale de la pantalla: los títulos largos se cortan con "…" (esto mejora todos los paneles) y las tarjetas no se estiran de alto. En Reclamos y mensajes, si la tarjeta es angosta, el título baja a su propia línea.
    MEJORA
    Administración: borrar tienda y botones de conexión más claros (08-oct-2026)
    Borrar reemplaza a Desactivar. Un cartel explica qué pasa y hay que escribir el nombre de la tienda para confirmar. Se desconecta la cuenta de Mercado Libre (se revoca la autorización de Mercametrics), se borran tokens, Fulfy, configuración y todos los datos de la tienda sin dejar copia, y desaparece del selector para todos. Lo que está en Mercado Libre no se toca. No se puede borrar la última tienda. Los botones pasan a llamarse Conectar con login ML (abre Mercado Libre y carga los tokens solo) y Pegar tokens a mano (la alternativa manual).
    MEJORA
    Períodos "Últimos N días" = N días completos, sin hoy (08-oct-2026)
    7, 15 y 30 días toman días cerrados, de hace N días hasta ayer. Hoy queda afuera porque todavía no terminó; antes eran N días más hoy a medias. Hoy, los meses y los rangos personalizados no cambian. El Dashboard muestra las fechas del período en la etiqueta. También cambian el ritmo de 15 días de Inventario y los 30 días de Promociones, que ahora son días completos.
    FIX
    Rentabilidad y Rendimientos: un día de más al final del rango (08-oct-2026)
    Con el navegador en hora de Colombia, la fecha final se corría un día hacia adelante en todos los períodos. Ahora toman exactamente los días elegidos.
    MEJORA
    Costos fijos prorrateados por día del período (08-oct-2026)
    En el Dashboard (y en el IA Asistente) los costos Mensual se reparten por día: un mes completo suma el monto exacto, 10 días de octubre suman 10/31. Los rangos que cruzan meses usan los días de cada mes. Los Anual se reparten por los días del año; Único y Por envío Flex siguen igual.
    NUEVO
    Multi-tienda: varias cuentas de Mercado Libre en la misma app (06-oct-2026)
    Selector de Tienda arriba de Período. Cada tienda tiene su cuenta de ML, su Fulfy (opcional) y sus propios datos: costos fijos, COGS, importaciones, publicidad guardada, tendencias, promociones y borradores. Usuarios, infografías y TRM son compartidos. Cambiar de tienda recarga el panel, así nunca se mezclan datos. Una tienda sin Fulfy se muestra sin costos. La cuenta de siempre quedó como la tienda principal.
    NUEVO
    Panel Administración: Tiendas y Usuarios (06-oct-2026)
    En Config (solo Admin/Dev) junta lo que antes era Conectar ML y Usuarios. Permite crear tiendas (nombre, país y moneda, API key de Fulfy), renombrarlas, cambiar Fulfy, conectar la cuenta de ML con login o pegando tokens, y ver el detalle de conexión (usuario ML, token, cuentas de Ads). Una cuenta de ML no puede estar en dos tiendas.
    NUEVO
    Dashboard: aviso "Ventas que se fueron" (06-oct-2026)
    Muestra las ventas canceladas y lo devuelto en reembolsos parciales del período; los reclamos abiertos aparecen como "en riesgo". El costo de devoluciones de Facturación ML es solo informativo y no resta en la utilidad.
    MEJORA
    Limpieza: menos llamadas y carga compartida (06-oct-2026)
    El catálogo de Fulfy se lee una sola vez y lo comparten Dashboard, Resumen, Envíos Full y Rentabilidad. Antes el Dashboard hacía una llamada por SKU. Las órdenes del mismo período también se reutilizan entre paneles y los Ads por publicación salen en una sola llamada. Se quitaron funciones y archivos sin uso. Los números no cambian. Promociones pasó a la sección Mercado Libre del menú.
    NUEVO
    IA Asistente con datos reales (01-oct-2026)
    El asistente consulta los datos de la app para cualquier período: ventas (y comparación), órdenes, reclamos y mensajes, stock. Admin/Dev además ven rentabilidad, rentabilidad por producto y publicidad. Usa los mismos cálculos que los paneles, así da los mismos números. Explica qué hacer en cada caso (mensajes, reclamos, mediaciones, stock, margen, Ads).
    NUEVO
    Infografías IA (01-oct-2026)
    Panel debajo de IA Asistente (solo Admin/Dev): genera imágenes de producto a partir de la foto, ejemplos de estilo y textos. Entrega la versión lista para ML (1200×1200) e historial. Límite de 30 imágenes por día.
    NUEVO
    Inicio: Reclamos y mensajes (01-oct-2026)
    Bloque con los mensajes postventa sin responder, reclamos abiertos y mediaciones, con link a la venta. Consultarlo no marca los mensajes como leídos.
    FIX
    Seguridad: archivos internos ya no son públicos (01-oct-2026)
    El sitio solo sirve la app y la API. Los archivos de datos, configuración y código del servidor dejaron de ser accesibles desde el navegador.
    NUEVO
    Roles de usuario y panel Inicio (30-sep-2026)
    Tres roles: Admin y Dev ven todo y gestionan usuarios. Operador ve Inicio, Inventario, Envíos Full, Órdenes, Calidad, Crear Publicación, IA Asistente (sin costos) y Promociones completo, sin montos de costo ni margen en el resto. El bloqueo se hace en el servidor, no solo ocultando en pantalla. Los paneles nuevos quedan solo para Admin/Dev. Inicio es la pantalla de arranque: KPIs, stock para reponer, productos que bajaron y subieron, reclamos. Admin/Dev tienen además la pestaña Resumen.
    QUITADO
    Menú reorganizado (30-sep-2026)
    Secciones Analítica, Mercado Libre, Postventa, Gestión y Config. Márgenes Pro pasa a llamarse Rentabilidad. Resumen pasa a ser una pestaña de Inicio. Se eliminaron los paneles viejos de Márgenes/Performance, la Rentabilidad anterior y Alertas de Stock (sus alertas viven ahora en Inventario). Los links viejos redirigen al panel nuevo.
    MEJORA
    Inventario, Envíos Full e Importaciones: criterios de stock (30-sep-2026)
    El criterio de alertas cambia en Inventario:
    • 🔴 Quiebre: Bogotá + Full + en tránsito alcanza para menos de 40 días, con el ritmo de 15 y 30 días.
    • 🟠 Sin stock en Bogotá: 0 en bodega y con ventas en 30 días.
    • Selector Activos / Todos.
    Envíos Full: urgente con menos de 15 días, opcional entre 15 y 25, objetivo 45 días. Se corrigió que en variantes Full el stock se contaba doble. Importaciones: el ritmo se pondera 50% últimos 20 días, 40% de 20 a 40 y 10% de 40 a 60; cobertura de 100 días.
    NUEVO
    Rendimientos: Ads y margen por publicación (30-sep-2026)
    Columnas Costo Ads, ACOS y Margen por unidad. Accionables nuevos: "Ads sin ventas", "ACOS alto", "Bajar puja o pausar Ads". Avisos de margen aparte: "Pierde plata" (<0), "Margen bajo" (<20%), "Revisar margen" (20–30%), "Ads se come el margen", "ACOS sobre equilibrio".
    NUEVO
    Costos fijos: por envío Flex y en dólares (30-sep-2026)
    Frecuencia Por envío Flex: el monto se multiplica por los envíos Flex del período. Moneda USD: se pasa a pesos con la TRM oficial del día; si no hay TRM, se avisa y no se suma.
    v3.1 Importaciones: carga masiva de pedidos a China desde Excel/CSV Julio 2026
    NUEVO
    Promociones: plan de campañas por publicación entre revisiones (1 y 15 de cada mes) (01-oct-2026)
    Panel nuevo en Analítica (solo Admin/Dev). Botones para aplicar en Mercado Libre (entrar, poner en cola, activar Meli+, salir) con confirmación que muestra precio, descuento, margen y lo que se envía; si ML rechaza, se ve su mensaje, sin reintentos; historial en el server. Botones habilitados para todas las publicaciones (el modo prueba con MCO2179583773 terminó). Botón ⚡ Aplicar todo en la vista simple: abre una revisión con todas las acciones pendientes (precio, descuento, margen y avisos), todas marcadas para desmarcar las dudosas; hay que tildar "Revisé todas" para enviar. Se mandan de a una (primero salir, después entrar/cola y al final Meli+), sin reintentos; si ML rechaza una se sigue con las demás y al final se ve ✓/✕ con el mensaje de ML; se puede detener a mitad de camino. Selector Simple / Avanzada: la simple (por defecto) es la lista de lo que hay que hacer hoy, una fila por acción (entrar, poner en cola, activar Meli+, salir) con campaña, precio, descuento, margen y fecha; la avanzada es el detalle por producto que sigue. Una fila por publicación con ventas (▲▼ vs período anterior), stock y días de stock (como Inventario), precio y margen de hoy, y el plan en una línea de tiempo hasta la revisión siguiente. Las campañas se revisan el 1 y el 15 de cada mes: se decide ahora lo que arranca antes de la próxima revisión o cierra inscripción antes, y lo que arranca más adelante va en cola (aceptar ahora, queda programado). Base = campaña de ML de ≥ 15 días activa hasta la próxima revisión (co-fondeada primero, después descuento dentro de 20–35%, más días y mejor margen); Meli+ (solo en las 20 publicaciones que más venden en el período, entre las que tienen stock suficiente, para darles tracción) con campañas DEAL de ML, sin crear descuentos individuales: si la principal es DEAL, en la misma campaña (precio Meli+ 5% más abajo); si no, otra DEAL de ML en paralelo con general = principal −4% y Meli+ = principal +1%. Detecta también las promos propias (descuento individual y otras que ML no lista como campaña), consultando cada publicación activa: se muestran como "Descuento individual (propio)" con su precio Meli+, siguen las mismas reglas y tienen botón Salir; si ya hay un precio Meli+ activo, no se sugiere otro. Ticket mínimo 0.000 en todas las promos (si el descuento lo pasa, el precio queda justo en 0.000; con Meli+, el Meli+ en 0.000 y el general 5 puntos arriba). Columna Por qué en las dos vistas con el motivo de cada recomendación, salvo remate (más de 30 u. y stock para más de 90 días o sin ventas: sin piso y margen ≥ 0), general = base −4% y Meli+ = base +1% (ML pide Meli+ 5% más abajo; si el margen Meli+ queda ≥ 30%, base / base +5%), y sin base el individual hace de base con 20% / 25%; picos = campañas cortas (relámpago, oferta del día, Hot Sale…) solo si bajan más que la base. Topes de descuento: stock normal 35% (relámpago y co-fondeadas 40%), poco stock (menos de 25 días; producto estrella —SKU en el 80% de la facturación, como Rendimientos— con más de 30 u.: menos de 15 días) 15% sin picos, sin stock nada. Margen con promo ≥ 20%. Publicaciones que comparten SKU: solo 1 lleva promo (la que más vende en el período; sin ventas, la de más visitas o visitas en alza) y una 2ª si vende al menos la mitad que la 1ª; las demás quedan a precio lleno para que la promo se vea como oferta (salir de sus campañas / no entrar). Precios que elige el vendedor (DEAL, individual, Meli+) redondeados a 000 o 500; en la confirmación se pueden editar precio y % (y el Meli+) con el margen recalculado y avisos (ticket mínimo, rango de ML, 5 puntos del Meli+, redondeo). Los productos con promos activas y nada que hacer siguen a la vista como "✓ Todo bien" (pestaña En orden). En la vista simple los productos son desplegables (arrancan cerrados, con un resumen de acciones en la cabecera; botón Abrir/Cerrar todo). En la vista simple cada producto lleva su cabecera (nombre, SKU, stock y Full), aunque tenga una sola publicación. Cada producto (el conjunto de SKU de las variantes de una publicación) es su propio grupo; una publicación combo que junta varios productos compite en cada uno, sin pegarlos en un solo grupo. Por SKU se muestran como máximo las 2 publicaciones que llevan la promo; las de precio lleno quedan ocultas salvo que tengan una oferta activa (aparecen en rojo para sacarla y desaparecen al salir). Las dos vistas agrupan por SKU (la simple, con una cabecera con stock, días y qué publicaciones tienen Full) y cada publicación muestra su stock Full ("Full N u." o "Sin Full"). La vista avanzada agrupa por SKU (cabecera con stock compartido y las publicaciones adentro; las de precio lleno sin gráfico). En campañas donde el precio lo elige el vendedor (DEAL) se propone el mayor descuento de la banda que deje margen ≥ 30% (si no, el menor que deje ≥ 20%), dentro del rango de ML, en lugar del sugerido por ML. La columna Ventas pasa a mostrar las unidades de cada publicación (y las del SKU abajo) y sus visitas. Lo activo que queda fuera del plan pasa a Para revisar con el motivo. Pestañas Con plan, Para revisar, Sin acción; la lista ordena lo más próximo primero. Margen = neto con los costos por unidad del período (los de Rentabilidad); Ads por unidad siempre de los últimos 30 días (gasto ÷ unidades, sin importar la barra) y, con menos de 5 u. vendidas, el % de Ads promedio de la tienda; est. = sin ventas en el período, con costo Fulfy. KPIs: campañas vigentes y del ciclo, con plan, Meli+ a activar, para revisar y cupones del período desde Mercado Pago (lo que puso ML y el cargo por cupón que paga el vendedor, hoy no restado en los márgenes).
    NUEVO
    Publicidad: datos en vivo desde la API de ML Ads (30-sep-2026)
    El panel Publicidad deja la carga manual de reportes .xlsx y lee la API de Product Ads con la barra global de período (máximo 90 días atrás, límite de ML). KPIs de resultado, tráfico y conversión con variación contra el período anterior del mismo largo, más Publicidad de Seguidores aparte. Campañas real vs. objetivo (ACOS y ROAS objetivo, presupuesto y uso), evolución diaria de toda la cuenta o por campaña y tabla de todos los anuncios con buscador, filtros, orden por columna y señales (Sin ventas, ACOS sobre objetivo, Escalar). Desplegable Campaña (o clic en la fila de la tabla): KPIs con objetivo, presupuesto y uso, evolución diaria con línea de ACOS objetivo, top 10 anuncios por inversión y tabla filtrada de esa campaña; en Toda la cuenta, gráfico de reparto por campaña con ACOS real vs. objetivo. Montos sin IVA, tal cual ML. Comparar / Tendencia sigue con jul/ago de los reportes y suma solo cada mes cerrado desde la API.
    MEJORA
    Dashboard: Publicidad ahora va con IVA (30-sep-2026)
    La tarjeta Publicidad con IVA pasa a ser la tarjeta Publicidad y entra en la utilidad, en la franja Rentabilidad Neta Real y en la Distribución de los ingresos. Desglose: Ads sin IVA (dato de la API) + Seguidores tal cual Facturación ML + IVA 19% sobre Ads = total Publicidad.
    NUEVO
    Dashboard: KPI Publicidad con IVA (29-sep-2026)
    Nueva tarjeta Publicidad con IVA en la fila Mercado Libre = Ads con IVA (gasto de Product Ads de la API × 1,19: el cost de la API viene sin IVA y la facturación ML de PADS lo cobra con IVA) + Publicidad de Seguidores tal cual Facturación ML (sin sumarle IVA). Muestra el desglose de cada uno. Es solo informativa: la utilidad, la franja Rentabilidad Neta Real y el KPI Publicidad siguen con los datos de la API sin IVA.
    QUITADO
    Panel Finanzas eliminado · Dashboard reorganizado (29-sep-2026)
    Se quitó el panel Finanzas: su resultado (ventas − cargos − impuestos − COGS = utilidad) ya está en la franja Rentabilidad Neta Real del Dashboard con los mismos cálculos. En el Dashboard: la franja Rentabilidad Neta Real pasa arriba de todo; Distribución de los ingresos ordenada de mayor a menor; los KPIs van al final en 3 filas (Ventas · Mercado Libre · Costos propios); Ads + Seguidores se unen en un KPI Publicidad con ambos montos; Unidades vendidas muestra también las órdenes. Se quitaron la tarjeta Desglose de Costos, Información del Período y el KPI de IVA publicidad. Publicidad de Seguidores ahora usa el monto tal cual lo da Facturación ML (antes ÷ 1,19).
    MEJORA
    Dashboard: Rentabilidad Neta Real en pasos
    La franja pasa de Ventas / Total costos / Utilidad / % a un recorrido: Ventas reales − Cargos e inversiones (comisión + envío + Ads) − Impuestos (retención 1%) = Recibí − COGS + gastos fijos = Utilidad neta (con % de margen). Cada paso muestra su % sobre ventas y su composición.
    MEJORA
    Costos unificados: el mismo número en todos los paneles
    Dashboard, Finanzas, Rentabilidad y Márgenes Pro calculan con la misma función (forEachLineaCosto): comisión = sale_fee × unidades; envío = costo real de cada envío (Full + Flex + Drop-off) por fecha de la orden, repartido entre las líneas; retención 1%; Ads × 1.19 (IVA). Antes Dashboard y Finanzas contaban solo envíos Full por fecha de despacho (~$0,9 M menos en 30 días) y Rentabilidad no incluía las publicaciones con Ads sin ventas. Verificado: los 4 paneles dan el mismo revenue, comisión, envío y retención al peso. Si una página del catálogo Fulfy falla, se avisa (sin reintentos ni llamadas extra a Fulfy).
    NUEVO
    Márgenes Pro (beta)
    Panel de prueba que une Márgenes y Rentabilidad: por SKU con desglose por publicación, Revenue − Comisión real (sale_fee × unidades) − Envío real (/shipments/{id}/costs repartido entre las líneas de la orden) − COGS Fulfy − Retención 1% = Contribución; menos Ads ML (con IVA, repartido entre variaciones por revenue) = Margen neto. Cada costo en $ y % del revenue. Filtros Killers ≥30% / Regulares 15–30% / Críticos <15% (por margen neto), Ads sin ventas y Sin costo Fulfy. Totales verificados al peso contra órdenes, envíos y Ads de ML.
    FIX
    Ads ML vuelve a funcionar · comisión y envío corregidos
    Ads: ML dio de baja las rutas legacy de Product Ads; el server usa las vigentes /advertising/MCO/... (nuevo /api/ml/ads-by-item masivo con caché). Comisión: Dashboard y Finanzas sumaban sale_fee sin multiplicar por cantidad (ML lo da por unidad) → subestimaban la comisión en órdenes de varias unidades. Envío en Rentabilidad: leía o.shipping.cost, que la orden no trae → siempre $0; ahora usa el costo real por envío (/api/ml/shipping-by-order).
    QUITADO
    Márgenes: columnas de stock movidas a Inventario
    Se quitaron de la tabla de Márgenes Días Stock, Bogotá, Full ML y Vendidas (también en el desglose por publicación); se mantiene Stock. Solo cambia la vista: los cálculos siguen iguales y esos datos se ven en el panel Inventario. Los KPIs de Márgenes (Bogotá crítico, Con stock Full ML) y el CSV exportado no cambian.
    NUEVO
    Panel Inventario (Mercado Libre, debajo de Márgenes)
    Mismo listado por SKU que Márgenes, enfocado en stock: Bogotá (Fulfy), Full ML, Rotar (no disponible en Full), Stock total, Días stock, Ventas del período, Vendidas históricas, Costo unit. (COGS Fulfy) y Valor (stock total × costo, con % del total). KPIs: valor del inventario (Bogotá/Full), unidades, productos con stock y filtros rápidos Sin stock / Bogotá crítico / Stock sin rotación (>90 días o sin ventas) / Sin costo Fulfy. Desglose por publicación, buscador y exportar CSV. Márgenes e Inventario comparten los datos (getPerfData) con caché de 5 min por período; "↻ Actualizar" fuerza la recarga.
    NUEVO
    Importar hoja de pedidos a China (pestaña "🚢 Pedidos a China")
    Botón "📥 Importar hoja" para subir el Excel/CSV del proveedor (columnas Producto, SKU, Variante, Categoría, Qty, Destino, separador ;). El .xlsx/.xls se lee con XLSX.read + sheet_to_json (mismo patrón que la exportación de Envíos Full); el .csv usa un parser propio con soporte de comillas y detección automática de delimitador (; vs ,). La columna "Variante" se separa en filas individuales por el patrón "<cantidad> <etiqueta>" (ej. "170 black, 50 khaki, 80 beige" → 3 filas); si un segmento no matchea el patrón o la suma no coincide con la cantidad de la hoja, la fila queda marcada con ⚠️ para revisión manual sin bloquear. Las filas "TOTAL" o sin producto se ignoran. Antes de guardar se abre un preview 100% editable (cantidad, destino MELI/Shopify/Otro, SKU/familia con el mismo datalist de autocompletado del formulario manual) con sugerencia automática de SKU/familia solo para destino "meli" sin SKU en la hoja, comparando el nombre del producto contra los títulos ya calculados en la pestaña Estimación (marcada siempre como "≈ sugerido, verificar", nunca como dato confirmado). Al confirmar, cada fila incluida genera un pedido independiente vía POST /api/import-orders (mismo skuPrefix para variantes de una misma familia) con fecha de pedido de hoy y fecha estimada de llegada a 90 días (IMP_LEAD_TIME_DIAS), y notas trazando variante/destino/categoría de origen.
    QUITADO
    Performance: columnas Visitas y Conv% eliminadas
    Performance: se quitaron las columnas Visitas y Conv% y la carga de visitas por publicación desde la API de ML (una llamada por item) para acelerar el panel.
    MEJORA
    Performance: carga en paralelo
    La config y la paginación del stock Fulfy corren en paralelo con la carga de ML; los lotes de items-detail van de a 5 simultáneos; precios, Full ML y Ads por item se piden al mismo tiempo. Se dejaron de pedir precios y Full para las variaciones virtuales VAR_ (no son item_id de ML; antes generaban llamadas con item_id=undefined). El fetch de Ads por item se salta cuando la API de campañas de ML Ads responde error o no hay campañas.
    NUEVO
    Performance: KPIs como filtros
    Click en Sin stock total, Bogotá crítico o Precio bajo mínimo muestra solo esos productos, ignorando el buscador, ordenados por urgencia: sin stock → más vendidos del período primero; Bogotá crítico → menos días de stock en Bogotá primero; precio bajo mínimo → mayor brecha contra el mínimo primero. Otro click en el mismo KPI o "✕ Quitar filtro" vuelve a la vista completa. Ordenar por una columna con el filtro activo reordena dentro del subconjunto; escribir en el buscador sale del filtro. El filtro se mantiene al cambiar el período. De paso, ordenar por columna ya no descarta la búsqueda activa.
    MEJORA
    Performance: columnas renombradas y reordenadas
    "Total" pasa a llamarse Stock y "Total ventas" pasa a Vendidas. Stock y Días Stock se movieron entre Producto y SKU, tanto en la fila del producto como en el desglose por publicación.
    MEJORA
    Período unificado en la barra superior
    Performance y Finanzas dejan de tener su propio selector de fechas y usan la barra global "Período: Hoy / 7 / 15 / 30 días / Personalizado" (nuevo helper periodDates(), mismo criterio que dateRange() del server). Performance suma la opción "Hoy" (comparada contra ayer) y Días Stock se calcula con ese período. Pareto, Performance y Finanzas se recargan al cambiar el período (antes Pareto no lo hacía). La barra se oculta en Envíos Full y Alertas de stock (usan ventanas fijas de 15/30/45 días propias del cálculo) y en Changelog. Calidad y Publicidad mantienen sus controles propios (60 días / histórico y por mes).
    MEJORA
    Responsive en celular
    El selector de período pasa al sidebar, debajo del logo. En pantallas ≤ 768px: las grillas de KPIs y resúmenes de 3-4 columnas pasan a 2; los formularios pasan a 1 columna; las acciones del topbar hacen wrap; se deja espacio arriba para el botón ☰; el waterfall de Finanzas muestra nombre + monto arriba y la barra abajo; el detalle de reclamos de Calidad y las métricas por familia de Importaciones pasan a 3 por fila. Fix: si el sidebar quedó colapsado desde desktop, en celular el menú no se podía abrir. Los números grandes de KPIs y resúmenes (Dashboard, Rentabilidad, Finanzas, Performance) escalan con el ancho de pantalla y, si igual no entran, cortan dentro de su caja en vez de desbordar.
    MEJORA
    Performance: sale Rotar, entra Precio promedio
    Se ocultó la columna Rotar de la tabla para limpiar la vista (el dato sigue en el CSV exportado). Nueva columna Precio prom. después de Revenue: revenue del período ÷ unidades vendidas, con delta ▲▼ y valor del período anterior, por SKU y por publicación. Ordenable y también incluida en el CSV.
    MEJORA
    Performance: PRECIO y Mínimo en una sola columna
    La columna PRECIO muestra arriba el precio publicado en ML (con promos aplicadas) y abajo "mín: $X", el precio mínimo para mantener el margen objetivo del 30% (COGS Fulfy + flete + empaque + comisión ML + IVA + cargo fijo). Si el publicado está por debajo del mínimo, ambos se ven en rojo con ⚠. En el desglose por publicación se mantiene el precio de cada una. Se quitó la columna separada Mínimo.
    NUEVO
    Performance: columna Margen
    Nueva columna Margen después de PRECIO: margen real del período seleccionado, calculado sobre cada venta al precio efectivamente cobrado (unit_price de la orden), con los mismos costos que el precio mínimo (calcMargenML): COGS Fulfy + flete $8.000 + empaque $1.500 + comisión ML (13% clásica / 16% premium) + IVA de la comisión + cargo fijo ML por tramo. No descuenta Ads. Verde ≥ 30% (objetivo), ámbar entre 0 y 30%, rojo si pierde. Muestra la utilidad promedio por unidad ($) y el % sobre lo facturado; el tooltip trae la utilidad total del período. Solo aparece en productos/publicaciones con ventas en el período (sin ventas → "—"). Ordenable por %. El CSV suma Precio, Margen $ y Margen %.
    FIX
    Performance: datos propios por variación en el desglose
    Las filas de variación ya no heredan datos de la publicación padre: Ventas, Revenue, Precio prom. y Margen usan solo las ventas de esa variación (si no vendió → 0 / "—"; antes mostraba el total de toda la publicación). Full ML por variación usa el stock real por inventory_id (by_variation de /api/ml/item-full-stock) en vez del total del padre; el Full del producto también suma ese dato real y solo reparte proporcional a available_quantity si ML no lo desglosa. En el desglose se quitaron los "—" de Días Stock y Bogotá (son datos del producto, no de cada publicación).
    MEJORA
    Performance: VISTA Resumida / Completa
    El selector COLS (Stock / Histórico / Ventas / Precios / ADS) se reemplazó por VISTA. Resumida: Producto (con su SKU), Stock, Días Stock, Ventas, Revenue, PRECIO y Margen. Completa: suma Bogotá, Full ML, Vendidas, Precio prom. y ADS ML. La vista elegida se recuerda en el navegador (por defecto Resumida). Tour actualizado. En Resumida se oculta la línea "ant:" del período anterior; las flechas ▲▼ con el % de tendencia se mantienen.
    MEJORA
    Performance: SKU dentro de la columna Producto
    Se eliminó la columna separada SKU: ahora el SKU se muestra debajo del nombre del producto, junto a la cantidad de publicaciones ("2 pubs · SKU"), y la columna Producto se angostó (150px mínimo) para dejar más espacio al resto. Click en cualquier punto del bloque nombre / x pubs / SKU copia el SKU al portapapeles sin plegar ni desplegar la fila: el bloque (ajustado al contenido; el nombre siempre en un solo renglón y la columna Producto mide exactamente lo que ocupa el nombre más largo, el resto del ancho queda para las demás columnas) se resalta al pasar el mouse y el aviso "✓ SKU copiado" en verde aparece solo en el SKU (más el toast "SKU … copiado"). Click en el resto de la fila despliega las publicaciones. El buscador sigue encontrando por SKU.
    MEJORA
    KPIs compactos en todos los paneles
    Las cajas de KPI (.kpi) son más chicas: menos padding, valor en 20px (antes 26px), etiqueta y subtítulo más finos. Las grillas de KPIs (.kpi-grid y todos los contenedores *-kpis) pasan a auto-fit con mínimo 160px: entran tantas cajas por fila como quepan, así quedan en 1 renglón (máx. 2). En Performance se quitó la fila-título "Catálogo" que ocupaba un renglón entero. En Rentabilidad las tarjetas superiores bajan de 28px a 22px y también se acomodan en auto-fit.
    MEJORA
    Performance: orden de KPIs y filtro Full ML
    Los KPIs arrancan con Productos, Revenue y Unidades vendidas; después Sin stock, Bogotá crítico, Con stock Full ML y el resto. Con stock Full ML ahora también funciona como filtro (igual que Sin stock / Bogotá crítico / Precio bajo mínimo): trae solo los productos con stock en Full, ordenados de más a menos stock en Full. Unidades vendidas también filtra: muestra solo los productos con ventas en el período, de más a menos unidades vendidas (la caja indica cuántos productos vendieron).
    v3.0 Consolidación: cleanup de paneles y guía contextual Mayo 2026
    NUEVO
    Panel Finanzas
    Resultado financiero del período en formato waterfall: Ventas concretadas → menos comisión ML (sale_fee real por orden) → menos costo de envío real (solo Full, neto del descuento por reputación) → menos publicidad y otros cargos (input manual) → menos impuestos 1% → Recibiste (neto seller) → menos COGS (cruzado por SKU contra Fulfy) → Utilidad neta con margen %. Selector de fechas independiente desde/hasta (default últimos 30 días). 4 summary cards: Ventas / Cargos ML / Recibiste / Margen neto. Aviso amarillo cuando hay SKUs vendidos sin match en el catálogo Fulfy (COGS parcial).
    NUEVO
    Costo de envío real desde /shipments/{id}/costs
    Nuevo endpoint /api/ml/shipping-costs en el server que cruza órdenes pagadas del rango con la API de shipments de ML. Por cada envío fetcha /shipments/{id} + /shipments/{id}/costs en paralelo (batches de 15), filtra por status_history.date_shipped dentro del rango y agrega por logistic_type: Full, Flex y Drop-off. La descripción de la fila "Costo de envío" del panel Finanzas suma solo Full (coincide con "Envío a mi cargo" del reporte ML) y muestra el descuento por reputación aplicado. Ventana de órdenes ampliada 14 días hacia atrás para capturar envíos que despacharon tarde.
    MEJORA
    Performance: tour guiado y tooltips contextuales
    Botón "● Tour" en el topbar abre un overlay de 6 pasos que explica el panel completo: bienvenida, selección de período, búsqueda, KPIs superiores, columnas configurables y exportación. Cada toggle de columna (Stock, Histórico, Ventas, Precios) tiene un ícono ? que muestra al hover un tooltip con título, descripción detallada y un tip extra. Implementado con delegación de eventos sobre document — un solo listener para todos los íconos.
    MEJORA
    Rentabilidad: COGS desde Fulfy como única fuente
    Se retiró el input editable de COGS manual y los indicadores F/M/? por fila. El costo ahora viene exclusivamente del catálogo Fulfy vía SKU. Cuando una publicación no tiene match en Fulfy, la celda muestra el mensaje "Sin costo Fulfy" en rojo en lugar de un input vacío. Las llamadas a /api/cogs se eliminaron de Dashboard, Rentabilidad, Performance y Finanzas — un solo punto de verdad para el costo de producto.
    QUITADO
    Panel Mis Productos retirado del sidebar
    El nav-item de "Mis Productos" ahora está oculto. El panel y su lógica de CRUD se mantienen en el código pero ya no son alcanzables desde la UI. La razón: el flujo de COGS manual que justificaba el panel fue reemplazado por la integración Fulfy (ver entry de Rentabilidad arriba). El endpoint /api/cogs en el server.js sigue intacto.
    QUITADO
    Panel Métricas eliminado
    Se quitó el panel "Métricas" que analizaba un producto individual en el tiempo (visitas/ventas con período comparado, gráfico Chart.js, KPIs con delta). El nav-item, el panel HTML, las funciones loadMetricas, initMetricasProducts, filterMetricasProducts, selectMetricasProduct, getMetricasFilter, onMetricasFilterChange, el wrapper window.nav específico y el loader ensureChartJS se removieron por completo. La funcionalidad estaba poco usada y duplicaba info disponible en Rentabilidad y Performance.
    v2.0 Nuevos paneles + integración Fulfy Abril 2026
    NUEVO
    Panel Métricas
    Análisis de producto individual en el tiempo. Buscador por nombre o SKU, selector de período (7/15/30 días o fechas custom), gráfico de líneas con visitas y ventas diarias del período actual superpuesto con el período anterior en línea punteada. KPIs con delta ▲▼ comparando ambos períodos: revenue, unidades, margen, conversión, ACOS y ROAS. Tabla diaria con visitas, unidades, revenue y conversión.
    NUEVO
    Panel Performance (Catálogo de productos)
    Vista completa del catálogo cruzando Mercado Libre con Fulfy. Columnas: Bogotá (stock Fulfy), Full ML real, Rotar (unidades con not_available en Full), Total, Total ventas históricas, Visitas, Ventas del período + delta vs período anterior, Revenue + delta, Conversión + delta, Precio mínimo calculado y Precio real de ML. Desglose expandible por publicación incluyendo items con una sola publicación. Ordenamiento por cualquier columna. Buscador por nombre, SKU o MCO. Comparación de períodos con valor anterior visible debajo del actual.
    NUEVO
    Integración Fulfy Stock API
    Conexión completa con app.backend.fulfy.co para obtener stock bodega, costo de productos y nombre comercial por SKU. Paginación automática con guard de 50 iteraciones. Manejo de redirects 301 en el proxy del servidor. El stock bodega en Inventario se sincroniza desde Fulfy en lugar de ingreso manual.
    MEJORA
    COGS desde Fulfy en panel Rentabilidad
    El costo de cada producto se obtiene automáticamente desde la API de Fulfy como fuente primaria. El input manual sigue activo como fallback editable. Indicador visual por fila: F (fuente Fulfy, borde cyan), M (manual, borde normal), ? (sin costo, borde rojo). Al editar el input se persiste en db.json y recalcula sin recargar.
    MEJORA
    Stock Full ML real via API de inventarios
    Inventario consulta /inventories/{id}/stock/fulfillment por cada variación para obtener el stock físico real en depósitos Full ML. La versión original usaba available_quantity que mezcla Full y no-Full. Items Full sin variaciones se marcan con ~ en ámbar indicando stock estimado no verificable por API.
    MEJORA
    Inventario desglosado en 4 columnas
    Stock Full ML / Stock Disponible ML / Stock Bodega / Total reemplaza la columna única anterior. Nuevo filtro KPI "Reabastecer Full ML" para items con stock Full menor a 15 días de cobertura. Ordenamiento por columna con click en encabezado. Fila completa clickeable para abrir la publicación en ML.
    MEJORA
    SKUs en todos los paneles
    extractMLSku() busca el SKU en cascada: seller_sku → attributes[SELLER_SKU] → seller_custom_field → variaciones. SKU visible en Publicaciones, Inventario, Rentabilidad y Performance. PATCH masivo aplicado sobre 79 variaciones en ML para cargar seller_custom_field donde faltaba.
    MEJORA
    Paginación completa de publicaciones
    Publicaciones e Inventario traen todos los items activos paginando de a 100. La versión original tenía límite fijo de 100 — con 154 publicaciones activas se perdían 54. Contador "X de Y productos" confirma que se cargaron todos.
    MEJORA
    Links de publicaciones con URL real
    Órdenes, Publicaciones, Inventario y Rentabilidad usan el permalink completo de ML con slug del título. La versión original generaba URLs incompletas tipo /MCO2729149814 en lugar de /MCO-2729149814-morral-tula-impermeable-...
    FIX
    Panel Órdenes no cargaba con token válido
    Variable itemId usada antes de ser declarada en el .map() de loadOrdenes(). El ReferenceError era capturado por el catch que ejecutaba showConnectPrompt(), aparentando un problema de token cuando era un bug de JS.
    FIX
    Panel Publicaciones pedía conectar ML con token activo
    El subtítulo del panel no tenía id="pub-sub". La referencia nula disparaba showConnectPrompt() desde el catch de loadPublicaciones().
    FIX
    Catches ML diferenciados en todos los paneles
    Dashboard, Órdenes, Publicaciones, Stock, Rentabilidad y Reputación distinguen errores de token vs errores de JavaScript. Los errores JS muestran el mensaje real con botón Reintentar en lugar del prompt de conexión genérico.
    v1.0 Versión Original — fulfyecom_v16 Base de partida · Abril 2026
    Dashboard de archivo único (index.html + server.js) con 10 paneles: Dashboard, Rentabilidad, Órdenes, Publicaciones, Inventario, Mis Productos, Costos Fijos, IA Asistente, Conectar ML y Usuarios. Conectado a Mercado Libre Colombia via API oficial con auto-refresh de token cada 5 horas. Stock mostraba available_quantity sin distinguir Full ML de stock propio. Sin conexión a Fulfy. COGS 100% manual en db.json. Límite de 100 publicaciones por panel. Links de items sin slug. Catch genérico en todos los paneles ML mostraba siempre el prompt de conexión ante cualquier error.
    Dashboard Rentabilidad Órdenes Publicaciones Inventario Mis Productos Costos Fijos IA Asistente Conectar ML Usuarios
    Rendimientos
    Análisis 80/20 por producto · ML Colombia
    Cargando análisis...
    Liquidación?
    Valor del stock, rotación y ganancia por SKU · marcá qué liquidar y con qué margen
    Cargando...
    Promociones
    Qué campañas conviene aceptar, mantener o dejar, por publicación: margen con promo, stock y ventas
    Cargando...
    Publicidad
    Product Ads de ML · montos sin IVA · máx. 90 días atrás
    Cargando Publicidad desde ML…

    ✅ Qué hacer

    Campañas?

    Evolución diaria

    Anuncios

    Campañas mes a mes

    🔻 Anuncios con ROAS cayendo (vs. el mes anterior con datos)

    Registrar gasto de publicidad externo
    Canal
    Mes
    Gasto (COP)
    Ventas atribuidas (COP)
    Clics
    Conversiones
    Agregar costo fijo
    Nombre
    Categoría
    Monto — mensual, o por envío si es Flex
    Moneda
    Frecuencia
    Agregar usuario del equipo
    Nombre
    Usuario
    Contraseña
    Rol
    Guardar borrador
    Nombre del borrador
    Mis borradores
    Duplicar publicación de Mercado Libre
    Carga título, categoría, características, imágenes, precio y stock de una publicación que ya tenés — revisá el SKU antes de publicar (se copia igual que el original). Solo trae publicaciones simples (sin reconstruir variantes).
    Revisar pedido a China importado
    ℹ️ Revisá y corregí cada fila antes de guardar. Las filas con ⚠️ tienen una variante que no se pudo separar automáticamente, o la suma de las variantes no coincide con la cantidad de la hoja — no bloquea, solo revisá a mano. El SKU/familia es obligatorio en las filas con destino MELI. Solo se importan las filas con Destino = MELI — las que queden en Shopify/Otro no se suben (cambiá el Destino de una fila si necesitás que se incluya).
    ProductoCategoríaVarianteCantidadDestinoSKU / Familia