Загрузка данных


Раздел Пользователи - вкладка Список всех пользователей - функциональная кнопка Реестр квалифицированных пользователей.

При нажатии запускается documents, метод https://admin.dev.dfau.ru/rest/core/v1/documents_generator/documents:

payload 
{document_name: "register_of_qualified_investors"}
.

 

Необходимо в выгружаемой отчетной форме исправить значение поля "Дата внесение записи о лице в реестр" следующим образом:

Источником данных о квалификации инвесторов является таблица investor-registry.applications.
Для каждого пользователя фильтруются записи из таблицы:
Если записи не найдены, пользователь исключается из отчета.
Если записи найдены, проверяются даты записей.
Отбираются только те записи, дата которых (a.updated_at или при ее отсутствии created_at) меньше или равна дате формирования отчета.
Проверяется статус согласования, отбираются только те записи, для которых status ='approved'.
Проверяются типы отфильтрованных записей.
Если найдены только записи с типом ‘inclusion’ (включение в реестр квалифицированных пользователей), пользователь включается в отчет.
Если найдены несколько записей с различным статусом, проверяется наиболее актуальная (наиболее свежая и близкая к дню формирования отчета) из них по дате.
Если наиболее актуальная запись имеет статус ‘inclusion’ (включение в реестр квалифицированных пользователей), пользователь включается в отчет.
Если наиболее актуальная запись имеет статус ‘exclution’ (исключение из реестра квалифицированных пользователей), пользователь исключается из отчета
В качестве даты внесения записи о лице в реестр указывается updated_at или при ее отсутствии created_at.
 

Пример запроса к БД, возвращающий корректные значения
with params as ( select %s::date at time zone 'gmt+03' as end_date)select a.user_uuid as user_id , a.application_type = 'inclusion' as is_qualified , coalesce(a.updated_at, a.created_at) as qualified_updated_at from params, applications a where a.application_type in ('inclusion', 'exclusion') and a.status = 'approved' and coalesce(a.updated_at, a.created_at) = ( select max(coalesce(a2.updated_at, a2.created_at)) from applications a2 where a2.user_uuid = a.user_uuid and a2.application_type in ('inclusion', 'exclusion') and a2.status = 'approved' and coalesce(a2.updated_at, a2.created_at) <= params.end_date );