Commissary

A central kitchen or prep site that builds batches from recipes and distributes them to your branches — and the producible flag that makes a recipe buildable.

9 min read · Updated 10 Sep 2026

On this page

A commissary is where you make things in bulk. One kitchen cooks the day's sauce, one prep room portions the meat, one bakery bakes for four shops — and the branches receive finished goods instead of each doing it themselves.

In Kassly a commissary is a warehouse that also produces. Same location record, same stock, with production layered on top.

The commissary needs the Warehouse & Commissary add-on (₱500 per branch each month), or any bundle that includes it. One add-on grants both the warehouse locations and the production side — they ship together because a commissary is a warehouse.

You will also need the Recipe Costing add-on (₱350 per branch each month), because production is driven by recipes and that is where recipes live.

Once the add-on is active, Commissary and Production Orders appear under Inventory in the sidebar. Owners and Managers have full access. A custom role can be given a narrower slice, using the capabilities listed further down this page.

Setting up the site

There is nothing to configure called "a commissary". You create a warehouse and produce into it.

Set the warehouse up first — see Warehouses — and stock it with the raw materials you will build from, either by delivering a purchase order into it (see Receiving purchase orders) or by transferring stock in from a branch (see Stock transfers).

You can also produce directly at a branch. A single-shop kitchen that preps its own stock does not need a warehouse at all — it just needs the add-on and a producible recipe. Every production run targets exactly one location: a branch or a warehouse, never both.

Producible recipes

A recipe in Kassly — Kassly calls it a composition — normally describes one serving of a dish and deducts its ingredients when that dish sells. A producible recipe is different: it describes a batch you make, and it is consumed when you run that batch rather than when something sells.

The consequences are worth stating plainly:

  • A producible recipe never deducts at the point of sale. Sell the finished item over the counter and no ingredients come out for it, because they came out when you produced the batch.
  • A producible recipe is excluded from stock-from-recipe availability. It does not contribute a portion count on the POS. See Recipe-derived stock.
  • Only producible recipes can be built. The recipe picker on the production screens lists producible, active recipes and nothing else.

That makes the flag the single most important switch on this page — and the hardest to find.

Marking a recipe producible

The producible flag can only be set through the composition import sheet. It is not on the Add Composition or Edit Composition dialog, and the Compositions list does not label producible recipes differently from ordinary ones. If a recipe is not deducting on sales and otherwise looks correct, or if it will not appear in the production recipe picker, this is the first thing to check.

To set it:

  1. Open Inventory → Compositions and click Import.
  2. Download the template. It already contains every recipe you have, one row per ingredient, with a Producible (commissary) column showing no or yes.
  3. Change that column to yes on every row of the recipes you build in batches. y, true and 1 are accepted too.
  4. Upload the file back.

Recipes you leave out of the sheet are untouched, so you can upload a file containing only the recipes you are changing.

Two things to be careful of, both consequences of how the import matches rows:

  • A recipe is matched on its menu item, variant and composition name. Change the name in the sheet and you create a second recipe rather than renaming the first.
  • The import rewrites the flag from the sheet. Re-import a producible recipe with that column blank or no and it becomes an ordinary POS recipe again, and will silently start deducting on sales.

The full sheet format, and the rest of what import can do, is in Importing products and Ingredients and recipes.

Yield on a producible recipe

Yield on an ordinary recipe means servings per batch, and the sale deducts a divided share of each line. Production does not divide. A run builds whole batches: the quantities on the recipe are consumed as written, multiplied by how many batches you are making.

So a recipe listing 10 kg of pork with a yield of 40 produces 40 portions and consumes 10 kg — one batch. Set the batch multiplier to 3 and it produces 120 portions and consumes 30 kg.

Waste percentages still apply, and are applied the same way as on a sale, so a line's cost and its stock deduction always agree. See Ingredients and recipes.

Who can do what

Production is split across three capabilities so a prep cook can ask for a batch without being able to approve it.

Capability What it allows
View production See the Commissary and Production Orders screens.
Request production File a run or a production order, complete an approved run, cancel one.
Manage production All of the above, plus approve and reject other people's requests.

Owners and Managers hold all three. A custom role can be given any of them — which is how you let a commissary supervisor file batches while a manager signs them off. See Custom roles.

The Commissary screen

Open Inventory → Commissary. One row per production run:

Column What it is
Reference # PR-000001, counting up per business.
Output The finished product the batch makes.
Output Qty Planned while pending; actual once completed.
Unit Cost What one unit of the output ended up costing.
Location The branch or warehouse the run happened at.
Date When it was raised.
Status See below.

The search box matches the reference number. The status filter offers All Statuses, Awaiting Approval, Draft, Completed, Cancelled and Rejected.

Run statuses

Status What it means
Awaiting Approval Filed by someone who cannot approve their own. No stock touched.
Draft Approved and ready to build. Still no stock touched.
Completed Built. Ingredients consumed, output in stock. Terminal and permanent.
Cancelled Withdrawn before building. No stock was ever moved.
Rejected A manager declined the request. Terminal.

Draft means approved, not unfinished. It is the state a run sits in between sign-off and the moment you actually cook, and it is the only state that can be completed.

Requesting a batch

Click New Production Run.

Field Required Notes
Recipe Yes Producible, active recipes only.
Produce into Yes One location, from the Commissary / Warehouses or Branches group.
Batch multiplier Yes How many batches. Greater than zero; decimals allowed.
Labor cost (₱) No For this batch as a whole, not per unit.
Overhead cost (₱) No Likewise.
Notes No Up to 2,000 characters.

As you change the recipe or the multiplier, the dialog previews what the batch will take: each Ingredient with the quantity Consumed, its Line cost, the Input cost total, the Output quantity, and the resulting Unit cost. Nothing is written while you are looking at the preview.

What happens when you save depends on your access:

  • Hold Manage production and the button reads Create Draft. The run is self-approved straight to Draft — you could have approved it anyway, so the round trip would be friction and nothing more.
  • Hold only Request production and the button reads Submit Request. The run lands in Awaiting Approval, an item appears in the approvals queue, and the run cannot be completed until a manager acts on it.

Approving, rejecting, cancelling

Open a run in Awaiting Approval and a manager sees Approve and Reject Request.

  • Approve moves the run to Draft, and records who signed it off. The detail page then shows the approver's name.
  • Reject Request needs a reason — Why is this production request being rejected? — and is terminal. The reason is shown on the run afterwards.

Cancel run withdraws a run that is Awaiting Approval or Draft. The confirmation is explicit that a cancelled run writes no stock movements. This cannot be undone.

A Completed run cannot be cancelled, rejected or reversed. Correct a mis-produced batch with a manual stock adjustment instead — see Stock adjustments.

Building the batch, the yield you enter, and how the cost is worked out are all covered in Production orders.

Getting output to the branches

Producing into a warehouse leaves the finished goods at the warehouse. Two ways to move them on:

  • A production order, which is the demand ticket that requests goods for a branch and creates the delivery for you once the batch is built. This is the path to use for routine restocking. See Production orders.
  • A stock transfer you raise yourself, warehouse to branch, when the goods are already sitting in the warehouse. See Stock transfers.

Both paths need the Stock Transfers Between Branches add-on (₱300 per branch each month) to ship and receive the delivery, because that is the screen the dock works from. Without it you can produce at the warehouse but you cannot move the output to a branch through Kassly.

If you have no add-on for transfers, produce directly at the branch that needs the goods instead. That skips the delivery leg entirely.

What a commissary does not do

  • No production scheduling or capacity planning. There is no calendar, no shift plan, no machine or station allocation. A run is raised, approved and completed; nothing sequences them for you.
  • No multi-step routing. One run turns inputs into one output. A process with three stages is three runs, each with its own recipe, the middle products being ordinary stock items.
  • No labour tracking. Labor cost is a number you type per batch, not something drawn from timesheets or staff rates.
  • No reversal of a completed run.
  • Nothing on the phone. The commissary screens are web-only.

Where to go next