Пишем парсер данных Выписки из ЕГРЮЛ/ЕГРИП

14 Oct 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 файл и загрузить в систему.

Примеры pdf документов для ИП и ООО:
nalog_org.pdf
nalog_pe.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

Спасибо за внимание!