Reklamacje aplikacja działająca w przeglądarce

Aplikacja do reklamacji obsługuje zgłoszenia przez przeglądarkę internetową, bez instalowania programu na stanowisku pracownika czy na telefonie klienta. Według opisu producenta Studio RMA.net opiera się na platformie ASP.NET i bazie Microsoft SQL Server. Interfejs webowy działa w przeglądarce komputera, a także na telefonach z Androidem i iOS.

Wybór między aplikacją przeglądarkową a instalowaną ma skutki organizacyjne. Aplikację przeglądarkową aktualizuje się raz, na serwerze, i od razu widzą ją wszyscy użytkownicy. Aplikacja instalowana wymaga wersji na każdy system oraz tego, żeby użytkownicy przyjęli aktualizacje.

PodejścieInstalacjaAktualizacjaAparat telefonuOgraniczenie
Aplikacja instalowana ze sklepuna każdym telefoniepo stronie użytkownikapełny dostęposobne wersje na Androida i iOS
Aplikacja w przeglądarcebrakna serwerze, dla wszystkich narazprzez pole pliku z atrybutem capturewymaga połączenia z siecią
Aplikacja PWAopcjonalny skrót na ekraniena serwerzejak w przeglądarcepraca offline wymaga dodatkowej implementacji
Kobieta w koszuli w kratę i pomarańczowej bluzce trzyma otwarty laptop lub dokument przy biurku, obok stoi monitor i kubek z długopisami
Praca z aplikacją w przeglądarce nie wymaga instalacji programu na stanowisku, więc wystarczy dostęp do adresu systemu.

Brak zasięgu jest głównym ograniczeniem aplikacji przeglądarkowej. Zgłoszenie sporządzone w piwnicy lub w hali bez sieci trzeba wysłać po odzyskaniu połączenia. Aplikacje PWA potrafią zapisać dane lokalnie i wysłać je później, ale wymagają osobnej pracy programistycznej i nie zastępują aplikacji z własną bazą offline.

Ogólne zasady budowy takich systemów opisuje artykuł o aplikacjach webowych, a odrębne ujęcie rozwiązania z dostępem internetowym zawiera tekst o reklamacjach w aplikacji internetowej.

Aplikacja PWA i praca offline

Aplikacja PWA (Progressive Web App) to strona z zarejestrowanym service workerem, który przechwytuje żądania sieciowe. Gdy sieci brakuje, zgłoszenie można zapisać w lokalnej bazie przeglądarki, IndexedDB, i wysłać po odzyskaniu połączenia. Interfejs Background Sync ułatwia takie ponowienie, ale nie działa we wszystkich przeglądarkach, więc aplikacja musi umieć opróżnić kolejkę także wtedy, gdy użytkownik otworzy ją ponownie. Zgłoszenia zapisane lokalnie wymagają ochrony, bo urządzenie może zostać zgubione.

Zgłoszenie ze zdjęciem z telefonu

Zdjęcie usterki skraca ocenę zasadności reklamacji, bo pracownik widzi wadę, zanim towar dotrze do serwisu. W przeglądarce telefonu wystarczy pole pliku z atrybutem capture: na telefonie otwiera ono aparat, a na komputerze okno wyboru pliku. Atrybut opisuje dokumentacja MDN.

<input type="file" id="zdjecie" accept="image/*" capture="environment">

<script>
async function wyslijZdjecie(numerSprawy, plik) {
  const dane = new FormData();
  dane.append('numerSprawy', numerSprawy);
  dane.append('zdjecie', plik);
  const odpowiedz = await fetch('/api/reklamacje/zalaczniki', { method: 'POST', body: dane });
  return odpowiedz.ok;   // false: pokazac komunikat i pozwolic ponowic wysylke
}
</script>

Studio RMA.net pozwala projektować własne pola formularza oraz dodawać checklisty i zdjęcia. Budowę formularza i rejestrację zgłoszenia w bazie opisuje tekst o programie RMA on-line. Przykład skryptu jest uproszczony: pomija identyfikację użytkownika i obsługę błędów sieci.

Kontrole po stronie serwera

Zdjęcie z telefonu waży kilka megabajtów. W klasycznym ASP.NET domyślny limit żądania wynosi 4 MB (parametr maxRequestLength), a IIS ma osobny limit maxAllowedContentLength, więc oba trzeba dostosować do realnych rozmiarów zdjęć. Zmniejszenie obrazu w przeglądarce przed wysyłką ogranicza ruch i czas przesyłania. Serwer nie może jednak ufać temu, co przysłała przeglądarka, i powtarza kontrole.

  • Typ pliku - sprawdzanie zawartości pliku, a nie tylko rozszerzenia w nazwie.
  • Rozmiar - limit na jeden plik i na całe zgłoszenie.
  • Orientacja - odczyt znacznika EXIF i obrót obrazu, bo telefon zapisuje obrót w metadanych, a nie w pikselach.
  • Metadane - usunięcie współrzędnych GPS z pliku przed zapisem, ponieważ zdradzają miejsce zrobienia zdjęcia.

Plik i rekord załącznika powinny powstawać razem. Jeśli zapis pliku się powiedzie, a wpis w bazie nie, zostaje plik bez właściciela. W odwrotnej kolejności w sprawie pojawia się załącznik, którego nie da się otworzyć. Prosty sposób to zapis pliku pod tymczasową nazwą, wpis w bazie w transakcji i dopiero wtedy zmiana nazwy na docelową.

Numer RMA i naklejka na paczce

Procedura RMA (Return Merchandise Authorization) formalizuje przyjmowanie zgłoszeń i odsyłanie produktów do serwisu. Aplikacja pilnuje, żeby każdy etap przebiegał według ustalonych zasad. Poniższa tabela pokazuje sześć etapów procesu w aplikacji internetowej.

EtapCo dzieje się w aplikacji
Zgłoszenie wadyklient opisuje usterkę w formularzu online i podaje dane produktu
Wstępna weryfikacjazgłoszenie jest oceniane na podstawie danych z formularza
Nadanie numeru RMAnumer powstaje w chwili stwierdzenia konieczności przesłania produktu do gwaranta
Oznakowanie przesyłkiklient oznacza paczkę numerem RMA, często naklejką z kodem kreskowym lub QR wygenerowanym przez system
Odbiór w serwisieserwis oczekuje przesyłki w czasie ważności zgłoszenia, a paczka bez numeru zwykle nie zostaje przyjęta
Rozpatrzenie i decyzjadalsze kroki, na przykład naprawa albo zwrot środków, prowadzone według numeru nadanego na starcie

W procedurze wysyłkowej numer RMA pełni rolę autoryzacji zwrotu i powstaje po wstępnej weryfikacji, gdy wiadomo już, że towar trzeba odesłać. Numer sprawy w rejestrze reklamacji może istnieć wcześniej. Znaczenie numeru i jego miejsce w dokumentach wyjaśnia artykuł o numerze RMA.

Mężczyzna w okularach i szarej koszuli trzyma tablet, za nim widać pomarańczowe chmury i ekran z wykresami
Zgłoszenie z tabletu lub telefonu: zdjęcie usterki i opis trafiają do sprawy zanim towar opuści magazyn klienta.

Kod kreskowy czy kod QR na naklejce

Kod Code 128 koduje pełny zestaw znaków ASCII i odczytuje go każdy skaner liniowy, więc dla numeru RMA składającego się z kilkunastu znaków wystarcza. Kod QR mieści znacznie więcej danych i odczytuje go aparat telefonu, co pozwala zakodować adres internetowy sprawy. Przy naklejkach drukowanych na drukarce etykiet ważniejsze od rodzaju kodu są wyraźny kontrast oraz wolne pole wokół symbolu. Zasady kodowania w logistyce omawia tekst o kodach kreskowych w magazynie.

Ważność numeru RMA

Serwis oczekuje przesyłki przez czas ważności zgłoszenia, więc numer RMA ma datę ważności. Zadanie cykliczne oznacza jako wygasłe zgłoszenia, w których termin nadania paczki minął, i powiadamia klienta o możliwości ponowienia. Termin powinien być widoczny na dokumencie i w wiadomości, bo klient, który o wygaśnięciu dowiaduje się w punkcie nadania, traci zaufanie do procesu.

UPDATE r
SET r.StatusId = @StatusWygasla
FROM dbo.Reklamacja AS r
WHERE r.StatusId = @StatusOczekujeNaPrzesylke
  AND r.DataWaznosciRMA < SYSDATETIMEOFFSET();

Bezpieczeństwo aplikacji reklamacyjnej

Producent podaje, że Studio RMA.net szyfruje transmisję danych protokołem TLS, zabezpiecza konto indywidualnym loginem i hasłem każdego użytkownika, przechowuje dane zgodnie z wymogami RODO i wykonuje regularne kopie zapasowe. Każdy z tych elementów opiera się na mechanizmie, który warto znać przy ocenie oferty.

  • Transport - TLS szyfruje połączenie, a serwer przekierowuje adresy HTTP na HTTPS i wysyła nagłówek HSTS.
  • Uwierzytelnianie - osobne konto dla każdego pracownika, a hasła przechowywane jako skróty z solą, a nie jawnie.
  • Dane osobowe - zbierane w zakresie potrzebnym do reklamacji, z określonym czasem przechowywania.
  • Kopie zapasowe - okresowo odtwarzane w próbie, bo kopia, której odtworzenia nie sprawdzono, jest tylko założeniem.

Reguła: konto współdzielone przez zespół uniemożliwia ustalenie, kto zmienił decyzję w sprawie, więc każdy pracownik ma własny login.

Dane klienta w reklamacji są danymi osobowymi, więc okres ich przechowywania trzeba powiązać z czasem, w którym roszczenia mogą jeszcze zostać zgłoszone. Po jego upływie dane osobowe można zanonimizować: zamienić na wartości neutralne i zachować dane statystyczne, takie jak model towaru i kod przyczyny. Dzięki temu raporty jakościowe pozostają kompletne bez trzymania danych, które nie są już potrzebne.

Wymuszanie HTTPS w aplikacji ASP.NET Core opisuje dokumentacja Enforce HTTPS na Microsoft Learn. Szyfrowanie połączenia między aplikacją a bazą konfiguruje się osobno, a wskazówki podaje strona o szyfrowaniu połączeń z SQL Server. Uprawnienia użytkowników i ich zakres w systemie reklamacyjnym opisuje tekst o programie do obsługi reklamacji.

Aplikacja RMA na wielu stanowiskach i w oddziałach

Według opisu producenta aplikacja nadaje się do firm wielostanowiskowych i wielooddziałowych, a dostępność online pozwala używać jej jednocześnie wielu pracownikom, także poza Polską. Za tym opisem stoją dwa mechanizmy bazy danych: współbieżność zapisów i odczytów oraz poprawne liczenie czasu w różnych strefach.

Współbieżność w SQL Server

Domyślny poziom izolacji READ COMMITTED używa blokad, więc odczyt listy spraw może czekać na trwający zapis. Opcja READ_COMMITTED_SNAPSHOT zamienia to na wersjonowanie wierszy: czytający dostaje ostatnią zatwierdzoną wersję i nie czeka. Ceną jest większe zużycie bazy tempdb, w której SQL Server trzyma wersje wierszy. Mechanizm opisuje przewodnik blokowania i wersjonowania wierszy.

ALTER DATABASE Reklamacje SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;

Przy wielu jednoczesnych użytkownikach znaczenie ma także pula połączeń. Aplikacja ADO.NET otwiera połączenia z bazą w puli o ograniczonej wielkości, więc każde połączenie zamyka się zaraz po użyciu, najlepiej w bloku using. Niezamknięte połączenia wyczerpują pulę i aplikacja zaczyna odpowiadać błędami przy większym ruchu.

Czas w różnych strefach

Oddziały w różnych krajach wymagają zapisu czasu razem z przesunięciem względem UTC. Typ DATETIMEOFFSET przechowuje je w jednej kolumnie, więc porównanie terminu SLA nie zależy od strefy komputera, na którym działa aplikacja. Przeglądarka pokazuje czas w strefie użytkownika, a baza przechowuje ten sam moment bez przeliczeń.

CREATE TABLE dbo.Reklamacja (
    Id             INT IDENTITY(1,1) PRIMARY KEY,
    DataRejestracji DATETIMEOFFSET(0) NOT NULL DEFAULT SYSDATETIMEOFFSET(),
    TerminOdpowiedzi DATETIMEOFFSET(0) NULL
);

Dokumenty w formatach xls i PDF

Producent wymienia jako standard zapis i obsługę plików xls oraz generowanie dokumentów PDF. Pliki w formacie Excel służą do wymiany zestawień, na przykład listy spraw z filtra. PDF nadaje się do dokumentów, które nie mają się zmieniać po wysłaniu, takich jak protokół reklamacyjny albo pismo do klienta.

Wydruki generuje się zwykle z szablonów raportowych, a szablon RDL pozwala zmienić układ dokumentu bez zmiany aplikacji. Nazwa pliku z numerem sprawy ułatwia odnalezienie dokumentu po latach. Wysłany PDF warto zapisać w sprawie jako załącznik wewnętrzny, żeby wersja przekazana klientowi była dostępna dokładnie w tej postaci. Przykład drogi od zapytania do wydruku pokazuje artykuł o SQL Report Builder i raportach RDL, a zestawienia kontrolne opisuje tekst o programie do nadzorowania reklamacji.

Kryteria wyboru oferty na aplikację do reklamacji

Wybór systemu RMA online to decyzja na kilka lat, więc warto ją poprzedzić porównaniem ofert. Kryteria poniżej oddzielają rozwiązanie, które spełnia potrzeby firmy, od takiego, które dobrze wygląda w materiałach sprzedażowych.

KryteriumPytanie do dostawcy
Model licencjonowaniaczy dostępny jest wariant SaaS (abonament) oraz wdrożenie lokalne i który lepiej pasuje do polityki IT firmy
Czas wdrożeniaile trwa uruchomienie od podpisania umowy do startu produkcyjnego i czy jest wersja demonstracyjna
Wsparcie i SLAjaki jest gwarantowany czas reakcji i czy wsparcie działa w języku polskim
Integracjeczy system łączy się z ERP i sklepem internetowym przez gotowe API
Skalowalnośćczy aplikacja utrzyma wydajność przy wzroście liczby zgłoszeń i użytkowników
Bezpieczeństwo danychczy dostawca zapewnia szyfrowanie transmisji i kopie zapasowe, a także zgodność z RODO
Kobieta w czerwonych okularach patrzy na monitor z tabelą pełną danych, jedną dłoń trzyma przy brodzie
Ocena oferty obejmuje sprawdzenie listy spraw na przykładowych danych, a nie tylko lekturę opisu funkcji.

Próba na własnych danych daje więcej niż prezentacja. Kilkanaście prawdziwych zgłoszeń z ostatniego kwartału, wprowadzonych do wersji testowej, pokazuje, czy pola formularza pasują do produktów, czy statusy odpowiadają procesowi i czy raporty odpowiadają na pytania kierownika. Wynik próby warto zapisać w tabeli i porównać między dostawcami.

Według opisu producenta Studio RMA.net oferuje API REST do integracji z systemami ERP oraz z platformami e-commerce i kurierskimi. Ofertę warto sprawdzić na wersji demonstracyjnej z kilkoma przykładowymi zgłoszeniami, zanim zapadnie decyzja. Aplikację można obejrzeć w demo reklamacji, a model dostarczania w abonamencie opisuje producent na stronie o systemie RMA w modelu SaaS.

Nazwa RMA obejmuje cały proces przyjmowania zgłoszeń, więc oferta powinna obejmować cały proces, od formularza po raportowanie. Ogólne omówienie programu w wersji przeglądarkowej zawiera tekst program RMA online, a szczegóły obiegu sprawy podaje artykuł o oprogramowaniu do obsługi reklamacji.