SaaS · Saas

Bakery and Patisserie Vertical on Acumatica

Bakery and Patisserie Vertical on Acumatica: a practical Acumatica fit review focused on location-level operations, recipe or service costing, POS boundaries, purchasing, and daily reconciliation. It separates documented product capability from configuration, integration, and customisation work.

John Kihiu12 min read

A wholesale bakery client came to me with a very specific complaint: their previous system could not tell them, on a Tuesday morning, whether the flour they'd receive from a new supplier lot would push a batch of croissants past its sell-by date before it even shipped. That is a lot-tracking-plus-shelf-life problem, and it is exactly the kind of thing Acumatica's Manufacturing Edition is built for — provided you set up lot classes and BOMs correctly, which most bakery implementations do not.

Manufacturing Edition, not Distribution Edition

The instinct with a bakery is to reach for Distribution Edition because the daily workflow looks like "receive ingredients, ship finished goods." That is wrong the moment there is a recipe involved. A croissant is a manufactured item with a Bill of Material (flour, butter, yeast) and a routing (mix, proof, bake, cool, pack), even if the "factory" is a single kitchen. Acumatica's Manufacturing Edition gives you BOMs, production orders, and material issue against a batch — Distribution Edition does not have any of that. I have seen two bakery implementations limp along on Distribution Edition with inventory kits standing in for BOMs, and both eventually needed a rebuild once the client wanted real batch costing.

Lot classes carry the expiry logic

Acumatica supports defining shelf life on an item's lot/serial class, with expiration dates tracked per lot and first-expired-first-out (FEFO) picking available at issue time. That is the feature that answers "will this be stale before it ships." The setup that actually works for a bakery:

CONFIG · LOT CLASS SETUP
Lot/Serial Class:      BAKE-FRESH
Numbering:              Auto (per production date)
Track Expiration Date:  Yes
Shelf Life (days):      3   (croissants), 21 (packaged rusks), etc — one class per shelf-life band
Issue Method:           FEFO (First Expired, First Out)

Assign a lot class per finished-good item, not one generic class for the whole catalogue — a bakery makes items with wildly different shelf lives, and lumping them into one class means the FEFO picking logic is meaningless for the items where it matters most.

Acumatica will not stop you shipping an expired lot

This is a known gap, not a rumor: FEFO picking suggests the right lot, but nothing in stock Acumatica hard-blocks a warehouse worker from manually overriding to an expired lot on a shipment. For food safety-critical operations I add a customization — a PXAction validation on the Shipments screen that checks the selected lot's expiration date against the current date and throws a hard stop, not just a warning, before the shipment can be confirmed. That is maybe 40 lines of C# in a graph extension, and it is the single highest-value customization I build for bakery clients.

Daily batch production, not discrete manufacturing

Out of the box, Acumatica's production order flow assumes discrete orders raised against demand — reasonable for a furniture shop, awkward for a bakery baking the same 40 SKUs every morning regardless of confirmed orders. The pattern I use is a small scheduled job (or a manually-triggered mass-create screen) that generates the day's production orders from a standing production schedule rather than from sales orders, using Acumatica's Production Order Maintenance API. It is closer to a "make to forecast" pattern than "make to order," and it is not something the base product templates for out of the box — you are building a thin scheduling layer on top of standard AM screens.

Wrapping up

A bakery is a manufacturing business wearing a retail counter, and the Acumatica fit follows from that: Manufacturing Edition, lot classes tuned per shelf-life band, and a hard stop on expired-lot shipments because the platform will not enforce that for you. The gap that surprises people is not a missing module — it's that FEFO is advisory, not mandatory, until you make it mandatory yourself.

John Kihiu
Acumatica ERP Developer · Laravel Engineer

Independent software engineer in Nairobi specialising in Acumatica customisations, Laravel backends, and tax fiscalisation integrations across East and Southern Africa.