ФИАС и семь смертных граблей разработчика

Чтобы нормально работать с почтовыми адресами, сайты подключают справочник адресов налоговой службы (ФИАС). На dadata.ru это сделали уже пять тысяч интернет-магазинов, CRM и стартапов.

А мы поглядели на проблемы клиентов, подумали и собрали увесистый комплект граблей, по которым любят ходить разработчики в обнимку с ФИАСом.

135038773e744c35881c300596db4d18.png

1. Почтовые индексы ФИАС для доставки посылок


Тех, кто использует ФИАС для доставки писем и посылок, ждет сюрприз. Почему-то все считают, что если ФИАС — общероссийская база адресов, то индексы в нем должны быть правильные.

Это не так.

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

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

К сожалению, данные ФНС расходятся с реальностью и с данными Почты. На форуме Дадаты каждый месяц задают новый вопрос на эту тему.

Опытные владельцы интернет-магазинов знают про подставу с индексами и дополнительно проверяют индексы ФИАС по базе Почты России. Но и с Почтой не все хорошо: там нет части индексов, которые есть в ФИАС (например, 742602, 103340 и нескольких тысяч других индексов).

Мы в Дадате работаем над объединенной базой индексов ФИАС и Почты России. Она компенсирует ошибки ведомств и пригодится для доставки писем и посылок. Планируем выпустить до конца года.

2. Код КЛАДР как идентификатор адреса до дома


Разработчики используют в качестве идентификатора дома код КЛАДР — хотя давно уже существует ФИАС и уникальный код адреса в нем (GUID). Обычно так делают для совместимости со старыми системами.

Идентифицировать дом кодом КЛАДР — очень соблазнительно с девелоперской точки зрения, но так делать не стоит. Потому что код до дома нестабилен и меняется каждый месяц (примеры не исчерпывающие, просто иллюстрирую проблему):

Адрес Код КЛАДР в ФИАС от 10.03.16 Код КЛАДР в ФИАС от 18.04.16
г Казань, ул Космонавтов, д 12 1600000100006330009 1600000100006330082
г Нижний Новгород, ул Панфиловцев, д 4Б 5200000100008060003 5200000100008060018
г Самара, поселок Мехзавод, кв-л 16-й, д 7 6300000103700170018 6300000103700170043


Надежнее для идентификации адреса использовать код КЛАДР улицы и домовую часть адреса: 160000010000633, д 12. А еще лучше вместо кода КЛАДР сохранять ФИАС-код улицы.

3. Код ФИАС как идентификатор адреса до дома


Идентифицировать адрес до дома с помощью кода ФИАС — тоже не лучшая идея.

Кодом ФИАС часто обозначают не отдельный дом, а диапазон домов, например »1–10». Разумеется, у всех домов внутри диапазона будет один и тот же код. Если дом исходно был в составе диапазона, а потом вылез в отдельную запись — его код изменится:

Адрес Код ФИАС диапазона, ФИАС от 10.03.16 Код ФИАС дома, ФИАС от 18.04.16
Московская обл, Истринский р-н, с Павловская Слобода, ул Дзержинского, д 1 720b25da-f43e-4204–9013–3cb06be3e9e4
диапазон домов 1–6
5bbc0463-ffc4–4d8f-bc5f-632c46eeedca
г Волгоград, ул им Пархоменко, д 33 44de3bc5-a650–4f77-b19a-7a12bb619c21 диапазон домов 15–35, нечётные 98216a50–2c52–4b0c-8864-a19dc7a30a73
г Ижевск, ул Удмуртская, д 267 к 3 92ff5f38–01fb-42e6–97d6-a95f541644f4
диапазон домов 261–277, нечётные
ac8015c8–0e73–442d-a6aa-427f2e973ec5


Поэтому рекомендую поступать так же, как с кодом КЛАДР — использовать ФИАС-код улицы и домовую часть адреса.

4. Адрес одной строкой — вместо ФИАС-кода


Если хранить адрес одной строкой, то со временем база заполнится записями разного формата. Типа «Урюпинск, проспект Ленина» и «Урюпинск, пр-кт Ленина».

Это происходит потому, что формат записей в ФИАС все время меняется:

1. Смена типа улицы:

г Обнинск ул Ленина → пр-кт Ленина
Тюменская обл, г Ишим, линия 5-я → ул 5-я линия


2. Переподчинение (город стал микрорайоном или улица переехала из города в поселок):

г Самара, ул Симферопольская → г Самара, п Управленческий, ул Симферопольская


3. Переименование (или исправление по мелочи):

г Красноярск, ул им Академика Вавилова → ул Академика Вавилова
Чеченская Респ, Итум-Калинский р-н, село Гучум-Кала → село Гучум-Кали
Ямало-Ненецкий АО, г Губкинский, мкр 12-й → мкр 12


Поэтому в дополнение к адресу одной строкой хорошо сохранять ФИАС-код улицы.

5. Дома только из ФИАС


Бывает, что разработчики ограничивают ввод дома только домами из ФИАС. Это парадоксально приводит одновременно к нехватке и избытку информации:

В ФИАС домов не хватает
Недавний пример:

Московская обл., г. Балашиха, Горенский б-р, д. 3 (на карте).


В ФИАС дома 3 нет, зато есть 3 к А.

А иногда их слишком много
В ФИАС есть фальшивые «дома» с литерами, которых в реальной жизни нет (или есть, но радости от них никакой это будка трансформаторная).

г. Санкт-Петербург, ул. Кораблестроителей
дом 38к3
дом 38к3 литер А
дом 38к3 литер Т


Лучше не ограничивать ввод дома, а предлагать человеку дома из ФИАС и разрешать ввести свой вариант (в Подсказках делаем именно так).

6. Поселки и улицы только из ФИАС


ФИАС скуден не только домами. В России все время появляются новые улицы и поселки, а налоговая служба за жизнью не успевает. Например, нет поселка Новогорелово из Ленинградской области, и Нового Лапино из Московской области.

Мы в Дадате собираем такие адреса от пользователей и ведем их как дополнительный справочник к ФИАС, чтобы помогать пользователям вводить несуществующие в ФИАС адреса.

7. Форма ввода адреса по структуре ФИАС


Некоторые разработчики, поддавшись магии ФИАС, делают формы ввода адреса по структуре ФИАС: заставляют пользователя различать город и населенный пункт, обязательно вводить регион и район.

Например, интернет-магазин Почты России:
12ca7433329546c19f07fd03f84e07d1.png

Как, вы еще не помните наизусть свой индекс?!

Правильные ребята позволяют клиентам указывать адрес одной строкой и не заморачиваться вводом индекса.

Вывод


Я тоже когда-то думала, что с помощью ФИАС избавлюсь от проблем с вводом адресов раз и навсегда. Но у ФИАС есть свои проблемы: прыгучие идентификаторы, кривые индексы и забытые адреса.

Чтобы облегчить себе жизнь и не наступать на известные грабли:

  • Используйте код ФИАС до улицы + дом + квартиру для идентификации адреса.
  • Не ограничивайте ввод домами из ФИАС — разрешайте пользователям вводить свои дома.
  • Дайте пользователям возможность указывать поселки и улицы не из ФИАС.
  • Вводите адреса одной строкой.
  • Если доставляете посылки — проверяйте индексы на Почте и 2ГИС.


А самый удобный вариант — использовать Подсказки для ввода адреса. В них решены все проблемы, кроме последней — ее планируем закрыть до конца года.

© Habrahabr.ru