Дата зміни інформації:

Куриленко О. М. “ВИКОРИСТАННЯ SAS ENTERPRISE GUIDE ДЛЯ ВИЯВЛЕННЯ ЗЛОВЖИВАНЬ ПІД ЧАС ДЕРЖАВНИХ ТЕНДЕРІВ”

 

ІV курс, Інститут прикладного системного аналізу

Терентьєв О. М.,  к. т. н.

Національний технічний університет України

«Київський політехнічнийіІнститут імені Ігоря Сікорського»

 

Дана наукова робота присвячена опису методу виявлення зловживань під час проведення тендерів, а саме,  виявлення використання «сплячої» юридичної особи під конкретний державний тендер. Виявлення таких махінацій має наслідком зменшення грошових потоків, що «розчиняються» в тимчасових юридичних осіб. Алгоритм розв’язку задачі, оснований на тому, що для кожного тендеру з таблиці тендерів визначається сума доходу від наданих послуг юридичною особою-переможцем тендеру за останні X місяців (в даному випадку – 30 місяців) і знайти коефіцієнт співвідношення суми виграного тендеру та середньої суми доходу від наданих послуг за останні Х місяців. Якщо цей коефіцієнт перевищує певне встановлене значення Y (в нашому випадку – 2.5), то вносимо цей тендер в групу тендерів з ризиком, що державні кошти були перераховані «сплячій» юридичній особі, яку було використано конкретно під даний державний тендер.

Вхідними даними є відкрита інформація щодо державних закупівель (тендерів) за період з 01.01.2014 по 31.12.2016 рік, надана Національним антикорупційним бюро України. А саме, таблиця податкових накладних (ЄРПН), що містить 8 полів та 169 записів та таблиця тендерів, що містить 38 полів та 970 записів. В ході виконання дослідження використано середовище SAS Enterprise Guide, мову SAS Base, SAS SQL та SAS Macro.

Першим кроком є опрацювання вхідної інформації: створення допоміжних наборів даних TENDERS (таблиця тендерів) та ERPN (реєстр податкових накладних) в (тимчасовій) бібліотеці WORK.

В WORK.TENDERS Minus_Date = Дата укладання договору (з переможцем тендеру) – 30 місяців. В макрозмінну num_obs записуємо кількість записів в наборі даних WORK.TENDERS. Фрагмент коду програми має вигляд:

DATA WORK.ERPN;

SET TEST.ERPN END=LastRec;

FORMAT Date_registered : DATE9.;

RUN;

DATA WORK.TENDERS (DROP= TEMP);

SET TEST.Tenders END=LastRec;

Minus_Date = intnx(‘day’, intnx(‘month’, ‘Дата укладання до’n, -&months.), day(‘Дата укладання до’n)-1);

FORMAT Minus_Date : DATE9.;

FORMAT ‘Дата укладання до’n : DATE9.;

rownum = _N_;

IF LastRec THEN DO;

  call symput(‘num_obs’, strip(input(rownum, $CHAR1000.)));

END;

TEMP = TRANWRD(‘Ціна договору’n, ‘,’, ‘.’);

SUM_TENDER = input(TEMP, BEST.);

RUN;

%put num_obs = &num_obs.;

Далі створюємо в бібліотеці TEST порожній набір даних для наступного його заповнення в процесі виконання макроциклу. Це і буде фінальним набором по закінченню виконання даної програми:

DATA TEST.FINAL_RESULT;

SET WORK.Tenders (OBS=0);

SUM_MONEY_&months. = 0;

AVG_MONEY_&months. = 0;

Coefficient = 0;

RUN;

Виконуємо макроцикл, обробляючи набір даних WORK.TENDERS послідовно по рядках:

%MACRO CYCLE;

%DO J=1 %TO &num_obs.;

%let J=&J.;

/*Виводимо в макрозмінну Unique_identifier значення ‘Код ЄДРПОУ перемо’n з поточного рядка.*/

PROC SQL NOPRINT;

     SELECT ‘Код ЄДРПОУ перемо’n INTO: Unique_identifier

     FROM WORK.TENDERS

     WHERE rownum=&J.;

QUIT;

%let Unique_identifier = &Unique_identifier.;

%put Unique_identifier = &Unique_identifier.;

/*Виводимо в макрозмінну Dat_start значення ‘Minus_Date’n з поточного рядка.*/

PROC SQL NOPRINT;

     SELECT ‘Minus_Date’n INTO: Dat_start

     FROM WORK.TENDERS

     WHERE rownum=&J.;

QUIT;

%let Dat_start = &Dat_start.;

%put Dat_start = &Dat_start.;

/*Виводимо в макрозмінну Dat_end значення ‘Дата укладання до’n з поточного рядка.*/

PROC SQL NOPRINT;

     SELECT ‘Дата укладання до’n INTO: Dat_end

     FROM WORK.TENDERS

     WHERE rownum=&J.;

QUIT;

%let Dat_end = &Dat_end.;

%put Dat_end = &Dat_end.;

/*Виводимо в макрозмінну SUM_MONEY суму по полю ‘Sum_with_VAT’n   з  набору даних TEST.ERPN для тих рядків, значення ‘Date_registered’n яких потрапляють в потрібний інтервал з    months місяців в звіротньому відліку відліку від дати укладання договору (з переможцем тендеру).*/

PROC SQL NOPRINT;

SELECT SUM(‘Sum_with_VAT’n) INTO: SUM_MONEY

FROM TEST.ERPN

WHERE ‘Date_registered’n >= input(“&Dat_start.”, DATE9.) AND

           ‘Date_registered’n <= input(“&Dat_end.”, DATE9.) AND ‘EDRPOU_seller’n = input(“&Unique_identifier.”, BEST.);

QUIT;

%put SUM_MONEY = &SUM_MONEY;

%let SUM_MONEY = &SUM_MONEY.;

/*Створюємо допоміжний набір даних, в якому міститься лише поточний рядок і дописані значення SUM_MONEY, AVG_MONEY та      Coefficient.*/

DATA WORK.HELP;

SET WORK.TENDERS;

WHERE rownum = &J.;

SUM_MONEY_&months. = &SUM_MONEY.;

AVG_MONEY_&months. = &SUM_MONEY./&months.;

Coefficient = SUM_TENDER/AVG_MONEY_&months.;

RUN;

/*Додаємо допоміжний набір WORK.HELP (тобто поточний рядок з      обчисленими новими характеристиками) в фінальний набір даних      TEST.FINAL_RESULT.*/

PROC APPEND BASE=TEST.FINAL_RESULT DATA=WORK.HELP;

RUN;

%END;

%MEND;

%CYCLE;

Закінчивши виконання макроциклу, видаляємо непотрібні допоміжні набори даних за допомогою PROC DATASETS:

PROC DATASETS LIBRARY=WORK NOPRINT;

DELETE ERPN TENDERS HELP;

QUIT;

RUN;

Видаляємо з фінального набору даних  TEST.FINAL_RESULT непотрібні допоміжні стовпці rownum і Minus_Date:

DATA TEST.FINAL_RESULT;

SET TEST.FINAL_RESULT (DROP=rownum Minus_Date);

RUN;

За допомогою «Констуктора запитів» обчислюємо новий рядок RISK, що міститиме значення 0, якщо Coefficient не перевищує 2.5 і 1 в іншому випадку, для формування нового стовпця в Конструкторі запитів встановлюємо, що, до вихідної таблиці увійдуть всі стовпці з таблиці TEST.FINAL_RESULT, додаємо їх, далі обираємо функцію IFN, що повертає числове значення для виразу базуючись на тому, чи правдивий вираз, чи ні, чи дає на виході значення missing. Задаємо формат для нового стовпця BEST1, і – процес завершено.

Описана задача є складовою іншого проекту, який активно використовується для запобігання корупційним діянням. Завдяки використанню розробленого програмного забезпечення було виявлено юридичні особи-переможці державних тендерів, що входять до групи ризику і підлягають ретельній перевірці.

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ

  1. Терентьев А. Н. SAS Base: Основы программирования / Терентьев А. Н., Домрачев В. Н., Костецкий Р. И. — Киев : Эдельвейс, 2014. — 303 с. :
  2. Susan J. Slaughter The Little SAS Book for Enterprise Guide 4.1. Cary, NC, USA.: SAS Institute Inc., 2006 – 586 с.
  3. SAS Documentation. Enterprise Guide [Електронний ресурс] : – Режим доступу – http://support.sas.com/documentation/onlinedoc/guide/
  4. SAS Product Documentation[Електронний ресурс]: – Режим доступу http://support.sas.com/
  5. SAS On Demand for Academics[Електронний ресурс]: – Режим доступу https://odamid.oda.sas.com/

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Введіть цифри, що зображені у квадратах *