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

# Importer et exporter les prix

> Mettez à jour les prix d'un catalogue tarifaire en masse en exportant vos données existantes, en modifiant le CSV et en le réimportant.

Les prix dans Qwoty sont créés automatiquement — à chaque fois qu'un catalogue tarifaire est configuré, tous les produits concernés reçoivent une entrée de prix. Votre rôle est de renseigner les valeurs, et non de créer les entrées de zéro.

```mermaid theme={null}
flowchart LR
  A["Catalogue tarifaire créé"] -->|"Qwoty génère automatiquement"| B["1 entrée de prix par\nproduit × période de facturation\npricing_model = None"]
  B --> C["Exporter le CSV\n(id déjà existant\npour chaque ligne)"]
  C --> D["Modifier dans le tableur\nDéfinir pricing_model\net les montants"]
  D --> E["Réimporter"]
  E --> F["Prix actifs ✓"]
  F -->|"Mise à jour nécessaire"| C
```

Lorsque vous créez un catalogue tarifaire, Qwoty génère automatiquement une entrée de prix par produit et par période de facturation — toutes définies à `None`. Ces entrées possèdent déjà un `id`. Le flux export-puis-réimport est donc identique que vous configuriez des prix pour la première fois ou que vous mettiez à jour des prix existants.

Le flux de travail standard est le suivant : **exporter vos prix existants → modifier le CSV → le réimporter**. La colonne `id` est la seule clé utilisée par Qwoty pour faire correspondre les lignes ; tous les autres champs sont mis à jour directement.

<Note>
  Vous devez disposer du rôle **Admin** pour accéder à Import & Export. Les catalogues tarifaires doivent déjà exister avant de pouvoir configurer leurs prix.
</Note>

## Accès

Naviguez vers **Paramètres → Import & Export**, puis sélectionnez la section **Prix**.

La page comporte deux panneaux : **Import** (téléversement d'un CSV) et **Export** (téléchargement de vos données actuelles).

## Mettre à jour les prix

<Steps>
  <Step title="Exporter vos prix actuels">
    Dans le panneau **Export**, choisissez ce que vous souhaitez télécharger :

    * **Toutes les données** — tous les prix de l'ensemble des catalogues tarifaires
    * **Filtrer par catalogue tarifaire** — un catalogue tarifaire à la fois
    * **Filtrer par catalogue** — tous les prix des produits d'un catalogue donné

    Cliquez sur **Exporter le CSV**. Le fichier contient une ligne par prix, avec la colonne `id` pré-remplie pour chaque entrée existante.
  </Step>

  <Step title="Modifier le CSV">
    Ouvrez le fichier dans votre tableur et renseignez ou mettez à jour les colonnes de tarification. Les colonnes suivantes sont en lecture seule — elles identifient ce que chaque ligne représente et ne doivent pas être modifiées :

    * `id`, `product_api_name`, `pricebook_api_name`, `currency_code`, `type`, `period_unit`, `period`

    Les colonnes que vous configurez sont : `pricing_model`, `amount`, `percent`, `cost`, `floor_price`, `vat_code`, `engagement_type`, `period_duration_month`, `pay_as_you_go`, `identifiers[*]`, et les colonnes de paliers.

    Les lignes dont le `pricing_model` est vide (ou `None`) sont des prix fictifs en attente de configuration. Définissez le modèle et les colonnes de montant correspondantes pour ces lignes.

    <Warning>
      N'ajoutez pas de nouvelles lignes. Les prix sont créés automatiquement lors de la configuration des catalogues tarifaires — les lignes absentes de l'export ne correspondent à aucun prix existant et seront rejetées à l'import.
    </Warning>
  </Step>

  <Step title="Réimporter le fichier">
    Dans le panneau **Import**, cliquez sur **Téléverser un fichier** et déposez votre CSV modifié.

    L'assistant d'import se déroule en quatre étapes : **Téléversement → Correspondance → Confirmation → Résultat**. Vérifiez l'écran de correspondance avant de confirmer afin de vous assurer que les colonnes sont correctement associées.

    <Check>
      Une fois l'import terminé, vos prix sont actifs dans les catalogues tarifaires correspondants. Ouvrez un catalogue tarifaire pour vérifier les modifications.
    </Check>
  </Step>
</Steps>

## Les six modèles de tarification

Chaque ligne déclare son modèle dans la colonne `pricing_model`. Les colonnes requises dépendent du modèle.

| Modèle             | À utiliser pour                                                             |
| ------------------ | --------------------------------------------------------------------------- |
| `Flat`             | Un montant fixe — le cas le plus courant                                    |
| `Cost based`       | Prix de vente calculé comme un multiplicateur du coût défini du produit     |
| `Percent`          | Un pourcentage d'une valeur de référence, calculé au moment du devis        |
| `Graduated Tiered` | Chaque palier s'applique progressivement aux volumes compris dans ce palier |
| `Volume Tiered`    | La quantité totale est tarifée au palier correspondant au total             |
| `None`             | Fictif — le prix est renseigné manuellement au moment du devis              |

<Warning>
  Les valeurs de `pricing_model` sont sensibles à la casse. Utilisez exactement : `Flat`, `Cost based` (avec une espace), `Percent`, `Graduated Tiered`, `Volume Tiered`, `None`. Toute autre casse est rejetée.
</Warning>

## Référence des colonnes CSV

| Colonne                   | Requis         | Type        | Description                                                                                                                                                                      |
| ------------------------- | -------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                      | ✱              | UUID        | Identifiant du prix — la seule clé utilisée à l'import. Ne modifiez jamais cette valeur.                                                                                         |
| `product_api_name`        | —              | Texte       | Contexte en lecture seule. Le nom API du produit associé.                                                                                                                        |
| `pricebook_api_name`      | —              | Texte       | Contexte en lecture seule. Le nom API du catalogue tarifaire associé.                                                                                                            |
| `currency_code`           | —              | Texte       | Contexte en lecture seule. Code ISO 4217 (`EUR`, `USD`, `GBP`…).                                                                                                                 |
| `type`                    | —              | Énumération | Contexte en lecture seule. `one-time` ou `recurring`.                                                                                                                            |
| `period_unit`             | —              | Énumération | Contexte en lecture seule. Unité de période de facturation (`day`, `week`, `month`, `year`).                                                                                     |
| `period`                  | —              | Nombre      | Contexte en lecture seule. Nombre d'unités de période par cycle (`1` = mensuel, `3` = trimestriel).                                                                              |
| `pricing_model`           | ✱              | Énumération | `Flat`, `Cost based`, `Percent`, `Graduated Tiered`, `Volume Tiered`, `None`.                                                                                                    |
| `vat_code`                | —              | Texte       | Identifiant TVA au format `vat_<pays>_<taux>` (ex. `vat_fr_200` = France 20%). Laissez vide pour aucune TVA par défaut.                                                          |
| `floor_price`             | —              | Nombre      | Prix minimum autorisé (garde-fou lors de l'application de remises).                                                                                                              |
| `amount`                  | ✱ si `Flat`    | Nombre      | Le prix fixe par unité.                                                                                                                                                          |
| `percent`                 | ✱ si `Percent` | Nombre      | La valeur en pourcentage (`8.95` = 8,95%).                                                                                                                                       |
| `percent[multiplier]`     | —              | Nombre      | Multiplicateur optionnel sur le calcul du pourcentage.                                                                                                                           |
| `percent[perimeter]`      | —              | Texte       | Périmètre auquel le pourcentage s'applique (ex. `product`).                                                                                                                      |
| `percent[externals_id]`   | —              | UUID        | Identifiant de référence pour la cible du pourcentage.                                                                                                                           |
| `cost`                    | —              | Nombre      | Pour `Flat` : référence de coût interne utilisée pour le reporting des marges. Pour `Cost based` : le multiplicateur appliqué au coût du produit pour calculer le prix de vente. |
| `pay_as_you_go`           | —              | Booléen     | `true` pour la facturation à l'usage où le montant est calculé au moment de la consommation.                                                                                     |
| `engagement_type`         | —              | Énumération | `forever` (sans terme) ou `fixed` (période d'engagement).                                                                                                                        |
| `period_duration_month`   | —              | Nombre      | Durée d'engagement en mois. Requis lorsque `engagement_type` est `fixed`.                                                                                                        |
| `identifiers[erp]`        | —              | Texte       | Référence ERP externe pour ce prix.                                                                                                                                              |
| `identifiers[crm]`        | —              | Texte       | Référence CRM externe pour ce prix.                                                                                                                                              |
| `identifiers[accounting]` | —              | Texte       | Référence comptable externe pour ce prix.                                                                                                                                        |
| `tiers[starting_unit][N]` | ✱ si paliers   | Nombre      | Borne inférieure du palier N (incluse). N est basé sur 0 : `[0]`, `[1]`, `[2]`…                                                                                                  |
| `tiers[ending_unit][N]`   | —              | Nombre      | Borne supérieure du palier N (incluse). Laissez vide pour "sans limite supérieure".                                                                                              |
| `tiers[price][N]`         | ✱ si paliers   | Nombre      | Prix par unité pour le palier N.                                                                                                                                                 |
| `tiers[flat_fee][N]`      | —              | Nombre      | Frais fixes optionnels ajoutés en plus du palier N (uniquement pour `Graduated Tiered`).                                                                                         |

<Info>
  Les index de paliers sont basés sur 0 : le premier palier est `tiers[starting_unit][0]`, le deuxième est `tiers[starting_unit][1]`, et ainsi de suite.
</Info>

## Exemples par modèle de tarification

### Paiement unique fixe

Un montant fixe par unité, avec une référence de coût interne pour le reporting des marges :

```csv theme={null}
id,currency_code,type,pricing_model,vat_code,floor_price,amount,cost
a3b97966-...,EUR,one-time,Flat,vat_fr_200,13900,14900,8700
```

### Récurrent fixe (mensuel, sans terme)

Un abonnement mensuel fixe sans période d'engagement :

```csv theme={null}
id,currency_code,type,pricing_model,vat_code,amount,period_unit,period,engagement_type
bf56bdd5-...,EUR,recurring,Flat,vat_fr_200,0,month,1,forever
```

### Récurrent fixe (annuel, engagement fixe)

Un prix annuel avec un engagement de 12 mois :

```csv theme={null}
id,currency_code,type,pricing_model,vat_code,amount,period_unit,period,engagement_type,period_duration_month
d1b65444-...,EUR,recurring,Flat,vat_fr_200,1100,year,1,fixed,12
```

### Basé sur le coût

Le prix de vente est calculé comme le coût défini du produit × le multiplicateur dans `cost`. Un `floor_price` fixe le minimum :

```csv theme={null}
id,currency_code,type,pricing_model,vat_code,floor_price,cost
dcc190c5-...,EUR,one-time,Cost based,vat_fr_200,10,2
```

### Pourcentage

Un pourcentage du prix d'un produit de référence, calculé au moment du devis :

```csv theme={null}
id,currency_code,type,pricing_model,vat_code,percent,percent[perimeter],percent[externals_id],period_unit,period,engagement_type
5a68792e-...,EUR,recurring,Percent,vat_fr_200,8.95,product,b150e52a-...,month,1,forever
```

### Paliers progressifs

Les 10 premières unités à 49 €, tout ce qui est au-dessus à 39 € :

```csv theme={null}
id,currency_code,type,pricing_model,vat_code,period_unit,period,tiers[starting_unit][0],tiers[ending_unit][0],tiers[price][0],tiers[flat_fee][0],tiers[starting_unit][1],tiers[ending_unit][1],tiers[price][1],tiers[flat_fee][1]
ac06fe31-...,EUR,recurring,Graduated Tiered,vat_fr_200,month,1,1,10,49,0,11,,39,0
```

Pour 15 unités : `10 × 49 € + 5 × 39 € = 685 €`.

### Paliers par volume

La quantité totale est tarifée au palier correspondant au volume total :

```csv theme={null}
id,currency_code,type,pricing_model,vat_code,tiers[starting_unit][0],tiers[ending_unit][0],tiers[price][0],tiers[flat_fee][0],tiers[starting_unit][1],tiers[ending_unit][1],tiers[price][1],tiers[flat_fee][1]
...,EUR,one-time,Volume Tiered,vat_fr_200,1,100,6.00,0,101,,5.00,0
```

Pour 150 unités : `150 × 5,00 € = 750 €` (tout au palier correspondant à 150).

### None (fictif)

Le produit apparaît dans le catalogue tarifaire mais ne possède pas de prix configuré. Les commerciaux renseignent le montant manuellement sur chaque devis :

```csv theme={null}
id,currency_code,type,pricing_model,vat_code
5f7efcbd-...,EUR,one-time,None,vat_fr_200
```

## Résolution des problèmes

<AccordionGroup>
  <Accordion title="Import échoué : pricing_model inconnu">
    `pricing_model` est sensible à la casse. Utilisez exactement : `Flat`, `Cost based` (avec une espace), `Percent`, `Graduated Tiered`, `Volume Tiered`, `None`. Les variantes en minuscules ou avec des underscores (`cost_based`) sont rejetées.
  </Accordion>

  <Accordion title="Import échoué : id non reconnu">
    La colonne `id` doit contenir un UUID existant dans votre espace de travail. Seules les lignes issues d'un export de votre propre espace de travail sont valides. Ne copiez pas d'identifiants provenant d'un autre espace de travail et n'en créez pas manuellement.
  </Accordion>

  <Accordion title="Les paliers sont importés dans le mauvais ordre">
    Qwoty ordonne les paliers par valeur de `tiers[starting_unit][N]`, et non par position d'index. Assurez-vous que `tiers[starting_unit][0]` est la valeur la plus petite. Les plages qui se chevauchent déclenchent une erreur de validation.
  </Accordion>

  <Accordion title="vat_code est rejeté">
    Utilisez le format `vat_<pays>_<taux>`, entièrement en minuscules, avec le taux exprimé en nombre sans décimale : `vat_fr_200` pour 20 %, `vat_fr_055` pour 5,5 %, `vat_de_190` pour 19 %. Laissez la cellule vide lorsqu'aucune TVA ne s'applique.
  </Accordion>

  <Accordion title="Le prix à durée déterminée n'affiche aucune durée d'engagement">
    Lorsque `engagement_type` est `fixed`, vous devez également renseigner `period_duration_month` avec le nombre de mois (ex. `12` pour un engagement de 12 mois). Laisser ce champ vide avec `engagement_type = fixed` entraîne son ignorance.
  </Accordion>

  <Accordion title="Le prix en pourcentage produit des résultats inattendus">
    La colonne `percent` prend un nombre, et non une fraction : `8.95` signifie 8,95 %, et non 0,0895. Combinez avec `floor_price` pour définir un montant minimum.
  </Accordion>
</AccordionGroup>

## Ressources associées

<CardGroup cols={2}>
  <Card title="Référence des types de tarification" icon="book-open" href="/user-guide/catalog/reference/pricing-types">
    Présentation conceptuelle approfondie de chaque modèle de tarification et de son cas d'usage.
  </Card>

  <Card title="Créer un catalogue tarifaire" icon="tag" href="/user-guide/catalog/guides/create-pricebook">
    Configurez le catalogue tarifaire avant d'exporter ses prix pour les paramétrer.
  </Card>

  <Card title="Importer des produits" icon="box" href="/user-guide/data-migration/products">
    Les produits doivent exister avant que leurs prix puissent être configurés.
  </Card>

  <Card title="Préparer votre CSV" icon="file-spreadsheet" href="/user-guide/data-migration/prepare-your-csv">
    Règles de mise en forme universelles pour tous les imports Qwoty.
  </Card>
</CardGroup>
