Aller au contenu principal

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, mode buyback)

3. Modes de paiement vendeur

MéthodeCas d'usageFiscalEntry
EspècesStandard, paiement immédiatBUYBACK CASH (-)
Carte (CB → vendeur)Si configuré sur TPEBUYBACK CARD (-)
VirementAu-delà de 1 000 € (recommandé)BUYBACK TRANSFER (-)
Avoir magasinBon d'achat à valoir sur futur achatBUYBACK 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 :

  1. Réparé (création d'un Ticket interne, pièces puisées dans l'inventaire)
  2. Reconditionné en InventoryItem (statut REFURBISHED) — endpoint POST /api/buybacks/:id/convert
  3. 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

ObligationImplémentation FixVault
Livre de policeBuyback row immutable + AuditLog horodaté
Identité vendeur ≥ 60 €Validation Zod sur le wizard + photos signées
Signature clientCanvas signature sur facing-display, persisté en base64
Conservation 5 ansPostgres + backup quotidien (cf. fiscal-compliance)
Déclaration auprès des forces de l'ordreExport CSV mensuel via /api/buybacks?status=COMPLETED&format=csv (manuel)
TVA sur la margeRé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).