# F-116 — Traducir categorías legacy a Español (Title Case) ## Cambios - `src/modules/categories/legacy/legacy-catalog.ts`: - `CATEGORY_TRANSLATIONS`: tabla de traducción para las 39 categorías reales (incluye las que ya estaban en español como alias). - `translateCategoryName(name)`: devuelve el nombre en español o el original si no hay mapping. - `buildRenamePlan(existingCategoryNames)`: lista de renombres en sitio (ocId, oldName, newName). - `buildImportPlan`: ahora ignora entradas cuyo nombre en inglés ya está en el catálogo (las maneja el rename plan). - `src/modules/categories/tests/legacy-catalog.test.ts`: 3 nuevos tests (Title Case, cobertura, renombre). - `scripts/seed-legacy-categories.mjs`: - `buildRenamePlan` se calcula al inicio. - Tras los inserts, ejecuta `UPDATE categories_categories SET name = $1 WHERE name = $2` por cada rename. - Idempotente: re-ejecuciones no renombran nada. ## Aplicación - 30 categorías renombradas en su lugar (slugs conservados). - 0 inserts nuevos (todas las categorías ya existían desde F-114). - 0 renames en segunda ejecución (idempotente). ## Evidencia - `npm run typecheck` OK. - `npm test`: 172 passed / 0 failed (3 nuevos). - `npm run build` OK. - DB: `nuts-and-seeds` → "Frutos Secos y Semillas", `wine` → "Vino", `tea-and-infusions` → "Té e Infusiones", `home` → "Hogar". - URLs (`/categoria/`) intactas: los slugs no cambian.