Транзакції, що надаються порталом використання публічних коштів мають наступні поля:
Ідентифікатор | Назва |
---|---|
trns_id | № трансакції |
doc_datd | складання |
msrprd_date | оплата |
doc_nazn | призначення платежу |
doc_sq | сума |
payer_nm | платник |
payer_edrpou | код ЄДРПОУ платника |
payer_mfo_knw_id | МФО банку платника |
payer_mfo_nm | Банк платника |
recipt_nm | одержувач |
recipt_edrpou | код ЄДРПОУ одержувача |
recipt_mfo_knw_id | МФО банку одержувача |
recipt_mfo_nm | Банк одержувача |
Для забезпечення таємниці персональних даних, дані, що публікуються порталом, піддаються наступним правилам фільтрації:
- Фільтрація операцій звичаних установ: здійснється лише якщо установа при реєстрації фінансових зобов’язань поставила відмітку про наявність персональних даних.
- Фільтрація операцій фондів чи виконавчої служби, які проводяться без реєстрації фінансових зобов’язань, проводиться автоматично.
- Під час застосування фільтрації усі послідовності цифр довжиною від 4 символів замінюються на "х". На жаль, помилково на "x" замінюються коди бюджетних класифікацій та роки.
- Фільтрація ЄДРПОУ ФОПів здійснюється безумовно. Усі 10 цифр коду замінюються на "x".
(записано зі слів учасника проекту Edata)
Для аналізу використовуймо мову R:
transactions <- read.csv('transactions.csv')
Файл transactions.csv
містить трансакції з номерами 373881-495880, що відповідають наступним датам:
> levels(transactions[,c("msrprd_date")])
[1] "14.09.2015" "15.09.2015" "16.09.2015" "18.09.2015"
Згрупувавши за датою можна визначити об’єм транзакцій за день:
> data.frame(table(transactions$msrprd_date))
Var1 Freq
1 14.09.2015 28339
2 15.09.2015 81285
3 16.09.2015 12375
4 18.09.2015 1
Бачимо, що на перший день роботи spending.gov.ua значно менше транзакцій, ніж на наступний день. Це може свідчити про те, що сайт запущено у другій половині дня. Чи про те, що у цей день був менш нагруженим. У будь-якому випадку ми не можемо нічого сказати про середню кількість сплат за день чи про якусь динаміку. Можна лише сказати про порядок.
Бачимо, що за день здійснюється порядку 100 000 операцій.
Тут можна помітити аномалію: "18.09.2015"
> transactions[transactions$msrprd_dat=="18.09.2015",]
trns_id doc_datd msrprd_date
96303 470183 15.09.2015 18.09.2015
doc_nazn
96303 Повернення надлишково перерахованих коштів за брухт зг.листа 115/09-15 від 03.09.xxxx
payer_nm recipt_nm doc_sq payer_edrpou
96303 ФСС від нещ. випадків (Доходи) ТОВ "УКР-ЄВРО" 310.5 25939770
recipt_edrpou recipt_mfo_knw_id recipt_mfo_nm
96303 30743156 315405 ХМ.Ф.ЗАТ КБ"ПРИВАТБАНК" М.ХМЕЛЬНИЦЬКИЙ
payer_mfo_knw_id payer_mfo_nm
96303 815013 ГУДКСУ у Хмельницькiй областi
Тобто, якщо транзакціям присвоюються послідовні номери, то дати оплати повинні постійно зростати. Тут же ми бачимо, что транзакція із датою 18.09.2015 потрапила поміж транзакцій з датою 15.09.2015, що може свідчити про помилку набору чи про редагування даних.
Транзакції, що надаються - це виключно платежі Державної казначейської служби та їх філіалів. Тобто, це усі ті трансакції, де банк платнику - ДКСУ:
payer_mfos <- transactions[,c("payer_mfo_knw_id", "payer_mfo_nm")]
levels(payer_mfos[,2])
[1] "" "ГУДКСУ в Iвано-Франкiвськiй області"
[3] "ГУДКСУ в Одеській області" "ГУДКСУ у Вінницькій області"
[5] "ГУДКСУ у Волинській області" "ГУДКСУ у Дніпропетровській області"
[7] "ГУДКСУ у Донецькiй областi" "ГУДКСУ у Житомирській області"
[9] "ГУДКСУ у Закарпатській областi" "ГУДКСУ у Запорiзькiй областi"
[11] "ГУДКСУ у Київській області" "ГУДКСУ у Кіровоградській області"
[13] "ГУДКСУ у Луганській області" "ГУДКСУ у Львiвськiй областi"
[15] "ГУДКСУ у Миколаївськiй областi" "ГУДКСУ у м.Києві"
[17] "ГУДКСУ у Полтавській областi" "ГУДКСУ у Рiвненськiй областi"
[19] "ГУДКСУ у Сумській області" "ГУДКСУ у Тернопільській областi"
[21] "ГУДКСУ у Харківській області" "ГУДКСУ у Херсонській області"
[23] "ГУДКСУ у Хмельницькiй областi" "ГУДКСУ у Черкаськiй областi"
[25] "ГУДКСУ у Чернiвецькiй областi" "ГУДКСУ у Чернігівській областi"
[27] "ДКСУ"
Банки одержувачів найрізноманітніші:
recipt_mfos <- transactions[, c("recipt_mfo_knw_id", "recipt_mfo_nm")]
levels(recipt_mfos[,2])
[1] ""
[2] "Test Bank"
[3] "АБ \"КРЕДИТ-ДНІПРО\",Дніпропетровськ "
[4] "АБ \"МЕТАЛУРГ\", М.ЗАПОРІЖЖЯ "
[5] "АБ \"ПОЛТАВА-БАНК\" М.ПОЛТАВА "
[6] "АКБ \"ІНДУСТРІАЛБАНК\" М.ЗАПОРІЖЖЯ "
[7] "АКБ \"ІНТЕГРАЛ\", М.КИЇВ "
[8] "АКБ \"МРІЯ\" "
...
[207] "ХМ.ОУ ВАТ\"Д.ОЩАД.Б.У\" У М.ХМЕЛЬНИЦЬКИЙ"
[208] "ХМ.Ф.ЗАТ КБ\"ПРИВАТБАНК\" М.ХМЕЛЬНИЦЬКИЙ"
[209] "ХОД АППБ \"АВАЛЬ\" М.ХАРКІВ "
[210] "ЧЕРКАС.ОБЛ.ДИР.АППБ\"АВАЛЬ\", М.ЧЕРКАСИ "
[211] "ЧЕРК.Ф.ГРУ ЗАТ КБ ПРИВАТБАНК М.ЧЕРКАСИ"
[212] "ЧЕРНІВЕЦЬКА ФІЛІЯ ЗАТ КБ \"ПРИВАТБАНК\" "
[213] "ЧЕРНІГІВ ОБЛУПР-Я ВАТ \"ДЕРЖ.ОЩАДБАHК\" "
[214] "ЧЕРНІГІВСЬКА ОБЛАСНА ДИР. АППБ \"АВАЛЬ\""
Якщо прискіпливо подивитись, то можна помітити, що деякі дані не є валідними: подекуди не вказано банк чи вказано "Test Bank".
Якщо банк платника не вказано, то усі такі платежі мають подібне призначення:
*;242;xxxx;Перераховано до бюджету коштів з рахунку в СЕА декларація з ПДВ xxxx від 17.08.xxxx;1D8B6F63FEC904D2ExxxxAxxxx
СЕА - система електронного адміністрування податку на додану вартість. Для адміністрування ПДВ в Казначействі відкривається рахунок платника ПДВ. Тому в таких випадках банком можна вважати ДКСУ. МФО, що вказується у таких випадках: 899998.
Якщо не вказано банк одержувача, то можуть бути такі причини:
- Це перерахування платника ПДВ на власний рахунок СЕА
- Одержувачем є банк
- Інші (поки що не відомі причини)
Також є незрозумілим значення "Test bank" у полі назви банку. Можливо, це помилка у довіднику МФО, що використовується у edata. Даному МФО відповідає ПАТКБ "ПРАВЕКС-БАНК". Можливо, даним у полі recipt_mfo_nm
не варто довіряти.
> unique(transactions[transactions$recipt_mfo_nm =="Test Bank",c("recipt_mfo_nm", "recipt_mfo_knw_id")])
recipt_mfo_nm recipt_mfo_knw_id
686 Test Bank 380838
Тим не менш, експортуємо базу МФО задля нормалізації даних. Таким чином можна видалити 2 стовбці та "полегшити" файл на 20%:
Rscript extracts/scripts/extract_mfos.R
Rscript extracts/scripts/normalize.R
ls -lh transactions.csv extracts/*.csv
-rw-rw-r-- 1 john john 16K січ 10 12:28 extracts/mfos.csv
-rw-rw-r-- 1 john john 41M січ 10 12:29 extracts/transactions.csv
-rw-rw-r-- 1 john john 53M січ 10 12:17 transactions.csv
На жаль, у полях "платник" та "одержувач" вказується не назва організації, а назва рахунку. Тому назва отримувача/платника може не співпадати з назвою у реєстрі організацій.
Експортуємо базу ЄДРПОУ задля нормалізації даних. Тим ми зекономимо 15%:
Rscript extracts/scripts/extract_mfos.R
Rscript extracts/scripts/normalize.R
ls -lh transactions.csv extracts/*.csv
-rw-rw-r-- 1 john john 4,0M січ 10 22:05 extracts/edrpou.csv
-rw-rw-r-- 1 john john 16K січ 10 13:57 extracts/mfos.csv
-rw-rw-r-- 1 john john 42M січ 11 09:20 extracts/transactions.csv
-rw-rw-r-- 1 john john 53M січ 10 12:17 transactions.csv
Разом з нормалізацією МФО:
-rw-rw-r-- 1 john john 29M січ 11 09:52 extracts/transactions.csv