Dinar POS · project status · 10 September 2026, evening

Stock in, expenses, the dashboard and the new look

The third milestone is built: suppliers and purchase orders that land stock and supplier debt, expenses, a dashboard with a thirty-day chart, Excel export and import, barcode labels, a yearly document series, and every screen redrawn on one component kit with four themes. All ten tasks are merged and reviewed, and the milestone is on main since 20:18. This page says what a shop can do now, what the reviews caught, and what needs a decision.

Branch m3/2026-09-10
ten tasks merged · branch merged into main
every screen, photographed
10 / 10
tasks merged, branch on main
9
screens redrawn on the kit, four themes, three languages
860+
Rust tests, about 290 added this milestone; 980 desktop and shared tests
40 / 39 / 39
browser flows green in French, English, Arabic

What a shop can do today

The shop keeps a file on each supplier and writes purchase orders against it. A delivery can arrive in parts; each receipt puts the goods into stock at their landed cost (transport and other costs spread over the lines by value, the odd centime on the last line) and raises what the shop owes the supplier by the value delivered, not ordered. A return sends goods back at the cost they came in at. Money handed to a supplier settles the oldest open order first, and a supplier's statement shows every movement with a running balance. A bon de réception is a delivery record, never a document with a number.

Expenses are written once against seeded categories (rent, electricity, wages, and so on) and never edited or deleted; a mistake is a second line. The cash position counts what actually moved through the drawer: cash sales at the amount paid, the stamp as its own figure, customer payments in, supplier payments and expenses out.

The dashboard shows today and the month side by side: sales, gross margin (after the whole-document discount, cancelled papers excluded, credit notes reversing at the cost the goods were sold at), expenses, cash position, customer and supplier debt, the products running low, the ten best sellers by units and by margin, and a thirty-day chart by day or by week. A stock recount repairs the cached quantity to what the movement ledger says and writes a line for every drift it finds.

Documents now number by year (FA-2026-000001, restarting at one each January, never a gap), which is what every Algerian shop's comptable expects. The catalogue exports to Excel and imports back from the same file, matched on barcode, with a dry run that lists what would change and refuses a bad row with its reason. Barcode labels print eighteen to an A4 sheet, with the EAN-13 check digit verified before anything is printed or imported.

And the whole application was redrawn. Every screen now sits on one component kit (shadcn/ui on the shop's own colours and type), switchable between four themes with one attribute: Comptoir (paper and green), Registre (ink and brass), Observe (white cards on cool grey) and its dark version. The logo is one coin mark that reads as a Latin D and an Arabic dal; the wordmark follows the language. A development seeder fills a shop with thirty days of realistic trading so every screen can be judged full, and every screen is photographed in French and Arabic on this site.

The ten tasks

TaskStatusWhat it is
Yearly seriesdoneDocuments number per kind and per year, gapless, backfilled for what already exists.
Tables and rulesdoneSuppliers, ledger, purchases, receipts, expenses and the jobs table; the document kinds as database rules.
SuppliersdoneThe file, the append-only ledger, payments oldest-first, the statement.
PurchasesdoneOrders, partial receipts, landed cost, returns, closing short, supplier debt on delivery.
Expenses and cashdoneSeeded categories, write-once expenses, the cash position that counts what moved.
Stock recountdoneThe cache repaired to the ledger, one audit line per drift.
DashboarddoneToday and the month, margin after discount and reversals, low stock, top ten, the thirty-day chart.
Excel and labelsdoneExport, import with a dry run, eighteen labels per sheet, the check digit verified.
Seeder and seriesdoneA development-only binary that fills a shop with thirty days of trading; the series behind the chart.
Closing sweepdoneThe spec and the architecture pages brought up to date, the review of the whole milestone, its fixes, this page.

Beside them, the design work of the same day: the four themes and the tokens, the vendored fonts, the logo, the component kit with a rule that refuses bare browser controls, and the nine screens redrawn one by one.

Reviewed before merge

Every task went through the money, data-reach and test-quality lenses before it merged, and the whole milestone was read once more at the end. The closing review found the code sound and two real gaps, both in the Excel import, both fixed the same evening with a test that failed first:

Earlier in the day the reviews of single tasks caught and fixed: the cash position reading the total instead of the amount paid on cash sales (the stamp was missed on every cash sale over 300 DA); a division by zero on a free purchase order; a receipt of zero value writing no debt; supplier credit placed on the order's value instead of the delivery's; a label routine accepting twelve digits; an export range that stopped one second short of midnight.

Open for Anouar and the comptable

Decided along the way

Next