Kompletny przewodnik po aplikacji mobilnej SerwisRun dla serwisantów. Dokument opisuje interfejs, przyciski stanu, pakiet offline, skanowanie materiałów i protokoły naprawy wypełniane w terenie.
Nowość 2026‑04‑17: Aplikacja została całkowicie przeprojektowana: niebieski header z datą/GPS, okrągłe akcje stanu, karta dyżuru, grid akcji 2x2 (START/STOP/PRZYJAZD/WYJAZD), Wirtualny Magazyn, skanowanie EAN i listy protokołów.
app.serwis.cloud/mobile po finalizacji wdrożenia produkcyjnego. Opisy elementów ekranów są aktualne i odpowiadają wdrożonej wersji.
Po zalogowaniu technik trafia na ekran główny aplikacji mobilnej (/mobile). Na dole ekranu znajduje się pasek nawigacji z 5 zakładkami:
| Zakładka | Ścieżka | Zawartość |
|---|---|---|
| Pulpit | /mobile | Akcje stanu, dyżur, Ostatnie wpisy |
| Zadania | /mobile/interventions | Lista interwencji (Dziś / Nadchodzące / Zakończone) |
| Magazyn | /mobile/warehouse | Wirtualny Magazyn (MOJE NARZĘDZIA / CAŁY STAN) |
| Protokoły | /mobile/protocols | Lista protokołów (DO WYKONANIA / WYKONANE) |
| Skaner | /mobile/scanner | Ciągły skan kodów EAN |
Auto-redirect: Użytkownik z rolątechnicianjest automatycznie przekierowywany do/mobileprzy logowaniu (komponentTechnicianGatew App.tsx). Nie widzi desktopowego panelu.
Karta informuje, kto aktualnie pełni dyżur dla Twojego oddziału. Dyżur oznacza gotowość do przyjmowania pilnych zgłoszeń poza godzinami pracy.
Po rozwinięciu (kliknięcie strzałki) widzisz listę wszystkich aktywnych dyżurnych pogrupowanych według oddziałów (POZNAŃ, BYDGOSZCZ, itd.).
| Akcja | Efekt |
|---|---|
| Zadzwoń | Otwiera natywną aplikację telefoniczną z numerem dyżurnego (tel:) |
| PRZEJMIJ | Przejmujesz dyżur od innego technika — swój dyżur aktywuje się, tamtego wyłącza |
Mechanizm PRZEJMIJ: Sekwencja atomowa: (1)POST /users/{target}/toggle-duty— wyłączenie dyżuru drugiego technika, (2)POST /users/{me}/toggle-duty— włączenie Twojego. System loguje zdarzenie w audicie.
Głównym elementem pulpitu jest grid 2x2 z czterema dużymi przyciskami akcji stanu. Przyciski są kontekstowo włączone/wyłączone w zależności od aktualnego stanu maszyny stanów.
Po rozpoczęciu pracy naciskasz START. Otwiera się modal:
Przycisk WYŚLIJ zapisuje transition z aktualnym GPS. System wie, że jesteś „w drodze" (TRAVELING).
Po dojechaniu na obiekt naciskasz PRZYJAZD. System proponuje obiekt z listy dzisiejszych zleceń — możesz też wpisać dowolną nazwę (ad-hoc). Po zatwierdzeniu stan zmienia się na ON_SITE.
Po zakończeniu prac na obiekcie naciskasz WYJAZD. Wybierasz status:
System przechodzi do stanu RETURNING — wracasz do bazy/domu.
Naciskasz STOP na końcu dnia pracy. Wybierasz gdzie kończysz (DOM/BIURO), wpisujesz końcowy stan licznika. System przechodzi do IDLE. Raport dnia jest gotowy.
Kontekstowość: Przyciski są włączone tylko gdy akcja jest możliwa w aktualnym stanie. Np. STOP jest wyłączone gdy już jesteś w IDLE. PRZYJAZD działa tylko w stanie TRAVELING. System prowadzi Cię przez logiczną sekwencję.
Trzy okrągłe przyciski na górze ekranu dostępne są w każdym momencie — niezależnie od aktualnego stanu. Każdy jest toggle'em: pierwsze kliknięcie rozpoczyna, drugie kończy.
Używasz gdy jedziesz prywatnie firmowym pojazdem. System rejestruje trip jako niepłatny (nie wlicza się do kosztów interwencji). Wymaga wpisania:
Szybka rejestracja przerwy (obiad, kawa). Jedno kliknięcie rozpoczyna, kolejne kończy. System wstrzymuje tracking czasu pracy, ale zachowuje kontekst interwencji.
Rejestracja tankowania. Pola:
Integracja z flotą: Wszystkie tankowania (refueling_logs) są powiązane z pojazdem i kierowcą. Generowanie raportów zużycia paliwa per pojazd, per technik — w module Flota na desktopie.
Zakładka Zadania wyświetla listę Twoich interwencji w 3 tabach:
assigned, push notificationacknowledged/mobile/interventions/:id/work)completed, push do dyspozytoraGoogle Maps: W szczegółach interwencji dotknij adresu — otwiera się natywna nawigacja z trasą do obiektu. System preferuje współrzędne GPS z obiektu (latitude/longitude), fallback: adres tekstowy.
Zakładka Magazyn zawiera dwa taby:
Lista wszystkich materiałów i wyposażenia w Twoim osobistym magazynie technika. Każdy technik ma własny magazyn przypisany (warehouses.responsibleUserId = user.id).
Lista wszystkich materiałów dostępnych w magazynach oddziału z niezerowym stanem. Przycisk POBIERZ obok każdego materiału tworzy dokument MM (przesunięcie międzymagazynowe) do Twojego magazynu technika.
POST /warehouses/documents z type=MM, source=oddział, target=magazyn technika, quantity=1Floating Action Button (+) w prawym dolnym rogu otwiera skaner EAN. Zeskanowany kod automatycznie wyszukuje materiał w magazynie.
Filozofia modelu: Technik to człowiek ruchomy — ma swój mały magazyn w samochodzie. „Pobierz" oznacza „wezmę z magazynu regionalnego do furgonetki". Zużycie rozliczane przez WZ po wypełnieniu protokołu.
Zakładka Protokoły wyświetla listę wszystkich protokołów w dwóch tabach:
| Tab | Zawartość |
|---|---|
| DO WYKONANIA | Protokoły nieukończone (status: pending, in_progress). Kliknięcie otwiera formularz wypełniania |
| WYKONANE | Zakończone protokoły (completed, closed, invoiced) — historia do wglądu |
Formularz protokołu dostosowany do użycia w terenie:
capture="environment" (tylna kamera smartfona), auto-compresja do 1920px JPEG 80%.Formularz zapisuje się automatycznie co 30 sekund do IndexedDB (tabela protocolDrafts). Możesz zamknąć aplikację lub stracić zasięg — po powrocie szkic jest załadowany i możesz kontynuować.
Przycisk „Zakończ i wyślij" → submit przez offline queue → endpoint PUT /interventions/:id z protocolFormData + completionSummary. Status interwencji zmienia się na completed. Dyspozytor otrzymuje push + SSE event.
Offline guarantee: Nawet bez internetu protokół trafia do kolejki (tabela pendingOperations). Po powrocie online auto-sync wyśle wszystkie zaległe operacje w kolejności naciśnięcia przycisku (clientTimestamp).
Zakładka Skaner to dedykowany ekran skanera kodów kreskowych EAN (i innych formatów: EAN-8, CODE_128, UPC_A, QR).
Zeskanowane materiały mogą być dodane do protokołu naprawy bezpośrednio z koszyka. Kliknij pozycję → „Dodaj do protokołu" → Stepper ilości.
Sprzęt: Skaner wykorzystuje bibliotekę html5-qrcode. Działa na wszystkich nowoczesnych smartfonach z tylną kamerą. Nie wymaga dodatkowego sprzętu (skaner USB). Opcjonalnie wspiera czytniki HID (USB/Bluetooth) przez pole EanInput.
Aplikacja zaprojektowana do pracy w trudnych warunkach (piwnica, teren wiejski, parkingi podziemne). Cała funkcjonalność działa offline.
Przed wyjazdem na interwencję system pobiera pakiet offline — kompletne dane potrzebne do pracy bez internetu:
| Element | Zawartość |
|---|---|
| siteSnapshot | Pełne dane obiektu: adres, GPS, kontakty, godziny dostępności, uwagi |
| objectHistory | Ostatnie 10 interwencji i konserwacji na tym obiekcie |
| contactPersons | Lista osób kontaktowych z telefonami (klikalne tel:) |
| materialsList | Stan magazynu technika + rezerwacje dla tej interwencji |
| issuedEquipment | Wyposażenie wydane technikowi (drabiny, narzędzia) |
| instructionLinks | Linki do instrukcji technicznych (offline jeśli pobrane) |
Wszystkie operacje (start tracking, potwierdzenie statusu, submit protokołu, upload zdjęć) są kolejkowane w IndexedDB (tabela pendingOperations) i wysyłane po powrocie online:
clientTimestamp), nie synchronizacjiWszystkie dane w IndexedDB są szyfrowane AES-256-GCM:
Administrator może zdalnie wyczyścić dane z konkretnego urządzenia (np. zgubionego telefonu):
Aplikacja to Progressive Web App — można ją zainstalować na ekranie głównym smartfona bez sklepu z aplikacjami.
app.serwis.cloud/mobile w Chromeapp.serwis.cloud/mobile w SafariBez App Store: Nie trzeba czekać na zatwierdzenie aktualizacji przez Apple/Google. Każda zmiana deployu na Railway jest od razu dostępna u wszystkich techników (po restarcie aplikacji).
Typowy dzień technika z wykorzystaniem wszystkich funkcji aplikacji mobilnej:
| Godzina | Akcja | W aplikacji |
|---|---|---|
| 07:30 | Technik wstaje, otwiera aplikację | Pulpit — widzi 3 interwencje na dziś |
| 07:45 | Potwierdza przyjęcie interwencji | Zakładka Zadania → klik interwencja → „Potwierdź przyjęcie" |
| 08:00 | Wyjazd z domu | Naciska START → DOM, wpisuje licznik, klik WYŚLIJ |
| 08:15 | Tankuje po drodze | PALIWO → ON (Diesel), 45L, zapisuje |
| 09:00 | Na pierwszym obiekcie | PRZYJAZD → wybór obiektu z listy, ZATWIERDŹ |
| 09:10 | Otwiera szczegóły interwencji | Widzi offline package: kontakty, historia, materiały |
| 09:15 | Rozpoczyna prace | „Rozpocznij prace" → Timer pracy |
| 10:30 | Potrzebuje materiał z magazynu | Zakładka Magazyn → CAŁY STAN → POBIERZ |
| 11:15 | Pauza na kawę | PAUZA → (kliknięcie ponownie gdy wraca) |
| 12:00 | Kończy prace, wypełnia protokół | Zakładka Protokoły → DO WYKONANIA → formularz |
| 12:15 | Skanuje użyte materiały | Skaner EAN w formularzu protokołu |
| 12:30 | Klient podpisuje protokół | SignaturePad — podpis palcem |
| 12:35 | Wysyła protokół | „Zakończ i wyślij" — dyspozytor dostaje push |
| 12:40 | Wyjazd z obiektu | WYJAZD → Wykonane |
| 13:00 | Następny obiekt — powtórka | PRZYJAZD + prace + protokół + WYJAZD |
| 17:00 | Koniec dnia | STOP → DOM, końcowy licznik, ZAKOŃCZ PRACĘ |