Some checks failed
CI / Lint & Format Check (push) Failing after 1m11s
CI / Test Backend (push) Failing after 1m32s
CI / Build Backend (push) Has been skipped
Security Audit / npm audit (push) Failing after 5s
Security Audit / Dependency Review (push) Has been skipped
CI / Test Frontend (push) Failing after 29s
CI / Build Frontend (push) Has been skipped
352 lines
12 KiB
Markdown
352 lines
12 KiB
Markdown
# 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 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)** :
|
||
|
||
```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`.
|
||
|
||
--- |