Document Operations — універсальні бух. документи¶
Коли типові документи (Invoice, GoodsReceipt, Payment) не покривають потрібну господарську операцію — використовується універсальний багато-рядковий документ.
1. Призначення¶
DocumentOperation закриває сценарії:
- Вручну ручні проводки бухгалтера (коригування, переоцінки, закриття)
- Нестандартні операції, для яких немає спеціалізованого документа
- Консолідація кількох операцій у один документ
- Імпорт бух. рухів з інших систем (legacy, 1С)
2. Структура¶
DocumentOperation (заголовок)¶
- number / date
- organization →
Organization - description — пояснення операції
- status —
draft / posted / marked - currency →
Currency(основна) - reference_document → GenericFK (необов'язково, якщо прив'язано до зовнішнього документа)
DocumentOperationLine (рядки)¶
Кожен рядок — одна проводка:
- line_number — № рядка
- business_operation →
BusinessOperation(необов'язково) - Якщо заповнено —
debit_account/credit_accountпідтягуються автоматично - Якщо порожньо — вводяться вручну
- debit_account →
ChartOfAccounts - credit_account →
ChartOfAccounts - amount — сума
- currency_amount — сума у валюті документа (якщо != base)
- description — пояснення рядка
- analytics — JSON з аналітичними вимірами:
3. Типові сценарії¶
A. Коригування залишку рахунку¶
Після інвентаризації / аудиту потрібно вручну виправити залишок:
B. Закриття місяця¶
Перенесення доходів/витрат на результат:
Рядок 1: Дт 702 — Кт 791, 100 000 грн (закриття доходу)
Рядок 2: Дт 791 — Кт 902, 60 000 грн (списання собівартості)
Рядок 3: Дт 791 — Кт 441, 40 000 грн (прибуток → нерозподілений)
C. Курсові різниці¶
Переоцінка валютних залишків на кінець періоду:
D. Нарахування резервів¶
4. Валідація¶
При проведенні (post):
1. Перевірка балансу: сума дебетів = сума кредитів по кожному currency.
2. Перевірка leaf-accounts: debit_account.is_leaf == True.
3. Перевірка обов'язкових аналітик: якщо ChartOfAccounts.analytics_dimensions вимагає Client — має бути заповнено.
4. Перевірка періоду: дата не в замкненому періоді (якщо posting_lock_date у settings).
При успіху генеруються Posting записи (1:1 з DocumentOperationLine).
5. UI¶
- Список:
/essentials/transactions/document-operations - Форма: заголовок + підтаблиця рядків
- Підказки: при виборі
BusinessOperation— автопідстановка рахунків + попередження про аналітики - Копіювання: повторні операції (напр. щомісячне закриття)
6. Power-user features¶
Шаблони (Document Operation Templates)¶
План: збереження часто вживаних документів як шаблон із {{date}}, {{amount}} плейсхолдерами.
Імпорт з Excel¶
CSV/Excel import — пачка рядків у один документ, швидке введення.
Масове проведення / розпроведення¶
Фільтр по даті → bulk post / unpost.
🔮 Deferred / Ideas¶
Natural-language input (AI)¶
Мотивація: бухгалтер пише "нарахувати резерв 10000 від 281", система генерує проводки Чому відкладено: потрібна навчена LLM + класифікатор Trigger: достатня база прикладів (>1000 документів)
Approval workflow for large manual postings¶
Мотивація: ручні проводки > X грн — вимога головбуха Чому відкладено: workflow engine Trigger: корпоративний клієнт
Period closing wizard¶
Мотивація: помічник для закриття місяця (перевірки + автогенерація закриваючих операцій) Чому відкладено: потрібен чек-лист + генератор Trigger: стабільна база клієнтів з щомісячним закриттям
Audit trail with versioning¶
Мотивація: регулятор вимагає незмінні записи після закриття
Чому відкладено: поточний AuditLog агностичний, потрібен immutable mode
Trigger: аудит перевірка