Projektek

Le Bistroy

Franchise-működtető platform: partnerjelentkezéstől a szerződésen és a minőségbiztosításon át a partnerrendelésig, számlázásig és raktárkezelésig.

A Le Bistroy weboldalának kezdőoldala

A projektről

A Le Bistroy franchise-hálózat teljes működését kiszolgáló rendszer: a partnerjelentkezéstől a szerződésen és a minőségellenőrzésen át a partnerek rendeléséig, számlázásáig és a raktárkezelésig. A platformot a Milcomp fejleszti.

A kihívás

Egy franchise-hálózat nem egy cég, hanem sok kicsi, közös márkával. A központnak egyszerre kell kezelnie a jelentkezőket, a szerződéskötést, az átadott üzletek minőségét, az eszközöket, a partnerek rendeléseit, a számlákat és a raktárt - és mindezt úgy, hogy egy partner csak a saját adatait lássa.

Ez a fajta rendszer akkor bukik el, amikor egy lépés csendben elmarad: nem küldött ki egy számlát, nem futott le egy státuszváltás, nem ment ki egy értesítés. Ilyenkor nem az a baj, hogy hiba történt, hanem hogy senki nem tud róla.

A megoldás

Egy Laravel alapú rendszer három felülettel: nyilvános oldal az étlappal és a franchise-jelentkezéssel, partnerportál, ahol az üzletek a saját készletüket rendelik, és adminfelület, amelyben a teljes franchise-életciklus fut.

A partner a saját üzleteire rendel, kiválasztja a szállítási napot és idősávot egy naptárból, fizet bankkártyával vagy átutalással, majd követi a rendelés állapotát. A háttérben a rendelés számlává, a számla készletmozgássá, a készletmozgás pedig logisztikai átadási dokumentummá alakul.

A legfontosabb tervezési szabály

A rendszer egyetlen konvenció köré épül: ha egy státuszváltásnak van üzletileg jelentős mellékhatása, akkor annak saját státusza van. A felismerési teszt egy kérdés: ha ez a lépés csendben elbukna, észrevennéd egy lekérdezésből?

Ha nem, akkor hiányzik egy státusz. Nem naplósor, nem hibajelentés, nem egy üresen maradt időbélyeg - státusz. A különbség az, hogy a naplóból arról a rekordról tudsz meg valamit, amit épp nézel, a státuszból viszont ki tudod listázni az összes rekordot, ahol a lépés nem futott le. Egy franchise-rendszerben ez a különbség aközött, hogy magad veszed észre a kimaradt partnerszámlákat, vagy a partnertől tudod meg.

Munkanapok, amiket nem lehet kiszámolni

A szállítási határidők és a fizetési határidők munkanapokban értendők, a magyar munkanaptár viszont két rétegből áll. Az egyik kiszámolható: az állandó és a húsvéthoz kötött ünnepek. A másik nem: az éves rendelet minden évben áthelyez munkanapokat szombatra és beiktat hidakat, és ezt semmilyen képlet nem adja ki.

Ezért a naptár két rétegű: a számolható részt a rendszer maga állítja elő, az áthelyezéseket pedig szinkronizálja. A húsvétszámítást szándékosan saját kóddal végezzük, mert a PHP beépített függvénye olyan bővítményben él, ami nem minden kiszolgálón elérhető - és időközben minden dátumszámítás erre a komponensre épült.

Technológia

Laravel, PHP 8.4, Filament adminfelület, Livewire és Tailwind CSS 4, TypeScript, MariaDB és Redis. Bankkártyás fizetés OTP SimplePay-jel, számlázás Billingo API-n, PDF-generálás a szerződésekhez és a dokumentumokhoz, táblázatos export a logisztikai partnernek. Minden lényeges modell auditált, a jogosultságkezelés szerepalapú.

Amit ebből érdemes elvinni

Két dolgot vinnék tovább minden hasonló rendszerbe. Az egyik a fenti státusz-szabály: a csendes hiba drágább, mint a hangos.

A másik a jogosultságokról szól. Egy többszereplős rendszerben nem elég az egyes rekordokat védeni: a listázó lekérdezéseket is szűkíteni kell, méghozzá alapértelmezetten zárt módon. Ha egy felhasználóhoz nem tartozik partner, akkor nem az összes rekordot kell látnia, hanem semmit. Ez a különbség egy szabályhiba és egy adatszivárgás között.