Article costs (*Artikelkosten*) are the most flexible cost type. They charge services based on stock movements (e.g. putaway, transfer, goods issue), order lines, picklist lines or pallets – for one specific article or for all articles of a client. You can convert quantities into units such as cartons or pallets and restrict the charge with conditions.

Typical uses: a handling fee per item put away, a pick fee per order line, a fee per carton picked, or a fee per pallet shipped.

![Screenshot: Item cost templates list with client filter, columns Client, Item, Unit, Costs and Active](/billing/images/article-costs-overview.png)

## Before you start
- Your user needs the permissions for the article costs in the cost settings – ask your administrator.
- The client exists, see [Clients](/company/clients.md).
- A **Billing Category** is required, see [Service categories](/billing/service-categories.md).
- The stock movement reasons you want to charge (the **Action**) are maintained in the warehouse settings in the field **Stock movement / reason** (*Lagerbewegung / Grund*), see [Warehouse settings](/warehouse-setup/warehouse-settings.md). The form contains a direct link to this field.
- The quantity units and loading units (e.g. carton, pallet) are maintained in the [Warehouse settings](/warehouse-setup/warehouse-settings.md).
- For **Dynamic picks**: the articles have the attribute "units per box" maintained, see [Edit an article](/products/edit-article.md).

## Step by step
1. Open **WMS › Settings › Cost settings › Item costs** (*WMS › Einstellungen › Kosteneinstellungen › Artikelkosten*).
2. Click **Create template** (*Vorlage anlegen*).
3. Section **Base information** (*Basisdaten*): choose the **Client** (*Mandant*) and optionally a **Module** (*Modul*), enter a **Name** (*Name*) and optionally a **Custom Name** (*Individueller Name*). Choose the **Billing Category** (*Abrechnungs-Kategorie*) and the **Itemized statement on the invoice** (*Detail-Darstellung auf Rechnung*), tick **Active** (*Aktiv*). Optionally enter a **Detailed description** (*Detailbeschreibung*) – it appears line by line on the invoice.

![Screenshot: Section "Base information" of the item cost template form](/billing/images/article-costs-form-basics.png)

4. Section **Item & Quantity** (*Artikel & Menge*): choose the **Stock item** (*Lager Artikel*) or **All** (*Alle*), the **Items to be calculated** (*Zu berechnende Positionen*), **Calculate from** (*Ermitteln aus*), optionally a **shipping status** (*Versandstatus*), the **Action** (*Aktion*) and the actions to exclude (*Aktionen ausschließen*). Then define the **Quantity** (*Menge*) with unit, operator and number.

![Screenshot: Section "Item & Quantity" with Stock item, Items to be calculated, Calculate from, Action and the Quantity row (unit, operator, number)](/billing/images/article-costs-form-quantity.png)

5. Section **Costs & Terms** (*Kosten & Bedingungen*): enter the **Costs** (*Kosten*) and optionally add conditions under **Conditions / Triggers (Optional)** (*Bedingungen / Auslöser*).
6. Optionally set a [validity period](/billing/validity-period.md) and click **Save** (*Speichern*).

![Screenshot: Section "Costs & Terms" with Costs and two conditions (Number of shipping labels, Shipping method)](/billing/images/article-costs-form-conditions.png)

## Fields and options
| Field | Meaning | Required |
|---|---|---|
| **Client** (*Mandant*) | The client you are billing. | yes |
| **Module** (*Modul*) | Only orders from this sales channel are charged. Empty = all modules. | no |
| **Name** (*Name*) | Name of the item on the statement. | yes |
| **Custom Name (Optional)** (*Individueller Name*) | Text per line in the detailed breakdown. You can use the variables `#Lagerplatz#` (storage place), `#Artikelnummer#` (SKU), `#Menge#` (quantity), `#Auftragsnummer#` (order number), `#Palettennumer#` (pallet number), `#Avisierungsnummer#` (advance notice number) and `#Artikelname#` (article name). | no |
| **Billing Category** (*Abrechnungs-Kategorie*) | Groups the item on the statement. | yes |
| **Detailed description** (*Detailbeschreibung*) | Appears line by line on the invoice. | no |
| **Stock item** (*Lager Artikel*) | One article (search by SKU or name) or **All**. | yes |
| **Items to be calculated** (*Zu berechnende Positionen*) | What is charged: **Order line (total)** (*Auftragsposition (summieren)*) = the piece quantity of the order lines; **Order items (count)** (*Auftragspositionen (zählen)*) = the number of order lines; **Picking list items** (*Picklistenpositionen*); **Pallet** (*Palette*) = each whole pallet once; **Stock movements (booked quantity according to history)** (*Lagerbewegungen (gebuchte Menge laut Historie)*). | no |
| **Calculate from** (*Ermitteln aus*) | **History** = the stock movements of the client; **Orders** = the orders and their lines (date = delivery date). | no |
| **shipping status** (*Versandstatus*) | Only orders with this status are charged. | no |
| **Action** (*Aktion*) | The stock movement reasons that are charged (multiple selection). | no |
| Exclude actions (*Aktionen ausschließen*) | Orders with one of these movements are not charged. | no |
| **Quantity – unit** (*Menge*) | A quantity or loading unit (e.g. carton, pallet), **Fixed value** (*Statischer Wert / Fixwert*) = a fixed number per hit, or **Dynamic picks (including units per box / carton)** (*Dynamische Picks*). | no |
| **Quantity – operator** | See the table below. | no |
| **Costs** (*Kosten*) | Price per calculated unit. | yes |
| **Conditions / Triggers (Optional)** (*Bedingungen / Auslöser*) | **Number of positions** (*Anzahl der Positionen*), **Number of shipping labels** (*Anzahl Versandlabel*), **Position Type** (*Positions-Typ*, article or carton), **Item SKU** (*Artikel-SKU*), **Is a pallet** (*Ist Palette*), **Shipping method** (*Versandart*) – each with operator and **Value** (*Wert*). | no |
| **Active** (*Aktiv*) | Only active templates are charged. | – |

### Quantity operators
| Operator | Effect |
|---|---|
| empty | The quantity is used 1:1. |
| `>= (mehr oder gleich)` | Quantity ÷ number, rounded down – e.g. full cartons. |
| `== (gleich)` | Quantity ÷ number, rounded up – e.g. started cartons. |
| `<= (weniger oder gleich)` | 1 if the quantity is less than or equal to the number, otherwise 0. |

**Dynamic picks:** per line, one pick is counted per full carton (units per box) plus one pick per single piece. With `== 1` only the first pick per line is charged, with `>= 2` every further pick, without an operator all picks.

## How the charge is calculated
Depending on your settings, the statement uses one of these sources:
- **Stock movements (history):** the client's movements with the selected reasons in the billing period, grouped per order, article, day and reason. With **Pallet**, each pallet outbound movement counts once.
- **Orders:** orders and their lines with a delivery date in the billing period.
- **Order lines (goods issue / packing):** the lines from packing; "total" = piece quantity, "count" = number of lines.
- **Picking list items:** picked lines with the status picked, packed or shipped.

The **Module** filter excludes orders from other sales channels.

![Screenshot: Client statement with an article cost item "Pick fee per line" and its detailed breakdown with order numbers](/billing/images/article-costs-statement.png)

## Good to know / Troubleshooting
| Message | Cause | Solution |
|---|---|---|
| The entry has been saved / updated / removed | The action was successful. | – |
| Quantities are counted twice or are missing | The combination of **Items to be calculated** and **Calculate from** does not fit, or the operator is wrong. | Check the settings and test with a short billing period in [Client billing](/billing/client-billing.md). |
| The template is gone | When an article is deleted, its article cost templates are deleted too. | Create the template again or use **All**. |

- Use **Duplicate** (*Duplizieren*) in the list to create similar templates quickly. The copy is inactive until you activate it.
