Dashboard — Analiza warsztatu
Dashboard — Analiza warsztatów samochodowych
> ! Nazwy poddziałów w tym opisie są fikcyjne. Struktura, logika, raporty i objętości danych — oryginalne.
Opis
Platforma analityczna dla sieci warsztatów samochodowych: 27 raportów z interaktywnymi wykresami, automatyczny ETL z Google Sheets, dynamiczne filtry. Dane są automatycznie aktualizowane według harmonogramu, wykresy są renderowane po stronie klienta za pomocą Chart.js.
Stos technologiczny: Django 5.1+ / Python 3.13 / PostgreSQL 15 / Redis / Celery Beat / Docker / Bootstrap 5.3 / Chart.js
Objętość danych
Tabela
Zlecenia warsztatów
Sprzedaż samochodów
Statystyki dzienne
Sprzedaż części zamiennych
6 aktywnych poddziałów, 69 marek samochodów, 38 regionów. 27 arkuszy Google jako źródła danych (~20 000 wierszy na plik zleceń). Średni koszt zlecenia: robocizna 6 500 zł, części 6 700 zł.
27 zrealizowanych raportów
- Operatywka: praca warsztatów i sprzedaż samochodów według dni
- Dynamika: normogodziny, przyjęcia, części (ilość/ zł)
- Paragon: bez gwarancji, bez innych usług (mycie, wulkanizacja, szyby itp.), % warianty
- Normogodziny: według rodzajów prac, według marek, obce warsztaty
- Rok produkcji: według miesięcy/lat, dynamika parku
- Regiony: regionalna struktura klientów
- Dodatkowe: przychody, gwarancja vs komercja, top marki, ranking poddziałów
Kluczowe funkcje
- Automatyczny ETL: Celery Beat synchronizuje Google Sheets → PostgreSQL, deduplikacja według hasha SHA-256 wiersza
- Dynamiczne filtry: multi-select poddziałów, rok, region, marka, rok produkcji, waluta (zł/$) — bez przeładowania
- 27 wykresów: bar, stacked-bar, line, stacked-bar-100, tabele przestawne
- Karty KPI: średni paragon, dynamika w porównaniu do poprzedniego roku
- Audyt zleceń: modalne okno z harmonogramem przyczyn wykluczenia z mianownika
- Tryb złożony: zwijanie małych poddziałów w „Razem”
- Panel administracyjny: django-unfold. Bezpieczeństwo: login_required, RBAC
Architektura
apps/
├── core/ — modele, role, migracje
├── dashboard/ — 27 raportów, API, filtry
│ └── services/ — 13 modułów agregacji
├── ingest/ — ETL: Google Sheets → Baza danych (4 typy źródeł)
└── rates/ — kursy walut
Trudności
1. Normalizacja słowników: dane z 1C zawierają różne zapisy nazw — zbudowano system kanonicznych pseudonimów
2. Deduplikacja: arkusze tylko do dodawania bez naturalnego klucza → upsert według hasha
3. Logika biznesowa raportów: wielopoziomowe wykluczenia (gwarancja → PPP → „inne usługi”), logika AND podstawowej pracy
4. Podwójny arkusz: 2 arkusze pliku (główny + detaliczna sprzedaż części) są przetwarzane osobno
5. Wydajność: indeksy SQL, zapytania adnotowane, select_related
Infrastruktura
Docker Compose: PostgreSQL, Redis, Django (Gunicorn), Celery Worker + Beat, Nginx. Wdrożenie: docker compose up -d. Produkcja za pomocą Apache reverse-proxy, Whitenoise dla statyki.
> ! Nazwy poddziałów w tym opisie są fikcyjne. Struktura, logika, raporty i objętości danych — oryginalne.
Opis
Platforma analityczna dla sieci warsztatów samochodowych: 27 raportów z interaktywnymi wykresami, automatyczny ETL z Google Sheets, dynamiczne filtry. Dane są automatycznie aktualizowane według harmonogramu, wykresy są renderowane po stronie klienta za pomocą Chart.js.
Stos technologiczny: Django 5.1+ / Python 3.13 / PostgreSQL 15 / Redis / Celery Beat / Docker / Bootstrap 5.3 / Chart.js
Objętość danych
Tabela
Zlecenia warsztatów
Sprzedaż samochodów
Statystyki dzienne
Sprzedaż części zamiennych
6 aktywnych poddziałów, 69 marek samochodów, 38 regionów. 27 arkuszy Google jako źródła danych (~20 000 wierszy na plik zleceń). Średni koszt zlecenia: robocizna 6 500 zł, części 6 700 zł.
27 zrealizowanych raportów
- Operatywka: praca warsztatów i sprzedaż samochodów według dni
- Dynamika: normogodziny, przyjęcia, części (ilość/ zł)
- Paragon: bez gwarancji, bez innych usług (mycie, wulkanizacja, szyby itp.), % warianty
- Normogodziny: według rodzajów prac, według marek, obce warsztaty
- Rok produkcji: według miesięcy/lat, dynamika parku
- Regiony: regionalna struktura klientów
- Dodatkowe: przychody, gwarancja vs komercja, top marki, ranking poddziałów
Kluczowe funkcje
- Automatyczny ETL: Celery Beat synchronizuje Google Sheets → PostgreSQL, deduplikacja według hasha SHA-256 wiersza
- Dynamiczne filtry: multi-select poddziałów, rok, region, marka, rok produkcji, waluta (zł/$) — bez przeładowania
- 27 wykresów: bar, stacked-bar, line, stacked-bar-100, tabele przestawne
- Karty KPI: średni paragon, dynamika w porównaniu do poprzedniego roku
- Audyt zleceń: modalne okno z harmonogramem przyczyn wykluczenia z mianownika
- Tryb złożony: zwijanie małych poddziałów w „Razem”
- Panel administracyjny: django-unfold. Bezpieczeństwo: login_required, RBAC
Architektura
apps/
├── core/ — modele, role, migracje
├── dashboard/ — 27 raportów, API, filtry
│ └── services/ — 13 modułów agregacji
├── ingest/ — ETL: Google Sheets → Baza danych (4 typy źródeł)
└── rates/ — kursy walut
Trudności
1. Normalizacja słowników: dane z 1C zawierają różne zapisy nazw — zbudowano system kanonicznych pseudonimów
2. Deduplikacja: arkusze tylko do dodawania bez naturalnego klucza → upsert według hasha
3. Logika biznesowa raportów: wielopoziomowe wykluczenia (gwarancja → PPP → „inne usługi”), logika AND podstawowej pracy
4. Podwójny arkusz: 2 arkusze pliku (główny + detaliczna sprzedaż części) są przetwarzane osobno
5. Wydajność: indeksy SQL, zapytania adnotowane, select_related
Infrastruktura
Docker Compose: PostgreSQL, Redis, Django (Gunicorn), Celery Worker + Beat, Nginx. Wdrożenie: docker compose up -d. Produkcja za pomocą Apache reverse-proxy, Whitenoise dla statyki.