Věrnostní program (PRD-04)
Colosseum Premium — bodový systém a e-shop odměn. Celý scope je F1.
Plné znění najdete níže na této stránce.
Scope
| Fáze | Obrazovek | Odhad |
|---|
| MVP | 0 (placeholder „Již brzy" v P9) | — |
| F1 | 5 (hub, e-shop, detail, empty, potvrzení) | 22 h |
Bodový systém
| Aktivita | Body |
|---|
| Nákup vstupenky | 5 % z ceny |
| Narozeniny | 50 bodů |
| Kvízy / soutěže | 10–25 bodů |
E-shop odměn
| Kategorie | Rozsah bodů |
|---|
| Slevové kupóny | 200–400 |
| Merchandise | 500–1000 |
| VIP / občerstvení | 25–500 |
- Body ≠ peníze, pouze výměna v e-shopu
- Expirace: 12 měsíců rolling
- Max výměna: 1 odměna per typ per den
Detailní specifikace (Plné znění PRD)
PRD-04: Věrnostní program — Colosseum MA
| |
|---|
| Verze | 1.0 |
| Datum | 2026-02-23 |
| Stav | Draft |
| Vlastník | Symbio — Analýza & Design |
1. Přehled a cíle
Věrnostní program Colosseum Premium je kreditní systém, jehož cílem je motivovat uživatele k opakovaným nákupům a dlouhodobému vztahu s aplikací. Body se sbírají za nákupy a další interakce, uplatňují se výhradně ve věrnostním e-shopu — nelze je směnit za reálné peníze.
Toto rozhodnutí vychází z ekonomické reality (viz context/user-journeys/vernostni-program.md): při marži Colossea by klasický cashback byl nemotivační (cca 3 %, tj. ~33 nákupů na jednu vstupenku zdarma). Bodový systém s odměnami mimo vstupenky (merch, VIP, kupóny od pořadatelů) umožňuje vyšší vnímanou hodnotu.
Celý věrnostní program je F1 — v MVP se neimplementuje. MVP pouze připraví UI placeholder v účtu (P9) pro budoucí integraci.
Cíle
| Cíl | Metrika | Fáze |
|---|
| Zvýšit opakované nákupy | Podíl uživatelů s >2 nákupy za 6 měsíců | F1 |
| Zvýšit engagement s aplikací | Počet návštěv / měsíc u členů programu vs. nečlenů | F1 |
| Zvýšit průměrnou hodnotu objednávky | AOV členů vs. nečlenů | F1 |
| Zvýšit retenci (30/60/90 dní) | Retence členů programu vs. nečlenů | F1 |
| Aktivovat spolupráci s pořadateli | Počet pořadatelů nabízejících odměny | F1 |
Vazba na další PRD
- PRD-01 (Nákup vstupenek): Checkout (P6) v F1 zobrazuje inline info o bodech za nákup. Košík (P5) v F1 může zobrazit upsell „+X bodů za tento nákup".
- PRD-02 (Klientská zóna): Věrnostní hub (P10) je přístupný z uživatelského účtu (P9). Onboarding (S6) může obsahovat krok o věrnostním programu.
- PRD-03 (Notifikace): Push notifikace o nových odměnách, blížící se expiraci bodů, dosažení milníku (F1).
2. User stories
MVP
| ID | Role | Story | Akceptační kritéria |
|---|
| US-04-01 | Registrovaný uživatel | Chci vidět, že aplikace bude mít věrnostní program | V uživatelském účtu (P9) je položka „Colosseum Premium" s popiskem „Již brzy" nebo s ikonou zámku. Tap zobrazí krátký teaser. |
| ID | Role | Story | Akceptační kritéria |
|---|
| US-04-02 | Registrovaný uživatel | Chci vidět svůj aktuální stav bodů | Hub (P10) zobrazuje aktuální počet bodů, úroveň, progress bar k dalšímu milníku. |
| US-04-03 | Registrovaný uživatel | Chci rozumět, jak body sbírám | Hub (P10) obsahuje sekci „Jak sbírat body" s přehledem zdrojů (nákupy, narozeniny, kvízy). |
| US-04-04 | Registrovaný uživatel | Chci vidět historii svých bodových transakcí | Hub (P10) obsahuje timeline bodových transakcí: zisk (+ body) a útrata (- body) s popisem zdroje. |
| US-04-05 | Registrovaný uživatel | Chci procházet odměny v e-shopu | E-shop (P11) zobrazuje grid/list odměn s filtrováním dle kategorie, bodovou cenou a dostupností. |
| US-04-06 | Registrovaný uživatel | Chci vidět detail odměny před výměnou | Detail odměny (S16) zobrazuje fotografii, popis, podmínky, bodovou cenu a CTA pro výměnu. |
| US-04-07 | Registrovaný uživatel | Chci vyměnit body za odměnu | Po potvrzení výměny na S16 se odečtou body, zobrazí se potvrzení (X23) a odměna se aktivuje. |
| US-04-08 | Registrovaný uživatel | Chci vidět, kolik bodů získám za aktuální nákup | V checkoutu (P6) inline řádek „Za tento nákup získáte +X bodů". |
| US-04-09 | Registrovaný uživatel | Chci uplatnit slevový kupón z věrnostního programu v košíku | Kupón vyměněný v e-shopu se zobrazí v sekci kupónů v košíku (P5) a lze jej aplikovat na objednávku. |
| US-04-10 | Registrovaný uživatel | Chci dostat bonus k narozeninám | Systém automaticky připíše 50 bodů v den narozenin (vyžaduje datum narození v profilu). Push notifikace: „Všechno nejlepší! Připsali jsme vám 50 bodů." |
| US-04-11 | Registrovaný uživatel | Chci vidět, jak daleko mám k další odměně | Progress bar v hubu (P10) s milestone: „Ještě X bodů do [Název odměny]". Nejbližší dosažitelná odměna. |
| US-04-12 | Registrovaný uživatel | Chci dostat notifikaci, když mi brzy vyprší body | Push notifikace X dní před expirací bodů (konfigurovatelné, default 14 dní). |
F2+
| ID | Role | Story | Akceptační kritéria |
|---|
| US-04-13 | Registrovaný uživatel | Chci sbírat body i za další interakce (kvízy, soutěže) | Gamifikační moduly: kvízy s 10–25 body za správné odpovědi, výzvy (challenge). |
| US-04-14 | Registrovaný uživatel | Chci vidět svou úroveň a exkluzivní benefity vyšších úrovní | Level systém (Bronze/Silver/Gold/Platinum) s progresí dle celkových nasbíraných bodů. Vyšší úrovně odemykají exkluzivní odměny. |
TBD
—
3. Funkční specifikace
3.1 MVP scope
V MVP se věrnostní program neimplementuje. Připravuje se pouze:
- Placeholder v účtu (P9): Položka „Colosseum Premium" v menu s ikonou a popiskem „Již brzy" nebo za zámkem.
- Tap na placeholder: Zobrazí teaser bottom sheet nebo inline sekci s:
- Krátký popis programu (1–2 věty)
- Ilustrace nebo ikona
- „Upozornit mě, až bude k dispozici" — toggle/CTA pro push notifikaci při spuštění
- Backend: Základní datový model pro body se může připravit, ale není exponovaný v UI.
3.2 F1 rozšíření
Bodový systém — Colosseum Premium
Sbírání bodů
| Zdroj | Body | Podmínky | Frekvence |
|---|
| Nákup vstupenek | 5 % z ceny nákupu (zaokrouhleno nahoru) | Průměrný nákup 2 000 Kč = 100 bodů | Každý dokončený nákup |
| Dárek k narozeninám | 50 bodů | Vyžaduje datum narození v profilu | 1× ročně |
| Kvízy a soutěže | 10–25 bodů per interakce | Správné odpovědi / dokončení | Dle CMS kampaní |
| First purchase bonus | 50 bodů | Pouze první nákup v aplikaci | 1× (welcome bonus) |
| Registrace | 20 bodů | Při dokončení registrace | 1× |
Poznámka k přepočtu: 1 bod nemá přímou korunovou hodnotu. Hodnota odměn je nastavena v CMS nezávisle na bodové ceně — záleží na dohodě s pořadatelem. Princip: body ≠ peníze.
Uplatnění bodů — Věrnostní e-shop
| Kategorie | Bodový rozsah | Příklady | Poznámka |
|---|
| Slevové kupóny | 200–400 bodů | Sleva 10–30 % na konkrétní akci | Pořadatel poskytuje slevu, Colosseum nastavuje bodovou cenu. TasteTown model — pořadatel zvyšuje povědomí a počet nákupů výměnou za slevu. |
| Merch | 500–1 000 bodů | Trička, tašky, plakáty, programy | Merch od pořadatele (reklamní předmět) nebo interní Colosseum merch. Logistika: objednávka → fulfillment (lhůta na doručení). |
| VIP / občerstvení | 25–500 bodů | Drink na baru (50 bodů), VIP sedadlo (500 bodů) | Technicky: výměna za „kategorii zákazníka" uplatnitelnou v košíku. Na baru: ukázání kupónu v aplikaci. |
Expirace bodů
- Body expirují 12 měsíců po posledním zisku (rolling window)
- Každý nový bodový zisk resetuje 12měsíční okno pro VŠECHNY body
- Push notifikace 14 dní před expirací (konfigurovatelné v CMS)
- Expirované body se smažou a nelze obnovit
Věrnostní hub (P10)
- Přístup: Z uživatelského účtu (P9), tab bar položka „Premium", nebo deep link z notifikace
- Layout:
- Header: Velký číselný ukazatel aktuálních bodů, animovaný při změně
- Progress bar: Vizuální progres k nejbližší dosažitelné odměně (název + bodová cena)
- Úroveň (F2+): Badge s aktuální úrovní (v F1 pouze „Člen" — bez level systému)
- Sekce „Jak sbírat body": Ikonky + text per zdroj (nákupy, narozeniny, kvízy) s body za každý
- Sekce „Historie": Timeline bodových transakcí:
- Per řádek: datum, popis (např. „Nákup: La Traviata — +100 bodů"), running balance
- Filter: „Vše" / „Zisky" / „Útraty"
- Pagination (load more)
- CTA: „Prozkoumat odměny" → navigace na e-shop (P11)
- Footer link: „Pravidla programu" → external link nebo in-app rich text
- Empty state (X21):
- Ilustrace + „Zatím nemáte žádné body"
- „Jak začít sbírat" — 3 kroky (nakupujte, slavte narozeniny, hrajte kvízy)
- CTA: „Prozkoumat akce"
Věrnostní e-shop / katalog (P11)
- Přístup: Z hubu (P10) CTA, z tab baru (sub-tab), deep link z notifikace
- Layout:
- Header: Aktuální body (compact) + „Máte X bodů"
- Filtr chips: Vše / Kupóny / Merch / VIP & občerstvení
- Grid/List toggle
- Karty odměn:
- Obrázek (thumbnail)
- Název odměny
- Bodová cena (badge)
- Dostupnost indicator: „Skladem" / „Omezená nabídka" / „Vyprodáno"
- Badge „Nové" pro čerstvě přidané
- Badge „Nedostatek bodů" šedě, pokud uživatel nemá dost bodů
- Sorting: Výchozí „Doporučené", volitelné „Nejlevnější" / „Nejdražší" / „Nejnovější"
- Empty state: Pokud žádné odměny nejsou dostupné (nepravděpodobné — fallback)
Detail odměny (S16)
- Layout:
- Hero image: Fotografie odměny (full-width)
- Název + bodová cena (velké číslo s ikonou bodů)
- Popis: Rich text — co odměna zahrnuje, jak ji uplatnit
- Podmínky: Platnost, omezení (konkrétní akce, pořadatel, venue), stav skladu
- Sekce „Jak uplatnit":
- Kupón: „Kupón se aktivuje v sekci Moje kupóny a můžete jej uplatnit v košíku"
- Merch: „Objednávka bude doručena do X pracovních dnů na vaši adresu"
- VIP/občerstvení: „Ukažte kupón na baru / při vstupu"
- CTA sticky bar:
- Dostatek bodů: „Vyměnit za X bodů" (primary, aktivní)
- Nedostatek: „Potřebujete ještě X bodů" (disabled) + „Jak sbírat" link
- Vyprodáno: „Momentálně nedostupné" (disabled)
- Potvrzovací dialog (před výměnou):
- „Opravdu chcete vyměnit X bodů za [Název odměny]?"
- „Akce je nevratná."
- CTA: „Potvrdit výměnu" / „Zrušit"
- Potvrzení výměny (X23):
- Success ilustrace + „Odměna je vaše!"
- Detail: co uživatel získal, jak uplatnit
- CTA: „Moje kupóny" (pro kupóny) / „Sledovat zásilku" (pro merch) / „Zpět do e-shopu"
Integrace s checkoutem (F1 rozšíření P5, P6)
- Košík (P5):
- Inline info řádek pod cenovou rekapitulací: „Za tento nákup získáte +X bodů ⭐"
- Pokud uživatel má aktivní slevový kupón z věrnostního programu, zobrazí se v sekci kupónů jako předvyplněný
- Checkout (P6):
- Po sekci „Celková cena" řádek: „+X bodů na váš účet Colosseum Premium"
- Kupón uplatněný v košíku se promítne do slevového řádku
Notifikace (integrace s PRD-03)
| Typ notifikace | Trigger | Deep link |
|---|
| Body připsány za nákup | Dokončená platba | Hub (P10) |
| Narozeninový bonus | Datum narození | Hub (P10) |
| Body z kvízu | Dokončení kvízu | Hub (P10) |
| Nová odměna v e-shopu | CMS publikace | E-shop (P11) |
| Blížící se expirace bodů | T-14d před expirací | Hub (P10) |
| Milník dosažen | Celkové body ≥ milestone | Hub (P10) |
| Odměna doručena / připravena | Fulfillment status change | Detail kupónu |
3.3 F2+ rozšíření
Level systém
| Úroveň | Celkové nasbírané body (lifetime) | Benefity |
|---|
| Bronze | 0–499 | Základní odměny v e-shopu |
| Silver | 500–1 999 | Odměny Silver + přednostní přístup k limitovaným nabídkám |
| Gold | 2 000–4 999 | Odměny Gold + exkluzivní kupóny + early access na akce |
| Platinum | 5 000+ | Vše výše + osobní pozvánky na VIP akce + Platinum merch |
- Úroveň se počítá z lifetime bodů (ne aktuálního zůstatku) — utracené body se počítají
- Downgrade: pokud uživatel nezíská žádné body za 12 měsíců, úroveň klesne o 1 stupeň
- Badge úrovně se zobrazuje v hubu (P10), v profilu (P9), a volitelně u jména v recenzích
Gamifikace
- Kvízy: CMS-řízené kvízy (5–10 otázek o kultuře, pořadatelích, historii venue). Odměna: 10–25 bodů per kvíz. Max 1 kvíz za den.
- Challenge systém: „Navštivte 3 různé venue tento měsíc" → bonus body. CMS konfigurovatelné.
- Streak: Bonus za X nákupů v řadě (3 nákupy za 3 měsíce → 2× body za další nákup).
3.4 K diskusi
—
4. Business rules
| ID | Pravidlo | Podmínky |
|---|
| BR-04-01 | Body se přičítají až po dokončené platbě | Rezervace (hotovost) = body se přičtou až po zaplacení na místě (status: paid) |
| BR-04-02 | Body za nákup = 5 % z celkové ceny, zaokrouhleno nahoru | Základ: celková cena vstupenek bez poplatků. 2 000 Kč → 100 bodů. |
| BR-04-03 | Body ≠ reálné peníze | Body nelze převést na koruny, vyplatit, ani použít jako slevu mimo věrnostní e-shop |
| BR-04-04 | Body expirují 12 měsíců po posledním zisku | Každý nový zisk (nákup, narozeniny, kvíz) resetuje okno pro VŠECHNY body uživatele |
| BR-04-05 | Výměna bodů je nevratná | Po potvrzení výměny se body odečtou a nelze vrátit. Kupón/odměna se aktivuje. |
| BR-04-06 | Max 1 narozeninový bonus ročně | Vyžaduje datum narození v profilu. Připsání v den narozenin (00:01). |
| BR-04-07 | Kupóny z e-shopu mají omezenou platnost | Default 30 dní od vyměnění (konfigurovatelné per odměna v CMS) |
| BR-04-08 | Slevový kupón = 1 per objednávku | V košíku lze uplatnit max 1 kupón z věrnostního programu na jednu objednávku |
| BR-04-09 | Pořadatel definuje výši slevy, Colosseum bodovou cenu | Kupón „20 % sleva na La Traviata" = pořadatel dává slevu, Colosseum nastavuje 300 bodů v e-shopu |
| BR-04-10 | Refund nákupu = odebrání bodů | Pokud je vstupenka vrácena (refund), body za nákup se odečtou. Pokud uživatel mezitím body utratil a jde do mínusu, zůstatek = 0 a další zisky nejprve pokryjí záporný stav. |
| BR-04-11 | Merch fulfillment | Objednávka merch z e-shopu → notifikace pořadateli → doručení do X pracovních dnů. Lhůta per pořadatel (CMS). |
| BR-04-12 | Občerstvení / bar kupón | Technicky: „kategorie zákazníka" uplatnitelná na konkrétní venue/pořadatele. Kontrola: ukázání QR v aplikaci na baru. |
5. Data model
LoyaltyAccount
| Atribut | Typ | Popis |
|---|
| id | UUID | Unikátní identifikátor |
| userId | UUID | FK → User (1:1) |
| currentBalance | Int | Aktuální zůstatek bodů |
| lifetimeEarned | Int | Celkové nasbírané body (pro level systém) |
| lifetimeSpent | Int | Celkové utracené body |
| level | Enum | bronze, silver, gold, platinum (F2+: v F1 všichni = „member") |
| lastEarnedAt | DateTime | Datum posledního zisku (pro výpočet expirace) |
| expiresAt | DateTime | Datum expirace bodů (lastEarnedAt + 12 měsíců) |
| createdAt | DateTime | Datum založení účtu |
LoyaltyTransaction
| Atribut | Typ | Popis |
|---|
| id | UUID | Unikátní identifikátor |
| loyaltyAccountId | UUID | FK → LoyaltyAccount |
| type | Enum | earn, spend, expire, refund_deduct |
| source | Enum | purchase, birthday, quiz, registration, first_purchase, reward_exchange, expiration, refund |
| amount | Int | Počet bodů (+ pro earn, - pro spend) |
| balanceAfter | Int | Zůstatek po transakci |
| description | String | Popis (např. „Nákup: La Traviata — Národní divadlo") |
| referenceId | UUID? | FK → Order / Reward / Quiz (zdroj transakce) |
| createdAt | DateTime | Datum transakce |
Reward (CMS)
| Atribut | Typ | Popis |
|---|
| id | UUID | Unikátní identifikátor |
| name | String | Název odměny |
| description | RichText | Popis a podmínky |
| category | Enum | coupon, merch, vip, food_drink |
| pointPrice | Int | Bodová cena |
| imageUrl | String | URL fotografie |
| organizerId | UUID? | FK → Organizer (pokud vázáno na pořadatele) |
| eventId | UUID? | FK → Event (pokud vázáno na konkrétní akci) |
| venueId | UUID? | FK → Venue (pokud vázáno na místo) |
| stock | Int? | Skladová dostupnost (null = neomezeno) |
| validityDays | Int | Platnost po vyměnění (default 30) |
| minLevel | Enum? | Minimální úroveň pro zobrazení (F2+: silver, gold, platinum) |
| status | Enum | active, sold_out, archived |
| createdAt | DateTime | Datum publikace |
RedeemedReward
| Atribut | Typ | Popis |
|---|
| id | UUID | Unikátní identifikátor |
| userId | UUID | FK → User |
| rewardId | UUID | FK → Reward |
| loyaltyTransactionId | UUID | FK → LoyaltyTransaction (spend) |
| status | Enum | active, used, expired |
| couponCode | String? | Unikátní kód kupónu (pro uplatnění v košíku) |
| qrData | String? | QR payload (pro bar / vstup) |
| validUntil | DateTime | Datum expirace kupónu/odměny |
| usedAt | DateTime? | Datum uplatnění |
| createdAt | DateTime | Datum vyměnění |
6. Edge cases a error states
| Scénář | Chování |
|---|
| Uživatel nemá datum narození a chce narozeninový bonus | V hubu (P10) info: „Doplňte datum narození v profilu a získejte 50 bodů k narozeninám." Link na editaci profilu (S14). |
| Refund objednávky — uživatel mezitím body utratil | Body se odečtou, zůstatek může jít do mínusu (interně). UI zobrazí 0 bodů. Další zisky nejprve pokryjí záporný stav. Uživatel vidí transakci „Vrácení bodů za refund: -X bodů". |
| Výměna bodů, ale odměna se mezitím vyprodala (race condition) | Po potvrzení výměny server kontroluje dostupnost. Pokud sold out: dialog „Bohužel, odměna se právě vyprodala. Vaše body nebyly odečteny." + CTA „Zpět do e-shopu". |
| Expirace bodů | 14 dní předem: push notifikace „Vaše body vyprší [datum]. Vyměňte je za odměnu!" Den expirace: body se odečtou, transakce typu expire. |
| Uživatel má 0 bodů a otevře e-shop | Všechny odměny se zobrazí, ale s disabled badge „Nedostatek bodů" a textem „Potřebujete X bodů". CTA e-shopu: „Jak sbírat body". |
| Kupón z e-shopu expiruje před použitím | Kupón přejde do stavu expired. Uživatel vidí v „Moje kupóny": „Platnost vypršela [datum]". Body se NEVRACEJÍ. |
| Duplikátní narozeninový bonus | Server kontroluje: max 1 birthday bonus per calendar year. Pokud uživatel změní datum narození, bonus se nepřipíše znovu v témže roce. |
| Offline přístup k hubu | Hub zobrazuje cached data (poslední stav bodů, historie). Badge „Offline — data nemusí být aktuální". Výměna bodů vyžaduje připojení. |
| Smazání účtu | Všechny body, transakce, kupóny a redeem history se trvale smažou (GDPR). Nevyužité kupóny se zneplatní. |
| Merch objednávka — doručovací adresa | Při výměně za merch systém vyžaduje doručovací adresu. Pokud není v profilu: formulář inline. |
| Pořadatel zruší akci, na kterou existuje kupón | Kupón se automaticky zneplatní. Body se VRÁTÍ na účet uživatele. Push notifikace: „Akce [Název] byla zrušena. Vrátili jsme vám X bodů." |
7. Screen mapping
| ID | Obrazovka | Typ | Fáze | Popis |
|---|
| P10 | Věrnostní program — hub | Primární (8h) | F1 | Body, úroveň, historie, progress bar, CTA e-shop |
| P11 | Věrnostní e-shop / katalog | Primární (8h) | F1 | Grid/list odměn, filtr, bodové ceny, dostupnost |
| S16 | Detail odměny / produktu | Sekundární (4h) | F1 | Foto, popis, podmínky, bodová cena, CTA výměna |
| X21 | Empty state — Věrnostní program | Podpůrná (1h) | F1 | Prázdný stav bodů, vysvětlení, CTA |
| X23 | Odměna vyměněna | Podpůrná (1h) | F1 | Potvrzení výměny, detail kupónu, navigace |
Celkový odhad (čistý design)
| Fáze | Obrazovky | Hodiny |
|---|
| MVP | 0 (placeholder v P9) | 0 h |
| F1 | 5 | 22 h |
| F2+ | 0 (rozšíření existujících) | 0 h |
| Celkem | 5 | 22 h |
Poznámka: F1 rozšíření checkoutu (P5, P6) se počítá v PRD-01 odhadech, ne zde.
8. Otevřené otázky
Bodový přepočet — Je 5 % z nákupu finální? Jaký je minimální nákup pro připsání bodů? (Aby se předešlo micro-transakcím pro farming.)
Merch logistika — Kdo zajišťuje fulfillment merch objednávek? Pořadatel přímo, nebo Colosseum jako prostředník? Skladování?
Kupón od pořadatele — obchodní model — Jak přesvědčit pořadatele, aby poskytoval slevy do věrnostního e-shopu? Jaký je revenue share? „TasteTown model" — pořadatel získá nové zákazníky výměnou za slevu.
VIP místa v košíku — Technická implementace „kategorie zákazníka". Jak se kupón z e-shopu promítne do kategorie v seat map / košíku? Je potřeba nový ticket type?
Bar / občerstvení — validace — Jak se ověřuje uplatnění kupónu na občerstvení? QR scan barem? Manuální potvrzení? Integrace s POS systémem pořadatele?
Level systém (F2+) — Jaké konkrétní benefity per úroveň? Early access = kolik dní předem? Exkluzivní kupóny = jiná kategorie v e-shopu?
Expirace — komunikace — Stačí 1 push notifikace 14 dní předem, nebo série (14d, 7d, 1d)? Příliš notifikací = spam, příliš málo = ztráta bodů bez vědomí.
Záporný bodový zůstatek — Při refundu po utracení bodů: interně záporný stav, UI zobrazí 0. Je to OK? Alternativa: blokovat refund, pokud body utraceny (problematické z pohledu spotřebitele).