Bliv en del af mit community / gratis nyhedsbrev — tilmeld dig her
- Client
- Et community-marked i Thailand (kunden holdes anonym)
- Sector
- Detailhandel — point of sale
- Periode
- juni–juli 2026
At a glance
Et point-of-sale-system til et fysisk marked, hvor snesevis af uafhængige sælgere deler de samme kasser. En kassemedarbejder slår én kurv ind; systemet ved, hvilken bod hver vare tilhører, deler salget pr. sælger i det øjeblik, det sker, og fører de bøger, hver bod afregner efter. Thai-først grænseflade med et synkroniseret engelsk oversættelsessæt, bygget på Laravel 12 med et Filament v4-adminpanel og PostgreSQL nedenunder.
The challenge
Et marked med fælles kasse bryder den antagelse, næsten alle standard-POS-systemer bygger på: at butikken er én forretning. Her rummer en enkelt kurv rutinemæssigt varer fra tre-fire forskellige sælgere, og ved månedens udgang skal hver af dem have udbetalt præcis, hvad deres bod solgte — ikke flere regnskabs-regneark, ingen diskussioner om kassestrimlen.
Pengesoftware har desuden to klassiske selvforskyldte sår på lur: floating-point-priser, der driver en satang ad gangen, og redigerbare transaktionstabeller, hvor et tastefejls-»fix« i al stilhed omskriver historien. Begge dele skulle være umulige by construction, ikke ved disciplin.
The solution
En Laravel 12-applikation med hverdagens salgsskærm holdt bevidst enkel — produktgitter, kurv, betal — og et Filament v4-backoffice til produkter, sælgere, vagter og rapporter. Hver salgslinje bærer sin sælger, så afregning pr. bod ikke er en rapport boltet ovenpå, men en egenskab ved selve datamodellen.
Penge gemmes udelukkende som heltals-satang (฿290 er heltallet 29000); ingen float rører nogensinde et beløb. Og hver handling ved kassen lander i en append-only audit-log — rækker skrives én gang og kan hverken opdateres eller slettes, så den historik, afregningen bygger på, er den historik, der faktisk fandt sted. Grænsefladen er thai-først, med det engelske oversættelsessæt holdt i trit af en sync-kommando frem for af hukommelsen.
The results
Systemet er live og i daglig brug på kundens marked (en privat installation, så der linkes ikke til den her). Kassemedarbejdere arbejder med én fælles kurv pr. kunde, uanset hvor mange boder den spænder over, og afregningen pr. sælger falder direkte ud af hovedbogen i stedet for ud af en regnearkssession sidst på måneden.
Bygget kørte på samme leverancemodel som resten af denne side: fasede Trello-kort arbejdet af en AI-agent under review, 19 databasemigreringer og en PHPUnit-suite, der voksede side om side med funktionerne, og produktionsdatabasen dækket af serverens natlige dump-og-backup-rutine fra dag ét.