# Recepcja i zmiana terminu: próba offline

Syntalith, 11 października 2026. Fikcyjne wizyty jednego zasobu, jawne godziny otwarcia i przerwa, strefa Europe/Warsaw. Program nie korzysta z modelu AI, nie wysyła wiadomości i nie łączy się z zewnętrznym kalendarzem.

## Wynik i zakres

W końcowym przepływie przeglądarkowym utworzono dwie wizyty w dwóch wystąpieniach godziny 02:00 podczas jesiennej zmiany czasu. Zajęty termin zatrzymał przełożenie, zachowując pierwotną wizytę. Po anulowaniu drugiej wizyty przełożono pierwszą; identyczna ponowiona komenda nie utworzyła kolejnego zdarzenia. Na końcu obie wizyty anulowano. Osobne odczyty HTTP, SQLite i nowego procesu potwierdziły dwie anulowane wizyty, pięć komend i pięć zdarzeń. Pięć rekordów powiadomień miało stan STALE, jeden UNKNOWN po lokalnym pobraniu. UNKNOWN nie jest dowodem wysyłki.

Przejście interfejsu obejmowało dziesięć widoków przy szerokościach 1440 i 390 pikseli. Pierwsza wersja formularza domyślnie wybierała wcześniejszą godzinę. Usunięto tę podpowiedź i w powtórnym przepływie brak wyboru wywołał błąd. Zachowano oba zapisy przeglądu. Testy i implementację przygotował ten sam agent; odczyt nowego procesu nie oznacza niezależnego audytu ani próby awarii dysku.

## Odtworzenie testów

Pobierz experiment.zip i rozpakuj go. Potrzebny jest Python 3.9 lub nowszy, biblioteka standardowa oraz baza stref IANA zawierająca Europe/Warsaw. Jeśli system jej nie ma, moduł zoneinfo wymaga osobnego pakietu tzdata. Z katalogu pakietu:

```sh
python3 -B -m unittest discover -s booking-control-demo-2026-10-10 -p 'test_*.py' -v
python3 -B -m unittest discover -s booking-local-time-2026-10-11 -p 'test_*.py' -v
python3 -B -m unittest discover -s booking-reception-workflow-2026-10-11 -p 'test_*.py' -v
python3 -B -m unittest discover -s booking-reception-ui-2026-10-11 -p 'test_*.py' -v
```

Cztery zestawy zawierają 16, 11, 11 i 4 testy. Liczba 42 oznacza liczbę metod testowych, nie skuteczność modelu ani liczbę przetestowanych branż. Testy sprawdzają między innymi kolizje, nieaktualne rewizje, ponowienia, cofnięcie transakcji po błędzie, zapis po ponownym otwarciu, zmianę czasu i ograniczenia lokalnego API.

## Uruchomienie panelu

Utwórz nowy katalog roboczy poza katalogiem publicznym. Poniższe polecenie przygotowuje losowy token demonstracyjny; nie używaj danych klientów.

```sh
python3 -c "from pathlib import Path; import secrets; p=Path('/tmp/syntalith-recepcja-demo'); p.mkdir(exist_ok=True); t=p/'token'; t.write_text(secrets.token_urlsafe(32)); t.chmod(0o600)"
python3 -B booking-reception-ui-2026-10-11/server.py --db /tmp/syntalith-recepcja-demo/demo.sqlite --token-file /tmp/syntalith-recepcja-demo/token --port 3198
```

Otwórz http://127.0.0.1:3198 i wpisz zawartość pliku token. Serwer jest przypisany do loopback. Zakończ go Ctrl+C. Kolejne uruchomienie z tym samym plikiem bazy odczytuje wcześniejsze wizyty; do nowego przebiegu użyj nowej ścieżki bazy.

Wczytaj stan. Sprawdź domyślny termin bez wyboru wystąpienia godziny: powinien pojawić się błąd. Wybierz wcześniejsze wystąpienie początku i końca, zapisz wizytę. Dla drugiej fikcyjnej osoby zmień ID wizyty i wybierz późniejsze wystąpienia. Sprawdź próbę przełożenia pierwszej na zajęty termin, anulowanie drugiej, ponowne przełożenie pierwszej oraz powtórzenie ostatniej komendy. Przycisk pobrania powiadomień nie uruchamia transportu.

## Granice

To lokalny demonstrator z jednym zaufanym kontem i stałym zegarem, bez produkcyjnego logowania, wielu zasobów, płatności, rezerwacji cyklicznych i synchronizacji z dostawcą kalendarza. Historia w SQLite nie jest odporna na administratora bazy. Dostępność odczytana przed zapisem jest orientacyjna; zapis sprawdza ją ponownie. Biblioteka może być wywołana poza ograniczonym API, więc nie stanowi samodzielnej granicy uprawnień.

Pobranej wcześniej kopii powiadomienia nie da się cofnąć w niepodłączonym systemie. Dostawca wiadomości, anulowanie jego kolejki, potwierdzenia doręczeń i warunki kontaktu wymagają osobnego projektu oraz prób. Nie badano danych pacjentów, terminów hotelowych, przepustowości warsztatu ani redukcji nieobecności. Materiał nie potwierdza gotowej integracji sektorowej.

Mechanizm niejednoznacznych godzin opisuje dokumentacja Python: https://docs.python.org/3/library/zoneinfo.html. Dwie wartości fold rozróżniają momenty, ale formularz musi jeszcze uzyskać świadomy wybór użytkownika.
