Блог / Імпорт

Що насправді відбувається, коли ви імпортуєте виписку

Вивантажити виписку — це чотири кліки. Перетворити її на записи, яким можна довіряти, — це п'ять рішень, і кожен інструмент, який робить це погано, помиляється в тих самих п'яти місцях.

Нерівні сирі рядки виписки ліворуч проходять крізь п'ять підписаних точок ухвалення рішень і виходять праворуч чистими категоризованими записами.

«Просто імпортуйте виписку» — найкоротше речення в програмах для особистих фінансів і найменш чесне. Файл завантажується за секунди. Те, що відбувається далі, вирішує, чи отримаєте ви робочий набір записів, чи купу рядків, які ви виправлятимете цілі вихідні, а потім кинете.

Ми вже зробили імпортери приблизно для восьми фінансових установ — у форматах CSV, XLS, XLSX і PDF, трьома мовами й двома абетками. Цікаво, як мало відрізняються проблеми. Формати різняться шалено. П'ять рішень завжди ті самі.

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

Файл — це не таблиця

Здавалося б, банківська виписка — це рядки й колонки. Часто ні.

Реальні приклади з реальних вивантажень, усі зараз у роботі: CSV у кодуванні Windows-1251 замість UTF-8, тож кожне кириличне ім'я приходить кракозябрами, якщо не визначити кодування до розбору. Файл із розширенням .xls, який насправді є HTML із таблицею всередині. XLSX, де рядок заголовків — четвертий, бо рядки 1–3 займають логотип, назва та діапазон дат. PDF-довідка, де суми вирівняні праворуч у моноширинній колонці, і єдиний спосіб відрізнити суму від залишку — горизонтальна позиція на сторінці.

Далі — розкладка колонок, яка змінюється залежно від установи, продукту, а іноді й від мови, обраної на момент вивантаження. Особисте та бізнесове вивантаження того самого банку можуть не мати жодної спільної назви колонки.

Деталь, яка з'їдає пів дня

Суми. Виписка може містити суму як одну колонку зі знаком, або як окремі колонки дебету й кредиту, або як суму без знака плюс слово-напрямок в іншій колонці — місцевою мовою. Роздільником дробової частини може бути кома. Роздільником тисяч — пробіл або нерозривний пробіл, які виглядають однаково, але є різними символами. Схибте тут трохи — і ви не отримаєте помилки: ви отримаєте число, більше в тисячу разів, в одному рядку з чотирьохсот.

Тому імпортер виписок — це не читач CSV. Це парсер під конкретну установу, який знає форму її вивантаження, плюс запасний варіант для всього іншого. Розумного універсального рішення тут немає, а інструменти, які його обіцяють, зазвичай просять вас щоразу самостійно зіставляти колонки.

Як вирішити, що це та сама операція вдруге

Саме це рішення відділяє інструменти, які лишаються, від тих, які видаляють.

Ви імпортуєте січень. У лютому імпортуєте знову — і, оскільки у вікні вивантаження типово стояло «останні 90 днів», у файлі є й січень. Наївний імпорт подвоює ваш січень. Зробіть так одного разу з трьома місяцями історії — і отримаєте безлад, який надійно лікується лише видаленням усього й початком спочатку.

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

Складний випадок — коли її немає, а це звична річ у вивантаженнях особистих рахунків. Тоді ідентичність доводиться синтезувати з самого рядка: час, плюс картка чи рахунок, плюс сума зі знаком, плюс залишок після операції. Саме останнє поле робить ключ надійним, бо дві справді різні кави о 09:14 на однакову суму залишать різні поточні залишки.

4,551
Рядків із 14 файлів виписок · 0 створених дублікатів
Нові, категоризовані автоматично3,231 Уже імпортовані, пропущені774 Збіглися з рядком, внесеним вами364 Потребують рішення182
Форма реального підсумку імпорту. Важливе тут не перше число, а четверте. Імпортер, який ніколи нічого не питає, — це імпортер, який вгадує.

Є тонша версія тієї самої проблеми. Частина рядків у файлі описує рухи грошей, які ви вже внесли руками: оплата рахунку, яку ви записали, коли клієнт сказав, що надіслав кошти; переказ між власними рахунками, зафіксований з обох боків. Тепер виписка несе банківську версію події, яка у вас уже є. Перевірка дублікатів за референсом установи цього не спіймає, бо у вашого рядка, внесеного руками, референсу ніколи не було.

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

Імпортер, який ніколи нічого не питає, не розумніший за інші. Він ухвалює ті самі неоднозначні рішення мовчки, а які саме — ви дізнаєтеся місяців за чотири.

Про автоматизацію, яка не визнає невизначеності

Два рядки, одна подія

Перекажіть гроші між власними рахунками — і це покажуть обидві виписки. Імпортуйте обидві, і ваші записи стверджуватимуть, що ви витратили ці гроші й окремо їх отримали: сплеск витрат і сплеск доходів в одному місяці, жодного з яких не було.

Переказ — це одна подія з двома частинами, і зберігати його треба саме так: пов'язані рядки зі спільною групою, виключені з підсумків витрат і доходів, а коли частини в різних валютах — ще й третій рядок для втрати на конвертації, щоб обидва залишки сходилися без підгонки.

Незручність у тому, що імпортер часто не може розрізнити. «Платіж на ACME LTD» може бути постачальником, якому ви платите щомісяця, а може бути вашою ж компанією. Чесний підхід — вимагати, щоб ви сказали це один раз для кожного контрагента, і запам'ятати відповідь назавжди. Вгадування типового значення тут — це те, як інструмент починає ховати реальні витрати всередині «переказів», а це гірше, ніж запитати.

Категоризація за правильним вхідним даним

Більшість імпортерів категоризують, шукаючи текст в описі. Працює це рівно так, як можна очікувати для поля, що містить SumUp *THE COFFEE, IZ *COFFEE LDN і PAYPAL *COFFEEROASTE.

У більшості виписок є краще джерело, яке лежить без діла. Карткові операції несуть код категорії продавця — чотиризначне число, яке платіжні мережі призначають торговцю. 5812 — заклади харчування. 5411 — продуктові магазини. 4121 — таксі. Його призначає банк-еквайр, а не маркетинговий відділ продавця, і він не змінюється під час ребрендингу.

Правила, побудовані на кодах продавця, тримаються в часі так, як текстові правила не тримаються. Текстовий пошук теж має свою роботу — для банківських операцій без коду й для конкретних продавців, яких ви хочете відділити від їхньої категорії, — але він має бути другим входом, а не першим.

Рядки, яких ви більше не хочете бачити

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

Те саме стосується кожного іншого виправлення під час імпорту. Якщо ви кажете інструменту, що цей контрагент — переказ, або що цей опис означає цей підтип, ця відповідь має бути останнім разом, коли вас про це питали. Імпортер, який не накопичує ваші рішення, коштує однакової кількості роботи щомісяця, вічно, — а це рівно та точка, у якій люди повертаються до того, щоб не вести облік узагалі.

На що дивитися

Рішення Погана відповідь Добра відповідь
Читання файлу «Зіставте колонки» щоразу Знає формат установи, включно з кодуваннями
Пошук дублікатів Лише дата + сума Референс установи або синтезований ключ із залишком
Рядки, внесені руками Ігноруються; ви отримуєте обидва Зіставлені, підтверджені вами, референс проставлено
Перекази Вгадуються з опису Питають раз на контрагента, запам'ятовують
Категоризація Текст опису Спершу код продавця, потім текст
Ваші виправлення Повторюються щомісяця Збережені як правило, прив'язане до рядка

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

Побачте власне число, а не чуже.

Імпортуйте виписку, додайте рахунки — і за вечір матимете справжню суму капіталу. Шість місяців безкоштовно, картка не потрібна.

Почати безкоштовно
6 місяців безкоштовно · без карткиПочати безкоштовно