12 KiB
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) :
- Sélection de l'offre (vérif dispo temps réel)
- Informations expéditeur/destinataire
- Détails conteneur
- 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 testé 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) :
{
"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)
- Valider le périmètre MVP et les 3 carriers prioritaires avec stakeholders.
- Kickoff technique — définir tech stack final (Prisma vs TypeORM, choice message broker éventuel).
- Créer le repo monorepo (apps/frontend / apps/backend / libs/domain / infra) et pipelines CI.
- Implémenter le contrat OpenAPI minimal pour
POST /api/v1/rates/searchetPOST /api/v1/bookings.