Фінансова автоматизація · MVP
Автоматизація виписок
Керований конвеєр: банківські виписки в PDF стають перевіреними записами у Finmap, без дублів.
По одному рядку
PDF з банку — це ще не дані
Рядок виписки — це дата, сума й абзац, який банк написав сам для себе. Раніше з цього робили запис руками, щомісяця. Виберіть рядок і подивіться, що з ним робить конвеєр.
Виписка, як її вигрузили
Виберіть рядок
Що отримує Finmap
Один вхідний рядок, дві операції
1 рядок → 2 операції- Рахунок
- Основний · UA…3099
- Сума
- 35 000.00 UAH
- Категорія
- Юридичні послуги
- Контрагент
- Meridian Foods
- Зовнішній id
- …7c4a1f:main
- Рахунок
- Основний · UA…3099
- Сума
- 7 000.00 UAH
- Категорія
- ПДВ
- Проєкт
- ПДВ
- Зовнішній id
- …7c4a1f:pdv
- ПДВ — це рівно одна шоста від суми з податком, тому дві суми ніколи не розходяться на округленні.
- Ділить за рахунком, а не за формулюванням: рядок, який забув згадати ПДВ, розділять теж.
Переказ. Прибутку він не торкається
1 рядок → 1 переказ- Звідки
- Основний · UA…3099
- Куди
- Депозит · UA…1543
- Сума
- 120 000.00 UAH
- Вплив на місяць
- Немає
- Обидва IBAN є в реєстрі власних рахунків, тому це переказ ще до будь-якої категорії.
- Руками це два записи, витрата й дохід, — і місяць виглядає активнішим, ніж був.
Витрата, віднесена на того, кому заплатили
1 рядок → 1 витрата- Рахунок
- Основний · UA…3099
- Сума
- 36 250.00 UAH
- Категорія
- Оплата праці
- Працівник
- Петренко І. М.
- Правило на корінь «зарплат» ставить категорію оплати праці, хай як банк написав решту.
- Імʼя зводять зі списком працівників із Finmap, тому витрата лягає на конкретну людину.
Витрата, і банк уже названий
1 рядок → 1 витрата- Рахунок
- Основний · UA…3099
- Сума
- 1 480.00 UAH
- Категорія
- Банківські послуги
- Контрагент
- Банківська комісія
- Шість написань банківської комісії лежать у файлі відповідностей, і всі ведуть в одну категорію.
- Правила живуть у файлі YAML, а не в коді, тому нове правило — це зміна на два рядки.
Не витрата. Гроші, відкладені набік
1 рядок → 1 переказ- Звідки
- Основний · UA…3099
- Куди
- Рахунок ПДВ
- Сума
- 54 300.00 UAH
- Знайдено в
- Плані платежів · 42%
- Плановий платіж зводять за датою, сумою, контрагентом і юрособою.
- ПДВ — це відкладені, а не витрачені гроші, тому це переказ; збіг на 42% чекає на людину в чернетці.
Воно доходить — і саме каже, що не знає
1 рядок → 1 витрата, з позначкою- Рахунок
- Основний · UA…3099
- Сума
- 9 750.00 UAH
- Категорія
- Резервна
- Позначка
- unmapped
- Ні правила на ключове слово, ні податку, ні плану платежів, ні знайомого контрагента.
- Воно все одно доходить — у резервну категорію й з позначкою unmapped, тому лежить за один фільтр, а не втрачене.
Свій розбірник на кожен формат банку: Kredo, Raiffeisen, операційний експорт і зарплатна відомість Mono, а за ними — загальний резервний. Суми, імена й закінчення рахунків тут умовні.
Чому не страшно натиснути двічі
Імпортуйте ту саму виписку знову. Нічого не подвоїться
Період продовжили на два дні, хтось запустив із другої машини, файл затягнули двічі — руками кожен із цих випадків подвоює місяць, і знаходять це аж через тижні. Тут не подвоїться нічого, бо кожна операція несе власну ідентичність.
Імпортувати знову
- 01Перший імпорт28 березня, виписка в тому вигляді, який був
- Прочитано рядків
- 16
- Уже є
- 0
- Записано
- 16
Записано шістнадцять операцій.
- 02Повторно вигружений файл30 березня, той самий період плюс два дні
- Прочитано рядків
- 32
- Уже є
- 16
- Записано
- 16
Перетин розпізнано. Записано лише нові дні.
- 03Той самий файлЗатягнули знову, навмисно
- Прочитано рядків
- 32
- Уже є
- 32
- Записано
- 0
Прочитано повністю, не записано нічого.
- 01Усередині партіїДва експорти в одній папці перетинаються. Другу копію позначають ще до першого запиту.
- 02Проти того, що вже відправилиКожна опублікована операція тримає ідентичність локально, з датою відправлення, — тому повторний період ловлять і датують.
- 03На дальньому кінціЯкщо обидва проґавили, Finmap відмовляє самій ідентичності — і цю відмову читають як успіх, а не помилку.
Десять речей, зведених у хеш. Той самий рядок — та сама ідентичність, назавжди.
- 01банк
- 02IBAN рахунку
- 03час проведення
- 04сума
- 05валюта
- 06напрям
- 07IBAN контрагента
- 08номер документа
- 09призначення
- 10версія правил
IBAN і формулювання спочатку нормалізують, тому пробіли й регістр не зроблять із одного рядка два.
Кожен запуск перевіряє ще й власну арифметику виписки — початковий залишок плюс усі рухи проти кінцевого — і розбіжність стає попередженням на чернетці, а не блокуванням.
Що змінилося
Та сама виписка: набрана руками й імпортована
Банк в обох випадках надсилає той самий PDF. Змінюється кількість рішень, які людина ухвалює руками, і те, що станеться, коли файл прийде двічі.
| Що змінюється | РукамиПо одному рядку, у Finmap | Через конвеєрСпочатку чернетка, тоді публікація |
|---|---|---|
| Завести виписку | РукамиКожен рядок вичитують із PDF і перебивають — для кожного рахунку й кожного місяця | Через конвеєрPDF розбирають, і кожен рядок приходить чернеткою операції |
| Вирішити, що це за рядок | РукамиКатегорію вибирають з памʼяті, і по-різному залежно від того, хто це робить | Через конвеєрВирішують правила на ключових словах, розпізнавання податків і план платежів — і кожне каже, чому |
| Гроші між своїми рахунками | РукамиЗаводять двічі, витратою й доходом, і місяць виглядає активнішим, ніж був | Через конвеєрРозпізнають як переказ за реєстром рахунків, тому він не доходить до прибутку |
| ПДВ усередині платежу клієнта | РукамиВиділяють руками в кінці кварталу — або не виділяють зовсім | Через конвеєрОдин вхідний рядок стає доходом і рядком ПДВ: пʼять шостих і одна шоста |
| Той самий період імпортували двічі | РукамиПодвоїлося, і через тижні це знайшов той, хто звернув увагу на залишок | Через конвеєрЛовлять на трьох рівнях, ще нічого не записавши, і показують дату оригіналу |
| Перевірити, що нічого не втратили | РукамиКінцевий залишок звіряють руками, коли є час | Через конвеєрПочатковий плюс рухи звіряють із кінцевим на кожному запуску |
| Рядок, на який ні в кого немає правила | РукамиВгадують або відкладають у нотатку, яка переживає місяць | Через конвеєрПотрапляє в резервну категорію з позначкою unmapped і чекає на людину |