План рахунків та бізнес-операції¶
Як побудована бухгалтерська система DOP: plan of accounts + типові проводки (operations) → автоматична генерація
Postingпри проведенні документів.
1. Сутності¶
| Модель | Призначення |
|---|---|
ChartOfAccounts |
План рахунків (ієрархічний, European PCG) |
BusinessOperation |
Типова господарська операція (шаблон проводок) |
DocumentOperation + DocumentOperationLine |
Універсальний бух. документ — document-operations |
Posting |
Фактичний запис у бух. книгу (дебет / кредит) |
2. ChartOfAccounts — план рахунків¶
Ієрархічний довідник (HierarchicalMasterDataModel) за European PCG (класи 1–7):
Клас 1. Необоротні активи
├── 10. Основні засоби
│ ├── 101. Земля
│ ├── 104. Машини та обладнання
│ └── 105. Транспортні засоби
└── 13. Знос
Клас 2. Запаси
├── 201. Сировина
├── 203. Паливо
└── 281. Товари
Клас 3. Грошові кошти та розрахунки
├── 301. Каса у нац. валюті
├── 311. Поточні рахунки в нац. валюті
├── 361. Розрахунки з покупцями
├── 631. Розрахунки з постачальниками
└── 641. Розрахунки за податками (ПДВ)
Клас 7. Доходи
├── 701. Дохід від реалізації товарів
├── 702. Дохід від реалізації готової продукції
└── 703. Дохід від надання послуг
...
Детально — у accounting-plan.
Поля¶
- code — числовий код (101, 281, 311)
- name / full_name
- parent →
ChartOfAccounts(для субрахунків) - account_type — enum:
asset / liability / equity / income / expense / off_balance - is_leaf — чи використовується безпосередньо (leaf account)
- currency_control — вимагає валютного обліку
- analytics_dimensions — які аналітичні виміри обов'язкові (напр.
[Client, Contract]для 361)
3. BusinessOperation — типова операція¶
42+ типових господарських операцій, кожна — шаблон проводок.
Структура¶
- code / name (напр.
sales_goods,purchase_services,vat_credit) - description
- debit_account →
ChartOfAccounts(напр. 361) - credit_account →
ChartOfAccounts(напр. 702) - vat_debit_account →
ChartOfAccounts(напр. 704) - vat_credit_account →
ChartOfAccounts(напр. 641) - vat_mode — enum:
with_vat / without_vat / reverse_charge - analytics_required — обов'язкові виміри
- document_types — для яких документів застосовна (Invoice, GoodsReceipt тощо)
Приклади (топ-10 операцій)¶
| Код | Опис | Дт | Кт |
|---|---|---|---|
sales_goods |
Реалізація товарів | 361 | 702 |
sales_goods_vat |
ПДВ зобов'язання з реалізації | 361 | 641 |
purchase_goods |
Придбання товарів | 281 | 631 |
purchase_goods_vat |
ПДВ кредит при придбанні | 641 | 631 |
cash_incoming |
Надходження готівки від клієнта | 301 | 361 |
bank_incoming |
Надходження на р/р | 311 | 361 |
bank_outgoing_supplier |
Оплата постачальнику | 631 | 311 |
writeoff_damaged |
Списання пошкодженого товару | 947 | 281 |
salary_accrual |
Нарахування зарплати | 91/92/93 | 661 |
salary_payment |
Виплата зарплати | 661 | 301/311 |
Повний перелік — у backend/essentials/management/commands/init_accounting_data.py.
4. Автоматична генерація проводок¶
При проведенні документа (напр. Invoice):
1. Система визначає тип документа + контекст (з ПДВ чи ні, валюта).
2. Знаходить відповідні BusinessOperation (напр. sales_goods + sales_goods_vat).
3. Генерує Posting записи:
Client, Contract, BusinessDirection) додаються з документа.
Це заміна 1С-субконто — замість жорсткої прив'язки до типу рахунку, аналітика зберігається у Posting.dimensions (JSON або FK).
Детально — у accounting architecture.
5. Налаштування¶
Ініціалізація плану рахунків:
Створює: - План рахунків (European PCG, 80+ позицій) - 42+ BusinessOperation - Базові TaxRate (vat_20, vat_7, vat_0, vat_exempt, vat_no)
🔮 Deferred / Ideas¶
IFRS / GAAP mode switch¶
Мотивація: для експортних компаній — звіти в IFRS Чому відкладено: потрібен паралельний план рахунків + reclassification Trigger: клієнт зі звітністю у банк / аудитор
Custom operations per tenant¶
Мотивація: клієнти зі специфічними галузями мають свої операції
Чому відкладено: зараз BusinessOperation — глобальний. Треба per-tenant
Trigger: перший клієнт зі специфічними потребами
Visual posting debugger¶
Мотивація: бухгалтерам складно зрозуміти, чому згенерувались такі проводки
Чому відкладено: потрібен UI PostingExplainer
Trigger: support-тикети про незрозумілі проводки