# Phase 27 : Mode Hors-ligne

**Priorité :** P4
**Complexité :** TRES HAUTE
**Routes :** ~2
**Entités :** 0

---

## Objectif

Permettre à l'interface caissier de fonctionner sans connexion internet et synchroniser les ventes ensuite.

---

## Architecture

### Côté Client
- **Service Worker** : met en cache l'application caissier (HTML/CSS/JS)
- **IndexedDB** : stocke le catalogue produits en local (sync périodique)
- **File d'attente locale** : ventes créées hors-ligne stockées en IndexedDB
- **Sync automatique** : quand la connexion revient, POST les ventes vers l'API

### Côté Serveur
- **Endpoint sync** : `POST /api/v1/pos/sync` — reçoit un batch de ventes hors-ligne
- **Gestion conflits** : vérifier stock disponible, gérer les numéros de vente (préfixe offline)
- **Rapport sync** : retourne le résultat (ventes acceptées, conflits)

### Défis techniques
1. **Numérotation ventes** : séquences hors-ligne avec préfixe `OFF-` puis renommées au sync
2. **Stock** : peut être négatif temporairement si deux caisses vendent le même produit offline
3. **Cache produits** : actualiser le catalogue quand la connexion revient
4. **Conflits prix** : si un prix change pendant l'offline, utiliser le prix au moment de la vente

---

## Prérequis
- Phase 26 (API Mobile) doit être implémentée en premier
- Le refactoring de l'interface caissier pour fonctionner en SPA complète

## Complexité
C'est la phase la plus complexe du projet. À envisager uniquement si le besoin offline est confirmé par les utilisateurs terrain.
