Rachat d'appareil
Le module Rachat permet d'encaisser un appareil d'occasion auprès d'un client particulier ou pro. La législation française impose un livre de police dès que la valeur dépasse 60 € : identité du vendeur, photo de sa pièce d'identité, signature, traçabilité de l'objet (IMEI / N° série). FixVault automatise le respect de ces obligations.
1. Quand utiliser le rachat
- Reprise dans une vente : un client achète un nouvel appareil et vous rend l'ancien. Le rachat vient en déduction du panier (ligne négative sur la facture).
- Rachat sec : achat opportuniste à un vendeur, sans vente associée (revente future en occasion).
- Trade-in en ligne : flow automatisé (mail au client → estimation IA → expédition prépayée → encaissement à réception).
2. Wizard d'encaissement (POS → onglet Achat d'appareil)
Le wizard suit 4 étapes incrémentales :
Étape 1 — Appareil
- Catégorie (Smartphone / Tablet / Laptop / Watch / Console / Desktop)
- Marque + Modèle (combobox connectés au catalogue DeviceBrand / DeviceModel ; création à la volée si l'appareil n'existe pas encore)
- IMEI / N° série (obligatoire pour smartphones et consoles)
- Couleur (depuis le catalogue IA enrichi, sinon saisie libre)
- Stockage (options dynamiques par catégorie)
Étape 2 — État
Checklist des tests fonctionnels par catégorie (cf. configuration
tenant.settings.repairCategoryConfig.conditions). Chaque test cycle
sur 3 états : Non testé → OK → HS → Non testé. Bulk actions : Tout
OK / Tout HS / Réinitialiser. Le compteur header "X/N testés · Y OK ·
Z HS" guide le tech.
Étape 3 — Estimation IA (optionnelle)
Bouton Estimer prix IA : déclenche POST /api/ai/buyback-price-estimate
qui renvoie :
marketPriceMin/marketPriceMax(fourchette revente)suggestedBuyback(prix d'achat conseillé, capé àmarketPriceMax)confidence(low / medium / high)requiresId(vrai dès que prix > 60 € — indicateur livre de police)
Cache Redis 24 h sur la signature (catégorie + marque + modèle + état) pour éviter de payer 2× la même requête IA.
Étape 4 — Identité (livre de police)
Si le prix de rachat > 60 € (seuil légal BUYBACK_IDENTITY_THRESHOLD) :
- Type de pièce : CNI / Passeport / Permis de conduire / Titre de séjour
- Numéro de la pièce
- Date de délivrance
- Photos : recto + verso (upload via Multer, max 50 MB)
- Signature client sur la tablette face client (
facing-display, modebuyback)
3. Modes de paiement vendeur
| Méthode | Cas d'usage | FiscalEntry |
|---|---|---|
| Espèces | Standard, paiement immédiat | BUYBACK CASH (-) |
| Carte (CB → vendeur) | Si configuré sur TPE | BUYBACK CARD (-) |
| Virement | Au-delà de 1 000 € (recommandé) | BUYBACK TRANSFER (-) |
| Avoir magasin | Bon d'achat à valoir sur futur achat | BUYBACK STORE_CREDIT (-) |
L'argent sort de la caisse → impact direct sur expectedCash à la
clôture.
4. Reconditionnement
Une fois le rachat encaissé (statut COMPLETED), l'appareil peut être :
- Réparé (création d'un Ticket interne, pièces puisées dans l'inventaire)
- Reconditionné en InventoryItem (statut
REFURBISHED) — endpointPOST /api/buybacks/:id/convert - Mis en vente directe (POS / boutique en ligne) avec garantie 6 mois minimum (loi consommation FR) ou 12 mois si neuf reconditionné
5. Conformité légale
| Obligation | Implémentation FixVault |
|---|---|
| Livre de police | Buyback row immutable + AuditLog horodaté |
| Identité vendeur ≥ 60 € | Validation Zod sur le wizard + photos signées |
| Signature client | Canvas signature sur facing-display, persisté en base64 |
| Conservation 5 ans | Postgres + backup quotidien (cf. fiscal-compliance) |
| Déclaration auprès des forces de l'ordre | Export CSV mensuel via /api/buybacks?status=COMPLETED&format=csv (manuel) |
| TVA sur la marge | Régime spécial occasion : TVA calculée sur (prix vente - prix achat), pas sur le total |
6. Routes API utiles
# Liste des rachats du mois
curl -sS -H "Authorization: Bearer $TOKEN" \
"https://app.fixvault.fr/api/buybacks?dateFrom=2026-05-01"
# Création unifiée (POS — Buyback + Payment + FiscalEntry)
curl -sS -X POST https://app.fixvault.fr/api/buybacks/complete \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"category": "Smartphone",
"brand": "Apple", "model": "iPhone 13",
"serial": "356789012345678",
"color": "Bleu", "storage": "128Go",
"condition": "Bon état",
"price": 280,
"paymentMethod": "CASH",
"identityType": "CNI", "identityNumber": "1234567890",
"identityIssuedAt": "2020-01-15"
}'
Pour la liste complète : voir API & Intégrations § 23.
7. Bonnes pratiques
- Toujours vérifier l'IMEI sur GSMA (vérifier que l'appareil n'est pas blacklisté / volé) — onglet "Statut IMEI" dans le détail rachat.
- Photo claire de la pièce d'identité (lisible, non floue) — le système refuse les fichiers > 50 MB et avertit si la résolution est < 800 px.
- Confidentialité : les photos d'identité sont stockées chiffrées at-rest et n'apparaissent pas dans le portail client. Seul le tenant ADMIN y accède.
- Reconditionnement systématique avant revente : éviter de revendre un rachat sans test complet (risque de retour client + image de marque).