Zajęcia próbne — zapis przez recepcję
Pracownik może zapisać uczestnika na zajęcia próbne, ale formalności wykonuje klient. Regulamin, politykę prywatności i płatność klient załatwia sam, z linku, który dostaje SMS-em i e-mailem. Zapis jest potwierdzony dopiero wtedy, gdy klient zaakceptuje dokumenty i zapłaci.
Część 1. Instrukcja dla recepcji
Jak to wygląda w praktyce
- Zapisujesz uczestnika tak jak dotychczas — z listy klientów („Zapisz na próbne") albo z kalendarza uczestnika.
- Na ostatnim kroku nie ma już checkboxa z regulaminem. Zamiast niego jest informacja, że dokumenty i płatność wykona klient. Przycisk nazywa się „Zapisz i wyślij link klientowi".
- Po zapisie system wysyła klientowi SMS i e-mail z linkiem. Okno zapisu pokazuje, czy obie wiadomości poszły, oraz sam link — możesz go skopiować i podać klientowi przy ladzie.
- Miejsce jest zajęte przez cały czas trwania okna (domyślnie 120 minut, nigdy dłużej niż do startu zajęć). W grafiku przy uczestniku widać żółtą ikonę „czeka na regulamin".
- Klient otwiera link, zaznacza akceptację regulaminu i polityki prywatności i płaci przez Przelewy24. Po zaksięgowaniu wpłaty zapis jest potwierdzony, a klient dostaje standardowe potwierdzenie zajęć próbnych.
- Jeśli klient nie zdąży, płatność wygasa, miejsce wraca do puli, a w historii zajęć zostaje wpis o wygaśnięciu.
Czego pracownik nie robi
- nie akceptuje regulaminu ani RODO za klienta — checkboxa po prostu nie ma,
- nie płaci za klienta online — z tego ekranu nikt nie trafia na Przelewy24, nawet gdy w ustawieniach włączona jest „Natychmiastowa płatność" (ta dotyczy wyłącznie zapisów, które klient robi sam w swoim panelu).
Gotówka przy kasie
Możesz przyjąć gotówkę lub kartę jak dotychczas — z modułu płatności. Wpłata nie zastępuje akceptacji dokumentów: po opłaceniu link klienta zmienia się w ekran „zostały jeszcze dokumenty" z jednym przyciskiem „Akceptuję dokumenty". Dopóki klient go nie kliknie, przy uczestniku widnieje ikona oczekiwania.
Kiedy system nie pozwoli zapisać
Zapis zostaje odrzucony w całości, zanim cokolwiek pojawi się w kalendarzu:
| Komunikat | Co zrobić |
|---|---|
| Uczestnik nie ma numeru telefonu | Uzupełnij numer w profilu. Bez numeru nie ma jak wysłać linku, a klient straciłby miejsce, nie wiedząc dlaczego. |
| Uczestnik nie ma daty urodzenia | Uzupełnij datę. Od wieku zależy, który regulamin obowiązuje — do 18 lat regulamin szkółki, od 18 lat dla dorosłych i seniorów. |
Jeśli nie uda się przygotować linku, zapis jest cofany razem z płatnością — nie zostaje „wiszące" miejsce, którego klient nie może potwierdzić.
Na jaki numer i adres idzie wiadomość
SMS: na numer uczestnika, a gdy go nie ma — na numer właściciela konta (opiekuna). E-mail: na adres właściciela konta; adresy techniczne klientów lokalnych i gości są pomijane.
Czego to nie dotyczy
- zapisów, które klient robi sam w swoim panelu — tam zgoda jest w formularzu, a płatność od razu po zapisie,
- publicznego kreatora zapisu z linku marketingowego (Linki rejestracyjne) — ma własne kroki ze zgodami i płatnością,
- pracownika zapisującego własnego uczestnika (gdy uczestnik należy do jego konta) — wtedy jest klientem jak każdy inny i przechodzi ścieżkę klienta.
Ustawienia (panel administratora)
Zajęcia próbne → Ustawienia płatności, osobno dla każdego miasta:
- Czas dla klienta na dokończenie zapisu (minuty) — domyślnie 120, zakres 5–1440. Dotyczy wyłącznie zapisów przez pracownika. Termin jest zawsze skracany do startu zajęć.
- Natychmiastowa płatność i Czas na płatność — dotyczą zapisów, które klient robi sam.
Część 2. Dokumentacja techniczna
Przepływ
Rozstrzygnięcie ścieżki
enrollInSkillAssessment wybiera ścieżkę na podstawie sesji, nie parametru z
UI — wszystkie wejścia (okno zapisu, modal confirm-join, publiczny kreator)
przechodzą przez ten sam warunek:
const clientCompletesFormalities =
(await isEmployeeEnrollment()) && player.owner_email !== session.user.email;
Na tej ścieżce akcja nie wymaga consent.accepted i nie zapisuje żadnej
zgody — zgoda powstaje dopiero przy akceptacji przez klienta, z actorType: 'customer'.
Okno i płatność
| Element | Zapis klienta | Zapis pracownika |
|---|---|---|
| Okno miejsca | trial_payment_time (dom. 10 min) | trial_client_completion_time (dom. 120 min), skracane do startu zajęć |
payment.payment_expires_at | koniec okna | koniec okna |
| Zgoda | w formularzu, przy zapisie | przy akceptacji z linku |
| Płatność | przekierowanie klienta na P24 | link /pay/{token} |
handleSkillAssessmentEnrollment porównuje wpłatę z attendee.paymentExpiresAt
zamiast ze sztywnym limitem 135 minut — inaczej płatność wykonana w dłuższym
oknie wracałaby na portfel zamiast potwierdzić miejsce.
Model danych
Nie ma nowej tabeli. Wykorzystane są:
| Obiekt | Rola |
|---|---|
payment_link.related_type='trial' | link klienta; related_id i game_id wskazują te same zajęcia |
attendee.statuteExpiresAt | znacznik „czeka na dokumenty" — ten sam, który pokazuje grafik dla zapisów na zajęcia stałe |
consent_log | źródło prawdy dla RODO: trial_registration_statute + privacy_policy |
notification_types | trial_enrollment_pending_client (migracja 0278), kanał SMS |
E-mail idzie z lokalnego szablonu mails/trial-enrollment-pending-client.html
(renderowanego przez lib/mail-render), a nie z SendGrida — link jest
jednorazowy i musi wyjść w tym samym wywołaniu, w którym powstał.
Bezpieczeństwo
Token linku jest jedynym poświadczeniem: strona /pay/{token} nie wymaga
logowania, a link nigdy nie trafia do logów. Endpointy publiczne mają limit
5 żądań na minutę. Link buduje się z CLIENT_ORIGIN (a nie z
NEXT_PUBLIC_BASE_URL workera admina), żeby klient nie wylądował na stronie
logowania do panelu.
Powiązane dokumenty
- Akceptacja regulaminu po zapisie przez recepcję — analogiczna procedura dla zajęć stałych, wakacyjnych i indywidualnych
- Linki rejestracyjne
- Rejestr zgód