xpeditis2.0/docs/features/rate-search.md
2026-05-14 21:11:54 +02:00

144 lines
3.0 KiB
Markdown

# Recherche de tarifs
---
## Deux types de recherche
| Type | Description | Endpoint |
|------|-------------|----------|
| FCL (Full Container Load) | Tarifs via connecteurs carriers (Maersk, MSC, etc.) | POST /api/v1/rates/search |
| CSV / LCL | Tarifs chargés depuis des fichiers CSV | POST /api/v1/rates/csv-search |
---
## Recherche FCL — Carriers API
### Endpoint
```
POST /api/v1/rates/search
Authorization: Bearer <token>
{
"origin": "NLRTM",
"destination": "CNSHA",
"containerType": "40HC",
"mode": "FCL",
"departureDate": "2026-06-01",
"hazmat": false
}
```
### Réponse
```json
{
"results": [
{
"id": "uuid",
"carrier": { "name": "Maersk", "code": "MAERSK", "logoUrl": "..." },
"origin": { "code": "NLRTM", "name": "Rotterdam" },
"destination": { "code": "CNSHA", "name": "Shanghai" },
"baseFreight": 1850.00,
"surcharges": [
{ "type": "BAF", "amount": 250.00, "currency": "USD" }
],
"totalAmount": 2100.00,
"currency": "USD",
"transitDays": 28,
"etd": "2026-06-01T00:00:00Z",
"eta": "2026-06-29T00:00:00Z",
"availability": 50,
"validUntil": "2026-05-13T10:15:00Z"
}
],
"total": 5,
"page": 1,
"pageSize": 20
}
```
### Cache Redis
- Clé : `rate:{origin}:{destination}:{containerType}`
- TTL : 15 minutes
- Les cotations expirent automatiquement après 15min (`valid_until`)
### Carriers intégrés
| Carrier | Code | SCAC |
|---------|------|------|
| Maersk | MAERSK | MAEU |
| MSC | MSC | MSCU |
| CMA CGM | CMACGM | CMDU |
| Hapag-Lloyd | HAPAG | HLCU |
| ONE | ONE | ONEY |
Chaque carrier a son connecteur dans `apps/backend/src/infrastructure/carriers/`.
Circuit breaker via `opossum` : timeout 5s, bascule sur fallback si indisponible.
---
## Recherche CSV
### Endpoint
```
POST /api/v1/rates/csv-search
Authorization: Bearer <token>
{
"origin": "NLRTM",
"destination": "USNYC",
"volumeCBM": 25.5,
"weightKG": 3500,
"palletCount": 10,
"filters": {
"companies": ["SSC Consolidation"],
"minPrice": 1000,
"maxPrice": 3000,
"currency": "USD"
}
}
```
### Carriers CSV disponibles
| Company | Type | API |
|---------|------|-----|
| SSC Consolidation | CSV_ONLY | Non |
| ECU Worldwide | CSV_AND_API | Oui |
| TCC Logistics | CSV_ONLY | Non |
| NVO Consolidation | CSV_ONLY | Non |
Les fichiers CSV sont dans `apps/backend/src/infrastructure/storage/csv-storage/rates/`.
### Calcul de prix CSV
```typescript
// Freight class : prendre le max de volume-based ou weight-based
const volumePrice = volumeCBM * pricePerCBM;
const weightPrice = weightKG * pricePerKG;
const freightPrice = Math.max(volumePrice, weightPrice);
const totalPrice = freightPrice + surchargeBAF + surchargeCAF;
```
---
## Recherche de ports
Autocomplete avec recherche floue (pg_trgm) :
```
GET /api/v1/ports/search?q=rotterdam&limit=10
```
~10 000 ports UN/LOCODE seedés en base.
---
## Export des résultats
Les résultats peuvent être exportés en PDF ou Excel depuis le frontend.
Voir `apps/frontend/src/utils/` pour les utilitaires d'export.