Un retailer_worker plasează aceeași comandă în mare parte săptămânal. Designul recunoaște asta: "Comandă din nou" e hero-ul, favoritele apar înaintea cataloagelor, iar quick + adaugă produsul în coș cu un singur tap. Bara de jos arată coșul curent cu CTA-ul Mergi la coș.
Cataloagele distribuitorilor sunt strict separate — chips-urile de sus comută între ele. Distribuitorii întrerupți apar gri cu dashed border și nu pot fi selectați.
distributorLinks where retailerIdno == me AND status == 'active' ·
Produse pentru distribuitor selectat → query products where distributorIdno == X AND isActive == true ·
Quick + → createOrderDraft() (idempotent per pereche) apoi addDraftLine({draftId, productId, quantityMilli}) ·
Reorder din ultima → copy din orders/{lastId}.lines[] în draft nou.
Strip distribuitori sus, categorii, lista de produse. Un produs în coș (Iaurt) e roșu cu stepper. Cart-float jos arată totalul.
Înainte de a selecta un distribuitor: hero "Comandă din nou" + favoritele tale. Acțiune zilnică = un tap.
orders/{lastId}. Stocul redus între timp e marcat inline (vezi cart.html).
Aceeași experiență ca worker — niciun gating de permisiune aici. Diferența: owner are 4th tab "Comenzi" (oversight), nu "Loialitate".
Catalog nu poate fi accesat fără un distributorLink activ. CTA-ul îndreaptă spre fluxul de cerere — vezi link-inbox.html.
În B2B, agentul distribuitorului vine în magazin și te adaugă pe loc. Vei primi o invitație în această aplicație + un SMS.
inviteRetailerToOnboard (org nou) sau inviteExistingRetailerToLink (org există) în vizită. Vezi vizite.html pentru fluxul agentului.