Home / Help Center / pos-app / Buy / Purchase / Suppliers
🚚 Buy / Purchase

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.

📍 Menu path: Buy / Purchase → Suppliers
👤 Who uses it: Owners/Admins and Managers with Purchase permission; Admins additionally control company/unit/branch visibility on new suppliers
🏷️ Plan tier: advanced+

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

Step-by-Step Guide

1 Add a new supplier

  1. Click Add Supplier in the top-right of the page.
  2. 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.
  3. 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).
  4. 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).
  5. Switch to the Banking tab to record Bank Name, Account Number and IFSC Code for NEFT/RTGS payments.
  6. Switch to the Notes tab for any free-text notes about this vendor.
  7. Click Create Supplier to save.

2 Bulk-import suppliers from a spreadsheet

  1. Click Import next to Add Supplier.
  2. On the upload step, either drag-and-drop or click to choose a .csv, .xlsx or .xls file — or click Download sample template first to get the exact column headers and one example row.
  3. 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.
  4. 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.
  5. 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).
  6. 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).
💡 Blank rows in your spreadsheet are silently skipped, so you don't need to clean up trailing empty rows before uploading.

3 View a supplier's full profile, purchase history and vendor score

  1. Click the clock/history icon in a supplier's row to open the detail drawer.
  2. The Info tab shows every contact, tax and banking field you filled in, plus notes.
  3. The Purchase Orders tab lists every PO raised against this supplier with its number, date, item count, status badge and total.
  4. 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.
  5. The Record Payment tab lets you pay down what you owe this supplier directly (see next workflow).
💡 The Performance tab shows "No performance data yet" until this supplier has at least one purchase order that has progressed through receiving.

4 Record a payment against a supplier's outstanding balance

  1. 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.
  2. Enter the Amount you are paying (required, must be greater than zero).
  3. Optionally set the Payment Date (defaults to today), a Reference / Cheque No., and a free-text Note.
  4. Click Record Payment — this reduces the supplier's outstanding balance immediately.

5 Edit, activate/deactivate or delete a supplier

  1. Click the pencil icon on a supplier row to edit any field except its visibility scope.
  2. 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.
  3. 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

  1. Use the search box to match on name, code or GSTIN.
  2. Use the All Status dropdown to filter to only Active or only Inactive suppliers.
  3. Switch between Table and Grid card views using the view toggle in the data grid toolbar.
  4. Click the export icon (visible only with Export permission) to download the current list as a spreadsheet.

Every Field & Button, Explained

Field / ButtonWhat it does
Supplier Name *The only required field. Shown everywhere this supplier is referenced (POs, ledger, expenses).
Supplier CodeA 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 / AddressStandard contact details shown in the detail drawer and used for sharing purchase orders.
GSTIN / PANTax identifiers, printed on purchase order documents and usable for TDS matching in Expenses.
Credit DaysHow many days of payment credit this vendor extends you — informational, does not block ordering.
Credit LimitA soft ceiling on how much you can owe this supplier; shown for reference in the detail drawer.
Bank Name / Account Number / IFSC CodeBanking details for making NEFT/RTGS payments to this supplier.
NotesFree-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 toggleGreen toggle = Active (selectable when creating a PO); grey = Inactive (hidden from PO supplier pickers but kept for history).
ImportOpens the CSV/Excel bulk-import wizard; only visible with Create permission.
Vendor ScoreComposite 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

Troubleshooting & FAQ

I can't see the Suppliers menu item at all.
Suppliers requires the Advanced plan tier or above and the Purchase Orders feature to be enabled. Check your plan under Settings → Billing, or ask your Admin.
Why can't I delete a supplier?
If the supplier already has purchase orders on file, BazaarPOS automatically deactivates it instead of deleting, to preserve the history on those POs. Use the Status toggle to reactivate if needed.
My import said some rows failed — why?
A row fails validation only if the Name column is empty. Server-side failures (shown after import completes) are usually duplicate supplier codes — check the failed count and re-check those rows.
The Visibility option is missing when I add a supplier.
Visibility (branch/unit/company scope) is only shown to Admin users, and only when creating a new supplier — it cannot be changed later while editing.
The outstanding balance looks wrong after I recorded a payment.
Recording a payment only affects supplier ledger balance; if the amount still looks off, check whether a separate Purchase Order receipt or Ledger entry was also posted for the same transaction, causing a double entry.

🧑‍💻 Developer Notes

Source component(s):

  • frontend-app/packages/pos-react-lib/src/pages/SuppliersPage.jsx
  • frontend-app/packages/pos-react-lib/src/pages/suppliers/SupplierImportModal.jsx

Backend endpoints used:

  • GET /suppliers
  • POST /suppliers
  • PUT /suppliers/:id
  • DELETE /suppliers/:id
  • GET /suppliers/:id
  • GET /suppliers/:id/performance
  • POST /suppliers/:id/payments

Related tables (db-core repositories):

  • Supplier
  • PurchaseOrder
  • SupplierPayment

Redux slices:

  • auth
  • scope (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.