Rozszerzenie systemu o panel wartości sprzedaży handlowców
KONTEKST
System zarządzania kontami (FastAPI + React + PostgreSQL + Celery) zintegrowany z Bitrix24 i Fakturownia. Wymagane rozszerzenie o moduł analizy efektywności handlowców.
FUNKCJONALNOŚĆ
2.1. Panel administracyjny
Tabela przestawna: wiersze = handlowcy, kolumny = miesiące
Wartości: suma kwot netto z opłaconych faktur w miesiącu
Dodatkowe kolumny: koszt wynagrodzenia, zwrot (wartość minus koszt)
Filtry: zakres czasowy, status (aktywny/archiwalny/wszyscy)
2.2. Logika biznesowa
Deal w Bitrix osiąga etap "sukces" w określonym lejku
System zapisuje NIP klienta i dane handlowca
Faktury z Fakturowni dla tego NIP (opłacone od daty sukcesu) przypisywane do handlowca
Faktura trafia do miesiąca jej opłacenia, nie wystawienia
Handlowcy archiwalni nadal mają aktualizowane dane
2.2.2. Import wynagrodzeń
a) Automatyczny: księgowa wysyła Excel/CSV/PDF na email, system pobiera i importuje
b) Manualny: admin uploaduje plik przez UI jako backup
Dopasowanie handlowców po imieniu i nazwisku
Preview danych przed zatwierdzeniem
Walidacja i obsługa konfliktów
Automatyczne przeliczanie zwrotu
2.3. Synchronizacja
Celery task codziennie agreguje dane z Bitrix/Fakturownia
Email check co godzinę sprawdza nowe pliki
Możliwość ręcznego uruchomienia przez admina
ZAKRES TECHNICZNY
3.1. Backend:
Nowa tabela agregacyjna
Rozszerzenie 2 istniejących tabel
Worker synchronizujący: matching deal -> NIP -> faktury
Parser Excel/CSV/PDF
IMAP client do odbierania emaili
4 endpointy REST API
2 scheduled tasks (Celery)
Migracja Alembic
3.2. Frontend:
Nowa strona w panelu admin
Tabela przestawna
Upload UI + preview
Filtry i dialogi
Integracja z API
3.3. Integracje:
Wykorzystanie istniejących: Bitrix24 API, Fakturownia API, autentykacja
Nowe: IMAP do odbierania emaili
WYMAGANIA
Python, FastAPI, React, PostgreSQL, Celery, Docker
Doświadczenie z integracjami zewnętrznych API
Znajomość IMAP/email parsing
Proszę o wycenę 2 wersji projektu: z importem wynagrodzeń manualnym (2.2.2.a) lub automatycznym (2.2.2.b).