gendesign/tradein-mvp/backend/data/sql/073_normalize_repair_state.sql
Light1YT dfd608d6f2 refactor(tradein): нормализовать repair_state → enum на ингесте (#621)
listings.repair_state хранил сырые значения парсеров (cosmetic/euro/
designer/required/without/…), не совместимые с ожидаемым estimator-ом
enum needs_repair/standard/good/excellent. Покрытие ~2%, но значения
не совпадали с enum — repair_coef всегда возвращал 1.0 (no-op).

Решение: централизованный helper repair_state_normalizer.py со всеми
10 известными raw-значениями → 4 enum-buckets. Все ingest-пути
нормализуют на входе; миграция 073 бэкфилит существующие строки.
2026-05-28 20:12:35 +05:00

41 lines
2.9 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- Migration 073: нормализовать listings.repair_state → enum needs_repair/standard/good/excellent
--
-- До этой миграции repair_state хранил сырые значения парсеров:
-- avito_detail: cosmetic / euro / designer / required
-- cian SERP (decoration): without / no / cosmetic / euro / design / fine / rough
--
-- После: только needs_repair / standard / good / excellent.
-- Строки с нераспознанными значениями сбрасываются в NULL (безопаснее, чем хранить мусор).
--
-- Idempotent: CASE охватывает уже нормализованные значения (pass-through).
-- Issue: #621
UPDATE listings
SET repair_state = CASE repair_state
-- ── уже нормализованные (pass-through) ───────────────────────────────────
WHEN 'needs_repair' THEN 'needs_repair'
WHEN 'standard' THEN 'standard'
WHEN 'good' THEN 'good'
WHEN 'excellent' THEN 'excellent'
-- ── needs_repair ─────────────────────────────────────────────────────────
WHEN 'required' THEN 'needs_repair' -- avito: «требуется» / «без ремонта»
WHEN 'without' THEN 'needs_repair' -- cian: без ремонта
WHEN 'no' THEN 'needs_repair' -- cian: нет ремонта
WHEN 'rough' THEN 'needs_repair' -- cian: черновая
-- ── standard ─────────────────────────────────────────────────────────────
WHEN 'cosmetic' THEN 'standard' -- avito/cian: косметический
-- ── good ─────────────────────────────────────────────────────────────────
WHEN 'euro' THEN 'good' -- avito/cian: евро
WHEN 'fine' THEN 'good' -- cian: хорошая отделка
-- ── excellent ────────────────────────────────────────────────────────────
WHEN 'designer' THEN 'excellent' -- avito: дизайнерский
WHEN 'design' THEN 'excellent' -- cian: дизайнерский
-- ── нераспознанные → NULL ────────────────────────────────────────────────
ELSE NULL
END
WHERE repair_state IS NOT NULL;