ComparaMarket Pro — Documento técnico de plataforma

Comparar precios entre nueve plataformas y decir cuál conviene

Cuándo dos ofertas son el mismo producto, cómo se puntúa cuál conviene, por qué la recomendación se explica con reglas y no con un modelo de lenguaje, y cuál es el precio de venta que alcanza el margen que alguien quiere.

Alcance · 24 módulos · 26 migraciones Plataformas · 9 adaptadores Pruebas · 37 suites Moneda · COP
01

Qué resuelve

Quien revende necesita responder dos preguntas antes de comprar: dónde está más barato de verdad —contando envío, tiempo y riesgo— y a cuánto tiene que vender para ganar lo que quiere ganar.

Las dos parecen aritmética y ninguna lo es. La primera exige decidir si dos publicaciones de plataformas distintas son el mismo producto. La segunda exige despejar un precio del que dependen las comisiones que se le restan.

Normalización

Nueve fuentes, un formato

Cada plataforma responde distinto. Un adaptador por plataforma, con su propio traductor probado.

Emparejamiento

El mismo producto

Código de barras exacto primero; parecido de nombre después. Y nunca se fusiona sin que alguien confirme.

Decisión

Puntaje y explicación

Cuatro componentes ponderados, y una explicación por reglas que además dice la contra.

Dinero

El precio despejado

Fórmula cerrada para el precio que logra el margen deseado, con el caso imposible detectado.

02

Nueve plataformas, un formato

Cada plataforma tiene su propia API, su propio nombre para cada campo y su propia idea de qué es un precio. Buscar en todas a la vez exige que todas terminen hablando igual.

Un adaptador por plataforma
adapters/<plataforma>/ mapper traduce la respuesta al formato común __tests__/ la prueba del traductor, no de la API
Las nueve tienen su traductor probado por separado. Es la decisión que permite añadir una plataforma sin tocar el buscador, el comparador ni la calculadora: lo único que cambia es un traductor nuevo y su prueba.

La búsqueda golpea todas las plataformas en paralelo, sobre APIs externas que fallan, tardan y limitan peticiones. Por eso el sistema tiene cola de trabajos, limitación de tasa y caché de búsqueda como piezas propias, no como parches: la lentitud de un tercero no puede ser la lentitud del producto.

Las credenciales de cada conexión se guardan cifradas, y el acceso a la cuenta admite segundo factor con códigos de recuperación.

03

Cuándo dos ofertas son lo mismo

Comparar precios exige antes decidir qué se está comparando. Es el problema difícil del sistema y se resuelve en dos pasos, de más fuerte a más débil.

Detección de equivalencias
1) Mismo código de barras en plataformas distintas → coincidencia fuerte, puntaje 1,0 2) Similitud de trigramas sobre el nombre normalizado → puntaje = la propia similitud
El código de barras es un identificador global: si coincide, es el mismo producto y no hay más que discutir. El parecido de nombre es una pista, y se guarda con su grado de certeza en vez de convertirse en un sí o un no.
El sistema propone; una persona confirma

Una coincidencia detectada no fusiona nada: se crea en estado sugerida, para revisión humana.

Fusionar automáticamente por parecido de nombre haría que dos productos distintos —dos capacidades del mismo modelo, dos colores con precios muy separados— aparecieran como uno solo, y el comparador recomendaría el barato creyendo que es el mismo. El error no se vería: se vería como una oferta muy buena.

Un detalle de implementación que evita un problema real: el par se ordena antes de guardarse, para que la coincidencia entre A y B no se guarde dos veces como (A,B) y (B,A). La restricción de unicidad de la tabla solo funciona si el par tiene un orden canónico.

04

El puntaje

Una vez agrupadas las ofertas equivalentes, hay que ordenarlas. El puntaje es de 0 a 100 y se compone de cuatro señales ponderadas.

ComponenteCómo se calculaPor qué así
PrecioNormalización invertida sobre el costo total: precio + envíoComparar solo el precio premia al que cobra el envío aparte
EntregaNormalización invertida sobre los días de entregaPara quien revende, llegar tarde tiene costo
ReputaciónCalificación llevada a escala 0-100; sin calificación, 50Un vendedor sin historial no es malo ni bueno: es desconocido
RiesgoPuntaje compuesto por señales, entre ellas la entrega muy lentaHay costos que no aparecen en el precio
Dos decisiones que no son obvias

La normalización es relativa al grupo, no absoluta. Un precio no es «bueno» en el vacío: es bueno comparado con las otras ofertas del mismo producto en ese momento. Por eso el mejor del grupo obtiene el máximo aunque en términos absolutos sea caro — que es exactamente la información que quien compara necesita.

Sin calificación se asigna 50, no 0. Poner cero castigaría al vendedor nuevo como si tuviera mala reputación, cuando lo que tiene es ninguna. Poner cien lo premiaría igual que al mejor. El valor neutro es la única lectura honesta de la ausencia de dato.

Las entradas se validan antes de puntuar: un costo de envío o unos días de entrega que no sean números finitos y no negativos detienen el cálculo con un error que dice qué oferta y qué campo, en vez de propagar un valor inválido hasta un puntaje que parecerá correcto.

05

La recomendación explicada

El comparador no devuelve solo un ganador: devuelve por qué. Y esa explicación se genera por reglas, no con un modelo de lenguaje.

Cómo se construye
1) Identificar la segunda mejor opción del grupo mayor puntaje entre las demás; si empatan, menor costo 2) Dos o tres razones CUANTIFICADAS, ordenadas por impacto para quien revende 3) UNA contra honesta frente a esa segunda opción, si existe
Comparar contra la segunda mejor y no contra el promedio del grupo es lo que hace útil la explicación: la decisión real del usuario es entre esas dos, no contra una media que no puede comprar.
Por qué reglas y no un modelo de lenguaje

Un modelo redactaría explicaciones más fluidas, y de vez en cuando afirmaría una cifra que no sale de los datos. Aquí cada razón es una comparación entre dos números que el sistema ya calculó: la explicación no puede decir algo que el puntaje no diga.

Y la contra es deliberada. Un comparador que solo enumera virtudes de su recomendación deja de ser un comparador y pasa a ser publicidad. Reconocer una desventaja frente a la alternativa es lo que hace que el usuario pueda decidir en contra con criterio.

Las etiquetas automáticas del comparador se asignan con una función pura que no muta la entrada: devuelve copias en el mismo orden. Es lo que permite recalcularlas en cualquier momento sin que el resultado dependa de cuántas veces se pidió.

06

El precio que alcanza el margen

La pregunta del revendedor no es «cuánto gano si vendo a este precio», sino «a cuánto vendo para ganar esto». Y esa es más difícil, porque las comisiones dependen del precio que se busca.

El modelo de costosTodo en pesos
costo unitario = producto + envío de entrada + otros a un precio P: comisiones = P · (comisión plataforma + pasarela)/100 + fija utilidad bruta = P − costo unitario − comisiones − publicidad impuestos = max(0, utilidad bruta) · tasa/100 utilidad neta = utilidad bruta − impuestos
Los impuestos solo gravan utilidad bruta positiva: una venta con pérdida no genera impuesto, y modelarlo al revés inventaría un costo que no existe.

El despeje

Se busca el precio P tal que la utilidad neta sea el margen deseado sobre ese mismo precio. Con f las comisiones porcentuales, t la tasa de impuesto, d el margen deseado, C el costo unitario más publicidad y F la comisión fija:

Solución cerrada
( P·(1−f) − C − F )·(1−t) = P·d P·[ (1−f)(1−t) − d ] = (C + F)(1−t) (C + F)(1−t) P = ───────────────────────── (1−f)(1−t) − d
El despeje asume utilidad bruta positiva, y esa suposición es autoconsistente: en la solución la utilidad bruta vale P·d/(1−t), que es no negativa siempre que el denominador lo sea. Con margen deseado cero da exactamente cero, y ahí las dos ramas del max(0, ·) coinciden.
Cuando el margen es imposible

Si el denominador es cero o negativo, las comisiones, los impuestos y el margen deseado consumen el 100 % o más del precio: no existe ningún precio que lo logre. El cálculo no devuelve un número enorme ni infinito — lanza un error que lo dice.

Es el caso que un revendedor necesita ver: no es que tenga que subir el precio, es que ese margen no se puede alcanzar con esas comisiones.

Una excepción documentada

El retorno sobre la inversión no está definido cuando la inversión por unidad es cero. En vez de lanzar, devuelve cero por decisión explícita: la interfaz recalcula en vivo mientras el usuario teclea, y no puede romperse en el instante en que el campo de costo está vacío.

El precio sugerido se redondea hacia arriba a la centena: hacia abajo daría un precio que no alcanza el margen pedido, que es justo lo que se estaba calculando.

07

Arquitectura y verificación

Organizado por módulos de dominio: veinticuatro, cada uno con su lógica, sus consultas y sus acciones.

Los módulos
Decisión search · compare · comparisons · duplicates · winners · deals Dinero profitability · billing · payouts · orders · marketplace Datos catalog · connections · price-history · history · analytics Relación suppliers · companies · favorites · alerts · referrals · clicks Plataforma auth · admin
Las piezas transversales —cifrado, cola, limitación de tasa, caché de búsqueda, auditoría, observabilidad, comisiones por plataforma— viven aparte y las usan todos.

Dónde están las pruebas

Las 37 suites no están repartidas por igual, y esa concentración es deliberada:

ZonaQué se prueba
Los nueve traductoresQue cada plataforma se convierta bien al formato común. Es donde entra lo que no controlamos
ComparadorPuntaje, etiquetas y explicación
RentabilidadEl despeje y sus casos límite
FacturaciónPlanes y emisión
SeguridadCifrado y códigos de recuperación

Dos trabajadores en segundo plano completan el sistema: uno sincroniza los catálogos conectados y otro evalúa las alertas de precio. Sacarlos del ciclo de petición es lo que permite que una búsqueda no espere a que nueve plataformas contesten.