# MANUEL D'UTILISATION

## Modules Commande Achat, Préréception/Réception et Transfert inter-site

**Application :** ERP GPHARMA
**Version du document :** 1.0
**Date :** 1er septembre 2026
**Destinataires :** Service Achats, Service Réception/Magasin, Service Stocks

---

## 1. Présentation générale

### 1.1 Objectif du manuel

Ce manuel décrit, étape par étape, l'utilisation de trois modules de l'ERP GPHARMA :

* le module **Commande Achat**, qui permet de préparer, valider et suivre les commandes passées aux fournisseurs ;
* le module **Préréception / Réception**, qui permet d'enregistrer les marchandises livrées par les fournisseurs, puis de les faire entrer en stock ;
* le module **Transfert inter-site**, qui permet de déplacer du stock d'un site vers un autre site de la société.

Il décrit le fonctionnement réel de l'application : les écrans, les champs, les boutons, les contrôles automatiques, les calculs et les statuts tels qu'ils sont effectivement mis en œuvre.

### 1.2 Public cible

Ce document s'adresse aux utilisateurs métier :

* acheteurs et gestionnaires d'approvisionnement ;
* agents de la réception et du magasin de la centrale ;
* gestionnaires de stock des sites ;
* responsables logistiques et responsables de site.

Aucune connaissance technique n'est requise.

### 1.3 Présentation générale des modules

| Module | Où le trouver | À quoi il sert |
| --- | --- | --- |
| Commande | Menu **Achats > Commande** | Construire une commande fournisseur (le « brouillon de commande »), puis la valider |
| Liste des commandes | Menu **Achats > Liste des commandes** | Rechercher, consulter, imprimer, exporter et supprimer des commandes ; lancer une préréception |
| Modification de commandes | Menu **Achats > Modification de commandes** | Enregistrer les annulations partielles ou informations de suivi communiquées par le fournisseur |
| Pré-réception en cours | Menu **Achats > Pré-réception en cours** | Saisir les bons de livraison (BL) fournisseurs non encore validés |
| Histo. des réceptions | Menu **Achats > Histo. des réceptions** | Consulter les BL déjà validés |
| Transferts inter-sites | Menu **Stocks > Transferts inter-sites** | Créer et traiter un transfert de stock entre deux sites |
| Listing transferts inter-sites | Menu **Stocks > Listing transferts inter-sites** | Rechercher, consulter, supprimer, annuler et comptabiliser les transferts |

### 1.4 Vue d'ensemble des workflows

**Chaîne achat complète :**

```
   Commande (brouillon, statut EN SAISIE)
        |  bouton « Valider la commande »
        v
   Commande validée (numérotée)  ------> Modification de commandes (annulations partielles)
        |  bouton « Créer une nouvelle pré-réception »
        |  ou « Mettre les lignes cochées en pré-réception »
        v
   Bon de livraison — EN PREPARATION
        |  bouton « Enregistrer Pré-Réception »
        v
   Bon de livraison — EN PRE-RECEPTION
        |  bouton « Valider Réception »
        v
   BL VALIDE   -> Entrée en stock à la CENTRALE (lot + N° de traçabilité)
               -> Facture fournisseur générée
               -> Bon de retour fournisseur généré si écarts
               -> Commandes concernées passées à l'étape « réceptionnée »
               -> Transfert inter-site automatique vers le site de stockage
```

**Chaîne transfert inter-site (transfert saisi manuellement) :**

```
   Création (EN SAISIE)
        |  bouton « Valider »
        v
   A COLLECTER
        |  « Collecter les lignes cochées »    -> sortie du stock du site de départ
        v
   EN COLLECTE
        |  « Valider le départ »
        v
   EXPEDIE
        |  « Contrôler les lignes cochées »    -> sur le site de destination
        |  « Ranger les lignes cochées »       -> entrée en stock du site de destination
        |  « Valider la réception »
        v
   RECEPTIONNEE  (+ correction de stock automatique en cas d'écart)
```

> **Important :** dans cette installation, la validation d'une réception fournisseur crée
> automatiquement un transfert inter-site de la Centrale vers le site de stockage paramétré.
> Ce transfert arrive directement au statut **EXPEDIE** (il est collecté et son départ est validé
> automatiquement). Le site destinataire n'a plus qu'à contrôler, ranger et valider la réception.
> Voir la section 4.12.

---

## 2. Prérequis et accès

### 2.1 Connexion à l'application

1. Ouvrez l'application ERP GPHARMA dans votre navigateur.
2. Saisissez votre identifiant et votre mot de passe, puis validez.
3. Vous arrivez sur la page d'accueil.

### 2.2 Le sélecteur de site

En haut de l'écran, une liste déroulante intitulée **Site** indique le site sur lequel vous travaillez.

| Élément | Description |
| --- | --- |
| Site | Site (agence) courant. Toutes les opérations sont exécutées pour ce site |
| Devise | Devise d'affichage des montants (lorsqu'elle est activée) |

* Le changement de site est immédiat ; il n'est pas nécessaire de se reconnecter.
* Cette liste n'est modifiable que si votre profil possède le droit **DG_AccesMultiSite**. Sinon elle est grisée.
* **Le site sélectionné conditionne de nombreuses opérations** : voir le paragraphe 2.4.

### 2.3 Profils et droits nécessaires

L'affichage des menus dépend des droits de votre profil.

| Menu / Action | Droit requis |
| --- | --- |
| Menu Achats | DM_AccesMenuAchat |
| Achats > Commande | DM_AccesCmdeFseur |
| Achats > Liste des commandes | DM_ListingCmdeFseur |
| Achats > Listing produits en cours de route | DM_ListingProdEnCr |
| Achats > Modification de commandes | DM_ModifCmdeFseur |
| Achats > Pré-réception en cours | DM_AccesPreRecepEnCr |
| Achats > Histo. des réceptions | DM_HistoReception |
| Achats > Listing bons de retour | DM_ListingBonRetourFseur |
| Bouton « Valider Réception » | DA_ReceptionValider |
| Bouton « Valider » du suivi de commande | DA_SuiviComdeValider |
| Menu Stocks | DS_AccesMenuStock |
| Stocks > Transferts inter-sites | DS_CreerTransfertInterSite |
| Stocks > Listing transferts inter-sites | DS_AccesListeTransfertInterSite |
| Modifier les quantités d'un transfert | DS_ModificationTransfertInterSite |
| Collecter les lignes d'un transfert | DS_CollecteTransfertInterSite |
| Changer le numéro de lot d'une ligne de transfert | DS_ModifLotTransfertInterSite |
| Supprimer un transfert inter-site | DS_SupprimerTransfertInterSite |
| Changer de site dans la barre supérieure | DG_AccesMultiSite |

### 2.4 Conditions nécessaires avant utilisation

* **Les écrans Commande, Liste des commandes, Pré-réception en cours, Histo. des réceptions et Listing bons de retour ne sont accessibles que depuis le site CENTRALE.** Depuis un autre site, l'application affiche le message *« Cette opération ne peut s'effectuer que sur l'agence centrale »* et vous ramène à l'écran précédent.
* Les fiches produits doivent exister et être renseignées (prix d'achat, colisage, TVA, fournisseur, famille, poids, volume…).
* Les fournisseurs, bureaux d'achat, modes d'expédition et familles de produits doivent être paramétrés.
* Chaque site doit disposer d'au moins une **zone de stockage**. Sans zone de stockage, la validation d'une réception est refusée avec le message *« La centrale d'achat n'a pas de zone pour recevoir les stocks »*.

### 2.5 La confirmation par mot de passe

Les opérations sensibles (valider une commande, valider une réception, valider/collecter un transfert, créer un transfert à partir de lignes…) déclenchent une fenêtre de confirmation.

| Élément | Description |
| --- | --- |
| Titre | Rappel de l'opération à confirmer |
| Message | « Cette action est irréversible ! » |
| Mot de passe | Votre mot de passe de connexion |
| Oui je confirme / Annuler | Exécute ou abandonne l'opération |

Le système vérifie deux choses :

1. **Votre mot de passe.** S'il est incorrect : *« Mot de passe incorrect ! »*.
2. **Votre habilitation** sur l'opération. Si le droit manque : *« Vous n'avez pas d'habilitation pour effectuer cette opération !! »*.

Dans tous les cas (succès comme échec), l'opération est tracée dans le **journal des événements** avec votre identité, la date et le poste utilisé.

---

## 3. Module Commande Achat

### 3.1 Présentation

Le module Commande Achat permet de constituer une commande fournisseur.

Le principe est le suivant :

1. Vous travaillez d'abord sur un **brouillon de commande** unique, à l'écran **Achats > Commande**. Ce brouillon peut contenir des produits de plusieurs fournisseurs, plusieurs bureaux d'achat et plusieurs modes d'expédition.
2. Vous alimentez ce brouillon produit par produit, par suggestion automatique ou par import d'un fichier.
3. Lorsque tout est saisi, vous cliquez sur **Valider la commande**. Le système découpe alors automatiquement le brouillon en autant de commandes définitives qu'il y a de combinaisons **bureau d'achat / mode d'expédition / fournisseur**, et attribue un numéro de commande à chacune.
4. Les commandes validées apparaissent ensuite dans **Achats > Liste des commandes**, où elles peuvent être imprimées, exportées et mises en préréception.

### 3.2 Accéder au module

1. Assurez-vous que le sélecteur **Site** en haut de l'écran est positionné sur la **Centrale**.
2. Dans le menu de gauche, cliquez sur **Achats**, puis sur **Commande**.

> Si vous êtes positionné sur un autre site, l'accès est refusé avec le message *« Cette opération ne peut s'effectuer que sur l'agence centrale »*.

**Capture d'écran — Écran Commande (brouillon)**

#### Description de l'écran « Commande »

L'écran est composé de quatre zones.

**Zone 1 — Barre d'actions (en haut à droite)**

| Bouton | Rôle |
| --- | --- |
| Nouvelle commande | Réinitialise l'écran pour repartir d'un brouillon vide (une confirmation est demandée : « Voulez-vous réinitialiser la page ? ») |
| Ajouter produit | Ouvre la fiche de saisie d'une ligne de commande |
| Suggérer une commande | Ouvre l'assistant de calcul automatique des quantités à commander |
| Autres actions | Menu déroulant : Paramètre achat, Imprimer la matrice de traitement, Envoyer vers MARITIME, Envoyer vers AERIEN, Envoyer vers Local, Intégrer fichier (CSV/Xlsx) |

**Zone 2 — Onglets d'information**

| Onglet | Contenu |
| --- | --- |
| Stats produit | Graphique des ventes mensuelles du produit sélectionné, et deux sous-onglets : **Stat A date** (VM, Vm-1, Vm-3, Vm-6, Vm-12, catégorie ABC, seuils mini/maxi figés à la date de la commande) et **Stat Actuelle** (les mêmes indicateurs recalculés à l'instant) |
| Filtres | Filtres d'affichage du tableau des lignes et paramètres d'en-tête de la commande |

**Zone 3 — Onglet « Filtres »**

| Champ | Description |
| --- | --- |
| Bureau achat | Filtre l'affichage des lignes sur un bureau d'achat |
| Familles | Filtre l'affichage sur une famille de produits |
| Mode d'expédition | Filtre l'affichage sur MARITIME, AERIEN ou LOCAL |
| Fournisseur | Filtre l'affichage sur un fournisseur |
| Filtrer | Applique les filtres au tableau |
| Type de commande | NORMALE, MISE EN PLACE, SPECIALE, RENFORCEMENT STOCK |
| Date cmde | Date du brouillon (alimentée automatiquement) |
| Numéro cmde | Numéro de la commande (vide tant que la commande n'est pas validée) |
| Ligne avec vente nulles | Coché : conserve aussi les lignes dont la vente moyenne est nulle |
| Uniquement produits saisonniers | Coché : ne traite que les produits marqués saisonniers |

**Zone 4 — Tableau des lignes de la commande**

| Colonne | Description |
| --- | --- |
| # (case à cocher) | Sélection de la ligne ; la case d'en-tête coche toutes les lignes |
| Code Interne | Code interne du produit |
| Désignation | Libellé du produit |
| Quantité cmdée | **Saisissable.** Quantité commandée |
| Taux remise | **Saisissable.** Taux de remise en % appliqué à la ligne |
| Colisage | Colisage du produit |
| Stock | Stock pays du produit |
| CR | Quantité en cours de route |
| VM | Vente mensuelle retenue |
| Stock + CR | Stock disponible + en cours de route (calculé) |
| (Stock + CR)/VM | Couverture en mois avant commande (calculé) |
| Forme | Forme galénique |
| P conso | Quantité de surplus saisonnier |
| CdeVM | Quantité commandée exprimée en mois de vente (calculé) |
| Stock + CR + Cde (SCRC) | Couverture totale après commande (calculé) |
| SCRC/VM | Couverture après commande, en mois (calculé) |
| PFHT | Prix d'achat fournisseur HT |
| PFHT Remise | Prix d'achat HT après remise (calculé) |
| PGHT | Prix de gros HT |
| P. cession HT | Prix de cession HT |
| Total HT | Montant HT de la ligne (calculé) |
| TVA | Taux de TVA appliqué |
| Total TTC | Montant TTC de la ligne (calculé) |
| Mini. fournisseur | Quantité minimum imposée par le fournisseur |
| Code produit | Code CIP du produit |
| TE | Code type d'expédition |
| Poids Tt (g) | Poids total de la ligne (calculé) |
| Volume Tt (cm3) | Volume total de la ligne (calculé) |
| VM Saison 1 / VM Saison 2 | Ventes moyennes des périodes saisonnières |
| Seuil reappro. | Seuil mini de réapprovisionnement |
| Vmm, Vm-1, Vm-3, Vm-6, Vm-12 | Historique des ventes moyennes |

Un bouton flottant **Valider la commande** est présent en permanence sur la droite de l'écran.

### 3.3 Consulter les commandes

L'écran **Achats > Liste des commandes** présente toutes les commandes de la période.

**Capture d'écran — Liste des commandes achat**

**Zone de filtres**

| Champ | Description |
| --- | --- |
| Période de filtre | Période de recherche sur la date de commande (obligatoire) |
| Bureau d'achat | Filtre sur un bureau d'achat |
| Etape | TOUS / NON RECEPTIONEE / RECEPTION PARTIEL / RECEPTIONNEE |
| Mode d'expédition | Filtre sur MARITIME / AERIEN / LOCAL |
| Fournisseur | Filtre sur un fournisseur |
| Familles | Filtre sur une famille de produits |
| Type | Filtre sur le type de commande |
| Produit | Filtre sur un produit précis contenu dans la commande |
| Numéro cmde | Recherche d'un numéro de commande exact |

**Bandeau de totaux :** Nbre Cde, Total HT, Total TVA, Total TTC pour l'ensemble des lignes affichées.

**Colonnes du tableau**

| Colonne | Description |
| --- | --- |
| Actions | Case à cocher, œil (détail), crayon (modifier), corbeille (supprimer), menu « ⋮ » |
| Date | Date et heure de la commande |
| N° Cmde | Numéro de commande, avec un bouton de copie rapide |
| Type de Cmde | NORMAL / MISE EN PLACE / SPECIAL / RENFORCEMENT STOCK |
| Bureau achat | Bureau d'achat de la commande |
| Etat | NON RECEPTIONEE / RECEPTION PARTIEL / RECEPTIONNEE |
| Mode Expédit° | Sigle du mode d'expédition (M, A, L) |
| Fournisseur | Fournisseur de la commande |
| Total HT / TVA / Total TTC | Montants de la commande |

**Actions disponibles sur une ligne**

| Icône / entrée | Action |
| --- | --- |
| Œil | Ouvre le **Détail commande fournisseur** (liste complète des produits de la commande) |
| Crayon | Rouvre la commande dans l'écran **Commande** pour la modifier |
| Corbeille | Supprime la commande (voir 3.9) |
| ⋮ > Générer la matrice | Produit le fichier « matrice » de la commande |
| ⋮ > Imprimer le bon d'achat | Édite le bon d'achat au format PDF |
| ⋮ > Exporter détail de la Cmde | Exporte le détail de la commande au format Excel |

**Actions groupées (en haut)**

| Bouton | Action |
| --- | --- |
| Exporter le(s) cmde(s) cochée(s) | Exporte les commandes sélectionnées |
| Autres actions > Envoyer vers AERIEN | Bascule les lignes cochées sur le mode d'expédition aérien |
| Autres actions > Intégrer CSV | Import d'un fichier |

**Actions groupées au bas du tableau**

| Bouton | Action |
| --- | --- |
| Créer une nouvelle pré-reception avec les lignes cochées | Crée un **nouveau** bon de livraison à partir des lignes cochées |
| Mettre les lignes cochées en pré-reception | Ajoute les lignes cochées au **dernier bon de livraison non validé** du même bureau d'achat et du même fournisseur |
| Exporter | Export Excel de la liste |

### 3.4 Créer une commande

Il n'existe pas de bouton « créer une commande » : **la commande est créée automatiquement au moment où vous ajoutez le premier produit**.

**Procédure**

1. Allez dans **Achats > Commande**.
2. Si un brouillon précédent est affiché, cliquez sur **Nouvelle commande** et confirmez pour repartir à zéro.
3. Dans l'onglet **Filtres**, choisissez le **Type de commande** :
   * **NORMALE** — réapprovisionnement courant ;
   * **MISE EN PLACE** — première mise en place d'un produit ;
   * **SPECIALE** — commande calculée sur un nombre de mois de vente donné ;
   * **RENFORCEMENT STOCK** — renforcement ponctuel.
4. Ajoutez les produits (section 3.5).

Au premier produit ajouté, le système crée la commande avec :

* la date et l'heure du jour ;
* le type de commande sélectionné ;
* votre identité comme créateur ;
* le statut **EN SAISIE** (commande non validée, sans numéro).

### 3.5 Ajouter les produits

Trois méthodes coexistent.

#### 3.5.1 Ajout manuel, produit par produit

1. Cliquez sur **Ajouter produit**. La fenêtre **Fiche commande** s'ouvre.
2. Dans le champ **Produit recherché (Codes/Désignation)**, saisissez les premiers caractères de la désignation ou une partie du code fournisseur. Une liste de suggestions apparaît ; sélectionnez le produit.

**Capture d'écran — Fiche commande (ajout d'un produit)**

| Champ | Saisissable | Description |
| --- | --- | --- |
| Produit recherché (Codes/Désignation) | Oui | Recherche du produit. La recherche porte sur la désignation (début du libellé) et sur le code fournisseur du produit |
| Colisage | Non | Colisage du produit, repris de la fiche produit |
| Stock | Non | Stock du produit sur le site |
| CR | Non | Quantité en cours de route |
| VM | Non | Vente mensuelle retenue |
| Stock+CR | Non | Somme stock + cours de route, tous sites confondus |
| Q. mini Fseur | Non | Quantité minimum imposée par le fournisseur |
| Vmm | Non | Vente moyenne mensuelle |
| **Qte cmdée** | **Oui** | **Quantité à commander — champ obligatoire** |
| **Remise %** | **Oui** | Taux de remise. Pré-rempli avec le taux de remise d'achat de la fiche produit |
| Qte cdée en VM | Non | Quantité commandée exprimée en mois de vente (calculé) |
| SCRC | Non | Stock + cours de route + commande (calculé) |
| SCRC en VM | Non | Couverture après commande, en mois (calculé) |
| Cat. ABC | Non | Catégorie de rotation du produit |

3. Saisissez la **Qte cmdée** puis, si nécessaire, la **Remise %**.
4. Cliquez sur le bouton vert **Ajouter** pour ajouter la ligne. Le bouton rouge **Réinitialiser** vide la fiche sans rien ajouter.

**Contrôles effectués**

* La quantité doit être strictement supérieure à 0. Sinon, l'application refuse l'ajout avec le message *« Impossible de commander une quantité inférieure ou égale à 0 ! »* et, côté serveur, *« Impossible de passer commande avec une quantité inférieure ou égale à 0 !! »*.
* Seuls les chiffres sont acceptés dans le champ quantité.

**Résultat**

La ligne est ajoutée au tableau, les montants de la ligne sont calculés et les totaux de la commande sont mis à jour.

#### 3.5.2 Suggestion automatique de commande

1. Cliquez sur **Suggérer une commande**.

> Cette fonction n'est disponible que depuis la Centrale. Depuis un autre site : *« Impossible d'effectuer cette opération sur l'agence commerciale ! »*. Elle n'est également possible que sur un brouillon vide.

2. Renseignez la fenêtre de suggestion :

| Champ | Description |
| --- | --- |
| Type de commande | NORMALE, MISE EN PLACE, SPECIALE, RENFORCEMENT STOCK |
| Nbre de Vm | Nombre de mois de vente à couvrir. Actif et obligatoire pour le type **SPECIALE** uniquement |
| Bureau d'achat | Limite la suggestion à un bureau d'achat |
| Mode d'expédition | Limite la suggestion à un mode d'expédition |
| Fournisseur | Limite la suggestion à un fournisseur |
| Familles | Limite la suggestion à une famille de produits |
| Laboratoires | Limite la suggestion à un laboratoire |
| Recherche produit saisonnier | Active la prise en compte des produits saisonniers |
| Nbre jours | Nombre de jours de la période saisonnière. Obligatoire si la recherche saisonnière est active |
| Coeff VM | Coefficient de vérification saisonnier. Obligatoire si la recherche saisonnière est active |
| Commentaire | Commentaire libre reporté sur la commande |
| Commande unique / Commande fractionnée par Fseur | Détermine si le résultat forme une seule commande ou une commande par fournisseur |

3. Cliquez sur **Valider**.

**Contrôles effectués**

* Si la recherche saisonnière est cochée : *« Veuillez saisir un nombre de jour supérieur à 0 ! »* et *« Veuillez saisir un coefficient supérieur à 0 ! »*.
* Pour le type SPECIALE : si le nombre de VM est nul, le traitement n'est pas lancé (*« Aucun nombre de vm saisi ! »*).

**Résultat**

Le calcul est lancé **en arrière-plan** : *« La suggestion de commande a été lancée en arrière-plan ! »*. Vous pouvez continuer à travailler ; les lignes suggérées apparaissent dans le tableau une fois le traitement terminé. Actualisez l'écran pour les voir.

> Pour les types **MISE EN PLACE** et **RENFORCEMENT STOCK**, la fenêtre ne lance pas de calcul : elle vous propose d'actualiser les VM, catégories de rotation et seuils pays, puis bascule simplement le type de commande.

#### 3.5.3 Import d'un fichier CSV / Xlsx

1. Cliquez sur **Autres actions > Intégrer fichier (CSV/Xlsx)**.
2. Sélectionnez le fichier.

Le format attendu est rappelé par une info-bulle sur le libellé du bouton :

`Code CIP ; Code Interne ; Désignation produit ; Qté Cmdée`

3. Le fichier est intégré et les lignes reconnues sont ajoutées au brouillon.

### 3.6 Saisir les quantités et les prix

Les quantités et les remises se modifient **directement dans le tableau** de l'écran Commande.

**Modifier une quantité**

1. Cliquez dans la cellule **Quantité cmdée** de la ligne concernée.
2. Saisissez la nouvelle quantité, puis quittez la cellule (touche Tabulation ou clic ailleurs).

Le système recalcule immédiatement :

* Stock + CR ;
* Stock + CR + Cde (SCRC) ;
* Cde/VM et SCRC/VM ;
* le montant de la remise, le Total HT, la TVA et le Total TTC ;
* le poids total et le volume total de la ligne ;
* les sous-totaux par bureau d'achat/fournisseur, par famille/mode d'expédition, et le total général de la commande.

**Prix**

Les prix (PFHT, PGHT, P. cession HT) **ne sont pas saisissables** sur la commande : ils sont repris automatiquement de la fiche produit au moment de l'ajout de la ligne.

**Taux de TVA**

Le taux de TVA est déterminé automatiquement à partir du type de TVA de la fiche produit. **Il est forcé à 0** lorsque le mode d'expédition est MARITIME ou AERIEN et que le fournisseur n'est pas paramétré pour appliquer la TVA.

### 3.7 Gérer les remises

**Saisir une remise**

1. Cliquez dans la cellule **Taux remise** de la ligne.
2. Saisissez le taux en pourcentage, puis quittez la cellule.

**Mode de calcul (identique à l'ajout et à la modification)**

```
Remise unitaire  = PFHT × Taux de remise / 100
PFHT Remise      = PFHT − Remise unitaire
Total remise     = Quantité commandée × Remise unitaire
Total HT net     = (Quantité × PFHT) − Total remise
TVA              = Total HT net × Taux de TVA / 100
Total TTC        = Total HT net + TVA
```

La remise est donc **déduite du montant HT avant le calcul de la TVA**.

**Valeur par défaut**

À l'ajout d'un produit, le taux de remise est pré-rempli avec le **taux de remise d'achat** figurant sur la fiche produit. Vous pouvez le modifier ligne par ligne.

**Contrôle**

> Le taux doit être compris entre 0 et 100. Sinon : *« Le taux de remise doit être compris entre 0 et 100 ! »* et la ligne reste inchangée.

### 3.8 Enregistrer

Il n'existe **pas de bouton « Enregistrer »** sur l'écran Commande. Chaque action est enregistrée immédiatement :

* l'ajout d'un produit crée la ligne en base ;
* la modification d'une quantité ou d'une remise est enregistrée dès que vous quittez la cellule ;
* la suppression d'une ligne est immédiate.

Vous pouvez donc quitter l'écran et y revenir plus tard : votre brouillon est conservé.

### 3.9 Modifier

**Modifier une commande en cours de saisie**

Tant que la commande n'est pas validée, toutes les modifications sont possibles depuis l'écran **Commande** : ajout de lignes, changement de quantité, changement de remise, suppression de lignes.

**Supprimer une ou plusieurs lignes**

1. Cochez les lignes à supprimer (ou cliquez sur l'icône de suppression de la ligne).
2. Confirmez le message *« Voulez-vous supprimer la ligne ? »*.

Les totaux de la commande sont recalculés.

**Rouvrir une commande validée**

1. Allez dans **Achats > Liste des commandes**.
2. Retrouvez la commande et cliquez sur l'icône **crayon**.
3. La commande se rouvre dans l'écran **Commande**.

**Supprimer une commande**

1. Dans **Achats > Liste des commandes**, cliquez sur l'icône **corbeille** de la commande.
2. Confirmez.

**Contrôles :**

* Une commande **dont au moins une ligne figure déjà dans un bon de livraison ne peut pas être supprimée** : elle est simplement ignorée.
* La suppression est une **suppression logique** : la commande est marquée supprimée, avec la date et l'auteur, et disparaît des listes.
* Le message final indique le résultat : *« L'opération a été effectuée. X supprimée(s) sur Y commande(s) !!! »*.

**Annuler partiellement une commande (Modification de commandes)**

Lorsque le fournisseur annonce qu'il ne livrera pas tout ou partie d'une ligne, utilisez **Achats > Modification de commandes**.

| Champ | Description |
| --- | --- |
| Période | Période de recherche des suivis |
| Bureau d'achat / Fournisseur | Filtres |
| Motif | Motif de suivi (rupture, arrêt de commercialisation…) |
| État | Validé / non validé |

Actions disponibles :

* **Ajouter un produit** : enregistre une quantité annulée sur une ligne de commande, avec un motif et une date d'information ;
* **Intégrer un fichier Excel** : import en masse. Le fichier attend les colonnes *Code article, Désignation, N° commande, Quantité annulée, Code statut, Date info*. Un fichier de compte-rendu est retourné, indiquant pour chaque ligne rejetée le motif : `QUANTITE < 0`, `PRODUIT NON TROUVE DANS LA COMMANDE`, `LA QUANTITE COMMANDE EST INFERIEUR A LA QUANTIE A ANNULER` ;
* **Valider** (droit DA_SuiviComdeValider) : rend l'annulation effective. La quantité en cours de route est diminuée et, si le motif porte un statut produit, le statut de la fiche produit est mis à jour. Message : *« X / Y Lignes validées !! »*. Une ligne déjà validée est signalée : *« COMMANDE DEJA VALIDEE »* ;
* **Supprimer** : supprime le suivi ;
* **Imprimer** : édite l'état de suivi au format PDF.

> **Effet sur la préréception :** une annulation validée diminue d'autant le « reste à livrer » utilisé lors de la création d'une préréception (voir 4.4).

### 3.10 Valider

La validation transforme le brouillon en une ou plusieurs commandes définitives numérotées.

**Procédure**

1. Vérifiez le contenu du brouillon : produits, quantités, remises.
2. Cliquez sur le bouton flottant **Valider la commande** (à droite de l'écran).
3. Saisissez votre mot de passe dans la fenêtre de confirmation, puis cliquez sur **Oui je confirme**.

**Contrôles effectués**

| Contrôle | Message |
| --- | --- |
| Un brouillon doit exister | « Il n'y a pas de commande à livrer ! » |
| Si vous saisissez vous-même un numéro de commande, il doit être unique | « Le numéro de commande existe déjà ! Veuillez renseigner un autre ! » |

**Traitements automatiques réalisés par la validation**

1. Les lignes dont la **quantité commandée est égale à 0 sont supprimées**.
2. Le brouillon est **découpé** en autant de commandes qu'il existe de combinaisons **bureau d'achat / mode d'expédition / fournisseur** parmi les lignes.
3. Chaque commande reçoit un **numéro** généré automatiquement selon le mode d'expédition :

| Mode d'expédition | Format du numéro | Exemple |
| --- | --- | --- |
| MARITIME | `AAAA-M-#####T` | 2026-M-00996N |
| AERIEN | `AAAA-A-#####T` | 2026-A-00997N |
| LOCAL | `AAAA-L-#####T` | 2026-L-00998N |
| Autre / non défini | `AAAA-#####T` | 2026-00999N |

`AAAA` = année en cours, `#####` = compteur sur 5 chiffres, `T` = première lettre du type de commande (N pour NORMALE, M pour MISE EN PLACE, S pour SPECIALE, R pour RENFORCEMENT STOCK).

4. Les totaux HT, TVA et TTC de chaque commande sont recalculés à partir de ses lignes.
5. La commande passe au statut **validée** et les quantités concernées sont comptabilisées en **cours de route**.

**Résultat**

Le message *« Commande validée ! »* s'affiche, puis l'écran Commande est réinitialisé au bout de quelques secondes. Les commandes créées sont visibles dans **Achats > Liste des commandes**.

**Restrictions**

* La validation n'est possible que depuis la Centrale.
* Elle exige le mot de passe de l'utilisateur.
* Une fois validée, une commande ne peut plus être supprimée si elle a déjà été mise en préréception.

### 3.11 Consulter les détails d'une commande

1. Dans **Achats > Liste des commandes**, cliquez sur l'icône **œil** de la commande.
2. La fenêtre **Détail commande fournisseur** s'ouvre.

**En-tête de la fenêtre :** N° cde, Nbre ligne, Total TTC.

**Colonnes :** Code produit, Code Interne, Code prod four., Désignation, Colisage, Stock, CR, VM, Stock + CR, Stock + CR en VM, Qté cdée, Forme, P conso, Cde en VM, Stock + CR + Cde (SCRC), SCRC en VM, PFHT, PGHT, Prix cession HT, Minimum fournisseur, Type expédition, Poids total (g), Volume total (cm3), VM Saison 1, VM Saison 2, Seuil de reappro., Vmm, Vm-1, Vm-3, Vm-6, Vm-12.

**Capture d'écran — Détail d'une commande fournisseur**

### 3.12 Imprimer et exporter

| Document | Où | Format | Contenu |
| --- | --- | --- | --- |
| Bon d'achat | Liste des commandes > ⋮ > Imprimer le bon d'achat | PDF | Bon de commande destiné au fournisseur |
| Matrice de la commande | Liste des commandes > ⋮ > Générer la matrice | Fichier | Matrice de traitement de la commande |
| Détail de la commande | Liste des commandes > ⋮ > Exporter détail de la Cmde | Excel | Détail ligne à ligne |
| Liste des commandes | Liste des commandes > Exporter | Excel | Liste des commandes affichées |
| Commandes sélectionnées | Liste des commandes > Exporter le(s) cmde(s) cochée(s) | Excel | Détail des commandes cochées |
| Matrice de traitement | Écran Commande > Autres actions > Imprimer la matrice de traitement | PDF | Matrice du brouillon en cours |

### 3.13 Statuts de la commande

Le statut affiché dans la colonne **Etat** de la liste des commandes est **calculé à partir des réceptions** : le système compare le nombre de lignes de la commande au nombre de lignes déjà rattachées à un bon de livraison.

| Statut | Signification | Condition |
| --- | --- | --- |
| NON RECEPTIONEE | Aucune ligne de la commande n'a encore été mise en préréception | 0 ligne rattachée à un BL |
| RECEPTION PARTIEL | Une partie seulement des lignes a été mise en préréception | 0 < lignes rattachées < total des lignes |
| RECEPTIONNEE | Toutes les lignes ont été mises en préréception | lignes rattachées = total des lignes |

En interne, la commande porte également une **étape** :

| Étape interne | Signification |
| --- | --- |
| 0 | Commande en saisie (brouillon non validé) |
| 1 | Commande validée |
| 2 | Commande dont au moins un bon de livraison a été validé |

> **Attention :** le statut affiché signifie que les lignes ont été **mises en préréception**, pas nécessairement qu'elles ont été **physiquement reçues et validées**. Une commande peut afficher RECEPTIONNEE alors que le bon de livraison correspondant est encore EN PREPARATION.

### 3.14 Cas particuliers et erreurs fréquentes du module Commande

| Situation | Explication | Que faire |
| --- | --- | --- |
| Le menu Achats n'apparaît pas | Droit DM_AccesMenuAchat absent | Demander l'habilitation à l'administrateur |
| « Cette opération ne peut s'effectuer que sur l'agence centrale » | Vous êtes positionné sur un autre site | Basculer le sélecteur **Site** sur la Centrale |
| « Impossible de commander une quantité inférieure ou égale à 0 ! » | Quantité vide ou nulle | Saisir une quantité strictement positive |
| « Impossible d'effectuer cette opération sur l'agence commerciale ! » (Suggérer une commande) | Suggestion lancée depuis un site autre que la Centrale | Basculer sur la Centrale |
| La suggestion ne renvoie rien immédiatement | Le calcul s'exécute en arrière-plan | Attendre puis actualiser l'écran |
| « Le numéro de commande existe déjà ! » | Le numéro saisi est déjà utilisé | Saisir un autre numéro ou laisser le système le générer |
| La commande cochée n'a pas été supprimée | Au moins une de ses lignes figure déjà dans un bon de livraison | Supprimer d'abord la ligne du bon de livraison, ou conserver la commande |
| Une seule commande a été saisie, plusieurs commandes apparaissent après validation | Le brouillon contenait plusieurs bureaux d'achat, modes d'expédition ou fournisseurs : le découpage est automatique | Comportement normal |
| Des lignes ont disparu à la validation | Leur quantité commandée était à 0 | Ressaisir les lignes avec une quantité positive avant de valider |
| « Le taux de remise doit être compris entre 0 et 100 ! » | Taux de remise hors bornes | Saisir un taux valide ; la ligne n'est pas modifiée |

---

## 4. Module Préréception / Réception

### 4.1 Présentation

Dans l'ERP GPHARMA, la préréception et la réception sont **deux étapes d'un même document** : le **bon de livraison (BL)**.

* La **préréception** consiste à créer le BL et à y saisir les produits, quantités, prix, remises, lots et dates de péremption. Rien n'entre en stock à ce stade ; tout reste modifiable.
* La **réception** est la validation définitive du BL. C'est elle qui déclenche l'entrée en stock, la génération de la facture fournisseur, la mise à jour des prix, la génération du bon de retour en cas d'écart et le transfert automatique vers le site de stockage.

Deux écrans donnent accès aux BL :

| Écran | Contenu |
| --- | --- |
| **Achats > Pré-réception en cours** | Les BL **non validés** — création, modification, suppression, validation |
| **Achats > Histo. des réceptions** | Les BL **validés** — consultation et impression uniquement |

### 4.2 Accéder au module

1. Positionnez le sélecteur **Site** sur la **Centrale**.
2. Menu **Achats > Pré-réception en cours** (ou **Histo. des réceptions** pour les BL validés).

### 4.3 Consulter les réceptions

**Capture d'écran — Liste des pré-réceptions en cours**

**Zone de filtres**

| Champ | Description |
| --- | --- |
| Période de filtre | Période de recherche sur la date du bon de livraison |
| Bureau d'achat | Filtre sur un bureau d'achat |
| Mode d'expédition | Filtre sur MARITIME / AERIEN / LOCAL |
| Fournisseur | Filtre sur un fournisseur |

**Bandeau de totaux :** Nbre BL, Total HT, Total TVA, Total TTC.

**Colonnes du tableau**

| Colonne | Description |
| --- | --- |
| Actions | Case à cocher, œil (détail), crayon (ouvrir la préréception), corbeille (supprimer) |
| Cree le | Date et heure de création du BL |
| Date BL | Date du bon de livraison |
| Etape | Statut du BL (voir 4.14) |
| N° Facture / BL | Numéro du bon de livraison / de la facture fournisseur |
| Bureau achat | Bureau d'achat |
| Fournisseur | Fournisseur |
| N° Vol/Conteneur | Numéro de vol ou de conteneur |
| Mode Expédit° | Mode d'expédition |
| Total HT / TVA / Total TTC | Montants du BL |

> Dans **Histo. des réceptions**, seule l'icône **œil** est proposée : les BL validés ne sont ni modifiables ni supprimables depuis cet écran.

**Boutons de l'écran**

| Bouton | Rôle |
| --- | --- |
| Nouvelle pré-réception | Ouvre un formulaire de préréception vierge (uniquement dans « Pré-réception en cours ») |
| Liste des factures | Affiche les factures fournisseurs rattachées |
| Autres actions > Exporter liste des BL | Export Excel de la liste affichée |

**Consulter le détail d'un BL**

Cliquez sur l'icône **œil**. La fenêtre **Liste produit en pré-reception** s'ouvre :

* en-tête : N° BL, Nbre ligne, Total TTC ;
* colonnes : Code produit, Code Interne, Désignation, N° Commande, N° Palette, Qté Facturée, Qté Livrée, PFHT, PGHT, NTSP, N° Lot, Date Péremption, % Remise, P. Cession, P. Public, P. Revient, PRMP, Total Remise, Total TVA, Volume Net, Poids Net, Rubrique Douane.

**Supprimer un BL**

1. Cochez le ou les BL à supprimer.
2. Cliquez sur l'icône corbeille et confirmez.

**Règles de suppression :**

* Un BL **non encore validé** (statut EN PREPARATION ou EN PRE-RECEPTION) peut être supprimé.
* Un BL **validé** ne peut être supprimé que par l'utilisateur administrateur.
* La suppression retire les lignes et le BL ; le stock éventuellement mouvementé est automatiquement réversé.
* Message de résultat : *« X/Y BL supprimé !!! »*. Si tous les BL cochés n'ont pas pu être supprimés, le message est présenté en avertissement.

### 4.4 Créer une préréception

Deux voies existent : à partir d'une commande (recommandée) ou de toutes pièces.

#### 4.4.1 À partir d'une commande (voie recommandée)

1. Allez dans **Achats > Liste des commandes**.
2. Recherchez la commande à réceptionner (filtre **Etape** = NON RECEPTIONEE ou RECEPTION PARTIEL, ou recherche par **Numéro cmde**).
3. Cliquez sur l'icône **œil** pour ouvrir le détail de la commande.
4. **Cochez les lignes** de produits à réceptionner.
5. En bas du tableau, choisissez :
   * **Créer une nouvelle pré-reception avec les lignes cochées** — crée un **nouveau** bon de livraison ;
   * **Mettre les lignes cochées en pré-reception** — ajoute les lignes au **dernier bon de livraison non validé** ayant le même bureau d'achat et le même fournisseur.

**Contrôles effectués**

| Contrôle | Message |
| --- | --- |
| Le mode d'expédition du BL en cours doit être identique à celui de la commande | « Le mode d'expédition de la pré-réception en cours est différent de celui de la commande sélectionnée ! » |
| Il doit rester quelque chose à livrer | « Opération terminée, aucune préréception créée !!! » |

**Ce que fait le système**

Pour chaque ligne cochée, il calcule le **reste à livrer** :

```
Reste à livrer = Quantité commandée
               − Somme des quantités déjà livrées sur des BL validés
               − Somme des quantités annulées par un suivi de commande validé
```

* Si le reste à livrer est **supérieur à 0**, une ligne de BL est créée avec :
  * la quantité commandée du BL, la **quantité facturée** et la **quantité livrée** initialisées au reste à livrer ;
  * les prix repris de la ligne de commande (PGHT, PFHT, prix de cession) et de la fiche produit (prix public, prix de revient, PRMP) ;
  * le **taux de remise** repris de la ligne de commande ;
  * le taux de TVA calculé à partir du type de TVA du produit ;
  * le numéro de commande.
* Si la ligne est **déjà présente** dans le BL cible, elle n'est pas ajoutée une seconde fois.
* Si le reste à livrer est nul ou négatif, la ligne est ignorée.
* Si, au final, aucune ligne n'a pu être créée, le BL vide est supprimé automatiquement.

**Résultat :** le message *« Opération terminée !!! »* s'affiche. Le nouveau BL apparaît dans **Achats > Pré-réception en cours** au statut **EN PREPARATION**.

#### 4.4.2 Créer une préréception vierge

1. Dans **Achats > Pré-réception en cours**, cliquez sur **Nouvelle pré-réception**.
2. Renseignez l'en-tête (voir 4.5), puis ajoutez les produits un par un.

### 4.5 Écran de préréception : l'en-tête

Que le BL vienne d'une commande ou soit créé de toutes pièces, il s'ouvre en cliquant sur l'icône **crayon**, dans un écran plein écran intitulé **Pré-Réception**.

**Capture d'écran — Écran de préréception / réception**

**Bandeau supérieur**

| Bouton | Rôle |
| --- | --- |
| Actualiser | Recharge les données de l'écran |
| Liste Facture | Affiche et modifie les factures fournisseurs rattachées au BL |
| Imprimer | Menu des impressions (voir 4.13) |
| Supprimer les lignes | Supprime les lignes cochées du BL |
| Intégrer fichier | Importe des lignes depuis un fichier |
| Prix Revient - Cession - Public | Recalcule les prix de revient, de cession et public de toutes les lignes |
| Info principale réception | Déplie/replie le bloc d'en-tête du BL |

**Bandeau de totaux :** Nbre Ligne, Total HT, Total Remise, Total TVA, Total TTC, Total TTC (Devise), Frais d'approche.

**Bloc « Info principale réception »**

| Champ | Obligatoire | Description |
| --- | --- | --- |
| Bureau d'achat | **Oui** | Bureau d'achat du BL. Détermine le coefficient de calcul du PFHT et le régime de TVA (TVA locale ou TVA douane) |
| Fournisseur | **Oui** | Fournisseur du BL |
| Mode expédition | Oui | MARITIME / AERIEN / LOCAL |
| N° Facture / N° BL | **Oui** | Numéro du bon de livraison ou de la facture fournisseur |
| Date | Oui | Date du bon de livraison |
| Date échéance | Non | Date d'échéance de règlement. Si elle est vide, la date du BL est reprise |
| Devise | **Oui** | Devise de la facture fournisseur |
| Taux | Non | Taux de conversion de la devise. Sert à calculer les montants en devise |
| Conteneur | Non | Type de conteneur |
| N° Conteneur / Vol | Non | Numéro de conteneur ou de vol |
| Poids Brut (Kg) | Non | Poids brut total déclaré |
| Vol. Brut (m3) | Non | Volume brut total déclaré |
| Coût transport | Non | Coût du transport, entrant dans le calcul du prix de revient |
| Transitaire | Non | Transitaire retenu |
| Forfait Transitaire | Non | Montant forfaitaire du transitaire |
| Mode Forfait | Non | Indique si le transit est calculé au forfait |
| Taux Assurance | Non | Taux d'assurance appliqué |
| FOB Coefficient | Non | Coefficient FOB |
| Autre Taxe 1 / Autre Taxe 2 | Non | Taxes complémentaires |
| Fin de traitement estimée | Non | Date prévisionnelle de fin de traitement |
| Vente sur reappro | Non | Autorise la prise de commandes clients sur cette réception avant son entrée en stock |

### 4.6 Renseigner les quantités reçues

Le tableau des lignes du BL est directement modifiable.

**Colonnes du tableau de préréception**

| Colonne | Saisissable | Description |
| --- | --- | --- |
| Case à cocher | — | Sélection de la ligne |
| Code produit / Code Interne | Non | Identification du produit |
| Désignation | Non | Libellé du produit. Un badge **AI** signale un produit sous AMM |
| N° Commande | Non | Numéro de la commande d'origine |
| Qté Cmdée | Non | Quantité commandée reprise de la commande |
| **Qté Facturée** | **Oui** | Quantité figurant sur la facture du fournisseur. **C'est elle qui sert de base aux montants** |
| **Qté Livrée** | **Oui** | Quantité physiquement reçue. **C'est elle qui entre en stock** |
| Ecart Facturée-Livrée | Non | Calculé : Qté Livrée − Qté Facturée |
| **PGHT** | **Oui** | Prix de gros HT unitaire de la ligne |
| **% Remise** | **Oui** | Taux de remise de la ligne |
| **N° Lot / Numéro Lot** | **Oui** | Numéro de lot du produit reçu. **Obligatoire pour valider** |
| **Date Péremption** | **Oui** | Date de péremption du lot. **Obligatoire pour valider** |
| Accord Labo péremption | Oui (case) | Coche indiquant un accord du laboratoire sur une péremption courte |
| NTSP | Non | Numéro de traçabilité du stock, attribué à la validation |
| Total Remise / Total HT / Total TVA / Total TTC | Non | Montants calculés de la ligne |
| P. Cession / P. Public / P. Revient / PRMP | Non | Prix issus de la fiche produit, actualisés par le bouton « Prix Revient - Cession - Public » |
| PGHT Fiche Produit / Evol. PGHT Fiche Produit | Non | Comparaison avec le prix de la fiche produit et son évolution en % |
| PGHT Dernière Réception / Evol. PGHT Dernière Réception | Non | Comparaison avec la dernière réception validée du produit |
| P. Cession Dernier / Evol. P. Cession | Non | Comparaison de prix de cession |
| P. Public Dernier / Evol. P. Public | Non | Comparaison de prix public |
| P. Revient Dernier / Evol. P. Revient | Non | Comparaison de prix de revient |
| PRMP Dernier / Evol. PRMP | Non | Comparaison de PRMP |
| N° Palette | Non | Numéro de palette |
| Volume Net / Poids Net | Non | Calculés à partir du volume et du poids unitaires du produit |
| Rubrique Douane / TVA Douane | Non | Informations douanières |
| UG | Oui (case) | Indique une unité gratuite |

**Procédure de saisie**

1. Pour chaque ligne, contrôlez la **Qté Facturée** par rapport à la facture fournisseur et corrigez si nécessaire.
2. Saisissez la **Qté Livrée** correspondant au comptage physique.
3. Saisissez le **N° de lot** et la **Date de péremption**.
4. Corrigez le **PGHT** si le prix facturé diffère du prix commandé.
5. Ajustez la **% Remise** si nécessaire.

Chaque modification est enregistrée immédiatement et recalcule les montants de la ligne et les totaux du BL.

**Effets d'une modification de la Qté Facturée**

* Recalcul du Total Remise, Total HT, Total TVA et Total TTC de la ligne ;
* recalcul du volume net et du poids net de la ligne ;
* recalcul de l'écart Facturée-Livrée ;
* mise à jour des totaux du BL et des frais d'approche.

**Effets d'une modification de la Qté Livrée**

* Recalcul du volume net (volume unitaire × quantité livrée / 1 000 000) et du poids net (poids unitaire × quantité livrée / 1 000) ;
* recalcul de l'écart Facturée-Livrée ;
* recalcul du taux d'emballage et de l'écart de poids de la palette.

**Effets d'une modification du PGHT**

* Recalcul des montants de la ligne ;
* recalcul de l'évolution du prix par rapport à la fiche produit et par rapport à la dernière réception ;
* recalcul du prix en devise ;
* recalcul des frais d'approche du BL.

**Ajouter un produit à la préréception**

Un bandeau de saisie permet d'ajouter une ligne :

| Champ | Obligatoire | Description |
| --- | --- | --- |
| N° Commande | Oui | Numéro de la commande d'origine |
| Produit | Oui | Produit à ajouter |
| Qtée Facturée | Oui | Quantité facturée |
| PGHT | Oui | Prix de gros HT |
| Numéro lot | Oui | Numéro de lot |
| Date péremption | Oui | Date de péremption |

Contrôles à l'ajout :

| Message | Cause |
| --- | --- |
| « Veuillez renseigner le numéro de commande SVP ! » | N° de commande vide |
| « Veuillez sélectionner un produit SVP ! » | Aucun produit choisi |
| « Veuillez renseigner la quantité facturée SVP ! » | Quantité vide ou nulle |
| « Veuillez renseigner le numéro de lot SVP ! » | N° de lot vide |
| « Veuillez renseigner la date de péremption du lot SVP ! » | Date de péremption vide |
| « Un lot identique au lot saisi existe déjà dans la réception en cours avec une date de péremption différente ! » | Le même numéro de lot existe déjà sur ce BL avec une autre date de péremption |

À l'ajout, la quantité livrée est initialisée à la quantité facturée et le taux de remise est repris de la ligne de commande (ou, à défaut, du taux de remise d'achat de la fiche produit).

**Remplacer le produit d'une ligne**

La fenêtre **Changer le produit** permet de substituer un produit à un autre sur une ligne existante, puis d'enregistrer.

**Supprimer des lignes**

Cochez les lignes, puis cliquez sur **Supprimer les lignes**. Les totaux du bon de livraison sont immédiatement recalculés.

> Les lignes d'un bon de livraison **déjà validé** ne peuvent pas être supprimées : l'application répond *« BL déjà validé !! »*.

### 4.7 Gérer les écarts

Un **écart** existe dès que la **Qté Livrée** diffère de la **Qté Facturée**.

* La colonne **Ecart Facturée-Livrée** l'affiche automatiquement.
* Un écart **doit obligatoirement être justifié par un motif de retour**, sans quoi la réception ne peut pas être validée.

**Renseigner un motif d'écart**

1. Sur la ligne concernée, ouvrez la fenêtre **Réclamation**.
2. Sélectionnez le motif dans la liste des motifs de retour fournisseur.
3. Cliquez sur **Enregistrer**. Message : *« Motif enregistré !! »*.

**Contrôle à la validation**

> *« Impossible de valider cette réception, car certaines lignes ont des écarts sans motif défini ! »*

**Effet de l'écart à la validation**

Un **bon de retour fournisseur** est généré automatiquement pour les quantités manquantes ou en excédent. Ce bon est consultable dans **Achats > Listing bons de retour**, où il peut être validé, imprimé, annulé, supprimé, et donner lieu à une **réclamation** et à une **facture fournisseur**.

Selon le paramétrage de la société, le bon de retour est créé :

* soit à l'état **non validé**, à valider manuellement ensuite ;
* soit validé automatiquement (paramètre « Valider le retour fournisseur du BL automatiquement »).

### 4.8 Gérer les lots, péremptions et informations spécifiques

**Numéro de lot**

* Saisissez le numéro directement dans la colonne **Numéro Lot**.
* Le numéro est automatiquement mis en **majuscules**.
* Message de confirmation : *« Numéro lot changé !! »*.
* **Un numéro de lot est obligatoire sur chaque ligne pour valider la réception.**

**Date de péremption**

* Saisissez la date dans la colonne **Date Péremption**.
* Message de confirmation : *« Date de péremption changée !! »*.
* **Une date de péremption est obligatoire sur chaque ligne pour valider la réception.**
* Un même numéro de lot ne peut pas coexister sur un BL avec deux dates de péremption différentes.

**Accord laboratoire sur la péremption**

Cochez la case **Accord Labo péremption** lorsque le laboratoire a donné son accord pour recevoir un lot à péremption courte. Message : *« Accord de péremption mis à jour !! »*. Cette information est reportée dans la traçabilité du lot.

**Numéro de traçabilité (NTSP)**

Le NTSP est attribué **à la validation de la réception**. Le système recherche d'abord une traçabilité existante correspondant au produit, au lot, à la date de péremption, au prix, au fournisseur, au mode d'expédition et à l'accord laboratoire. S'il n'en trouve pas, il en crée une nouvelle et lui attribue un numéro. Le NTSP permet ensuite de suivre le lot tout au long de sa vie en stock.

**Numéro de palette, poids et volume**

Ces informations servent au calcul du taux d'emballage et de l'écart de poids, utiles au contrôle du transport.

**Produits sous AMM**

Les produits marqués « produit AI » affichent un badge **AI** dans la désignation ; leur numéro d'AMM et la date de validité sont repris automatiquement de la fiche produit.

**Estimé / Réel**

La fenêtre **Estimes réels** permet de comparer, par **Rubrique** et par **Famille**, les montants **Estimé**, **Réel** et l'**Ecart** du dossier d'importation, puis d'enregistrer les valeurs réelles (bouton **Enregistrer**).

### 4.9 Gérer les remises

**Saisir une remise**

1. Cliquez dans la cellule **% Remise** de la ligne.
2. Saisissez le taux, puis quittez la cellule.
3. Message : *« Remise enregistrée !! »*.

**Contrôle**

> Le taux doit être compris entre 0 et 100. Sinon : *« Le taux de remise doit être compris entre 0 et 100 ! »*.

**Mode de calcul (identique à la commande)**

```
Remise unitaire  = PGHT × Taux de remise / 100
Total Remise     = Remise unitaire × Qté Facturée
Total HT         = (PGHT × Qté Facturée) − Total Remise
Total TVA        = Total HT × Taux de TVA / 100
Total TTC        = Total HT + Total TVA
```

La remise est donc **déduite du HT avant le calcul de la TVA**, exactement comme sur la commande achat.

**Totaux du bon de livraison**

Les totaux d'en-tête sont recalculés par **somme des lignes** :

```
Total HT du BL     = Somme des Total HT des lignes
Total TVA du BL    = Somme des Total TVA des lignes
Total TTC du BL    = Somme des Total TTC des lignes
Total Remise du BL = Somme des Total Remise des lignes
```

Les montants en devise sont obtenus en divisant chaque total par le **Taux** de la devise saisi dans l'en-tête (si le taux est nul, les montants en devise valent 0).

**Frais d'approche**

```
Frais d'approche = Somme sur les lignes de (Prix de revient HT − PGHT) × Qté Facturée
```

Ce calcul n'est pas effectué pour les bureaux d'achat de type « local » (type 3).

### 4.10 Enregistrer la préréception

1. Vérifiez l'en-tête et les lignes.
2. Cliquez sur **Enregistrer Pré-Réception**.
3. Confirmez le message *« Voulez-vous enregistrer la pré-réception en cours ? »*.

**Ce que fait le système**

* Il enregistre l'ensemble des informations d'en-tête du BL.
* Il recalcule et enregistre les totaux HT, TVA, TTC et remise, ainsi que les montants en devise.
* Il fait passer le BL de **EN PREPARATION** à **EN PRE-RECEPTION** (l'étape n'est jamais rétrogradée).
* Message de confirmation : *« Le BL a été enregistré »*.

**Restriction**

> Un BL déjà validé ne peut plus être enregistré : *« Impossible de mettre une commande déjà réceptionnée en pré-réception ! »*.

**Actualiser les prix**

Le bouton **Prix Revient - Cession - Public** enregistre l'en-tête puis recalcule, pour toutes les lignes, le prix de revient, le prix de cession et le prix public en tenant compte du coût du transport, du préacheminement, de l'assurance, du forfait transitaire, du coefficient FOB, du taux d'assurance et des autres taxes. Message : *« X produits traités !! »*.

### 4.11 Valider la réception

C'est **l'opération irréversible** qui fait entrer la marchandise en stock.

**Procédure**

1. Assurez-vous d'être positionné sur le site **Centrale**.
2. Vérifiez que toutes les lignes ont : quantité facturée, quantité livrée, prix, numéro de lot, date de péremption, et un motif si écart.
3. Cliquez sur **Valider Réception**.
4. Confirmez : *« Voulez-vous valider la réception ? »*, puis saisissez votre mot de passe.

**Contrôles effectués avant validation**

| Contrôle | Message |
| --- | --- |
| Site courant = Centrale | « Aucune validation ne peut être lancée sur un site autre que la centrale » |
| Bureau d'achat renseigné | « Veuillez renseigner le bureau d'achat ! » |
| Fournisseur renseigné | « Veuillez renseigner le fournisseur ! » |
| N° de bon de livraison renseigné | « Veuillez renseigner le numéro de bon de livraison SVP ! » |
| Devise sélectionnée | « Veuillez sélectionner une devise SVP ! » |
| Le BL doit contenir au moins une ligne | « Impossible de valider un BL sans ligne ! » |
| Toute ligne en écart doit porter un motif | « Impossible de valider cette réception, car certaines lignes ont des écarts sans motif défini ! » |
| Toutes les lignes doivent avoir un numéro de lot | « Impossible de valider cette réception, car certaines lignes n'ont pas de numéro de lot ! » |
| Toutes les lignes doivent avoir une date de péremption | « Impossible de valider cette réception, car certaines lignes n'ont pas de date de péremption ! » |
| La centrale doit disposer d'une zone de stockage | « La centrale d'achat n'a pas de zone pour recevoir les stocks » |
| Habilitation DA_ReceptionValider | « Vous n'avez pas d'habilitation pour effectuer cette opération !! » |

**Traitement en arrière-plan**

Le message *« Le traitement du bon de livraison a été lancé en arrière-plan. »* s'affiche et la fenêtre se ferme. **La validation s'exécute ensuite en tâche de fond** : le BL peut mettre quelques instants à passer au statut BL VALIDE. Une notification vous informe de la fin du traitement. En cas d'erreur, le message d'erreur est enregistré et affiché ; le traitement est intégralement annulé (aucune écriture partielle).

### 4.12 Impact sur le stock et traitements automatiques

Lorsque la validation aboutit, le système exécute, dans cet ordre :

1. **Marquage du BL** : le BL passe à **BL VALIDE**, la date de réception, la date et l'heure de validation, et l'auteur sont enregistrés.
2. **Génération de la facture fournisseur** rattachée au BL.
3. **Actualisation des prix** (prix de revient, prix de cession, prix public) selon le mode d'expédition et les frais du dossier.
4. **Génération de la traçabilité** : création ou rattachement du lot, avec numéro NTSP.
5. **Mise à jour des commandes** : toutes les commandes dont une ligne figure sur ce BL passent à l'étape « réceptionnée ».
6. **Entrée en stock à la Centrale** : pour chaque ligne, la quantité entre dans la **zone d'entrée de stock** du produit, sur le lot correspondant (produit + numéro de lot + date de péremption). Si le produit n'a pas de zone d'entrée définie, le système utilise la réserve principale de la Centrale, ou à défaut la première zone disponible. La quantité en **cours de route** est diminuée d'autant.
7. **Génération du bon de retour fournisseur** pour toutes les lignes présentant un écart.
8. **Traitement des commandes clients sur réapprovisionnement** : les commandes clients en attente de ce produit sont servies.
9. **Transfert automatique vers le site de stockage** : un **transfert inter-site** est créé de la Centrale vers le site de stockage paramétré, contenant les quantités **livrées**, ventilées par lot. Ce transfert est automatiquement **collecté** et son **départ est validé** : il arrive donc directement au statut **EXPEDIE** sur le site destinataire, qui doit ensuite le contrôler, le ranger et valider la réception (voir chapitre 5).
   * Son numéro suit le format `CODEDEPART-########-AR-CODEDESTINATION`.
   * Si le site de destination n'a aucune zone de stockage, la validation échoue : *« Le site d'expédition n'a pas de zone de stockage pour le transfert. »*.

**Synthèse de l'impact sur les stocks**

| Étape | Effet sur le stock |
| --- | --- |
| Création de la préréception | Aucun |
| Enregistrement de la préréception | Aucun |
| **Validation de la réception** | **+ Quantité livrée** en stock à la Centrale (zone d'entrée, sur le lot) ; **− Quantité** du cours de route |
| Transfert automatique (collecte + départ) | **− Quantité** du stock Centrale ; quantité mise **en cours de route** vers le site destinataire |
| Rangement sur le site destinataire | **+ Quantité** en stock sur le site destinataire ; sortie du cours de route |
| Suppression d'un BL / d'une ligne validée | Le mouvement de stock est automatiquement réversé |

### 4.13 Documents générés

**Documents créés automatiquement à la validation**

| Document | Où le consulter |
| --- | --- |
| Facture fournisseur | Écran de préréception > **Liste Facture** ; ou bouton **Liste des factures** de la liste des BL |
| Bon de retour fournisseur (si écarts) | **Achats > Listing bons de retour** |
| Traçabilité du lot (NTSP) | Colonne NTSP du détail du BL, et suivi des lots en stock |
| Transfert inter-site automatique | **Stocks > Listing transferts inter-sites** |

**Impressions disponibles (menu Imprimer de l'écran de préréception)**

| Document | Contenu |
| --- | --- |
| Bordereau de (Pré)-Réception | Bordereau de réception détaillé, format paysage |
| Bordereau de réception par zone | Bordereau ventilé par zone de stockage |
| Etat des ruptures réapprovisionnées | Produits en rupture réapprovisionnés par cette réception |
| Etat des ruptures réapprovisionnées (Modèle 2) | Variante de présentation du même état |
| Bordereaux des évolutions de prix | Comparaison des prix de la réception avec les prix précédents |
| Etats estimé dédouanement | État estimatif des frais de dédouanement |
| Imprimer les étiquettes produit | Étiquettes des produits reçus |

**Modification d'une facture fournisseur**

Depuis **Liste Facture**, il est possible de modifier : Famille, Montant préacheminement, Montant frais d'expédition, Montant assurance, Montant frais de transit, Total HT, Total TVA et Observation. Le **Total TTC est recalculé automatiquement** comme la somme de tous ces montants. Message : *« Facture modifiée avec succès !! »*.

### 4.14 Statuts du bon de livraison

| Statut affiché | Signification | Comment on y arrive |
| --- | --- | --- |
| EN PREPARATION | Le BL vient d'être créé ; ses lignes sont saisies mais l'en-tête n'a pas encore été enregistré | Création depuis une commande ou création manuelle |
| EN PRE-RECEPTION | L'en-tête du BL a été enregistré ; le BL est complet et prêt à être validé | Clic sur **Enregistrer Pré-Réception** |
| BL VALIDE | Le BL est validé, la marchandise est entrée en stock | Clic sur **Valider Réception** |
| COMPTABILISE | Le BL a été transmis à la comptabilité | Traitement comptable |
| EXPEDIEE / EN RECEPTION | Étapes intermédiaires utilisées uniquement dans la variante multi-dépôts de l'application | Boutons « Valider expédition » et « Démarrer réception », non affichés dans cette installation |
| NON DEFINIE | Étape non reconnue | Anomalie de données |

**Actions autorisées selon le statut**

| Statut | Modifier les lignes | Enregistrer | Valider | Supprimer |
| --- | --- | --- | --- | --- |
| EN PREPARATION | Oui | Oui | Oui | Oui |
| EN PRE-RECEPTION | Oui | Oui | Oui | Oui |
| BL VALIDE | Non | Non | Non | Administrateur uniquement |
| COMPTABILISE | Non | Non | Non | Non |

### 4.15 Cas particuliers et erreurs fréquentes du module Préréception / Réception

| Situation | Explication | Que faire |
| --- | --- | --- |
| « Le mode d'expédition de la pré-réception en cours est différent de celui de la commande sélectionnée ! » | Vous tentez d'ajouter des lignes à un BL dont le mode d'expédition ne correspond pas | Utiliser **Créer une nouvelle pré-réception** plutôt que **Mettre les lignes cochées en pré-réception** |
| « Opération terminée, aucune préréception créée !!! » | Toutes les lignes cochées ont déjà été livrées ou annulées : le reste à livrer est nul | Vérifier l'historique des réceptions et les annulations de la commande |
| Une ligne cochée n'apparaît pas dans le BL | Elle y figurait déjà, ou son reste à livrer est nul ou négatif | Contrôler le contenu du BL et les livraisons antérieures |
| « Un lot identique au lot saisi existe déjà dans la réception en cours avec une date de péremption différente ! » | Deux dates de péremption pour un même numéro de lot sur le même BL | Corriger la date de péremption ou le numéro de lot |
| « Le taux de remise doit être compris entre 0 et 100 ! » | Taux hors bornes | Saisir un taux valide |
| « Impossible de valider cette réception, car certaines lignes ont des écarts sans motif défini ! » | Une ou plusieurs lignes ont Qté Livrée ≠ Qté Facturée sans motif | Renseigner le motif de retour sur chaque ligne en écart |
| « Impossible de valider cette réception, car certaines lignes n'ont pas de numéro de lot ! » | Lot manquant | Compléter le numéro de lot |
| « Impossible de valider cette réception, car certaines lignes n'ont pas de date de péremption ! » | Date de péremption manquante | Compléter la date de péremption |
| « Impossible de valider un BL sans ligne ! » | Le BL ne contient aucune ligne | Ajouter au moins une ligne |
| « Aucune validation ne peut être lancée sur un site autre que la centrale » | Site courant incorrect | Basculer le sélecteur **Site** sur la Centrale |
| « La centrale d'achat n'a pas de zone pour recevoir les stocks » | Aucune zone de stockage définie pour la Centrale | Faire créer une zone de stockage par l'administrateur |
| « Le site d'expédition n'a pas de zone de stockage pour le transfert. » | Le site de stockage destinataire n'a pas de zone | Faire créer une zone sur le site destinataire |
| Le BL reste affiché « EN PRE-RECEPTION » après validation | La validation s'exécute en arrière-plan | Attendre la notification, puis actualiser la liste |
| « Impossible de mettre une commande déjà réceptionnée en pré-réception ! » | Le BL est déjà validé | Créer un nouveau BL pour la suite de la livraison |
| « X/Y BL supprimé !!! » avec avertissement | Certains BL cochés étaient déjà validés | Seul l'administrateur peut supprimer un BL validé |
| Le stock n'a pas bougé après la validation | La marchandise entre à la Centrale, puis est transférée automatiquement vers le site de stockage | Contrôler le stock de la Centrale, puis le transfert dans **Stocks > Listing transferts inter-sites** |

---

## 5. Module Transfert inter-site

### 5.1 Présentation

Le transfert inter-site permet de déplacer physiquement du stock d'un site vers un autre site de la société.

Le processus se déroule en cinq étapes, réparties entre **le site de départ** et **le site de destination** :

| Étape | Qui la réalise | Effet |
| --- | --- | --- |
| 1. Création | Site de départ | Constitution de la liste des produits à transférer |
| 2. Validation | Site de départ | Le transfert devient définitif et passe « à collecter » |
| 3. Collecte | Site de départ | **Sortie physique du stock** du site de départ ; la marchandise passe en cours de route |
| 4. Validation du départ | Site de départ | Le transfert est expédié ; les lignes non collectées sont supprimées |
| 5. Contrôle, rangement et validation de la réception | Site de destination | **Entrée en stock** du site de destination ; génération d'une correction de stock en cas d'écart |

Deux types de transferts existent :

* **CLASSIQUE** : transfert saisi manuellement, ou généré automatiquement (instances de rupture, remplacement de lots, réception fournisseur).
* **NIVELLEMENT** : transfert de rééquilibrage de stock entre sites, traité dans un écran dédié.

### 5.2 Accéder au module

* **Stocks > Transferts inter-sites** : écran de saisie et de traitement d'un transfert.
* **Stocks > Listing transferts inter-sites** : liste de tous les transferts, avec les actions de masse.

Contrairement aux modules Achats, ces écrans sont accessibles depuis **tous les sites**. En revanche, chaque opération n'est autorisée que depuis le site concerné (voir 5.14).

### 5.3 Consulter les transferts

**Capture d'écran — Listing des transferts inter-sites**

**Zone de filtres**

| Champ | Description |
| --- | --- |
| Site | Site de départ ou de destination du transfert |
| Période de filtre | Période de recherche sur la date de création |
| Mode de traitement | TOUS / AUTOMATIQUE / MANUEL / REMPLACEMENT LOT |
| Type | TOUS / CLASSIQUE / NIVELLEMENT |
| Statut | TOUS / EN SAISI / A COLLECTER / EN COLLECTE / EXPEDIE / RECEPTIONNE |

**Bandeau de totaux :** Nbre ligne, Valeur transfert, Valeur cession TTC.

**Colonnes du tableau**

| Colonne | Description |
| --- | --- |
| Actions | Case à cocher, œil (détail), crayon (ouvrir le transfert) |
| Date de création | Date et heure de création |
| N° Transfert | Numéro du transfert. Affiché **en rouge** pour un transfert saisi manuellement |
| Réference SAGE | Référence comptable |
| N° BL | Bon de livraison à l'origine du transfert (transferts issus d'une réception) |
| Départ | Site de départ |
| Destination | Site de destination |
| Zone de stockage | Zone concernée |
| Type | CLASSIQUE ou NIVELLEMENT |
| Statut | EN SAISIE / A COLLECTER / EN COLLECTE / EXPEDIE / RECEPTIONNEE |
| Validé | Case cochée si le transfert a été validé |
| Date Départ / Opérateur Départ / Commentaire Départ | Informations de validation du départ |
| Date de Réception / Opérateur Réception / Commentaire Réception | Informations de validation de la réception |
| Valeur PRMP | Valorisation au prix de revient moyen pondéré |
| Valeur Cession TTC | Valorisation au prix de cession TTC |
| Valeur d'approche | Frais d'approche |

Deux pastilles de couleur indiquent l'état de comptabilisation : **verte** = comptabilisé, **rose** = non comptabilisé (une pour le départ, une pour la réception).

**Consulter le détail d'un transfert**

Cliquez sur l'icône **œil**. La fenêtre **Détail transfert inter-site** affiche : Code CIP, Désignation, Qté Suggérée, Qté à Collecter, Qté Transférée, Zone de Prélèvement, Qté Réceptionnée, Zone de Réception, Numéro de Lot, Péremption.

**Actions de masse (boutons du haut)**

| Bouton | Rôle |
| --- | --- |
| Valider | Valide les transferts cochés |
| Supprimer | Supprime les transferts cochés |
| Annuler la réception | Annule la réception des transferts cochés |
| Autres actions > Rapport d'écart | Édite le rapport des écarts |
| Autres actions > Suggestion de transferts de remplacement de lots | Propose des transferts pour remplacer des lots à péremption proche |
| Autres actions > Générer les transferts en nivellement automatique | Génère automatiquement les transferts de rééquilibrage |
| Autres actions > Générer les transferts en instances de ruptures | Génère automatiquement les transferts couvrant les ruptures |
| Autres actions > Comptabiliser le départ des lignes sélectionnées | Marque le départ comme comptabilisé |
| Autres actions > Comptabiliser la réception des lignes sélectionnées | Marque la réception comme comptabilisée |

**Actions du bas du tableau :** Exporter, Imprimer, Imprimer étiquette.

### 5.4 Créer un transfert

**Capture d'écran — Création d'un transfert inter-site**

1. Positionnez le sélecteur **Site** sur le **site de départ** (celui qui expédie la marchandise).
2. Allez dans **Stocks > Transferts inter-sites**.
3. Cliquez sur **Nouveau** si un transfert précédent est affiché.

L'écran comporte trois blocs d'information et une zone de saisie des lignes.

**Bloc « Infos du transfert inter-site »**

| Champ | Saisissable | Description |
| --- | --- | --- |
| Site de départ | Non | Site courant. Non modifiable |
| Date du transfert | Non | Date et heure de création, alimentée automatiquement |
| Site de destination | **Oui** | Site qui recevra la marchandise |
| N° référence | Non | Numéro du transfert, généré à l'ajout du premier produit |

Une icône permet d'afficher les valeurs du transfert : Valeur PRMP, Valeur Cession TTC, Frais d'approche.

**Bloc « Validation départ »**

| Champ | Saisissable | Description |
| --- | --- | --- |
| Date et Heure départ | Non | Renseignée à la validation du départ |
| Opérateur | Non | Utilisateur ayant validé le départ |
| Commentaire | Oui | Commentaire libre sur le départ (verrouillé après validation) |
| Bouton vert | — | **Valider le départ** |

**Bloc « Validation réception »**

| Champ | Saisissable | Description |
| --- | --- | --- |
| Date et Heure réception | Non | Renseignée à la validation de la réception |
| Opérateur | Non | Utilisateur ayant validé la réception |
| Commentaire | Oui | Commentaire libre sur la réception (verrouillé après validation) |
| Bouton vert | — | **Valider la réception** |

**Bandeau d'actions**

| Bouton | Rôle |
| --- | --- |
| Nouveau | Repart d'un transfert vierge |
| Valider | Valide le transfert (nécessite DS_ModificationTransfertInterSite) |
| Actualiser | Recharge les données |
| Intéger transfert | Importe des lignes depuis un fichier |
| Supprimer | Supprime le transfert |
| Autres actions > Imprimer | Édite le bordereau de transfert |
| Autres actions > Rapport d'écart | Édite le rapport d'écart |
| Autres actions > Lancer les transferts automatiquement | Génère automatiquement des lignes selon la nature de produit choisie |
| Ajout de frais approche | Saisie des frais d'approche (Devise, Valeur devise, Montant, Coeff frais approche) |

### 5.5 Sélectionner le site source

Le **site source (site de départ) est imposé** : c'est le site sélectionné dans la barre supérieure. Le champ **Site de départ** est verrouillé.

> Pour créer un transfert au départ d'un autre site, changez d'abord de site via le sélecteur **Site** en haut de l'écran (droit DG_AccesMultiSite requis).

### 5.6 Sélectionner le site destination

1. Dans la liste **Site de destination**, choisissez le site qui recevra la marchandise.
2. Le site de destination doit être **différent** du site de départ, sinon : *« Le site de départ doit être différent du site de destination !! »*.

Le site de destination doit être choisi **avant** l'ajout du premier produit : il est figé dès la création du transfert.

### 5.7 Ajouter les produits

**Zone de saisie d'une ligne (site de départ)**

| Champ | Obligatoire | Description |
| --- | --- | --- |
| Zone de stockage | Oui | Zone du site de départ dans laquelle le produit sera prélevé |
| Produit | Oui | Produit à transférer |
| St. départ | Non | Stock disponible sur le site de départ (affiché automatiquement) |
| St. réception | Non | Stock du produit sur le site de destination (affiché automatiquement) |
| Cartonnage | Non | Cartonnage du produit (affiché automatiquement) |
| **Qté à transférer** | **Oui** | Quantité à transférer. Seuls les chiffres sont acceptés |

Cliquez sur le bouton bleu de validation à droite pour ajouter la ligne.

**Ce que fait le système**

1. Il contrôle que la quantité est strictement positive.
2. Il recherche, dans la zone de départ choisie, les **lots disponibles** du produit :
   * dont le stock est supérieur à 0 ;
   * dont la **date de péremption est postérieure à la date du jour** ;
   * non suspendus (sauf zone de quarantaine, où seuls les lots suspendus sont retenus).
3. Il trie ces lots par **date de péremption croissante**, puis par ancienneté de création (règle **premier périmé, premier sorti**).
4. Il répartit la quantité demandée sur ces lots, **une ligne de transfert par lot**. Si la zone est gérée par colisage, la répartition respecte le cartonnage du lot.
5. Il détermine automatiquement la **zone de réception** sur le site de destination : zone d'entrée de stock du produit, ou à défaut réserve principale, ou à défaut première zone disponible.
6. Il enregistre les prix (PRMP, prix de cession TTC, taux de TVA), les stocks de départ et de destination, et les ventes moyennes des deux sites.
7. Il calcule et met à jour les valeurs du transfert (Valeur PRMP, Valeur Cession TTC).

**Messages possibles**

| Message | Cause |
| --- | --- |
| « Veuillez renseigner une quantité valide !! » | Quantité vide, nulle ou négative |
| « La zone de stockage ne dispose pas du stock nécessaire ou la date de péremption des lots est antérieure à la date du jour pour effectuer le transfert ! » | Aucun lot valide disponible dans la zone |
| « Impossible d'ajouter la ligne car, la zone de destination n'est pas une zone quarantaine » | Départ depuis une zone de quarantaine vers une zone normale |
| « Aucun traitement ne peut être effectué !!! » | Le produit n'est pas référencé sur le site de départ |
| « Ajout du transfert avec succès !! » | La ou les lignes ont été créées |

**Autres méthodes d'alimentation**

| Méthode | Où | Description |
| --- | --- | --- |
| Import de fichier | Bouton **Intéger transfert** | Le fichier attend deux colonnes : **Code CIP** (ou Code interne) et **Qté à transférer** |
| Transfert automatique | **Autres actions > Lancer les transferts automatiquement** | Ouvre la fenêtre **Transfert inter-site → Nature produit** : choisissez la **Nature de produit** puis cliquez sur **Enregistrer**. Le système suggère les produits à transférer pour la zone de stockage sélectionnée |
| Génération en masse | Écran **Listing transferts inter-sites** | Générer les transferts en instances de ruptures, en nivellement automatique, ou de remplacement de lots |

**Colonnes du tableau des lignes (vue du site de départ)**

| Colonne | Saisissable | Description |
| --- | --- | --- |
| Case à cocher | — | Sélection de la ligne |
| Code CIP / Désignation | Non | Identification du produit |
| Colisage / Cartonnage | Non | Conditionnement du lot |
| Qté Suggérée | Non | Quantité proposée à l'origine |
| **Qté à Collecter** | Oui (avant collecte) | Quantité demandée au magasinier |
| **Qté collectée** | Oui (avant collecte) | Quantité réellement prélevée |
| C | Non | Témoin de collecte (coché lorsque la ligne est collectée) |
| Zone de prélèvement / Emplacement prélèvement | Non | Origine physique du produit |
| Stock / Stock en VM | Non | Stock du site de départ et sa couverture |
| **Numéro de Lot** | Oui (via l'icône) | Lot prélevé. Modifiable avec le droit DS_ModifLotTransfertInterSite |
| Péremption | Non | Date de péremption du lot |
| Zone de Réception / Emplacement Réception | Oui (liste) | Destination physique sur le site d'arrivée |
| Stock Destination / Stock Destination en VM | Non | Stock du site de destination et sa couverture |
| Valeur PRMP / Valeur Cession TTC / Frais approche | Non | Valorisation de la ligne |

**Menu « Autre action » du tableau (site de départ)**

| Entrée | Rôle |
| --- | --- |
| Créer un transfert avec les lignes cochées | Détache les lignes cochées dans un nouveau transfert |
| Collecter les lignes cochées | Déclenche la sortie de stock |
| Annuler la collecte les lignes cochées | Annule la collecte et réintègre le stock |
| Changer de zone des lignes cochées | Change la zone de prélèvement |
| Imprimer étiquette | Édite les étiquettes des lignes cochées |
| supprimer lignes cochées | Supprime les lignes cochées |

### 5.8 Contrôler les quantités

**Modifier la quantité à collecter**

Cliquez dans la colonne **Qté à Collecter**, saisissez la valeur, quittez la cellule.

* Contrôle : *« La quantité à collecter ne peut être supérieure au stock du lot ! »*.
* La quantité transférée et la quantité réceptionnée sont alignées sur la nouvelle valeur.
* Message : *« Quantité à collectée modifiée !! »*.
* La saisie n'est possible que **tant que le transfert n'est pas validé**, que la ligne n'est pas collectée et que vous disposez du droit **DS_ModificationTransfertInterSite**.

**Modifier la quantité collectée (quantité transférée)**

Cliquez dans la colonne **Qté collectée**.

* Contrôle : *« La quantité collectée ne doit pas être supérieure à la quantité à collecter ! »*.
* Contrôle : une ligne déjà rangée ne peut plus être modifiée : *« Ligne(s) déjà rangée(s) !! »*.
* La quantité réceptionnée est alignée sur la nouvelle valeur.
* Message : *« Quantité Collectée modifiée !! »*.
* Nécessite le droit **DS_CollecteTransfertInterSite**.

**Modifier la quantité réceptionnée**

Sur le site de destination, cliquez dans la colonne **Qté Réceptionnée**.

* Contrôle : une ligne déjà rangée ne peut plus être modifiée : *« Ligne(s) déjà rangée(s) !! »*.
* La modification vaut **contrôle de la ligne** : votre identité et l'horodatage sont enregistrés.
* Message : *« Quantité réceptionnée modifiée !! »*.

**Changer le numéro de lot**

1. Cliquez sur l'icône située devant le numéro de lot de la ligne.
2. La fenêtre **Changer numéro lot** s'ouvre : sélectionnez le **Numéro Lot** souhaité parmi les lots disponibles dans la zone.
3. Cliquez sur **Enregistrer**. Message : *« Numéro de lot changé avec succès !! »*.

Cette action nécessite le droit **DS_ModifLotTransfertInterSite** et n'est plus possible une fois le transfert expédié.

**Changer la zone de stockage**

1. Cochez les lignes concernées.
2. **Autre action > Changer de zone des lignes cochées**.
3. La fenêtre **Changer zone** s'ouvre : choisissez la **Zone de stockage**, puis **Enregistrer**.

* Contrôle : *« Veuillez choisir une zone de stockage ! »*.
* Côté départ : seules les lignes **non collectées** sont traitées. Le système sélectionne dans la nouvelle zone le lot dont la péremption est la plus proche et met à jour le stock de prélèvement.
* Côté réception : seules les lignes **non rangées** sont traitées. Message si aucune ligne n'est éligible : *« Toutes les lignes ont déjà été rangées. »*.
* Message de résultat : *« X / Y Zone de stockage changée avec succès !! »*.

**Supprimer des lignes**

Cochez les lignes puis **supprimer lignes cochées**.

* Une ligne ne peut être supprimée que si le **départ du transfert n'est pas validé** et que le transfert n'est pas encore validé, sinon : *« Les lignes de transfert sélectionnées ne peuvent être supprimées ! »*.
* Message de résultat : *« Ligne(s) supprimée(s) !! »*.

### 5.9 Enregistrer

Comme pour la commande achat, il n'existe pas de bouton « Enregistrer » : chaque ajout, modification ou suppression de ligne est enregistré immédiatement. Le transfert reste au statut **EN SAISIE** tant qu'il n'a pas été validé.

### 5.10 Valider le transfert

**Procédure**

1. Vérifiez que le transfert contient au moins une ligne.
2. Cliquez sur **Valider**.
3. Selon le paramétrage, une question sur le **fractionnement** est posée (voir ci-dessous).
4. Saisissez votre mot de passe et confirmez.

**Contrôles effectués**

| Contrôle | Message |
| --- | --- |
| Un transfert doit être ouvert | « Aucun transfert disponible !! » |
| Le transfert doit contenir au moins une ligne | « Veuillez renseigner au moins une ligne avant de valider le transfert !! » |
| Le site courant doit être le site de départ | « La validation du transfert ne peut être faite que dans l'agence émettrice du transfert ! » |
| Toutes les lignes doivent avoir un numéro de lot | « Impossible de valider ce transfert, car certaines lignes n'ont pas de numéro de lot !! » |
| Le départ ne doit pas déjà être validé | « Le départ de ce transfert est déjà validé !! » |
| La réception ne doit pas déjà être validée | « La réception de ce transfert est déjà validé !! » |

**Le fractionnement (optionnel)**

Avant la validation, l'application propose de **fractionner le transfert selon la couverture de stock du site destinataire** :

| Transfert issu du fractionnement | Critère |
| --- | --- |
| Transfert 1 | Stock/VM du site de destination **inférieur ou égal à 0,25** mois |
| Transfert 2 | Stock/VM du site de destination **entre 0,26 et 1** mois |
| Transfert 3 | Stock/VM du site de destination **supérieur à 1** mois |

Si vous acceptez, le transfert d'origine est éclaté en plusieurs transferts numérotés `N° d'origine+1`, `N° d'origine+2`, etc., chacun portant en commentaire son critère. Si vous refusez, le transfert reste entier.

**Résultat**

* Le transfert passe au statut **A COLLECTER**.
* Le témoin « Validé » est coché.
* Message : *« X / Y Transfert(s) validé(s) avec succès !! »*.
* L'écran revient sur un transfert vierge au bout de quelques secondes.

### 5.11 Collecter et effectuer la sortie de stock

La **collecte** matérialise le prélèvement physique de la marchandise dans le magasin de départ. **C'est elle qui sort le stock du site de départ.**

**Procédure**

1. Ouvrez le transfert depuis **Stocks > Listing transferts inter-sites** (icône crayon), en étant positionné sur le **site de départ**.
2. Ajustez si nécessaire la colonne **Qté collectée** pour refléter ce qui a réellement été prélevé.
3. Cochez les lignes collectées.
4. **Autre action > Collecter les lignes cochées**.
5. Saisissez votre mot de passe et confirmez.

**Contrôles effectués**

| Contrôle | Message |
| --- | --- |
| Au moins une ligne cochée | « Veuillez cocher une ou plusieurs lignes !! » |
| Site courant = site de départ | « La collecte des produits d'un transfert ne peut être faite que dans l'agence de départ du transfert !! » |
| Le transfert doit être validé | « Veuillez valider le transfert avant de poursuivre !! » |
| Le départ ne doit pas être validé | « Le transfert est déjà expédié !! » |
| La réception ne doit pas être validée | « Ce transfert a déjà été réceptionné ! » |

**Effets**

* La quantité transférée est **retirée du stock** de la zone de prélèvement du site de départ.
* Elle est mise **en cours de route** vers le site de destination.
* Le lot de réception sur le site de destination est déterminé ou créé.
* Le témoin **C** de la ligne est coché ; votre identité et l'horodatage sont enregistrés.
* Message : *« X / Y Lignes ont été collectée(s) avec succès !! »*.

**Annuler une collecte**

1. Cochez les lignes.
2. **Autre action > Annuler la collecte les lignes cochées**.

* Possible uniquement tant que le départ n'est pas validé et que la réception n'a pas eu lieu.
* Le stock du site de départ est automatiquement réintégré.
* Message : *« Annulation des Produits collectés avec succès !! »*.

**Valider le départ**

1. Renseignez si besoin le **Commentaire** du bloc « Validation départ ».
2. Cliquez sur le bouton vert **Valider le départ**.

**Contrôle :** toutes les lignes doivent avoir été collectées, sinon *« Impossible de valider ce transfert, car certaines lignes n'ont pas été collectées !! »*.

**Effets de la validation du départ**

* La date, l'heure et l'opérateur du départ sont enregistrés.
* **Les lignes non collectées ou à quantité nulle sont supprimées du transfert.**
* Si toutes les lignes sont supprimées, le transfert lui-même est supprimé : *« Toutes les lignes ont été supprimées »*.
* Les valeurs du transfert sont recalculées :
  * `Valeur transfert (départ) = Somme des (Qté transférée × PRMP)`
  * `Valeur réception = Somme des (Qté réceptionnée × PRMP)`
  * `Valeur cession TTC = Somme des (Qté transférée × Prix de cession TTC)`
* La date de dernier transfert inter-site est mise à jour sur les fiches stock du site de destination.
* Le transfert passe au statut **EXPEDIE**.
* Message : *« Départ validé avec succès !! »*.

### 5.12 Réceptionner sur le site de destination

Dès que vous ouvrez un transfert **EXPEDIE** en étant positionné sur le **site de destination**, l'écran bascule automatiquement en **mode réception** : la zone de saisie « Qté à transférer » est remplacée par une zone d'ajout de produits réceptionnés, et le tableau propose les actions de réception.

**Colonnes du tableau (vue du site de destination)**

Code CIP, Désignation, Qté Transférée, **Qté Réceptionnée** (saisissable), **R** (témoin de rangement), Numéro de Lot, Péremption, Zone de Réception, Emplacement, Valeur PRMP, Valeur Cession TTC.

**Menu « Autre action » du tableau (site de destination)**

| Entrée | Rôle |
| --- | --- |
| Contrôler les lignes cochées | Marque les lignes comme contrôlées et détermine le lot d'arrivée |
| Annuler contrôle des lignes cochées | Annule le contrôle |
| Changer de zone des lignes cochées | Change la zone de réception |
| Imprimer étiquette | Édite les étiquettes |
| Ranger les lignes cochées | **Fait entrer la marchandise en stock** |
| supprimer lignes cochées | Supprime les lignes cochées |

**Étape 1 — Contrôler**

1. Comparez la **Qté Réceptionnée** proposée avec le comptage physique et corrigez si nécessaire.
2. Cochez les lignes contrôlées.
3. **Autre action > Contrôler les lignes cochées**.

* Le système affecte ou crée le lot de réception dans la zone de réception (avec gestion des zones de quarantaine).
* Votre identité et l'horodatage du contrôle sont enregistrés.
* Message : *« Opération Terminée !! »*.

**Annuler un contrôle :** possible uniquement si la ligne **n'a pas encore été rangée**. Message si toutes les lignes sont rangées : *« Aucun contrôle annulé car les lignes ont été rangées. »*.

**Étape 2 — Ranger (entrée en stock)**

1. Cochez les lignes contrôlées.
2. **Autre action > Ranger les lignes cochées**.

**Contrôles effectués**

| Contrôle | Message |
| --- | --- |
| La ligne doit avoir été contrôlée | La ligne est ignorée ; le compteur final l'indique |
| La ligne doit avoir une zone de réception | « Le lot N° … de … n'a pas de zone de stockage de réception !! » |

**Effets du rangement**

* La quantité **entre en stock** sur le site de destination, dans la zone et l'emplacement de réception, sur le lot correspondant.
* La quantité correspondante **sort du cours de route**.
* Le témoin **R** de la ligne est coché.
* Les commandes clients en attente de réapprovisionnement de ce produit sur ce site sont servies automatiquement.
* Message : *« X / Y lignes ont été rangées !! »*.

**Étape 3 — Ajouter un produit reçu non prévu (facultatif)**

Si le colis contient un produit absent du transfert, utilisez la zone de saisie du mode réception :

| Champ | Obligatoire | Description |
| --- | --- | --- |
| Produit | Oui | Produit réellement reçu |
| Numéro lot | Oui | Lot reçu |
| Date péremption | Non | Affichée automatiquement d'après le lot |
| Qté à réceptionner | Oui | Quantité reçue |

La ligne est créée avec une **quantité transférée à 0** et la quantité réceptionnée saisie : l'écart sera traité par une correction de stock à la validation de la réception.

Messages possibles : *« Produit ajouté avec succès !! »*, *« La quantité ou le lot n'est pas disponible !! »*, *« Veuillez configurer la zone de stockage de réception !! »*, *« Le stockage du produit sélectionné n'a pas été trouvé !! »*.

**Étape 4 — Valider la réception**

1. Renseignez si besoin le **Commentaire** du bloc « Validation réception ».
2. Cliquez sur le bouton vert **Valider la réception**.
3. Confirmez.

**Effets**

* La date, l'heure et l'opérateur de la réception sont enregistrés sur le transfert et sur chaque ligne.
* Le transfert passe au statut **RECEPTIONNEE**.
* Les valeurs départ et réception du transfert sont recalculées.
* **Pour chaque ligne dont la quantité réceptionnée diffère de la quantité transférée, une correction de stock est générée automatiquement** et ses totaux sont calculés.
* Message : *« Opération terminée !! »*.

**Annuler une réception**

1. Allez dans **Stocks > Listing transferts inter-sites** en étant positionné sur le **site de destination**.
2. Cochez le ou les transferts.
3. Cliquez sur **Annuler la réception**.

* Seuls les transferts au statut **EXPEDIE** ou **RECEPTIONNEE** sont concernés.
* L'annulation n'est possible que depuis le **site de destination**. Sinon, la liste des transferts refusés est affichée avec la mention *« ces lignes de transfert ne peuvent être annulées que sur le site de réception »*.
* Les témoins de réception, de rangement et de contrôle des lignes sont remis à zéro et **le stock du site de destination est automatiquement réversé** (la marchandise repasse en cours de route).
* Le transfert repasse au statut **EXPEDIE** : la date, l'opérateur et la comptabilisation de réception sont effacés, et le transfert peut être contrôlé, rangé puis réceptionné à nouveau.
* Message : *« Les transferts ont été annulés avec succès !! »*.

### 5.13 Impact sur les stocks — synthèse

| Action | Site de départ | Site de destination |
| --- | --- | --- |
| Ajout d'une ligne | Aucun effet | Aucun effet |
| Validation du transfert | Aucun effet sur le stock physique | Aucun effet |
| **Collecte d'une ligne** | **− Qté transférée** dans la zone de prélèvement | **+ Qté** en cours de route |
| Annulation de la collecte | **+ Qté transférée** réintégrée | **− Qté** du cours de route |
| Validation du départ | Aucun mouvement supplémentaire | Aucun mouvement supplémentaire |
| Contrôle d'une ligne | Aucun effet | Aucun effet (affectation du lot) |
| **Rangement d'une ligne** | Aucun effet | **+ Qté** en stock ; **− Qté** du cours de route |
| Validation de la réception | Aucun effet | Correction de stock si écart |
| Annulation de la réception | Aucun effet | **− Qté** du stock ; retour en cours de route |
| Suppression d'un transfert non expédié | Réversion automatique des mouvements | Réversion automatique |

### 5.14 Statuts du transfert

| Statut | Signification | Qui agit | Actions autorisées |
| --- | --- | --- | --- |
| EN SAISIE | Transfert en cours de constitution | Site de départ | Ajouter, modifier, supprimer des lignes ; supprimer le transfert ; valider |
| A COLLECTER | Transfert validé, en attente de prélèvement magasin | Site de départ | Collecter, changer de zone, changer de lot, créer un transfert à partir de lignes, supprimer le transfert |
| EN COLLECTE | Collecte partiellement réalisée | Site de départ | Poursuivre ou annuler la collecte, valider le départ |
| EXPEDIE | Départ validé, marchandise en cours de route | Site de destination | Contrôler, ranger, changer de zone de réception, ajouter un produit reçu, valider la réception |
| RECEPTIONNEE | Réception validée, stock intégré | Site de destination | Consulter, imprimer, annuler la réception, comptabiliser |

**Règles d'accès selon le site**

| Opération | Site autorisé |
| --- | --- |
| Créer / modifier / supprimer des lignes | Site de départ |
| Valider le transfert | Site de départ |
| Collecter / annuler la collecte | Site de départ |
| Valider le départ | Site de départ |
| Contrôler / ranger / valider la réception | Site de destination |
| Annuler la réception | Site de destination |
| Supprimer le transfert | Site de départ, et uniquement si le départ n'est pas validé |

### 5.15 Documents et impressions

| Document | Où | Contenu |
| --- | --- | --- |
| Bordereau de transfert | Écran transfert > **Autres actions > Imprimer**, ou Listing > **Imprimer** | Liste des produits, lots, quantités et zones |
| Rapport d'écart | Écran transfert ou Listing > **Rapport d'écart** | Écarts entre quantités transférées et réceptionnées |
| Étiquettes | Menu « Autre action » du tableau, ou Listing > **Imprimer étiquette** | Étiquettes produits/lots |
| Export | Listing > **Exporter** | Export Excel de la liste des transferts |

### 5.16 Cas particuliers et erreurs fréquentes du module Transfert inter-site

| Situation | Explication | Que faire |
| --- | --- | --- |
| « Le site de départ doit être différent du site de destination !! » | Sites identiques | Choisir un autre site de destination |
| « La zone de stockage ne dispose pas du stock nécessaire ou la date de péremption des lots est antérieure à la date du jour… » | Pas de lot valide dans la zone choisie | Changer de zone, ou vérifier les péremptions et suspensions de lots |
| « Veuillez renseigner une quantité valide !! » | Quantité vide ou nulle | Saisir une quantité positive |
| « Impossible d'ajouter la ligne car, la zone de destination n'est pas une zone quarantaine » | Un produit prélevé en zone de quarantaine doit arriver en zone de quarantaine | Configurer une zone de quarantaine sur le site destinataire |
| « Impossible de valider ce transfert, car certaines lignes n'ont pas de numéro de lot !! » | Lot manquant | Renseigner le lot via l'icône de la colonne Numéro de Lot |
| « La validation du transfert ne peut être faite que dans l'agence émettrice du transfert ! » | Site courant ≠ site de départ | Basculer sur le site de départ |
| « Veuillez valider le transfert avant de poursuivre !! » | Collecte tentée sur un transfert non validé | Cliquer d'abord sur **Valider** |
| « La collecte des produits d'un transfert ne peut être faite que dans l'agence de départ… » | Site courant ≠ site de départ | Basculer sur le site de départ |
| « Le transfert est déjà expédié !! » | Le départ est déjà validé | Poursuivre côté réception |
| « Ce transfert a déjà été réceptionné ! » | La réception est déjà validée | Utiliser **Annuler la réception** si nécessaire |
| « Impossible de valider ce transfert, car certaines lignes n'ont pas été collectées !! » | Lignes non collectées | Collecter les lignes restantes, ou les supprimer |
| « Toutes les lignes ont été supprimées » après validation du départ | Aucune ligne n'était collectée ni de quantité positive | Recréer le transfert |
| « La quantité à collecter ne peut être supérieure au stock du lot ! » | Quantité supérieure au stock du lot sélectionné | Réduire la quantité ou changer de lot |
| « La quantité collectée ne doit pas être supérieure à la quantité à collecter ! » | Sur-collecte | Ajuster d'abord la quantité à collecter |
| « Ligne(s) déjà rangée(s) !! » | La ligne est déjà entrée en stock | Annuler le rangement via l'annulation de réception |
| « Le lot N° … de … n'a pas de zone de stockage de réception !! » | Zone de réception non définie | Utiliser **Changer de zone des lignes cochées** |
| « Les lignes de transfert sélectionnées ne peuvent être supprimées ! » | Le transfert est validé ou son départ est validé | Annuler la collecte ou repartir d'un nouveau transfert |
| « Toutes les lignes ont déjà été rangées. » | Changement de zone impossible | Annuler le rangement d'abord |
| « ces lignes de transfert ne peuvent être annulées que sur le site de réception » | Annulation demandée depuis le mauvais site | Basculer sur le site de destination |
| Le filtre **Statut** ne renvoie pas le bon résultat pour EN SAISI ou A COLLECTER | Voir la section « Anomalies / points à vérifier » | Utiliser le filtre TOUS et trier sur la colonne Statut |

---

## 6. Workflows fonctionnels

### 6.1 Workflow Commande Achat

```
[Écran Commande]
   Ajout du 1er produit
        v
   EN SAISIE  (brouillon, sans numéro)
        |
        |  ajout / modification / suppression de lignes
        |  suggestion automatique, import de fichier
        v
   Clic « Valider la commande » + mot de passe
        |
        |  - suppression des lignes à quantité 0
        |  - découpage par bureau d'achat / mode d'expédition / fournisseur
        |  - attribution des numéros de commande
        |  - calcul des totaux
        v
   COMMANDE VALIDEE  (visible dans « Liste des commandes »)
        |
        +--> Modification de commandes : annulation partielle validée
        |
        v
   Mise en préréception (lignes cochées)
        v
   [Module Préréception / Réception]
```

| Étape | Écran | Bouton | Statut résultant |
| --- | --- | --- | --- |
| 1 | Achats > Commande | Ajouter produit / Suggérer une commande / Intégrer fichier | EN SAISIE |
| 2 | Achats > Commande | Valider la commande | Commande validée, numérotée |
| 3 | Achats > Liste des commandes | Créer une nouvelle pré-réception / Mettre les lignes cochées en pré-réception | NON RECEPTIONEE → RECEPTION PARTIEL → RECEPTIONNEE |

### 6.2 Workflow Préréception / Réception

```
   Lignes de commande cochées
        v
   BL EN PREPARATION
        |  saisie : qté facturée, qté livrée, PGHT, remise, lot, péremption, motif d'écart
        v
   Clic « Enregistrer Pré-Réception »
        v
   BL EN PRE-RECEPTION
        |  Clic « Valider Réception » + mot de passe (droit DA_ReceptionValider)
        |  Traitement en arrière-plan
        v
   BL VALIDE
        |
        +--> Entrée en stock CENTRALE (lot + NTSP)
        +--> Facture fournisseur
        +--> Bon de retour fournisseur (si écarts)
        +--> Commandes marquées « réceptionnées »
        +--> Commandes clients sur réappro servies
        +--> TRANSFERT INTER-SITE AUTOMATIQUE vers le site de stockage (statut EXPEDIE)
        v
   COMPTABILISE (traitement comptable)
```

| Étape | Écran | Bouton | Statut résultant |
| --- | --- | --- | --- |
| 1 | Liste des commandes > détail | Créer une nouvelle pré-réception | EN PREPARATION |
| 2 | Pré-réception en cours | Enregistrer Pré-Réception | EN PRE-RECEPTION |
| 3 | Pré-réception en cours | Valider Réception | BL VALIDE |
| 4 | Traitement comptable | — | COMPTABILISE |

### 6.3 Workflow Transfert inter-site

```
   [Site de départ]
   Ajout du 1er produit
        v
   EN SAISIE
        |  Clic « Valider » (+ fractionnement optionnel) + mot de passe
        v
   A COLLECTER
        |  « Collecter les lignes cochées »   ->  SORTIE DU STOCK DEPART
        v
   EN COLLECTE
        |  « Valider le départ »              ->  suppression des lignes non collectées
        v
   EXPEDIE  ------------------------------------> [Site de destination]
                                                       |
                                                       |  « Contrôler les lignes cochées »
                                                       |  « Ranger les lignes cochées »  -> ENTREE EN STOCK
                                                       |  « Valider la réception »
                                                       v
                                                  RECEPTIONNEE
                                                       |  correction de stock si écart
                                                       v
                                                  Comptabilisation départ / réception
```

### 6.4 Chaîne complète : de la commande au stock du site de vente

```
Commande achat validée
        v
Préréception (BL)
        v
Réception validée  ->  Stock CENTRALE
        v
Transfert inter-site automatique (EXPEDIE)
        v
Contrôle + Rangement sur le site  ->  Stock SITE DE VENTE
        v
Validation de la réception du transfert
```

---

## 7. Règles de gestion

Les règles ci-dessous sont celles effectivement appliquées par l'application.

### 7.1 Règles communes

**RG-001 — Restriction à l'agence centrale**
*Description :* les écrans Commande, Liste des commandes, Pré-réception en cours, Histo. des réceptions et Listing bons de retour sont réservés à l'agence centrale.
*Condition :* le site sélectionné est différent de la Centrale.
*Comportement du système :* l'accès est refusé et l'utilisateur est ramené à l'écran précédent avec le message « Cette opération ne peut s'effectuer que sur l'agence centrale ».
*Impact utilisateur :* basculer sur la Centrale avant toute opération d'achat.

**RG-002 — Confirmation par mot de passe des opérations sensibles**
*Description :* la validation d'une commande, d'une réception, d'un transfert, la collecte et la création d'un transfert à partir de lignes exigent la saisie du mot de passe de l'utilisateur.
*Condition :* clic sur l'un de ces boutons.
*Comportement du système :* le mot de passe et l'habilitation sont vérifiés ; l'opération est tracée dans le journal des événements, qu'elle réussisse ou non.
*Impact utilisateur :* seul l'utilisateur habilité peut exécuter l'opération ; toute tentative est historisée.

**RG-002b — Totaux d'entête toujours égaux à la somme des lignes**
*Description :* les totaux HT, TVA, TTC et remise de l'entête d'une commande sont recalculés par somme de ses lignes après chaque ajout, modification, suppression ou import de ligne.
*Condition :* toute opération modifiant les lignes d'une commande.
*Comportement du système :* les totaux sont remplacés, jamais cumulés.
*Impact utilisateur :* les montants affichés dans la liste des commandes correspondent toujours au détail de la commande.

**RG-003 — Enregistrement immédiat**
*Description :* les ajouts, modifications et suppressions de lignes sont enregistrés sans action de sauvegarde explicite.
*Condition :* toute modification de ligne dans les écrans Commande, Préréception et Transfert.
*Comportement du système :* la ligne est écrite en base et les totaux sont recalculés.
*Impact utilisateur :* aucune perte de saisie en cas de fermeture de l'écran, mais aussi aucune possibilité d'abandonner une saisie en bloc.

### 7.2 Règles du module Commande Achat

**RG-010 — Quantité commandée strictement positive**
*Condition :* ajout d'une ligne de commande.
*Comportement :* refus si la quantité est inférieure ou égale à 0 (« Impossible de passer commande avec une quantité inférieure ou égale à 0 !! »).

**RG-011 — Calcul des montants d'une ligne de commande**
*Comportement :*
`Remise unitaire = PFHT × Taux remise / 100` ;
`PFHT Remise = PFHT − Remise unitaire` ;
`Total remise = Quantité × Remise unitaire` ;
`Total HT net = (Quantité × PFHT) − Total remise` ;
`TVA = Total HT net × Taux TVA / 100` ;
`Total TTC = Total HT net + TVA`.
*Impact :* la remise est déduite avant la TVA. Le montant enregistré dans la colonne « Total HT » de la ligne est le **HT net de remise**, à la création comme à la modification.

**RG-012 — TVA nulle sur les achats maritimes et aériens**
*Condition :* mode d'expédition MARITIME ou AERIEN et fournisseur non paramétré « Appliquer TVA ».
*Comportement :* le taux de TVA de la ligne est forcé à 0.

**RG-013 — Taux de remise par défaut**
*Condition :* ajout d'un produit à une commande.
*Comportement :* le taux de remise est initialisé avec le taux de remise d'achat de la fiche produit.

**RG-013b — Bornes du taux de remise de la commande**
*Condition :* ajout d'une ligne de commande ou modification du taux de remise d'une ligne.
*Comportement :* le taux doit être compris entre 0 et 100. Hors de cet intervalle, l'opération est refusée (« Le taux de remise doit être compris entre 0 et 100 ! ») et la ligne reste inchangée.

**RG-014 — Calcul du poids et du volume de la ligne**
*Comportement :* `Poids total = Poids unitaire (g) × Quantité` et `Volume total = Volume unitaire (cm3) × Quantité`.

**RG-015 — Découpage automatique à la validation**
*Condition :* clic sur « Valider la commande ».
*Comportement :* le brouillon est éclaté en autant de commandes qu'il existe de combinaisons bureau d'achat / mode d'expédition / fournisseur.
*Impact :* une seule saisie peut produire plusieurs commandes numérotées.

**RG-016 — Suppression des lignes à quantité nulle à la validation**
*Condition :* validation de la commande.
*Comportement :* toute ligne dont la quantité commandée est égale à 0 est supprimée définitivement.

**RG-017 — Numérotation automatique des commandes**
*Comportement :* `AAAA-M-#####T` (maritime), `AAAA-A-#####T` (aérien), `AAAA-L-#####T` (local), `AAAA-#####T` sinon ; `T` = initiale du type de commande. Le compteur est incrémenté et l'unicité est contrôlée.

**RG-018 — Unicité du numéro de commande saisi manuellement**
*Condition :* l'utilisateur saisit lui-même un numéro de commande.
*Comportement :* refus si le numéro existe déjà (« Le numéro de commande existe déjà ! Veuillez renseigner un autre ! »).

**RG-019 — Suppression logique d'une commande**
*Condition :* clic sur la corbeille d'une commande.
*Comportement :* la commande est marquée supprimée avec date et auteur ; elle n'est pas effacée de la base.

**RG-020 — Interdiction de supprimer une commande déjà mise en préréception**
*Condition :* au moins une ligne de la commande figure dans un bon de livraison.
*Comportement :* la commande est ignorée par la suppression ; le compteur final indique l'écart.

**RG-021 — Statut de réception d'une commande**
*Comportement :* NON RECEPTIONEE si aucune ligne n'est rattachée à un BL ; RECEPTION PARTIEL si une partie l'est ; RECEPTIONNEE si toutes le sont.

**RG-022 — Suggestion de commande réservée à la centrale et à un brouillon vide**
*Condition :* clic sur « Suggérer une commande ».
*Comportement :* refus si le site courant n'est pas la Centrale ; la suggestion ne s'applique qu'à un brouillon vide. Le calcul s'exécute en arrière-plan.

**RG-023 — Paramètres obligatoires de la suggestion saisonnière**
*Condition :* option « recherche produit saisonnier » activée.
*Comportement :* le nombre de jours et le coefficient VM doivent être supérieurs à 0.

**RG-024 — Annulation partielle de commande**
*Condition :* validation d'un suivi de commande.
*Comportement :* la quantité annulée est déduite du cours de route et, si le motif porte un statut produit, le statut de la fiche produit est mis à jour. La quantité annulée est ensuite déduite du reste à livrer lors de la préréception.

**RG-025 — Contrôle de la quantité annulée à l'import**
*Condition :* import Excel des suivis de commande.
*Comportement :* rejet des lignes avec quantité ≤ 0, produit introuvable dans la commande, ou quantité annulée supérieure à la quantité commandée ; un fichier de compte-rendu est retourné.

### 7.3 Règles du module Préréception / Réception

**RG-030 — Calcul du reste à livrer**
*Condition :* création ou alimentation d'une préréception à partir d'une commande.
*Comportement :* `Reste à livrer = Quantité commandée − Quantités déjà livrées sur BL validés − Quantités annulées par suivi validé`. Seules les lignes dont le reste est strictement positif sont créées.

**RG-031 — Pas de doublon de ligne dans un BL**
*Condition :* la ligne de commande figure déjà dans le BL cible.
*Comportement :* la ligne n'est pas ajoutée une seconde fois.

**RG-032 — Cohérence du mode d'expédition**
*Condition :* ajout de lignes à un BL existant.
*Comportement :* refus si le mode d'expédition du BL diffère de celui de la commande.

**RG-033 — Suppression d'un BL vide**
*Condition :* aucune ligne n'a pu être créée lors de la préréception.
*Comportement :* le BL créé est supprimé et le message « Opération terminée, aucune préréception créée !!! » est affiché.

**RG-034 — Initialisation des quantités du BL**
*Comportement :* à la création d'une ligne, quantité commandée, quantité facturée et quantité livrée sont toutes initialisées au reste à livrer.

**RG-035 — Unicité lot / date de péremption sur un BL**
*Condition :* ajout d'une ligne avec un numéro de lot déjà présent sur le BL mais une date de péremption différente.
*Comportement :* refus (« Un lot identique au lot saisi existe déjà dans la réception en cours avec une date de péremption différente ! »).

**RG-036 — Calcul des montants d'une ligne de BL**
*Comportement :*
`Remise unitaire = PGHT × Taux remise / 100` ;
`Total Remise = Remise unitaire × Qté Facturée` ;
`Total HT = (PGHT × Qté Facturée) − Total Remise` ;
`Total TVA = Total HT × Taux TVA / 100` ;
`Total TTC = Total HT + Total TVA`.
*Impact :* les montants sont assis sur la **quantité facturée**, pas sur la quantité livrée.

**RG-037 — Bornes du taux de remise du BL**
*Condition :* saisie d'un taux de remise sur une ligne de BL.
*Comportement :* refus si le taux est inférieur à 0 ou supérieur à 100.

**RG-038 — Totaux du bon de livraison**
*Comportement :* les totaux HT, TVA, TTC et remise de l'en-tête sont la somme des lignes ; les montants en devise sont obtenus en divisant par le taux de change saisi (0 si le taux est nul).

**RG-039 — Calcul des frais d'approche**
*Comportement :* `Frais d'approche = Somme des (Prix de revient HT − PGHT) × Qté Facturée`. Ce calcul n'est pas effectué pour les bureaux d'achat de type local.

**RG-040 — Régime de TVA selon le type de bureau d'achat**
*Comportement :* pour un bureau d'achat de type local, le taux de TVA est porté sur la TVA locale de la ligne ; sinon il est porté sur la TVA douane.

**RG-041 — Calcul du volume et du poids nets**
*Comportement :* `Volume net = Volume unitaire (cm3) × Qté Livrée / 1 000 000` (en m3) et `Poids net = Poids unitaire (g) × Qté Livrée / 1 000` (en kg).

**RG-042 — Détection automatique des produits en rupture**
*Condition :* ajout d'une ligne de BL.
*Comportement :* si le stock pays du produit est inférieur ou égal à 0, la ligne est marquée « produit en rupture », ce qui alimente l'état des ruptures réapprovisionnées.

**RG-043 — Étape du BL non rétrogradée**
*Condition :* enregistrement d'une préréception.
*Comportement :* l'étape passe à EN PRE-RECEPTION uniquement si elle était inférieure ; elle n'est jamais diminuée.

**RG-044 — Interdiction d'enregistrer un BL validé**
*Condition :* le BL est déjà validé.
*Comportement :* refus (« Impossible de mettre une commande déjà réceptionnée en pré-réception ! »).

**RG-045 — Motif obligatoire sur les écarts**
*Condition :* validation d'une réception dont une ligne présente Qté Livrée ≠ Qté Facturée sans motif de retour.
*Comportement :* la validation est refusée et l'ensemble du traitement est annulé.

**RG-046 — Numéro de lot obligatoire**
*Condition :* validation d'une réception.
*Comportement :* refus si une ligne n'a pas de numéro de lot.

**RG-047 — Date de péremption obligatoire**
*Condition :* validation d'une réception.
*Comportement :* refus si une ligne n'a pas de date de péremption.

**RG-048 — BL non vide**
*Condition :* validation d'une réception.
*Comportement :* refus si le BL ne contient aucune ligne.

**RG-049 — Zone de stockage obligatoire à la centrale**
*Condition :* validation d'une réception.
*Comportement :* refus si la centrale n'a aucune zone de stockage.

**RG-050 — Validation de réception réservée à la centrale**
*Condition :* le site courant n'est pas la centrale.
*Comportement :* la validation est bloquée.

**RG-051 — Entrée en stock à la validation**
*Comportement :* la quantité livrée entre en stock à la centrale, dans la zone d'entrée du produit (ou la réserve principale à défaut), sur le lot correspondant au couple produit / numéro de lot / date de péremption ; la quantité en cours de route est diminuée d'autant.

**RG-052 — Attribution du numéro de traçabilité (NTSP)**
*Comportement :* le système recherche une traçabilité existante correspondant au produit, au lot, à la péremption, au prix, au fournisseur, au mode d'expédition et à l'accord laboratoire ; à défaut il en crée une et lui attribue un numéro.

**RG-053 — Génération automatique de la facture fournisseur**
*Condition :* première validation du BL.
*Comportement :* une facture fournisseur rattachée au BL est créée.

**RG-054 — Génération automatique du bon de retour fournisseur**
*Condition :* première validation du BL, pour les lignes en écart.
*Comportement :* un bon de retour est créé. Il est validé automatiquement ou laissé à valider selon le paramétrage société.

**RG-055 — Mise à jour de l'étape des commandes**
*Condition :* première validation du BL.
*Comportement :* toutes les commandes concernées par le BL passent à l'étape « réceptionnée ».

**RG-056 — Transfert automatique vers le site de stockage**
*Condition :* validation d'un BL alors que le site de stockage des achats paramétré est différent de la centrale.
*Comportement :* un transfert inter-site est créé de la centrale vers ce site, avec les **quantités livrées** ventilées par lot ; il est automatiquement collecté et son départ est validé (statut EXPEDIE).
*Impact :* le site destinataire doit contrôler, ranger et valider la réception pour que le stock lui soit affecté.

**RG-057 — Suppression d'un BL selon son étape**
*Comportement :* un BL non validé est supprimable ; un BL validé ne l'est que par l'utilisateur administrateur. Les mouvements de stock sont automatiquement réversés.

**RG-058 — Traitement de la validation en arrière-plan**
*Comportement :* la validation d'une réception est exécutée en tâche de fond ; en cas d'erreur, l'ensemble du traitement est annulé et le message est enregistré.

**RG-059 — Calcul du total TTC d'une facture fournisseur**
*Comportement :* `Total TTC = Préacheminement + Frais d'expédition + Assurance + Frais de transit + Total HT + Total TVA`.

### 7.4 Règles du module Transfert inter-site

**RG-070 — Site de départ imposé**
*Comportement :* le site de départ d'un transfert est toujours le site sélectionné dans la barre supérieure ; il n'est pas modifiable.

**RG-071 — Sites de départ et de destination différents**
*Condition :* création d'un transfert.
*Comportement :* refus si les deux sites sont identiques.

**RG-072 — Quantité à transférer strictement positive**
*Comportement :* refus si la quantité est inférieure ou égale à 0.

**RG-073 — Disponibilité du stock dans la zone de prélèvement**
*Condition :* ajout d'un produit à un transfert.
*Comportement :* le système ne retient que les lots de la zone choisie dont le stock est supérieur à 0 et dont la date de péremption est postérieure à la date du jour. Si aucun lot n'est disponible, la ligne est refusée.

**RG-074 — Règle « premier périmé, premier sorti »**
*Comportement :* les lots sont consommés par date de péremption croissante, puis par ancienneté de création.

**RG-075 — Répartition par lot**
*Comportement :* la quantité demandée est répartie sur plusieurs lignes de transfert, une par lot prélevé. Si la zone est gérée par colisage, la répartition respecte le cartonnage du lot.

**RG-076 — Cohérence des zones de quarantaine**
*Condition :* prélèvement dans une zone de quarantaine.
*Comportement :* la zone de destination doit également être une zone de quarantaine, sinon la ligne est refusée. Dans une zone de quarantaine, seuls les lots suspendus sont retenus.

**RG-077 — Détermination automatique de la zone de réception**
*Comportement :* zone d'entrée de stock du produit sur le site de destination, à défaut réserve principale, à défaut première zone disponible.

**RG-078 — Valorisation du transfert**
*Comportement :* `Valeur transfert = Somme (Qté transférée × PRMP)` ; `Valeur cession TTC = Somme (Qté transférée × Prix de cession TTC)` ; `Valeur réception = Somme (Qté réceptionnée × PRMP)`.

**RG-079 — Numéro de lot obligatoire pour valider un transfert**
*Condition :* clic sur « Valider ».
*Comportement :* refus si une ligne n'a pas de numéro de lot.

**RG-080 — Validation réservée au site émetteur**
*Comportement :* la validation du transfert n'est possible que depuis le site de départ.

**RG-081 — Fractionnement optionnel selon la couverture de stock**
*Condition :* acceptation du fractionnement à la validation.
*Comportement :* le transfert est éclaté en trois transferts selon la couverture Stock/VM du site de destination : ≤ 0,25 mois, de 0,26 à 1 mois, > 1 mois.

**RG-082 — Collecte impossible avant validation**
*Comportement :* la collecte exige que le transfert soit validé, que le départ ne soit pas validé et que la réception ne soit pas validée.

**RG-083 — Collecte réservée au site de départ**
*Comportement :* la collecte et son annulation ne sont possibles que depuis le site de départ.

**RG-084 — Sortie de stock à la collecte**
*Comportement :* la collecte d'une ligne retire la quantité transférée du stock de la zone de prélèvement et la place en cours de route vers le site de destination. L'annulation de la collecte réintègre le stock.

**RG-085 — Quantité à collecter limitée au stock du lot**
*Comportement :* refus si la quantité à collecter dépasse le stock du lot sélectionné.

**RG-086 — Quantité collectée limitée à la quantité à collecter**
*Comportement :* refus si la quantité collectée dépasse la quantité à collecter.

**RG-087 — Collecte complète exigée pour valider le départ**
*Comportement :* refus si une ligne n'a pas été collectée.

**RG-088 — Purge des lignes non servies à la validation du départ**
*Comportement :* les lignes non collectées ou à quantité nulle sont supprimées. Si toutes les lignes disparaissent, le transfert est supprimé.

**RG-089 — Modification impossible après rangement**
*Comportement :* les quantités d'une ligne rangée ne sont plus modifiables.

**RG-090 — Zone de réception obligatoire pour ranger**
*Comportement :* le rangement est refusé si la ligne n'a pas de zone de stockage de réception.

**RG-091 — Contrôle préalable au rangement**
*Comportement :* seule une ligne contrôlée peut être rangée.

**RG-092 — Entrée en stock au rangement**
*Comportement :* le rangement fait entrer la quantité en stock sur le site de destination et la retire du cours de route.

**RG-093 — Service automatique des commandes clients sur réapprovisionnement**
*Condition :* rangement d'une ligne hors zone de quarantaine.
*Comportement :* les commandes clients en attente de ce produit sur ce site sont servies.

**RG-094 — Correction de stock automatique en cas d'écart de réception**
*Condition :* validation de la réception avec Qté Réceptionnée ≠ Qté Transférée.
*Comportement :* une correction de stock est générée et valorisée automatiquement.

**RG-095 — Annulation de réception réservée au site destinataire**
*Condition :* transfert au statut EXPEDIE ou RECEPTIONNEE.
*Comportement :* l'annulation n'est possible que depuis le site de destination ; les témoins de réception, contrôle et rangement des lignes sont remis à zéro et le stock est réversé.

**RG-096 — Suppression d'un transfert**
*Comportement :* un transfert n'est supprimable que depuis son site de départ et uniquement si son départ n'a pas été validé. Les mouvements de stock sont réversés automatiquement.

**RG-097 — Création d'un transfert à partir de lignes existantes**
*Condition :* clic sur « Créer un transfert avec les lignes cochées ».
*Comportement :* refus si le départ ou la réception est déjà validé. Sinon, un nouveau transfert est créé, portant le numéro d'origine suivi d'un chrono, et les lignes cochées y sont déplacées.

**RG-098 — Changement de zone limité aux lignes non traitées**
*Comportement :* côté départ, seules les lignes non collectées ; côté réception, seules les lignes non rangées.

---

## 8. Gestion des statuts

| Module | Statut | Signification | Actions autorisées |
| --- | --- | --- | --- |
| Commande | EN SAISIE | Brouillon non validé, sans numéro | Ajouter, modifier, supprimer des lignes ; valider |
| Commande | Validée (NON RECEPTIONEE) | Commande numérotée, aucune ligne mise en préréception | Consulter, modifier, imprimer, exporter, supprimer, mettre en préréception |
| Commande | RECEPTION PARTIEL | Une partie des lignes est en préréception | Consulter, imprimer, exporter, mettre en préréception le solde |
| Commande | RECEPTIONNEE | Toutes les lignes sont en préréception | Consulter, imprimer, exporter |
| Suivi de commande | Non validé | Annulation partielle saisie | Modifier, supprimer, valider, imprimer |
| Suivi de commande | Validé | Annulation effective | Consulter, imprimer, supprimer |
| Réception | EN PREPARATION | BL créé, en-tête non enregistré | Ajouter/modifier/supprimer des lignes, enregistrer, valider, supprimer |
| Réception | EN PRE-RECEPTION | En-tête enregistré, BL prêt | Ajouter/modifier/supprimer des lignes, enregistrer, valider, supprimer, imprimer |
| Réception | BL VALIDE | Réception validée, stock intégré | Consulter, imprimer ; suppression réservée à l'administrateur |
| Réception | COMPTABILISE | BL transmis à la comptabilité | Consulter, imprimer |
| Réception | EXPEDIEE / EN RECEPTION | Étapes de la variante multi-dépôts, non utilisées ici | Consulter |
| Réception | NON DEFINIE | Étape non reconnue | Signaler à l'équipe projet |
| Transfert | EN SAISIE | Transfert en constitution | Ajouter/modifier/supprimer des lignes, valider, supprimer |
| Transfert | A COLLECTER | Transfert validé, en attente de prélèvement | Collecter, changer de zone/de lot, créer un transfert à partir de lignes, supprimer |
| Transfert | EN COLLECTE | Collecte engagée | Poursuivre/annuler la collecte, valider le départ |
| Transfert | EXPEDIE | Départ validé, marchandise en cours de route | Contrôler, ranger, changer de zone de réception, ajouter un produit reçu, valider la réception, annuler la réception |
| Transfert | RECEPTIONNEE | Réception validée, stock intégré | Consulter, imprimer, annuler la réception, comptabiliser |

---

## 9. Messages et erreurs courantes

| Message / situation | Cause | Action recommandée |
| --- | --- | --- |
| « Cette opération ne peut s'effectuer que sur l'agence centrale » | Écran d'achat ouvert depuis un autre site | Basculer le sélecteur **Site** sur la Centrale |
| « Mot de passe incorrect ! » | Mot de passe erroné dans la fenêtre de confirmation | Ressaisir le mot de passe |
| « Vous n'avez pas d'habilitation pour effectuer cette opération !! » | Droit manquant sur l'action | Demander l'habilitation à l'administrateur |
| « Impossible de passer commande avec une quantité inférieure ou égale à 0 !! » | Quantité vide ou nulle | Saisir une quantité positive |
| « Le taux de remise doit être compris entre 0 et 100 ! » (commande) | Taux de remise hors bornes sur une ligne de commande | Saisir un taux valide ; la ligne reste inchangée |
| « Impossible d'effectuer cette opération sur l'agence commerciale ! » | Suggestion de commande lancée hors centrale | Basculer sur la Centrale |
| « Veuillez saisir un nombre de jour supérieur à 0 ! » | Suggestion saisonnière sans nombre de jours | Renseigner le nombre de jours |
| « Veuillez saisir un coefficient supérieur à 0 ! » | Suggestion saisonnière sans coefficient | Renseigner le coefficient VM |
| « Aucun nombre de vm saisi ! » | Suggestion de type SPECIALE sans nombre de VM | Renseigner le nombre de VM |
| « La suggestion de commande a été lancée en arrière-plan ! » | Information : calcul différé | Patienter puis actualiser l'écran |
| « Il n'y a pas de commande à livrer ! » | Validation d'un brouillon vide | Ajouter au moins un produit |
| « Le numéro de commande existe déjà ! Veuillez renseigner un autre ! » | Numéro déjà utilisé | Saisir un autre numéro ou laisser le système générer |
| « Commande validée ! » | Validation réussie | Consulter la Liste des commandes |
| « L'opération a été effectuée. X supprimée(s) sur Y commande(s) !!! » | Suppression partielle | Vérifier les commandes déjà mises en préréception |
| « Voulez-vous supprimer la ligne ? » | Confirmation de suppression de ligne | Confirmer ou annuler |
| « X / Y Lignes validées !! » (suivi de commande) | Validation partielle des suivis | Vérifier les suivis déjà validés |
| « COMMANDE DEJA VALIDEE » | Suivi déjà validé | Aucune action |
| « QUANTITE < 0 » (import de suivi) | Quantité annulée non renseignée | Corriger le fichier |
| « PRODUIT NON TROUVE DANS LA COMMANDE » | Code article absent de la commande | Corriger le code ou le n° de commande |
| « LA QUANTITE COMMANDE EST INFERIEUR A LA QUANTIE A ANNULER » | Annulation supérieure à la commande | Corriger la quantité |
| « Le mode d'expédition de la pré-réception en cours est différent de celui de la commande sélectionnée ! » | Mise en préréception sur un BL incompatible | Créer une nouvelle préréception |
| « Opération terminée, aucune préréception créée !!! » | Reste à livrer nul sur toutes les lignes | Vérifier les livraisons et annulations antérieures |
| « Un lot identique au lot saisi existe déjà dans la réception en cours avec une date de péremption différente ! » | Conflit lot / péremption | Corriger le lot ou la date |
| « Veuillez renseigner le numéro de commande SVP ! » | Ajout de ligne sans n° de commande | Renseigner le n° de commande |
| « Veuillez sélectionner un produit SVP ! » | Aucun produit choisi | Sélectionner le produit |
| « Veuillez renseigner la quantité facturée SVP ! » | Quantité facturée vide | Saisir la quantité |
| « Veuillez renseigner le numéro de lot SVP ! » | Lot vide | Saisir le lot |
| « Veuillez renseigner la date de péremption du lot SVP ! » | Péremption vide | Saisir la date |
| « Le taux de remise doit être compris entre 0 et 100 ! » | Remise hors bornes | Corriger le taux |
| « Remise enregistrée !! » | Remise prise en compte | Aucune action |
| « Motif enregistré !! » | Motif d'écart enregistré | Aucune action |
| « Numéro lot changé !! » / « Date de péremption changée !! » | Modification prise en compte | Aucune action |
| « Accord de péremption mis à jour !! » | Case cochée/décochée | Aucune action |
| « Le BL a été enregistré » | Préréception enregistrée | Poursuivre ou valider |
| « Impossible de mettre une commande déjà réceptionnée en pré-réception ! » | BL déjà validé | Créer un nouveau BL |
| « Aucune validation ne peut être lancée sur un site autre que la centrale » | Site courant incorrect | Basculer sur la Centrale |
| « Veuillez renseigner le bureau d'achat ! » | Bureau d'achat vide | Renseigner l'en-tête du BL |
| « Veuillez renseigner le fournisseur ! » | Fournisseur vide | Renseigner l'en-tête du BL |
| « Veuillez renseigner le numéro de bon de livraison SVP ! » | N° de BL vide | Renseigner l'en-tête du BL |
| « Veuillez sélectionner une devise SVP ! » | Devise non choisie | Sélectionner la devise |
| « Impossible de valider un BL sans ligne ! » | BL vide | Ajouter des lignes |
| « Impossible de valider cette réception, car certaines lignes ont des écarts sans motif défini ! » | Écart sans motif | Renseigner un motif de retour |
| « Impossible de valider cette réception, car certaines lignes n'ont pas de numéro de lot ! » | Lot manquant | Compléter les lots |
| « Impossible de valider cette réception, car certaines lignes n'ont pas de date de péremption ! » | Péremption manquante | Compléter les dates |
| « La centrale d'achat n'a pas de zone pour recevoir les stocks » | Aucune zone de stockage | Créer une zone de stockage |
| « Le site d'expédition n'a pas de zone de stockage pour le transfert. » | Site destinataire sans zone | Créer une zone sur le site destinataire |
| « Le traitement du bon de livraison a été lancé en arrière-plan. » | Validation différée | Attendre la notification puis actualiser |
| « X/Y BL supprimé !!! » | Suppression partielle | Seul l'administrateur supprime un BL validé |
| « BL déjà validé !! » | Suppression de lignes demandée sur un BL validé | Aucune suppression n'est possible : créer un nouveau BL pour la suite |
| « Aucune ligne à supprimer !! » | Aucune ligne cochée | Cocher les lignes à supprimer |
| « X produits traités !! » | Prix recalculés | Vérifier les nouveaux prix |
| « Facture modifiée avec succès !! » | Facture fournisseur mise à jour | Aucune action |
| « Le site de départ doit être différent du site de destination !! » | Sites identiques | Changer le site de destination |
| « Veuillez renseigner une quantité valide !! » | Quantité de transfert nulle | Saisir une quantité positive |
| « La zone de stockage ne dispose pas du stock nécessaire ou la date de péremption des lots est antérieure à la date du jour… » | Aucun lot valide | Changer de zone ou vérifier les lots |
| « Impossible d'ajouter la ligne car, la zone de destination n'est pas une zone quarantaine » | Incohérence de zones de quarantaine | Configurer la zone de destination |
| « Aucun traitement ne peut être effectué !!! » | Produit non référencé sur le site de départ | Créer la fiche stock du produit sur le site |
| « Ajout du transfert avec succès !! » | Ligne(s) créée(s) | Poursuivre la saisie |
| « Aucun transfert disponible !! » | Aucun transfert ouvert | Créer ou ouvrir un transfert |
| « Veuillez renseigner au moins une ligne avant de valider le transfert !! » | Transfert vide | Ajouter des lignes |
| « Impossible de valider ce transfert, car certaines lignes n'ont pas de numéro de lot !! » | Lot manquant | Renseigner le lot |
| « La validation du transfert ne peut être faite que dans l'agence émettrice du transfert ! » | Site courant ≠ site de départ | Basculer sur le site de départ |
| « X / Y Transfert(s) validé(s) avec succès !! » | Validation réussie | Passer à la collecte |
| « Veuillez cocher une ou plusieurs lignes !! » | Aucune ligne sélectionnée | Cocher les lignes |
| « Veuillez valider le transfert avant de poursuivre !! » | Collecte avant validation | Valider le transfert |
| « La collecte des produits d'un transfert ne peut être faite que dans l'agence de départ du transfert !! » | Site incorrect | Basculer sur le site de départ |
| « Le transfert est déjà expédié !! » | Départ déjà validé | Poursuivre côté réception |
| « Ce transfert a déjà été réceptionné ! » | Réception déjà validée | Annuler la réception si nécessaire |
| « X / Y Lignes ont été collectée(s) avec succès !! » | Collecte réussie | Valider le départ |
| « Annulation des Produits collectés avec succès !! » | Collecte annulée | Recollecter si nécessaire |
| « Impossible de valider ce transfert, car certaines lignes n'ont pas été collectées !! » | Lignes non collectées | Collecter ou supprimer les lignes |
| « Toutes les lignes ont été supprimées » | Aucune ligne servie | Recréer le transfert |
| « Départ validé avec succès !! » | Transfert expédié | Le site destinataire peut le traiter |
| « La quantité à collecter ne peut être supérieure au stock du lot ! » | Quantité excessive | Réduire ou changer de lot |
| « La quantité collectée ne doit pas être supérieure à la quantité à collecter ! » | Sur-collecte | Ajuster la quantité à collecter |
| « Ligne(s) déjà rangée(s) !! » | Ligne déjà entrée en stock | Annuler la réception d'abord |
| « Opération Terminée !! » (contrôle) | Lignes contrôlées | Ranger les lignes |
| « Aucun contrôle annulé car les lignes ont été rangées. » | Lignes déjà rangées | Annuler la réception d'abord |
| « Le lot N° … de … n'a pas de zone de stockage de réception !! » | Zone de réception absente | Changer de zone de réception |
| « X / Y lignes ont été rangées !! » | Rangement réussi | Valider la réception |
| « Veuillez choisir une zone de stockage ! » | Aucune zone sélectionnée | Choisir une zone |
| « X / Y Zone de stockage changée avec succès !! » | Zones modifiées | Aucune action |
| « Toutes les lignes ont déjà été rangées. » | Changement de zone impossible | Annuler le rangement d'abord |
| « Numéro de lot changé avec succès !! » | Lot modifié | Aucune action |
| « Les lignes de transfert sélectionnées ne peuvent être supprimées ! » | Transfert validé ou départ validé | Annuler la collecte, ou repartir d'un nouveau transfert |
| « Ligne(s) supprimée(s) !! » | Suppression réussie | Aucune action |
| « X / Y Transferts supprimés avec succès !! » | Suppression partielle | Vérifier les transferts déjà expédiés |
| « ces lignes de transfert ne peuvent être annulées que sur le site de réception » | Site incorrect | Basculer sur le site de destination |
| « Les transferts ont été annulés avec succès !! » | Réception annulée | Reprendre le contrôle et le rangement |
| « Aucun transfert trouvé !! » | Transfert inexistant ou supprimé | Actualiser la liste |
| « Le transfert ne peut être créé, car, le départ du transfert est déjà validé ! » | Départ déjà validé | Créer un nouveau transfert |
| « Transfert créé avec succès !! » | Nouveau transfert créé à partir de lignes | Poursuivre le traitement |
| « Produit ajouté avec succès !! » | Produit ajouté en réception | Contrôler puis ranger |
| « La quantité ou le lot n'est pas disponible !! » | Quantité nulle ou lot absent | Corriger la saisie |
| « Veuillez configurer la zone de stockage de réception !! » | Zone de réception absente | Configurer la zone |
| « Le stockage du produit sélectionné n'a pas été trouvé !! » | Produit non référencé sur le site | Créer la fiche stock |

---

## 10. FAQ utilisateur

**J'ai créé une commande mais je ne la retrouve pas dans la liste des commandes. Pourquoi ?**
Tant qu'elle n'est pas validée, une commande reste un brouillon (statut EN SAISIE) et n'apparaît que dans l'écran **Achats > Commande**. Validez-la pour qu'elle soit numérotée et visible dans la liste.

**J'ai validé une seule commande, mais l'application en a créé trois. Est-ce normal ?**
Oui. La validation découpe automatiquement le brouillon par bureau d'achat, mode d'expédition et fournisseur. Si votre brouillon mélangeait plusieurs fournisseurs ou plusieurs modes d'expédition, vous obtenez une commande par combinaison.

**Des lignes ont disparu après la validation de ma commande. Où sont-elles passées ?**
Les lignes dont la quantité commandée était à 0 sont supprimées au moment de la validation. Vérifiez vos quantités avant de valider.

**Je clique sur « Suggérer une commande » et rien ne se passe.**
Le calcul est lancé en arrière-plan. Attendez quelques instants puis actualisez l'écran. Vérifiez également que vous êtes bien positionné sur la Centrale et que le brouillon est vide.

**Je n'arrive pas à supprimer une commande.**
Une commande dont au moins une ligne figure déjà dans un bon de livraison ne peut pas être supprimée. Supprimez d'abord la ligne du bon de livraison, ou conservez la commande.

**Quelle est la différence entre « Créer une nouvelle pré-réception » et « Mettre les lignes cochées en pré-réception » ?**
Le premier bouton crée un **nouveau** bon de livraison. Le second ajoute les lignes au **dernier bon de livraison non validé** du même bureau d'achat et du même fournisseur : utilisez-le pour compléter une réception déjà commencée.

**Le système me dit qu'il n'y a rien à mettre en préréception alors que la commande n'est pas encore livrée.**
Le reste à livrer est calculé en déduisant les quantités déjà livrées sur des BL validés **et** les quantités annulées via « Modification de commandes ». Vérifiez ces deux points.

**Quelle est la différence entre la quantité facturée et la quantité livrée ?**
La **quantité facturée** est celle figurant sur la facture du fournisseur : elle sert au calcul des montants. La **quantité livrée** est celle réellement comptée à la réception : c'est elle qui entre en stock. La différence entre les deux constitue l'écart, qui doit être justifié.

**Pourquoi la réception refuse-t-elle de se valider ?**
Les causes les plus fréquentes sont : une ligne sans numéro de lot, une ligne sans date de péremption, un écart sans motif de retour, un BL sans ligne, ou un site courant différent de la Centrale.

**J'ai validé la réception mais le statut n'a pas changé.**
La validation s'exécute en arrière-plan. Attendez la notification de fin de traitement puis actualisez la liste.

**Où sont passées les marchandises après la validation de la réception ?**
Elles entrent d'abord en stock à la **Centrale**, puis un **transfert inter-site est créé automatiquement** vers le site de stockage. Ce transfert arrive au statut EXPEDIE : le site destinataire doit le contrôler, le ranger et valider sa réception pour que le stock lui soit affecté. Consultez **Stocks > Listing transferts inter-sites**.

**Comment corriger une réception déjà validée ?**
Une réception validée n'est plus modifiable. Seul l'utilisateur administrateur peut supprimer le BL, ce qui réverse automatiquement les mouvements de stock. Sollicitez l'administrateur.

**Le stock du site de départ n'a pas bougé alors que j'ai validé le transfert.**
La validation ne sort pas le stock : c'est la **collecte** qui déclenche la sortie physique. Cochez les lignes puis utilisez « Collecter les lignes cochées ».

**Le stock du site destinataire n'a pas augmenté alors que le transfert est réceptionné.**
C'est le **rangement** qui fait entrer le stock, pas la validation de la réception. Cochez les lignes contrôlées puis utilisez « Ranger les lignes cochées ».

**Je ne vois pas les boutons de collecte / de rangement.**
Les actions dépendent du site sur lequel vous êtes positionné : la collecte est réservée au site de départ, le contrôle et le rangement au site de destination. Vérifiez le sélecteur **Site**. Vérifiez également vos droits (DS_CollecteTransfertInterSite, DS_ModificationTransfertInterSite).

**Pourquoi une seule ligne saisie a-t-elle produit plusieurs lignes de transfert ?**
Parce que la quantité demandée a été répartie sur plusieurs lots, selon la règle « premier périmé, premier sorti ». Chaque lot donne lieu à une ligne distincte.

**À quoi sert le fractionnement proposé à la validation d'un transfert ?**
Il éclate le transfert en trois documents selon l'urgence du besoin du site destinataire (couverture Stock/VM ≤ 0,25 mois, de 0,26 à 1 mois, > 1 mois). Cela permet d'expédier en priorité ce qui est le plus urgent.

**J'ai reçu un produit qui n'était pas dans le transfert. Comment le prendre en compte ?**
Sur le site de destination, utilisez la zone de saisie du mode réception pour ajouter le produit, son lot et la quantité reçue. La ligne est créée avec une quantité transférée à 0 ; l'écart donnera lieu à une correction de stock à la validation de la réception.

**Comment annuler une réception de transfert ?**
Depuis le **site de destination**, allez dans **Stocks > Listing transferts inter-sites**, cochez le transfert et cliquez sur **Annuler la réception**. Le stock est réversé automatiquement.

**Pourquoi certaines lignes ont-elles disparu après la validation du départ ?**
Les lignes non collectées ou à quantité nulle sont supprimées automatiquement lors de la validation du départ. Collectez toutes les lignes avant de valider.

**Je ne peux pas changer de site dans la barre supérieure.**
Le droit **DG_AccesMultiSite** est nécessaire. Contactez votre administrateur.

**Pourquoi l'application me demande-t-elle mon mot de passe alors que je suis déjà connecté ?**
Il s'agit d'une double sécurité sur les opérations irréversibles. Elle vérifie aussi votre habilitation et trace l'opération dans le journal des événements.

---

## 11. Bonnes pratiques

### 11.1 Bonnes pratiques générales

1. **Vérifiez toujours le site sélectionné** en haut de l'écran avant de commencer une opération. La plupart des refus proviennent d'un site incorrect.
2. **Ne partagez pas votre mot de passe.** Les validations sont nominatives et tracées dans le journal des événements.
3. **Travaillez sur une période de filtre restreinte** dans les listes : les écrans sont plus rapides et les totaux plus lisibles.
4. **Actualisez l'écran** après un traitement lancé en arrière-plan (suggestion de commande, validation de réception).

### 11.2 Module Commande Achat

1. Choisissez le **type de commande** avant d'ajouter le premier produit : il conditionne le calcul de la suggestion et l'initiale du numéro de commande.
2. Ne mélangez pas inutilement plusieurs fournisseurs ou modes d'expédition dans un même brouillon si vous souhaitez maîtriser le découpage à la validation.
3. **Contrôlez les quantités et les remises avant de valider** : après validation, il faut rouvrir la commande depuis la liste.
4. Supprimez les lignes inutiles plutôt que de leur laisser une quantité à 0 : le résultat est identique mais la lisibilité du brouillon est meilleure.
5. Utilisez **Suggérer une commande** pour les réapprovisionnements courants, puis affinez manuellement les quantités.
6. Utilisez l'onglet **Stats produit** pour comparer la couverture avant et après commande : les colonnes (Stock+CR)/VM et SCRC/VM sont les meilleurs indicateurs de sur- ou sous-commande.
7. Enregistrez sans délai les annulations annoncées par le fournisseur via **Modification de commandes** : elles conditionnent le calcul du reste à livrer.
8. Imprimez et archivez le **bon d'achat** transmis au fournisseur.

### 11.3 Module Préréception / Réception

1. **Créez la préréception à partir de la commande** plutôt que de toutes pièces : les prix, remises, quantités et rattachements sont repris automatiquement.
2. Renseignez **l'en-tête du BL dès le début** (bureau d'achat, fournisseur, N° BL, devise, mode d'expédition) : plusieurs contrôles en dépendent.
3. Saisissez le **numéro de lot et la date de péremption au fil de l'eau**, ligne par ligne, plutôt qu'à la fin : ce sont les deux causes de blocage les plus fréquentes à la validation.
4. **Justifiez immédiatement chaque écart** par un motif de retour : sans motif, la validation est impossible et l'ensemble du traitement échoue.
5. Utilisez le bouton **Enregistrer Pré-Réception** régulièrement pendant une longue saisie.
6. Avant de valider, lancez **Prix Revient - Cession - Public** pour que les prix de revient intègrent bien les frais du dossier.
7. Contrôlez les colonnes **Evol. PGHT** : une évolution anormale signale une erreur de saisie de prix ou une hausse fournisseur à confirmer.
8. **Ne validez que lorsque le comptage physique est terminé** : la validation est irréversible pour un utilisateur non administrateur.
9. Après la validation, **vérifiez le transfert automatique** généré vers le site de stockage et prévenez le site destinataire.
10. Imprimez le **bordereau de (pré)-réception** pour le dossier physique.

### 11.4 Module Transfert inter-site

1. **Choisissez le site de destination avant d'ajouter le premier produit** : il est figé à la création du transfert.
2. Laissez le système répartir les quantités sur les lots : la règle « premier périmé, premier sorti » limite les pertes.
3. Vérifiez la colonne **Stock Destination en VM** avant d'expédier : elle indique si le site destinataire a réellement besoin de la marchandise.
4. Utilisez le **fractionnement** pour prioriser les expéditions lorsque plusieurs produits ont des urgences différentes.
5. **Collectez au fur et à mesure du prélèvement physique**, et corrigez la quantité collectée dès qu'un écart apparaît en magasin.
6. **Ne validez le départ qu'une fois toutes les lignes collectées** : les lignes non collectées sont supprimées sans avertissement.
7. Imprimez le **bordereau de transfert** et joignez-le au colis.
8. Sur le site de destination, respectez l'ordre **Contrôler → Ranger → Valider la réception**. Le rangement est l'étape qui alimente réellement le stock.
9. Traitez les réceptions rapidement : tant que le transfert n'est pas rangé, la marchandise reste en cours de route et n'est pas disponible à la vente.
10. Éditez le **Rapport d'écart** lorsque les quantités reçues diffèrent des quantités expédiées, et conservez-le comme justificatif de la correction de stock.
11. Vérifiez régulièrement, dans le **Listing transferts inter-sites**, qu'aucun transfert ne reste bloqué au statut EXPEDIE.

---

## Annexe A — Emplacements des captures d'écran

Les emplacements suivants sont prévus dans le manuel. Les captures doivent être réalisées sur un jeu de données de démonstration, sans information confidentielle.

| N° | Emplacement dans le manuel | Écran à capturer |
| --- | --- | --- |
| 1 | § 3.2 | Écran **Achats > Commande** — vue complète avec le tableau des lignes |
| 2 | § 3.3 | Écran **Achats > Liste des commandes** — filtres, totaux et tableau |
| 3 | § 3.5.1 | Fenêtre **Fiche commande** (ajout d'un produit) |
| 4 | § 3.5.2 | Fenêtre **Suggestion de commande** |
| 5 | § 3.11 | Fenêtre **Détail commande fournisseur** |
| 6 | § 4.3 | Écran **Achats > Pré-réception en cours** — liste des BL |
| 7 | § 4.3 | Fenêtre **Liste produit en pré-reception** |
| 8 | § 4.5 | Écran **Pré-Réception** plein écran — bandeau, totaux et bloc « Info principale réception » |
| 9 | § 4.6 | Tableau des lignes de la préréception |
| 10 | § 4.7 | Fenêtre **Réclamation** (motif d'écart) |
| 11 | § 4.13 | Menu **Imprimer** de l'écran de préréception |
| 12 | § 5.3 | Écran **Stocks > Listing transferts inter-sites** |
| 13 | § 5.4 | Écran **Stocks > Transferts inter-sites** — blocs Infos / Validation départ / Validation réception |
| 14 | § 5.7 | Zone de saisie d'une ligne de transfert et tableau (vue site de départ) |
| 15 | § 5.12 | Tableau du transfert en mode réception (vue site de destination) |
| 16 | § 5.12 | Fenêtre **Changer zone** |

> Aucune capture d'écran n'a été insérée dans ce document : l'environnement de rédaction ne permettait pas de se connecter à l'application pour produire des images réelles. Les emplacements ci-dessus sont à compléter par l'équipe projet.

---

# ANOMALIES / POINTS À VÉRIFIER

> **Cette section est destinée à l'équipe projet et ne fait pas partie du manuel utilisateur.**
> Elle recense les incohérences fonctionnelles relevées lors de l'analyse du code source.

**État au 2 septembre 2026 :** 9 anomalies ont été corrigées — AN-001, AN-002, AN-003, AN-004,
AN-005, AN-006, AN-007, AN-010 et AN-011. Elles sont conservées ci-dessous, marquées
« CORRIGÉ », avec le détail du correctif appliqué. Les 9 autres restent ouvertes.

### AN-001 — [CORRIGÉ] — Les totaux d'en-tête de la commande sont cumulés au lieu d'être remplacés

* **Fonctionnalité concernée :** modification de la quantité ou du taux de remise d'une ligne de commande.
* **Comportement observé :** la fonction de mise à jour des totaux de la commande **additionne** les montants qu'on lui transmet aux totaux existants. Elle est appelée correctement à la création d'une ligne (ajout du montant) et à la suppression (retrait du montant), mais lors d'une modification de quantité ou de remise, elle reçoit **le nouveau montant complet de la ligne** au lieu de l'écart. Les totaux HT, TVA, TTC et remise de l'en-tête sont donc gonflés à chaque modification.
* **Comportement attendu :** transmettre la différence entre l'ancien et le nouveau montant, ou recalculer les totaux par somme des lignes.
* **Fichier(s) concerné(s) :** `app/Http/Controllers/achats/commandeControllers.php` (methodes `updateQteCmdeLigne`, `updateRemiseCmdeLigne`), `resources/helpers/fonction.php` (`MajTotauxCommande`).
* **Atténuation :** les totaux sont recalculés par somme des lignes lors de la validation de la commande ; l'anomalie n'est donc visible que sur les commandes non validées.
* **Gravité :** Élevé.
* **Statut :** ✔ **Corrigé le 02/09/2026.**
* **Correctif appliqué :** Les totaux d'entête de la commande sont désormais **recalculés par somme des lignes** (nouvelle fonction `RecalculTotauxCommande()`), à l'ajout, à la modification de quantité, à la modification de remise, à la suppression de ligne et à l'import de fichier. L'opération est idempotente : elle corrige aussi les écarts déjà accumulés sur les commandes existantes dès la prochaine modification.

### AN-002 — [CORRIGÉ] — Le Total HT d'une ligne de commande n'est pas calculé de la même façon selon l'opération

* **Fonctionnalité concernée :** calcul du montant HT d'une ligne de commande.
* **Comportement observé :** à la **création** d'une ligne, le Total HT enregistré est le **HT net de remise**. Lors d'une **modification de quantité** ou d'une **modification de remise**, le Total HT enregistré est le **HT brut avant remise**, alors que le Total TTC reste calculé sur le HT net. Une même commande peut donc contenir des lignes dont le Total HT est net et d'autres dont le Total HT est brut.
* **Comportement attendu :** un mode de calcul unique (le HT net de remise, conformément à la logique appliquée pour la TVA et le TTC).
* **Fichier(s) concerné(s) :** `app/Http/Controllers/achats/commandeControllers.php` (`createCommande` ligne ~1148 vs `updateQteCmdeLigne` ligne ~724 et `updateRemiseCmdeLigne` ligne ~871).
* **Gravité :** Élevé.
* **Statut :** ✔ **Corrigé le 02/09/2026.**
* **Correctif appliqué :** `updateQteCmdeLigne()` et `updateRemiseCmdeLigne()` enregistrent désormais le **HT net de remise** dans `TotalHT`, comme à la création de la ligne. La réponse envoyée à l'écran renvoie la même valeur.

### AN-003 — [CORRIGÉ] — Le Total Taxe d'une ligne de commande n'est pas mis à jour lors des modifications

* **Fonctionnalité concernée :** modification de la quantité ou de la remise d'une ligne de commande.
* **Comportement observé :** la TVA de la ligne est bien recalculée en mémoire et sert au calcul du TTC, mais la colonne `TotalTaxe` n'est pas incluse dans la mise à jour enregistrée. La TVA stockée reste celle calculée à la création de la ligne.
* **Comportement attendu :** enregistrer la TVA recalculée.
* **Fichier(s) concerné(s) :** `app/Http/Controllers/achats/commandeControllers.php` (`updateQteCmdeLigne`, `updateRemiseCmdeLigne`).
* **Gravité :** Élevé.
* **Statut :** ✔ **Corrigé le 02/09/2026.**
* **Correctif appliqué :** La colonne `TotalTaxe` est désormais incluse dans la mise à jour de la ligne pour les deux méthodes.

### AN-004 — [CORRIGÉ] — Aucun contrôle de bornes sur le taux de remise de la commande

* **Fonctionnalité concernée :** saisie du taux de remise sur une ligne de commande.
* **Comportement observé :** aucun contrôle n'est effectué sur le taux saisi. Un taux supérieur à 100 produit un prix remisé négatif et un Total HT négatif.
* **Comportement attendu :** appliquer le même contrôle que sur la ligne de bon de livraison, qui refuse tout taux hors de l'intervalle 0–100.
* **Fichier(s) concerné(s) :** `app/Http/Controllers/achats/commandeControllers.php` (`updateRemiseCmdeLigne`, `createCommande`).
* **Gravité :** Moyen.
* **Statut :** ✔ **Corrigé le 02/09/2026.**
* **Correctif appliqué :** Un contrôle de bornes 0–100 a été ajouté dans `createCommande()` et `updateRemiseCmdeLigne()`. Hors bornes, l'opération est refusée avec le message « Le taux de remise doit être compris entre 0 et 100 ! » et la ligne reste inchangée.

### AN-005 — [CORRIGÉ] — La protection contre la suppression de lignes d'un BL validé est inopérante

* **Fonctionnalité concernée :** suppression de lignes depuis l'écran de préréception.
* **Comportement observé :** le contrôle censé bloquer la suppression lit l'étape du BL (`EtapeBL`) **sur la ligne** du bon de livraison, alors que cette information est portée par l'en-tête. La valeur lue est toujours vide et le test n'est jamais vrai : les lignes d'un bon de livraison déjà validé peuvent être supprimées.
* **Comportement attendu :** lire l'étape sur l'en-tête du bon de livraison et refuser la suppression pour un BL validé.
* **Fichier(s) concerné(s) :** `app/Http/Controllers/achats/PreReceptionEnCoursController.php` (`deleteBlLigne`, ligne ~4153).
* **Gravité :** Élevé.
* **Statut :** ✔ **Corrigé le 02/09/2026.**
* **Correctif appliqué :** `deleteBlLigne()` charge désormais les **entêtes** des bons de livraison concernés et refuse la suppression dès qu'un BL est validé (`BonLivraisonValide` vrai ou `EtapeBL >= 2`).

### AN-006 — [CORRIGÉ] — Les totaux du bon de livraison ne sont pas recalculés après suppression de lignes

* **Fonctionnalité concernée :** suppression de lignes depuis l'écran de préréception.
* **Comportement observé :** les lignes sont supprimées mais les totaux HT, TVA, TTC et remise de l'en-tête du BL ne sont pas recalculés. Les totaux affichés restent ceux d'avant la suppression jusqu'au prochain enregistrement de la préréception.
* **Comportement attendu :** recalculer les totaux de l'en-tête après suppression (la méthode dédiée existe déjà et est utilisée ailleurs).
* **Fichier(s) concerné(s) :** `app/Http/Controllers/achats/PreReceptionEnCoursController.php` (`deleteBlLigne`).
* **Gravité :** Moyen.
* **Statut :** ✔ **Corrigé le 02/09/2026.**
* **Correctif appliqué :** `deleteBlLigne()` appelle désormais `MajTotauxBonLivraison()` sur chaque bon de livraison impacté, à l'intérieur de la transaction.

### AN-007 — [CORRIGÉ] — L'annulation de la réception d'un transfert ne met pas à jour l'en-tête du transfert

* **Fonctionnalité concernée :** bouton « Annuler la réception » du listing des transferts inter-sites.
* **Comportement observé :** l'en-tête du transfert est modifié en mémoire (retour à l'étape « expédié », suppression de l'opérateur et de la date de réception, remise à zéro de la comptabilisation) mais **l'enregistrement n'est jamais déclenché** : l'instruction de sauvegarde est écrite sans parenthèses et n'exécute donc rien. Seules les lignes sont réellement remises à zéro, ce qui réverse le stock. Le transfert reste affiché **RECEPTIONNEE** avec un opérateur et une date de réception, alors que ses lignes ne sont plus ni contrôlées, ni rangées, ni réceptionnées.
* **Comportement attendu :** enregistrer l'en-tête et repasser le transfert au statut EXPEDIE.
* **Fichier(s) concerné(s) :** `app/Http/Controllers/stocks/listingTransfertSiteController.php` (`annulerReceptionTionTransfertInterSite`, ligne ~265).
* **Remarque complémentaire :** la date de réception est par ailleurs remise à la chaîne vide plutôt qu'à une valeur nulle, ce qui peut échouer sur une colonne de type date/heure.
* **Gravité :** Élevé.
* **Statut :** ✔ **Corrigé le 02/09/2026.**
* **Correctif appliqué :** L'appel `$SITE->save;` a été corrigé en `$SITE->save();` et la date de réception est remise à `null` au lieu de la chaîne vide. Le transfert repasse effectivement au statut EXPEDIE.

### AN-008 — Le filtre « Statut » du listing des transferts ne renvoie pas le bon résultat

* **Fonctionnalité concernée :** filtre **Statut** de l'écran Listing transferts inter-sites.
* **Comportement observé :** dans la structure de sélection des étapes, les cas « EN SAISI » (1) et « A COLLECTER » (2) ne sont pas terminés : l'exécution se poursuit jusqu'au cas suivant et la valeur retenue est finalement celle de « EN COLLECTE » (-1). Sélectionner « EN SAISI » ou « A COLLECTER » renvoie donc la liste des transferts en collecte. Par ailleurs, une réinitialisation de la variable de filtre située juste avant la structure rend la première affectation inutile.
* **Comportement attendu :** chaque cas doit filtrer sur son propre statut.
* **Fichier(s) concerné(s) :** `app/Http/Controllers/stocks/listingTransfertSiteController.php` (`getListeTransfertSite`, lignes ~41 à 61).
* **Gravité :** Moyen.

### AN-009 — Le prix de revient moyen pondéré n'est jamais rafraîchi à la validation du départ d'un transfert

* **Fonctionnalité concernée :** validation du départ d'un transfert inter-site.
* **Comportement observé :** le test destiné à vérifier que le produit a bien été trouvé compare l'objet produit à la valeur booléenne vraie au lieu de le comparer à une valeur nulle. La condition est donc toujours fausse lorsque le produit existe : le PRMP de la ligne n'est jamais réactualisé. Inversement, si le produit est introuvable, la condition devient vraie et l'accès à ses propriétés provoque une erreur qui annule toute la validation du départ.
* **Comportement attendu :** tester la nullité de l'objet produit.
* **Fichier(s) concerné(s) :** `app/Http/Controllers/stocks/transfertInterSiteController.php` (`validerDepartTransfertSite`, ligne ~1657).
* **Gravité :** Moyen.

### AN-010 — [CORRIGÉ] — Le prix en devise d'une ligne ajoutée manuellement en préréception est toujours nul

* **Fonctionnalité concernée :** ajout manuel d'un produit dans une préréception.
* **Comportement observé :** le prix de gros HT exprimé en devise est calculé **avant** que le prix de gros HT de la ligne ne soit renseigné. Le calcul porte donc sur une valeur vide et le prix en devise enregistré vaut 0, quel que soit le taux de change saisi.
* **Comportement attendu :** calculer le prix en devise après l'affectation du prix de gros HT.
* **Fichier(s) concerné(s) :** `app/Http/Controllers/achats/PreReceptionEnCoursController.php` (`addProdReception`, lignes ~1053 à 1075).
* **Gravité :** Moyen.
* **Statut :** ✔ **Corrigé le 02/09/2026.**
* **Correctif appliqué :** La conversion en devise est calculée à partir du PGHT réellement saisi, avant l'affectation des propriétés de la ligne. Les totaux en devise d'un BL neuf sont par ailleurs initialisés à 0 au lieu d'être divisés par le taux.

### AN-011 — [CORRIGÉ] — Libellés d'étapes divergents entre l'écran et l'export Excel des bons de livraison

* **Fonctionnalité concernée :** export Excel de la liste des bons de livraison.
* **Comportement observé :** l'écran traduit les étapes 0 à 5 par EN PREPARATION, EN PRE-RECEPTION, EXPEDIEE, EN RECEPTION, BL VALIDE, COMPTABILISE. L'export Excel utilise une correspondance différente : l'étape 2 y est libellée « BL VALIDE » et l'étape 3 « COMPTABILISE ». Un même bon de livraison peut donc apparaître avec deux statuts différents selon qu'on le lit à l'écran ou dans l'export.
* **Comportement attendu :** une correspondance unique, partagée par l'écran et l'export.
* **Fichier(s) concerné(s) :** `app/Http/Controllers/achats/PreReceptionEnCoursController.php` (`exporterBL`, lignes ~358 à 374) et `resources/views/pages/achats/pre_reception_en_cours.blade.php` (fonction `etapeBl`, ligne ~4582).
* **Gravité :** Moyen.
* **Statut :** ✔ **Corrigé le 02/09/2026.**
* **Correctif appliqué :** Une méthode unique `libelleEtapeBL()` a été introduite dans le contrôleur ; l'export Excel l'utilise et restitue donc exactement les libellés affichés à l'écran (0 EN PREPARATION, 1 EN PRE-RECEPTION, 2 EXPEDIEE, 3 EN RECEPTION, 4 BL VALIDE, 5 COMPTABILISE).

### AN-012 — Propriété lue sur une collection au lieu d'un élément lors de la suppression d'un bon de livraison

* **Fonctionnalité concernée :** suppression d'un bon de livraison.
* **Comportement observé :** l'agence de réception est lue sur la collection des bons de livraison sélectionnés au lieu de l'être sur le bon de livraison en cours de traitement. La valeur obtenue est toujours indéfinie ; le code retombe alors sur l'agence par défaut. Le résultat est correct par accident tant que la réception se fait à la centrale, mais deviendrait faux dès qu'une réception serait rattachée à une autre agence.
* **Comportement attendu :** lire la propriété sur l'élément courant de la boucle.
* **Fichier(s) concerné(s) :** `app/Http/Controllers/achats/PreReceptionEnCoursController.php` (`deletePreReception`, ligne ~172). Le même schéma existe dans `deleteBlLigne`, où une collection est transmise à une fonction attendant un élément.
* **Gravité :** Faible (latent).

### AN-013 — Agence de réception des achats codée en dur

* **Fonctionnalité concernée :** validation d'une réception fournisseur.
* **Comportement observé :** l'agence de réception du bon de livraison est forcée à la valeur 1, et l'entrée en stock est écrite sur l'agence 1, indépendamment du site réellement sélectionné. Le fonctionnement est correct dans la configuration actuelle (la centrale porte l'identifiant 1), mais il n'est pas paramétrable.
* **Comportement attendu :** utiliser l'identifiant de la centrale issu du paramétrage.
* **Fichier(s) concerné(s) :** `app/Http/Controllers/achats/PreReceptionEnCoursController.php` (`validerBonReceptionLogic` ligne ~3409, `ActualiseStock` ligne ~6372).
* **Gravité :** Faible.

### AN-014 — La liste déroulante de zone de réception se désactive en cascade

* **Fonctionnalité concernée :** écran de traitement d'un transfert inter-site.
* **Comportement observé :** la variable qui pilote l'activation de la liste déroulante « Zone de Réception » est positionnée à « désactivé » dès qu'une ligne rangée est rencontrée, mais elle n'est pas réinitialisée au début de chaque ligne. Toutes les lignes suivantes héritent de cet état, même si elles ne sont pas rangées. Par ailleurs, cette liste est systématiquement désactivée lorsque l'utilisateur est positionné sur le site de départ.
* **Comportement attendu :** réinitialiser l'état à chaque ligne.
* **Fichier(s) concerné(s) :** `app/Http/Controllers/stocks/transfertInterSiteController.php` (`index`, lignes ~68 à 160).
* **Gravité :** Faible.

### AN-015 — Libellés du filtre « Etape » de la liste des commandes inadaptés à la variante multi-dépôts

* **Fonctionnalité concernée :** filtre **Etape** de l'écran Liste des commandes.
* **Comportement observé :** les libellés proposés sont NON RECEPTIONEE / RECEPTION PARTIEL / RECEPTIONNEE. Dans la variante multi-dépôts de l'application (paramètre « ModeGpharma » égal à 2), le traitement associé filtre en réalité sur « commande validée » et « commande à l'étape 2 », ce qui ne correspond pas aux libellés affichés. De plus, dans cette même variante, la condition « commande validée » étant testée avant la condition « étape 2 », le statut TRANSMISE ne peut jamais s'afficher.
* **Comportement attendu :** libellés et filtres cohérents dans les deux variantes.
* **Fichier(s) concerné(s) :** `app/Http/Controllers/achats/listeCommandesController.php` (`listeCommande`, lignes ~160 à 300) et `resources/views/pages/achats/liste_commande.blade.php` (lignes 206 à 211).
* **Remarque :** sans effet dans l'installation analysée, dont le paramètre vaut 3 et qui utilise donc la branche standard.
* **Gravité :** Faible.

### AN-016 — Fonctions du fractionnement de transfert partiellement inopérantes

* **Fonctionnalité concernée :** option de fractionnement proposée à la validation d'un transfert.
* **Comportement observé :** dans le troisième cas de répartition (couverture supérieure à 1 mois), l'identifiant du transfert de destination n'est pas correctement affecté avant d'être utilisé pour rattacher les lignes ; certaines lignes peuvent être rattachées à un identifiant nul. Le premier cas réutilise par ailleurs directement le transfert d'origine, ce qui rend l'affectation des trois groupes dépendante de l'ordre de parcours des lignes.
* **Comportement attendu :** créer explicitement les trois transferts puis répartir les lignes.
* **Fichier(s) concerné(s) :** `app/Http/Controllers/stocks/transfertInterSiteController.php` (`PL_FractionnerTransfert`, lignes ~4048 à 4075).
* **Gravité :** Moyen.

### AN-017 — Statut de commande fondé sur la mise en préréception et non sur la réception réelle

* **Fonctionnalité concernée :** colonne **Etat** de la liste des commandes.
* **Comportement observé :** le statut est calculé en comptant les lignes de commande rattachées à une ligne de bon de livraison, **sans tenir compte du fait que ce bon de livraison soit validé ou non**. Une commande affiche donc RECEPTIONNEE dès qu'elle a été mise en préréception, même si la marchandise n'est jamais entrée en stock.
* **Comportement attendu :** distinguer « mise en préréception » et « réceptionnée », ou restreindre le comptage aux bons de livraison validés.
* **Fichier(s) concerné(s) :** `app/Http/Controllers/achats/listeCommandesController.php` (`listeCommande`, lignes ~133 à 140).
* **Gravité :** Moyen (source de confusion utilisateur importante).

### AN-018 — Boutons d'expédition et de mise en réception invisibles dans cette installation

* **Fonctionnalité concernée :** boutons « Valider expédition » et « Démarrer réception » de la liste des préréceptions.
* **Comportement observé :** ces deux boutons, et les étapes EXPEDIEE et EN RECEPTION qui leur correspondent, ne sont affichés que dans la variante multi-dépôts de l'application. Dans l'installation analysée, ils n'apparaissent pas et le bon de livraison passe directement de EN PRE-RECEPTION à BL VALIDE. Les libellés d'étapes correspondants restent néanmoins présents dans l'interface.
* **Comportement attendu :** confirmer avec la maîtrise d'ouvrage si ces étapes doivent être activées ; sinon, retirer les libellés inutilisés.
* **Fichier(s) concerné(s) :** `resources/views/pages/achats/pre_reception_en_cours.blade.php` (lignes 106 à 117 et 4582 à 4610).
* **Gravité :** Faible (point à clarifier).

---

## Annexe B — Points non déterminables à partir du code seul

Les éléments suivants n'ont pas pu être établis avec certitude par la seule lecture du code et doivent être confirmés par l'équipe projet ou par un essai sur l'application :

1. **Contenu exact des états imprimés.** Les modèles PDF (bon d'achat, bordereau de réception, bordereau par zone, état des ruptures, évolutions de prix, état de dédouanement, bordereau de transfert, rapport d'écart) n'ont pas été détaillés champ par champ. Seuls leur déclenchement et leur portée fonctionnelle sont documentés.
2. **Formules détaillées du calcul du prix de revient.** Le recalcul « Prix Revient - Cession - Public » s'appuie sur des règles propres à chaque pays et à chaque mode d'expédition. Le manuel en décrit l'objet et les paramètres d'entrée, mais pas la formule complète.
3. **Algorithme de suggestion de commande.** Les règles de calcul des quantités suggérées (produits saisonniers, catégories de rotation, seuils, arrondis fournisseur) sont volumineuses et exécutées en arrière-plan ; elles mériteraient une note fonctionnelle dédiée.
4. **Génération automatique des transferts** (instances de rupture, nivellement automatique, remplacement de lots) : le manuel décrit les boutons et leur finalité, mais pas les critères de sélection détaillés.
5. **Écran « Transfert inter-site en nivellement »**, qui dispose de son propre écran et de ses propres règles ; il n'est mentionné que par son type dans ce document.
6. **Chaîne de comptabilisation** (boutons « Comptabiliser le départ / la réception », écritures comptables générées) : hors périmètre du manuel.
7. **Format exact des fichiers d'import** de la préréception et du transfert : seul l'en-tête attendu a pu être identifié ; il convient de valider un modèle de fichier avec les utilisateurs.
8. **Comportement en mode « douchette »** (lecteurs de codes-barres) : des indicateurs existent en base pour la collecte et la réception sur douchette, mais l'application web analysée n'expose pas cet écran.
