Przewodnik po trzech modułach wspierających procesy operacyjne: Magazyn materiałów i obiegu dokumentów, HR (Kadry) z ewidencją pracowników oraz Flota pojazdów serwisowych.
Konwencja: Każdy moduł posiada dedykowaną stronę z listą + DetailPanel (zakładki), kreator 4‑5 fazowy dla nowych rekordów oraz pełną integrację z obiegiem dokumentów (cloud storage, audit log).
Moduł Magazyn wspiera pełen obieg materiałów: od zakupu (PZ z faktury zakupowej lub zamówienia), przez transfery między magazynami (MM), aż po wydanie na protokół serwisowy (WZ) i fakturę końcową.
| Typ magazynu | Przeznaczenie | Odpowiedzialny |
|---|---|---|
central | Magazyn centralny oddziału — zakupy hurtowe, zasoby strategiczne | Magazynier / kierownik |
technician | Magazyn technika — samochód/biurko; materiały „na trasie" | Konkretny technik (responsible_user_id) |
branch | Magazyn oddziału — pośredni poziom | Kierownik oddziału |
Każdy magazyn ma przypisany oddział (branch_id) — filtrowanie RBAC działa automatycznie. Techników nie widzą magazynów innych oddziałów.
material_batches — śledzenie dostawKażde PZ tworzy partię materiału z unikalnymi danymi:
supplier_id)remaining_quantity)Gdy technik wydaje materiał (potwierdzenie WZ), system konsumuje od najstarszej partii:
SELECT batches WHERE material_id = ? AND remaining_quantity > 0 ORDER BY purchase_date ASCremaining_quantity aż do pokrycia całej ilościbatch_consumptions — audit trail: który WZ zjadł którą partięKorzyść biznesowa: Rachunek zysków i strat oblicza się precyzyjnie na podstawie rzeczywistych kosztów zakupu, a nie średniej „katalogowej".
material_reservations)System automatycznie rezerwuje materiały przy zatwierdzeniu kosztorysu, aby zapobiec podwójnemu wydaniu:
| Zdarzenie | Akcja |
|---|---|
| Zatwierdzenie kosztorysu (klient akceptuje) | reserveMaterials() — warehouse_stock.reserved_quantity += qty, status active |
| Odrzucenie / anulowanie kosztorysu | releaseReservation() — reserved_quantity -= qty, status released |
| Potwierdzenie WZ z pozycji kosztorysu | consumeReservation() — status consumed |
Przed zatwierdzeniem kosztorysu frontend wywołuje GET /api/cost-estimates/:id/check-availability. Jeśli brakuje materiałów, użytkownik widzi ostrzeżenie z listą braków.
| Typ | Nazwa pełna | Opis | Akcja bazodanowa |
|---|---|---|---|
PZ | Przyjęcie zewnętrzne | Przyjęcie materiału od dostawcy (z faktury zakupu) | + stan magazynu, nowa partia |
WZ | Wydanie zewnętrzne | Wydanie do protokołu / klienta | − stan, konsumpcja FIFO |
MM | Międzymagazynowe | Transfer między magazynami firmy | − źródło, + cel |
INW | Inwentaryzacja | Korekta stanu po spisie z natury | ± stan, protokół różnic |
PRZM | Protokół zużycia | Materiały instalacyjne rozliczane okresowo | − stan technika |
Dokument w statusie draft nie wpływa na stan. Dopiero confirmDocument aktualizuje warehouse_stock i tworzy/konsumuje partie.
Format: {TYP}-{ROK}-{NUMER_5_CYFR} — np. PZ-2026-00042. Numeracja per typ + rok (warehouse_document_sequence), zerowanie na przełomie roku.
Nowość 2026‑04‑17: Dokumenty MM tworzone z aplikacji mobilnej przy pobieraniu materiałów/wyposażenia do magazynu technika są potwierdzane podpisem odbiorcy. Podpis zapisywany jako base64 PNG w kolumnachrecipient_signature,recipient_signed_at,recipient_name(migracja 222).
/mobile/warehouse) wybiera zakładkę CAŁY STANrecipient_signature — base64 PNGrecipient_signed_at — aktualny czasrecipient_name — imię i nazwisko technika (auto z sesji)Analogiczny mechanizm jak przy protokole konserwacji/naprawy — audyt każdego ruchu materiału z podpisem odbiorcy.
Moduł HR zarządza wszystkimi pracownikami firmy niezależnie od tego, czy mają konto użytkownika w systemie (rola admin / client / demo może, ale nie musi być pracownikiem).
Kluczowa separacja:employees= wszyscy pracownicy firmy (pełna kadra);users= konta logowania (subset). Powiązane przezusers.employee_id.
/hr wyświetla wyłącznie rekordy z tabeli employees/users wyświetla konta + kolumnę „Kadry" z tagiem „Powiązany/Niepowiązany"employees.avatar_base64) — jedno źródło prawdy| Zakładka | Zawartość |
|---|---|
| Dane osobowe | Imię, nazwisko, PESEL, data urodzenia, kontakt, adres, zdjęcie ID‑photo (350x450) |
| Nieobecności | 20 typów wg polskiego Kodeksu Pracy (urlop wypoczynkowy, L4, opieka art.188, szkolenie, delegacja...) |
| Certyfikaty | SEP, UDT, manufacturer, BHP — analiza skanu przez AI (vision), ekstrakcja daty ważności |
| Dokumenty pracownicze | Upload skanów do cloud storage SerwisRun/Kadry/{Imię Nazwisko}/ |
| Badania lekarskie | Typ badania, data, data ważności, wynik |
| Metadane | Utworzono, zaktualizowano, kto |
employees.employment_type)full_time — Pełny etatpart_time — Niepełny etatcontract — Umowa o pracę na czas określonycivil_contract — Umowa cywilnoprawna (zlecenie/dzieło)Przy uploadzie przez POST /api/employees/:id/photo serwer (sharp):
employees.avatar_base64SerwisRun/Kadry/{firstName} {lastName}/{firstName}_{lastName}.jpgTrasa: /hr/wizard. Fazy: Dane osobowe → Zatrudnienie → Kontakt i notatki → Podsumowanie. Navigation guard + draft saving (klucz hr w draftStore).
Moduł Flota ewidencjonuje wszystkie pojazdy firmowe używane przez techników — z pełną historią przejazdów, dokumentów i przekazań.
service_vehicles)| Pole | Opis |
|---|---|
registration_number / plate_number | Numer rejestracyjny |
vin | Numer VIN |
type | Typ: van, bus, car, truck... |
fuel_type | petrol / diesel / lpg / electric / hybrid |
tank_capacity | Pojemność zbiornika (do kalkulacji tankowań) |
branch_id | Oddział bazowy |
assigned_user_id | Aktualnie przypisany technik |
insurance_expiry_date | Data wygaśnięcia OC/AC |
next_inspection_date | Data następnego przeglądu |
vehicle_trips: data, start/koniec lokalizacji, kilometry, cel (powiązanie z konserwacją/zleceniem), kosztvehicle_documents: dowód rejestracyjny, polisa OC, badanie techniczne. Cloud storage: SerwisRun/Samochody/{nr_rejestracyjny}/vehicle_transfers: kto od kogo do kogo przekazał, kilometry przy przekazaniu, notatki o staniePojazd jest integralnym elementem aplikacji mobilnej technika:
refueling_logs z GPSprivate_tripsSystem automatycznie koreluje każdy przejazd (vehicle_trips) z konkretną konserwacją/zleceniem serwisowym, co pozwala liczyć rzeczywisty koszt dojazdu na podstawie spalania pojazdu, a nie tylko stawki kilometrowej.
Trasa: /fleet/wizard. Fazy: Dane pojazdu → Przypisanie → Dokumenty → Podsumowanie.
| Moduł | Ścieżka |
|---|---|
| Kadry (zdjęcia, skany umów) | SerwisRun/Kadry/{Imię Nazwisko}/ |
| Samochody (dokumenty) | SerwisRun/Samochody/{nr_rejestracyjny}/ |
| Wyposażenie | SerwisRun/Obiekty-Materiały/Wyposazenie/{kategoria} |
| Materiały | SerwisRun/Obiekty-Materiały/Materialy/{kategoria} |
Abstrakcja cloudStorage.service.ts przełącza między Google Drive, OneDrive lub S3 wg konfiguracji w Ustawieniach → Integracje.
Każda akcja CRUD w tych modułach loguje się do audit_logs przez HOF withAuditLog. Widok /audit-logs pokazuje pełną historię z możliwością filtrowania per encja, akcja, użytkownik.
Modul Dostawcy (/suppliers) ewidencjonuje dostawcow. Integracja z API MF (Biala Lista VAT) + Delta-Poznan.