- Выбираем справочник адресов
- Почему не КЛАДР?
- Что с ФИАС
- Выводы
- ФИАС и семь смертных граблей разработчика
- Почтовые индексы ФИАС для доставки посылок
- Код КЛАДР как идентификатор адреса до дома
- Код ФИАС как идентификатор адреса до дома
- Адрес одной строкой — вместо ФИАС-кода
- Дома только из ФИАС
- Поселки и улицы только из ФИАС
- Форма ввода адреса по структуре ФИАС
Выбираем справочник адресов
Время на прочтение
1 июля 2014 года произошло одно из самых значимых событий в истории государства Российского: с этого момента у нас в стране наконец появилась эталонная база адресов по всем, даже самым малым населённым пунктам! Имя этой базе — ФИАС. Собственно, сам по себе справочник ФИАС появился гораздо раньше, но именно 1 июля вступил в силу ФЗ 443, согласно которому все государственные и муниципальные структуры теперь должны опираться на него как на единственно верную базу адресов. Мы решили исследовать, стоит ли переходить на ФИАС, и с какими подводными камнями столкнутся те, кто решит это делать.
Прочитав статью, вы узнаете:
Почему не КЛАДР?
В настоящий момент времени основным адресным справочником России считается КЛАДР. Почему он не устроил людей, и откуда появилась необходимость в новом?
Изначально КЛАДР, скорее всего, задумывался как понятный структурированный справочник, содержащий актуальную информацию по адресам всей России. В настоящее время это, к сожалению, далеко от истины. Есть много особенностей в записях КЛАДР, и мы сейчас расскажем про самые интересные из них.
Ад в номерах домов или страшный сон программиста
Запись номера дома и его расширения (всё, что стоит после числа: корпус, строение, литера) в КЛАДР хранится одной строчкой через запятую. При этом общие правила формирования домовой части, описанные в документации, на практике далеко не всегда применяются. Так, если вы решите подключить КЛАДР вплоть до дома, то придется разобраться, что делать со следующими обозначениями:
Слабонервным не смотреть

Похоже, что из-за обилия различных написаний в справочнике запутываются даже его создатели, так как на одной улице можно часто встретить разные действующие записи одного дома. Например, в поселке Новый (Красногорский район Московской области) в КЛАДР есть запись с домом 8 и отдельно с двлд8. Теоретически, домовладение и дом — разные вещи, однако в реальности мало кто пишет «домовладение», и можно смело считать, что двлд и просто дом — одно и то же.
Теоретически, КЛАДР — это справочник адресов, на который все должны опираться при составлении любых справочников с адресами, и, следовательно, должны хранить некий ключ к этой базе, чтобы иметь возможность синхронизоваться с самим КЛАДР для получения обновлений. Но код КЛАДР — единственный идентификатор в этом справочнике — может меняться от версии к версии для одних и тех же объектов. Поэтому в других справочниках вы не найдёте его как ключ к адресной базе, везде для указания адреса служит только адрес без каких-либо id. Это плохо тем, что адреса в справочниках могут содержать ошибки, быть неактуальным или вообще не существовать, и чтобы привести его к КЛАДР, потребуется приложить немало усилий (или воспользоваться сервисом dadata.ru).
Где эта улица, где этот переулок?
Например, можно встретить такие адреса:
И снова: слабонервным не смотреть
Тип: «Чувашия»
Наименование: «Чувашская Республика -»
Да-да, прямо так — с дефисом в конце. И тип отличный.
Тип: «Улица»
Наименование: «КВАРТАЛ НОВЫЕ ЧЕРЕМУШКИ 32А»
Нам на разбор регулярно приходят замечательные адреса вида: Москва квартал Новые Черемушки 32А к8, кв xxx — заметьте, что, согласно КЛАДР, номер дома находится в наименовании улицы, и тип улицы не «квартал», а «улица».
Тип: «Переулок»
Наименование: «Ул. Советская»
В деревне Досотуй в Читинской области, есть улица «Советская» и переулок «Ул. Советская». Поэтому адреса Досотуй ул. Советская и Досотуй переулок ул. Советская — разные адреса
Лев или Толстой?
В КЛАДР много ошибок. Индексы из пяти символов, дублирующие записи домов с двойной нумерацией и прочее.
Вот некоторые из них более детально:
Вероятно, причина ошибок в том, что ответственными за актуальное состояние справочника являются органы местного самоуправления, и, возможно, вносимая информация никак не проверяется. Как бы там ни было, проблемы справочника усугубляются отсутствием поддержки: мы не раз писали письма в ФНС с указанием ошибок, но ни одна из них не была исправлена.
Так что если адрес есть в КЛАДР, то не факт, что он существует в реальной жизни, и наоборот.
Что с ФИАС
Давайте посмотрим, что представляет из себя ФИАС, и решает ли он проблемы КЛАДР.
Данные и структура
Первое, на что обращаешь внимание при работе с ФИАС — информации больше, чем в КЛАДР. Но полезной информации прибавилось не так много, как хотелось бы. Я выделил наиболее значимую адресную информацию в виде сравнительной таблицы ниже.
Таким образом, из полезного можно выделить только фиксированный ID дома, который, как предполагается, никогда не будет меняться и может служить ключом для внешних систем, а также даты начала и окончания действия записи. В остальном вся новая информация состоит из идентификаторов, которые периодически дублируют друг друга или являются частью других.
Качество информации о домах
В ФИАС есть две таблицы для домов. Структура данных сама по себе очень радует: для всего есть своё поле.
Первая таблица, HOUSE, содержит номера домов, и для каждого есть следующая информация:
Какие основные отличия от таблицы домов в КЛАДР?
Вторая таблица с домами, HOUSEINT, содержит интервалы домов. В КЛАДР в таблице домов содержатся записи вида Н(1-999), — это означает все нечётные дома из интервала 1 – 999. В ФИАС они разбиты на поля: начало интервала, конец, и его признак. К сожалению, содержимое этой таблицы так же далеко от истины, как и в КЛАДР: например, в Кирове есть неправдоподобно длинная улица Щорса, на которой есть все дома в диапазоне от 1 до 9999.
Качество всего остального
Посмотрим чуть выше — на адресные объекты вплоть до улицы. Они находятся в таблице ADDROBJ.
Формат
ФИАС доступен в трёх видах: формат КЛАДР, dbf и xml. Последний мне показался наиболее удобным — файлы не разбиваются по регионам в отличие от dbf, а хранятся в скомпонованном виде в xml. Однако вес исходного справочника в таком формате составляет около 14Гб.
ФИАС в формате dbf весит 9Гб вместо 14Гб, однако имеет не очень удобную структуру: таблицы домов и нормативных документов разбиты по регионам, и в итоге ФИАС в таком представлении содержит 187 файлов.
ФИАС в формате КЛАДР по сути и наполнению — то же самое, что и сам КЛАДР, за редким исключением, и весит он те же самые 330Мб. Построчное сравнение таблиц КЛАДР и ФИАС в формате КЛАДР выявило менее 0.1% расхождений, которые, вероятно, вызваны разным временем выгрузки рассматриваемых баз КЛАДР и ФИАС.
Что думает бизнес
Как может повлиять на работу переключение с КЛАДР на ФИАС? Готов ли бизнес переходить на этот справочник?
Наши коллеги из банков, для которых использование адресной информации является ключевым на всех этапах, не видят бизнес преимуществ перехода на ФИАС, однако планируют это делать, чтобы соответствовать требованиям регулятора. Из-за перехода всех федеральных агентств, министерств и ведомств на ФИАС в перспективе могут возникнуть требования использовать ФИАС при общении с ними (госуслуги, СМЭВ, отчетность, ЦБ).
Выводы
Самой большой проблемой официальных справочников в России была и остаётся неактуальность представленной информации. Пока не будет нормальной налаженной системы по пополнению ФИАС, не будет проверяться качество данных и не будет произведён рефакторинг того, что уже есть в справочнике, мы будем встречаться со всеми теми же проблемами, что и в КЛАДР.
Основными плюсами ФИАС являются начальные попытки стандартизации адресов и наличие стабильного ключа для каждого дома.
Итак, пока переход на ФИАС имеет смысл только как задел на будущее. Если вы уже работаете с КЛАДР и не взаимодействуете со внешними системами, то можно не переходить на ФИАС, а использовать КЛАДР дальше. Если вы только начинаете своё знакомство с адресами и планируете подключать их в свой продукт, или вам требуется отчётность и интеграция, то стоит выбирать ФИАС.
P. S.: Вся информация в статье актуальна для версии КЛАДР 03.07.2014 и версии ФИАС 30.06.2014
ФИАС и семь смертных граблей разработчика
Чтобы нормально работать с почтовыми адресами, сайты подключают справочник адресов налоговой службы (ФИАС). На dadata.ru это сделали уже пять тысяч интернет-магазинов, CRM и стартапов.
А мы поглядели на проблемы клиентов, подумали и собрали увесистый комплект граблей, по которым любят ходить разработчики в обнимку с ФИАСом.

Почтовые индексы ФИАС для доставки посылок
Тех, кто использует ФИАС для доставки писем и посылок, ждет сюрприз. Почему-то все считают, что если ФИАС — общероссийская база адресов, то индексы в нем должны быть правильные.
В ФИАС несколько тысяч неправильных или отсутствующих индексов. Например, поищем на fias.nalog.ru адрес «Новосибирская обл, г Новосибирск, ул Зорге, д 56»:

Индекса нет. Если посмотреть этот же адрес на сайте почты России — увидим индекс:

К сожалению, данные ФНС расходятся с реальностью и с данными Почты. На форуме Дадаты каждый месяц задают новый вопрос на эту тему.
Опытные владельцы интернет-магазинов знают про подставу с индексами и дополнительно проверяют индексы ФИАС по базе Почты России. Но и с Почтой не все хорошо: там нет части индексов, которые есть в ФИАС (например, 742602, 103340 и нескольких тысяч других индексов).
Мы в Дадате работаем над объединенной базой индексов ФИАС и Почты России. Она компенсирует ошибки ведомств и пригодится для доставки писем и посылок. Планируем выпустить до конца года.
Код КЛАДР как идентификатор адреса до дома
Разработчики используют в качестве идентификатора дома код КЛАДР — хотя давно уже существует ФИАС и уникальный код адреса в нем (GUID). Обычно так делают для совместимости со старыми системами.
Идентифицировать дом кодом КЛАДР — очень соблазнительно с девелоперской точки зрения, но так делать не стоит. Потому что код до дома нестабилен и меняется каждый месяц (примеры не исчерпывающие, просто иллюстрирую проблему):
Надежнее для идентификации адреса использовать код КЛАДР улицы и домовую часть адреса: 160000010000633, д 12. А еще лучше вместо кода КЛАДР сохранять ФИАС-код улицы.
Код ФИАС как идентификатор адреса до дома
Идентифицировать адрес до дома с помощью кода ФИАС — тоже не лучшая идея.
Кодом ФИАС часто обозначают не отдельный дом, а диапазон домов, например «1–10». Разумеется, у всех домов внутри диапазона будет один и тот же код. Если дом исходно был в составе диапазона, а потом вылез в отдельную запись — его код изменится:
Поэтому рекомендую поступать так же, как с кодом КЛАДР — использовать ФИАС-код улицы и домовую часть адреса.
Адрес одной строкой — вместо ФИАС-кода
Если хранить адрес одной строкой, то со временем база заполнится записями разного формата. Типа «Урюпинск, проспект Ленина» и «Урюпинск, пр-кт Ленина».
Это происходит потому, что формат записей в ФИАС все время меняется:
1. Смена типа улицы:
2. Переподчинение (город стал микрорайоном или улица переехала из города в поселок):
3. Переименование (или исправление по мелочи):
Поэтому в дополнение к адресу одной строкой хорошо сохранять ФИАС-код улицы.
Дома только из ФИАС
Бывает, что разработчики ограничивают ввод дома только домами из ФИАС. Это парадоксально приводит одновременно к нехватке и избытку информации:
В ФИАС домов не хватает
Недавний пример:
Московская обл., г. Балашиха, Горенский б-р, д. 3 (на карте).
В ФИАС дома 3 нет, зато есть 3 к А.
А иногда их слишком много
В ФИАС есть фальшивые «дома» с литерами, которых в реальной жизни нет (или есть, но
радости от них никакой
это будка трансформаторная).
г. Санкт-Петербург, ул. Кораблестроителей
дом 38к3
дом 38к3 литер А
дом 38к3 литер Т
Лучше не ограничивать ввод дома, а предлагать человеку дома из ФИАС и разрешать ввести свой вариант (в Подсказках делаем именно так).
Поселки и улицы только из ФИАС
ФИАС скуден не только домами. В России все время появляются новые улицы и поселки, а налоговая служба за жизнью не успевает. Например, нет поселка Новогорелово из Ленинградской области, и Нового Лапино из Московской области.
Мы в Дадате собираем такие адреса от пользователей и ведем их как дополнительный справочник к ФИАС, чтобы помогать пользователям вводить несуществующие в ФИАС адреса.
Форма ввода адреса по структуре ФИАС
Некоторые разработчики, поддавшись магии ФИАС, делают формы ввода адреса по структуре ФИАС: заставляют пользователя различать город и населенный пункт, обязательно вводить регион и район.
Например, интернет-магазин Почты России:

Как, вы еще не помните наизусть свой индекс?!
Правильные ребята позволяют клиентам указывать адрес одной строкой и не заморачиваться вводом индекса.
Я тоже когда-то думала, что с помощью ФИАС избавлюсь от проблем с вводом адресов раз и навсегда. Но у ФИАС есть свои проблемы: прыгучие идентификаторы, кривые индексы и забытые адреса.
Чтобы облегчить себе жизнь и не наступать на известные грабли:
А самый удобный вариант — использовать Подсказки для ввода адреса. В них решены все проблемы, кроме последней — ее планируем закрыть до конца года.

