Overview
Inklura keeps your stock in a signed movement ledger that reflects what physically happens on your shelves, and uses it to prepare your supplier orders. Three mechanisms drive the whole system:
- a ledger stock that only moves on a physical event (customer delivery, supplier reception, count, correction) and that can go negative;
- a supplier-ordering engine that recalculates draft orders as soon as demand changes;
- a three-step supplier email (stage → review → send) that guarantees the lines you review are the lines that go out.
This page is the map: the actors, the end-to-end flow, the stock model and the pages that detail each part.
The actors
| Actor | Role |
|---|---|
Back office (the /manage screens) |
Where you create and edit orders, confirm deliveries and receptions, review supplier emails and correct stock |
| Your storefront (for example PrestaShop) | Source of customer orders: they arrive in real time and are also caught up by a regular sync |
| The supplier-ordering engine | Recalculates the draft orders of each affected supplier as soon as an event changes demand |
| Scheduled tasks | Sync, fallback recalculation, morning email staging, reconciliation and automatic validation of forgotten events. See Daily timeline |
| Your suppliers | Receive order emails and deliver; each one has its own ordering days and times |
The system map
The nominal flow, from the customer order to the stock increase at reception:
flowchart TB
PS["Customer order<br/>(storefront)"]
PS -->|real time| ORD[("Order in Inklura")]
PS -->|catch-up sync| ORD
BO["Back office"] -->|create, edit, cancel| ORD
ORD -->|every change| RECALC["Supplier-ordering<br/>engine"]
RECALC --> SO["Draft supplier<br/>orders"]
SO -->|"morning stage (nothing sent)"| MAIL["Email review queue"]
MAIL -->|"send (manual or automatic)"| VEND["Suppliers"]
VEND -->|delivery| RCPT["Confirmed reception"]
RCPT -->|"increase (+)"| LEDGER[("Ledger stock")]
BO -->|"confirmed customer delivery (−)"| LEDGER
Top to bottom:
- Demand comes in. A customer order is received in real time, and a regular sync catches any that were missed. Both paths end on the same order in Inklura, without duplicates.
- Reordering follows events. Every create, edit, cancellation or status change of a customer order (as well as a supplier-order cancellation, a reception, a manual stock correction or a product update) triggers a recalculation of the affected supplier's drafts, usually within tens of seconds. Recalculations for the same supplier run one after another, never in parallel. Detail: Supplier orders.
- The email goes through three steps. Every morning, Inklura renders each draft's email preview without sending anything. You review and adjust, then sending re-renders the email from the current lines and blocks if the lines changed since the preview. If you turn on Automatic sending (« Envoi automatique ») on a supplier's record (together with Sending allowed, « Envoi autorisé »), its orders go out on their own shortly after the slot time, unless the pre-send check reports a shortfall: the order is then held and you are notified by email.
- Stock only moves on a physical event. A customer delivery decreases it, a supplier reception increases it. Taking an order and the storefront sync never touch stock. Detail: Stock write paths.
Two safety nets complement this flow. A periodic recalculation (every 30 minutes) catches an event that got lost. An automatic validation confirms, after a 12-hour grace period, planned receptions and deliveries that nobody confirmed. Confirming at the physical event remains the normal way. See Safety nets.
The two-column stock model
Every tracked product carries two stock values with distinct roles:
flowchart LR
MV["Physical movement<br/>(reception, delivery,<br/>count, correction)"] --> SA["Ledger entry<br/>± quantity"]
SA -->|same operation| L[("Ledger stock<br/>signed, may be negative")]
L -->|"max(0, ledger stock)"| S[("Displayed stock<br/>never negative")]
L -->|through guardrails| R["Supplier-ordering<br/>engine"]
S --> UI["Back-office<br/>screens and lists"]
- The ledger stock is the authority: opening stock + receptions − deliveries ± corrections. It may be negative: that means a customer delivery was recorded before the reception that covers it. The next reception nets out that gap instead of stacking on a counter stuck at 0, which makes "phantom stock" born from a clamped counter impossible.
- The displayed stock is the mirror shown in screens and lists: it is always
max(0, ledger stock). - Every physical movement (reception, delivery, count) writes a ledger entry and updates both values in the same operation. Every stock change leaves an entry in the journal, and a daily check flags any gap.
- The supplier-ordering engine reads stock through guardrails: an untracked product counts as 0, so does a just-in-time product until you validate its stock, and negative stock is always read as 0. Detail: The stock ledger.
The movement journal has three states: planned (a projection, for example the expected increase from a sent supplier order), applied (counted in stock) and cancelled. Only applied movements count. Each entry also records its origin: manual correction, customer delivery, supplier reception, inventory count, and so on. A reception or delivery validated automatically keeps its origin and carries a note that identifies it.
The rhythm of the day
| Cadence | Task | What it does |
|---|---|---|
| every 3 h | Storefront order sync | Imports and refreshes recent orders, without touching stock |
| every 3 h | Storefront product sync | Updates products and suppliers, without touching stock |
| every 30 min | Fallback recalculation | Catches missed supplier-order recalculations |
| every morning | Email staging | Renders previews for review, sends nothing |
| every 15 min | Automatic sending | Sends the orders of automatic-sending suppliers whose slot has just passed |
| once a day | Health check | Read-only: stock consistency indicators |
| once a day | Reconciliation | Recomputes the expected state of drafts and corrects drift |
| every 2 h | Automatic validation | Confirms receptions and deliveries planned more than 12 h ago and never confirmed |
The hour-by-hour detail is on Daily timeline, and a full week on A typical week.
Pages in this section
| Page | What it covers |
|---|---|
| Explained simply | How it works in everyday words, with worked numbers |
| The stock ledger | Signed stock, displayed stock, the movement journal and read guardrails |
| Stock write paths | Every action that changes stock and the common rule they follow |
| Supplier orders | Event-driven recalculation, send slots, stage → review → send |
| Daily timeline | The scheduled tasks and how they follow each other through the day |
| A typical week | Supplier waves, delivery rounds, assumed receptions and counting windows |
| PrestaShop sync | Orders and products coming from PrestaShop, and their effect on stock |
| Back office | The /manage screens: stock grid, journal, counts, health |
| Configuration | The settings that change stock and ordering behaviour |
| Safety nets | Consistency checks and automatic catch-ups |
Three guarantees
- The ledger stock follows physical reality. It only moves on delivery, reception, count or correction, never when an order is taken or during a sync. A negative value is information (an outflow recorded before the inflow that covers it), not an error.
- No ordering into the past. Demand is never attached to a supplier slot that has already passed; if no remaining slot can deliver in time, it is flagged so you can handle it directly.
- What you review is what goes out. Sending re-renders the email from the current lines and refuses to go out if they changed since the preview (lines, quantities or pack sizes). A cancelled order is never emailed, and neither is an email with no lines.
Where to start
- To understand the principle: Explained simply, then The stock ledger and Supplier orders, the two halves of the model.
- To know what changes a number: Stock write paths.
- To organise your week: Daily timeline, A typical week and Back office.
- For a PrestaShop storefront: PrestaShop sync.