← Phase 2 Overview / Budget & Vie Pratique
💊
Module 14 — Phase 2

Budget, Devises, Santé, eSIM & Assurance

Tracker de budget voyage complet, conversion devises inline, informations santé et vaccins, eSIM locales via Airalo et assurance voyage intégrée.

Backlog

User Stories

US14.1
En tant qu'utilisateur, je peux créer un budget voyage (poste par poste : transport, hébergement, food, activités)
must 8pts
US14.2
En tant qu'utilisateur, je peux entrer mes dépenses réelles et voir le delta vs budget prévu
must 5pts
US14.3
En tant qu'utilisateur, je vois un graphique de mes dépenses par jour et par catégorie
must 4pts
US14.4
En tant qu'utilisateur, je reçois une alerte si je dépasse mon budget de 20%
must 3pts
US14.5
En tant qu'utilisateur, je vois les taux de change inline dans toutes les interfaces de coût
must 5pts
US14.6
En tant qu'utilisateur, je peux convertir rapidement une somme dans n'importe quelle devise (calculatrice)
must 3pts
US14.7
En tant qu'utilisateur, je vois les vaccins recommandés et obligatoires pour ma destination
must 4pts
US14.8
En tant qu'utilisateur, je peux commander une eSIM locale ou régionale pour ma destination (Airalo)
must 8pts
US14.9
En tant qu'utilisateur, je peux comparer et souscrire une assurance voyage (World Nomads)
must 6pts
US14.10
En tant qu'utilisateur, le copilote estime automatiquement le budget d'un itinéraire généré
must 5pts
US14.11
En tant qu'utilisateur, je peux exporter mon budget en PDF ou CSV
should 3pts
/budget & /lifestyle

Endpoints API

POST /budget/trips Créer un budget voyage lié à un itinéraire 🔒 auth
GET /budget/trips Mes budgets voyages 🔒 auth
GET /budget/trips/:id Détail budget (prévisionnel + réel) 🔒 auth
POST /budget/trips/:id/expenses Ajouter une dépense réelle 🔒 auth
GET /budget/trips/:id/expenses Liste dépenses (paginé + filtres) 🔒 auth
GET /budget/trips/:id/analytics Graphiques : par jour, par catégorie 🔒 auth
GET /budget/trips/:id/export Export PDF / CSV 🔒 auth
GET /currencies/rates Taux temps réel (?base=EUR) public
GET /currencies/convert ?amount=&from=&to= public
GET /health/vaccines/:countryCode Vaccins requis/recommandés public
GET /esim/plans Plans eSIM disponibles pour une destination (Airalo) public
POST /esim/purchase Achat eSIM (Stripe + Airalo) 🔒 auth
GET /insurance/plans Plans assurance voyage (World Nomads) public
POST /insurance/quote Devis assurance (body: trip details) 🔒 auth
Schémas de données

Tables Budget & Lifestyle

TABLE trip_budgets
id UUID PRIMARY KEY user_id UUID REFERENCES users(id) itinerary_id UUID REFERENCES itineraries(id) title TEXT currency CHAR(3) DEFAULT 'EUR' planned_total DECIMAL(10,2) planned_breakdown JSONB -- {transport, lodging, food, activities, misc} actual_total DECIMAL(10,2) DEFAULT 0 start_date DATE end_date DATE created_at TIMESTAMPTZ DEFAULT NOW()
TABLE trip_expenses
id UUID PRIMARY KEY budget_id UUID REFERENCES trip_budgets(id) category ENUM('transport','lodging','food','activity','misc') description TEXT amount DECIMAL(10,2) currency CHAR(3) amount_eur DECIMAL(10,2) -- converti au taux du jour place_id UUID REFERENCES places(id) receipt_url TEXT -- photo reçu optionnelle spent_at TIMESTAMPTZ DEFAULT NOW()
Business Logic

Règles Métier

💱
Conversion devises inline
Chaque interface affichant un prix (post, food, hébergement, activité) dispose d'un bouton de conversion rapide. Le taux est celui du cache Redis (mis à jour toutes les heures).
📊
Analytics budget
Graphiques Chart.js (React Native Skia) : line chart dépenses/jour, pie chart par catégorie, barre de progression planned vs actual. Données calculées côté serveur (aucun calcul lourd côté mobile).
📱
eSIM Airalo
Airalo Partner API : GET /packages?destination_code=FR → liste eSIMs disponibles avec prix, validité, data. Achat via Stripe (NOMIIQ prend 12% de commission). eSIM livrée en QR code par email.
🏥
Assurance World Nomads
Affiliation World Nomads : redirect avec paramètres pré-remplis (destination, dates, nb voyageurs). Commission 20% sur souscription. Pas de checkout intégré Phase 2.
🔔
Alerte dépassement budget
Si actual_total > planned_total × 1.2 → notification push "Vous avez dépassé votre budget de X€". Envoyée 1x par dépassement palier (20%, 50%, 100%).
Critères d'acceptation
Budget créé en < 2s, graphiques chargés en < 1s
Conversion devise : aucun appel réseau (cache local React Query)
eSIM disponible dans les résultats pour 100% des destinations Airalo
Alerte dépassement envoyée dans les 5 min après ajout de la dépense