14 окт. 2017 г.
Всем привет! В этой статье расскажу о работе с "API Федеральной Налоговой Службы". И чем это в итоге обернулось.
В одном из проектов была задача было получать данные Юридическом Лице(ООО, ИП, и т.д.)
Проект представляет собой POS-систему для кафе и рестаранов. Для обслуживания, процессинга и учета клиентов используется корпоративный портал. Портал позволяет управлять клиентами и хранит мнжество данных от Названия организации до ОКВЭД(Общероссийский классификатор видов экономической деятельности).
При подключении нового клиента у него приходится запрашивать очень много информации. И в какой-то момент возникло желание получать хотя бы часть этих данных автоматически.
Теоретически такую информацию предоставляет федеральная налоговая служба. Также в сети есть множество сайтов, где можно проверить контрагентов по ИНН. Скорее всего эти сайты также используют данные налоговой службы.
Обычно, когда мне нужно сделать что-то подобное, я смотрю не предоставляет ли данный сервис API для взаимодействия. И обычно, если это популярный и востребованный сервис, то api существует в том или ином виде. Например facebook api, vk api, ebay api и т.д.
Сразу же возникает вопрос, а нет ли чего-то подобного у федеральной налоговой службы. Но и ответ находится достаточно быстро. https://www.nalog.ru/rn77/service/egrip2/access_order/
Nalog.ru позволяет получить данные организаций в электронном виде через ftp. Либо через api(не подтверждено).
за годовое абонентское обслуживание одного рабочего места одного реестра (ЕГРЮЛ или ЕГРИП) - 150 тысяч рублей (НДС не облагается в соответствии с подпунктом 4 пункта 2 статьи 146 Налогового кодекса Российской Федерации);
за однократное предоставление открытых сведений в полном объеме одного реестра (ЕГРЮЛ или ЕГРИП) - 50 тысяч рублей (НДС не облагается в соответствии с подпунктом 4 пункта 2 статьи 146 Налогового кодекса Российской Федерации);
за однократное предоставление открытых обновленных сведений (в случае обновления уже полученных открытых сведений в полном объеме) – 5 тыс. рублей (НДС не облагается в соответствии с подпунктом 4 пункта 2 статьи 146 Налогового кодекса Российской Федерации).
В общем, и то и другое платно. Постоянный доступ - 150 000 р./год. для одного оператора. Либо 50 000 р. единовременно + 5 т.р. за каждое обновление. Цены ощутимые, учитывая что база обновляется каждый день(так написано на сайте налоговой). Правда это или нет - другой вопрос.
Скорее всего одного оператора достаточно, чтобы скачать данные, внести в свою БД и уже по ней вести поиск. Время от времени обновлять данные. Но в любом случае, в нашей компании не готовы были платить такие деньги. Оно и понятно.
К тому же сам процесс достаточно трудоемкий, предполагает получение Rutoken, настройка окружения для безопасного взаимодействия с системой. Затем нужно автоматизировать процесс загрузки файлов по ftp, парсинг и обновление локальной базы. Что заеняло бы много сил и времени.
В итоге был выбрран немножечко костыльный, но рабочий вариант. Наиболее оптимальный, как мне кажется.
При том, что получение доступа к базе организаций достаточно сложный и дорогой процесс, получить данные для одной организации достаточно просто. Предоставляется форма, которая позволяет вручную получить данные https://egrul.nalog.ru/.
Нужно указать данные организации. Инн, либо другие данные. Также нужно ввести капчу. В результате будет сгенерирован pdf файл
Обходом капчи заниматься не хотелось. Да и не силен я в этом. К тому же, пока мы подключаем не 1000 клиентов в день, это не так уж принципиально. Менеджер может перейти по ссылке, скачать pdf файл и загрузить в систему.
Update 2018-12-24: Сайт налоговой инспекции немного поменялся. В частности, теперь не нужно вводить капчу. Вместо этого добавили что-то вроде двухэтапной авторизации.
Примеры pdf документов для ИП и ООО:
Остается распарсить pdf и получить нужные данные. Я думал, что с этим возникнут проблемы, но на самом деле все оказалось не так сложно.
Конечно, многое зависит от формата pdf. Здесь он генерируется с помошью iText Java library.
Парсер разрабатывал на php, оформил в виде библиотеки. Выложил на github, можно установить через composer
composer require "antonshell/egrul-nalog-parser:dev-master"
Для парсинга использовал эту библиотеку https://github.com/smalot/pdfparser/
Парсит достаточно хорошо, получаем такой текст
ЕДИНЫЙ ГОСУДАРСТВЕННЫЙ РЕЕСТР ИНДИВИДУАЛЬНЫХ ПРЕДПРИНИМАТЕЛЕЙ
Сведения об индивидуальном предпринимателе
ИВАНОВ ИВАН ИВАНОВИЧ
ОГРНИП 314213009700255
ИНН 213000262765
по состоянию на 11.09.2017
№ п/пНаименование показателяЗначение показателя
123
Фамилия, имя, отчество (при наличии\fbg^b\b^mZevgh]hij_^ijbgbfZl_ey
1ФамилияИВАНОВ
2ИмяИВАН
3ОтчествоИВАНОВИЧ
4Полмужской
5ГРН и дата внесения в ЕГРИП записи,
содержащей указанные сведения
314213009700255
07.04.2014
Сведения о гражданстве
6Гражданствогражданин Российской Федерации
7ГРН и дата внесения в ЕГРИП записи,
содержащей указанные сведения
314213009700255
07.04.2014
Сведения о регистрации индивидуального предпринимателя
8ОГРНИП314213009700255
9Дата регистрации07.04.2014
Сведения о регистрирующем органе по месту жительства индивидуального
предпринимателя
10Наименование регистрирующего органаИнспекция Федеральной налоговой службы
по г. Чебоксары
11Адрес регистрирующего органа,428032,,, Чебоксары г,, Базарная ул, д 40,,
12ГРН и дата внесения в ЕГРИП записи,
содержащей указанные сведения
314213009700255
07.04.2014
Сведения об учете в налоговом органе
13Идентификационный номер
налогоплательщика (ИНН\f
213000262765
14Дата постановки на учет07.04.2014
15Наименование налогового органаИнспекция Федеральной налоговой службы
по г.Чебоксары
16ГРН и дата внесения в ЕГРИП записи,
содержащей указанные сведения
414213009800211
08.04.2014
Выглядит немного беспорядочно. Но в итоге можно распарсить по ключевым словам
Единственная проблема закрывающей кавычкой. Так и не решил ее. Но в итоге мне это не помешало распарсить почти все данные.
На github есть issue, у человека возникла такая же проблема: https://github.com/smalot/pdfparser/issues/138.
Примерный алгоритм парсинга такой:
Идти по строкам подряд. Если чтрока начинается с цифры, достаем заголовок поля. Поскольку заголовоки повторяются то вводим понятие разделов и ключевые слова для них
Названия полей выделяем по ключевым словам, заменяем в тексте.
Используем стоп слова, стобы убрать лишние данные.
Распарсить выписку для ООО можно таким образом:
<?php
$parser = new \antonshell\EgrulNalogParser\Parser();
// parse for Organization
$pathOrg = __DIR__ . '/nalog_org.pdf';
$parser->parseNalogOrg($pathOrg);
Для ИП:
<?php
$parser = new \antonshell\EgrulNalogParser\Parser();
// parse for Individual Entrepreneur
$pathPe = __DIR__ . '/nalog_pe.pdf';
$results = $parser->parseNalogPe($pathPe);
В итоге получается примерно такой массив данных:
[common] => Array
(
[last_name] => ИВАНОВ
[first_name] => ИВАН
[middle_name] => ИВАНОВИЧ
[gender] => мужской
[grn_record] => 314213009700255 07.04.2014
)
[citizen] => Array
(
[citizen] => гражданин Российской Федерации
[grn_record] => 314213009700255 07.04.2014
)
[pe_register_info] => Array
(
[ogrnip] => 314213009700255
[register_date] => 07.04.2014
)
[register_org_info] => Array
(
[register_organization] => Инспекция Федеральной налоговой службы по г. Чебоксары
[register_organization_2] => ,428032,,, Чебоксары г,, Базарная ул, д 40,,
[grn_record] => 314213009700255 07.04.2014
)
[taxes] => Array
(
[inn] => (ИНН 213000262765
[account_date] => 07.04.2014
[account_organization] => Инспекция Федеральной налоговой службы по г.Чебоксары
[grn_record] => 414213009800211 08.04.2014
)
[pension] => Array
(
[register_number] => 015023040857
[register_date] => 09.04.2014
[organization_name] => Управление Пенсионного фонда Российской Федерации по г.Чебоксары Чувашской Республики
[grn_record] => 414213010010346 10.04.2014
[register_number_2] => 213005674221003
[register_date_2] => 19.10.2015
[grn_record_2] => 415213000168905 20.10.2015
)
Библиотека доступна на github: https://github.com/antonshell/egrul-nalog-parser
Спасибо за внимание!