Module: CRM & Sales Pipeline¶
Статус: ✅ Реалізовано — повний MVP + Pipeline analytics (2026-04-22)
✅ Реалізовано від попередніх ітерацій: - 9 моделей у
crm/:LeadSource,SalesStage,Lead,Contact,Activity,Deal,Quotation+QuotationLine,SalesOrder. - Зв'язки з Essentials:Client(як Account),Item,Currency. - Generic CRUD UI через configcrm.ts. -Lead → convert-to-dealaction (створює Client + Deal з Lead). -Quotation → convert-to-orderaction. -Deal → change-stageexplicit action з автозаписом уPipelineHistoryJournal.✅ Реалізовано (Phase D, 2026-04-22): - Auto-history: override
DealViewSet.perform_updateзаписуєPipelineHistoryJournalпри змініDeal.stageчерез будь-який PATCH (а не лише через/change-stage/). - Auto-ledger: overrideActivityViewSet.perform_create/perform_destroyзаписує/видаляєActivityLedgerрядок на кожну створену/видалену Activity. - 4 analytics endpoints (crm/views_analytics.py): -GET /api/v1/crm/analytics/funnel/— снапшот воронки (count + amount + weighted_amount per stage). -GET /api/v1/crm/analytics/stage-duration/— середній час у стадії (зPipelineHistoryJournal). -GET /api/v1/crm/analytics/win-loss/— win-rate, loss-rate, конверсія за період. -GET /api/v1/crm/analytics/manager-activity/— KPI по менеджерах: calls/meetings/emails/tasks/notes + deals_won/lost/open + win_rate_pct. - 2 dashboard-сторінки: -SalesFunnelDashboard— funnel bars + win/loss KPI cards + stage-duration table в одному view. -ManagerActivityDashboard— таблиця менеджерів + KPI cards (total calls/meetings/emails/won deals). - 11 нових backend-тестів (record_stage_change, perform_update auto-history, record_activity, всі 4 analytics endpoints). - Зареєстровано вcrm.tsяк Analytics → Reports → Sales Funnel / Manager Activity.
Цей модуль відповідає за повний цикл роботи з клієнтом: від першого контакту (Lead) до перетворення його на постійного контрагента та успішне закриття угоди (Deal).
Реалізована аналітика — деталі¶
Auto-tracking¶
- PipelineHistoryJournal заповнюється двома шляхами:
- Explicit endpoint
POST /deals/{id}/change-stage/зcomment. -
Звичайний
PATCH /deals/{id}/зі зміненимstage— overrideperform_updateзловить різницю стадії й викличеrecord_stage_change(). Без цьогоDealViewSet.updateобходив запис історії, і реальна історія не корелювала з фактичною eolutionю Deal.stage. -
ActivityLedger заповнюється
perform_create(запис на кожну створену Activity) і чиститься черезperform_destroy + remove_activity(). Кожен рядок:(client, deal, assigned_to, activity_type, count=1, date).
Analytics services (crm/services/)¶
record_stage_change(deal, from_stage, to_stage, *, user, comment, when)— створює однуPipelineHistoryJournalзапис; пропускає self-transition (from == to).record_activity(activity)— створюєActivityLedgerрядок, що дзеркалить ключові поля Activity.remove_activity(activity)— для cleanup приdestroy.
Endpoints¶
| URL | Опис |
|---|---|
/funnel/ |
Поточний снапшот: {lines: [{stage, deal_count, total_amount, weighted_amount, probability, color, is_won, is_lost}], no_stage, summary} |
/stage-duration/ |
Середні дні в кожній стадії, обчислені з історії. Open-deals рахуються до date_to. |
/win-loss/ |
{won: {count, amount}, lost: {...}, open: {...}, summary: {win_rate_pct, loss_rate_pct, ...}} |
/manager-activity/ |
{managers: [{user_id, full_name, calls, meetings, emails, tasks, notes, total_activities, deals_won, deals_lost, deals_open, amount_won, amount_open, win_rate_pct}]} |
Усі endpoints мають фільтр ?date_from=...&date_to=...&assigned_to=... (де доречно).
Frontend components¶
- SalesFunnelDashboard — фільтри (period, assignee), KPI cards (Won/Open/Lost/Win-rate), funnel bars з нормалізованим масштабом (excluding won/lost), table «Stage duration». Колір кожного bar повторює
SalesStage.color. - ManagerActivityDashboard — фільтр period, KPI cards (calls/meetings/emails/won deals total), таблиця рядків per assignee з колонками для кожного типу активності + deal counters + win-rate badge (teal ≥50%, orange ≥20%, red <20%).
Master data, transactions та плановані розширення (далі)¶
1. Master Data (Мастер-дані)¶
| Сутність | Опис | Ключові поля |
|---|---|---|
| Leads | Потенційні клієнти, які ще не пройшли кваліфікацію | Name, Source, Contact Info, Status, Assigned To |
| Accounts | Компанії або приватні особи (вже кваліфіковані) | ID, Legal Name, Industry, Segment (A/B/C), Tags |
| Contacts | Конкретні люди, пов'язані з Accounts | Name, Role, Phone, Email, LinkedIn, Preferences |
| Sales Stages | Етапи воронки продажів (Pipeline) | Stage Name, Probability (%), Order, Is_Final (Won/Lost) |
| Lead Sources | Канали залучення (Marketing) | Name (Web, Referral, Cold Call, Ads), UTM-params |
2. Transaction Data (Транзакційні дані)¶
- Activity (Подія):
- Фіксація будь-якої взаємодії: дзвінок, лист, зустріч, коментар.
- Має дедлайн та статус виконання.
- Opportunity / Deal (Угода):
- Основний документ продажу.
- Пов’язаний з продуктами (Quotes), сумою, валютою та етапом Pipeline.
- Quotation (Комерційна пропозиція):
- Версійна пропозиція з переліком товарів/послуг та цінами.
- Може бути акцептована клієнтом (перехід у Sales Order).
- Sales Order (Замовлення покупця):
- Фінальний документ, що резервує товар на складі та ініціює роботу в модулі Inventory & Finance.
3. Journals & Ledgers (Журнали та реєстри)¶
Для CRM реєстри фокусуються на подіях та змінах станів, а не лише на грошах.
A. Pipeline History Journal (Журнал станів)¶
Зберігає історію переміщення кожної угоди по етапах. * Dimensions: Opportunity_ID, Stage_ID, User_ID. * Resources: Days_in_Stage, Change_Timestamp.
B. Activity Ledger (Реєстр активностей)¶
Накопичувальний підсумок зусиль менеджерів. * Dimensions: User_ID, Activity_Type, Account_ID. * Resources: Count, Duration_Minutes.
4. Business Processes (Бізнес-процеси)¶
- Lead Qualification: Процес перетворення Lead -> Account + Contact + Opportunity.
- Automated Follow-ups: Система нагадувань, якщо по угоді немає активності більше X днів.
- Conversion to Order: Автоматичне створення Sales Order з Quotation із перевіркою залишків (через API до Inventory Core).
- Lead Scoring (AI-ready): Ранжування лідів на основі ймовірності закриття (тут ми можемо підключити твої знання з Python/AI).
5. Analytics & BI (Аналітика)¶
- Sales Funnel (Воронка): Візуалізація конверсії між етапами (Leads -> Opportunities -> Won).
- Win/Loss Analysis: Аналіз причин програшу угод.
- Average Cycle Length: Середній час від першого контакту до оплати.
- Revenue Forecast: Прогноз надходжень на основі ймовірності (Probability %) відкритих угод.
- Manager Performance: Порівняння KPI менеджерів (кількість дзвінків vs закрита сума).