![](https://habrastorage.org/webt/4r/2k/de/4r2kdef9h3fieollcezqj2vwszk.jpeg)
С пару месяцев назад мы поэкспериментировали: получится ли на «Хабре» собрать годный справочник подразделений, выдавших российские паспорта. Дело полезное: эти данные нужны много кому, канонического источника нет, а существующие — очень так себе.
И знаете, все получилось. Пригодный к использованию справочник готов, можно качать и пользоваться. А еще мы сделали подсказки, которые ускоряют ввод подразделений в электронные формы.
«Голый» CSV — в открытом доступе
Собранный и очищенный справочник мы выложили на GitHub. Внутри все просто, CSV с двумя полями:
- код подразделения;
- название подразделения.
Лежит здесь github.com/hflabs/fms-unit/releases/latest.
Есть еще готовые подсказки для форм ввода (причем бесплатные)
Мы собирали подразделения, чтобы сделать готовый сервис — подсказки для форм ввода. И вот они готовы.
«Подсказки» DaData.ru можно интегрировать в сайт, CRM или CMS и прослыть заботливым малым: пользователю достаточно ввести код подразделения, а название заполнит сервис.
![](https://habrastorage.org/webt/hi/ow/pn/hiowpn7nn-fcbwhqacerbme5os4.gif)
Кажется, все ненавидят заполнять название подразделения. Мы пытались облегчить страдания людей
Еще «Подсказки» вытаскивают регион и тип подразделения из кода, иногда удобно. Вот краткая спецификация ответа.
Название | Описание |
---|---|
value | Значение одной строкой (как показано в списке подсказок) |
data.code | Код подразделения |
data.name | Название подразделения в творительном падеже («кем выдан?») |
data.region_code | Код региона |
data.type | Вид подразделения:
|
Детали — на dadata.ru/suggestions/outward/fms_unit/.
«Хабр» здорово помог с данными
Первый вопрос тех, кто слышит о проекте: «Реально через „Хабр“ собрали?». Помог не один только «Хабр», но вклад хабражителей велик и обширен. Мы благодарны и немного удивлены: первый раз обратились к сообществу, и сразу такой результат.
Изначально у нас были кое-какие наработки. Но, во-первых, далеко не полный справочник. Во-вторых, хотелось проверить, насколько данные адекватны реальным паспортам.
Многие прислали подразделения из своих паспортов через форму для сбора, когда мы кинули клич. Слали по и одной и по пять-десять записей. Героям, не поленившимся вбивать все это руками, — уважение.
Три человека предложили в личке базы почтенного размера. Доброжелательно и безвозмездно.
![](https://habrastorage.org/webt/6w/7y/9m/6w7y9m3_ggxfqzxuiqnin55b-fw.png)
Тем, кто тревожится за безопасность: все справочники присылали обезличенными, ни байта персональных данных
Такие подарки ощутимо двигали дело вперед. В итоге недели через три мы собрали объем, из которого не стыдно делать пригодный к промышленному использованию продукт.
Путь к успеху — «Куча сырых данных + 300 регекспов + немного питонячки»
Итак, сырые данные на руках у продуктовода «Дадаты» nalgeon. Дальнейшие пляски он описал цитатой из заголовка. Все, что мы собрали, прошло череду чудесных трансформаций.
Для начала нормализовали названия подразделений. Здесь пришлось задорно поработать напильником. Например, в «живых» паспортах номера территориальных подразделений указывают с «№»: «ТП № 1 В Г. ХИМКИ...». Так же и в большинстве собранных справочников, кроме одного — в нем все номера без «№»: «ТП 1 В Г. ХИМКИ...». Пришлось вставлять.
Схлопнули годы. В нескольких справочниках названия подразделений «размазаны» по годам, даже когда не меняются со временем.
500-168,ОТДЕЛЕНИЕМ УФМС РОССИИ ПО МОСКОВСКОЙ ОБЛ. В Г. ТРОИЦКЕ,2007
500-168,ОТДЕЛЕНИЕМ УФМС РОССИИ ПО МОСКОВСКОЙ ОБЛ. В Г. ТРОИЦКЕ,2008
500-168,ОТДЕЛЕНИЕМ УФМС РОССИИ ПО МОСКОВСКОЙ ОБЛ. В Г. ТРОИЦКЕ,2009
500-168,ОТДЕЛЕНИЕМ УФМС РОССИИ ПО МОСКОВСКОЙ ОБЛ. В Г. ТРОИЦКЕ,2010
Такие записи мы объединили, привязав к периоду: в примере выше из четырех записей получилась одна с датами «2007–2010».
Собрали еще один справочник — «2018+». В 2018 году случился переворот — теперь в паспортах пишут название не подразделения, а «верховного» управления МВД по региону. Поэтому в документе, выданном в Красноярском крае, вне зависимости от кода указывают «ГУ МВД РОССИИ ПО КРАСНОЯРСКОМУ КРАЮ».
Мы взяли все собранные коды, разбили по регионам и нагенерили для них одинаковые названия в стиле 2018 года. Названия брали из собранных справочников, кое-что пришлось искать в интернете. Получилось что-то подобное.
240-001,ГУ МВД РОССИИ ПО КРАСНОЯРСКОМУ КРАЮ,2018
240-002,ГУ МВД РОССИИ ПО КРАСНОЯРСКОМУ КРАЮ,2018
240-003,ГУ МВД РОССИИ ПО КРАСНОЯРСКОМУ КРАЮ,2018
Убрали годы. Оказалось, в справочниках совершенная кутерьма: где-то годы есть, где-то нет. Осталось или везде убрать годы ради более полного справочника, или оставить только подразделения с годами ради непонятно чего. Выбрали более полный справочник.
Объединили справочники, данные в экстазе слились воедино. Результат хорошенько потерли тряпкой, причесали и напомадили: например, «РА» где нужно превратили в «Республику Алтай» и сделали еще десяток подобных изменений.
И вот, справочник готов. Пользуйтесь, делали как для себя (собственно, для себя и делали :).
Пара тонкостей для въедливых
В справочнике много записей с одинаковыми кодами подразделений. Это из-за того, что в разные годы в паспортах написание одного и того же подразделения отличалось. Похожие варианты мы объединили, а сильно отличающиеся оставили: пусть пользователь сам выбирает, как у него в документе.
Может оказаться, что в вашем паспорте и в справочнике написано немного по-разному. Без минимальной нормализации у каждого подразделения получилась бы такая куча похожих вариантов, что нужное поди найди. Поэтому мы сократили «УПРАВЛЕНИЕ ВНУТРЕННИХ ДЕЛ» до «УВД», «ГОРОДА» и «ГОР.» — до «Г.», «ОТДЕЛА ПАСПОРТНО-ВИЗОВОЙ СЛУЖБЫ» — до «ОПВС» и т. д.
![](https://habrastorage.org/webt/1x/95/v2/1x95v22jqkfznpcnz95ga3acqyc.png)
Если начать набирать название, «Подсказки» тоже поспособствуют
Но! Ни один закон или подзаконный акт не требует, чтобы название подразделения в документах побуквенно совпадало с вариантом в паспорте. Допускаются и сокращения, и пропуски слов. Главное, чтобы было примерно похоже и совпадали остальные реквизиты: серия, номер, дата, код подразделения.
Об ошибках можно сообщать нам dadata.ru/fix/fms. Укажите код и название проблемной записи, а в комментарии напишите, что не так. Поправим и выложим обновленный справочник для всех. Или присылайте пул-реквесты на GitHub.
Естественно, можно руками поправить CSV, если у вас голый справочник без «Подсказок». Но непонятно, как все смерджится, если когда-нибудь заберете очередную версию справочника у нас.
В общем, пользуйтесь на здоровье:
Если поделитесь статьей, поможете людям, которые ищут справочник подразделений из паспортов. Страждущих хватает, они будут благодарны.