# PRD — Xpeditis (MVP)

**Produit** : Xpeditis — plateforme B2B SaaS de réservation et gestion de fret maritime (équivalent maritime de WebCargo).

**Auteur** : Architecte logiciel senior (Hexagonal) — NextTs

**Objectif du document** : Décrire les besoins produit, les exigences fonctionnelles et techniques, les critères d'acceptation et la feuille de route pour livrer le MVP sous 4–6 mois.

---

## 1. Contexte & vision

Xpeditis fournit aux transitaires (freight forwarders) une interface unique pour :

* Rechercher et comparer des tarifs maritimes en temps réel
* Réserver des conteneurs en ligne
* Gérer le cycle de vie des expéditions depuis un dashboard centralisé

**Vision MVP** : Livrer un produit minimal mais professionnel capable d'absorber 50–100 réservations/mois pour 10–20 transitaires early adopters et valider l'adéquation marché.

---

## 2. Objectifs business & KPI du MVP

**Objectifs** :

* Onboard 10–20 transitaires pilotes en 4–6 mois
* Traiter 50–100 réservations/mois
* Taux de conversion recherche→réservation ≥ 3%
* SLA recherche tarifs : 95% des requêtes < 1s (caching inclus)

**KPI** :

* Nombre d’utilisateurs actifs (DAU/MAU)
* Nombre de bookings / mois
* Taux d’erreurs API carriers
* Temps moyen pour créer une réservation
* Taux de rétention clients à 3 mois

---

## 3. Périmètre du MVP (Fonctionnalités critiques)

Priorités : CRITIQUE (Recherche tarifs, Réservation, Intégration carriers) ; HAUT (Auth, Dashboard). Modules détaillés ci‑dessous reprennent et transforment les spécifications fournies en exigences mesurables.

### MODULE 1 — Recherche de tarifs (CRITIQUE)

**Fonctionnalités** :

* Endpoint API : `POST /api/v1/rates/search` (payload JSON, voir *Schemas*)
* UI responsive : formulaire recherche + résultats en **cards** et en **tableau**
* Critères : origine, destination (autocomplete 10k+ ports), conteneur, mode (FCL/LCL), date départ, poids/volume (LCL), marchandises dangereuses (classe IMO)
* Résultats : carrier (logo), prix all-in (USD/EUR), surcharges détaillées, transit time (jours), ETD/ETA estimés, route (escales), disponibilité conteneurs, fréquence service, type navire, CO2 par conteneur
* Filtrage & tri (prix, transit time, CO2), pagination (>20 résultats), export PDF/Excel

**Contraintes techniques** :

* Cache Redis (TTL = 15 min pour tarifs spot)
* Préchargement tarifs top 100 trade lanes (batch ou préfetch on startup)
* Timeout API carriers = 5s, gestion des erreurs gracieuse
* Retry / circuit breaker pour connectors

**Livrables** :

* `POST /api/v1/rates/search` + tests unitaires
* UI responsive (NextTs + React) résultats cards/table
* OpenAPI/Swagger
* Export PDF/Excel

**Critères d'acceptation** :

* Requête type (origine/destination/contener/date) retourne < 2s 90% du temps (avec cache)
* Tests unitaires couvrant comportements clé (cache hit/miss, fallback carriers)

### MODULE 2 — Réservation (CRITIQUE)

**Workflow multi‑étapes (≤4 étapes)** :

1. Sélection de l'offre (vérif dispo temps réel)
2. Informations expéditeur/destinataire
3. Détails conteneur
4. Confirmation + T&C

**Comportement post-booking** :

* Génération booking number `WCM-YYYY-XXXXXX`
* Email confirmation HTML (MJML)
* Notification push (si appli mobile)
* Dashboard : entrée avec statut `Pending Confirmation`

**API** :

* `POST /api/v1/bookings` (création)
* `GET /api/v1/bookings/:id` (détail)

**Livrables** :

* Formulaire multi‑étapes (validation front + back)
* Template email MJML
* PDF booking confirmation
* Tests end-to-end (E2E)

**Critères d'acceptation** :

* Processus de booking complet testé E2E (happy path + 3 erreurs courantes)
* Booking créé et visible en dashboard avec PDF généré et email envoyé

### MODULE 3 — Gestion des utilisateurs (HAUT)

**Auth & sécurité** :

* Inscription email+pwd (pwd ≥12 chars, complexité)
* Verification email par token
* Login OAuth2 (Google Workspace, Microsoft 365)
* JWT access 15 min / refresh 7 jours
* TOTP 2FA optionnel
* Reset password sécurisé
* Session auto logout 2h inactivité

**Organisation & RBAC** :

* Profils entreprise (company metadata, logo, documents compliance)
* Roles : Admin, Manager, User, Viewer (RBAC)

**Livrables** :

* Routes `/auth/register`, `/auth/login`, `/auth/logout`, `/auth/refresh`
* Middleware d'auth pour protéger routes API
* Admin panel pour gestion users
* Onboarding flow
* Tests de sécurité (OWASP Top10 checklist)

**Critères d'acceptation** :

* Inscription + vérif email fonctionnelles
* OAuth login testés sur GSuite
* RBAC empêche accès non autorisé (tests)

### MODULE 4 — Dashboard transitaire (HAUT)

**Vue d’ensemble** :

* KPI cards (bookings/mois, TEUs, revenus estimés, pending)
* Charts (6 mois bookings, top trade lanes)
* Alertes (retards, confirmations)

**Liste bookings** :

* Table interactive (search fuzzy, filtres, tri, pagination)
* Détail booking : timeline, docs, audit log, notes internes
* Actions : view, edit, cancel, download

**Livrables** :

* Dashboard responsive (Recharts/Chart.js)
* Table (react-table) avec performance <1s load sur 1000 bookings

**Critères d'acceptation** :

* Dashboard charge <1s pour dataset MVP (jusqu’à 5k rows backend)

### MODULE 5 — Intégration carriers (CRITIQUE)

**Phase 1 (MVP)** : intégrations natives 3–5 carriers prioritaires : Maersk, MSC, CMA CGM, Hapag‑Lloyd, ONE

**Pattern** :

* Connecteur par carrier (Strategy pattern)
* Normalisation -> schéma interne commun (Rates, Surcharges, ETD/ETA, Equipment availability)
* Retry, circuit breaker, logs et métriques
* Rate limiting respecté
* Tests d’intégration

**Livrables** :

* 3 connecteurs opérationnels (au minimum Maersk + 2 autres)
* Mapping data -> schéma interne
* Tests d'intégration automatiques

**Critères d'acceptation** :

* Chaque connecteur répond dans 5s ou bascule sur fallback
* Logs détaillés pour debugging

---

## 4. Architecture technique (haut niveau)

### Principes

* Architecture hexagonale (ports & adapters)
* Backend API-first (OpenAPI), séparation claire domaine / infra
* Frontend NextJS (TypeScript) — SSR/ISR selon besoin
* Base de données relationnelle (Postgres) + Redis cache
* Files/objects : S3-compatible (AWS S3 / MinIO)
* Auth : OAuth + JWT
* Deploy : Docker + orchestrator (k8s) ou Vercel (frontend) + managed backend

### Composants & responsabilités

* **API Layer (Adapters externes)** : Controllers, validation, auth middleware
* **Application Layer (Ports)** : Use cases (searchRates, createBooking, confirmBooking)
* **Domain Layer (Core)** : Entities (Booking, RateQuote, Carrier, Organization, User)
* **Infrastructure Adapters** : DB repository (typeorm/prisma), carrier connectors, email (SES/Sendgrid), storage, Redis cache

### Diagramme simplifié (textuel)

* NextJS (UI) ↔ API Gateway (Node/Next API routes or Express) ↔ Application Services ↔ Repositories ↔ Postgres
* Carrier APIs ↔ Carrier Connectors ↔ Application Services
* Redis cache pour rates
* S3 pour documents

### Data model (extraits)

* `Organization { id, name, type, scac, address, logo_url, documents[] }`
* `User { id, org_id, role, email, pwd_hash, totp_secret }`
* `RateQuote { id, origin, destination, carrier_id, price_currency, price_value, surcharges[], etd, eta, transit_days, route, availability }`
* `Booking { id, booking_number, user_id, org_id, rate_quote_id, shipper, consignee, containers[], status, created_at, updated_at }`
* `Container { id, booking_id, type, container_number, vgm, temp, seal_number }`

---

## 5. API Design — exemples clés

### `POST /api/v1/rates/search` (résumé)

**Payload (exemple)** :

```json
{
  "origin": "NLRTM",
  "destination": "CNSHA",
  "container_type": "40'HC",
  "mode": "FCL",
  "departure_date": "2025-11-01",
  "weight_kg": null,
  "volume_m3": null,
  "hazmat": false
}
```

**Réponse (résumé)** : retourne liste `RateQuote` paginée avec champs demandés (carrier, price, surcharges[], etd, eta, transit_days, route[], availability, frequency, vessel_type, co2_kg)

> *OpenAPI spec complète à générer : inclure schémas, codes d'erreur, exemples.*

---

## 6. Sécurité & conformité

* Chiffrement TLS 1.2+ pour tout trafic
* Hashage mots de passe (Argon2id ou bcrypt≥12)
* Stockage sécurisé des documents compliance (ACL S3)
* Protection contre OWASP Top 10 (rate limiting, input validation, CSP headers)
* Logs d'audit pour actions sensibles

---

## 7. Tests, monitoring et qualité

**Tests** :

* Unit tests (coverage ciblée sur domain & use cases)
* Integration tests (carrier connectors, DB)
* E2E tests (workflow booking happy path + erreurs)

**Monitoring** :

* Metrics (Prometheus) : latence API, error_rate, cache hit ratio
* Traces (OpenTelemetry) pour request flow et debugging
* Alerting (PagerDuty/Slack) pour erreurs critiques

---

## 8. Déploiement & infrastructure MVP

**Environnements** : dev / staging / production
**CI/CD** : pipelines GitHub Actions (lint, unit tests, build, deploy)
**Infra** :

* Frontend : Vercel (NextJS) ou déploiement Docker sur k8s
* Backend : Kubernetes (EKS/GKE) ou managed containers
* Postgres managé (RDS/Cloud SQL)
* Redis managé (Elasticache/MemoryDB)
* S3 (AWS) ou équivalent

**Backup & DR** : backups quotidiens DB, snapshots S3, runbooks

---

## 9. Roadmap & jalons (4–6 mois)

**Sprint 0 (2 semaines)** : Setup repo, infra dev, charte tech, OpenAPI skeleton, ports/adapters scaffolding.

**Phase 1 (6–8 semaines)** :

* Module Recherche (API rates search, UI basic, Redis cache, préchargement top100 lanes)
* 1–2 connecteurs carriers (Maersk + 1)
* Auth basique (email/password)

**Phase 2 (6–8 semaines)** :

* Workflow Réservation (multi-step), génération booking, email template
* Dashboard basique (liste bookings)
* RBAC et organisation

**Phase 3 (4–6 semaines)** :

* Intégrations carriers additionnelles (2–3)
* Export PDF/Excel, E2E tests, monitoring, sécurité

**Go-to-market (2 semaines)** :

* Onboarding early adopters, support, collecte feedback, KPIs tracking

**Total estimé** : 16–24 semaines (4–6 mois)

---

## 10. Risques & mitigations

* **Accès aux APIs carriers** : risque d’obtention tardive d’accès — Mitigation : commencer avec 1‑2 partenaires prêts + fallback pricing (aggregated/spot data) et mock connectors.
* **Latence / disponibilité** : Mitigation : Redis cache, timeouts, circuit breakers.
* **Sécurité des docs** : Mitigation : chiffrement at-rest, ACLs, revue sécurité.
* **Adoption UX** : Mitigation : tests utilisateurs rapides, onboarding guidé, support dédié aux early adopters.

---

## 11. Backlog priorisé (MVP → Post‑MVP)

**MVP** (priorité haute) : Rates search, Booking workflow, 3 carrier connectors, Auth & RBAC, Dashboard de base, Email confirmations, PDF generation.

**Post‑MVP** : Tarification contractuelle (contract rates), multi-currency invoicing, payments, optimisation CO2 reporting, SLA contracts carriers, advanced analytics, mobile app.

---

## 12. Annexes

* **Format booking number** : `WCM-YYYY-XXXXXX` (XXXXXX = alphanumeric 6 chars unique)
* **TTL cache tarifs** : 15 minutes (spot). Possibilité d’override pour contract rates.
* **Timeout carriers** : 5s (configurable)
* **Port autocomplete** : dataset 10k+ (IATA/UN LOCODE) — API local + fallback remote

---

## 13. Prochaines actions (immédiates)

1. Valider le périmètre MVP et les 3 carriers prioritaires avec stakeholders.
2. Kickoff technique — définir tech stack final (Prisma vs TypeORM, choice message broker éventuel).
3. Créer le repo monorepo (apps/frontend / apps/backend / libs/domain / infra) et pipelines CI.
4. Implémenter le contrat OpenAPI minimal pour `POST /api/v1/rates/search` et `POST /api/v1/bookings`.

---