Spis treści

Dokumentacja produktu

KCClose Remote

Aplikacja Android do bezpiecznego zarządzania datą zamknięcia okresu w programie KCClose.

Aplikacja
2.0 (VersionCode 2)
Dokumentacja
1.0
Data
16 sierpnia 2026
Pakiet
pl.adi.kcclose

1. Cel i zakres

KCClose Remote umożliwia operatorowi odczyt bieżącej daty zamknięcia okresu oraz zapis nowej daty z telefonu lub tabletu z Androidem. Aplikacja komunikuje się z usługą REST udostępnianą przez program KCClose.

Funkcje użytkowe

  • obsługa wielu instalacji KCClose,
  • odczyt daty oraz liczby dni wstecz,
  • wybór daty z kalendarza,
  • czytelne potwierdzenia i komunikaty błędów.

Zmiany w wersji 2.0

  • hasło API zapisywane osobno dla każdego serwera,
  • zapis daty metodą PUT z JSON,
  • interpretacja kodów HTTP i błędów API,
  • odświeżony interfejs kartowy.

2. Wymagania

Urządzenie Android

  • Android 5.0 / API 21 lub nowszy,
  • dostęp do tej samej sieci LAN albo VPN,
  • możliwość połączenia z portem REST KCClose.

Program KCClose

  • uruchomiony serwer REST,
  • skonfigurowany port i hasło API,
  • aktywne połączenie KCClose z bazą danych.
Zgodność: aplikacja mobilna 2.0 wymaga kontraktu API z endpointami /getstatus i /setdate oraz autoryzacji nagłówkiem X-Auth-Token.

3. Instalacja i pierwsze uruchomienie

  1. Zainstaluj podpisany plik APK z zaufanego źródła.
  2. Jeśli system blokuje instalację, zezwól wskazanej aplikacji na instalowanie nieznanych aplikacji.
  3. Uruchom KCClose Remote.
  4. Przy braku konfiguracji aplikacja wyświetli informację o braku serwerów.
  5. Dodaj pierwszy serwer zgodnie z rozdziałem 4.
Migracja ze starszej wersji: starsze wpisy mogą nie zawierać hasła. Otwórz każdy wpis przez „Edytuj serwer”, uzupełnij hasło i zapisz konfigurację.

4. Konfiguracja serwera

4.1 Dodanie serwera

  1. Otwórz kartę zarządzania serwerami.
  2. Wprowadź nazwę rozpoznawalną dla operatora.
  3. Podaj adres IP, nazwę hosta albo pełny adres z prefiksem http:// lub https://.
  4. Wprowadź port od 1 do 65535.
  5. Wpisz hasło API identyczne jak w konfiguracji REST KCClose. Minimalna długość w aplikacji wynosi 12 znaków.
  6. Wybierz „Dodaj serwer” lub zapisz edytowany wpis.
PolePrzykładUwagi
NazwaCentralaNazwa widoczna na liście.
Adres192.168.1.20Bez prefiksu aplikacja doda http://.
Port8088Musi odpowiadać konfiguracji KCClose.
Hasło••••••••••••Przesyłane jako X-Auth-Token.

4.2 Edycja i usuwanie

Wybierz wpis z listy, aby przełączyć aktywny serwer. Funkcja edycji aktualizuje istniejący wpis. Usunięcie wymaga potwierdzenia i nie zmienia konfiguracji programu KCClose.

5. Codzienna obsługa

5.1 Odczyt statusu

  1. Wybierz właściwy serwer.
  2. Użyj funkcji odświeżenia statusu.
  3. Sprawdź nazwę serwera, datę zamknięcia i liczbę dni wstecz.

Aplikacja wykonuje GET /getstatus. Odpowiedź poprawna aktualizuje kartę statusu i pole daty.

5.2 Zmiana daty

  1. Dotknij pola daty i wybierz dzień w kalendarzu.
  2. Sprawdź format RRRR-MM-DD.
  3. Wybierz „Zapisz datę na serwerze”.
  4. Po sukcesie aplikacja ponownie pobierze status.
Zasada operacyjna: przed zapisem zawsze sprawdź nazwę wybranego serwera i datę. Jedna aplikacja może obsługiwać wiele instalacji KCClose.

6. Komunikaty błędów i diagnostyka

Kod / sytuacjaZnaczenieDziałanie operatora
Brak HTTPTelefon nie nawiązał połączenia.Sprawdź Wi‑Fi/VPN, adres, port, zaporę i działanie KCClose.
401 unauthorizedBrak lub niezgodne hasło API.Wpisz identyczne hasło jak w konfiguracji REST KCClose.
400 invalid_dateSerwer odrzucił datę.Sprawdź format i zakres dopuszczony przez KCClose.
400 missing_dateBrak pola data.Sprawdź zgodność wersji klienta i zgłoś błąd utrzymaniu.
400 invalid_jsonTreść nie jest obiektem JSON.Sprawdź zgodność wersji klienta i serwera.
404 closed_period_not_foundBrak daty zamkniętego okresu w bazie.Zweryfikuj dane i konfigurację bazy w KCClose.
404 not_foundNieznany endpoint.Sprawdź adres i wersję KCClose.
405 method_not_allowedZła metoda HTTP.Dla /setdate wymagane jest PUT; sprawdź wersję aplikacji.
413 request_too_largeTreść przekracza 4096 bajtów.Zgłoś niezgodność klienta; zwykłe żądanie ma kilka dziesiątek bajtów.
500 database_errorBłąd operacji bazodanowej.Sprawdź log KCClose i stan bazy.
503 database_unavailableKCClose nie ma połączenia z bazą.Przywróć połączenie programu KCClose z bazą.
Nieprawidłowa odpowiedźOdpowiedź 2xx nie ma oczekiwanych pól JSON.Sprawdź zgodność wersji i log serwera.

6.1 Zalecana kolejność diagnostyki

  1. Potwierdź, że KCClose jest uruchomiony.
  2. Sprawdź połączenie KCClose z bazą.
  3. Porównaj adres, port i hasło w obu programach.
  4. Zweryfikuj dostępność portu z tej samej sieci lub VPN.
  5. Sprawdź kod HTTP w aplikacji i log KCClose.

7. Bezpieczeństwo i przechowywanie danych

Każde wywołanie REST zawiera hasło w nagłówku X-Auth-Token. Hasło jest przypisane do konkretnego wpisu serwera. Po stronie KCClose konfigurację chroni Windows DPAPI. Po stronie Androida lista serwerów jest serializowana do pliku servers.dat w prywatnym katalogu aplikacji File.DirInternal.

Ważne: plik servers.dat nie ma dodatkowego szyfrowania na poziomie aplikacji. Na urządzeniu z rootem lub przejętym kontem systemowym dane mogą zostać odczytane.

7.1 Zalecenia

  • Używaj unikalnego, losowego hasła dłuższego niż wymagane minimum.
  • Nie instaluj aplikacji na urządzeniach współdzielonych, zrootowanych lub bez blokady ekranu.
  • Udostępniaj port REST wyłącznie w zaufanej sieci LAN albo przez VPN.
  • Nie wystawiaj serwera REST bezpośrednio do Internetu.
  • Przy HTTP token nie jest szyfrowany transportowo; preferuj sieć izolowaną lub VPN.
  • Po utracie telefonu natychmiast zmień hasło REST w KCClose.

8. Architektura i przepływ danych

WarstwaRolaTechnologia / dane
Aplikacja mobilnaInterfejs, konfiguracja, walidacja, REST.B4A 13.40, OkHttpUtils2, JSON, XUI Views
SiećTransport żądań i odpowiedzi.HTTP(S), X-Auth-Token, JSON UTF-8
KCCloseAutoryzacja, walidacja i logika biznesowa.Delphi, TIdHTTPServer
Baza danychŹródło i miejsce zapisu daty zamkniętego okresu.Dostęp wyłącznie przez KCClose

8.1 Przepływ odczytu

Operator wybiera serwer.
Klient wysyła GET z tokenem.
KCClose autoryzuje i czyta bazę.
Klient parsuje JSON i aktualizuje status.

8.2 Przepływ zapisu

Operator wybiera datę.
Klient wysyła PUT z JSON.
KCClose waliduje i zapisuje datę.
Klient ponawia GET i odświeża status.

8.3 Model lokalnej konfiguracji

Klucz MapTypOpis
NazwaStringNazwa widoczna w interfejsie.
IPStringAdres IP, host lub adres z prefiksem.
PortStringPort REST od 1 do 65535.
HasloStringToken przekazywany w X-Auth-Token.

9. Kontrakt REST API

Adres bazowy: http://<host>:<port>. Klient zachowuje podany prefiks http:// lub https://; jeśli go nie ma, dodaje http://.

9.1 Odczyt statusu

GET /getstatus   Nagłówek: X-Auth-Token: <hasło>

{
  "ok": true,
  "dataZamkniecia": "2026-08-16",
  "dniWstecz": 3
}

9.2 Ustawienie daty

PUT /setdate   Nagłówki: X-Auth-Token oraz Content-Type: application/json; charset=utf-8. Limit treści: 4096 bajtów.

{
  "data": "2026-08-16"
}
{
  "ok": true,
  "message": "Data końca zamkniętego okresu została ustawiona na 2026-08-16."
}

9.3 Format błędu

{
  "ok": false,
  "error": "unauthorized",
  "message": "Brak lub nieprawidłowe hasło w nagłówku X-Auth-Token."
}

Klient interpretuje kod HTTP i pole error. Pole message służy jako szczegół techniczny; operator otrzymuje uproszczony komunikat po polsku.

10. Budowa i wydanie aplikacji

10.1 Wymagane środowisko

SkładnikWersja / ustawienie
B4A13.40
JavaJDK 19; lokalnie C:\java\jdk-19.0.2
Android SDK PlatformAPI 35
android.jarC:\Android\platforms\android-35\android.jar
Build-Tools35.0.0
minSdkVersion21
targetSdkVersion35

10.2 Biblioteki B4A

B4XCollections, Core, OkHttpUtils2, RandomAccessFile, XUI Views, AppCompat oraz JSON.

10.3 Konfiguracja ścieżki SDK

W B4A wybierz Tools > Configure Paths i wskaż C:\Android\platforms\android-35\android.jar. Użycie android-34 powoduje błąd linkera dotyczący android:attr/windowOptOutEdgeToEdgeEnforcement, ponieważ atrybut jest dostępny od API 35.

10.4 Procedura wydania

  1. Zaktualizuj VersionCode i VersionName.
  2. Wykonaj Clean Project i kompilację Release.
  3. Podpisz APK właściwym kluczem i zabezpiecz jego kopię.
  4. Zainstaluj wydanie na czystym urządzeniu testowym.
  5. Wykonaj checklistę z rozdziału 11.
  6. Archiwizuj APK, kod źródłowy, numer wersji i datę wydania.

11. Testy odbiorcze i utrzymanie

11.1 Minimalna checklista wydania

  • Pierwsze uruchomienie bez servers.dat pokazuje informację o braku serwerów.
  • Walidacja odrzuca puste pola, port poza zakresem i hasło krótsze niż 12 znaków.
  • Dodany serwer pozostaje po ponownym uruchomieniu.
  • Edycja zmienia wpis, a usunięcie wymaga potwierdzenia.
  • GET /getstatus pokazuje datę i dni wstecz.
  • PUT /setdate wysyła JSON, zapisuje datę i odświeża status.
  • Błędne hasło wyświetla 401 bez ujawnienia tokenu.
  • Brak sieci, wyłączony KCClose i blokada portu dają czytelną diagnostykę.
  • Brak połączenia KCClose z bazą poprawnie obsługuje 503.
  • Nieprawidłowa data poprawnie obsługuje 400 invalid_date.
  • Interfejs jest czytelny w pionie na urządzeniu docelowym.

11.2 Mapa najważniejszych procedur

ProceduraOdpowiedzialność
Activity_Create / ZbudujInterfejsInicjalizacja, wczytanie danych i budowa interfejsu.
PobierzStatusGET /getstatus, autoryzacja i aktualizacja pulpitu.
btnWyslij_ClickPUT /setdate, JSON, potwierdzenie i odświeżenie.
OpiszBladMapowanie odpowiedzi HTTP/API na komunikaty operatora.
btnDodaj_ClickWalidacja i dodanie lub aktualizacja serwera.
ZapiszListeSerializacja listy serwerów do servers.dat.

12. Historia zmian i słownik

12.1 Wersja 2.0

  • Usunięto hasło zaszyte na stałe w kodzie.
  • Dodano hasło API w konfiguracji każdego serwera.
  • Zmieniono zapis daty z GET na PUT z treścią JSON.
  • Dodano obsługę odpowiedzi JSON i kodów błędów API.
  • Dodano edycję serwerów oraz walidację portu i hasła.
  • Przebudowano interfejs na ciemny układ kartowy.
  • Zastąpiono starszy DateDialog kalendarzem B4XDateTemplate.
  • Podniesiono targetSdkVersion do 35.

12.2 Słownik

TerminZnaczenie
APIInterfejs komunikacyjny udostępniony przez KCClose.
RESTKomunikacja HTTP oparta na endpointach i metodach.
Token / hasło APIWspólna tajna wartość przesyłana w X-Auth-Token.
EndpointAdres zasobu, np. /getstatus lub /setdate.
JSONTekstowy format danych żądań i odpowiedzi.
LANLokalna, zaufana sieć komputerowa.
VPNSzyfrowany tunel do sieci, w której działa KCClose.
DPAPIMechanizm Windows używany przez KCClose do ochrony hasła.

12.3 Źródła dokumentacji

Dokument opracowano na podstawie kodu źródłowego KCClose_Remote.b4a (wersja aplikacji 2.0), modułu Starter.bas oraz implementacji REST w module UMain.pas programu KCClose. Stan na 16 sierpnia 2026.