Procure-to-pay · Retail

Forty stores. One legal entity.

A store hierarchy that hangs off your locations rather than your company structure, the same product in every size it comes in with a validated barcode on each, and an inter-store transfer booked as the two stock movements it physically is.

Districts and stores under one entity Variants with a checked GTIN A transfer is two movements Per-store figures with their coverage
Why a general P2P tool falls short

Three decisions that decide whether a chain fits at all.

Every one of them is a place where the obvious modelling choice is the wrong one, and where getting it wrong is a migration rather than a setting.

A shop is not a legal entity

Atlas already has a company hierarchy, and it carries a region, a currency and a tax rate, because it models legal entities and every order stores the tax rate of the unit that raised it. Hang forty stores off that and you either invent thirty-nine companies or force real ones to share a node. Stores hang off locations instead, and keep the legal entity that actually owns them.

A transfer is not a new kind of movement

It is a consumption at the source and a receipt at the destination, which is what physically happens. Atlas writes the pair in one go and links them, so total stock on hand is unchanged by a transfer and every figure computed off the ledger keeps working. Inventing a fifth movement type would mean rebuilding the ledger that holds every movement ever made.

A per-store figure is only as good as the ledger under it

Locations have not always been recorded on every movement, so a store-level balance can be right and incomplete at the same time. Atlas shows the figure with how much of the ledger it could see — because a blank helps nobody and a confident wrong number is worse than either.

The store hierarchy

A district holding stores, a store holding its stockroom.

Locations nest, so a chain reads as a chain rather than as a flat list of forty names. And because the company structure is a separate thing, a location can sit inside a district and inside a legal entity at once — which is exactly how a chain works.

Variants & GTIN

One product, every size it comes in, each with its own barcode.

A variant is a stock item in its own right — it is received, counted and transferred like any other — that knows which product it is a version of. And the barcode is checked rather than stored.

  • One level, deliberately. A variant of a variant is a hierarchy nobody asked for, and it is refused
  • A GTIN is digits only — eight, twelve, thirteen or fourteen of them. Anything else is refused with the count it actually had, rather than stored and discovered at a till
  • The same barcode on two products is refused, naming the product that already holds it. A barcode identifies one thing
.../inventory
Variants of one product with their own codes and barcodes, above the transfer history
VariantsCode, size and barcode — one level, and each barcode used once.
Inter-store transfer

Booked as what it is, so nothing downstream has to be told about it.

Stock leaves one store and arrives at another. Atlas writes both movements together and links them, so the pair can still be read as one act while the ledger keeps the shape every other figure in the product is computed from.

  • Total on hand is unchanged by a transfer — which the test suite asserts directly, because that is the property everything else depends on
  • The batch travels with the stock, so a recall does not lose sight of a lot the moment it moves between stores
  • A transfer is not demand. Reorder levels are derived per item from the stock ledger, and stock moved between stores is left out of the usage they are sized on
  • A transfer to where it already is, is refused. Same source and destination is not a movement
  • Both ends must be named. A transfer whose destination is unknown is a write-off wearing a movement's clothes
  • Atlas will not claim the source has the stock. Where the ledger's location coverage is thin it says so and lets a person decide, rather than blocking an honest transfer or asserting a balance it cannot stand behind
.../inventory
A transfer between two stores with the note explaining it is recorded as a consumption and a receipt
Two movements, one actAtlas explains the choice on the screen where it matters.
When it stops you

What this pack refuses, and what to do about it.

Atlas refuses a lot here, on purpose, and every refusal carries its reason on the screen. These are the ones this industry meets, in the words the screen actually uses — so that meeting one is a thirty-second fix rather than a support call.

What Atlas will not do
What the screen says
What to do
A per-store figure presented as certain
Atlas shows the number and what it could not place: “this is what is known to be here, not necessarily what is here.” Location has only been recorded since it became a field on the movement form.
Record a location on every movement. The figure and its caveat both improve as you do.
A transfer refused because the source looks empty
It is not refused. A ledger that never recorded locations shows zero everywhere, and blocking on that would stop every honest transfer on every existing workspace.
Read the coverage line and decide. Atlas reports both figures rather than asserting a balance it cannot stand behind.
A loop in the store hierarchy
Refused. “A hierarchy with a loop in it makes every report that walks the tree run for ever.”
Choose a different parent. A location cannot sit inside itself, or inside anything already below it.
A variant of a variant
Refused. Variants are one level deep: “a product has sizes and colours, and a size does not have sizes of its own.”
File it under the parent product, not under another variant.
A barcode that could never be scanned
Refused. Digits only, and 8, 12, 13 or 14 of them: “A wrong one is worse than none, because a scanner will simply never match it.”
Enter the GTIN as printed. One already on another item is refused too: a scan that could mean either tells you nothing.
A transfer with one end missing
Refused. “One with no destination is a write-off wearing a movement's clothes.”
Name both ends, or record it as the write-off it actually is.
Retiring a location that still has stores under it
Refused. Taking it out of use would not remove them — it would hide them, because the tree is walked through locations that are in use.
Move them somewhere else first.
Underneath all of it
Shared by every pack that converts or imports anything
What to do
A conversion that was never declared
Refused, and Atlas never returns the quantity unchanged. “Until it is declared, the two quantities are not comparable and Atlas will say so rather than return a figure that looks right.”
Declare the factor for that item. A factor is per item — a case of paper and a case of wine hold different numbers of things — so it is never guessed from a unit's name.
A blank unit read as “each”
It is not. Blank is nobody having said, and it refuses.
State the unit the stock is counted in. Nothing existing is re-expressed when you do: every quantity already recorded means exactly what it meant yesterday.
Spreading import costs with no basis chosen
Refused; there is no default. By value, by weight and by quantity give three different unit costs from one invoice: “all three look equally right on the screen.”
Choose the basis the consignment was actually costed on. A house default would be Atlas deciding which of your products looks profitable.
One line with no weight, on a by-weight split
Refuses the whole split, not just that line. “That would overstate every one of them and understate these to nothing, and the total would still foot exactly.”
Record the missing figures, or choose a basis every line can carry. A figure that foots is the most convincing kind of wrong.
A charge in another currency
Refused, not converted — a customs entry settled months ago at one rate is not today's fact: “What was paid is an amount in a currency, not a rate.”
Record it in the shipment's currency, or cost the shipment in the currency the charges were settled in.

Every one of these is also written into the guidance drawer on the screen it happens on, and into the process guides your own workspace generates — so a person who meets it at four o’clock on a Friday does not need us, or you.

Said plainly

What this pack is not, and why.

Retail was built last on purpose, because its largest expected component is a programme of work rather than a module and should be decided on its own evidence. It is not here, and this page will not imply it is.

Not in this pack
What is true today
EDI
Not built, and not one standard. 850 / 855 / 856 / 810 are ANSI X12 and are North America; the EU, the UK, the GCC and Australia trade the same documents as EDIFACT, and the invoice leg in the EU and Australia is Peppol BIS — which Atlas already speaks. Costing this as "EDI" would hide that it is at least two integrations plus per-partner maps and a VAN. It is a programme, and it should be decided on its own evidence rather than arriving as a line item inside the word "retail".
Open-to-buy budgets
Budgets in Atlas are keyed by fiscal year, cost centre and account. Open-to-buy needs a department-and-season dimension on top of that, widening it means rebuilding a table holding live financial commitments, and a season does not exist anywhere in the product. Inventing one so a budget could be keyed on it would be the tail wagging the dog.
Markdown and promotional pricing
These are selling prices. Atlas is a buying system and has no concept of what anything is sold for. Adding one inside a sector pack would be a new product hiding inside an old one.
A store-level view that pretends to be complete
Where movements were recorded without a location, a per-store figure cannot be exact. Atlas reports the figure and the coverage behind it together, every time — which is less flattering than a single number and is the only version you can act on.
See it on your own estate

Bring your store list. We'll build the hierarchy.

A short demo on your own stores and SKUs — districts and stores under one entity, a product in every size with its barcodes checked, and stock moved between two shops.

Book a demo