Suppliers
The Suppliers page is your vendor master list — every wholesaler, distributor or manufacturer you buy stock from, with their contact details, credit terms, running balance, and a scorecard of how reliably they deliver.
Overview
Every product purchase, purchase order, and payment against a vendor links back to a Supplier record here, so this page is the foundation for the whole Buy/Purchase workflow.
Each supplier row shows a running Outstanding Balance — a negative-looking red amount means you still owe them money, green means they owe you (an overpayment or return credit).
Suppliers can be added one at a time with the Add Supplier form, or in bulk via the Import button using a CSV/Excel file.
This page is available at the advanced plan tier and above, gated behind the purchase_orders feature — on lower tiers the Suppliers and Purchase Orders menu items are hidden entirely.
Before You Start
- Your plan must be on the Advanced tier or higher — Suppliers is bundled with the Purchase Orders feature.
- You need at least "view" permission on Purchase to see this page; Create/Edit/Delete/Export are separate permissions your Admin can grant per staff role under Settings → Staff Permissions.
- If you operate multiple branches, Admins choose a Visibility scope (This branch only / All branches in unit / All branches in company) when creating a supplier — non-admins always create branch-only suppliers.
Step-by-Step Guide
1 Add a new supplier
- Click Add Supplier in the top-right of the page.
- On the Basic Info tab, enter the Supplier Name (required — the only mandatory field), Supplier Code (leave blank to auto-generate), Contact Person, Email, Phone, Address, GSTIN and PAN.
- Set Credit Days (how many days of credit this supplier gives you) and Credit Limit (a soft cap on how much you can owe them).
- If you are an Admin creating a brand-new supplier (not editing one), choose a Visibility — This branch only, All branches in unit, or All branches (company).
- Switch to the Banking tab to record Bank Name, Account Number and IFSC Code for NEFT/RTGS payments.
- Switch to the Notes tab for any free-text notes about this vendor.
- Click Create Supplier to save.
2 Bulk-import suppliers from a spreadsheet
- Click Import next to Add Supplier.
- On the upload step, either drag-and-drop or click to choose a
.csv,.xlsxor.xlsfile — or click Download sample template first to get the exact column headers and one example row. - The importer recognises flexible header names (e.g. "GST", "GST No" or "GSTIN" all map to the GSTIN field; "Mobile" or "Phone" both map to phone) so you don't have to match headers exactly.
- Only Name is required per row — every other column (Code, Contact Person, Phone, Email, GSTIN, PAN, Bank details, Credit Days, Credit Limit, Notes) is optional and defaults sensibly if left blank.
- Review the preview table — rows with a green ✓ are valid and will be imported; rows with a red ✗ show the specific validation error (currently only "name missing" is checked).
- Click Import N Supplier(s) to create all valid rows. The final screen reports how many were created and how many failed (duplicates or server errors).
3 View a supplier's full profile, purchase history and vendor score
- Click the clock/history icon in a supplier's row to open the detail drawer.
- The Info tab shows every contact, tax and banking field you filled in, plus notes.
- The Purchase Orders tab lists every PO raised against this supplier with its number, date, item count, status badge and total.
- The Performance tab shows a 0–100 Vendor Score (weighted 40% on-time delivery, 30% fulfillment rate, 30% low defect rate) alongside On-Time Delivery %, Fulfillment Rate %, Defect Rate %, Average Lead Time (order → received), Total Orders and Total Spend.
- The Record Payment tab lets you pay down what you owe this supplier directly (see next workflow).
4 Record a payment against a supplier's outstanding balance
- Open the supplier's detail drawer and either click Pay Now on the balance banner (only shown when you owe them money) or go directly to the Record Payment tab.
- Enter the Amount you are paying (required, must be greater than zero).
- Optionally set the Payment Date (defaults to today), a Reference / Cheque No., and a free-text Note.
- Click Record Payment — this reduces the supplier's outstanding balance immediately.
5 Edit, activate/deactivate or delete a supplier
- Click the pencil icon on a supplier row to edit any field except its visibility scope.
- Click the green/grey toggle in the Status column to mark a supplier Active or Inactive without deleting it — inactive suppliers are hidden from the "assign supplier" pickers used when creating Purchase Orders.
- Click the trash icon and confirm to delete a supplier. If that supplier already has purchase orders on file, the system automatically deactivates them instead of deleting so historical POs stay intact.
6 Search, filter and export the supplier list
- Use the search box to match on name, code or GSTIN.
- Use the All Status dropdown to filter to only Active or only Inactive suppliers.
- Switch between Table and Grid card views using the view toggle in the data grid toolbar.
- Click the export icon (visible only with Export permission) to download the current list as a spreadsheet.
Every Field & Button, Explained
| Field / Button | What it does |
|---|---|
Supplier Name * | The only required field. Shown everywhere this supplier is referenced (POs, ledger, expenses). |
Supplier Code | A short internal code; auto-generated if you leave it blank. |
Visibility (STORE / UNIT / COMPANY) | Admin-only setting on new suppliers controlling whether the supplier is usable only at this branch, across a business unit, or company-wide. |
Contact Person / Email / Phone / Address | Standard contact details shown in the detail drawer and used for sharing purchase orders. |
GSTIN / PAN | Tax identifiers, printed on purchase order documents and usable for TDS matching in Expenses. |
Credit Days | How many days of payment credit this vendor extends you — informational, does not block ordering. |
Credit Limit | A soft ceiling on how much you can owe this supplier; shown for reference in the detail drawer. |
Bank Name / Account Number / IFSC Code | Banking details for making NEFT/RTGS payments to this supplier. |
Notes | Free-text internal notes about the supplier. |
Outstanding Balance (list column) | Running amount you owe (red, shown with a minus) or are owed (green, shown with a plus); zero shows as a plain dash. |
POs (list column) | Count of purchase orders raised against this supplier. |
Status toggle | Green toggle = Active (selectable when creating a PO); grey = Inactive (hidden from PO supplier pickers but kept for history). |
Import | Opens the CSV/Excel bulk-import wizard; only visible with Create permission. |
Vendor Score | Composite 0–100 score in the Performance tab: 40% on-time delivery + 30% fulfillment rate + 30% low defect rate. |
Record Payment (Amount / Date / Reference / Note) | Reduces the supplier's outstanding balance; amount must be a positive number. |
Tips & Best Practices
- Fill in GSTIN and PAN on every supplier up front — it saves re-typing them on every Expense entry that references that vendor for TDS purposes.
- Use the Import wizard the first time you set up BazaarPOS if you are migrating from a spreadsheet of existing vendors — download the template first so your columns line up exactly.
- Deactivate suppliers you no longer buy from rather than deleting them, so old purchase orders and ledger history stay searchable.
- Check the Performance tab before placing a large order with a new-ish supplier — a low on-time or high defect rate is an early warning sign.
Troubleshooting & FAQ
I can't see the Suppliers menu item at all.
Why can't I delete a supplier?
My import said some rows failed — why?
The Visibility option is missing when I add a supplier.
The outstanding balance looks wrong after I recorded a payment.
🧑💻 Developer Notes
Source component(s):
frontend-app/packages/pos-react-lib/src/pages/SuppliersPage.jsxfrontend-app/packages/pos-react-lib/src/pages/suppliers/SupplierImportModal.jsx
Backend endpoints used:
GET /suppliersPOST /suppliersPUT /suppliers/:idDELETE /suppliers/:idGET /suppliers/:idGET /suppliers/:id/performancePOST /suppliers/:id/payments
Related tables (db-core repositories):
SupplierPurchaseOrderSupplierPayment
Redux slices:
authscope (selectCurrentScope / getScopeQueryParams)
Feature flag key: purchase_orders (requires advanced plan tier or above)
The supplier list is fetched with a high limit: 10000 so client-side DataGrid can handle search/sort/pagination without extra round-trips. Import runs one POST /suppliers per valid row sequentially and tallies created vs failed counts client-side — there is no dedicated bulk-import endpoint. The delete-vs-deactivate fallback (when a supplier has POs) is enforced server-side in the delete handler, not in the frontend.