-- 104_seed_bulk_mappings.sql
-- Audit 2026-05-17 (extension of PR #273): bulk seed objective_complex_mapping
-- for ALL active ЖК in objective_corpus_room_month (last 12 months) without mapping.
--
-- Context:
--   PR #273 (103_seed_prinzip_mappings.sql) covered only Малевич + Ньютон парк.
--   This audit found 118 additional unmapped project_names with activity in the
--   last 12 months. Prior fuzzy import had already populated ~108 rows; this file
--   adds 13 HIGH-confidence (sim > 0.85) auto-inserts + comments out 25 MEDIUM
--   (sim 0.6-0.85) candidates for manual review.
--
-- Audit summary:
--   HIGH (sim > 0.85): 13 projects — auto-inserted below
--   MEDIUM (sim 0.6-0.85): ~25 projects — commented out, need review
--   LOW / orphan (sim < 0.6 or no match): ~80 projects — dropped (no domrf corpus found)
--
-- UNIQUE constraint: (objective_complex_name, objective_group)
-- MV join key: objective_complex_mapping.objective_complex_name = objective_corpus_room_month.project_name
--
-- After applying, run manually (post-deploy):
--   REFRESH MATERIALIZED VIEW CONCURRENTLY mv_layout_velocity;
-- See runbook: runbooks/Refresh_MV_Layout_Velocity.md
--
-- Dependencies: objective_complex_mapping (exists), mv_layout_velocity (refresh separately)
-- Deploy: auto-applied by deploy.yml via _schema_migrations tracking.
-- Idempotent: ON CONFLICT (objective_complex_name, objective_group) DO NOTHING

BEGIN;

-- =============================================================================
-- HIGH confidence (sim > 0.85) — auto-insert
-- =============================================================================
INSERT INTO objective_complex_mapping
    (objective_complex_name, objective_group, domrf_obj_id,
     match_method, match_score, is_reviewed, note)
VALUES
    -- 140 deals/12m. "Б-26" → domrf "Б.26" (СКМ Девелопмент). sim=1.000
    ('Б-26', 'Екатеринбург', 50754, 'fuzzy', 1.000, false,
     'Audit 2026-05-17: sim=1.0 to Б.26 (СКМ Девелопмент, Строящиеся)'),

    -- 102 deals/12m. "Астон.Сезоны" → domrf "Астон. Сезоны" (Астон). sim=1.000
    ('Астон.Сезоны', 'Екатеринбург', 58721, 'fuzzy', 1.000, false,
     'Audit 2026-05-17: sim=1.0 to Астон. Сезоны (Астон, Сданные)'),

    -- 100 deals/12m. "Премиум Кварталы Маяковка" → exact domrf match. sim=1.000
    ('Премиум Кварталы Маяковка', 'Екатеринбург', 57364, 'fuzzy', 1.000, false,
     'Audit 2026-05-17: sim=1.0 exact match (СЗ ДЕЛОВОЙ КВАРТАЛ ДЕВЕЛОПМЕНТ, Сданные)'),

    -- 51 deals/12m. "Дом на Библиотечной" → exact domrf match. sim=1.000
    ('Дом на Библиотечной', 'Екатеринбург', 58788, 'fuzzy', 1.000, false,
     'Audit 2026-05-17: sim=1.0 exact match (СТОРИНГ, Сданные)'),

    -- 43 deals/12m. "Даблхаус 1:1" → domrf "Даблхаус 1:1" (Астра). sim=1.000
    ('Даблхаус 1:1', 'Екатеринбург', 50428, 'fuzzy', 1.000, false,
     'Audit 2026-05-17: sim=1.0 to Даблхаус "1:1" (Астра, Сданные)'),

    -- 42 deals/12m. "Астон.Реформа" → domrf "Астон. Реформа" (Астон). sim=1.000
    ('Астон.Реформа', 'Екатеринбург', 58381, 'fuzzy', 1.000, false,
     'Audit 2026-05-17: sim=1.0 to "Астон. Реформа" (Астон, Сданные)'),

    -- 30 deals/12m. "Астон.Отрадный" → exact domrf match (Астон). sim=1.000
    ('Астон.Отрадный', 'Екатеринбург', 48570, 'fuzzy', 1.000, false,
     'Audit 2026-05-17: sim=1.0 exact match (Астон, Сданные)'),

    -- 22 deals/12m. "Космонавтов 11" → domrf "Космонавтов 11" (ПИК). sim=1.000
    -- NB: "9 Космонавтов" is a DIFFERENT project — NOT mapped here (LOW, wrong address)
    ('Космонавтов 11', 'Екатеринбург', 44337, 'fuzzy', 1.000, false,
     'Audit 2026-05-17: sim=1.0 exact match (ПИК, Сданные). NB: "9 Космонавтов" is separate.'),

    -- 16 deals/12m. "Кварталы конструктивизма" → domrf "КВАРТАЛЫ КОНСТРУКТИВИЗМА" (КОРТРОС). sim=1.000
    ('Кварталы конструктивизма', 'Екатеринбург', 43430, 'fuzzy', 1.000, false,
     'Audit 2026-05-17: sim=1.0 case-insensitive match (КОРТРОС, Сданные)'),

    -- 14 deals/12m. "Квартал Сюжеты" → domrf "Квартал СЮЖЕТЫ" (Фортис Девелопмент). sim=1.000
    ('Квартал Сюжеты', 'Екатеринбург', 63631, 'fuzzy', 1.000, false,
     'Audit 2026-05-17: sim=1.0 case-insensitive match (Фортис Девелопмент, Сданные)'),

    -- 28 deals/12m. "Архитектон. Декабристов,20" → domrf ЖК "Архитектон.Декабристов 20". sim=0.897
    ('Архитектон. Декабристов,20', 'Екатеринбург', 41762, 'fuzzy', 0.897, false,
     'Audit 2026-05-17: sim=0.897 to ЖК "Архитектон.Декабристов 20" (Корпорация Маяк, Сданные)'),

    -- 115 deals/12m. "Хрустальные ключи" → domrf ЖК "Хрустальные ключи" (ЛСР). sim=0.857
    ('Хрустальные ключи', 'Екатеринбург', 17471, 'fuzzy', 0.857, false,
     'Audit 2026-05-17: sim=0.857 to ЖК "Хрустальные ключи" (ЛСР, Сданные)'),

    -- 128 deals/12m. "Большой каретный" → domrf ЖК "Большой каретный". sim=0.850
    ('Большой каретный', 'Екатеринбург', 45859, 'fuzzy', 0.850, false,
     'Audit 2026-05-17: sim=0.850 to ЖК "Большой каретный" (СЗ НИЖНЕИСЕТСКИЙ ПРУД, Сданные)')

ON CONFLICT (objective_complex_name, objective_group) DO NOTHING;

-- =============================================================================
-- MEDIUM confidence (sim 0.6-0.85) — manual review required
-- Uncomment and verify each INSERT before applying to prod.
-- =============================================================================

-- 207 deals/12m. "Зеленая горка" → domrf ЖК "Зеленая горка" (СЗ ДИККИТ, Сданные). sim=0.824
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Зеленая горка', 'Екатеринбург', 59810, 'fuzzy', 0.824, false, 'sim=0.824 review: Зеленая горка (СЗ ДИККИТ)') ON CONFLICT DO NOTHING;

-- 16 deals/12m. "Куйбышева 100" → domrf ЖК "Куйбышева 100" (СЗ ПРЕМЬЕРСТРОЙ, Сданные). sim=0.824
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Куйбышева 100', 'Екатеринбург', 47419, 'fuzzy', 0.824, false, 'sim=0.824 review: Куйбышева 100 (СЗ ПРЕМЬЕРСТРОЙ)') ON CONFLICT DO NOTHING;

-- 71 deals/12m. "Белый парус" → domrf ЖК "Белый парус" (Астра, Сданные). sim=0.800
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Белый парус', 'Екатеринбург', 20814, 'fuzzy', 0.800, false, 'sim=0.800 review: Белый парус (Астра, Сданные)') ON CONFLICT DO NOTHING;

-- 164 deals/12m. "Небосклоны" → domrf ЖК «Небосклоны» (Унистрой, Сданные). sim=0.786
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Небосклоны', 'Екатеринбург', 55308, 'fuzzy', 0.786, false, 'sim=0.786 review: Небосклоны (Унистрой, Сданные)') ON CONFLICT DO NOTHING;

-- 99 deals/12m. "Огни Исети" → domrf ЖК "Огни Исети" (СЗ СК УРАЛКОМПЛЕКТ, Сданные). sim=0.786
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Огни Исети', 'Екатеринбург', 46431, 'fuzzy', 0.786, false, 'sim=0.786 review: Огни Исети (СЗ СК УРАЛКОМПЛЕКТ, Сданные)') ON CONFLICT DO NOTHING;

-- 234 deals/12m. "Абрикос" → domrf ЖК Абрикос (Стройтэк, Сданные). sim=0.727
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Абрикос', 'Екатеринбург', 50239, 'fuzzy', 0.727, false, 'sim=0.727 review: Абрикос (Стройтэк, Сданные)') ON CONFLICT DO NOTHING;

-- 33 deals/12m. "Estelle" → domrf ЖК Estelle (СЗ ИНВЕСТСТРОЙ, Сданные). sim=0.727
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Estelle', 'Екатеринбург', 53948, 'fuzzy', 0.727, false, 'sim=0.727 review: Estelle (СЗ ИНВЕСТСТРОЙ, Сданные)') ON CONFLICT DO NOTHING;

-- 25 deals/12m. "Мирлеон" → domrf ЖК "Мирлеон" (Виктория, Сданные). sim=0.727
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Мирлеон', 'Екатеринбург', 62711, 'fuzzy', 0.727, false, 'sim=0.727 review: Мирлеон (Виктория, Сданные)') ON CONFLICT DO NOTHING;

-- 318 deals/12m. "Первый" → domrf ЖК "ПЕРВЫЙ" (ИКАР, Сданные). sim=0.700
-- CAUTION: 103_seed note said "Первый" belongs to ИКАР, not PRINZIP. Mapping is valid for
-- velocity purposes (not PRINZIP-specific). Verify obj_id 52307 is the right corpus.
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Первый', 'Екатеринбург', 52307, 'fuzzy', 0.700, false, 'sim=0.700 review: ЖК ПЕРВЫЙ (ИКАР, Сданные). Not PRINZIP — skipped in 103, valid here.') ON CONFLICT DO NOTHING;

-- 107 deals/12m. "Мохито" → domrf ЖК Мохито (Стройтэк, Сданные). sim=0.700
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Мохито', 'Екатеринбург', 41887, 'fuzzy', 0.700, false, 'sim=0.700 review: Мохито (Стройтэк, Сданные)') ON CONFLICT DO NOTHING;

-- 215 deals/12m. "на Ясной" → domrf "Дом на Ясной" (Практика, Сданные). sim=0.692
-- CAUTION: short name "на Ясной" may collide. Verify project is the same as "Дом на Ясной".
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('на Ясной', 'Екатеринбург', 51568, 'fuzzy', 0.692, false, 'sim=0.692 review: Дом на Ясной (Практика, Сданные). Short name match, verify.') ON CONFLICT DO NOTHING;

-- 109 deals/12m. "Изумрудный бор 2.0" → domrf ЖР Изумрудный Бор (УГМК-ЗАСТРОЙЩИК). sim=0.682
-- NB: "Изумрудный бор" already mapped to obj_id 67678. "2.0" suffix → different phase/corp.
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Изумрудный бор 2.0', 'Екатеринбург', 45017, 'fuzzy', 0.682, false, 'sim=0.682 review: ЖР Изумрудный Бор (УГМК, Сданные). "2.0" suffix — different from mapped obj_id 67678.') ON CONFLICT DO NOTHING;

-- 317 deals/12m. "СТАРТ" → domrf ЖК СТАРТ (ТЭН, Сданные). sim=0.667
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('СТАРТ', 'Екатеринбург', 53947, 'fuzzy', 0.667, false, 'sim=0.667 review: ЖК СТАРТ (ТЭН, Сданные)') ON CONFLICT DO NOTHING;

-- 101 deals/12m. "Горки" → domrf ЖК "Горки" (СЗ ЖИЛСТРОЙ, Сданные). sim=0.667
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Горки', 'Екатеринбург', 45653, 'fuzzy', 0.667, false, 'sim=0.667 review: Горки (СЗ ЖИЛСТРОЙ, Сданные)') ON CONFLICT DO NOTHING;

-- 78 deals/12m. "Милый дом (BAZA)" → domrf Дом "Милый дом" (BAZA Development, Сданные). sim=0.667
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Милый дом (BAZA)', 'Екатеринбург', 54751, 'fuzzy', 0.667, false, 'sim=0.667 review: Дом Милый дом (BAZA Development, Сданные)') ON CONFLICT DO NOTHING;

-- 237 deals/12m. "Основинские кварталы" → domrf "Паркинг ЖК Основинские кварталы" (ТЭН). sim=0.656
-- CAUTION: domrf match is a PARKING object, not residential. Verify correct obj_id manually.
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Основинские кварталы', 'Екатеринбург', 55182, 'fuzzy', 0.656, false, 'sim=0.656 CAUTION: domrf match is Паркинг object. Find correct residential obj_id.') ON CONFLICT DO NOTHING;

-- 420 deals/12m. "Южные кварталы (Брусника)" → domrf "Южные кварталы" (Брусника, Строящиеся). sim=0.625
-- Multiple Брусника Южные кварталы corpora found: 59867, 70970, 67220 (Строящиеся), 45857, etc.
-- Need to pick the primary active one. obj_id 59867 suggested (Строящиеся, latest).
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Южные кварталы (Брусника)', 'Екатеринбург', 59867, 'fuzzy', 0.625, false, 'sim=0.625 review: Юж.кварталы Брусника (Строящиеся). Multiple corpora — verify primary obj_id.') ON CONFLICT DO NOTHING;

-- 51 deals/12m. "На Некрасова" → domrf "Квартал на Некрасова" (Брусника, Сданные). sim=0.600
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('На Некрасова', 'Екатеринбург', 40819, 'fuzzy', 0.600, false, 'sim=0.600 review: Квартал на Некрасова (Брусника, Сданные)') ON CONFLICT DO NOTHING;

-- 182 deals/12m. "Уральский" → domrf "ЖК Уральский сад" (Страна Девелопмент, Строящиеся). sim=0.588
-- CAUTION: short generic name "Уральский" — may not be "Уральский сад". Verify.
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Уральский', 'Екатеринбург', 65611, 'fuzzy', 0.588, false, 'sim=0.588 review: ЖК Уральский сад (Страна Девелопмент). Verify "Уральский" = "Уральский сад".') ON CONFLICT DO NOTHING;

-- 154 deals/12m. "Екатерининский парк" → domrf "Концепт-проект Екатерининский парк" (ТЭН). sim=0.588
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Екатерининский парк', 'Екатеринбург', 47004, 'fuzzy', 0.588, false, 'sim=0.588 review: Концепт-проект Екатерининский парк (ТЭН, Сданные)') ON CONFLICT DO NOTHING;

-- 97 deals/12m. "Башня Времени" → domrf ЖД "Башня Времени" (Фортис Девелопмент, Строящиеся). sim=0.583
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Башня Времени', 'Екатеринбург', 60557, 'fuzzy', 0.583, false, 'sim=0.583 review: Башня Времени (Фортис Девелопмент, Строящиеся)') ON CONFLICT DO NOTHING;

-- 48 deals/12m. "Re:Volution Towers (НКС-Девелопмент)" → domrf RE.VOLUTION TOWERS (НКС-Девелопмент, Строящиеся). sim=0.543
-- Developer name matches exactly. High-confidence despite lower sim (long name with punctuation diff).
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Re:Volution Towers (НКС-Девелопмент)', 'Екатеринбург', 39106, 'fuzzy', 0.543, false, 'sim=0.543 review: RE.VOLUTION TOWERS (НКС-Девелопмент, Строящиеся). Dev name matches.') ON CONFLICT DO NOTHING;

-- 146 deals/12m. "Квартал Моменты" → domrf "Квартал Моменты на Космонавтов" (TETRIS GROUP, Строящиеся). sim=0.533
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Квартал Моменты', 'Екатеринбург', 64556, 'fuzzy', 0.533, false, 'sim=0.533 review: Квартал Моменты на Космонавтов (TETRIS GROUP, Строящиеся)') ON CONFLICT DO NOTHING;

-- 914 deals/12m. "Новокольцовский" → domrf Жилой р-н Новокольцовский (Синара-Девелопмент). sim=0.485
-- Large multi-corpus project (6 corpora found). obj_id 59217 = Строящиеся (4 оч. ЖД5).
-- Pick most active Строящиеся corpus. Needs manual verification of primary obj_id.
-- INSERT INTO objective_complex_mapping (objective_complex_name, objective_group, domrf_obj_id, match_method, match_score, is_reviewed, note) VALUES
--   ('Новокольцовский', 'Екатеринбург', 59217, 'fuzzy', 0.485, false, 'sim=0.485 review: Новокольцовский (Синара-Девелопмент). 914 deals/12m, large multi-corpus. Verify obj_id.') ON CONFLICT DO NOTHING;

-- =============================================================================
-- LOW / ORPHAN — no domrf match found (sim < 0.4 or wrong project)
-- These Objective project_names have no reliable domrf_kn_objects counterpart.
-- velocity.py will show velocity=0 for them until matched or until rosreestr fallback is used.
-- =============================================================================
-- Новокольцовский (if MEDIUM above rejected)
-- Солнечный (Эталон) — sim=0.393 to wrong developer. Эталон has obj 68595 (Строящиеся) but
--   name only "Район Солнечный" — ambiguous. Orphan for now.
-- Forum Park — no EKB match in domrf_kn_objects at all.
-- Береговой — sim=0.370, "Семейный квартал Береговой" (Талан). Below threshold.
-- Лайв — sim=0.385 to Квартал Лайв (Атомстройкомплекс). Below threshold.
-- Тетро — sim=0.375. Below threshold.
-- Московский квартал (Земельный ресурс) — best match is sданные old project, ambiguous.
-- Река. Дом на набережной — no reliable match.
-- Русь, Русь XXI — no match found.
-- Тактика, Новация, Утес, Добрый, К100, 9 Космонавтов, Орбита на Титова,
-- Тетро, Курчатов, River Park (Кургансельстрой), Современник, Новый ВИЗ (Астра-Девелопмент),
-- Самоцветы, Белый парус (if MEDIUM rejected), А+, Центральный Парк (Екатеринбург),
-- 7 Ключей, GRAFIT, 7Я, Тишина 2, Грин Гарден, Дружный, Дружный-2, Соната Парк,
-- Проспект Мира. Компаунд, Мир Труд Май, Викулов, Астон.Время, Голос Заря (Голос),
-- Тихий центр, Федерация, Теплые кварталы (Паритет Девелопмент),
-- Теплые кварталы (Призвание), Уралмаш, Цветочный, Каменные палатки (BAZA),
-- На Некрасова (if MEDIUM rejected), ЖК на Ботанике, Традиции (Квартал на Турбинке),
-- NOVA Park, ПТ На Ежевичной, Пушкин, DOM 7, Аура, Кварталы конструктивизма (already HIGH),
-- RedRock, Шолохов, 19/05, М1, Атмосфера, Рио-3, 4Ю, Северный Химмаш, Олимпика,
-- АЛЛЕГРО, Форум Сити, Литературный, Просторы, Рижский, Ботаника LIFE, Discovery Residence,
-- Дом на Бардина — all orphans, no action.

COMMIT;
