Satvic Movement takes 150 to 200 orders a day through Amazon and two Shopify storefronts. Before
ERPNext, four questions about that flow had no single place to be answered:
- How many orders came in
- How much stock is on hand
- How much of that stock is already reserved
- How much of it sits in which warehouse
Every one of them meant opening Amazon, then opening Shopify, and reconciling the two by hand.
Three of those four are ordinary inventory questions with ordinary answers. The third one is not.
Reserved stock turned out to be the hard part of this implementation, and not because ERPNext
lacks the data. Because it has five different versions of it.
What Satvic Movement sells, and through what
Satvic Movement is an Indian health education business. It runs workshops, publishes books and
recipes, and has built an audience large enough that the products are bought by people the
content already reached rather than by people who went looking for a shop.
The commercial side trades as Prakriti Project, across three channels:
- Amazon, including stock held inside Amazon's own warehouse network
prakritiproject.org, a headless storefront running Shopify Hydrogenstore.satvicmovement.org, a standard Shopify store
Orders from all three are consolidated through Unicommerce, an Indian order and warehouse
management platform. Fulfilment runs from Satvic Movement's own warehouse in Bangalore and from
Amazon's distributed locations. There are no physical retail stores, which matters more than it
sounds: for this business the channel stock is the inventory problem. There is no shop floor
holding a buffer that absorbs a bad number.
The catalogue is 422 items across roughly ten to twelve item groups: food, grocery, fruits,
sprouts, yoga, lifestyle, clothes, books, gifts and combos. The spread is lopsided. Clothes
accounts for 7 of the 422. Food is most of the rest, and food is the part that constrains the
system, because food arrives as raw material, needs inspecting, and gets manufactured into
something else before it is sold.
Why could Tally not do this?
Satvic Movement ran on Tally before ERPNext. Tally offers no direct integration with Amazon or
with Unicommerce, so order information was typed in.
At 150 to 200 orders a day, that one fact produces every other problem on the list. Manual entry
at that volume is not a cost measured in keystrokes. It is a guarantee of lag. The stock figure
in the books trails the stock figure in reality by however long the queue of unentered orders
happens to be, and nobody can tell you how long that is, because measuring it would mean
clearing it.
The second problem compounds the first. Stock lived in as many places as it was sold from, and
each place had its own idea of what "available" meant. Amazon's number, Shopify's number and the
warehouse's number were three answers to one question with no reconciliation between them.
What was needed was not a different accounting package. It was one ledger that every channel
writes into.
How the channels connect
Unicommerce was integrated with ERPNext over its API. An order placed on Amazon or on either
Shopify storefront is captured by Unicommerce, and a Sales Order appears in ERPNext without
anyone retyping it.
That answers question one and kills the lag with it. The ledger now moves when the order is
placed instead of when somebody gets to it.
Questions two and four follow from the same change. Satvic Movement's warehouses are modelled in
ERPNext, including the Amazon locations where the stock sits in Amazon's network rather than
their own, so warehouse wise stock is one query instead of two dashboards and a phone call.
Which leaves question three.
What does ERPNext mean by "reserved"?
Here is where the build stopped being an integration.
"Reserved stock" sounds like a field. For a business that only sells, it nearly is. Open the
Bin doctype in ERPNext v15, the per item per warehouse record, and count the fields that
describe some variant of reserved:
| Field | What reserves it |
|---|---|
reserved_qty | Sales Orders, the older mechanism |
reserved_stock | The v15 Stock Reservation Entry total |
reserved_qty_for_production | Work Orders pulling material |
reserved_qty_for_production_plan | Production Plans |
reserved_qty_for_sub_contract | Subcontracting |
Five of them. Alongside actual_qty, ordered_qty, indented_qty, planned_qty and
projected_qty.
A pure reseller can ignore four and read the fifth. Satvic Movement is not a pure reseller. It
manufactures: pulses and raw materials are processed into flour, then packed down into retail
quantities. So production reservations and sales reservations are live at the same time, on the
same item, in the same warehouse. Read one field and you get a number that looks right and is
wrong by exactly the amount the factory has claimed.
projected_qty is the nearest thing to a native single answer, and it is a formula that folds in
planned, ordered and requested quantities. That makes it useful for deciding what to buy. It is
not the same as what can be promised to an Amazon customer this afternoon.
Two more things are worth knowing before anyone assumes v15 reservation is simply on.
Stock Settings carries Enable Stock Reservation as a checkbox defaulting to 0, so the
whole mechanism does nothing until somebody switches it on, and
auto_reserve_stock_for_sales_order_on_purchase also defaults to 0. Reservation in ERPNext v15
is a capability you opt into, not behaviour you inherit.
So the custom report is not filling a gap in ERPNext's data. It decides which of five reserved
figures belong in this business's answer and which do not, then puts that beside current stock
and the reorder level in one view. The reorder level needs fetching as well:
Item.reorder_levels is a child table labelled "Reorder level based on Warehouse", so the
threshold for a warehouse lives on the item record rather than next to the stock in that
warehouse.
A second report pairs pending stock with reorder levels for the same reason. A reorder level
only tells you anything when you can see it next to what is actually free.
How is food quality handled before it becomes a product?
Satvic Movement buys raw material and processes it, so the quality question arrives before
manufacturing rather than after.
Quality Inspection templates and instructions are configured in ERPNext for incoming material,
with parameters that mean something for food instead of generic ones. Flour is checked for
insects, moisture and weight variance. Jaggery is checked for insect contamination among other
parameters. The inspection happens on the purchased material, before anything is processed.
A manufacturing process then converts raw material into finished goods, pulses into flour being
the worked example, and the output is packed into smaller retail units.
Four pieces of this implementation are the delivered work, and they split evenly. Two are code:
the Unicommerce integration and the two custom stock reports. Two are configuration: the
manufacturing route converting raw material into finished goods, and the Quality Inspection
templates carrying the food parameters. The configuration half is not lesser work. A Quality
Inspection template is only worth having if somebody knew to put moisture and weight variance on
the flour one, and that knowledge is the deliverable.
Everything around those four is stock ERPNext. The interface was not modified at all, which is
the right outcome rather than a limitation: a business running on a screen nobody customised is
a business that can be handed to the next engineer.
What changed
The implementation took roughly a month. What the team reports since:
- Orders are not typed. A sale on Amazon or either Shopify storefront becomes an ERPNext
Sales Order through Unicommerce, so sales orders are created as fast as they arrive. - Order tracking is central. Three channels report into one system instead of being read
channel by channel. - Stock is one query. Warehouse wise figures, including the Amazon locations, sit in one
place rather than across two dashboards. - Reserved and pending stock are visible beside reorder levels, with a deliberate decision
behind which reserved figures count. - Fewer inventory errors, which follows from removing the manual entry step rather than from
catching mistakes better. - Quality checks happen on incoming material against food specific parameters, before
processing.
No percentage appears in that list. Nobody measured the before state, so there is no honest
before and after to quote, and an estimate produced after the fact would be an estimate dressed
as a finding. The mechanism is the claim instead: manual entry of 150 to 200 orders a day stopped
happening, and that is checkable against the integration.
Scope
ERPNext runs Buying, Selling, Stock, Manufacturing and Quality for Satvic Movement. HR and
employee management are not on it. Around fifteen accounts exist in the system and roughly ten
are real users, the remainder being test and guest accounts; those ten sit in the product
operation rather than across the wider team.
One standing cost is worth naming. The reserved stock report encodes a judgement about which of
five figures matter, and that judgement fits the current mix of manufacturing and channel sales.
Add subcontracting and reserved_qty_for_sub_contract starts carrying a number the report
ignores, so the report needs revisiting rather than quietly going wrong. A derived figure is only
as current as the thinking behind it.

