Aplikacja mobilna technika — SerwisRun Mobile

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.

Wersja 1.1·Opublikowano: 2026-05-08
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.
Zrzuty ekranu w przygotowaniu: Wersja dokumentu na dzień publikacji nie zawiera zrzutów z wdrożonej aplikacji — placeholdery poniżej zostaną zastąpione realnymi zrzutami z app.serwis.cloud/mobile po finalizacji wdrożenia produkcyjnego. Opisy elementów ekranów są aktualne i odpowiadają wdrożonej wersji.

Spis treści

  1. Przegląd — 5 zakładek TabBar
  2. Pulpit (ekran główny)
  3. Karta dyżuru — „Twój region"
  4. Akcje stanu: START / STOP / PRZYJAZD / WYJAZD
  5. Szybkie akcje: PRIV / PAUZA / PALIWO
  6. Zadania — lista interwencji
  7. Wirtualny Magazyn
  8. Protokoły naprawy
  9. Skaner EAN
  10. Praca offline
  11. Instalacja jako PWA
  12. Praktyczny workflow dnia

1 Przegląd — 5 zakładek TabBar

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żkaZawartość
Pulpit/mobileAkcje stanu, dyżur, Ostatnie wpisy
Zadania/mobile/interventionsLista interwencji (Dziś / Nadchodzące / Zakończone)
Magazyn/mobile/warehouseWirtualny Magazyn (MOJE NARZĘDZIA / CAŁY STAN)
Protokoły/mobile/protocolsLista protokołów (DO WYKONANIA / WYKONANE)
Skaner/mobile/scannerCiągły skan kodów EAN
Auto-redirect: Użytkownik z rolą technician jest automatycznie przekierowywany do /mobile przy logowaniu (komponent TechnicianGate w App.tsx). Nie widzi desktopowego panelu.

2 Pulpit (ekran główny)

📱
Ekran główny aplikacji mobilnej
Zrzut zostanie dodany po wdrożeniu
Pulpit — niebieski header z datą, godziną i lokalizacją GPS. Okrągłe akcje PRIV/PAUZA/PALIWO. Karta „Twój region" z dyżurnym. Grid 2x2 akcji stanów. Lista „Ostatnie wpisy".
📱
Ekran logowania
Zrzut zostanie dodany po wdrożeniu
Logowanie — prosty ekran z jedną opcją „Zaloguj przez Google" (konto służbowe). Brak komplikacji — tylko to co potrzebne w terenie.

Elementy ekranu głównego (od góry do dołu)

  1. Niebieski header:
  2. Pasek szybkich akcji — 3 okrągłe kolorowe przyciski:
  3. Karta „Twój region" — informacja o dyżurnym technika dla Twojego oddziału; klikalna, rozwija się z listą wszystkich dyżurnych
  4. Grid 2x2 akcji stanów:
  5. Lista „Ostatnie wpisy" — aktywne operacje (tracking, tankowanie, jazda prywatna) + dzisiejsze konserwacje i interwencje
  6. Bottom status bar — fedback wizualny akcji („Pobieranie lokalizacji…" na niebiesko, „Zapisano" na zielono, błąd na czerwono)

3 Karta dyżuru — „Twój region"

📱
Karta dyżuru rozwinięta
Zrzut zostanie dodany po wdrożeniu
Karta dyżuru (rozwinięta) — lista dyżurnych techników per oddział z przyciskami „Zadzwoń" i „PRZEJMIJ"

Co pokazuje karta?

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.).

Akcje w karcie

AkcjaEfekt
ZadzwońOtwiera natywną aplikację telefoniczną z numerem dyżurnego (tel:)
PRZEJMIJPrzejmujesz 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.

4 Akcje stanu: START / STOP / PRZYJAZD / WYJAZD

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.

Maszyna stanów technika
IDLE → TRAVELING → ON_SITE → WORKING ↔ BREAK → RETURNING → IDLE
+ REFUELING (pomiędzy stanami drogowymi)
+ PRIVATE_TRIP (z IDLE)

Modal START — początek dnia pracy

📱
Modal START
Zrzut zostanie dodany po wdrożeniu
START: Dane Pojazdu — wybór lokalizacji startu (DOM/BIURO), numer rejestracyjny pojazdu, stan licznika, opcjonalny znacznik Wyjazd Awaryjny

Po rozpoczęciu pracy naciskasz START. Otwiera się modal:

Przycisk WYŚLIJ zapisuje transition z aktualnym GPS. System wie, że jesteś „w drodze" (TRAVELING).

Modal PRZYJAZD — na obiekcie

📱
Modal PRZYJAZD
Zrzut zostanie dodany po wdrożeniu
PRZYJAZD: Obiekt — wybór obiektu z listy dzisiejszych zleceń lub wpisanie ręcznie

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.

Modal WYJAZD — status zadania

📱
Modal WYJAZD
Zrzut zostanie dodany po wdrożeniu
WYJAZD: Status Zadania — wybór: Wykonane albo Do dalszej realizacji

Po zakończeniu prac na obiekcie naciskasz WYJAZD. Wybierasz status:

System przechodzi do stanu RETURNING — wracasz do bazy/domu.

Modal STOP — koniec dnia pracy

📱
Modal STOP
Zrzut zostanie dodany po wdrożeniu
STOP: Koniec Pracy — lokalizacja zakończenia (DOM/BIURO), numer rejestracyjny, końcowy stan licznika

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ę.

5 Szybkie akcje: PRIV / PAUZA / PALIWO

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.

PRIV — jazda prywatna

📱
Modal PRIV
Zrzut zostanie dodany po wdrożeniu
Jazda Prywatna (PRIV) — numer rejestracyjny, stan licznika, opcjonalny cel wyjazdu

Używasz gdy jedziesz prywatnie firmowym pojazdem. System rejestruje trip jako niepłatny (nie wlicza się do kosztów interwencji). Wymaga wpisania:

PAUZA — przerwa w pracy

Szybka rejestracja przerwy (obiad, kawa). Jedno kliknięcie rozpoczyna, kolejne kończy. System wstrzymuje tracking czasu pracy, ale zachowuje kontekst interwencji.

PALIWO — tankowanie

📱
Modal PALIWO
Zrzut zostanie dodany po wdrożeniu
Tankowanie — rodzaj paliwa (ON/PB/LPG/EV/Hybryda), ilość litrów, nr rejestracyjny, stan licznika

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.

6 Zadania — lista interwencji

Zakładka Zadania wyświetla listę Twoich interwencji w 3 tabach:

Workflow interwencji

Statusy interwencji
draft → assigned → acknowledged → traveling → on_site → working → completed → closed
  1. Dyspozytor przypisuje interwencję technikowi — status assigned, push notification
  2. Technik potwierdza przyjęcie — przycisk „Potwierdź przyjęcie" → status acknowledged
  3. Rozpoczęcie pracy — przycisk „Rozpocznij prace" → otwiera Timer Pracy (/mobile/interventions/:id/work)
  4. Checklist zakresu prac — zadania do wykonania z polami „sprawne/usterka/pominięte"
  5. Wypełnienie protokołu — przycisk „Wypełnij protokół" → Formularz offline
  6. Zakończenie — przycisk „Zakończ i wyślij" → status completed, push do dyspozytora
Google 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.

7 Wirtualny Magazyn

📱
Wirtualny Magazyn — CAŁY STAN
Zrzut zostanie dodany po wdrożeniu
Wirtualny Magazyn — CAŁY STAN — lista wszystkich dostępnych materiałów w oddziale z przyciskiem POBIERZ

Zakładka Magazyn zawiera dwa taby:

MOJE NARZĘDZIA

Lista wszystkich materiałów i wyposażenia w Twoim osobistym magazynie technika. Każdy technik ma własny magazyn przypisany (warehouses.responsibleUserId = user.id).

CAŁY STAN

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.

Workflow pobrania

  1. Technik wyszukuje materiał (po nazwie, typie lub EAN)
  2. Kliknięcie POBIERZ → potwierdzenie dialogowe
  3. Backend tworzy MM: POST /warehouses/documents z type=MM, source=oddział, target=magazyn technika, quantity=1
  4. Stan natychmiast odświeżany w obu tabach
  5. Materiał jest dostępny do użycia w protokole naprawy

Skan EAN w magazynie

Floating 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.

8 Protokoły naprawy

Zakładka Protokoły wyświetla listę wszystkich protokołów w dwóch tabach:

TabZawartość
DO WYKONANIAProtokoły nieukończone (status: pending, in_progress). Kliknięcie otwiera formularz wypełniania
WYKONANEZakończone protokoły (completed, closed, invoiced) — historia do wglądu

Formularz protokołu offline

Formularz protokołu dostosowany do użycia w terenie:

  1. Wykonane czynności — dla każdego zadania z checklisty: Plus pole „Uwagi" dla każdego zadania.
  2. Zużyte materiały — lista z magazynu technika. Stepper do ustawienia ilości (+/-). Możliwość zeskanowania EAN kamery, aby dodać materiał do protokołu.
  3. Zdjęcia dokumentacyjne — max 10 zdjęć, capture="environment" (tylna kamera smartfona), auto-compresja do 1920px JPEG 80%.
  4. Podsumowanie — TextArea z opisem wykonanej naprawy. Przycisk „Generuj z AI" tworzy wstępny tekst.
  5. Podpis klienta — imię i nazwisko + SignaturePad (podpis palcem) lub zdjęcie papierowego potwierdzenia.

Auto-save co 30 sekund

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ć.

Wysyłka protokołu

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).

9 Skaner EAN

Zakładka Skaner to dedykowany ekran skanera kodów kreskowych EAN (i innych formatów: EAN-8, CODE_128, UPC_A, QR).

Funkcjonalność

Integracja z protokołem

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.

10 Praca offline

Aplikacja zaprojektowana do pracy w trudnych warunkach (piwnica, teren wiejski, parkingi podziemne). Cała funkcjonalność działa offline.

Pakiet offline (Offline Package)

Przed wyjazdem na interwencję system pobiera pakiet offline — kompletne dane potrzebne do pracy bez internetu:

ElementZawartość
siteSnapshotPełne dane obiektu: adres, GPS, kontakty, godziny dostępności, uwagi
objectHistoryOstatnie 10 interwencji i konserwacji na tym obiekcie
contactPersonsLista osób kontaktowych z telefonami (klikalne tel:)
materialsListStan magazynu technika + rezerwacje dla tej interwencji
issuedEquipmentWyposażenie wydane technikowi (drabiny, narzędzia)
instructionLinksLinki do instrukcji technicznych (offline jeśli pobrane)

Kolejka operacji offline

Wszystkie operacje (start tracking, potwierdzenie statusu, submit protokołu, upload zdjęć) są kolejkowane w IndexedDB (tabela pendingOperations) i wysyłane po powrocie online:

Szyfrowanie danych offline

Wszystkie dane w IndexedDB są szyfrowane AES-256-GCM:

Remote wipe

Administrator może zdalnie wyczyścić dane z konkretnego urządzenia (np. zgubionego telefonu):

  1. Admin klika „Wymaż zdalnie" w panelu urządzeń
  2. Web Push WIPE_DEVICE wysłany do Service Workera
  3. SW czyści IndexedDB + caches + unregistruje się
  4. Użytkownik zostaje wylogowany przy najbliższym kontakcie z internetem

11 Instalacja jako PWA

Aplikacja to Progressive Web App — można ją zainstalować na ekranie głównym smartfona bez sklepu z aplikacjami.

Android (Chrome)

  1. Otwórz app.serwis.cloud/mobile w Chrome
  2. Po 3 sekundach pojawi się niebieski banner „Zainstaluj aplikację"
  3. Kliknij „Instaluj"
  4. Ikona pojawi się na pulpicie Android

iOS (Safari)

  1. Otwórz app.serwis.cloud/mobile w Safari
  2. Kliknij ikonę „Udostępnij" (kwadrat ze strzałką)
  3. Wybierz „Dodaj do ekranu głównego"
  4. Potwierdź „Dodaj"

Co dostajesz po instalacji?

Bez 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).

12 Praktyczny workflow dnia

Typowy dzień technika z wykorzystaniem wszystkich funkcji aplikacji mobilnej:

GodzinaAkcjaW aplikacji
07:30Technik wstaje, otwiera aplikacjęPulpit — widzi 3 interwencje na dziś
07:45Potwierdza przyjęcie interwencjiZakładka Zadania → klik interwencja → „Potwierdź przyjęcie"
08:00Wyjazd z domuNaciska START → DOM, wpisuje licznik, klik WYŚLIJ
08:15Tankuje po drodzePALIWO → ON (Diesel), 45L, zapisuje
09:00Na pierwszym obiekciePRZYJAZD → wybór obiektu z listy, ZATWIERDŹ
09:10Otwiera szczegóły interwencjiWidzi offline package: kontakty, historia, materiały
09:15Rozpoczyna prace„Rozpocznij prace" → Timer pracy
10:30Potrzebuje materiał z magazynuZakładka Magazyn → CAŁY STAN → POBIERZ
11:15Pauza na kawęPAUZA → (kliknięcie ponownie gdy wraca)
12:00Kończy prace, wypełnia protokółZakładka Protokoły → DO WYKONANIA → formularz
12:15Skanuje użyte materiałySkaner EAN w formularzu protokołu
12:30Klient podpisuje protokółSignaturePad — podpis palcem
12:35Wysyła protokół„Zakończ i wyślij" — dyspozytor dostaje push
12:40Wyjazd z obiektuWYJAZD → Wykonane
13:00Następny obiekt — powtórkaPRZYJAZD + prace + protokół + WYJAZD
17:00Koniec dniaSTOP → DOM, końcowy licznik, ZAKOŃCZ PRACĘ
Efekt: Pełny dzień pracy udokumentowany w systemie bez konieczności późniejszego wpisywania danych. Dyspozytor w czasie rzeczywistym widzi status każdego technika. Raporty generowane automatycznie. Brak papierów do przepisywania.