Перейти до змісту

Продаж (Sales Flow)

Цикл реалізації: клієнт → рахунок → оплата → відвантаження → акт.


1. Документи

Документ Призначення
Invoice + InvoiceLine Рахунок клієнту (передоплата або оплата по факту)
GoodsShipment + GoodsShipmentLine Видаткова накладна (фізичне відвантаження)
Act (у план) Акт виконаних робіт (для послуг)

2. Invoice — рахунок клієнту

Поля заголовка

  • number / date
  • organizationOrganization (хто виставляє)
  • clientClient (кому)
  • contractContract (умови, валюта, ПДВ-режим)
  • currency + exchange_rate (на дату документа)
  • vat_modewith_vat / without_vat / reverse_charge
  • payment_days — термін оплати (з договору)
  • due_date — крайня дата оплати (розраховується)
  • statusdraft / posted / paid / marked
  • payment_statusunpaid / partial / paid / overpaid (розраховується)
  • total_amount, total_vat, total_with_vat — суми

Рядки (InvoiceLine)

  • itemItem
  • quantity + unit (підставляється з Item)
  • pricePriceType за договором)
  • discount_percent + discount_amount
  • vat_rateTaxRate
  • amount / vat_amount / amount_with_vat

3. GoodsShipment — видаткова накладна

Фізичне відвантаження зі складу: - invoiceInvoice (базовий документ) - warehouseWarehouse (з якого) - shipped_at — дата відвантаження

Рядки

  • item + quantity
  • batchBatch (яка партія, якщо партіонний облік)
  • 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
  • KanbanInvoiceKanbanBoard показує статуси як 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: корпоративний клієнт з контролем


Пов'язане