Рынок недвижимости это аренда
и продажа
. Внутри этих разделов продается все - от
квартир и комнат до участков и коммерческой недвижимости
В исходной БД жилые комплексы определены так:
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | binary(16) | NO | PRI | NULL | |
nb_sourceId | tinyint(4) unsigned | NO | MUL | 1 | |
statusId | tinyint(4) unsigned | NO | MUL | 1 | |
developerId | binary(16) | NO | MUL | NULL | |
date_insert | timestamp | NO | CURRENT_TIMESTAMP | ||
date_update | datetime | NO | NULL | ||
regionId | int(11) unsigned | NO | MUL | NULL | |
districtId | int(11) unsigned | NO | MUL | NULL | |
district_name | varchar(255) | YES | NULL | ||
city_name | varchar(255) | YES | NULL | ||
street_name | varchar(255) | YES | NULL | ||
subway1Id | int(11) unsigned | YES | NULL | ||
subway2Id | int(11) unsigned | YES | NULL | ||
subway3Id | int(11) unsigned | YES | NULL | ||
name | varchar(250) | NO | MUL | NULL | |
note | text | YES | NULL | ||
longitude | decimal(18,10) | YES | NULL | ||
latitude | decimal(18,10) | YES | NULL | ||
dateUpdate | datetime | YES | NULL | ||
isPrivate | tinyint(1) | NO | MUL | 0 | |
bknId | binary(16) | YES | MUL | NULL |
А в целевой БД мы определили жилые комплексы в основном файле проекта в разделе Жилые комплексы
У каждого ЖК есть статус
- например: активный или архивный (есть и другие)
У каждого ЖК есть источник данных
- обычно это агентство, от которого получена
информация об этом ЖК.
У каждого ЖК есть регион
, район
и несколько ближайших станций метро
.
В каждом ЖК есть корпуса
, т.е. построенные или строящиеся внутри проекта ЖК дома. Они
могут быть объединены в очереди сдачи
. У каждого корпуса есть адрес дома.
Корпуса могут быть в разных состояниях готовности, для этого у них есть поле
status_buildId
, указывающее на таблицу status_build
, в которых эти состояния перечислены
SELECT DISTINCT
REPLACE(REPLACE(bkn.name, '«', ''), '»', '') AS name,
u.unidecode AS unidecode,
du.unidecode AS developer_unidecode,
toguid(ap.id) AS complexId,
ap.regionId AS regionId,
REPLACE(REPLACE(d.name, '«', ''), '»', '') AS developer,
toguid(d.id) AS developerId,
CONCAT('/BuildingComplexes/complex/', u.unidecode) AS complexLink,
CONCAT('/BuildingComplexes/developers/', du.unidecode) AS developerLink,
ap.city_name AS city_name,
ap.street_name AS street_name,
sbw.name AS subway,
ap.subway1Id AS subwayId,
ap.district_name AS district,
ap.districtId AS districtId,
ap.latitude,
ap.longitude,
ap.nb_sourceId AS sourceId,
(SELECT
CONCAT('http://alexander.pro.bkn.ru/images/b_preview/',
filename)
FROM
bkn_base.nb_photos ph
WHERE
ph.objectId = ap.id
LIMIT 1) AS photo,
(SELECT
COUNT(*)
FROM
bkn_base.nb_photos ph
WHERE
ph.objectId = ap.id) AS pcount,
(SELECT
status_buildId
FROM
bkn_base.nb_block bl
WHERE
bl.nb_complexId = ap.id
AND bl.statusId = 1
ORDER BY bl.status_buildId
LIMIT 1) AS status_buildId,
(SELECT
CONCAT(bl.quarter_end, '-', bl.year_end)
FROM
bkn_base.nb_block bl
WHERE
bl.nb_complexId = ap.id
AND bl.statusId = 1
AND bl.quarter_end IS NOT NULL
AND bl.year_end IS NOT NULL
ORDER BY bl.year_end
LIMIT 1) AS year_end_min_string,
(SELECT
CONCAT(bl.quarter_end, '-', bl.year_end)
FROM
bkn_base.nb_block bl
WHERE
bl.nb_complexId = ap.id
AND bl.statusId = 1
AND bl.quarter_end IS NOT NULL
AND bl.year_end IS NOT NULL
ORDER BY bl.year_end DESC
LIMIT 1) AS year_end_max_string,
(SELECT
COUNT(*)
FROM
bkn_base.nb_block bl
WHERE
bl.nb_complexId = ap.id
AND bl.statusId = 1
ORDER BY bl.year_end DESC
LIMIT 1) AS bcount,
(SELECT
MIN(amount)
FROM
bkn_base.nb_appartment apa
INNER JOIN
bkn_base.nb_block bl ON apa.nb_blockId = bl.id
AND bl.statusId = 1
WHERE
bl.nb_complexId = ap.id
AND apa.statusId = 1
AND apa.obj_typeId IN (1 , 3, 6)) AS minamount,
(SELECT
MIN(amount_metr)
FROM
bkn_base.nb_appartment apa
INNER JOIN
bkn_base.nb_block bl ON apa.nb_blockId = bl.id
AND bl.statusId = 1
WHERE
bl.nb_complexId = ap.id
AND apa.statusId = 1
AND apa.obj_typeId IN (1 , 3, 6)) AS minamount_metr
FROM
bkn_base.nb_complex bkn
INNER JOIN
bkn_base.nb_complex ap FORCE INDEX (AP) ON bkn.id = ap.bknid
AND ap.nb_sourceId IN (1 , 3)
AND ap.statusId = 1
AND ap.isPrivate = 0
LEFT JOIN
bkn_base.subway sbw ON sbw.id = ap.subway1Id
INNER JOIN
bkn_base.developer d ON d.id = ap.developerId
INNER JOIN
bkn_base.unidecode u ON u.guid = ap.id AND u.type = 0
INNER JOIN
bkn_base.unidecode du ON du.guid = d.id AND du.type = 1
INNER JOIN
bkn_base.nb_block b ON b.nb_complexId = ap.id
AND b.statusId = 1
INNER JOIN
bkn_base.nb_appartment a ON b.id = a.nb_blockId AND a.statusId = 1
AND a.obj_typeId IN (1 , 3, 6)
WHERE
bkn.nb_sourceId = 2 AND bkn.statusId = 1
ORDER BY ap.name
LIMIT $from, $cnt;
Таким образом мы можем получить все ЖК которые нам нужны и связанные с ними данные
Напишем функцию, которая возвращает все жилые комплексы.
Теперь будем обрабатывать получаемые из исходной базы данных комплексы, пытаясь найти соответствия в целевой БД. Если ничего похожего не нашли - добавляем комплекс в целевую БД. Добавляя, мы переносим также все связанные с комплексом данные - его застройщика, корпуса и квартиры.
Функция проверки на совпадение переданного комплекса cmpx
с кандидатом candidat
на
совпадение из нашей целевой базы данных. Мы считаем, что если у комплекса совпадает
название и guid застройщика - то это однозначное совпадение.
Запрос для получения застройщиков
SELECT
toguid(d.id) AS guid,
REPLACE(REPLACE(d.name, '«', ''), '»', '') AS name,
d.deleted,
d.address,
d.url,
d.phone,
d.note,
c.phone,
c.logo,
c.url,
c.email,
CONVERT (c.enabled, SIGNED) AS enabled,
c.name
FROM
bkn_base.developer d
INNER JOIN
bkn_base.developer_customs c ON c.developerId = d.id
WHERE
d.id = guidtobinary('$developerId')
guid | name | deleted | address | url | phone | note | phone | logo | url | enabled | name | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
6945CE85-8335-11E4-B6C0-448A5BD44C07 | ЛСР-Недвижимость-СЗ | 0 | СПб, Кирочная ул., 39 | http://www.lsr.ru | (812) 325-01-01 | <span style=”color: rgb(102, 102, 102); font-family: Verdana, Arial, Geneva, Helvetica, sans-serif; font-size: 13px; text-align: justify;”>Компания «</span><strong style=”color: rgb(102, 102, 102); font-family: Verdana, Arial, Geneva, Helvetica, sans-serif; font-size: 13px; text-align: justify;”>ЛСР. Недвижимость — Северо-Запад</strong><span style=”color: rgb(102, 102, 102); font-family: Verdana, Arial, Geneva, Helvetica, sans-serif; font-size: 13px; text-align: justify;”>», до 2013 года известная как ГДСК («Городская ДомоСтроительная Компания»), занимается строительством объектов недвижимости более 10 лет. На сегодняшний день это один из ведущих застройщиков Санкт-Петербурга. Основное направление «ЛСР. Недвижимость — Северо-Запад» - строительство жилых комплексов сегмента масс-маркет в Санкт-Петербурге. В основе позиционирования объектов компании - комфортное жилье по доступной цене. Квартиры от застройщика «ЛСР. Недвижимость — Северо-Запад», построенные с использованием передовых технологий, соответствуют европейским стандар-там качества. Продажа квартир в строящихся домах осуществляется путем заключения договоров долевого участия в рамках Федерального Закона № 214. Соблюдение сроков строительства позволяет компании поддерживать репутацию одного из самых надежных застройщиков Петербурга, предлагающих качественное и в то же время доступное жилье. </span> | (812)325-01-01 | logo_lsr.png | http://www.lsr.ru/ | NULL | 1 | ЛСР-Недвижимость-СЗ |
Тут нужно еще выкидывать теги
Теперь нужна функция, которая превращает комплекс в правильный plist, удаляя форматирование, если оно есть:
Теперь берем всех активных застройщиков из целевой БД, которых мы получили на предыдущем шаге, получаем все их комплексы из исходной базы и сохраняем в целевую
А вот так можно то же самое получить из EmacsLisp
Это запрос для получения всех комплексов (с необходимыми джойнами)
SELECT
toguid(ap.id)
, REPLACE(REPLACE(bkn.name, '«', ''), '»', '') AS name
, ap.nb_sourceId
, ap.statusId
, ap.regionId
, ap.districtId
, ap.district_name
, ap.city_name
, ap.street_name
, ap.subway1Id
, ap.subway2Id
, ap.subway3Id
, ap.note
, ap.longitude
, ap.latitude
, ap.dateUpdate
, ap.isPrivate
, toguid(ap.bknId)
FROM
nb_complex bkn
INNER JOIN
developer d ON d.id = bkn.developerId
INNER JOIN
nb_complex ap FORCE INDEX (AP) ON bkn.id = ap.bknid
AND ap.nb_sourceId IN (1 , 3)
AND ap.statusId = 1
AND ap.isPrivate = 0
INNER JOIN
nb_block b ON b.nb_complexId = ap.id
AND b.statusId = 1
INNER JOIN
nb_appartment a ON b.id = a.nb_blockId AND a.statusId = 1
WHERE
bkn.nb_sourceId = 2
AND bkn.statusId = 1
AND d.id = guidtobinary('$developerId')
GROUP BY ap.id , bkn.name , ap.nb_sourceId , d.id , d.name
ORDER BY name
Теперь можно сделать страничку комплекса
У нас есть некоторое количество (423) застройщиков
, которые строят жилые
комплексы
. Квартиры в этих жилых комплексах продаются как самим застройщиком (его
отделом продаж) так агенствами недвижимости
и субагентами
.
В исходной бд
застройщики определены так:
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | binary(16) | NO | PRI | NULL | |
name | varchar(255) | NO | NULL | ||
sortIndex | tinyint(4) unsigned | NO | 0 | ||
deleted | tinyint(1) | NO | 0 | ||
dateUpdate | datetime | YES | NULL | ||
address | varchar(255) | YES | NULL | ||
url | varchar(50) | YES | NULL | ||
phone | varchar(50) | YES | NULL | ||
note | text | YES | NULL |
А в целевой БД мы определили застройщиков в основном файле проекта, в разделе <a href=”file:doc.org::Застройщики (developer)”>Застройщики
Это позволяет написать функцию, которая будет преобразовывать застройщика из исходной БД и класть его в целевую. Вот запрос, которым мы можем получать всех застройщиков, которые имеют активные корпуса в активных комплексах и isPrivate этих комплексах равно нулю. IsPrivate - флаг приватности, говорит о том, что эти комплексы нельзя рекламировать.
SELECT
toguid(d.id) AS developerId,
REPLACE(REPLACE(d.name, '«', ''), '»', '') AS developer_name,
d.address,
d.url,
d.phone,
d.note
FROM
nb_complex cmpx
INNER JOIN
developer d ON d.id = cmpx.developerId
INNER JOIN
nb_complex ap FORCE INDEX (AP) ON cmpx.id = ap.bknid AND ap.nb_sourceId IN (1 , 3) AND ap.statusId = 1 AND ap.isPrivate = 0
INNER JOIN
nb_block b ON b.nb_complexId = ap.id AND b.statusId = 1
INNER JOIN
nb_appartment a ON b.id = a.nb_blockId AND a.statusId = 1
WHERE
cmpx.nb_sourceId = 2 AND cmpx.statusId = 1
GROUP BY d.id , d.name
ORDER BY d.name
LIMIT $limit;
Обернув его в макрос, который осуществляет подключение к mysql и установку кодировки мы можем получить всех застройщиков, имеющих активные комплексы:
То же в EmacsLisp
Застройщики имеют описание, в котором есть html-форматирование, которое хотелось бы удалить. Я использую для этого php-функцию strip_tags
Вот так я вызывают PHP из Common Lisp:
А вот так можно вызвать его из Emacs Lisp:
Теперь всех полученных застройщиков можно сохранить в PostgreSQL:
Теперь, когда все застройщики у нас в базе - их можно отобразить в веб-интерфейсе. На странице застройщика оставим placeholder для того чтобы позже отобразить все жилые комплексы этого застройщика.
В исходной БД корпуса жилых комплексов определены так:
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
nb_sourceId | tinyint(4) unsigned | NO | MUL | 2 | |
id | binary(16) | NO | PRI | NULL | |
nb_complexId | binary(16) | NO | MUL | NULL | |
statusId | tinyint(4) unsigned | NO | MUL | 1 | |
status_buildId | tinyint(4) unsigned | YES | NULL | ||
house | varchar(15) | YES | NULL | ||
block | varchar(15) | YES | NULL | ||
litera | varchar(50) | YES | NULL | ||
floors | varchar(20) | YES | NULL | ||
quarter_end | tinyint(4) unsigned | YES | NULL | ||
year_end | smallint(6) unsigned | YES | NULL | ||
house_typeId | tinyint(4) unsigned | YES | NULL | ||
bknId | binary(16) | YES | NULL | ||
dateUpdate | datetime | YES | NULL |
А в целевой БД мы определили жилые комплексы в основном файле проекта в разделе Корпуса жилых комплексов
Таким образом мы можем получить все корпуса для данного комплекса:
SELECT toguid(id), nb_sourceId, toguid(nb_complexId), statusId, status_buildId, house, block, litera, floors, quarter_end, year_end, house_typeId, toguid(bknId), dateUpdate, toguid(nb_complexId)
FROM nb_block
WHERE
nb_sourceId IN (2)
AND
nb_complexId = guidtobinary('$complexId')
Напишем функцию, которая возвращает все жилые комплексы конкретного застройщика
Теперь нужна функция, которая превращает комплекс в правильный plist, удаляя форматирование, если оно есть:
Теперь для каждого блока получаем и перебрасываем в новую базу все его корпуса:
===TODO===
Здесь мы соберем все данные которые у нас есть по всем жилым комплексам. Все активные комплексы можно получить вот таким запросом:
SELECT
toguid(ap.id),
REPLACE(REPLACE(bkn.name, '«', ''),
'»',
'') AS name,
ap.nb_sourceId,
toguid(d.id) AS developerId,
REPLACE(REPLACE(d.name, '«', ''),
'»',
'') AS developer_name,
ap.statusId,
ap.regionId,
ap.districtId,
ap.district_name,
ap.city_name,
ap.street_name,
ap.subway1Id,
ap.subway2Id,
ap.subway3Id,
ap.note,
ap.longitude,
ap.latitude,
ap.dateUpdate,
ap.isPrivate,
toguid(ap.bknId)
FROM
bkn_base.nb_complex bkn
INNER JOIN
bkn_base.developer d ON d.id = bkn.developerId
INNER JOIN
bkn_base.nb_complex ap FORCE INDEX (AP) ON bkn.id = ap.bknid
AND ap.nb_sourceId IN (1 , 3)
AND ap.statusId = 1
AND ap.isPrivate = 0
INNER JOIN
bkn_base.nb_block b ON b.nb_complexId = ap.id
AND b.statusId = 1
INNER JOIN
bkn_base.nb_appartment a ON b.id = a.nb_blockId AND a.statusId = 1
WHERE
bkn.nb_sourceId = 2 AND bkn.statusId = 1
GROUP BY ap.id , bkn.name , ap.nb_sourceId , d.id , d.name
ORDER BY name
LIMIT 3
В процесе сбора данных будем забирать все корпуса этих комплексов
select toguid(id), nb_sourceId, toguid(nb_complexId), statusId, status_buildId, house, block, litera, floors, quarter_end, year_end, house_typeId, bknId from nb_block limit $thevar;
toguid(id) | nb_sourceId | toguid(nb_complexId) | statusId | status_buildId | house | block | litera | floors | quarter_end | year_end | house_typeId | bknId |
---|---|---|---|---|---|---|---|---|---|---|---|---|
BC594F00-300C-11E3-B13F-5404A6B20161 | 2 | 9DFF6CEF-D7EE-11E4-9FBB-448A5BD44C07 | 1 | NULL | NULL | NULL | уч.1 | 9-17 | 2 | 2014 | 2 | NULL |
03DA6000-C403-11E4-9FBB-448A5BD44C07 | 2 | 9DFFDAC4-D7EE-11E4-9FBB-448A5BD44C07 | 1 | NULL | 23 | 6 | NULL | 5-8,18-20 | 3 | 2015 | 2 | NULL |
FF646B00-EA65-11E4-81F1-448A5BD44C07 | 2 | 9E0006F5-D7EE-11E4-9FBB-448A5BD44C07 | 1 | 1 | 2 | 1 | NULL | 25 | 1 | 2016 | 22 | NULL |
(save-excursion
(replace-regexp-in-string "\"\"" ""
(mapconcat
(lambda (x)
(org-babel-goto-named-src-block x)
(format "%S" (cadr (org-babel-get-src-block-info t))))
(split-string blk "," t)
sep)
t t))
(org-babel-execute-src-block "my_query")
Комплекс может прийти к нам от разных агенств. Источники собраны здесь, в таблице nb_source
field | field type | note |
---|---|---|
id | tinyint(4) unsigned | Числовой идентификатор |
name | varchar(255) | Название источника |
sortIndex | tinyint(4) unsigned | Индекс сортировки |
deleted | tinyint(1) | Признак удаленного |
id | name | sortIndex | deleted |
---|---|---|---|
1 | АЛЕКСАНДР Недвижимость | 0 | 0 |
2 | БКН-Профи | 0 | 0 |
3 | Пет.Недвижимость | 0 | 0 |
field | field type | note |
---|---|---|
id | tinyint(4) unsigned | Числовой идентификатор |
name | varchar(40) | Название статуса |
nameShort | varchar(20) | Короткое название статуса |
sortIndex | tinyint(4) unsigned | Индекс сортировки |
deleted | tinyint(1) | Признак удаленного |
id | name | nameShort | sortIndex | deleted |
---|---|---|---|---|
1 | Активные объекты | Активно | 1 | 0 |
2 | Архивные объекты | Архивно | 2 | 0 |
3 | Арендованные объекты | Сдано | 3 | 0 |
4 | Проданные объекты | Продано | 4 | 0 |
5 | Удаленные объекты | Удалено | 5 | 0 |
field | field type | note |
---|---|---|
id | int(11) unsigned | Числовой идентификатор |
name | varchar(255) | Название региона |
sortIndex | tinyint(4) unsigned | Индекс сортировки |
deleted | tinyint(1) | Признак удаленного |
id | name | sortIndex | deleted |
---|---|---|---|
1 | Санкт-Петербург | 0 | 0 |
4000 | Москва | 2 | 0 |
4331 | Республика Карелия | 255 | 0 |
4332 | Новгородская область | 255 | 0 |
5001 | Ленинградская область | 1 | 0 |
16417 | Псковская область | 255 | 0 |
17500 | Краснодарский край | 255 | 0 |
17600 | Московская область | 3 | 0 |
17801 | Калининградская область | 255 | 0 |
26500 | Вологодская область | 255 | 0 |
26600 | Пензенская область | 255 | 0 |
26700 | Тверская область | 255 | 0 |
26926 | Ставропольский край | 255 | 0 |
27475 | Ивановская область | 255 | 0 |
27600 | Астраханская область | 255 | 0 |
27700 | Мурманская область | 255 | 0 |
27800 | Нижегородская область | 255 | 0 |
28200 | Красноярский Край | 255 | 0 |
40000 | Тульская область | 255 | 0 |
40113 | Ярославская область | 255 | 0 |
40122 | Крым респ. | 255 | 0 |
40196 | Севастополь | 255 | 0 |
41923 | Калужская область | 255 | 0 |
41961 | Ростовская область | 255 | 0 |
42202 | Воронежская область | 255 | 0 |
field | field type | note |
---|---|---|
id | int(11) unsigned | NO |
regionId | int(11) unsigned | NO |
name | varchar(255) | NO |
sortIndex | tinyint(4) unsigned | NO |
deleted | tinyint(1) | NO |
id | regionId | name | sortIndex | deleted |
---|---|---|---|---|
4 | 1 | Адмиралтейский | 0 | 0 |
5 | 1 | Василеостровский | 0 | 0 |
6 | 1 | Выборгский | 0 | 0 |
7 | 1 | Калининский | 0 | 0 |
8 | 1 | Кировский | 0 | 0 |
9 | 1 | Красносельский | 0 | 0 |
10 | 1 | Московский | 0 | 0 |
11 | 1 | Невский | 0 | 0 |
12 | 1 | Петроградский | 0 | 0 |
13 | 1 | Приморский | 0 | 0 |
14 | 1 | Фрунзенский | 0 | 0 |
15 | 1 | Центральный р-н | 0 | 0 |
41 | 1 | Красногвардейский | 0 | 0 |
4333 | 4331 | Лахденпохский р-н | 0 | 0 |
4334 | 4332 | Чудовский р-н | 0 | 0 |
5002 | 5001 | Бокситогорский р-н | 0 | 0 |
5003 | 5001 | Волосовский р-н | 0 | 0 |
5004 | 5001 | Волховский р-н | 0 | 0 |
5005 | 5001 | Всеволожский р-н | 0 | 0 |
5006 | 5001 | Выборгский р-н | 0 | 0 |
5007 | 5001 | Гатчинский р-н | 0 | 0 |
5008 | 5001 | Кингисеппский р-н | 0 | 0 |
5009 | 5001 | Киришский р-н | 0 | 0 |
5010 | 5001 | Кировский р-н | 0 | 0 |
5011 | 5001 | Лодейнопольский р-н | 0 | 0 |
5012 | 5001 | Ломоносовский р-н | 0 | 0 |
5013 | 5001 | Лужский р-н | 0 | 0 |
5014 | 5001 | Подпорожский р-н | 0 | 0 |
5015 | 5001 | Приозерский р-н | 0 | 0 |
5016 | 5001 | Сланцевский р-н | 0 | 0 |
5017 | 5001 | Тихвинский р-н | 0 | 0 |
5018 | 5001 | Тосненский р-н | 0 | 0 |
13001 | 1 | Колпинский р-н | 0 | 0 |
13002 | 1 | Кронштадтский р-н | 0 | 0 |
13003 | 1 | Курортный р-н | 0 | 0 |
13004 | 1 | Петродворцовый р-н | 0 | 0 |
13005 | 1 | Пушкинский р-н | 0 | 0 |
15984 | 4332 | Новгородский р-н | 0 | 0 |
16418 | 16417 | Гдовский р-н | 0 | 0 |
16446 | 16417 | Опочецкий р-н | 0 | 0 |
16600 | 4332 | Валдайский р-н | 0 | 0 |
16602 | 4332 | Маловишерский р-н | 0 | 0 |
16605 | 4332 | Старорусский р-н | 0 | 0 |
16607 | 16417 | Порховский р-н | 0 | 0 |
16610 | 16417 | Пушкиногорский р-н | 0 | 0 |
16624 | 4331 | Прионежский р-н | 0 | 0 |
16625 | 4331 | Беломорский р-н | 0 | 0 |
16626 | 4331 | Калевальский р-н | 0 | 0 |
16627 | 4331 | Кемский р-н | 0 | 0 |
16628 | 4331 | Кондопожский р-н | 0 | 0 |
16630 | 4331 | Лоухский р-н | 0 | 0 |
16631 | 4331 | Медвежьегорский р-н | 0 | 0 |
16632 | 4331 | Муезерский р-н | 0 | 0 |
16633 | 4331 | Олонецкий р-н | 0 | 0 |
16634 | 4331 | Питкярантский р-н | 0 | 0 |
16635 | 4331 | Пряжинский р-н | 0 | 0 |
16636 | 4331 | Пудожский р-н | 0 | 0 |
16637 | 4331 | Сегежский р-н | 0 | 0 |
16638 | 4331 | Суоярвский р-н | 0 | 0 |
16652 | 4332 | Любытинский р-н | 0 | 0 |
16653 | 16417 | Бежаницкий р-н | 0 | 0 |
16654 | 16417 | Псковский р-н | 0 | 0 |
16655 | 16417 | Великолукский р-н | 0 | 0 |
16656 | 16417 | Дедовичский р-н | 0 | 0 |
16657 | 16417 | Дновский р-н | 0 | 0 |
16658 | 16417 | Красногородский р-н | 0 | 0 |
16660 | 16417 | Локнянский р-н | 0 | 0 |
16661 | 16417 | Невельский р-н | 0 | 0 |
16662 | 16417 | Новоржевский р-н | 0 | 0 |
16663 | 16417 | Новосокольнический р-н | 0 | 0 |
16664 | 16417 | Островский р-н | 0 | 0 |
16665 | 16417 | Палкинский р-н | 0 | 0 |
16666 | 16417 | Печорский р-н | 0 | 0 |
16667 | 16417 | Плюсский р-н | 0 | 0 |
16668 | 16417 | Пустошкинский р-н | 0 | 0 |
16669 | 16417 | Пыталовский р-н | 0 | 0 |
16670 | 16417 | Себежский р-н | 0 | 0 |
16671 | 16417 | Струго-Красненский р-н | 0 | 0 |
16963 | 4332 | Хвойнинский р-н | 0 | 0 |
17501 | 17500 | Абинский р-н | 0 | 0 |
17502 | 17500 | Анапский р-н | 0 | 0 |
17503 | 17500 | Апшеронский р-н | 0 | 0 |
17504 | 17500 | Белоглинский р-н | 0 | 0 |
17505 | 17500 | Белореченский р-н | 0 | 0 |
17508 | 17500 | Гулькевичский р-н | 0 | 0 |
17510 | 17500 | Ейский р-н | 0 | 0 |
17514 | 17500 | Кореновский р-н | 0 | 0 |
17517 | 17500 | Крымский р-н | 0 | 0 |
17518 | 17500 | Курганинский р-н | 0 | 0 |
17520 | 17500 | Лабинский р-н | 0 | 0 |
17522 | 17500 | Мостовский р-н | 0 | 0 |
17523 | 17500 | Новокубанский р-н | 0 | 0 |
17527 | 17500 | Приморско-Ахтарский р-н | 0 | 0 |
17528 | 17500 | Северский р-н | 0 | 0 |
17529 | 17500 | Славянский р-н | 0 | 0 |
17532 | 17500 | Темрюкский р-н | 0 | 0 |
17533 | 17500 | Тимашевский р-н | 0 | 0 |
17534 | 17500 | Тихорецкий р-н | 0 | 0 |
17535 | 17500 | Туапсинский р-н | 0 | 0 |
17536 | 17500 | Успенский р-н | 0 | 0 |
17537 | 17500 | Усть-Лабинский р-н | 0 | 0 |
17538 | 17500 | Щербиновский р-н | 0 | 0 |
17601 | 17600 | Балашихинский р-н | 0 | 0 |
17602 | 17600 | Волоколамский р-н | 0 | 0 |
17603 | 17600 | Воскресенский р-н | 0 | 0 |
17604 | 17600 | Дмитровский р-н | 0 | 0 |
17605 | 17600 | Домодедовский р-н | 0 | 0 |
17606 | 17600 | Егорьевский р-н | 0 | 0 |
17607 | 17600 | Зарайский р-н | 0 | 0 |
17608 | 17600 | Истринский р-н | 0 | 0 |
17609 | 17600 | Каширский р-н | 0 | 0 |
17610 | 17600 | Клинский р-н | 0 | 0 |
17612 | 17600 | Красногорский р-н | 0 | 0 |
17613 | 17600 | Ленинский р-н | 0 | 0 |
17614 | 17600 | Лотошинский р-н | 0 | 0 |
17615 | 17600 | Луховицкий р-н | 0 | 0 |
17616 | 17600 | Люберецкий р-н | 0 | 0 |
17617 | 17600 | Можайский р-н | 0 | 0 |
17618 | 17600 | Мытищинский р-н | 0 | 0 |
17619 | 17600 | Наро-Фоминский р-н | 0 | 0 |
17620 | 17600 | Ногинский р-н | 0 | 0 |
17621 | 17600 | Одинцовский р-н | 0 | 0 |
17622 | 17600 | Озерский р-н | 0 | 0 |
17624 | 17600 | Павлово-Посадский р-н | 0 | 0 |
17626 | 17600 | Пушкинский р-н | 0 | 0 |
17627 | 17600 | Раменский р-н | 0 | 0 |
17628 | 17600 | Рузский р-н | 0 | 0 |
17632 | 17600 | Солнечногорский р-н | 0 | 0 |
17633 | 17600 | Ступинский р-н | 0 | 0 |
17634 | 17600 | Талдомский р-н | 0 | 0 |
17635 | 17600 | Химкинский р-н | 0 | 0 |
17636 | 17600 | Чеховский р-н | 0 | 0 |
17637 | 17600 | Шатурский р-н | 0 | 0 |
17638 | 17600 | Шаховской р-н | 0 | 0 |
17639 | 17600 | Щелковский р-н | 0 | 0 |
17802 | 17801 | Багратионовский р-н | 0 | 0 |
17803 | 17801 | Гвардейский р-н | 0 | 0 |
17804 | 17801 | Гурьевский р-н | 0 | 0 |
17805 | 17801 | Гусевский р-н | 0 | 0 |
17806 | 17801 | Зеленоградский р-н | 0 | 0 |
17807 | 17801 | Краснознаменский р-н | 0 | 0 |
17808 | 17801 | Неманский р-н | 0 | 0 |
17809 | 17801 | Нестеровский р-н | 0 | 0 |
17810 | 17801 | Озерский р-н | 0 | 0 |
17811 | 17801 | Полесский р-н | 0 | 0 |
17812 | 17801 | Правдинский р-н | 0 | 0 |
17813 | 17801 | Славский р-н | 0 | 0 |
17814 | 17801 | Черняховский р-н | 0 | 0 |
17842 | 4331 | Сортавальский р-н | 0 | 0 |
17903 | 4332 | Демянский р-н | 0 | 0 |
26502 | 26500 | Бабаевский р-н | 0 | 0 |
26509 | 26500 | Вытегорский р-н | 0 | 0 |
26522 | 26500 | Устюженский р-н | 0 | 0 |
26524 | 26500 | Чагодощенский р-н | 0 | 0 |
26532 | 4332 | Батецкий р-н | 0 | 0 |
26533 | 4332 | Боровичский р-н | 0 | 0 |
26535 | 4332 | Крестецкий р-н | 0 | 0 |
26536 | 4332 | Марёвский р-н | 0 | 0 |
26538 | 4332 | Окуловский р-н | 0 | 0 |
26539 | 4332 | Парфинский р-н | 0 | 0 |
26540 | 4332 | Пестовский р-н | 0 | 0 |
26541 | 4332 | Поддорский р-н | 0 | 0 |
26542 | 4332 | Солецкий р-н | 0 | 0 |
26543 | 4332 | Холмский р-н | 0 | 0 |
26544 | 4332 | Шимский р-н | 0 | 0 |
26601 | 26600 | Башмаковский р-н | 0 | 0 |
26603 | 26600 | Беднодемьяновский р-н | 0 | 0 |
26605 | 26600 | Бековский р-н | 0 | 0 |
26607 | 26600 | Белинский р-н | 0 | 0 |
26609 | 26600 | Бессоновский р-н | 0 | 0 |
26611 | 26600 | Вадинский р-н | 0 | 0 |
26613 | 26600 | Городищенский р-н | 0 | 0 |
26615 | 26600 | Земетчинский р-н | 0 | 0 |
26617 | 26600 | Иссинский р-н | 0 | 0 |
26619 | 26600 | Каменский р-н | 0 | 0 |
26621 | 26600 | Камешкирский р-н | 0 | 0 |
26623 | 26600 | Колышлейский р-н | 0 | 0 |
26625 | 26600 | Кондольский р-н | 0 | 0 |
26627 | 26600 | Кузнецкий р-н | 0 | 0 |
26629 | 26600 | Лопатинский р-н | 0 | 0 |
26631 | 26600 | Лунинский р-н | 0 | 0 |
26633 | 26600 | Малосердобинский р-н | 0 | 0 |
26635 | 26600 | Мокшанский р-н | 0 | 0 |
26637 | 26600 | Наровчатский р-н | 0 | 0 |
26639 | 26600 | Неверкинский р-н | 0 | 0 |
26641 | 26600 | Нижнеломовский р-н | 0 | 0 |
26643 | 26600 | Никольский р-н | 0 | 0 |
26645 | 26600 | Пачелмский р-н | 0 | 0 |
26647 | 26600 | Сердобский р-н | 0 | 0 |
26649 | 26600 | Сосновоборский р-н | 0 | 0 |
26651 | 26600 | Тамалинский р-н | 0 | 0 |
26653 | 26600 | Шемышейский р-н | 0 | 0 |
26701 | 26700 | Калининский р-н | 0 | 0 |
26703 | 26700 | Андреапольский р-н | 0 | 0 |
26705 | 26700 | Бежецкий р-н | 0 | 0 |
26707 | 26700 | Бельский р-н | 0 | 0 |
26709 | 26700 | Бологовский р-н | 0 | 0 |
26711 | 26700 | Весьегонский р-н | 0 | 0 |
26713 | 26700 | Вышневолоцкий р-н | 0 | 0 |
26715 | 26700 | Жарковский р-н | 0 | 0 |
26717 | 26700 | Западнодвинский р-н | 0 | 0 |
26719 | 26700 | Зубцовский р-н | 0 | 0 |
26721 | 26700 | Калязинский р-н | 0 | 0 |
26723 | 26700 | Кашинский р-н | 0 | 0 |
26725 | 26700 | Кесовогорский р-н | 0 | 0 |
26728 | 26700 | Кимрский р-н | 0 | 0 |
26730 | 26700 | Конаковский р-н | 0 | 0 |
26732 | 26700 | Краснохолмский р-н | 0 | 0 |
26734 | 26700 | Кувшиновский р-н | 0 | 0 |
26736 | 26700 | Лесной р-н | 0 | 0 |
26738 | 26700 | Лихославльский р-н | 0 | 0 |
26740 | 26700 | Максатихинский р-н | 0 | 0 |
26742 | 26700 | Молоковский р-н | 0 | 0 |
26744 | 26700 | Нелидовский р-н | 0 | 0 |
26746 | 26700 | Оленинский р-н | 0 | 0 |
26748 | 26700 | Осташковский р-н | 0 | 0 |
26750 | 26700 | Пеновский р-н | 0 | 0 |
26752 | 26700 | Рамешковский р-н | 0 | 0 |
26754 | 26700 | Ржевский р-н | 0 | 0 |
26756 | 26700 | Сандовский р-н | 0 | 0 |
26758 | 26700 | Селижаровский р-н | 0 | 0 |
26760 | 26700 | Сонковский р-н | 0 | 0 |
26762 | 26700 | Спировский р-н | 0 | 0 |
26764 | 26700 | Старицкий р-н | 0 | 0 |
26766 | 26700 | Торжокский р-н | 0 | 0 |
26768 | 26700 | Торопецкий р-н | 0 | 0 |
26770 | 26700 | Удомельский р-н | 0 | 0 |
26772 | 26700 | Фировский р-н | 0 | 0 |
26786 | 17500 | Хостинский р-н | 0 | 0 |
26942 | 26926 | Минераловодский р-н | 0 | 0 |
26947 | 26926 | Предгорный р-н | 0 | 0 |
27476 | 27475 | Ивановский р-н | 0 | 0 |
27486 | 16417 | Плюсская в-ть | 0 | 0 |
27601 | 27600 | Ахтубинский р-н | 0 | 0 |
27604 | 27600 | Володарский р-н | 0 | 0 |
27606 | 27600 | Енотаевский р-н | 0 | 0 |
27608 | 27600 | Икрянинский р-н | 0 | 0 |
27610 | 27600 | Камызякский р-н | 0 | 0 |
27612 | 27600 | Красноярский р-н | 0 | 0 |
27614 | 27600 | Лиманский р-н | 0 | 0 |
27616 | 27600 | Наримановский р-н | 0 | 0 |
27618 | 27600 | Приволжский р-н | 0 | 0 |
27620 | 27600 | Харабалинский р-н | 0 | 0 |
27622 | 27600 | Черноярский р-н | 0 | 0 |
27702 | 27700 | Ковдорский р-н | 0 | 0 |
27704 | 27700 | Кольский р-н | 0 | 0 |
27706 | 27700 | Ловозерский р-н | 0 | 0 |
27708 | 27700 | Печенгский р-н | 0 | 0 |
27711 | 27700 | Терский р-н | 0 | 0 |
27801 | 27800 | Ардатовский р-н | 0 | 0 |
27802 | 27800 | Арзамасский р-н | 0 | 0 |
27803 | 27800 | Балахнинский р-н | 0 | 0 |
27806 | 27800 | Богородский р-н | 0 | 0 |
27810 | 27800 | Борский р-н | 0 | 0 |
27815 | 27800 | Вачский р-н | 0 | 0 |
27819 | 27800 | Володарский р-н | 0 | 0 |
27822 | 27800 | Выксунский р-н | 0 | 0 |
27825 | 27800 | Городецкий р-н | 0 | 0 |
27829 | 27800 | Княгининский р-н | 0 | 0 |
27834 | 27800 | Кстовский р-н | 0 | 0 |
27836 | 27800 | Кулебакский р-н | 0 | 0 |
27838 | 27800 | Лукояновский р-н | 0 | 0 |
27840 | 27800 | Лысковский р-н | 0 | 0 |
27842 | 27800 | Навашинский р-н | 0 | 0 |
27844 | 27800 | Павловский р-н | 0 | 0 |
27847 | 27800 | Первомайский р-н | 0 | 0 |
27849 | 27800 | Перевозский р-н | 0 | 0 |
27851 | 27800 | Пильнинский р-н | 0 | 0 |
27854 | 27800 | Семеновский р-н | 0 | 0 |
27856 | 27800 | Сергачский р-н | 0 | 0 |
27864 | 27800 | Уренский р-н | 0 | 0 |
27866 | 27800 | Чкаловский р-н | 0 | 0 |
28201 | 28200 | Абанский р-н | 0 | 0 |
28203 | 28200 | Ачинский р-н | 0 | 0 |
28205 | 28200 | Балахтинский р-н | 0 | 0 |
28207 | 28200 | Березовский р-н | 0 | 0 |
28209 | 28200 | Бирилюсский р-н | 0 | 0 |
28211 | 28200 | Боготольский р-н | 0 | 0 |
28213 | 28200 | Богучанский р-н | 0 | 0 |
28215 | 28200 | Большемуртинский р-н | 0 | 0 |
28217 | 28200 | Дзержинский р-н | 0 | 0 |
28219 | 28200 | Емельяновский р-н | 0 | 0 |
28221 | 28200 | Енисейский р-н | 0 | 0 |
28223 | 28200 | Идринский р-н | 0 | 0 |
28225 | 28200 | Иланский р-н | 0 | 0 |
28227 | 28200 | Ирбейский р-н | 0 | 0 |
28229 | 28200 | Казачинский р-н | 0 | 0 |
28231 | 28200 | Канский р-н | 0 | 0 |
28233 | 28200 | Каратузский р-н | 0 | 0 |
28235 | 28200 | Кежемский р-н | 0 | 0 |
28237 | 28200 | Козульский р-н | 0 | 0 |
28239 | 28200 | Краснотуранский р-н | 0 | 0 |
28241 | 28200 | Курагинский р-н | 0 | 0 |
28243 | 28200 | Манский р-н | 0 | 0 |
28245 | 28200 | Минусинский р-н | 0 | 0 |
28247 | 28200 | Мотыгинский р-н | 0 | 0 |
28249 | 28200 | Назаровский р-н | 0 | 0 |
28251 | 28200 | Нижнеингашский р-н | 0 | 0 |
28253 | 28200 | Новоселовский р-н | 0 | 0 |
28255 | 28200 | Партизанский р-н | 0 | 0 |
28257 | 28200 | Пировский р-н | 0 | 0 |
28259 | 28200 | Рыбинский р-н | 0 | 0 |
28261 | 28200 | Саянский р-н | 0 | 0 |
28263 | 28200 | Северо-Енисейский р-н | 0 | 0 |
28265 | 28200 | Сухобузимский р-н | 0 | 0 |
28267 | 28200 | Тасеевский р-н | 0 | 0 |
28269 | 28200 | Туруханский р-н | 0 | 0 |
28271 | 28200 | Тюхтетский р-н | 0 | 0 |
28273 | 28200 | Ужурский р-н | 0 | 0 |
28275 | 28200 | Уярский р-н | 0 | 0 |
28277 | 28200 | Шарыповский р-н | 0 | 0 |
28279 | 28200 | Шушенский р-н | 0 | 0 |
40001 | 40000 | Алексинский р-н | 0 | 0 |
40003 | 40000 | Арсеньевский р-н | 0 | 0 |
40005 | 40000 | Белевский р-н | 0 | 0 |
40007 | 40000 | Богородицкий р-н | 0 | 0 |
40009 | 40000 | Веневский р-н | 0 | 0 |
40011 | 40000 | Воловский р-н | 0 | 0 |
40013 | 40000 | Дубенский р-н | 0 | 0 |
40015 | 40000 | Ефремовский р-н | 0 | 0 |
40017 | 40000 | Заокский р-н | 0 | 0 |
40019 | 40000 | Каменский р-н | 0 | 0 |
40021 | 40000 | Кимовский р-н | 0 | 0 |
40023 | 40000 | Киреевский р-н | 0 | 0 |
40025 | 40000 | Куркинский р-н | 0 | 0 |
40027 | 40000 | Ленинский р-н | 0 | 0 |
40029 | 40000 | Новомосковский р-н | 0 | 0 |
40031 | 40000 | Одоевский р-н | 0 | 0 |
40033 | 40000 | Плавский р-н | 0 | 0 |
40035 | 40000 | Суворовский р-н | 0 | 0 |
40037 | 40000 | Тепло-Огаревский р-н | 0 | 0 |
40039 | 40000 | Узловский р-н | 0 | 0 |
40041 | 40000 | Чернский р-н | 0 | 0 |
40044 | 40000 | Щекинский р-н | 0 | 0 |
40046 | 40000 | Ясногорский р-н | 0 | 0 |
40123 | 40122 | Ялта г. | 0 | 0 |
41531 | 4000 | Академический р-н | 0 | 0 |
41532 | 4000 | Алексеевский р-н | 0 | 0 |
41533 | 4000 | Алтуфьевский р-н | 0 | 0 |
41534 | 4000 | Арбат р-н | 0 | 0 |
41535 | 4000 | Аэропорт р-н | 0 | 0 |
41536 | 4000 | Бабушкинский р-н | 0 | 0 |
41537 | 4000 | Басманный р-н | 0 | 0 |
41538 | 4000 | Беговой р-н | 0 | 0 |
41539 | 4000 | Бескудниковский р-н | 0 | 0 |
41540 | 4000 | Бибирево р-н | 0 | 0 |
41541 | 4000 | Бирюлёво Восточное р-н | 0 | 0 |
41542 | 4000 | Бирюлёво Западное р-н | 0 | 0 |
41543 | 4000 | Богородское р-н | 0 | 0 |
41544 | 4000 | Братеево р-н | 0 | 0 |
41545 | 4000 | Бутырский р-н | 0 | 0 |
41546 | 4000 | Вешняки р-н | 0 | 0 |
41547 | 4000 | Внуково р-н | 0 | 0 |
41548 | 4000 | Войковский р-н | 0 | 0 |
41549 | 4000 | Дегунино Восточное р-н | 0 | 0 |
41550 | 4000 | Измайлово Восточное р-н | 0 | 0 |
41552 | 4000 | Выхино-Жулебино р-н | 0 | 0 |
41553 | 4000 | Гагаринский р-н | 0 | 0 |
41554 | 4000 | Головинский р-н | 0 | 0 |
41555 | 4000 | Гольяново р-н | 0 | 0 |
41556 | 4000 | Даниловский р-н | 0 | 0 |
41557 | 4000 | Дмитровский р-н | 0 | 0 |
41558 | 4000 | Донской р-н | 0 | 0 |
41559 | 4000 | Дорогомилово р-н | 0 | 0 |
41560 | 4000 | Замоскворечье р-н | 0 | 0 |
41561 | 4000 | Дегунино Западное р-н | 0 | 0 |
41562 | 4000 | Зюзино р-н | 0 | 0 |
41563 | 4000 | Зябликово р-н | 0 | 0 |
41564 | 4000 | Ивановское р-н | 0 | 0 |
41565 | 4000 | Измайлово р-н | 0 | 0 |
41566 | 4000 | Капотня р-н | 0 | 0 |
41567 | 4000 | Коньково р-н | 0 | 0 |
41568 | 4000 | Коптево р-н | 0 | 0 |
41569 | 4000 | Косино-Ухтомский р-н | 0 | 0 |
41570 | 4000 | Котловка р-н | 0 | 0 |
41571 | 4000 | Красносельский р-н | 0 | 0 |
41572 | 4000 | Крылатское р-н | 0 | 0 |
41573 | 4000 | Крюково р-н | 0 | 0 |
41574 | 4000 | Кузьминки р-н | 0 | 0 |
41575 | 4000 | Кунцево р-н | 0 | 0 |
41576 | 4000 | Куркино р-н | 0 | 0 |
41577 | 4000 | Левобережный р-н | 0 | 0 |
41578 | 4000 | Лефортово р-н | 0 | 0 |
41579 | 4000 | Лианозово р-н | 0 | 0 |
41580 | 4000 | Ломоносовский р-н | 0 | 0 |
41581 | 4000 | Лосиноостровский р-н | 0 | 0 |
41582 | 4000 | Люблино р-н | 0 | 0 |
41583 | 4000 | Марфино р-н | 0 | 0 |
41584 | 4000 | Марьина Роща р-н | 0 | 0 |
41585 | 4000 | Марьино р-н | 0 | 0 |
41586 | 4000 | Матушкино р-н | 0 | 0 |
41587 | 4000 | Метрогородок р-н | 0 | 0 |
41588 | 4000 | Мещанский р-н | 0 | 0 |
41589 | 4000 | Митино р-н | 0 | 0 |
41590 | 4000 | Можайский р-н | 0 | 0 |
41591 | 4000 | Молжаниновский р-н | 0 | 0 |
41592 | 4000 | Москворечье-Сабурово р-н | 0 | 0 |
41593 | 4000 | Нагатино-Садовники р-н | 0 | 0 |
41594 | 4000 | Нагатинский Затон р-н | 0 | 0 |
41595 | 4000 | Нагорный р-н | 0 | 0 |
41597 | 4000 | Нижегородский р-н | 0 | 0 |
41598 | 4000 | Новогиреево р-н | 0 | 0 |
41600 | 4000 | Ново-Переделкино р-н | 0 | 0 |
41601 | 4000 | Обручевский р-н | 0 | 0 |
41602 | 4000 | Орехово-Борисово Северное р-н | 0 | 0 |
41603 | 4000 | Орехово-Борисово Южное р-н | 0 | 0 |
41604 | 4000 | Останкинский р-н | 0 | 0 |
41605 | 4000 | Отрадное р-н | 0 | 0 |
41606 | 4000 | Очаково-Матвеевское р-н | 0 | 0 |
41607 | 4000 | Перово р-н | 0 | 0 |
41608 | 4000 | Печатники р-н | 0 | 0 |
41609 | 4000 | Покровское-Стрешнево р-н | 0 | 0 |
41610 | 4000 | Преображенское р-н | 0 | 0 |
41611 | 4000 | Пресненский р-н | 0 | 0 |
41612 | 4000 | Проспект Вернадского р-н | 0 | 0 |
41613 | 4000 | Раменки р-н | 0 | 0 |
41614 | 4000 | Ростокино р-н | 0 | 0 |
41615 | 4000 | Рязанский р-н | 0 | 0 |
41616 | 4000 | Савёлки р-н | 0 | 0 |
41617 | 4000 | Савёловский р-н | 0 | 0 |
41618 | 4000 | Свиблово р-н | 0 | 0 |
41619 | 4000 | Бутово Северное р-н | 0 | 0 |
41620 | 4000 | Измайлово Северное р-н | 0 | 0 |
41621 | 4000 | Медведково Северное р-н | 0 | 0 |
41622 | 4000 | Тушино Северное р-н | 0 | 0 |
41623 | 4000 | Северный р-н | 0 | 0 |
41624 | 4000 | Силино р-н | 0 | 0 |
41625 | 4000 | Сокол р-н | 0 | 0 |
41626 | 4000 | Соколиная Гора р-н | 0 | 0 |
41627 | 4000 | Сокольники р-н | 0 | 0 |
41628 | 4000 | Солнцево р-н | 0 | 0 |
41629 | 4000 | Старое Крюково р-н | 0 | 0 |
41630 | 4000 | Строгино р-н | 0 | 0 |
41631 | 4000 | Таганский р-н | 0 | 0 |
41632 | 4000 | Тверской р-н | 0 | 0 |
41633 | 4000 | Текстильщики р-н | 0 | 0 |
41634 | 4000 | Тёплый Стан р-н | 0 | 0 |
41635 | 4000 | Тимирязевский р-н | 0 | 0 |
41636 | 4000 | Тропарёво-Никулино р-н | 0 | 0 |
41637 | 4000 | Филёвский Парк р-н | 0 | 0 |
41638 | 4000 | Фили-Давыдково р-н | 0 | 0 |
41639 | 4000 | Хамовники р-н | 0 | 0 |
41640 | 4000 | Ховрино р-н | 0 | 0 |
41641 | 4000 | Хорошёво-Мнёвники р-н | 0 | 0 |
41642 | 4000 | Хорошёвский р-н | 0 | 0 |
41643 | 4000 | Царицыно р-н | 0 | 0 |
41644 | 4000 | Черёмушки р-н | 0 | 0 |
41645 | 4000 | Чертаново Северное р-н | 0 | 0 |
41646 | 4000 | Чертаново Центральное р-н | 0 | 0 |
41647 | 4000 | Чертаново Южное р-н | 0 | 0 |
41648 | 4000 | Щукино р-н | 0 | 0 |
41649 | 4000 | Бутово Южное р-н | 0 | 0 |
41650 | 4000 | Медведково Южное р-н | 0 | 0 |
41651 | 4000 | Тушино Южное р-н | 0 | 0 |
41652 | 4000 | Южнопортовый р-н | 0 | 0 |
41653 | 4000 | Якиманка р-н | 0 | 0 |
41654 | 4000 | Ярославский р-н | 0 | 0 |
41655 | 4000 | Ясенево р-н | 0 | 0 |
41924 | 41923 | Дзержинский р-н | 0 | 0 |
41967 | 41961 | Кировский р-н | 0 | 0 |
42025 | 4000 | Метрогородок р-н | 0 | 0 |
42204 | 42202 | Коминтерновский р-н | 0 | 0 |
field | field type | note |
---|---|---|
id | smallint(6) unsigned | Числовой идентификатор |
name | varchar(255) | Название станции |
line | varchar(10) | Линия метро |
sortIndex | tinyint(4) unsigned | Индекс сортировки |
deleted | tinyint(1) | Признак удаления |
id | name | line | sortIndex | deleted |
---|---|---|---|---|
1 | Автово | 1 | 0 | 0 |
2 | Адмиралтейская | 5 | 0 | 0 |
3 | Академическая | 1 | 0 | 0 |
4 | Балтийская | 1 | 0 | 0 |
5 | Бухарестская | 5 | 0 | 0 |
6 | Василеостровская | 3 | 0 | 0 |
7 | Владимирская | 1 | 0 | 0 |
8 | Волковская | 5 | 0 | 0 |
9 | Выборгская | 1 | 0 | 0 |
10 | Горьковская | 2 | 0 | 0 |
11 | Гостиный двор | 3 | 0 | 0 |
12 | Гражданский проспект | 1 | 0 | 0 |
13 | Девяткино | 1 | 0 | 0 |
14 | Достоевская | 4 | 0 | 0 |
15 | Елизаровская | 3 | 0 | 0 |
16 | Звездная | 2 | 0 | 0 |
17 | Звенигородская | 5 | 0 | 0 |
18 | Канал Грибоедова | 2 | 0 | 0 |
19 | Кировский завод | 1 | 0 | 0 |
20 | Комендантский проспект | 5 | 0 | 0 |
21 | Крестовский остров | 5 | 0 | 0 |
22 | Купчино | 2 | 0 | 0 |
23 | Ладожская | 4 | 0 | 0 |
24 | Ленинский проспект | 1 | 0 | 0 |
25 | Лесная | 1 | 0 | 0 |
26 | Лиговский проспект | 4 | 0 | 0 |
27 | Ломоносовская | 3 | 0 | 0 |
28 | Маяковская | 3 | 0 | 0 |
29 | Международная | 5 | 0 | 0 |
30 | Московская | 2 | 0 | 0 |
31 | Московские ворота | 2 | 0 | 0 |
32 | Нарвская | 1 | 0 | 0 |
33 | Невский проспект | 2 | 0 | 0 |
34 | Новочеркасская | 4 | 0 | 0 |
35 | Обводный канал | 5 | 0 | 0 |
36 | Обухово | 3 | 0 | 0 |
37 | Озерки | 2 | 0 | 0 |
38 | Парк победы | 2 | 0 | 0 |
39 | Парнас | 2 | 0 | 0 |
40 | Петроградская | 2 | 0 | 0 |
41 | Пионерская | 2 | 0 | 0 |
42 | Площадь Александра Невского | 3 | 4 | 0 |
43 | Площадь Восстания | 1 | 0 | 0 |
44 | Площадь Ленина | 1 | 0 | 0 |
45 | Площадь Мужества | 1 | 0 | 0 |
46 | Политехническая | 1 | 0 | 0 |
47 | Приморская | 3 | 0 | 0 |
48 | Пролетарская | 3 | 0 | 0 |
49 | Проспект Большевиков | 4 | 0 | 0 |
50 | Проспект Ветеранов | 1 | 0 | 0 |
51 | Проспект Просвещения | 2 | 0 | 0 |
52 | Пушкинская | 1 | 0 | 0 |
53 | Рыбацкое | 3 | 0 | 0 |
54 | Садовая | 5 | 0 | 0 |
55 | Сенная площадь | 2 | 0 | 0 |
56 | Спасская | 4 | 0 | 0 |
57 | Спортивная | 5 | 0 | 0 |
58 | Старая деревня | 5 | 0 | 0 |
59 | Технологический институт | 1 | 2 | 0 |
60 | Удельная | 2 | 0 | 0 |
61 | Улица Дыбенко | 4 | 0 | 0 |
62 | Фрунзенская | 2 | 0 | 0 |
63 | Черная Речка | 2 | 0 | 0 |
64 | Чернышевская | 1 | 0 | 0 |
65 | Чкаловская | 5 | 0 | 0 |
66 | Электросила | 2 | 0 | 0 |
field | field type | note |
---|---|---|
id | binary(16) | Идентификатор в виде GUID-а |
nb_sourceId | tinyint(4) unsigned | Идентификатор источника данных reftbl:nb_source |
nb_complexId | binary(16) | Идентификатор комплекса в виде GUID-а |
statusId | tinyint(4) unsigned | Статус комплекса reftbl:status |
status_buildId | tinyint(4) unsigned | Статус в котором находится корпус reftbl:status_build |
house | varchar(15) | Дом |
block | varchar(15) | Корпус дома |
litera | varchar(50) | Литера |
floors | varchar(20) | Этажность |
quarter_end | tinyint(4) unsigned | Квартал окончания постройки |
year_end | smallint(6) unsigned | Год окончания постройки |
house_typeId | tinyint(4) unsigned | Тип дома reftbl:? - Нет таблицы с типами домов |
bknId | binary(16) | Привязка к БКН-овскому корпусу |
Типы домов (house_typeId
) могут быть:
- Блочный
- Индивидуальный
- Кирпично-монолитный
- Кирпичный
- Монолитный
- Панельно-монолитный
- Панельный
Здесь мы соберем все данные которые у нас есть по всем жилым комплексам. Все активные комплексы можно получить вот таким запросом:
select toguid(id), nb_sourceId, toguid(nb_complexId), statusId, status_buildId, house, block, litera, floors, quarter_end, year_end, house_typeId, bknId from nb_block limit 200000;
Tables_in_bkn_base |
---|
advertising |
decoration |
developer_banks |
developer_customs |
nb_appartment |
nb_contacts |
nb_photos |
obj_type_p |
status_build |
test_log |
wc |
Субсидии, ипотека и рассрочка должные отноститься не к очереди а к корпусу.
одна и та же планировка может быть в двух очередях и даже в двух комплексах.
Мы делаем сайт-аггрегатор всех квартир-новостроек в С-Пб.
Есть застройщики, они строят и продают квартиры. Но для того чтобы реализовать объем квартир они не только используют свой отдел продаж, но и привлекают агенства реализации квартир за комиссию (агентское вознаграждение)
Многие застройщики работают с 3-5 крупных агенств, которые в свою очередь привлекают других субагентов за комиссию.
Цель сайта для нашей компании - инициировать обращение посетителя в компанию.
Цель пользователя - найти квартиру под его возможности и потребности. На сайте пользователю предоставляется не вся информация по квартире, чтобы он имел стимул обратиться в нашу компанию, где его обработает менеджер по продажам.
Посетитель на сайте выполняет поиск квартиры (основной пользовательский сценарий). Посетитель может выполнить расчет ипотеки, продать свою квартиру, заказать просмотр квартир итп (дополнительные сценарии).
Цель сайта для менеджера - найти квартиру под любые параметры клиента и обеспечить ответ на любые вопросы клиента по застройщику и квартире.
Причины обращений частных клиентов:
- большой выбор и возможность получить ответы на все вопросы
- ипотечный центр (берет на себя сложности с ипотекой)
- показ квартир, который осуществляет компания:
- индивидуальный показ (на автомобиле)
- автобусные туры (срез по району) в выходные
- реализация квартир клиентов (чтобы купить квартиру, клиенту иногда надо продать квартиру)
- Люди не покупают квартиры с сайта. Им психологически сложно расстаться с такой большой суммой денег, поэтому они ищут иллюзии понимания этого рынка, которую предоставляет им менеджер компании.
- Вторичку вообще продают через знакомых агентов. Поэтому практически единственное бизнес-value агенств вторички - широта связей их менеджеров. Все продается только через знакомых.
Взаимодействие с застройщиками:
- Застройщики регулярно отправляют информацию о объектах (или мы ее самостоятельно забираем). У поставщиков информация представлена в очень разных форматах. Мы конкурируем с отделом продаж застройщиков, поэтому они не заинтересованы предоставлять нам данные в нашем формате.
- Небольшая часть застройщиков предоставляет данные через т.н. “агентский портал”, куда менеджер компании может попасть по логину и паролю.
- У ряда застройщиков есть достаточно актуальное наличие планировок на сайте.
- Мы сопровождаем договора клиентов с застройщиком.
Взаимодействие с агентствами:
- Мы выступаем для суб-агентов в роли застройщика, отправляя им данные о квартирах.
- Отдел диллерских продаж принимает обращения от агенств, бронируют квартиры.
Стратегия: Сумма проданных компанией квартир = кол-во обращений клиентов компании * конверсия отдела продаж * кол-во менеджеров.
Новый сайт необходим чтобы увеличить конверсию клик-обращение, и конверсию отдела продаж.
Компания также хочет чтобы сайт был для пользователя более ценным чем сайты застройщиков, для этого планируются дополнительные сервисы - ипотечный калькулятор, расчет инвестиционной привлекательности, итп.
Компания считает что сможет также сократить время обучения используя новый сайт.
Какая-то часть обработки информации будет производиться контент-менеджерами вручную. Необходимо заложить возможности для них. Например: У застройщика есть базовая цена квартиры и регламент - как рассчитывать стоимость квартир, иногда очень сложный. Менеджер по развитию проектов должен иметь возможность создавать набор правил применяющихся в определенном порядке.
Менеджер по продаже должен иметь возможность на странице квартиры накидать скидок (иногородний покупатель, итп), влиящих на цену квартиры. Это очень важное бизнес-требование.
С точки зрения бизнес-процесса, продуктом компании яаляется специалист по недвижимости. Его время покупает клиент. Поэтому компания заинтересована:
- Занять нишу ресурса, который позволяет выбрать квартиру в новостройке С-Пб.
- Сэкономить на обучении специалистов.
Основные проблемы на этом пути:
- Товарная линейка ограничена
- Актуальность данных
- Юзабилити
Пользователи объединены в роли по реализуемым на сайте сценариям. Некоторые сценарии
являются общими для нескольких ролей, так например и посетитель
и менеджер
выполняют
на сайте сценарии поиска квартир.
Если кто-то логинится под логином и паролем под которым в данный момент сидит другой пользователь - реализуем перехват сессии - старый пользователь автоматически теряет сессию.
Логин и пароль нужен и посетителю. Но он не будет регистрироваться, а скорее отправит на почту себе письмо со ссылкой на варианты которые он выбрал в избранном и сравнении.
Роли и их типичные сценарии:
- Посетитель
- Поиск квартиры
- Сравнение
- Добавление в избранное
- Печать
- …
- Менеджер компании
- Поиск квартиры
- Сравнение
- Добавление в избранное - избранное нужно как-то шарить клиенту.
- Печать
- …
- Контент-менеджер
- Забивает информацию в базу
- Менеджеры по развитию (продукт-менеджеры)
- Создают правила расчета цен
- Проверяют (пока раз в месяц) качество работы контент-менеджеров.
- Менеджер субагента выпоняет примерно те же задачи что менеджер по продажам компании, но, возможно, использует меньше данных, чем сотрудник компании
- Администратор сайта
- Управляет пользователями
- Робот
- Загрузка данных со сторонних сайтов
- Выгрузка данных на рекламные ресурсы
field | field type | default | meta | note |
---|---|---|---|---|
id | serial | (primary) | Идентификатор | |
guid | varchar | Идентификатор в виде GUID-а | ||
name | varchar | Название компании | ||
address | varchar | Адрес компании | ||
url | varchar | Адрес сайта | ||
phone | varchar | Телефон | ||
note | text | Описание застройщика |
Эта сущность нужна только чтобы объединять очереди жилого комплекса
field name | field type | note |
---|---|---|
id | serial | идентификатор |
name | varchar | название |
addr | (or db-null varchar) | адрес |
district-id | (or db-null integer) | идентификатор района |
metro-id | (or db-null integer) | идентификатор метро |
С жилыми комплексами может быть связан один интересный казус - некоторые жилые комплексы занимают целый квартал и состоят из нескольких корпусов. В этом случае каждый из этих корпусов может находиться на своей улице. Поэтому адрес следует привязывать к корпусу, а не к комплексу.
С другой стороны, всегда будет существовать вопрос “на какой улице находится такой-то комплекс?”. Поэтому мы оставляем поле street_name в таблице жилых комплексов.
field | field type | default | meta | note |
---|---|---|---|---|
id | serial | (primary) | Идентификатор | |
guid | varchar | Идентификатор в виде GUID-а | ||
nb_sourceId | integer | Идентификатор источника данных reftbl:nb_source | ||
statusId | integer | Статус объекта reftbl:status | ||
developerId | varchar | Идентификатор застройщика reftbl:developer | ||
date_insert | (or db-null timestamp) | Дата вставки | ||
regionId | integer | Идентификтор региона reftbl:status | ||
districtId | integer | Идентификтор района reftbk:district | ||
district_name | varchar | Район (и город, или область) строкой | ||
city_name | varchar | Город или населенный пункт строкой | ||
street_name | varchar | Улица | ||
subway1Id | (or db-null integer) | Идентификатор ближайшено метро №1 reftbl:subway | ||
subway2Id | (or db-null integer) | Идентификатор ближайшено метро №2 reftbl:subway | ||
subway3Id | (or db-null integer) | Идентификатор ближайшено метро №3 reftbl:subway | ||
name | varchar | Наименование комплекса | ||
note | text | Описание комплекса | ||
longitude | varchar | Долгота | ||
latitude | varchar | Широта | ||
dateUpdate | (or db-null timestamp) | Дата обновления | ||
isPrivate | integer | Признак приватности - если равен 1, то нельзя показывать ЖК на сайте | ||
bknId | varchar | Привязка к БКН-овскому комплексу откуда мы забираем описания |
field name | field type | note |
---|---|---|
id | serial | идентификатор |
cmpx-id | integer | идентификатор жилого комплекса |
name | (or db-null varchar) | название |
distance | (or db-null varchar) | расстояние до метро |
deadline-id | (or db-null integer) | срок сдачи |
subsidy | (or db-null boolean) | субсидия |
finishing | (or db-null varchar) | отделка |
ipoteka | (or db-null boolean) | ипотека |
installment | (or db-null boolean) | рассрочка |
field name | field type | note |
---|---|---|
id | serial | идентификатор |
plex-id | integer | идентификатор очереди жилого комплекса |
name | (or db-null varchar) | название (номер корпуса) |
field | field type | default | meta | note |
---|---|---|---|---|
id | serial | (primary) | Идентификатор | |
guid | varchar | Идентификатор в виде GUID-а | ||
nb_sourceId | integer | Идентификатор источника данных reftbl:nb_source | ||
nb_cmpxId | varchar | Идентификатор жилого комплекса, которому принадлежит этот корпус | ||
statusId | integer | Статус корпуса reftbl:status | ||
street | (or db-null varchar) | Улица | ||
house | (or db-null varchar) | Дом | ||
corpus | (or db-null varchar) | Корпус (в смысле адреса) | ||
litera | (or db-null varchar) | Литера | ||
floors | (or db-null varchar) | Этажность | ||
quarter_end | (or db-null integer) | Квартал завершения строительства | ||
year_end | (or db-null integer) | Год завершения строительства | ||
house_typeId | (or db-null integer) | Тип дома reftbl:? | ||
bknId | (or db-null varchar) | Привязка к БКН-овскому корпусу | ||
dateUpdate | (or db-null timestamp) | Дата обновления |
field name | field type | note |
---|---|---|
id | serial | идентификатор |
crps-id | (or db-null integer) | идентификатор корпуса очереди жилого комплекса |
rooms | (or db-null integer) | кол-во комнат |
area-sum | (or db-null varchar) | общая площадь квартиры (может быть дробное) |
area-living | (or db-null varchar) | жилая площадь квартиры (именно varchar) |
area-kitchen | (or db-null varchar) | площадь кухни (может быть дробное) |
price | (or db-null integer) | цена |
balcon | (or db-null varchar) | балкон/лоджия |
sanuzel | (or db-null boolean) | Санузел раздельный/совмещенный |
Город в котором находится объект
field name | field type | note |
---|---|---|
id | serial | идентификатор |
name | varchar | название города |
Район города, в котором находится объект
field name | field type | note |
---|---|---|
id | serial | идентификатор |
name | varchar | название района |
Метро неподалеку от объекта
field name | field type | note |
---|---|---|
id | serial | идентификатор |
name | varchar | название станции |
Сроки сдачи объектов
field name | field type | note |
---|---|---|
id | serial | идентификатор |
name | varchar | название станции |
В папке ./data
лежат ЖК, в каждом из них есть подпапки, в которых лежат очереди. Очереди
в себе содержат подпапки, содержащие изображения:
- Планировки
- Рендеры
- Ход строительства
и файлы:
- паспорт.txt - паспорт объекта
- описание.txt - описание объекта
- местоположение
- комфорт
- квартиры, в формате CSV
корпус тип метраж жилая площадь площадь кухни балкон/лоджия санузел цена
Напишем проход по всем этим директориям, но перед этим необходимо определить ряд вспомогательных макросов и функций.
Начнем с макроса поиска файла в наборе. В случае, если файл найден, мы выполняем body
Нам также понадобится цикл внутри директории, который умеет предоставлять нам поддиректории и файловое содержимое этих предоставленных поддиректорий.
Еще маленький вспомогательный макрос для извлечения значения по ключу из ассоциативного списка:
Для работы с данными, извлекаемыми из файлов в формате ключ:значение напишем функцию-парсер:
Для работы с xls-файлами напишем парсер и декодер:
Теперь переходим к загрузке данных:
Соберем веб-интерфейс:
На самом деле это не карточка Жилищного Комплекса, а скорее карточка одной из его очередей, т.к. большинство параметров различаются между очередями. С другой стороны все очереди одного комплекса между собой связаны, так что нужна какая-то обьединяющая сущность.
Если пользователь попал на эту страницу НЕ через поиск - ему надо показать кнопку “К поиску (378)”, которая содержит кол-во вариантов при самых широких параметров поиска.
Есть пользователь попал на эту страницу из выборки - эта кнопка должна вести на его выборку и содержать кол-во вариантов его выборки.
Тут может быть мемоизация и предвычисления, которые мы на первом этапе можем не делать.
Если пользователь зашел на этот обьект - этот объект нужно добавить в его “просмотренные”.
Отсюда пользователь может перейти к сценарию “сравнение”, “добавить в избранное”, “распечатать объект”.
Когда все квартиры в очереди закончились необходимо не удалять очередь с сайта, а убирать их в архив, чтобы она не показывалась в поиске, но были доступна администратору.
Видим:
- Название ЖК
- Метро
- Расстояние до метро
- Район
- Улица (или пересчение улиц)
- Картинки (неограниченно, можно листать)
- Минимальные цены в этом ЖК в формате “тип квартиры - цена - метры”. При выборе этой ссылки мы сдвигаемся по странице до раздела “планировки и цены” где разворачивается аккордеон с выбранным им вариантом”.
- Возможность выбора очереди (с инфой о сроке сдачи) Когда пользователь выбирает другую очередь - он переходит на другую карточку (здесь очевидно нужна таблица связи)
- Возможность выбора корпуса От корпуса зависят цены, карта корпусов, цены в разделе “планировки и цены”, “преимущества”
- Кнопка “все корпуса и цены”, открывает pop-up “Очереди и корпуса”
- Преимущества
- Карта расположения корпусов комплекса
- Карта объекта с ценой
- Раздел планировки и цены
- Форма поиска по квартирам (внутри квартир этой карточки)
- Сортировка по цене (убыванию и возрастанию)
- Выбор корпуса
- Выбор кол-ва комнат
- Стоимость квартиры (от .. до .. тыс.руб)
- Первоначальный взнос, от … до …
- Метраж
- Кнопка поиска
- Выдача, в аккордеоне, сгруппированные по кол-ву комнат, колонки
- Номер корпуса
- Кол-во комнат
- Общая площадь
- Жилая площадь
- Площадь кухни
- Балкон/лоджия
- Санузел
- Отделка
- Первый взнос от ..
- Цена с доп. скидками
- Инвест. привлекательность
- Добавить в сравнение?
- Избранное?
- Подробнее
При клике на ячейку в таблице или на кнопку “подробнее” мы попадаем в карточку квартиры.
- Форма поиска по квартирам (внутри квартир этой карточки)
- Картинки (еще раз)
- Описание
- Паспорт обьекта
- Список параметров-значений, и параметры и значения могут добавлять контент-менеджеры.
- Ход строительства диаграмма месяцев по годам, к каждому месяцу несколько фотографий
- Кнопка “записаться на тур бесплатно”
- Похожие предложения Как выбирать и группировать - непонятно. Нужно сделать алгоритм и вручную.
- Регламент (условия продажи: 100% оплата, рассрочка, ипотека). В дизайне его нет. Надо ли его показывать клиентам.
- Дата обновления. Показывать ли это клиентам?
Дизайн-макет: Карточка квартиры
Дизайн-макет: Карточка квартиры - версия для печати
Есть вариант открывать карточку квартиры в pop-up окне. Но на каждую квартиру должна быть прямая ссылка - очевидно надо менять адресную строку. Также должна быть версия для печати, чтобы распечатать интересующий вариант.
Менеджер по продаже должен иметь возможность на странице квартиры накидать скидок (иногородний покупатель, итп), влиящих на цену квартиры. Это очень важное бизнес-требование.
Видим:
- Пдф
- Печать
- Почта
- Соцсети (шаринг)
- Тип квартиры (студия, 1комнатная)
- id
- Цена при 100% оплате
- Кнопка “подробности у менедждера” - ссылка на контакты
Справа карточка комплекса идентичная поисковой выдачи - она оттуда и берется.
- Планировка квартиры - рисунок
- План этажа
- Карта на который мы отмечаем где в корпусе расположена квартира - чтобы сориентироваться по виду.
- Карта с минимальной ценой
- Характеристики квартиры
- Кол-во комнат
- жилая площадь
- общая площадь
- Пллощадь кухни
- Санузел
- Отделка
- Балкон
Нужно иметь возможность добавлять сюда параметры
- Сравнение
- Избранное
- Четыре ключевых преимущетва из ЖК
- калькулятор ипотеки и рассрочки - отдельный кейс
- Возможность баннеров (автобусные туры)
- Инфо о жилом комплексе (потому что попадает в распечатку)
- Сссылка “подробно о комплексе” - к ЖК
- Квартиры в этом комплексе - ведут в карточку комплекса с открытыми двухкомнатными квартирами.
- Сообщить об ошибке.
- Когда было последнее обновление информации о квартире. Обновлено и дату. Чтобы менеджер видел актуальность. Показывать ли клиентам?
Соберем шаблоны страницы планировки
Соберем определения страниц
Есть вариант открывать карточку квартиры в pop-up окне. Но на каждую квартиру должна быть прямая ссылка - очевидно надо менять адресную строку.
Также должна быть версия для печати, чтобы распечатать интересующий вариант.
Менеджер по продаже должен иметь возможность на странице квартиры накидать скидок (иногородний покупатель, итп), влиящих на цену квартиры. Это очень важное бизнес-требование.
Тип квартиры показывается исходя из кол-ва комнат:
Идентификатор квартиры показывается для быстрого доступа
ссылка на контакты
<a href="/contactsПодробности у менеджера</a>
<br />
Справа карточка комплекса идентичная поисковой выдачи - она оттуда и берется.
- Планировка квартиры - рисунок
- План этажа
- Карта на который мы отмечаем где в корпусе расположена квартира - чтобы сориентироваться по виду.
- Карта с минимальной ценой
Нужно иметь возможность добавлять сюда параметры, но в первом прототипе мы это пока не делаем
Обновлено и дату. Чтобы менеджер видел актуальность. Показывать ли клиентам?
Клиент может искать квартиру используя простой поиск
или расширенный поиск
. В сложном
поиске больше параметров. В обоих случаях он получает одну и ту же выдачу, которая может быть
представлена в двух разных форматах: поисковая выдача с картой
или поисковая выдача
таблицей
.
Экcпертов также часто интересует id квартиры - при вводе в строку поиска числового значения, находится должен искомый объект.
Дизайн-макет: Простой поиск на главной странице
При поиске клиенту интересны следующие параметры:
- Район
- Метро
- Название жилищного комплекса
- Количество комнат
- Срок сдачи (не позднее)
- Стоимость квартиры
Требуется выводить подсказки в поисковой строке Пример подсказок в дизайн-макете
Пользователь, выполнивший простой поиск попадает в выдачу.
Дизайн-макет: Расширенный поиск на главной странице
Все тоже самое что и в простом поиске
, но:
- Вместо “Срока сдачи” можно задать интервал (от … до …) тоже списком выбора
- Добавляется блок “ипотека”, в котором есть “первоначальный взнос” и “ежемесячный платеж”. Клиент должен ввести число либо в одно поле либо в другое.
- Рассрочка - либо “первоначальный взнос” либо “ежемесячный платеж”. Если клиент готов рассматривать или ипотеку или рассрочку - то в выдаче мы выдаем и те и другие варианты
- Метраж (от … до …)
- Субсидия (галочка) - квартиру можно приобрести с помощью жилищного сертификата, который покрывает часть стоимости квартиры. Это можно объяснять всплывающей подсказкой
- Отделка (галочка) - если клиент ставит галочку, то мы выдаем только те квартиры в которых есть обои, раковины и можно сразу жить.
- Инвестиционная привлекательность удорожание в процентах или предоставить форму с двумя полями:
- Сумма которую хочет инвестировать клиент
- Срок на который хочет инвестировать клиент (поквартально)
Также нужен поиск по расстоянию до метро, но мы будем стараться чтобы этот параметр был доступен только для менеджера компании
Дизайн-макет: Поисковая выдача с картой
Выдача отдается в две колонки - слева список, включающий:
- Фото комплекса
- Название
- Район
- Метро
- Расстояние до метро
- Срок сдачи
- Тип отделки
- Ипотека (если есть)
- Рассрочка (если есть)
- Цена квартир которых он искал (от…). Если он в поиске выбрал и однушку и двушку и трешку показывается самое дешевое с метражом
- Цена всех вариантов (однушку и двушку и трешку), по клику на плюсике (с метражом)
- В избранное
- В сравнение
В правой колонке выводятся маркеры на карте, содержащие цену и синхронизированные со списком выдачи (рамки при наведении итп)
При этом при скроллировании карта остается на месте, а выдача прокручивается.
Сортировать можно:
- по цене туда и обратно
- по сроку сдачи
- по району
- по станции метро
- возможно, по расстоянию до метро
Надо указывать число найденных комплексов.
Возможность переключения между выдачей на карте и выдачей списком
Нажимая на элемент выдачи он попадает в карточку ЖК
После выдачи идет блок похожих предложений, но возможно откажемся от этого блока здесь.
Дизайн-макет: Поисковая выдача таблицей
Выдается таблица с колонками:
- Район
- Название ЖК
- Станция метро
- До метро
- Срок сдачи
- Отделка
- Ипотека/Рассрочка
- Кол-во комнат
- Общая площадь
- Цена с доп. скидками
- Цена всех вариантов (однушку и двушку и трешку), по клику на плюсике (с метражом)
- В избранное
- В сравнение
Сортировать необходимо по столбцам.
Нажимая на элемент выдачи он попадает в карточку ЖК
После выдачи идет блок похожих предложений, но возможно откажемся от этого блока здесь.
Обращение стоит денег, его надо оформлять в объект базы CRM - чтобы не терялись. В первую очередь необходимо зафиксировать телефон, с которого звонит клиент
Макета нет, но можно ориентировать на Trend_search_map.
Title: Все ЖК.
ostrovok.ru
Закрыть карту.
Нам надо развернуть карту на целый экран или свернуть чтобы показть выборку.
Надо подумать делать просто большую карту или вместе с выборкой и фильтрами
По умолчанию открыватся большая, после клика на маркер нужно что-то показать об выбранном комплексе. Можно попапом, или в карту уменьшить и сбоку.
Все комплексы.
Карта не должна скроллиться
В первом релизе не будет.
Вторичное жилье не так критично, т.к. занимает 1% от реализаций, ему можно оставить только простой поиск.
Для вторички нет срока сдачи, но есть тип дома (список выбора)
Экпертов также часто интересует id обьекта - при вводе в строку поиска числа находится должен искомый объект. id должен печататься и на карточке квартиры, для того чтобы, можно было по телефону объяснить о каком объекте идет речь.
Задачи:
- Показать клиенту что он может взять квартиру в ипотеку
- Дать клиенту возможность оценить свои возможности, поиграв с калькулятором.
Мы должны иметь возможность присваивать программы корпусу очереди
. У одного корпуса может быть
множество разных программ от множества разных банков. На карточке квартиры нужно показать
расчет с эвристически лучшей программой - например, с самой низкой процентной ставкой и самым
длинным сроком кредита - но есть вариант рекомендовать это вручную. Мы не показываем ему инфу
по программе банка (даже наименование банка не светим), чтобы он консультировался с нашим
специалистом. Но менеджеры получают подробную инфу.
Параметры:
- Стоимость квартиры (мин 10% от стоимости квартиры) - не давать клиенту забить меньше
- Первоначальный взнаос (мин 10%) - не давать клиенту забить меньше
- Срок кредита (макс 25 лет)
- Процентная ставка % в год - по идее если клиенту показывается оптимальный банк то он не должен мочь ее менять.
- Менеджеру видно банки, % и ежемесячный платеж.
Результат
- Ежемесячный платеж
Ипотечный калькулятор используется клиентом чтобы расчитать ипотеку неважно для какой квартиры. После рассчета можно отдать клиенту выборку подходящих квартир.
Есть банки, у них есть “программы”. Мы дожны создавать базу по банкам и их программам. У программы банка есть:
- Наименование
- Максимальный срок кредита
- Процентная ставка
- Минимальный первый взнос в процентах.
Сценарии проговаривать с ипотечниками - уточнять по ходу дела.
Варианты расчета:
- Отталкиваемся от дохода
- Ставим максммальный срок
- Подбираем сумму кредита (доход 50.000, может ли взять 2.000.000)
- Определяем ежемесячный платеж - смотрим сможет ли платить.
- Манипулируем суммами чтобы учесть все интересы.
- Отталкиваемся от максимального размера ежемесячный платежей
- Отталкиваемся от максимального срока погашения (из-за возраста)
- Отталкиваемся от единственного банка или от суммы кредита
Чем сложнее чем ипотечный калькулятор?
Если мы говорм про рассрочку, то параметры там те же самые что и в ипотеке:
- мин перв взнос
- срок
- процент
но если вносишь 10% и платишь за 2 года, то тебе такая процентная ставка Там очень много программ и все они зависят сложным образом от входных параметров, которых неопределенное число, и иногда даже зависит от типа квартир или, например, от этажности, акции и фазы луны.
Застройщик делает программы рассрочки со сложными условиями..
Как формализовать условия? У нас есть менеддеры по внутреннему развитию проектов. Они умеют делать экселевские калькуляторы для себя. Также многие застройщики деляют экселевские файлы для рассчетов своих рассрочек.
Просто форма заявки, пусть клиент запоняет.
Первый вариант - назначает менеджер вручную, в первом релизе можно ограничиться им. Второй вариант - назначить алгоритмом:
- Берем за базу цену, отсекаем все что выходит за коридор цены.
- Срок сдачи (коридор срока)
- Район (тут все сложно - рядом по территориальности, например)
Вариант:
Ссылка на контакты пока или форму заявки.
Контакты
В первом релизе можно обойтись без нее. Рассылка долждна быть в нескольких вариантах.
- Возможность подписаться на новости по конкретному объекту
- Возможность подписать на инвестиционные предложения, которые мы сами генерируем
- Подписка на старте продаж.
Trend_comparisioon
В сравнение можно добавлять и жилые комплексы и квартиры. Если человек добавляет квартиру, то ЖК добавляется автоматически.
О ЖК:
При нажатии менеджером “отправить на почту” нужно генерировать ссылку с этими объектами, добавленными в сравнение. Это нужно чтобы отдать клиенту “на подумать”.
Карта с объектами с автоматическим расчетом центра и масштаба
Скроллер влево-вправо Сердечко - добавить в избранное Удалить их сравнения Блок “о комплексе”
- Рендер (кликабельно в объект)
- Название ЖК и очередь
- Район
- Метро и расстояние до него
- Срок сдачи
- Цена минимальных квартир
- Тип отделки
- Ипотека с указанием макс срока
- Рассрочка с указанием макс срока
- Стандартный блок “тип квартиры- цена от - метраж по всем типам квартир”
Блок сравнения по паспорту объекта … поднимаем из комплекса
О квартирах:
- Сердечко - добавить в избранное
- Удалить их сравнения
- Планировка (картинка с увеличением)
- Сравнение по данным таблицы по квартирам, которую мы описывали в карточке ЖК.
Trend_favorite_map
Избранное согласно поисковой выдаче. Все так же, только избранное. Но в избранном может быть как комплекс так и квартира. Как отображать это таблицей - понятно. А как отображать на карте?
Отображается точно также как избранное, но заносим мы туда только комплексы, без квартир. Непонятно почему?
Это нужно чтобы показать клиенту инвестиционную привлекательность квартиры в этом корпусе.
График с четырьмя кривыми цен по типам квартиры.
Нам нужна цена квадратного метра в зависимости от типа квартиры.
Контенщик или робот заносит в базу базовую цену квадратного метра (разную в зависимости от типа квартиры)
Элементарный поиск (то что есть на существующем сайте) Карточки квартир Поиск по большому кол-ву параметров:
- первый взнос
- платеж в месяц
- инвестиционная привлекательность
- …
Личный кабинет менеджера
- Графики чтобы обосновать клиенту инвест. привлекательность
- Статистика работы менеджеров
- …
cian.ru петербургская недвижимость миан миель инком ндв-недвижимость
В идеале для клиента надо предоставить форму с двумя полями:
- Сумма которую хочет инвестировать клиент
- Срок на который хочет инвестировать клиент
И система автоматически подберет ему подходящие варианты (из числа заранее отобранных менеджерами компании)
Соберем шаблоны:
Скомпилируем шаблоны при подготовке модуля
Соберем контроллеры и все функции, которые контроллеры вызывают
Соберем все сущности и автоматы
Соберем загрузчик