Skip to content
Canvaz X

Bacchus ERP

An ERP for the fine wine trade that follows each bottle from purchase to sale and posts every step to a double-entry ledger.

Client
Bacchus ERP (our own product)
Industry
Fine wine trade (UK)
Services
ERP systems, Custom software, Websites, Business automation, E-commerce and payments
General ledger screen with one posted purchase expanded to show four balanced lines: wine inventory and delivery debited, trade creditors and accrued delivery charges credited, with a Reverse button on the entry.

Challenge

Fine wine merchants lose money in the gaps. Warehouses bill for storage that never gets recharged to clients. Duty tables go stale. Bottles are dispatched without a withdrawal invoice. And the same data is typed into several ledgers that never quite agree.

Approach

We modelled the trade as it really works: stock owned by the company and by clients, sitting side by side in bonded warehouses. Every movement had to post to the books in the same step, so the ledger and the stock cannot drift apart. Mistakes are corrected with a reversal, never by editing history.

Solution

  • Purchase to sale in one flow, with every step posted to the books
  • Append-only double-entry ledger: corrections are reversals, never edits
  • Effective-dated duty and VAT bands with a preview that shows its working
  • Company stock and client stock kept apart on the same stock position
  • Consignments, shipments and scheduled cost-recovery billing
  • A client portal inside Shopify, plus a marketing site with a free leak calculator

Bacchus ERP is the back-office system for a fine wine merchant. It follows one bottle from purchase to receipt, through warehouse movements, to withdrawal or sale, and posts every step straight into a double-entry ledger. The product sits behind a login, so this page draws on a 29-minute walkthrough recorded in a demo account and on the public website.

Bacchus ERP walkthrough: purchase, warehouse, duty, consignment, sale and ledgerNothing is requested from YouTube until you press play. If you do, it plays from youtube-nocookie.com and YouTube (Google) then receives your IP address and device details. Watch on YouTube (opens in a new tab)

The walkthrough starts from an empty account and runs in a demo environment, with demo data throughout.

Money follows the stock

Recording a purchase takes one form: supplier, owner, wine, warehouse, quantity, unit cost, bond status and currency. Carriage can be added as its own charge line, which turns the posting into four lines. The stock position, the movement record and the ledger entry are written in a single database transaction. That is the point of the design: the stock and the books cannot disagree, because they are never written separately.

A ledger that cannot be rewritten

The general ledger is double entry, with drill-down into the debits and credits of every entry. Nothing is edited or deleted. A mistake is corrected with a reversal, which posts a compensating entry marked as a reversal of the original, and an entry cannot be reversed twice.

Duty, VAT and cost recovery

Duty bands are effective-dated, so a calculation made last year does not change when a rate does. Each wine carries a duty profile, and a read-only preview shows the full working and the band it matched. The website describes a UK engine for alcohol-by-volume duty and VAT, including the margin scheme.

A withdrawal invoice adds handling, duty and VAT, and the duty payable and VAT payable post to their own liability accounts. A cost-recovery view sets what the warehouse billed against what was recharged to clients, and a billing-run scheduler can be started, stopped or run as a dry run.

Company stock and client stock

The same wine can be owned by the merchant and by a client, on the same stock position, kept apart by an owner column. Consignments move from draft through pending approval and approval to listed. Warehouse shipments follow draft, release and dispatched, and a release cannot be undone. The system refuses to ship an in-bond sale to a destination that is not bonded.

A shipment can mix a company sale line with a client withdrawal line and handle each line on its own terms. Dispatch notes are produced for the warehouse, for accounting and for each owner, and a client never sees the company's lines.

Clients see their own holdings

A client portal widget sits inside the merchant's Shopify storefront through a signed app proxy. Clients see their holdings, bond status, valuation and a ten-year price history, and they can request delivery or brokering. A request raised in the portal reaches a staff queue where it can be approved or rejected. In the walkthrough this storefront page is flagged as an internal pre-release.

Automation, and its honest limits

An Automation tab runs an ingestion worker for bonded-warehouse movement data and a reconciliation reminder, and a movement instruction is created automatically when a shipment is released. An accounting sync queue sends ledger entries to Xero and retries with back-off.

In the walkthrough those workers are switched off and the discrepancy queue is empty, because the demo environment has no live warehouse feed. Screens that depend on Liv-ex market data stay dimmed until that integration is switched on. Integrations with Shopify, Xero and Liv-ex market data are built. The connections to bonded-warehouse and broker systems are still being connected to their live endpoints.

Where the numbers come from

Nothing on this page is a customer count or a measured business result. The figures in the screens are demo data from the walkthrough.

The marketing site

We also built the public website at bacchus-erp.com: static HTML, CSS and JavaScript with no build step, hosted on Netlify, including a free leak calculator for prospects.

The marketing site's provenance section, headed 'One Case. Every Hand It Passes Through. One Record.', beside a provenance record panel for a lot held in bond.

The provenance section of the marketing site.

Corrections to the books
Reversals only; the original entry is never edited

Outcomes

Stock, movement and ledger entry
Written in one database transaction
Corrections to the books
Reversals only; the original entry is never edited
Status
In production use (owner statement)

Stack

  • Node.js
  • Express
  • PostgreSQL
  • React
  • TypeScript
  • Vite
  • Shopify (app proxy and signed webhooks)
  • Xero (OAuth2)
  • Liv-ex market data
  • Static HTML, CSS and JavaScript on Netlify (marketing site)

Services used

Next project
The AI4Solar mobile app's diagnostics screen on a phone: system diagnostic status counters, a 24-hour solar irradiance chart, and entries for fuse health, fault detection and anomaly detection.

AI4Solar

Renewable energy