> ## Documentation Index
> Fetch the complete documentation index at: https://docs.filexpress.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Product Catalog

> Manage the catalog of products and services: composition types, portions, recipes, categories, and brands

The catalog centralizes all the products and services the company sells or uses. It includes prices, costs, taxes, stock, and advanced configuration by composition type.

## Composition types

| Type | Code | When to use |
| - | - | - |
| **Simple** | `simple` | Standard product or service with no subdivisions |
| **With portions** | `with_portions` | A base product sold in different presentations (e.g., a 1L bottle sold as a 250ml portion) |
| **With recipe** | `with_recipe` | Product made by combining other inventory products (e.g., a pizza assembled from ingredients) |

***

## Create a product

**1. Go to Products → New Product**

**2. Basic data**

| Field | Description |
| - | - |
| Name | Product name (required) |
| SKU | Internal reference code |
| Barcode | EAN/UPC of the product |
| Scale code | Short code for weighing scales |
| Composition type | `simple`, `with_portions`, or `with_recipe` |
| Product type | `service` (Service), `phisical` (Goods), `both` (Goods/Service) |
| Is billable | Whether the product appears as a sales item on invoices |

**3. Prices**

| Field | Description |
| - | - |
| Base price (before taxes) | Entered directly or calculated from the sale price or margin |
| Sale price (with taxes) | Consumer price — calculated automatically from the base price |
| Cost | Acquisition cost |
| Margin | Gross profit % — calculated and adjusted together with the price |

**4. Classification**

Category, unit of measure, brand (optional), and economic activity.

If the category or brand you need doesn't exist, you can create it directly from the selector without leaving the form — see the section below.

**5. Tax treatment**

See the [Taxes on Products](https://docs.filexpress.app/en/docs/productos/impuestos.md) page for detailed configuration.

**6. Image (optional)**

Upload a photo of the product (JPG/PNG).

**7. Save**

***

## Product with portions (`with_portions`)

Lets you sell a base product in different sizes or presentations. Inventory is deducted from the base product proportionally.

**Additional required fields**

| Field | Description |
| - | - |
| `base_unit_quantity` | Total quantity contained in one base unit (e.g., `1000` for 1000ml) |
| `base_unit` | Unit of the base quantity (e.g., `ml`, `g`, `oz`) |

**Portions** — each portion defines:

| Field | Description |
| - | - |
| Portion name | Visible label (e.g., "Vaso 250ml") |
| Quantity | How much of the base product this portion consumes (e.g., `250`) |
| Unit | Unit of the portion (e.g., `ml`) |
| Base price (before VAT (IVA)) | Portion price before tax |
| Sale price | Calculated automatically by applying the product's taxes |
| Active | Whether the portion is available for sale |

**Example**: A water bottle (1000ml) with three portions:

| Portion | Quantity | Price |
| - | - | - |
| Small glass | 250ml | \$0.50 |
| Medium glass | 500ml | \$0.90 |
| Full bottle | 1000ml | \$1.50 |

When you sell 2 medium glasses, 1000ml (2 × 500ml) is deducted from the bottle's inventory.

> [!NOTE]
>
> The availability modal shows how many units of each portion are available based on the base product's current stock.

***

## Product with recipe (`with_recipe`)

A product assembled by combining other simple inventory products. When you produce it, the components are deducted automatically.

**Components** — each component requires:

| Field | Description |
| - | - |
| Component product | Simple product with available stock |
| Quantity needed | How many units of that component the recipe uses |
| Unit type | `base` (the component's base unit) |

The system calculates in real time:

* **Total cost** of the recipe (sum of `base_price × quantity` for each component)
* **Suggested price** (cost × 1.30 — 30% margin)
* **Maximum availability**: how many units of the final product can be made with the current stock of each component (limited by the component with the least availability)

**Produce**: when you record a production, the components are deducted from inventory and the manufactured product's stock increases.

> [!WARNING]
>
> Only simple products (`composition_type: simple`) with available stock can be added as recipe components.

***

## Create categories and brands

Categories and brands can be created directly from the product form without leaving it:

1. In the **Category** selector, type the name and click **+ Create category**.
2. The category is created and selected automatically.
3. The same flow applies to **Brand** with **+ Create brand**.

Categories are global per company (visible in all branches). Brands are also per company.

***

## Batches and expiration date

In the product form, the **Manages batches and expiration** switch marks products that are controlled by batch. It is **informational**: it does not change purchases, sales, or inventory.

* In the list, those products show the **Batches** tag and a **View batches** button.
* **View batches** opens the detail of the batches linked to the product: batch number, expiration date, initial quantity, available quantity, origin (purchase or production), and status (*Available*, *Expiring soon*, *Expired*, *Depleted*, or *Written off*).
* Products that already had batches recorded are marked automatically.

Batches are created when you record a purchase with an expiration date on the line or when you complete a [production](https://docs.filexpress.app/en/docs/inventario/produccion.md).

***

## Bulk import products

The import uses an **Excel (.xlsx)** file.

**1. Go to Products → Import products**

**2. Download the Excel template**

The first sheet (**Products**) is the one that gets imported and comes with examples. The other sheets list the **taxes**, **categories**, and **units of measure** available in the branch.

**3. Fill in the template with the product data**

**4. Upload the file (maximum 10MB)**

The system shows how many were imported successfully and which had errors. For each error there is an AI-generated suggestion.

### Columns

| Column | Required | Description |
| - | - | - |
| **Name**, **Cost**, **Price before taxes** | Yes | Basic product data |
| SKU | No | If it already exists, the product is updated |
| Margin (%) | No | Calculated from cost and price if left empty |
| Category, Unit of measure | No | Looked up by approximate name; defaults to *General* and *Unit* |
| Product type | No | Goods, Service, or Both |
| Tax method | No | Taxable, Exempt, or Not subject |
| **Tax** | No | Only for **Taxable** products: the tax that applies (see below) |
| Stock, Minimum stock | No | A stock greater than 0 on a new physical product generates an inventory movement |
| Price 1, Price 2, Price 3 | No | Saved in the price lists *List 1*, *List 2*, and *List 3* |

### Tax column

Write the **percentage** (`13` or `13%`), the **code**, or the **name** of the tax as it appears in the *Taxes* sheet of the template. For several taxes, separate them with a semicolon (`;`).

* The available taxes depend on the branch's country. In the import help modal, the **Taxes** tab lists them with their percentage and marks the default one.
* If the product is *Taxable* and the column is left empty, the branch's default tax is used; for a product that already exists, the taxes it had are kept.
* *Exempt* and *Not subject* carry no taxes: the column is ignored.
* A tax that doesn't exist in the branch marks the row with an error and indicates the available options.

> [!NOTE]
>
> For compatibility, CSV files with the previous headers (`sku`, `name`, `cost`, `price_before_taxes`, `tax_method`…) are also accepted.

## Export products

The **Export** button in Products downloads to Excel all the branch's products with the same columns as the template. You can correct the file and import it again to update prices, costs, or taxes in bulk. Only the price lists named *List 1*, *List 2*, and *List 3* travel in the *Price 1*, *2*, and *3* columns.

***

## Search and filters

Search by name, SKU, barcode, or scale code. Advanced filters let you filter by product type, category, and price range.

## View inventory movements

From the product detail, the movements tab shows the history of inflows and outflows with date and origin.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.