gendesign/data/sql/104_seed_bulk_mappings.sql
lekss361 da1c619a9c fix(sf-04b): bulk seed mappings для всех ЖК с активностью в Objective
Audit 2026-05-17 (extension PR #273): 13 high-confidence (sim > 0.85)
auto-inserted, 25 medium-confidence (0.6-0.85) commented for manual review.
118 unmapped projects scanned via pg_trgm vs domrf_kn_objects EKB.

Closes (epic part) #271 item 4 extension
2026-05-17 13:36:34 +03:00

232 lines
22 KiB
PL/PgSQL
Raw Permalink 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.

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