# Bulk Item Import & Multiple Pricing Tiers Guide
A comprehensive operational guide on bulk importing inventory, managing opening stock balances, and configuring multi-tier packaging pricing while strictly adhering to financial and inventory valuation guardrails.
1. Overview & Business Purpose
The Bulk Import Items feature allows organizations to rapidly onboard products, physical stock, services, and multi-tier pricing structures into Qotrack without manual entry.
Whether you are a new organization onboarding with inventory already typed out or exported in Excel/CSV, migrating from another software, initializing opening balances for a new branch, or updating wholesale pricing grids, this tool automates:
- Catalog Registration: Creates items with SKUs, barcodes, categories, and account links.
- Opening Stock & Ledger Integration: Automatically logs opening stock on hand and generates the corresponding double-entry journal entries (
Inventory AssetvsOwner's Equity). - Multi-Tier Pricing Grids: Establishes wholesale, carton, box, pack, and retail pricing tiers in a single pass.
- Intelligent Duplicate Resolution: Detects existing items in real time and offers instant choices to skip or update existing records.
2. The Import Interface & Workflow
To access the bulk importer:
- Navigate to Inventory > Items in the main navigation menu.
- Click the Import Items button in the top toolbar to open the centralized import modal.
Key Controls on the Import Modal
- Download CSV Template: Generates an instant, pre-formatted spreadsheet template populated with header columns and sample products, services, and multi-tier packaging formats.
- Target Branch (for Opening Stock): Specifies which branch receives the opening inventory quantities and financial asset valuations.
- Apply Pricing Tiers Across All Active Branches:
- When checked, the pricing tiers configured in the spreadsheet are replicated across all active branches in your organization.
- When unchecked, pricing tiers are assigned only to the selected Target Branch.
- Duplicate Handling Rule:
- Skip duplicates (Keep existing records untouched): Preserves existing items in the database without modification; only new items are created.
- Update duplicates (Overwrite existing item properties): Updates pricing, active status, and attributes of existing catalog items matching by SKU, Barcode, or Item Name.
- Drag-and-Drop Dropzone: Supports Microsoft Excel (
.xlsx,.xls) and Comma-Separated Values (.csv).
3. Spreadsheet Column Reference & Specifications
The import engine reads 18 standard columns. The first row must contain column headers.
| Header Name | Required | Data Type | Permitted Values / Format | Description & Behavior |
|---|---|---|---|---|
| Item Name | Yes | String | Any text (max 255 chars) | Product or service title. Must be unique within your organization. |
| Category | No | String | Category name | If the category does not exist, the system automatically creates it. Defaults to General. |
| SKU | Recommended | String | Alphanumeric (e.g. MED-PAR-500) |
Stock Keeping Unit. Primary unique inventory code. |
| Barcode | No | String | Barcodes (e.g. 5012345678901) |
Supports single or multiple barcodes separated by commas. |
| Item Type | No | String | product or service |
product tracks physical stock. service sets stock and reorder level to 0 and disables inventory tracking. |
| Cost Price | Yes (if Product) | Numeric | Decimal (e.g. 24.00, 250.00) |
Your purchase cost for the HIGHEST packaging unit (see Pricing Rule below). |
| Selling Price | Yes | Numeric | Decimal (e.g. 2.00, 5.00) |
The retail selling rate for the smallest base unit (dim: 1). |
| Unit Label | No | String | e.g. pc, strip, bottle, kg |
The label of the smallest base unit. Defaults to pc. |
| Initial Stock | No | Numeric | >= 0 (e.g. 100, 0) |
Opening quantity on hand. For products with packaging tiers, this represents total base units (pieces). |
| Reorder Level | No | Numeric | >= 0 (e.g. 20) |
Safe stock threshold. Alerts when inventory falls to or below this level. |
| Track Quantity | No | Boolean | yes, no, 1, 0 |
Whether sales and bills increment/decrement physical stock. Defaults to yes. |
| Allow Negative | No | Boolean | yes, no, 1, 0 |
Allows sales even when recorded stock is zero or depleted. Defaults to no. |
| Active | No | Boolean | yes, no, 1, 0 |
Controls whether the item is active and available in sales/purchase forms. Defaults to yes. |
| Pricing Method | No | String | factor or fixed |
factor applies markup multipliers; fixed relies on direct price tiers. |
| Track by Batch | No | Boolean | yes, no, 1, 0 |
Enables manufacturing batch and expiry tracking (requires Pro plan). |
| Expiry Alert Days | No | Integer | Number of days (e.g. 60) |
Days before batch expiration to trigger dashboard alerts. |
| Pricing Tiers | No | String | Label:Dim:Rate; ... |
Additional packaging and wholesale tiers (see detailed syntax below). |
| Description | No | String | Text | Internal product notes or invoice line descriptions. |
4. The Principal Multiple Pricing Tiers Cost Price Rule
When selling goods that are packaged in multiple units (e.g., selling by the Carton, Box, or individual Piece), you must understand how Qotrack calculates inventory value, Cost of Goods Sold (COGS), and gross margins.
The Underlying Mathematical Principle
In Qotrack, every inventory item is tracked in terms of its atomic base unit (dimension = 1). When you define packaging tiers with dimensions greater than 1 (e.g., a Carton containing 24 pieces has dim = 24), the system determines the cost of an individual unit behind the scenes using:
Unit Cost per Base Piece = Cost Price / Maximum Dimension (max_dim)
Because the system uses the maximum packaging dimension as the divisor, the Cost Price field MUST represent the acquisition cost of the HIGHEST packaging unit, never the single piece!
The Golden Rule of Multiple Pricing Tiers
For any item with multiple packaging tiers where max_dim > 1:
Smallest Tier Rate (Piece Price) < Cost Price < Highest Tier Rate (Carton Price)
- Upper Bound Constraint (Cost Price < Highest Tier Rate): The Cost Price must be lower than the selling price of the highest tier. If Cost Price >= Highest Tier Rate, selling the carton produces a negative or zero gross profit margin.
- Lower Bound Constraint (Cost Price > Smallest Tier Rate): The Cost Price cannot be lower than or equal to the selling price of the single piece. Entering a single piece cost into an item profile that has a carton tier causes the system to divide the piece price by the carton dimension, producing distorted, astronomical margins and severely understated inventory valuations.
5. Right vs. Wrong Examples: Detailed Financial Impact
Let us examine a real-world scenario of an item sold both by the Carton of 24 and by the Individual Piece.
- Packaging Tier 1 (Carton): Label =
ctn, Dimension =24, Selling Rate = GH₵ 36.00 - Packaging Tier 2 (Piece): Label =
pc, Dimension =1, Selling Rate = GH₵ 2.00
Scenario A: The Correct Configuration (Cost Price = GH₵ 24.00)
Here, the merchant inputs the true purchase cost of 1 Carton (GH₵ 24.00).
-
Behind-the-Scenes Calculation: Unit Cost per Piece = GH₵ 24.00 / 24 = GH₵ 1.00
-
Financial Outcome when selling 1 Carton (
ctn):- Selling Revenue: GH₵ 36.00
- Cost of Goods Sold (COGS): GH₵ 1.00 × 24 = GH₵ 24.00
- Gross Profit: GH₵ 36.00 - GH₵ 24.00 = GH₵ 12.00
- Gross Margin: 33.33% (Accurate, realistic commercial profit)
-
Financial Outcome when selling 1 Piece (
pc):- Selling Revenue: GH₵ 2.00
- Cost of Goods Sold (COGS): GH₵ 1.00 × 1 = GH₵ 1.00
- Gross Profit: GH₵ 2.00 - GH₵ 1.00 = GH₵ 1.00
- Gross Margin: 50.00% (Accurate, realistic retail markup)
Scenario B: The Wrong Configuration (Cost Price = GH₵ 1.00)
In this erroneous case, the merchant mistakenly typed the cost of 1 piece (GH₵ 1.00) into the Cost Price field, while configuring a carton tier of 24.
-
Behind-the-Scenes Calculation: Unit Cost per Piece = GH₵ 1.00 / 24 = GH₵ 0.04167
-
Financial Distortion when selling 1 Carton (
ctn):- Selling Revenue: GH₵ 36.00
- System-Calculated COGS: GH₵ 0.04167 × 24 = GH₵ 1.00!
- Distorted Gross Profit: GH₵ 36.00 - GH₵ 1.00 = GH₵ 35.00!
- Distorted Gross Margin: 3,500.00% (Outrageous, distorted margin that ruins P&L reports!)
-
Financial Distortion when selling 1 Piece (
pc):- Selling Revenue: GH₵ 2.00
- System-Calculated COGS: GH₵ 0.04167
- Distorted Gross Profit: GH₵ 2.00 - GH₵ 0.04 = GH₵ 1.96 (98% margin instead of true 50%)
-
Severe Balance Sheet Impact: If the business holds 100 cartons (2,400 pieces):
- True Inventory Value: 100 × GH₵ 24.00 = GH₵ 2,400.00
- Erroneous Value in Books: 2,400 × GH₵ 0.04167 = GH₵ 100.00
- Balance Sheet Understated by GH₵ 2,300.00!
Scenario C: Selling Below Cost (Cost Price = GH₵ 40.00)
If the merchant inputs a Cost Price of GH₵ 40.00 while selling the carton at GH₵ 36.00:
- Selling Revenue: GH₵ 36.00
- COGS: GH₵ 40.00
- Gross Loss: -GH₵ 4.00 (-11.11% margin)
- The system blocks this setup to prevent unintentional loss-making operations.
6. Formatting the "Pricing Tiers" Column in Spreadsheets
In the spreadsheet template, additional pricing tiers are defined in the Pricing Tiers column using a semicolon-delimited syntax:
Label:Dimension:Rate; Label:Dimension:Rate
- Label: Name of the tier (e.g.
Box,Carton,Pack,Wholesale). - Dimension: Number of base pieces contained in this tier.
- Rate: Selling price for this specific tier.
Practical Examples for the Template
-
Pharmaceutical Product (Pills / Strips / Boxes / Cartons):
- Base Unit:
strip(Selling Price =5.00) - Cost Price:
250.00(Cost to purchase 1 Carton containing 100 strips) - Pricing Tiers:
Box:10:45; Carton:100:400 - Meaning: 1 Box has 10 strips for GH₵ 45.00; 1 Carton has 100 strips for GH₵ 400.00.
- Base Unit:
-
Beverages / Soft Drinks:
- Base Unit:
bottle(Selling Price =3.50) - Cost Price:
60.00(Cost to purchase 1 Crate of 24 bottles) - Pricing Tiers:
Pack:6:19.50; Crate:24:72.00
- Base Unit:
-
Electronics & Accessories:
- Base Unit:
pc(Selling Price =18.00) - Cost Price:
140.00(Cost to purchase 1 Wholesale Pack of 10) - Pricing Tiers:
Pack:10:160.00
- Base Unit:
7. Built-in Validation & Error Guards
To guarantee that your inventory balances and profit metrics remain pristine, Qotrack enforces validations at multiple levels:
1. Real-Time Pre-Import Analysis
Upon uploading your spreadsheet, the importer analyzes every row before touching the database:
- Identifies rows where packaging units exist (
max_dim > 1) and verifies thatsmallest_tier_rate < cost_price < highest_tier_rate. - If an error is found:
- A prominent red alert banner appears at the top indicating the number of offending rows.
- The offending row displays a red Error badge with an explanatory tooltip.
- The Cost Price cell is highlighted in bold red with a warning icon.
- Clicking Import Items is blocked and launches an instructional dialog explaining how to correct the Cost Price.
2. Server-Side Bulk Import Verification
If an invalid row is submitted, the backend processing engine catches it during the database transaction:
- The offending row is safely skipped.
- The system returns an itemized audit log detailing the exact row number, item name, and price violation.
3. Manual Form Validation
When creating or editing items through the manual item modal (Inventory > Items > Add / Edit Item):
- The form's client-side validator inspects each branch tab.
- If any branch has a packaging tier with an invalid Cost Price, submission is halted and a notification alert directs the user to fix the pricing ratio.
8. Duplicate Detection & Resolution Guidelines
When importing inventory spreadsheets, Qotrack matches uploaded rows against your existing catalog using three criteria:
- SKU Match (case-insensitive exact match)
- Barcode Match (searches all individual barcodes in comma-delimited lists)
- Item Name Match (case-insensitive normalized title)
Choosing Your Duplicate Rule
| Rule | When to Choose | What Happens to Duplicates | What Happens to New Items |
|---|---|---|---|
| Skip Duplicates (Default) | Migrating partial catalogs, appending new product lines, or re-running an import after fixing errors. | Existing items remain completely unchanged. No pricing or stock is touched. | New items are created and opening balances posted. |
| Update Duplicates | Updating seasonal price lists, changing supplier reorder points, or syncing master catalog barcodes. | Existing items have their pricing, barcodes, categories, and settings overwritten with spreadsheet data. | New items are created and opening balances posted. |
[!TIP] Safety Prompt: If the uploaded spreadsheet contains items that already exist in your system, Qotrack displays an interactive amber dialog summarizing the exact duplicate count and asking you to explicitly confirm whether you wish to Skip or Update before committing changes.