Požadavek #146
otevřenýBazar: bibliografický našeptávač + ruční/autorská díla a provize v podmínkách služby
0%
Popis
h2. Cíl
Ulehčit zadávání knih v bazaru (nabídka i poptávka) našeptávačem z externího bibliografického zdroje. Ruční zadání musí zůstat vždy možné — včetně knih, které v žádné databázi nejsou: nové, plánované, samizdat, nebo vlastní autorská díla.
To záměrně otevírá platformu píšícím autorům: můžou své dílo prodat za pevnou cenu („koupit ihned“) nebo aukcí (příhozy → přijetí). Eshop zprostředkuje platbu a strhne provizi. Tuhle provizi a roli platformy musí výslovně pokrývat podmínky služby, které zákazník odsouhlasí při registraci.
Navazuje na bazar (Fáze D / @marketplace_sell.php@ / @marketplace_want.php@), ne na katalogové admin CRUD.
h2. Co je dnes
- Formuláře prodeje/poptávky mají volný @title@, volitelné @isbn@, select @authors_id@ jen z interní tabulky @authors@ (kurátorovaný katalog, ne volné jméno zvenku).
- Našeptávač McFly (@mcfly_suggest.php@, input @keywords@) hledá vlastní katalog eshopu, ne vnější bibliografii — na bazarové title pole se nehodí 1:1.
- Provize už existuje: @MARKETPLACE_COMMISSION_PCT@ (default 10 %), snapshot do @marketplace_payout.commission_pct@ v okamžiku prodeje. Číslo je konfigurovatelné; právní text v podmínkách zatím o bazaru/autorském prodeji nemluví.
- Registrace bere souhlas přes modul MATC (@cd_matc@): povinný checkbox + modal z info stránek @privacy@ a @conditions@ (@pages@ / @pages_description@, slug @conditions@). Text se edituje v adminu (Information pages), ne v gitu.
- Aukce vs. pevná cena už bazar umí: listing s @asking_price@ + „koupit ihned“, nebo @marketplace_offer@ s přijetím prodejcem.
h2. Funkční požadavky
h3. 1. Našeptávač / předvyplnění (sell + want)
- Na poli názvu (a ideálně ISBN) našeptávat kandidáty z externího zdroje (debounce, min. počet znaků, limit výsledků).
- Výběr položky předvyplní aspoň: název, autor, ISBN (pokud je), případně jazyk / nakladatel / rok — jako nápovědu, ne jako povinný lock.
- Uživatel může návrh upravit nebo ignorovat a dál psát ručně.
- Žádný ISBN/záznam zvenku není podmínkou uložení listingu/poptávky.
- Chybějící nebo nedostupný externí zdroj nesmí zablokovat formulář (graceful fallback = čisté ruční zadání).
h3. 2. Ruční a „neexistující“ knihy
- Povolené stavy: použitá kniha z oběhu, kniha bez ISBN, plánovaný titul, rukopis / vlastní dílo autora.
- Interní @authors@ select nesmí být jediná cesta k autorovi — u vlastního díla často ještě v tabulce @authors@ není. Buď volné jméno + pozdější spárování, nebo „přidat autora“ z formuláře (rozhodnout v implementaci).
- Externí ID (Google Books volume, NK ČR, Open Library OLID…) uložit volitelně jako metadata, ať se dá později deduplikovat; nesmí být FK, který by blokoval ruční záznamy.
h3. 3. Autorský prodej a provize
- Stejný bazarový flow: pevná cena i aukce. Žádný paralelní „author shop“, pokud se neukáže nutný.
- Platforma je zprostředkovatel platby; provize se strhává stejně jako u použité knihy (@Marketplace::splitCommission@ / payout ledger).
- Zvážit (otevřené, neblokovat první PR): jiná sazba pro vlastní dílo vs. bazar použitých knih; pokud ano, snapshot sazby pořád na payout řádek.
- Prodejce prohlašuje, že má právo dílo nabízet (vlastnictví výtisku nebo autorská/distribuční práva u vlastního díla).
h3. 4. Podmínky služby při registraci
- Doplnit české i anglické @conditions@ (a pokud dává smysl i @privacy@) o:
** bazar jako zprostředkování mezi zákazníky;
** provizi eshopu z každé dokončené bazarové / autorské transakce (odkaz na aktuální % v konfiguraci, ne natvrdo číslo v právním textu, ať se sazba může měnit);
** právo nabízet vlastní autorská díla a povinnost mít k tomu oprávnění;
** že ručně zadaný / neexistující titul je odpovědnost zadavatele (popis, práva, uvedení na trh);
** že platforma není nakladatel ani smluvní vydavatel autora. - Souhlas zůstává přes existující MATC checkbox při @create_account@ — ne nový paralelní checkbox, pokud právníci neřeknou jinak. Noví uživatelé odsouhlasí nový text; staří už MATC jednou zaškrtli — v issue poznamenat, jestli chceme re-consent (např. banner / povinné znovuodsouhlasení při prvním listingu). To je otevřená otázka.
- Text podmínek žije v DB (@pages_description@), změna přes admin Information pages, ideálně i Phinx seed/migrace s SQL update jen pokud v repu držíme kanonický text; jinak checklist „upravit v adminu na dev i prod“.
h2. Návrh implementace (k potvrzení)
Tenký proxy endpoint v shopu (např. @book_suggest.php@), který volá zvolené API server-side (klíč, rate limit, žádný CORS z prohlížeče).¶
UI: typeahead na @#sTitle@ / @#wTitle@ (a ISBN), výběr vyplní pole; žádný submit při výběru.¶
Volitelné sloupce na @marketplace_listing@ / @marketplace_request@: @external_source@, @external_id@, @is_original_work@ (bool) — Phinx migrace.¶
Podmínky: update @conditions@ CS+EN.¶
h2. Externí zdroj — vybrat před kódem
Kandidáti (žádný default bez rozhodnutí):
- Google Books API — dobré pokrytí ISBN, ToS/quota.
- NK ČR / České knihovny — relevantní pro staré české knihy, ověřit veřejné API.
- Open Library — bez klíče, slabší na české tituly.
Nesaháme na katalog eshopu jako jediný zdroj (většina bazarových knih v @products@ není).
h2. Mimo rozsah prvního PR
- Schvalovací krok listingu před zveřejněním (už otevřené v AGENTS.md).
- Stripe Connect / automatická výplata.
- Oddělený storefront „autoři“.
- WebMCP nástroje pro tento našeptávač (lze navázat později na #145).
h2. Test plan
- Našeptání podle názvu i ISBN, předvyplnění, úprava polí po výběru.
- Uložení listingu/poptávky bez výběru z našeptávače.
- Uložení listingu označeného jako vlastní dílo, bez ISBN.
- Výpadek / 429 externího API → formulář dál funguje.
- Registrace: MATC pořád povinný; v modalu conditions je odstavec o bazaru, autorském prodeji a provizi (CS i EN).
- Payout po „koupit ihned“ i po přijetí příhozu pořád používá snapshot provize.
h2. Otevřené otázky (potvrdit než se píše kód)