Dashboard — Аналітика СТО
Dashboard — Аналітика СТО
> ! Назви підрозділів у цьому описі вигадані. Структура, логіка, звіти та обсяги даних — оригінальні.
Опис
Аналітична платформа для мережі автосервісів: 27 звітів з інтерактивними графіками, автоматичний ETL з Google Sheets, динамічні фільтри. Дані оновлюються автоматично за розкладом, графіки рендеряться на клієнті через Chart.js.
Стек: Django 5.1+ / Python 3.13 / PostgreSQL 15 / Redis / Celery Beat / Docker / Bootstrap 5.3 / Chart.js
Обсяг даних
Таблиця
Наряди СТО
Продаж авто
Подобова статистика
Роздріб запчастин
6 активних підрозділів, 69 марок авто, 38 регіонів. 27 Google-таблиць як джерела даних (~20 000 рядків на файл нарядів). Середня вартість наряду: роботи 6 500 грн, запчастини 6 700 грн.
27 реалізованих звітів
- Оперативка: робота СТО та продаж авто по днях
- Динаміка: нормогодини, заїзди, запчастини (к-ть/грн)
- Чек: без гарантії, без інших послуг (мийка, шиномонтаж, скло тощо), % варіанти
- Нормогодини: по видам робіт, по марках, чужі СТО
- Рік випуску: по місяцях/роках, динаміка парку
- Регіони: регіональна структура клієнтів
- Додаткові: виручка, гарантія vs комерція, топ марок, рейтинг підрозділів
Ключові фічі
- Автоматичний ETL: Celery Beat синхронізує Google Sheets → PostgreSQL, dedup за SHA-256 хешем рядка
- Динамічні фільтри: мульті-селект підрозділів, рік, регіон, марка, рік випуску, валюта (грн/$) — без перезавантаження
- 27 графіків: bar, stacked-bar, line, stacked-bar-100, pivot-таблиці
- KPI-карточки: середній чек, динаміка до попереднього року
- Аудит нарядів: модальне вікно з розкладом причин виключення зі знаменника
- Collapsed-режим: згортання малих підрозділів в «Разом»
- Адмінка: django-unfold. Безпека: login_required, RBAC
Архітектура
apps/
├── core/ — моделі, ролі, міграції
├── dashboard/ — 27 звітів, API, фільтри
│ └── services/ — 13 модулів агрегації
├── ingest/ — ETL: Google Sheets → БД (4 типи джерел)
└── rates/ — курси валют
Складності
1. Нормалізація довідників: дані з 1С містять різні написання назв — побудовано систему canonical-псевдонімів
2. Дедуплікація: append-only аркуші без natural key → upsert за хешем
3. Бізнес-логіка звітів: багаторівневі виключення (гарантія → ППП → «інші послуги»), AND-логіка core-роботи
4. Подвійний аркуш: 2 аркуші файлу (основний + роздріб ЗЧ) обробляються окремо
5. Продуктивність: SQL-індекси, анотовані запити, select_related
Інфраструктура
Docker Compose: PostgreSQL, Redis, Django (Gunicorn), Celery Worker + Beat, Nginx. Розгортання: docker compose up -d. Продакшн за Apache reverse-proxy, Whitenoise для статики.
> ! Назви підрозділів у цьому описі вигадані. Структура, логіка, звіти та обсяги даних — оригінальні.
Опис
Аналітична платформа для мережі автосервісів: 27 звітів з інтерактивними графіками, автоматичний ETL з Google Sheets, динамічні фільтри. Дані оновлюються автоматично за розкладом, графіки рендеряться на клієнті через Chart.js.
Стек: Django 5.1+ / Python 3.13 / PostgreSQL 15 / Redis / Celery Beat / Docker / Bootstrap 5.3 / Chart.js
Обсяг даних
Таблиця
Наряди СТО
Продаж авто
Подобова статистика
Роздріб запчастин
6 активних підрозділів, 69 марок авто, 38 регіонів. 27 Google-таблиць як джерела даних (~20 000 рядків на файл нарядів). Середня вартість наряду: роботи 6 500 грн, запчастини 6 700 грн.
27 реалізованих звітів
- Оперативка: робота СТО та продаж авто по днях
- Динаміка: нормогодини, заїзди, запчастини (к-ть/грн)
- Чек: без гарантії, без інших послуг (мийка, шиномонтаж, скло тощо), % варіанти
- Нормогодини: по видам робіт, по марках, чужі СТО
- Рік випуску: по місяцях/роках, динаміка парку
- Регіони: регіональна структура клієнтів
- Додаткові: виручка, гарантія vs комерція, топ марок, рейтинг підрозділів
Ключові фічі
- Автоматичний ETL: Celery Beat синхронізує Google Sheets → PostgreSQL, dedup за SHA-256 хешем рядка
- Динамічні фільтри: мульті-селект підрозділів, рік, регіон, марка, рік випуску, валюта (грн/$) — без перезавантаження
- 27 графіків: bar, stacked-bar, line, stacked-bar-100, pivot-таблиці
- KPI-карточки: середній чек, динаміка до попереднього року
- Аудит нарядів: модальне вікно з розкладом причин виключення зі знаменника
- Collapsed-режим: згортання малих підрозділів в «Разом»
- Адмінка: django-unfold. Безпека: login_required, RBAC
Архітектура
apps/
├── core/ — моделі, ролі, міграції
├── dashboard/ — 27 звітів, API, фільтри
│ └── services/ — 13 модулів агрегації
├── ingest/ — ETL: Google Sheets → БД (4 типи джерел)
└── rates/ — курси валют
Складності
1. Нормалізація довідників: дані з 1С містять різні написання назв — побудовано систему canonical-псевдонімів
2. Дедуплікація: append-only аркуші без natural key → upsert за хешем
3. Бізнес-логіка звітів: багаторівневі виключення (гарантія → ППП → «інші послуги»), AND-логіка core-роботи
4. Подвійний аркуш: 2 аркуші файлу (основний + роздріб ЗЧ) обробляються окремо
5. Продуктивність: SQL-індекси, анотовані запити, select_related
Інфраструктура
Docker Compose: PostgreSQL, Redis, Django (Gunicorn), Celery Worker + Beat, Nginx. Розгортання: docker compose up -d. Продакшн за Apache reverse-proxy, Whitenoise для статики.