Продаж (Sales Flow)¶
Цикл реалізації: клієнт → рахунок → оплата → відвантаження → акт.
1. Документи¶
| Документ | Призначення |
|---|---|
Invoice + InvoiceLine |
Рахунок клієнту (передоплата або оплата по факту) |
GoodsShipment + GoodsShipmentLine |
Видаткова накладна (фізичне відвантаження) |
Act (у план) |
Акт виконаних робіт (для послуг) |
2. Invoice — рахунок клієнту¶
Поля заголовка¶
- number / date
- organization →
Organization(хто виставляє) - client →
Client(кому) - contract →
Contract(умови, валюта, ПДВ-режим) - currency + exchange_rate (на дату документа)
- vat_mode —
with_vat/without_vat/reverse_charge - payment_days — термін оплати (з договору)
- due_date — крайня дата оплати (розраховується)
- status —
draft / posted / paid / marked - payment_status —
unpaid / partial / paid / overpaid(розраховується) - total_amount, total_vat, total_with_vat — суми
Рядки (InvoiceLine)¶
- item →
Item - quantity + unit (підставляється з Item)
- price (з
PriceTypeза договором) - discount_percent + discount_amount
- vat_rate →
TaxRate - amount / vat_amount / amount_with_vat
3. GoodsShipment — видаткова накладна¶
Фізичне відвантаження зі складу:
- invoice → Invoice (базовий документ)
- warehouse → Warehouse (з якого)
- shipped_at — дата відвантаження
Рядки¶
- item + quantity
- batch →
Batch(яка партія, якщо партіонний облік) - unit_cost (собівартість — підставляється автоматично за FIFO/WAC)
4. Бізнес-процес¶
1. Менеджер створює Invoice (draft)
└── Підставляються ціни з Contract.price_type
└── Перевіряється credit_limit
2. Post Invoice (draft → posted)
└── Posting: Дт 361 ("Розрахунки з покупцями") — Кт 702/703 (дохід)
└── Дт 361 — Кт 641 (ПДВ зобов'язання)
└── IncomeExpenseJournal: +дохід
3. Клієнт оплачує → IncomingPayment
└── Прив'язується до Invoice через payment_matching
└── Invoice.payment_status = 'paid'
4. Створення GoodsShipment на базі Invoice
└── Вибір партій (FIFO автоматично або вручну)
└── Posting: Дт 902 (собівартість) — Кт 281 (товари)
└── InventoryJournal: -залишок
└── StockTransaction: списання
5. (опц.) Act — акт виконаних робіт для послуг
5. Особливості¶
Часткова оплата¶
Invoice.payment_status розраховується як сума IncomingPayment.amount_allocated до цього рахунку.
Часткове відвантаження¶
Один Invoice може породити кілька GoodsShipment (часткові відвантаження).
Повернення від клієнта¶
Окремий документ SalesReturn (у план) — реверс проводок.
Валютний рахунок¶
Якщо Invoice.currency != organization.base_currency:
- Зберігаються дві суми: у валюті документа + у функціональній
- При оплаті — курсова різниця автоматично розраховується
6. Інтеграції¶
- M.E.Doc — експорт Invoice як податкової накладної → medoc
- eTTN — автогенерація електронної ТТН на базі GoodsShipment → ettn
- Sales Field — мобільний ТП створює Invoice на точці → sales-field
- Kanban —
InvoiceKanbanBoardпоказує статуси як workflow
🔮 Deferred / Ideas¶
Sales Return workflow¶
Мотивація: зараз повернення роблять через Adjustment — не прозоро Чому відкладено: потрібен окремий документ + реверс проводок Trigger: запит від roznichny клієнта
Recurring invoices (subscription billing)¶
Мотивація: для послуг з місячною оплатою (оренда, абонемент) Чому відкладено: потрібен scheduler + генератор Trigger: SaaS-клієнт
Invoice dunning (auto-reminders)¶
Мотивація: прострочені платежі — треба автоматичне нагадування
Чому відкладено: потрібен email-template engine + schedule
Trigger: коли overdue_receivables > 5% обороту
Multi-level approval for large invoices¶
Мотивація: рахунки > X грн вимагають погодження керівника Чому відкладено: потрібен workflow engine Trigger: корпоративний клієнт з контролем