Фінансові рахунки та інфраструктура¶
Де зберігаються гроші, через які банки проходять платежі, якими податковими ставками оподатковуються операції.
1. Основні сутності¶
| Модель | Призначення |
|---|---|
Cashbox |
Каса готівкових коштів |
Bank |
Довідник банків-партнерів |
SettlementAccount |
Розрахунковий рахунок (банківський / корпоративна картка) |
TaxRate |
Ставки податків (ПДВ, податок на прибуток) |
2. Cashbox — каса¶
Зберігає готівкові кошти з розбивкою по валютах:
- code / name
- organization → Organization (касова належність)
- currency → Currency (може бути UAH / USD / EUR)
- department → Department (адміністративна, магазин, склад)
- responsible_person → Person (касир)
- opening_balance
- is_active
Документи, що працюють з касою:
- IncomingPayment (приходний касовий ордер) — cash type
- OutgoingPayment (видатковий касовий ордер) — cash type
Регістр: CashJournal (агрегація рухів + залишки).
3. Bank — банк¶
Довідник банків-партнерів:
- code / name / full_name
- mfo — МФО банку
- country → Country
- swift_code (для іноземних банків)
- correspondent_account
Використовується як FK у SettlementAccount і ClientBankAccount.
4. SettlementAccount — розрахунковий рахунок¶
Банківський рахунок організації:
- account_number (IBAN для України)
- organization → Organization
- bank → Bank
- currency → Currency
- account_type — enum: current (поточний), currency (валютний), card (корпоративна картка), loan (позиковий)
- opening_balance
- is_default — основний рахунок
- is_active
Документи:
- IncomingPayment / OutgoingPayment (тип bank)
- Банківська виписка (імпорт через Bank Exchange)
5. TaxRate — податкова ставка¶
Ставки для автоматичного розрахунку податків:
| Код | Ставка | Призначення |
|---|---|---|
vat_20 |
20% | Основна ставка ПДВ (Україна) |
vat_7 |
7% | Ліки, медвироби |
vat_0 |
0% | Експорт |
vat_exempt |
— | Без ПДВ (звільнено) |
vat_no |
— | Не платник ПДВ |
Поля:
- code / name
- rate (decimal, %)
- tax_type — enum: vat, income, military, excise
- is_default (для нових товарів)
Детально — у VAT.
6. Інтеграції та сценарії¶
Платіжний сценарій (bank)¶
- Клієнт проводить платіж → оператор створює
IncomingPayment(type=bank). - Документ проводиться →
Posting: Дт 311 ("Розрахунковий рахунок") — Кт 361 ("Розрахунки з покупцями"). CashJournalотримує запис → залишок наSettlementAccountоновлюється.- При наступній банківській виписці — співставлення (reconciliation).
Готівковий сценарій (cash)¶
- Отримано готівку →
IncomingPayment(type=cash). - Дт 301 ("Каса") — Кт 361.
CashJournalоновлює балансCashbox.- Ліміт каси — перевіряється окремо.
🔮 Deferred / Ideas¶
Cash limits & overlimit notifications¶
Мотивація: закон України обмежує залишок у касі на кінець дня Чому відкладено: потрібен workflow з керівниками для скидання на р/р Trigger: запит клієнта після податкової перевірки
Multi-currency cashbox with automatic conversion¶
Мотивація: каси в готелях / на митниці працюють з USD/EUR готівкою Чому відкладено: потрібен курс на момент операції (НБУ / комерційний) Trigger: перший клієнт з валютними касовими операціями
Bank API direct integration (Monobank, Privat24)¶
Мотивація: імпорт виписок у реальному часі, без .mt940 файлів Чому відкладено: кожен банк має свій API, потрібен адаптер Trigger: частіше 100 транзакцій/день через банк