Python, SQL

Проверяем работу программного робота, встроенного в процесс кредитования

Время прочтения: 3 мин.

В современном мире компании активно внедряют системы, автоматизирующие бизнес-процессы. В банковской сфере это связано с увеличением объемов кредитования, изменением внешней среды и ростом количества кредитных продуктов.

Разумеется, что перед аудиторами возникает задача- проверить качество работы автоматизированных процессов.

В данной статье мы расскажем, как мы проверяли работу программного робота.

Перед нами стояла задача выявить «западающие» элементы технологии, связанные с принятием решения о выдаче овердрафтного кредита на основании «решения» встроенного в процесс программного робота, и мы запустили проект по проверке данного процесса.

Мы выяснили, что на этапе рассмотрения заявки робот «принимает» положительные решения без должного анализа ряда важных факторов, а именно:

  • наличия двух и более овердрафтных кредитов у компаний одной ГСЗ, чьи денежные потоки пересекаются;
  • сегмент клиента на основании выручки если классификация заемщика по сегменту не соответствует закону РФ;
  • ограничения, связанные с нормами федерального закона 115-ФЗ (осуществление клиентом операций, не имеющих очевидного экономического смысла/носящих запутанный или необычный характер).

Основными проблемами, с которыми мы столкнулись в процессе реализации проекта, являлись:

1.  большой объем данных,

2. необходимость проведения анализа большого количества текстовых файлов.

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

  • SQL Server 2014 Management Studio
  • SQL запросы к БД-источникам данных.

Для выгрузки информации потребуются следующие таблицы:

  • UL – данные по организациям, в т.ч. заемщикам (id, ИНН, наименование).
  • Account – данные по финансовым счетам (id счета, номер счета, id клиента).
  • Opers – операции по счетам, выписка (id операции, id счета, дата).
  • Docs – платежные документы по операциям (id платежного документа, сумма, назначение платежа, плательщик, получатель).

Формирование списка заемщиков с датами выдачи кредитов и счетами:

with data as (
select ИНН_1 as inn, cast('20200101' as date) as dt union 
select ИНН_2 as inn, cast('20200205' as date) as dt union 
...
select ИНН_N as inn, cast('20200306' as date) as dt 
) 
select inn, dateadd(month,-3,dt) dt1, dt date_kd, dateadd(month,3,dt) dt2, Account.id id_acc
inner join UL on UL.inn=data.inn
inner join Account on Account.client=UL.id and Account.Acc like '40%'
into [inn_dt_acc]
from data

Формирование списка операций по счетам заемщиков за 3 месяца до выдачи и 3 месяца после за исключением кредитных операций:

select [inn_dt_acc].*, [opers].*, [docs].Date dt_oper, [docs].Acc_dt, [docs].Acc_kt, [docs].Sum, [docs].Text
into [inn_opers]
from [inn_dt_acc] 
inner join [opers] on opers.[Account]= [inn_dt_acc].id_acc 
			and [opers].C_Date>=[inn_dt_acc].dt1
			and [opers].C_Date< [inn_dt_acc].dt2
inner join [docs]  on [docs].id=[opers].doc
where not (	
(  [docs].Text like '%перечислени%' 
or [docs].Text '%выдач%' 
or [docs].Text like '%предоставлени%' 
or [docs].Text like '%погашени%'
) and ([docs].Text like '%кредит%' or [docs].Text like '%займ%')
	or [docs].Text like '%средств%депоз%сертиф%' 
	or [docs].Text like '%возврат%' 
	or [docs].Text like '%овер%'
)

Формирование итоговых сумм денежных потоков заемщиков:

select inn, c_name, dt1, date_kd, dt2
, sum(case when debet=1 and oper_date<date_kd then Sum else 0 end) sum_dt_do
, sum(case when debet=0 and oper_date<date_kd then Sum else 0 end) sum_kt_do
, sum(case when debet=1 and oper_date>=date_kd then Sum else 0 end) sum_dt_posle
, sum(case when debet=0 and oper_date>=date_kd then Sum else 0 end) sum_kt_posle
, case when debet=1 then inn_kt else inn_dt end inn2
, case when debet=1 then org_kt else org_dt end org2
from [inn_opers]
group by inn,c_name,dt1,date_kd,dt2,case when debet=1 then inn_kt else inn_dt end, case when debet=1 then org_kt else org_dt end

Вторая проблема была решена путем использования скриптов на Python. При помощи данного инструмента из автоматизированных систем были извлечены необходимые документы и приведены к одному формату. С помощью библиотеки OpenCV производился поиск фрагмента по шаблону, был использован «метод регулярных выражений», который помог из текста выбрать необходимую информацию для сверки с данными, отраженными в АС. Подробнее о практике использования данного инструмента можно прочитать на нашем сайте в статьях: «Небольшие лайфхаки по выводу данных в Python«, «Извлекаем таблицы из PDF-файлов«.

Вот так, благодаря нашему проекту бизнесу были даны рекомендации по устранению уязвимости работы робота, которые были приняты в ит-разработку.

Советуем почитать