-- 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;