Навигация по странице
Сборка QR кода
Ниже приведены поля из которых состоит QR код. В качестве разделителя между полями используется символ '|', дополнительные ковычки никакие не используются.
В графе "Пример данных" указаны возможные значения, которые будут приходить на вход. В том случае, если напротив параметра указано, что "По умолчанию для всех", значит указанное значение в "Пример данных" используется для всех QR кодов без исключения.
По ряду параметров после таблицы указаны уточнения.
Сейчас QR код собирается в двух местах для решения двух задач:
- Формирование картинки для подстановки в печатную форму;
- Передача текста 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 кода между МП и ПФ есть два отличия:
- В ПФ отсутствует поле SUM, то есть QR формируется без указания конкретной суммы платежа
- В ПФ отсутствует поле 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-код захардкожен.