Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
    • Help
    • Submit feedback
    • Contribute to GitLab
  • Sign in
E
EMC_agreement
  • Project
    • Project
    • Details
    • Activity
    • Cycle Analytics
  • Issues 0
    • Issues 0
    • List
    • Board
    • Labels
    • Milestones
  • Redmine
    • Redmine
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
  • Registry
    • Registry
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Create a new issue
  • Jobs
  • Issue Boards
  • ИСОН
  • EMC_agreement
  • Wiki
  • Алгоритм формирования QR кода

Алгоритм формирования QR кода

Last edited by  Катя Березина Jun 01, 2020
Page history

Навигация по странице

  • Сборка QR кода
    • Поля QR кода
    • Наполнение значений для QR кода
    • Отличие в формировании полей QR кода для ПФ и для МП
  • Формирование картинки QR кода
    • Формирование QR кода для печатной формы
    • Формирование QR-кода в мобильном приложении
  • Обработка QR кода на бэке

Сборка QR кода

к навигации

Ниже приведены поля из которых состоит QR код. В качестве разделителя между полями используется символ '|', дополнительные ковычки никакие не используются.

В графе "Пример данных" указаны возможные значения, которые будут приходить на вход. В том случае, если напротив параметра указано, что "По умолчанию для всех", значит указанное значение в "Пример данных" используется для всех QR кодов без исключения.

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

Сейчас QR код собирается в двух местах для решения двух задач:

  1. Формирование картинки для подстановки в печатную форму;
  2. Передача текста QR кода в МП для преобразования в картинку на стороне клиента.

Ссылка на старую задачу по QR коду.

Поля QR кода

к навигации

Настройка реестра particulars происходит силами администратора.

id Название параметра Пример данных Интерпретация Откуда брать
1 ST00012 ST00012 Кодировка По умолчанию для всех
2 NAME 'Оплата в... ' Наименование получателя платежа Берется из поля 'name' в реестре 'particulars'
3 PERSONALACC 40101810845250010102 Номер счета получателя Берется из поля 'personal_acc' в реестре 'particulars'
4 BANKNAME ГУ БАНКА РОССИИ ПО ЦФО Наименование банка получателя Берется из поля 'bank_name' в реестре 'particulars'
5 BIC 044525000 БИК Банка получателя Берется из поля 'bic' в реестре 'particulars'
6 CORRESPACC 0 Кор./счет Берется из поля 'corresp_acc' в реестре 'particulars'
7 SUM 509800 Сумма платежа, в копейках Подставляется на основании указанных в МП данных (или по умолчанию)
8 PURPOSE ОПЛАТА ПАТЕНТА 40 №6554353453 Наименование платежа Подставляется по маске из 'patent_series' и 'patent_number' по выбранному пользователю
9 PAYEEINN 5024002119 ИНН получателя платежа На основании адреса регистрации конкретного пользователя выбирается конкретный ФНС и подставляется его ИНН
10 PAYERINN 500409000000 ИНН плательщика Подставляется из поля 'inn' в профиле выбранного пользователя
11 KPP 502401001 КПП На основании адреса регистрации конкретного пользователя выбирается конкретный ФНС и подставляется его КПП
12 CBC 18210102040011000110 КБК Берется из поля 'cbc' в реестре 'particulars'
13 CATEGORY НАЛОГ НА ДОХОДЫ ФИЗИЧЕСКИХ ЛИЦ В ВИДЕ ФИКСИРОВАННОГО АВАНСОВОГО ПЛАТЕЖА Вид платежа По умолчанию для всех
14 DRAWERSTATUS 13 Статус плательщика По умолчанию для всех
15 ТAXPERIOD МС.06.2020 Налоговый период Подставляется в зависимости от текущего месяца
16 PAYTREASON ТП Назначение платежа По умолчанию для всех
17 LASTNAME ОЛИМОВ Фамилия 'last_name' из профиля пользователя
18 FIRSTNAME ШЕРЗОД Имя 'first_name' из профиля пользователя
19 MIDDLENAME **** Отчество 'middle_name' из профиля пользователя
20 OKTMO 46744000 ОКТМО На основании адреса регистрации конкретного пользователя выбирается необходимый код ОКТМО
21 PAYERIDNUM 7713236 Номер ДУЛ 'dul_number' из профиля пользователя
22 SK=FNSSHK2 SK=FNSSHK2 Специальное обозначение По умолчанию для всех

Наполнение значений для QR кода

к навигации

Данные для наполнения QR кода значениями, которые зависят не от профиля пользователя, а от адреса его регистрации, формируются на основании парсинга этого адреса. Алгоритм описан в задаче. Также в ней приведена ссылка на структуру данных, в которой хранится информация.

Ниже указаны алгоритмы сбора данных для заполнения полей QR кода, логика которых напрямую не зависит от профиля пользователя или поведения мобильного приложения.

| 7 | SUM | 509800 | Сумма платежа, в копейках | Подставляется на основании указанных в МП данных (или по умолчанию) |

Сумма приходит из МП с методом /api/v1/qr_codes, описание по ссылке.

Сумма в QR код записывается строго в копейках.

Это поле по разному заполняется для QR кода для ПФ и для МП (см. ссылку)

| 9 | PAYEEINN | 5024002119 | ИНН получателя платежа | На основании адреса регистрации конкретного пользователя выбирается конкретный ФНС и подставляется его ИНН |

В реестре addresses_list поле ifns_inn, находится через поле address_id, на который идет ссылка в реестре extended_profile.

В задаче описано откуда брать эти данные.

| 11 | KPP | 502401001 | КПП | На основании адреса регистрации конкретного пользователя выбирается конкретный ФНС и подставляется его КПП |

В реестре addresses_list поле ifns_kpp, находится через поле address_id, на который идет ссылка в реестре extended_profile.

В задаче описано откуда брать эти данные.

| 15 | ТAXPERIOD | МС.06.2020 | Налоговый период | Подставляется в зависимости от текущего месяца |

Это поле по разному заполняется для QR кода для ПФ и для МП (см. ссылку)

Данное поле заполняется по масте МС.ХХ.ХХХХ, где:

  • ХХ - порядковый месяца, за который производится оплата
  • ХХХХ - год, за который происходит оплата

При этом, порядковый месяц опеределяется как следующий за текущим в соответствии с полем payment_date_to из реестра next_payment для выбранного пользователя. В данном реестре есть флаг actuality, который определяет текущий период оплаты. За счет того, что платежи могут быть только авансовыми, выбирается именно ближайший будущий месяц.

Например:

current_date = '2020-05-26'
payment_date_to = '2020-06-16'

В этом случае:

ТAXPERIOD = МС.07.2020

| 20 | OKTMO | 46744000 | ОКТМО | На основании адреса регистрации конкретного пользователя выбирается необходимый код ОКТМО |

В реестре addresses_list поле oktmo_number, находится через поле address_id, на который идет ссылка в реестре extended_profile.

В задаче описано откуда брать эти данные.

Отличие в формировании полей QR кода для ПФ и для МП

к навигации

У логики формирования QR кода между МП и ПФ есть два отличия:

  1. В ПФ отсутствует поле SUM, то есть QR формируется без указания конкретной суммы платежа
  2. В ПФ отсутствует поле TAXPERIOD, так как мы не привязываемся к тому, за какой период платит пользователь

Формирование QR кода для печатной формы

к навигации

Метод /api/web/v1/qr_codes вызывается в момент формирования печатной формы, в качестве ответа который присылает ссылку на картинку с QR-кодом для указанного пользователя:

{
  "image_url": "http://topcontrol-dev0.s3.amazonaws.com/gb_profile/1584606189.png"
}

Наименование файла хранится в реестре gb_profile в поле qr_code_images.

Размер картинки QR-кода не должен превышать примерно 3*3 см, так как иначе ряд банкоматов не сможет обрабатывать данный код в силу того, что он не будет помещаться в рамки сканера.

Сам файл физически хранится в сторадже и за счет прямой ссылки на него вставляется в ПФ и выводится уже на печать.

Ссылка формируется благодаря источнику данных https://emc.lbdp.io/administration/report_source/174

Настройка ПФ происходит в рамках базового функционала.

Также этип ПФ используются для Массовой печати паролей пользователей.

Формирование QR-кода в мобильном приложении

к навигации

Метод /api/v1/next_payment отправляет в МП следующие данные:

{
   "payment_date" - дата следующего платежа
   "payment_sum" - плановая сумма по умолчанию
}

Данные строятся на основании реестра next_payment, который заполняется автоматически при импорте пользователей.

Когда ИГ запрашивает формирование QR-кода, первым делом ему отображается диалоговое окно, где пользователь может или подтвердить сумму payment_sum из /next_payment или указать ту, что его интересует.

В рамках метода /api/v1/qr_codes, МП отправляет на сервер о том, на какую сумму сформировать текст для QR-кода. Это или payment_sum из метода /next_payment или сумма, указанная пользователем.

body
{
  "amount": 5000
}

и в ответ приходит сообщение типа, в котором в тексте QR-кода учитываются отправленные ранее данные:

{
  "id": 6,
  "qr_code_text": "ST00011|NAME=УФК ПО МОСКОВСКОЙ ОБЛАСТИ|PERSONALACC=401018..."
}

По итогам закрытия окна QR-кода (завершение сессии), МП отправляет данные по расположению пользователя в момент просмотра и также дата/время когда окно было закрыто в рамках метода /api/v1/qr_codes/{id}

{
  "closed_at": "2020-05-25T11:11:39.148Z",
  "location": "0020000001000010e64042cb9018e75793404be6f8e7ddca4b"
}

В поле location заносится место, где пользовать просматривал QR-код. Фиксируется исходная точка. Если пользователь сместился больше, чем на 50 метров от исходной точки, координаты дополняются и так до тех пор, пока экран не будет закрыт. Расширенное описание поведения МП при формировании Qr-кода по ссылке.

Обработка QR кода на бэке

к навигации

Сумма в QR код записывается строго в копейках.

В рамках метода /api/v1/qr_codes сервер получает от МП сумму в рублях, преобразует в копейки и подставляет в текст QR-кода.

После получения запроса на формирование QR-кода в реестр qr_history сервер заносит запись о новом запросе, куда складывает сумму платежа уже в рублях, а также текст сформированного QR-кода, где сумма указана в копейках. Этот реестр используется как источник данных для экрана истории транзакций в мобильном приложении.

В реестре qr_field хранится раскладка каждой записи из qr_history с указанием какие значения для какого поля QR-кода были использованы. В этом реестре сумма указывается в копейках.

В реестры qr_history и qr_field вносятся данные по сформированным QR-кодам только из мобильного приложения.

Формирование QR-кода для печатных форм описано в разделе

Набор полей, из которых состоит QR-код захардкожен.

Clone repository
  • Home
  • Алгоритм формирования QR кода
  • Массовая печать паролей
  • Обработка импортируемых файлов
  • Поиск данных по ОКТМО и ИФНС в соответствии с адресом ИГ
  • Раздел "Создание пользователей" (новый)
More Pages

New Wiki Page

Tip: You can specify the full path for the new file. We will automatically create any missing directories.