---
title: Generic products
description: "> 📍 **Where can I find this module?** > *Main menu > Catalog > Products* Kafinea distinguishes two product categories for managing supplier sourcing: - **Generic product**: a \"template\" item used in your quotes, customer orders, and invoices (e.g., *HDMI…"
url: "https://www.kafinea.com/en/help/catalog/generic-products/"
updated: "2026-04-22"
category: Catalog
---

# Generic products

> 📍 **Where can I find this module?**
> *Main menu > Catalog > Products*

Kafinea distinguishes two product categories for managing supplier sourcing:

- **Generic product**: a "template" item used in your quotes, customer orders, and invoices (e.g., *HDMI Cable 2m*). It does not correspond to any specific supplier reference.
- **Specific product**: a concrete variant linked to a generic product and purchased from a supplier (e.g., *HDMI Cable 2m – Alpha Brand, Ref ABC123*).

> This feature is only active if the **Generic products & supplier sourcing** setting is enabled in *Settings>Features*.

---

## 1. Identifying a generic or specific product

On the product record, check **Generic product** in the *Generic products* block.

- A **blue "Generic" badge** appears next to the product name on the detail record to immediately identify generic products.
- Specific products do not display a badge.

---

## 2. *Generic products* block on the record

The block contains fields related to generic/specific management. Depending on the choice made, some fields are applicable, others are not:

| Field | Generic | Specific |
| --- | --- | --- |
| Generic product (checkbox) | ✅ | ✅ |
| Parent generic product | ❌ | ✅ (points to a generic) |
| Price calculation mode | ✅ | ❌ |
| Margin (%) | ✅ (except *Manual entry* mode) | ❌ |
| Price rounding | ✅ (except *Manual entry* mode) | ❌ |
| Reference cost | ✅ (calculated, except *Manual entry*) | ❌ |
| Last price calculation | ✅ (calculated) | ❌ |
| Calculation status | ✅ (calculated) | ❌ |

**Non-applicable fields**: they are not hidden; they remain **visible but grayed out** with a tooltip "Not applicable to generic products" or "Not applicable to specific products." This prevents any perceived loss of information and documents the reason for the graying out for the user.

---

## 3. Price calculation modes

The **calculation mode** determines how Kafinea populates the selling price of the generic product. **You must choose an explicit mode**: no default value is applied silently. If the mode is empty or unknown, the status *Error: calculation mode not defined* appears and the current price is retained.

Six modes are available:

| Mode | Cost source | Behavior |
| --- | --- | --- |
| **Manual entry (no recalculation)** | — | The price is **entered manually** on the generic. Kafinea **never recalculates it**, including when a child specific is modified. |
| **Cheapest offer** | Supplier offers from child specifics | Selects the valid supplier offer with the **lowest price**. |
| **Preferred offer** | Supplier offers from child specifics | Selects the offer marked as *preferred*. Otherwise, falls back to the cheapest offer. |
| **Average of offers** | Supplier offers from child specifics | Selects the **average** of valid offer prices. |
| **Cheapest specific** | Purchase price of child specifics | Selects the **purchase price** (`unit_price`) of the **cheapest** child specific, without going through offers. |
| **Average of specifics** | Purchase price of child specifics | Selects the **average** of purchase prices of child specifics, without going through offers. |

For the five automatic modes, the final price is then obtained using the formula:

> **Selling price** = Reference cost × (1 + Margin %) then **rounded** according to the settings.

### Possible calculation statuses

| Status | Meaning |
| --- | --- |
| **OK** | Calculation successful, price updated. |
| **Not applicable** | *Manual entry* mode: no calculation was performed, the price is the one entered. |
| **No specific** | The generic has no linked child specific. |
| **Missing offers** | No valid supplier offer at the calculation date. |
| **Missing prices** | The specifics (or their offers) have no usable price. |
| **Error: calculation mode not defined** | No mode has been chosen or the mode is unknown: the price is not modified. |

---

## 4. Display and behavior on the generic product record

For generic products, several visual elements help you understand how the price is obtained and whether you can modify it.

### 4.1 Contextual banner in the *Pricing information* block

An information banner appears at the top of the pricing block:

- In *Manual entry* mode: "Manual entry: the price is not recalculated automatically."
- In other modes: "The selling price is recalculated automatically from child specific products (mode: %s)." followed by the date of the **last calculation**.

The banner also contains a **"View children"** link to quickly access the linked specific products. The price is recalculated automatically when an offer or specific changes; to force it, use the **"Recalculate"** button in the margin analysis widget (offered when the price is flagged as **frozen**) or the bulk action **"Recalculate catalog price"** from the product list.

### 4.2 *Unit price* field in read-only mode + "Calculated" badge

When the generic is **not** in *Manual entry* mode, the **Unit price** field is presented as **read-only** and accompanied by a **"Calculated"** badge. A tooltip specifies: *"This price is calculated automatically (mode: %s). Switch to Manual entry (no recalculation) mode to enter it."*

In *Manual entry* mode, the field becomes editable again: you can freely enter the selling price, which will never be overwritten by an automatic recalculation.

### 4.3 "How is this price calculated?" popover

Next to the *Unit price* field, an **ⓘ** icon opens a popover that details:

- The active calculation **mode**.
- The selected **reference cost**, the applied **margin**, and the **rounding**.
- The list of **sources used**: depending on the mode, child specific products (with their purchase price) or supplier offers (with supplier and price).
- The **final price** obtained.

If no calculation data is available, the popover displays *"No calculation data available."*

---

## 5. Business rules

1. **A generic product cannot have a parent.**

   - If you check *Generic product* and a parent is specified, Kafinea blocks the save with the message:

     > *A generic product cannot have a parent product.*
   - This rule applies to **all** channels: UI editing, quick edit, bulk edit, REST API, workflows, CSV import.
2. **The parent of a specific product must itself be a generic product.** Kafinea automatically verifies this consistency upon saving.
3. **Automatic price recalculation**: when a specific product changes parent, when a supplier offer is created/modified/deleted, or when the purchase price of a specific changes, the price of the related generic product is recalculated automatically—**unless** the generic is in *Manual entry* mode (in which case, the price remains strictly the one you entered).
4. **Explicit mode choice**: the system no longer applies a silent default mode. A generic without a calculation mode will produce an *Error: calculation mode not defined* status and its price will not be modified, until you select a mode.
5. **A generic product cannot be a kit** (and vice versa). The two price calculation mechanisms are incompatible. If you attempt to transform a kit into a generic product (or add sub-products to a generic), Kafinea blocks the operation. See [Product kits](https://www.kafinea.com/en/documentation/catalog/product-kits/) for more details.

---

## 6. Switching between generic ↔ specific

You can change a product from generic to specific (and vice versa) at any time:

- Non-applicable values are **retained in the database** but simply grayed out on screen.
- If you switch back, the data becomes visible and editable again.
- Therefore, you do not lose any information when changing type.

---

## 7. Frequently asked questions

**Why can't I enter a parent on my generic product?**
 Because a generic is by definition a "template" without direct supplier linkage. Only specific products have a generic parent.

**Why is the unit price of my generic product read-only?**
 Because the active calculation mode automatically recalculates this price from child specifics or their supplier offers. To enter it manually, switch the calculation mode to *Manual entry (no recalculation)*.

**What is the difference between *Cheapest offer* and *Cheapest specific*?**
 *Cheapest offer* (and its variants *Preferred offer* / *Average of offers*) relies on **supplier offers** linked to child specifics. *Cheapest specific* (and *Average of specifics*) directly uses the **purchase price** carried by specific products, without going through offers.

**Why are the price calculation fields grayed out on my specific product?**
 These fields are only used for automatic price calculation of the generic. They have no meaning on a specific product, which reflects a precise supplier offer.

**The status displays *Error: calculation mode not defined*. What should I do?**
 Open the generic product record and select a mode in *Price calculation mode*, then save. Kafinea will restart the calculation at the next update, via the *Recalculate* button in the margin analysis widget (when the price is flagged as frozen) or via the bulk action *Recalculate catalog price* from the product list.

**The "Generic" badge is not displayed, why?**
 Verify that the *Generic products & supplier sourcing* setting is enabled in *Settings>Features*, and that the *Generic product* checkbox is checked on the record.

---

## Related references 🔗

- [Sourcing Management](https://www.kafinea.com/en/documentation/catalog/sourcing-management/)
- [The Purchase Order Assistant](https://www.kafinea.com/en/documentation/catalog/the-purchase-order-assistant/)
- [Products](https://www.kafinea.com/en/documentation/catalog/products/)
- [Product kits](https://www.kafinea.com/en/documentation/catalog/product-kits/)
- [Catalog margin analysis](https://www.kafinea.com/en/documentation/catalog/catalog-margin-analysis/)
