# Analyse de la Structure de Gestion des Stocks
## Hôpital Psychiatrique de Bingerville

### 📊 Tables Existantes

1. **users** - Utilisateurs du système
2. **departments** - Départements/Services de l'hôpital
3. **suppliers** - Fournisseurs
4. **categories** - Catégories (alimentaire, entretien, fournitures, etc.)
5. **products** - Produits/Articles
6. **stocks** - Stock actuel par produit
7. **movement_stocks** - Mouvements de stock (entrée, sortie, transfert, etc.)
8. **requests** - Demandes (approvisionnement, transfert)
9. **request_details** - Détails des demandes
10. **equipment** - Équipements (suivi spécifique)

---

## ✅ Points Forts de la Structure Actuelle

- ✅ Gestion complète des catégories (alimentaire, entretien, etc.)
- ✅ Système de mouvements de stock bien pensé
- ✅ Gestion des demandes (requests) pour approvisionnement et transfert
- ✅ Traçabilité avec `user_id` sur toutes les tables
- ✅ Séparation équipements/produits consommables
- ✅ Gestion des fournisseurs

---

## ⚠️ Points à Améliorer

### 1. **Emplacements de Stockage (Locations/Warehouses)** ❌ NON NÉCESSAIRE
**Contexte** : Stock centralisé dans un seul entrepôt. Les départements récupèrent directement sans stockage local.

**Décision** : Pas besoin de table `locations`. Le champ `department_id` dans `movement_stocks` suffit pour identifier la destination des sorties.

### 2. **Dates de Péremption et Lots**
**Problème** : Critique pour l'alimentaire et le biomédical. Pas de traçabilité par lot.

**Solution** : Ajouter `expiry_date` et `batch_number` dans les mouvements ou créer une table `stock_lots`

### 3. **Unité de Mesure**
**Problème** : Les quantités sont en `integer` mais pas d'unité (unité, kg, L, m², etc.)

**Solution** : Ajouter une table `units` et `unit_id` dans `products`

### 4. **Prix et Coûts**
**Problème** : Pas de gestion des prix d'achat/vente pour la comptabilité

**Solution** : Ajouter `unit_price` dans `products` ou `movement_stocks`

### 5. **Redondance Table `stocks`**
**Problème** : La table `stocks` peut être calculée à partir de `movement_stocks`. Risque de désynchronisation.

**Solution** : Clarifier si `stocks` = stock par emplacement ou stock global. Préférer calculer depuis les mouvements.

### 6. **Table `equipment`**
**Problème** : Relation avec `product` mais tous les produits ne sont pas des équipements.

**Solution** : Ajouter un champ `is_equipment` dans `products` ou créer une table pivot

### 7. **Champs Manquants dans `products`**
- Unité de mesure
- Prix unitaire
- Code-barres/EAN
- Image/photo
- Statut (actif/inactif)

### 8. **Champs Manquants dans `movement_stocks`**
- Date de péremption (pour les entrées)
- Numéro de lot
- Prix unitaire (pour les entrées)
- ~~Emplacement source/destination~~ ❌ NON NÉCESSAIRE (stock centralisé, `department_id` suffit)

### 9. **Table `requests`**
- Manque `requested_date` (date de demande)
- Manque `delivery_date` (date de livraison prévue)
- Les champs `approved_by`, `rejected_by` devraient être nullable

---

## 🔧 Recommandations d'Amélioration

### Priorité HAUTE (Critique pour l'hôpital)

1. ~~**Ajouter gestion des emplacements**~~ ❌ NON NÉCESSAIRE (stock centralisé)
2. **Ajouter dates de péremption** - Pour alimentaire et biomédical
3. **Ajouter unités de mesure** - Table `units`
4. **Corriger les contraintes** - `approved_by`, `rejected_by` doivent être nullable

### Priorité MOYENNE

5. **Ajouter prix unitaires** - Pour comptabilité
6. **Ajouter numéros de lot** - Traçabilité
7. **Ajouter code-barres** - Dans `products`
8. **Clarifier table `stocks`** - Ou la supprimer si calculable

### Priorité BASSE

9. **Ajouter images produits**
10. **Ajouter statuts produits**

---

## 📋 Structure Recommandée Complémentaire

### ~~Table `locations` (Emplacements)~~ ❌ NON NÉCESSAIRE
**Raison** : Stock centralisé. Le champ `department_id` dans `movement_stocks` identifie la destination des sorties.

### Table `units` (Unités de mesure)
- id
- name (ex: "Unité", "Kg", "Litre", "m²")
- abbreviation (ex: "U", "kg", "L", "m²")
- timestamps

### Table `stock_lots` (Lots de stock - optionnel)
- id
- product_id
- batch_number
- expiry_date
- quantity
- unit_price
- timestamps

---

## 🎯 Conclusion

**Votre structure de base est COHÉRENTE** et bien pensée pour un système de gestion de stocks hospitalier. 

**Les améliorations suggérées** permettront de :
- ✅ Suivre les dates de péremption (critique hôpital)
- ✅ Améliorer la traçabilité avec les lots
- ✅ Gérer correctement les unités de mesure
- ✅ Intégrer la comptabilité avec les prix
- ✅ Utiliser `department_id` pour identifier les destinations (pas besoin de locations)

**Note** : La structure actuelle peut fonctionner, mais ces améliorations la rendront plus robuste et adaptée aux besoins spécifiques d'un hôpital.

