# Bicicletas Maino — contenido de la tienda

Entrega del activo de datos construido en la migración desde Shopify.
Fecha del corte: **13 de agosto de 2026**.

---

## Qué hay en este paquete

| Archivo | Qué es |
|---|---|
| **`catalogo.html`** | **Empieza por aquí.** Visor del catálogo completo: 169 productos con foto, precio, especificaciones, notas de compra y compatibilidad. Se abre con doble clic en cualquier navegador, sin instalar nada |
| **`compatibilidad.html`** | Matriz consultable: qué componentes del catálogo funcionan entre sí y cuáles no, con el motivo técnico de cada caso |
| `datos/catalogo.json` | El catálogo como dato, para cargarlo en el sitio nuevo o en cualquier sistema |
| `datos/catalogo.csv` | Lo mismo en planilla, para abrir en Excel |
| `datos/compatibilidad.json` / `.csv` | La matriz como dato |
| `datos/ESQUEMA.md` | Qué significa cada campo |
| `herramientas/validar_catalogo.py` | Validador automático del catálogo (ver abajo) |
| `documentacion/` | Cómo se verificó cada dato y qué se encontró en el camino |

Los dos `.html` necesitan conexión a internet para mostrar las fotos: las imágenes se
sirven todavía desde el CDN de Shopify. Los archivos de imagen ya están rescatados y
optimizados aparte (ver «Lo que no viene en este paquete»).

---

## El catálogo en una línea

**169 productos · 36 marcas · 24 categorías · 308 imágenes asociadas.**
De esos, **89 fichas (53%) están verificadas** contra la documentación oficial del
fabricante: **671 especificaciones con fuente** y **578 notas técnicas de compra**.
**Cero datos sin fuente.**

Antes de la migración la mediana era de 4 datos duros por ficha y 35 productos no tenían
ningún dato numérico.

---

## Lo que este trabajo encontró y conviene mirar primero

**1. Cuatro códigos de producto que no existen.** Aparecieron por fichas copiadas de
vendedores de marketplace. El `PD-R9000` no existe en ningún catálogo Shimano de 2005 a
2026 (es `PD-9000` o `PD-R9100`); el `RD-R62SG` de MicroSHIFT tampoco (es `RD-R67SG`);
el `SM-BB71-41B` no es de MTB sino de ruta; y el `ST-6770` no es de carbono y además es
Di2, o sea que la palanca sola no funciona sin batería ni cableado.

**2. Dos productos del propio catálogo que no funcionan juntos.** El cassette
`CS-R7000 11-32T` no es compatible con el cambio `RD-R7000-SS`, que topa en 30T. Ambos
son «105 11 velocidades» y ambos están a la venta. Hay **302 pares incompatibles** de
este tipo detectados; 21 de ellos por capacidad, que es el error que el comprador
descubre recién al armar la bicicleta.

**3. Una foto de otra marca dentro de una ficha.** Las zapatillas Shimano SH-RC300 Black
llevan una foto de una zapatilla **Giro** (se lee «GIRO» en la suela). Hay que sacarla.

**4. Nueve fichas que son cuatro productos.** Duplicados confirmados, más seis fichas de
colores distintos que comparten el mismo SKU: con SKU repetido el inventario no puede
saber cuál se vendió. Deben modelarse como variantes.

El detalle completo está en `documentacion/`.

---

## Lo que depende de ustedes para poder publicar

Estos datos no se pueden investigar desde fuera: los tiene la tienda.

| Falta | Cuántos | Por qué importa |
|---|---|---|
| **Precio** | 13 productos | Sin precio no se publica |
| **SKU** | 123 productos | Sin SKU no hay control de inventario |
| **Peso** | 167 productos | Si el checkout cotiza envío por peso, lo bloquea |
| **Stock real** | todos | El valor que traemos viene de Shopify y hay que revalidarlo contra bodega |
| **Matriz de tallas** | zapatillas y bicicletas | |
| **Identificar 34 productos ambiguos** | 34 | Hay que mirar la caja o el grabado del piñón mayor |

Los 34 ambiguos son 12 bicicletas sin año de modelo, 14 modelos SRAM/RockShox sin
referencia y 8 cassettes de familia larga. En particular, las **14 bicicletas Trek**
necesitan el número de serie, que está en un adhesivo con código de barras en la cara
inferior del cuadro, junto a la caja de pedalier. Trek no publica archivo histórico de
2010 en adelante, así que no hay otra forma de fecharlas.

Las 7 bicicletas **Scott sí quedaron fechadas** sin necesidad de tocar la unidad, a
partir de las declaraciones de conformidad anuales de SCOTT Sports AG. En el camino se
detectó que **la Scale 965 blanca es MY2022, no 2023** como decía el título original.

---

## El validador

`herramientas/validar_catalogo.py` corre todas las verificaciones aprendidas durante la
migración y **sale con código 1 si encuentra algo bloqueante**, así que sirve para dejarlo
en la carga de productos nuevos y evitar que el catálogo se degrade con el tiempo.

```
python3 validar_catalogo.py catalog.json [image_manifest.csv]
```

Revisa: códigos inexistentes, familias ambiguas sin rango en el título, SKU repetido,
títulos duplicados, la misma foto en marcas distintas, productos sin foto, precio en 0,
sin SKU, sin peso, marca dudosa y títulos que perdieron el sufijo de variante.

> El script espera el catálogo en el formato interno de la migración
> (`{products:[…], variants:[…]}`), no el `catalogo.json` de esta carpeta, que es una
> versión compacta. Adaptarlo es trivial; se deja tal cual para no perder las reglas.

---

## Lo que no viene en este paquete

Por peso, estos archivos se entregan aparte y no caben aquí:

| Archivo | Qué contiene |
|---|---|
| `maino_imagenes_optimizadas.zip` (15 MB) | Las 338 imágenes en WebP, **14,1 MB frente a 33,7 MB originales (58% menos)**, sin pérdida visible. Es lo que hay que usar en producción, no las URLs de Shopify |
| `maino_pocketbase.zip` (489 KB) | Las descripciones largas de las 169 fichas en HTML, el esquema de base de datos, los scripts y el dato crudo de investigación por producto |
| `maino_gaps_catalogo.xlsx` (40 KB) | Planilla para completar precio, costo, stock y peso |

**Una precisión importante sobre las descripciones.** El campo `excerpt` de
`catalogo.json` está **truncado a 200 caracteres** y no es la descripción redactada de la
ficha. Las descripciones completas — titular con el dato que diferencia al producto,
párrafo de apertura y estructura de ficha — están en `maino_pocketbase.zip`. Si el visor
de esta carpeta se ve «sin texto», es por eso y no porque el trabajo no exista.

Sobre las **578 notas de compra**: son correctas técnicamente, pero están escritas en voz
interna de operación («verificar la unidad antes de publicar»). Antes de mostrarlas en la
tienda hay que separarlas en aviso al comprador y nota interna, y reescribir las primeras.
En el visor de esta carpeta van marcadas como tales.

---

## Cómo se verificó cada dato

La regla dura del proyecto: **eBay y MercadoLibre están prohibidos como fuente de
especificaciones**, y lo que el fabricante no publica se deja vacío en vez de rellenarlo.
Los cuatro códigos inexistentes aparecieron justamente por fichas copiadas de vendedores.

El hallazgo que hizo posible el trabajo con productos antiguos: Shimano borra la ficha web
del producto descontinuado, pero **no borra sus catálogos anuales en PDF**, que siguen
publicados de 2005 a 2026. Ahí está la especificación oficial de todo lo antiguo. Nunca
hizo falta recurrir a un marketplace.

`documentacion/02-protocolo-verificacion.md` tiene la jerarquía de fuentes completa y
`documentacion/03-fuentes-por-marca.md` el archivo documental de las 28 marcas revisadas,
con qué publica cada una y cuáles no tienen archivo histórico.

---

## Próximos pasos sugeridos

1. Completar precio, SKU, stock y peso (planilla `maino_gaps_catalogo.xlsx`).
2. Identificar los 34 productos ambiguos con la unidad física a la vista.
3. Corregir lo señalado: sacar la foto Giro de la ficha Shimano, fusionar los 9 duplicados
   y convertir en variantes las 6 fichas de color con SKU compartido.
4. Terminar el enriquecimiento de las 80 fichas restantes: 16 tienen archivo oficial
   verificado y salen igual que las anteriores; 26 van con tratamiento degradado
   declarando la limitación; ~28 requieren el producto físico.
5. Separar y redactar las notas al comprador.
6. Montar el sitio sobre este activo de datos.
