Skip to content

Klientský portál

Cesta: /client
Komponenta: src/pages/ClientPortal.jsx
Role: Veřejné (bez admin přihlášení)

Samostatné rozhraní pro klienty kliniky. Dostupné na stejné doméně jako admin část, ale bez horní navigace.

Struktura portálu

graph TD
    ENTRY["/client"] --> OTP[OTP přihlášení]
    ENTRY --> PAY["/client?payment=1 — Platební odkaz"]

    OTP --> DASH[Dashboard klienta]
    DASH --> BOOK[Rezervace termínu]
    DASH --> HIST[Historie termínů]
    DASH --> CRED[Kreditní účet]
    DASH --> CANCEL[Storno termínu]

    PAY --> OTP

Přihlášení klientů (OTP)

flowchart TD
    A[Klient zadá e-mail nebo telefon] --> B[Backend vygeneruje 6-místný kód]
    B --> C[Kód odeslán e-mailem přes Resend]
    C --> D[Klient zadá kód]
    D --> E{Ověření}
    E -- platný --> F{Počet klientů?}
    E -- neplatný / expirovaný --> G[Chyba — zkus znovu]
    F -- jeden --> H[Přihlášení]
    F -- více se stejným kontaktem --> I[Výběr profilu]
    F -- žádný --> J[Automatické vytvoření nového klienta]
    I & J --> H

Session je uložena v localStorage. Platnost kódu je 10 minut.

Funkce portálu

Rezervace termínu

  1. Výběr výkonu
  2. Výběr terapeuta (zobrazí jen ty s volnými sloty v příštích 42 dnech)
  3. Výběr data (zvýrazněna jen data s dostupnými sloty)
  4. Výběr konkrétního časového slotu
  5. Potvrzení → vytvoření Booking + CalendarEvent + odeslání platební výzvy e-mailem

Rezervace přes portál mají příznak is_online_booking: true — admin pak nemůže měnit klienta.

Platba

Klient může zaplatit:

  • Kreditem (pokud má dostatečný zůstatek)
  • Balíčkem sezení (pokud má aktivní)
  • Platební bránou (gateway — stav integrace nezjištěn)

Přehled termínů

  • Nadcházející termíny s možností storna
  • Storno klientem respektuje lhůtu (cancellation_free_hours)
  • Historie minulých termínů

Kreditní účet

  • Aktuální zůstatek
  • Výpis transakcí (dobití, platby, vratky)

Platební flow (příchozí odkaz)

Klient může přijít na portál přímo přes platební odkaz z e-mailu:

/client?payment=1&booking_id=...&date=...&start=...&service=...

Po OTP přihlášení se zobrazí konkrétní rezervace k zaplacení.