Giter Club home page Giter Club logo

egrul_fts_api's Introduction

egrul_fts_api

egrul_fts_api workflow

EGRUL FTS API - микросервис, обрабатывающий информацию об организациях (юридических лицах) из Единого государственного реестра юридических лиц. Написан на Django-rest-framework, использует полнотекстовый поиск PostgreSQL.

Сервис предоставляет возможность обработки следующей информации:

  • полное наименование организации;
  • сокращенное наименование организации;
  • ИНН;
  • КПП;
  • ОГРН;
  • фактический адрес;
  • код региона.

Предполагается, что все сведения из ЕГРЮЛ расположены в XML-документах, доступ к которым предоставляет Федеральная налоговая служба России в соответствии с установленным порядком.
Сведения из ЕГРЮЛ могут быть обработаны как по формату 405 (адреса в формате КЛАДР), так и по формату 406 (адреса в формате ФИАС).

Ограничения

Сведения о ликвидированных организациях в сервисе не обрабатываются.
В ЕГРЮЛ присутствуют организации с дублирующейся тройкой (ИНН, КПП, ОГРН). Логика работы сервиса предлагает отказаться от филиалов организаций, чьи КПП одинаковые.

Способ использования

Сервис может использоваться как источник знаний для других сервисов, например cert_ecosystem, логика которого не предполагает использование более 10 миллионов записей из ЕГРЮЛ, но предполагает использовать определенное множество организаций, размер которого ограничен несколькими тысячами.

Установка

Установить проект:

git clone https://github.com/PrudyvusP/egrul_fts_api.git && cd "$(basename "$_" .git)"

Создать файл .env, который должен содержать следующие переменные окружения:

  • DB_ENGINE
  • DB_NAME
  • POSTGRES_USER
  • POSTGRES_PASSWORD
  • DB_HOST
  • DB_PORT
  • SECRET_KEY
  • BACKEND_HOSTS

Предусмотрены два способа использования сервиса: локально и в docker-контейнере. Расположение файла .env зависит от выбранного способа развертывания сервиса.

├── egrul  
│   ├── api  
│   ├── egrul  
│   ├── organizations  
│   ├── .env               <--- файл с переменными окружения для локального использования
│   ├── Dockerfile  
│   ├── manage.py  
│   └── requirements.txt  
├── infra  
│   ├── nginx  
│   ├── .env               <--- файл с переменными окружения для использования в docker
│   └── docker-compose.yaml  
├── .gitignore  
├── README.md  
└── setup.cfg  

Пример содержания файла .env для способа развертывания в docker-контейнере:

DB_ENGINE=django.db.backends.postgresql
DB_NAME=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
DB_HOST=db
DB_PORT=5432
SECRET_KEY=indonesia_Xena
BACKEND_HOSTS=localhost web 127.0.0.1 testserver

Развертывание в docker-контейнере

Для развертывания необходимо перейти в директорию infra и запустить последовательно следующие команды от пользователя с правами root:

docker-compose up --build --d
docker exec -it infra_web_1 python3 manage.py migrate
docker exec -it infra_web_1 python3 manage.py collectstatic

Для того, чтобы попасть в psql из-вне нужно ввести команду:

docker exec -it infra_db_1 psql -U {POSTGRES_USER}

Добавление данных

Для демонстрации логики работы сервиса предусмотрена команда, которая сгенерит 100 000 относительно похожих на реальные данные строчек в БД:

docker exec -it infra_web_1 python3 manage.py fill_test_data

Для использования реальных данных из ЕГРЮЛ предусмотрено использование следующей команды:

docker exec -it infra_web_1 python3 manage.py fill_egrul egrul_data/<path_to_dir_with_xml>

При этом egrul_data/<path_to_dir_with_xml> в текущем виде конфига смонтируется в /tmp/<path_to_dir_with_xml>, где должны лежать XML-файлы из ЕГРЮЛ

Документация

В настоящее время сервис поддерживает три endpoint'а:

  1. /api/organizations/
    например, GET-запрос на /api/organizations/?page=2 вернет что-то вроде:
{
    "count": 100000,
    "next": "http://127.0.0.1/api/organizations/?page=3",
    "previous": "http://127.0.0.1/api/organizations/",
    "results": [
        {
            "full_name": "АКЦИОНЕРНОЕ ОБЩЕСТВО \"АВТОМОБИЛЬ\"",
            "short_name": "АО \"АВТОМОБИЛЬ\"",
            "inn": "550435143306",
            "kpp": "123412345",
            "url": "/api/organizations/129147/"
        },
        {
            "full_name": "АКЦИОНЕРНОЕ ОБЩЕСТВО \"АВТОМОБИЛЬ\"",
            "short_name": "АО \"АВТОМОБИЛЬ\"",
            "inn": "396462764649",
            "kpp": "567856789",
            "url": "/api/organizations/196174/"
        },
      ]
}
  1. /api/organizations/<id>/
    например, GET-запрос на /api/organizations/100043/ вернет нечто похоже на:
{
    "full_name": "ПУБЛИЧНОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО \"ЭПОХА\"",
    "short_name": "ПАО \"ЭПОХА\"",
    "inn": "205975495862",
    "kpp": "123456789",
    "ogrn": "4537933140928",
    "factual_address": "ПЕР. ТЕСТОВЫЙ, Д.8, К.А, ВОРОНЕЖСКАЯ ОБЛАСТЬ, Г. ВОРОНЕЖ, 111111",
    "region_code": "74"
}
  1. /api/organizations/fts-search/?q=<запрос к полнотекстовому поиску>
    GET-запрос на подобный эндпоинт вернет найденные записи в БД точно в таком же формате как указано в п. 1).
    Параметр q обязателен.

Примечание

В админке по адресу admin/organizations/organization/ намеренно отключено отображение всех организаций за нецелесообразностью такового. Доступен поиск.

Технологии

  • DRF
  • PostgreSQL
  • NGINX
  • Docker

Рекомендации

Для локального развертывания в закрытом контуре (без использования подключения к сети "Интернет") возможно с помощью команд docker pull, docker save и docker load получить docker images с Docker Hub.

TODO

Для реализации адекватного поиска по организациям целесообразно дополнить русскоязычный словарь стоп-слов PostgreSQL словами "общество", "акционерное" и тд.

egrul_fts_api's People

Contributors

prudyvusp avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.