Practical lab · ERPNext 15

ERPNext practical lab: an electronics shop with 50 products

Run a small electronics shop from start to finish in ERPNext: load 50 products with barcodes and prices, track phones and laptops by serial number, buy stock from a supplier, sell at the till by cash, card and M-Pesa, take a return, and use the reports to find what's running low and what barely makes money.

By the Plentier Systems ERP team · Updated · About 2 hours if you follow along in your own ERP.

Every number and screenshot on this page comes from a real ERPNext 15 system we built for this lab, set up the way Plentier sets up a customer's ERP. Follow along in your own ERP, or read it to see how buying, selling, returns, stock and accounts fit together.

What you'll do

  1. Create 50 products with barcodes, buying prices and selling prices.
  2. Turn on serial numbers for phones, tablets, laptops, TVs and routers.
  3. Buy from a supplier: purchase order, purchase receipt, purchase invoice.
  4. Sell through the POS by cash, card and M-Pesa, and close the shift.
  5. Process a return and follow it through stock and the general ledger.
  6. Read the reports: stock balance, stock value, sales, low stock and margins.

Step 1: Create the products

The shop stocks 50 products in 11 item groups: Phones, Tablets, Laptops, TVs, Audio, Phone Accessories, Computer Accessories, Storage, Networking, Power and Home. Each one needs:

  • Item code, name and item group, for example PH-A15, “Smartphone 6.5" 4GB/128GB”, Phones. Keep codes short: cashiers search by them.
  • A barcode on the Inventory tab, type EAN. Products without a manufacturer barcode get an in-store EAN-13 starting with 200, a range reserved for shop use so it never clashes with a real product.
  • A buying price (price list Standard Buying) and a selling price (Standard Selling), saved as Item Prices. Purchase orders pick up the first, the POS the second.
  • A reorder level for the store under Auto Re-order, the quantity at which you want to restock. Step 7 uses it to find low stock.

Typing 50 items one by one is slow. Download the product list and load it with Data Import: first Item (code, name, group, barcode), then Item Price (one row per item and price list).

ERPNext item list filtered to the Phones group, showing five phone items
The item list, filtered to the Phones group.
ERPNext item price list showing Standard Selling prices for phones, tablets, laptops and TVs
Selling prices are Item Prices in the Standard Selling price list.

See all 50 products with barcodes and margins

CodeProductBarcodeBuy (KES)Sell (KES)MarginSerial
PH-A15Smartphone 6.5" 4GB/128GB200000010001217,50019,50010.3%Yes
PH-A05Smartphone 6.7" 4GB/64GB200000010002912,80014,50011.7%Yes
PH-K14Smartphone 6.6" 6GB/128GB200000010003615,90017,99911.7%Yes
PH-S24Flagship smartphone 6.2" 8GB/256GB200000010004378,00089,00012.4%Yes
PH-FEATFeature phone, dual SIM20000001000501,3501,99932.5%
TB-10Tablet 10" 64GB Wi-Fi200000010006716,50021,00021.4%Yes
TB-8KIDKids tablet 8" 32GB20000001000746,2008,50027.1%Yes
LP-I5Laptop 14" Core i5, 8GB/512GB200000010008152,00061,50015.4%Yes
LP-I3Laptop 15.6" Core i3, 8GB/256GB200000010009838,50044,99914.4%Yes
LP-REFRefurbished laptop 14" Core i5200000010010424,00032,00025.0%Yes
TV-32Smart TV 32" HD200000010011113,80016,99918.8%Yes
TV-43Smart TV 43" Full HD200000010012824,50029,99918.3%Yes
TV-55Smart TV 55" 4K200000010013546,00054,99916.4%Yes
AU-EB1Wireless earbuds20000001001421,1002,49956.0%
AU-HP1Over-ear Bluetooth headphones20000001001592,3004,50048.9%
AU-SPKPortable Bluetooth speaker20000001001661,9003,49945.7%
AU-SBSoundbar 2.1 with subwoofer20000001001739,80012,99924.6%
AU-WEWired earphones 3.5 mm200000010018012035065.7%
AC-CH25USB-C fast charger 25 W20000001001974501,20062.5%
AC-CH18USB charger 18 W with micro-USB cable200000010020328065056.9%
AC-CBCUSB-C cable 1 m20000001002109030070.0%
AC-CBLLightning cable 1 m200000010022714045068.9%
AC-CBMMicro-USB cable 1 m20000001002346020070.0%
AC-PB10Power bank 10,000 mAh20000001002419501,99952.5%
AC-PB20Power bank 20,000 mAh20000001002581,6502,99945.0%
AC-SPTempered glass screen protector20000001002653530088.3%
AC-CASESilicone phone case20000001002728045082.2%
AC-CARCar charger, dual USB200000010028922060063.3%
AC-HOLDCar phone holder200000010029626070062.9%
CP-MSWireless mouse200000010030238089957.7%
CP-KBUSB keyboard200000010031945099955.0%
CP-COMBOWireless keyboard and mouse combo20000001003261,3502,49946.0%
CP-BAGLaptop backpack 15.6"20000001003331,1002,20050.0%
CP-CHGUniversal laptop charger 90 W20000001003401,2502,49950.0%
CP-HUBUSB hub, 4-port200000010035732079959.9%
ST-FD32Flash drive 32 GB200000010036428060053.3%
ST-FD64Flash drive 64 GB200000010037142089953.3%
ST-SD64MicroSD card 64 GB200000010038845099955.0%
ST-HDD1External hard drive 1 TB20000001003954,6005,49916.3%
ST-SSD5SSD 512 GB SATA20000001004013,9004,80018.8%
NW-RTWi-Fi router, dual band20000001004182,6003,99935.0%Yes
NW-4G4G LTE MiFi hotspot20000001004253,1004,29927.9%Yes
NW-EXTWi-Fi range extender20000001004321,5002,49940.0%
NW-CAT6Ethernet cable Cat6, 5 m200000010044915045066.7%
PW-AAAA batteries, pack of 4200000010045614025044.0%
PW-EXTExtension cable 4-way, surge protected20000001004636501,19945.8%
PW-UPSUPS 650 VA20000001004705,2006,49920.0%
PW-SOLSolar lantern with USB charging20000001004871,4002,19936.3%
HM-REMUniversal TV remote200000010049422060063.3%
HM-WMTV wall mount 32-55"20000001005009001,99955.0%

Opening stock

Before the lab starts the shop already has stock of its accessories and other items without serial numbers. We loaded it with one Stock Reconciliation (purpose Opening Stock) listing the quantity and cost of each item, with Temporary Opening as the difference account. Serial-tracked products start at zero and arrive with the supplier purchase in Step 3, so every serial number has a purchase behind it.

Step 2: Track serial numbers

For phones, tablets, laptops, TVs and routers you need to know exactly which unit you sold, for warranty claims and returns. Open the item, go to the Inventory tab and under Serial Nos and Batches tick Has Serial No. Fill in a Serial Number Series such as LPI3-.#####: ERPNext then numbers new units LPI3-00001, LPI3-00002 and so on when you receive them. If units come with the manufacturer's serial or IMEI, type or scan those instead. ERPNext's Serial No documentation covers the other options.

ERPNext item LP-I3 Inventory tab with an EAN barcode, Has Serial No ticked and a serial number series
A laptop with its barcode and Has Serial No ticked.

In this lab 14 of the 50 products are serial-tracked. Accessories such as cables and cases aren't: counting them is enough.

Step 3: Buy from a supplier and receive the stock

Create the supplier (Demo Distributors Ltd), then follow the standard buying flow:

  1. Purchase Order: what you ordered. Ours has 16 lines, mainly phones, laptops, TVs and routers, priced from Standard Buying.
  2. Purchase Receipt (Create → Purchase Receipt on the order): what actually arrived. Submitting it adds the stock to the store at the buying price and creates the serial numbers, 43 in this lab.
  3. Purchase Invoice (Create → Purchase Invoice on the receipt): the supplier's bill, with their invoice number. It records what you owe, KES 869,500 here, and leaves the stock alone because the receipt already added it.
ERPNext purchase order to Demo Distributors Ltd with phone, tablet and laptop lines, status Completed
The purchase order. It shows Completed once it is fully received and billed.
ERPNext purchase receipt with accepted quantities and rates for each phone, tablet and laptop line
The purchase receipt adds the stock to Stores.
ERPNext purchase invoice from Demo Distributors Ltd with the supplier's invoice number, status Unpaid
The supplier's bill, Unpaid until you record the payment.

Open Serial No and filter by item to see every unit, the store it is in, and its status.

ERPNext Serial No list for PH-A15 with six serial numbers, three Active and three Delivered
The six PH-A15 phones at the end of the lab: three sold, the returned one back in stock.

Step 4: Sell through the POS by cash, card and M-Pesa

The till is a POS profile called Main Counter. It sells from Stores at Standard Selling prices and takes three payment methods: Cash (the default), Credit Card, which posts to the shop's bank account, and M-Pesa. The POS setup guide covers the profile step by step. The cashier, Wanjiru, logs in with a personal user, opens a shift with a KES 5,000 float and sells:

  • Cash: wireless earbuds, a phone case and a screen protector, KES 3,249. The customer hands over KES 3,500 and the POS shows KES 251 change.
  • Card: a laptop and a backpack, KES 47,199. Because the laptop is serial-tracked, the POS asks which unit is being sold.
  • M-Pesa: a phone, a case and a screen protector, KES 20,250, paid to the shop's till. The cashier picks the customer's payment under M-Pesa: till payment (see the M-Pesa guide).
ERPNext POS payment screen with KES 3,500 cash received for a KES 3,249 sale and change shown
Cash: enter what the customer gave and the POS works out the change.
ERPNext POS Add Serial Nos dialog with serial LPI3-00001 for a laptop
Selling a serial-tracked laptop: pick the exact unit, or scan its serial number.
ERPNext POS payment screen with KES 47,199 paid by credit card
Card: the whole amount goes on Credit Card.
ERPNext POS payment screen with KES 20,250 paid by M-Pesa from a till payment
M-Pesa: the amount comes from the till payment Safaricom confirmed, not typed in.

To give the reports something to show we added 22 more sales across the shift, to walk-in customers and two account customers: 25 sales in all.

Close the shift

At the end of the shift the cashier closes the POS and counts the drawer. Until then, POS sales are saved as POS Invoices that hold the stock but don't post it. The POS Closing Entry merges them into Sales Invoices, one per customer, and those post the stock movements and accounting entries. Close the shift before you read stock or profit reports. (See ERPNext's POS Closing Entry documentation.) In this lab the cashier's roles (Sales User, Stock User, Accounts User) weren't enough to submit the closing entry, so the cashier counts the drawer and a manager submits it.

ERPNext POS closing entry, status Submitted, with period, POS profile, cashier and linked POS invoices
The submitted closing entry lists every POS invoice in the shift.

Step 5: Process a return and follow it through stock and accounts

The M-Pesa customer brings the phone back the same day, and the shop refunds KES 19,500 in cash. The case and screen protector stay sold. Open the original POS invoice and choose Create → Return (or Recent Orders → Return in the POS), keep only the phone line with quantity −1 and its serial number PHA15-00001, set the refund to Cash, and submit. When the shift is closed the return becomes a credit note against the sale, ACC-SINV-2026-00002. ERPNext's sales return documentation covers returns made outside the POS.

ERPNext sales invoice marked Return, with Is Return (Credit Note) ticked and Return Against set to the original sale
The credit note, linked to the original sale under Return Against.

Effect on accounting. Open the General Ledger filtered on the credit note. The return makes two pairs of entries: it reverses the sale and refunds the cash (Sales debited KES 19,500, Cash credited KES 19,500, through Debtors), and it puts the phone back on the books at its cost (Stock In Hand debited KES 17,500, Cost of Goods Sold credited KES 17,500). The KES 2,000 margin on the phone disappears with the sale.

ERPNext General Ledger for the credit note: Sales and Debtors 19,500, Stock In Hand 17,500, Cost of Goods Sold 17,500, Cash 19,500
The return in the General Ledger: the sale reversed at KES 19,500, the stock returned at its cost of KES 17,500.

Effect on stock. The Stock Ledger for PH-A15 tells the phone's story line by line: 6 received at KES 17,500, 1 sold, 1 returned at the same KES 17,500, and 3 more sold later in the shift. Serial PHA15-00001 is back to Active in Stores and can be sold again.

ERPNext Stock Ledger for PH-A15 showing the purchase receipt, sales and the return with balance quantities
The Stock Ledger for one product: in, out, back in, out again.

Step 6: Stock balance, stock value and sales

Stock Balance (Stock → Reports) shows each item's opening quantity and value, what came in and went out in the period, and the closing quantity and value, so one report answers both “how many” and “how much is it worth”. On this ERP it is a background report: set the company, dates and store and click Generate New Report.

ERPNext Stock Balance report for Stores with opening, in, out and balance quantities and values per item
Stock Balance: quantities and values for every item in Stores.

At the end of the lab the stock is worth KES 1,164,130, and the Stock In Hand account in the general ledger shows the same KES 1,164,130. That match is the point of ERPNext's perpetual inventory: every stock movement posts to the accounts as it happens, so stock and accounts never drift apart. If they ever differ, run Stock and Account Value Comparison to find out why.

For sales, Item-wise Sales Register lists every item sold with its invoice, customer and amount. Across the shift the shop sold KES 283,011 after the return, against a cost of goods sold of KES 205,820, a gross profit of KES 77,191 (27%).

ERPNext Item-wise Sales Register listing items sold with invoice, posting date and customer
Item-wise Sales Register: what sold, to whom, on which invoice.

Step 7: Find low stock and weak margins

Low stock

Open Stock Projected Qty for the store. Next to each item's actual, ordered and projected quantity it shows the reorder level and a Shortage Qty: how far the projected quantity is below the reorder level. Type >0 in the filter box at the top of the Shortage Qty column to keep only what needs restocking:

ERPNext Stock Projected Qty report filtered to items with a shortage: MicroSD card, power bank, keyboard and mouse combo, 43-inch TV
Four products are below their reorder level.
ProductIn stockReorder levelShort by
ST-SD64 · MicroSD card 64 GB5105
AC-PB20 · Power bank 20,000 mAh561
CP-COMBO · Wireless keyboard and mouse combo341
TV-43 · Smart TV 43" Full HD121

The MicroSD card is the urgent one: half its reorder level is gone. Three more items sit exactly at their level (a router, a 55" TV and the Core i3 laptop) and will need restocking after the next sale. With Auto Re-order enabled in Stock Settings, ERPNext raises a Material Request for these automatically.

Weak margins

Open Gross Profit (Accounts → Reports), group by Item Code, and type <20 in the Gross Profit Percent column filter. The report compares each item's selling amount with what it cost, using the actual cost from the stock ledger rather than today's price list:

ERPNext Gross Profit report by item filtered to gross profit under 20 percent: two smartphones, a laptop, a hard drive and a TV
Five products sold this shift made less than 20% gross profit.
ProductQtySales (KES)Cost (KES)Margin
PH-A15 · Smartphone 6.5" 4GB/128GB478,00070,00010.3%
PH-A05 · Smartphone 6.7" 4GB/64GB114,50012,80011.7%
LP-I3 · Laptop 15.6" Core i3144,99938,50014.4%
ST-HDD1 · External hard drive 1 TB210,9989,20016.3%
TV-43 · Smart TV 43" Full HD129,99924,50018.3%

This is typical for electronics: phones, laptops and TVs bring in the big sales but only 10 to 18% margin, while accessories carry the profit. Screen protectors made 88% and cases 82% in this lab. Two things to act on: sell an accessory with every phone, and check the phone prices, since PH-A15 makes KES 2,000 on a KES 19,500 sale. (Gross Profit counts the four PH-A15 phones sold; the one returned shows on its credit note.)

Problems we hit, and the fixes

Why don't POS sales show in the Stock Ledger straight away?

In ERPNext 15 a POS sale is saved as a POS Invoice, which reserves the stock but doesn't post it. When the shift is closed, the POS Closing Entry merges the shift's POS invoices into Sales Invoices (one per customer), and those post the stock ledger and accounting entries. Close the shift before you read stock or profit reports.

The closing entry failed with “Serial No … is not present in the warehouse”.

The same serial number was sold on two POS invoices in one shift. POS invoices don't mark a serial as delivered until the shift is closed, so the POS can offer it again. Return or cancel one of the sales and sell it again with an unused serial number, then submit the closing entry again.

A returned item came back at its selling price instead of its cost.

We hit this in the lab. When a sale and its return fall in the same POS shift, ERPNext 15's closing entry posts both at the same moment and the credit note isn't linked to the sale's invoice, so it can value the returned item at its selling price. After closing, check the return's line in the Stock Ledger: the incoming rate should be the item's cost. If it isn't, an administrator links the credit note to the sale and runs Repost Item Valuation for that item, which corrects the stock value and the accounts. Returns of sales from earlier shifts are linked to the original Sales Invoice and come back at cost.

Stock Balance says it is a background report.

On larger ERPs ERPNext runs Stock Balance in the background. Set the filters and click Generate New Report; the result appears in a few seconds and is kept, so the next person sees it without waiting. Click Generate again after new transactions.

Can I load these 50 products into my own ERP?

Yes. Download the product list, change the codes, names and prices to your own, and import it with Data Import (Item, then Item Price). Items with a serial number series need “Has Serial No” ticked; set up your own series so numbers don't clash.

About this lab

We built this lab on a dedicated Plentier ERP (ERPNext 15), created the same way as a customer's ERP. The company, supplier, customers and products are made up; product names are generic and prices are typical Nairobi shelf prices in October 2026. More labs for spare parts, pharmacy and hardware shops are on the way. More help: all guides · the Plentier POS · Leo, the AI assistant, which can answer “which items are below their reorder level?” for you.

Want your shop running on ERPNext?

Book a free, no-obligation consultation. We’ll review your goals and recommend a practical path forward, usually within one call.