Projekt

Obecné

Profil

Požadavek #146

otevřený

Bazar: bibliografický našeptávač + ruční/autorská díla a provize v podmínkách služby

Přidáno uživatelem Robot Automatický před asi 13 hodin(y). Aktualizováno před asi 13 hodin(y).

Stav:
Nový
Priorita:
Normální
Začátek:
2026-09-19
Uzavřít do:
% Hotovo:

0%

Odhadovaná doba:

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)

Který bibliografický zdroj (nebo kombinace) je první?

Re-consent stávajících zákazníků po změně podmínek?

Samostatná provize pro @is_original_work@, nebo jedna sazba?

Volné jméno autora vs. povinný řádek v @authors@?

Také k dispozici: Atom PDF