# Mossery — inventory and supply chain help

> Mossery is the inventory and supply chain system of record for a physical-goods business. It tracks what you own, where it sits, and what it cost, from purchase order through to storefront. Every stock movement is written to an immutable ledger, and stock is deducted at fulfilment only — never when an order is placed, picked or packed. These pages explain how that works.

Every page below is also served as raw markdown at the same URL. The entire corpus as a single document: https://mossery-ops.vercel.app/llms-full.txt

## Overview

- [What this app does](https://mossery-ops.vercel.app/help/overview/what-this-app-does.md): Mossery is the app that keeps track of every physical thing the business owns, from the moment it is ordered to the moment it ships. It covers buying, receiving, storing, making, selling, fulfilling and updating your online channels. Every stock movement is written to a permanent ledger, so any number on any screen can be traced back to the event that produced it.

## Something looks wrong

- [A page will not open, or the app keeps sending you somewhere else](https://mossery-ops.vercel.app/help/wrong/why-cant-i-open-this-page.md): Three different things look identical from the outside. Most often your role has not been granted the permission that page needs, and you land on a no-access screen. Second, two roles are mobile-only by design, so every desktop page bounces them to the mobile app. Third, any phone is sent to the mobile app whatever the role. Only the first is fixed by granting a permission.

## Step 1 of 7 — Buy

- [Close or reopen an order](https://mossery-ops.vercel.app/help/buy/close-or-reopen-an-order.md): Closing a purchase order means stop expecting the rest of it. Open the order, click Close PO, give a reason, confirm. It is paperwork, not a stock movement — nothing already received changes, and no ledger entry is written. The order leaves Awaiting receipt and stops being offered when booking deliveries. Reopen puts it back exactly where it was.
- [Raise a purchase order](https://mossery-ops.vercel.app/help/buy/raise-a-purchase-order.md): A purchase order is your written promise to a supplier, and the record every delivery is later checked against. Open Purchase orders, click New PO, pick the supplier and the location goods will arrive at, add one line per product, and save. It saves as a draft. Someone with approval rights must then authorise it, because a draft cannot be received against.
- [Read the planner](https://mossery-ops.vercel.app/help/buy/read-the-planner.md): The planner answers one question — to end up with 200 of this finished product, what must I build and what must I buy? Give it a product, a target quantity and a location. It explodes the parts list, subtracts what you already hold and what is already on order, and turns the gap into draft assembly and purchase orders you can review before anything is committed.

## Step 2 of 7 — Receive

- [Over- and under-deliveries](https://mossery-ops.vercel.app/help/receive/over-and-under-deliveries.md): Record what actually arrived, never what was ordered. Receiving fewer units than ordered leaves the balance outstanding and keeps the purchase order open for the rest. Receiving more is allowed on purpose: the extra units are real, so they go on the books and raise what you owe. Neither case needs a correction, and neither is an error.
- [What a unit costs](https://mossery-ops.vercel.app/help/receive/what-a-unit-costs.md): A product's unit cost is a moving average: what the stock already on your shelves cost, blended with what the newest delivery cost, weighted by quantity. It counts delivery charges as well as the supplier's price. It changes only during costing, and only after someone chooses an action for that line — never quietly, and never just because goods arrived.
- [Cost a receiving](https://mossery-ops.vercel.app/help/receive/cost-a-receiving.md): Costing decides what each unit is now worth, after a delivery is already on the books. Open the receiving, choose Apply costs & close, and pick one action per line: blend the new price into the moving average, replace the old cost, or keep it. Nothing changes until you choose. The receiving then reads Costed, and the supplier bill can be raised.
- [Receive a delivery](https://mossery-ops.vercel.app/help/receive/receive-a-delivery.md): Recording a delivery tells Mossery that goods have physically arrived. Open the purchase order, enter how many of each line actually turned up, and submit. Stock goes on the books immediately, at the location you received into. Costing is a separate step done later by whoever owns supplier pricing, so a delivery never waits on it.
- [Receive a delivery from your phone](https://mossery-ops.vercel.app/help/receive/receive-from-your-phone.md): Open Receive on your phone and land on To receive. Tap the delivery — a purchase order, or a production run coming back from a maker. Type what you counted, photograph the delivery note, check the total, tap Submit. The stock is on the books straight away, at the location the order was sent to. Prices are added later by the office.
- [You recorded a delivery and the stock level did not move](https://mossery-ops.vercel.app/help/receive/received-stock-but-level-didnt-change.md): Recording a delivery posts the stock immediately, so a level that has not moved almost always means you are looking at a different location: a delivery lands where the purchase order said it would, not at your default warehouse. Next most likely, the receiving is still Awaiting post and never posted, or you are waiting on costing, which never changes quantity.

## Step 3 of 7 — Store

- [The stock ledger](https://mossery-ops.vercel.app/help/store/the-stock-ledger.md): Every stock movement writes one permanent line in a ledger: the product, the location, how many units, why, and who did it. The quantity you see on a product is the running total of those lines, not a figure anyone types in. Corrections are written as new lines rather than edits, so any number can be traced back to the event that produced it.
- [What each location type can do](https://mossery-ops.vercel.app/help/store/what-each-location-type-can-do.md): A location is anywhere your stock physically rests, and its type decides what that stock is allowed to do. Warehouses and retail counters can be sold from online; consignee sites, event stalls and production partners hold real stock that is deliberately never offered on a storefront. Only a warehouse assembles kits, and only a mapped location reaches a given store.
- [Confirm a transfer in](https://mossery-ops.vercel.app/help/store/confirm-a-transfer-in.md): Confirming a transfer in is signing for the parcel. Open the shipment in your list, check each product against what is really in the box, change any quantity that does not match, and tap Confirm receipt. That tap is what puts the stock on your location's books. Any quantity you change is recorded as a discrepancy for someone to follow up.
- [Move stock between locations](https://mossery-ops.vercel.app/help/store/move-stock-between-locations.md): Moving stock between two of your own sites is a shipment, not an edit. You create a transfer, list the products and quantities, pack it, then dispatch it. The units stay on the sending site's books, reserved, until someone at the receiving end confirms what arrived. Only that confirmation moves the stock, so nothing is ever in two places at once.
- [Run a stock count](https://mossery-ops.vercel.app/help/store/run-a-stock-count.md): A stock count compares the shelf with the app. You open a count session, walk the products, and type the number you actually see. Blank means not counted; zero means none there. Submitting locks the count, and posting it writes the difference as an adjustment rather than overwriting the old figure, so every change stays traceable.
- [A stock count does not match what is on the shelf](https://mossery-ops.vercel.app/help/store/count-doesnt-match-the-shelf.md): A count posts the difference between what you counted and what the app believed when the session opened. It never overwrites. So a mismatch usually means the session belongs to another location, or lines were left blank and stayed at the system figure. Less often the session is stale, or units are in transit and still on the books where they left.

## Step 4 of 7 — Make

- [Product types and stock modes](https://mossery-ops.vercel.app/help/make/product-types-and-stock-modes.md): Every product carries two independent settings. Its type — physical, assembled or service — decides whether it has a parts list and whether it holds stock at all. Its stock mode — ready stock, on demand or hybrid — decides what happens once stock reaches zero. Neither setting implies the other, and neither is the display category your storefront shows shoppers.
- [The three numbers of a built product](https://mossery-ops.vercel.app/help/make/the-three-numbers-of-a-built-product.md): A built product has three stock figures, not one. On hand is the finished units sitting on a shelf. Assemblable is how many more its components could produce right now. Available is on hand plus assemblable, minus whatever is already promised to orders. Assemblable is worked out separately at each location, because parts in two buildings cannot become one finished unit.
- [Build a bill of materials](https://mossery-ops.vercel.app/help/make/build-a-bill-of-materials.md): A bill of materials is the parts list for one built product. Open the product, add each component with the quantity needed per finished unit, and save — the list saves as one piece, not row by row. Components must already exist as products. Saving moves no stock; it tells Mossery how many units you could build from what is on the shelf right now.
- [Record production output](https://mossery-ops.vercel.app/help/make/record-production-output.md): Recording output books a finished batch in against its production run. Open the run, enter the date and how many units arrived in this delivery, then confirm the material that batch consumed. Finished units go on stock, and the inputs come off where they physically sit — at the partner for an outsourced run. Partial deliveries are normal; record each one as it lands.
- [Run an assembly order](https://mossery-ops.vercel.app/help/make/run-an-assembly-order.md): An assembly order turns components into finished units at one location. A supervisor creates it and approves it; whoever is packing opens it on their phone, enters how many they finished in this session, and confirms. Components come off stock and finished units go on, both at that location. You can pack across several sessions until the order is complete.
- [Share one production recipe across many products](https://mossery-ops.vercel.app/help/make/share-a-production-recipe.md): A production recipe lists the materials one finished unit uses. Products that are made the same way can share one recipe instead of each having its own copy. Write the recipe on one product, then use Assign to SKUs on the recipe page to point the others at it. Changing a shared recipe changes it for every product that uses it.
- [A kit will not build even though the app says it can](https://mossery-ops.vercel.app/help/make/cant-build-a-kit-that-should-be-buildable.md): Buildable is counted per location, so the usual cause is components sitting somewhere else: the headline figure on a product list is org-wide and can pair a part in one warehouse with a part in another. Next most likely, the kit contains sub-kits nobody has built yet, or component stock is already allocated to orders. An unapproved order blocks it too.

## Step 5 of 7 — Sell

- [Where orders come from](https://mossery-ops.vercel.app/help/sell/where-orders-come-from.md): Orders are not created in Mossery — they arrive. Connected storefronts notify the app as each order is placed, and it is copied in with its lines, customer and totals. Arriving reserves stock against the order; it never deducts it. Wholesale orders ingest the same way, but wholesale locations are never sent inventory in return.
- [An order is stuck and you cannot tell why](https://mossery-ops.vercel.app/help/sell/an-order-is-stuck.md): An order counts as stuck when it is still unfulfilled fourteen days after it was placed. The app labels a reason and tests five in a fixed order: Missing SKU, Out of stock, Split shipment, Sync error, then Awaiting Shopify as the catch-all. Read the label first — it tells you whether the fix is yours or your storefront's.

## Step 6 of 7 — Fulfil

- [When stock actually moves](https://mossery-ops.vercel.app/help/fulfil/when-stock-actually-moves.md): Stock leaves your inventory at exactly one moment: fulfilment. Creating an order does not move it, and neither does picking or packing — those only allocate it, which is the app's word for reserving it. This is deliberate. Allocating and deducting are different events, and treating them as one is how systems end up showing stock that was never really there.

## Step 7 of 7 — Sync

- [How stock reaches your channels](https://mossery-ops.vercel.app/help/sync/how-stock-reaches-your-channels.md): Your storefront does not count stock; it repeats the last number Mossery sent it. Every stock movement queues an update for that product at that location, and a background worker sends it within about a minute. Nothing is sent unless the product and the location are both matched to that store and the connection is switched on.
- [Group products into a family](https://mossery-ops.vercel.app/help/sync/group-products-into-a-family.md): A family groups product codes that are versions of one thing, like a notebook in three colours. There is no separate button to create one: saving a new product creates its family automatically. Open the family, rename it and set its option names, then use Create product for new versions or Add product to pull in codes that already exist.
- [Publish a product to a channel](https://mossery-ops.vercel.app/help/sync/publish-a-product-to-a-channel.md): Publishing creates the listing on a storefront and connects it to the product in Mossery, so stock and price can flow out. Open the product, choose Manage sales channels, switch the channel on, and confirm. New listings arrive as drafts for you to finish. Publishing one product code publishes its whole family as a single listing with one variant per active code.
- [Mossery says one number and your online store says another](https://mossery-ops.vercel.app/help/sync/ops-and-my-store-disagree.md): Most disagreements are not errors: a store only sees stock at the locations mapped to it, so retail counters and event stalls are excluded by design. If the number really is wrong, the direction decides the fix. A store showing too few is repaired on its own overnight. A store showing too many is never repaired on its own, and needs a push by hand.
- [A product shows 0 online, but you have stock](https://mossery-ops.vercel.app/help/sync/product-shows-zero-online.md): A product shows 0 on your storefront while you still hold stock for one of three reasons: it was never linked to that store, the stock sits at a location that store cannot sell from, or the last update is still sitting in the queue. Check them in that order — the first one accounts for most cases.
- [Sync errors are piling up and you need to know which ones matter](https://mossery-ops.vercel.app/help/sync/fix-a-sync-error.md): Sync errors are a log of things an integration could not finish. Nearly all are one of two shapes: something arrived carrying a product code your catalogue does not have, or it arrived from a store location nobody has mapped. Both are grouped by target and counted, so one line can stand for thousands of failures. Fix the mapping once, then re-check to close every matching error together.

## Look it up

- [Glossary](https://mossery-ops.vercel.app/help/reference/glossary.md): Plain-English definitions for the words Mossery uses about stock: on hand, allocated, available, assemblable, ledger, snapshot, receiving, costing, transfer, consignee, production partner, fulfilment, sync and the rest. Each entry is one or two sentences, listed alphabetically, with a link to the article that explains it properly. Start here when a word on screen means nothing to you.
- [Permissions](https://mossery-ops.vercel.app/help/reference/permissions.md): Access in Mossery is granted by role, and a role is simply a named set of permissions. There are 33 permissions across 11 groups, covering users, products, purchase orders, inventory, counts, transfers, assembly, production, sales, settings and utilities. An admin edits which role holds which permission in Settings, under Roles. This page lists every one.
- [What each status means](https://mossery-ops.vercel.app/help/reference/what-each-status-means.md): Every status pill in Mossery, in one place: purchase orders, receivings, stock transfers, stuck sales orders, ledger movement types, and the inventory type and stock mode on a product. Each row says what the status tells you and what normally happens next, so you can read a list page without asking anyone what a word means.
- [Words we use](https://mossery-ops.vercel.app/help/reference/words-we-use.md): Mossery picks one word per idea and sticks to it, and drops words that caused real mistakes. "Verify" left the warehouse floor when receiving was reshaped. Product type is a storefront label and never drives stock. Allocated is not deducted. This page lists the house vocabulary, the words deliberately avoided, and the reason behind each choice.

## Optional

- [Full documentation](https://mossery-ops.vercel.app/llms-full.txt): every article above, concatenated into one markdown document.
- [Sitemap](https://mossery-ops.vercel.app/sitemap.xml): every canonical HTML URL.
