Service Après-Vente
Le module SAV gère deux types de retours, distincts mais liés :
- Retour client — un client revient avec un appareil réparé qui pose à nouveau problème (sous garantie ou hors garantie)
- Retour fournisseur (RF-####) — vous renvoyez à votre fournisseur une pièce défectueuse pour remboursement / échange
1. Retour client sous garantie
Recherche garantie
Endpoint : GET /api/sav/warranty-check?serial=...&imei=...
Cherche tous les tickets (cross-tenant si super-admin) où l'IMEI ou le n° série a été réparé, et renvoie :
- Liste des réparations (ticket + facture + date + technicien)
- Garantie active ? (
warrantyEndDate > now()) - Lignes encore couvertes (chaque InvoiceLine.warrantyDays défini à la création peut être différent selon le type — main d'œuvre 90j, écran 6 mois, batterie 1 an, etc.)
Création du ticket SAV
Bouton "Créer ticket SAV" sur la fiche garantie → POST /api/sav/tickets
qui :
- Crée un nouveau Ticket lié au ticket d'origine (
parentTicketId) - Pré-remplit l'appareil et le client
- Marque
isFreeFix: truesi sous garantie (pas de facture, pas de POS flow) - Suggère les pièces du ticket d'origine pour ré-utilisation
Si ré-réparation gratuite
- Aucune facture créée
- Stock décrémenté normalement (la pièce est consommée)
- Le ticket d'origine reste lié pour la traçabilité — utile en cas de litige client ou audit fiscal
2. Remboursement client
Endpoint : POST /api/sav/refund — alternative à
PATCH /api/invoices/:id/status avec status: REFUNDED quand le
remboursement n'est pas total.
Le remboursement génère :
- 1
FiscalEntryREFUND par paiement à rembourser (aveccashSessionIdpréservé pour la ventilation par caisse) - Restauration du stock (pour les lignes PART/PRODUCT)
- Re-crédit des points fidélité si paiement LOYALTY
- Réintégration du buyback associé (si la vente comprenait un rachat)
Conformité NF525
La trace SALE originale n'est jamais effacée (chaîne SHA-256
append-only). Le journal montre la séquence : SALE +89 € → REFUND -89 €,
net = 0 €, ce qui est exactement ce qu'attend l'administration fiscale
en cas de contrôle.
3. Retour fournisseur (RF-####)
Lorsqu'une pièce est défectueuse à l'arrivée ou dans la période de garantie fournisseur, on déclenche un retour.
Création
Page /sav → onglet "Retours fournisseur" → bouton "Nouveau retour".
Champs :
- Fournisseur (autocomplete depuis
Supplier) - Pièce concernée (autocomplete depuis
InventoryItem) - Quantité, lot, date d'achat (si trouvé dans un PO)
- Motif (DOA / panne précoce / conformité / esthétique)
- Mode de retour souhaité : avoir / remplacement / remboursement
- Tracking (numéro de suivi du retour)
Workflow
DRAFT → SHIPPED (envoyé au fournisseur) → ACKNOWLEDGED (fournisseur a
reçu) → RESOLVED (avoir / remplacement / remboursement reçu) → CLOSED
Endpoints
GET /api/sav/supplier-returns— liste filtrablePATCH /api/sav/supplier-returns/:id— modifier statut + trackingDELETE /api/sav/supplier-returns/:id— supprimer (DRAFT only)
4. Recherche unifiée SAV
Endpoint : GET /api/sav/search?keyword=... qui parcourt :
- Tickets (par client, IMEI, n° série, ticketCode)
- Factures (par invoiceCode, customer email, mobile)
- Appareils (par IMEI, n° série, deviceModel.name)
Utile quand le client se présente avec juste "j'ai un iPhone qui marche plus" sans n° de ticket.
5. Stats SAV
GET /api/sav/stats renvoie :
- Taux de retour client (nb retours / nb tickets) — alerte si > 5 %
- Taux de retour fournisseur par fournisseur (qualité)
- Pièces les plus retournées (top 10)
- Coût SAV moyen par appareil (pertes nettes après avoirs reçus)
À regarder mensuellement pour identifier :
- Un fournisseur qui livre des pièces de mauvaise qualité (à blacklister)
- Un type de réparation à risque (à valoriser via tarifs)
- Un tech qui rate plus de réparations que la moyenne (à former)
6. Bonnes pratiques
- Toujours rattacher le ticket SAV au ticket d'origine
(
parentTicketId) — sinon la traçabilité est perdue - Préserver la garantie : si un client revient avant
warrantyEndDate, ne facturez pas même si la nouvelle panne est différente — le respect d'une garantie totale donne confiance et fidélise - Photo systématique de la pièce défectueuse côté retour fournisseur — utile en cas de litige (le fournisseur peut contester un DOA sans preuve)
- Tracking obligatoire sur les retours > 50 € — vous éviterez les "perdu en transit" qui font perdre l'avoir
- Remboursement plutôt qu'avoir quand le client le demande — un avoir non utilisé devient une dette comptable + un client mécontent
7. Routes API utiles
# Recherche garantie sur un IMEI
curl -sS -H "Authorization: Bearer $TOKEN" \
"https://app.fixvault.fr/api/sav/warranty-check?imei=356789012345678"
# Stats SAV des 30 derniers jours
curl -sS -H "Authorization: Bearer $TOKEN" \
"https://app.fixvault.fr/api/sav/stats?period=30d"
# Création retour fournisseur
curl -sS -X POST https://app.fixvault.fr/api/sav/supplier-returns \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"supplierId": "uuid-fournisseur",
"items": [{"inventoryItemId": "uuid-piece", "quantity": 2, "reason": "DOA"}],
"expectedResolution": "REFUND"
}'
Pour la liste complète : voir API & Intégrations § 26.