From a695a73af75e2788e7ac2b346eb3b1e43c9181ca Mon Sep 17 00:00:00 2001 From: root Date: Mon, 6 Jul 2026 13:16:44 +0000 Subject: [PATCH] fix(analytics): rewrite funnel as real order path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SQL admin_automation_economics: new columns based on actual order lifecycle - sms_sent: got at least 1 SMS - completed_auto: delivered/picked_up without manual_confirmation_at - completed_manual: delivered/picked_up with manual_confirmation_at - stuck_in_manual: manual_required + still waiting - no_sms_completed: imported as already delivered - Funnel steps: Всего → SMS → Авто-завершено → Завершено вручную → Застряло → Без SMS → Хранение → Отменено - Footer: Автоматизация % / Ручное вмешательство % / Завершено всего - Fixes: old funnel counted manual_confirmation_required as "согласовано" and missed 31 completed orders (notification_status=completed vs confirmed) --- src/components/admin/AdminDashboard.jsx | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/components/admin/AdminDashboard.jsx b/src/components/admin/AdminDashboard.jsx index c817420..9777602 100644 --- a/src/components/admin/AdminDashboard.jsx +++ b/src/components/admin/AdminDashboard.jsx @@ -185,14 +185,17 @@ export const AdminDashboard = () => { total: d.total || 0, delivered: d.delivered || 0, picked_up: d.picked_up || 0, problems: d.problems || 0, })); - // ── Funnel Data ──────────────────────────────────────────────────────────── + // ── Funnel: Real order path ──────────────────────────────────────────────── + // Each step shows how many orders reached that stage const funnelSteps = [ - { label: 'Согласовано после 1-й SMS', value: econ.confirmed_after_sms1 || 0, color: '#22c55e' }, - { label: 'Согласовано после 2-й SMS', value: econ.confirmed_after_sms2 || 0, color: '#14b8a6' }, - { label: 'Согласовано вручную', value: econ.confirmed_via_manual || 0, color: '#eab308' }, - { label: 'Ручное назначение даты', value: econ.manual_date_set_count || 0, color: '#f97316' }, + { label: 'Всего заказов', value: econ.total_groups || 0, color: '#94a3b8' }, + { label: 'SMS отправлено', value: econ.sms_sent || 0, color: '#3b82f6' }, + { label: 'Авто-завершено', value: econ.completed_auto || 0, color: '#22c55e' }, + { label: 'Завершено вручную', value: econ.completed_manual || 0, color: '#14b8a6' }, + { label: 'Застряло в ручном', value: econ.stuck_in_manual || 0, color: '#eab308' }, + { label: 'Без SMS завершено', value: econ.no_sms_completed || 0, color: '#6366f1' }, { label: 'Платное хранение', value: econ.paid_storage_count || 0, color: '#06b6d4' }, - { label: 'Отмена', value: econ.cancelled_count || 0, color: '#ef4444' }, + { label: 'Отменено', value: econ.cancelled_count || 0, color: '#ef4444' }, ]; // ── Grid Layout ─────────────────────────────────────────────────────────── @@ -316,7 +319,7 @@ export const AdminDashboard = () => { {/* Funnel — 4 cols desktop */} - + {totalGroups === 0 ? (
Нет данных
) : ( @@ -354,16 +357,16 @@ export const AdminDashboard = () => { marginTop: '0.75rem', paddingTop: '0.6rem', borderTop: '1px solid var(--color-border)', }}>
-
Автосогласование
-
{econ.auto_confirm_pct ?? 0}%
+
Автоматизация
+
{econ.automation_pct ?? 0}%
Ручное вмешательство
{econ.manual_intervention_pct ?? 0}%
-
Всего согласовано
-
{econ.confirmed_auto_total ?? 0}
+
Завершено всего
+
{(econ.completed_auto || 0) + (econ.completed_manual || 0) + (econ.no_sms_completed || 0)}