ELISA — Assistant Logistique Intelligent
ELISA (Electronic Logistics Interface & Shipping Assistant) by DYNORS
Plateforme de livraison urbaine on-demand, transport B2B/B2C, GP diaspora.
Anciennement connue sous le nom YOBALÉ — rebranding complet en avril 2026.
Identité & Positionnement
| Propriété |
Valeur |
| Marque |
ELISA by DYNORS |
| Tagline |
« ELISA — Votre assistant logistique intelligent. » |
Code app (source-app) |
elisa |
| Repository |
dynors-projects/elisa |
| Route SLY |
/elisa/** |
| Status |
📋 Spécifié (v1.1, avril 2026) — développement à lancer |
| Spec complète |
docs/DAW-YOB-FISC/YOBALE/ELISA_00_Master.md (+ 01/02/03/04) |
| URL prod (cible) |
https://app.elisa.dynors.com · API https://api.elisa.dynors.com |
| Port local dev |
8190 (backend) — SLY local = 8090, ne pas confondre |
Vision en 3 axes
| Phase |
Axe |
Marché |
| M1–M2 |
Livraison urbaine on-demand (B2C/B2B e-commerce) + GP diaspora |
Sénégal, Afrique de l'Ouest |
| M3+ |
Transport professionnel (tournées) + white-label partenaires |
Multi-pays |
| Post-M3 |
Marketplace logistique (capacités, points relais, multi-transporteurs) |
Régional |
Moteurs internes (invisibles utilisateur)
| Moteur |
Nom |
Rôle |
Tag observabilité |
| FATOU |
Fast Access Transport & Optimized Utility |
Scoring livreurs, dispatch, pricing dynamique, calcul ETA |
service:fatou |
| SIRA |
Smart Instant Routing App |
Calcul itinéraires, distances, multi-stop, contraintes trafic |
service:sira |
Ces noms organisent le code et l'observabilité — l'utilisateur final voit uniquement ELISA.
Acteurs
| Acteur |
Rôle |
Interface |
| Client B2C |
Passe une commande de livraison (domicile, bureau) |
Web public (elisa-web-customer) |
| Tenant B2B |
Boutique e-commerce, entreprise — intègre ELISA via API ou console |
Console SaaS (elisa-tenant-console) + API B2B |
| Livreur |
Pickup + delivery de colis ; mode push ou hub |
App mobile (elisa-mobile-courier, React Native, offline-first) |
| GP (Grand Porteur) |
Voyageur diaspora qui transporte des colis entre pays |
Web/mobile client |
| Admin DYNORS |
Back-office : KPIs, suspensions, KYC, dispatch override |
Admin Panel (elisa-admin-panel) |
| Point relais |
Partenaire commerçant qui stocke et remet les colis |
Intégré via console |
Workflow de livraison standard (B2C/B2B)
1. Création devis Client/Tenant → POST /api/v1/quotes
└─ SIRA calcule distance + itinéraire
└─ FATOU calcule prix (pricing dynamique)
2. Confirmation Client confirme → POST /api/v1/deliveries
└─ Statut : PENDING
└─ event eli.delivery.created
3. Dispatch FATOU Cron toutes 30s → FATOU analyse livreurs disponibles
Scoring 5 critères :
┌─────────────────────────────────────────────────────┐
│ Provider type ×0.30 (fiabilité, ancienneté) │
│ Proximité ×0.25 (distance GPS en temps réel via Redis) │
│ Disponibilité ×0.20 (charge actuelle, fenêtre horaire) │
│ Prix ×0.15 (tarif livreur vs prix client) │
│ Véhicule ×0.10 (type, capacité, poids max) │
└─────────────────────────────────────────────────────┘
└─ Assignation au meilleur score
└─ Notification push FCM → livreur
└─ Statut : ASSIGNED
4. Pickup Livreur arrive → scan QR code expéditeur
└─ Photo POD (preuve de prise en charge)
└─ Stockée via dynors-media
└─ Statut : PICKED_UP
5. Livraison Livreur remet → scan QR code destinataire
└─ Photo POD + signature digitale
└─ Hash SHA-256 horodaté
└─ Statut : DELIVERED
6. Post-livraison Automatique → FISCAL (facture B2C via SLY /fiscal/**)
→ Wallet livreur crédité (70% net de commission)
→ event eli.delivery.completed
→ Notifications (SMS + email + push)
Workflow GP Diaspora
1. Création trajet GP publie son trajet (Paris→Dakar, date, kg disponibles)
→ Référence ELI-GP-2026-XXXXXX
2. Réservation Expéditeur réserve N kg sur le trajet
→ Paiement via DYNORS PAIEMENT (Wave/OM/carte)
3. Pickup pré-départ GP collecte les colis chez les expéditeurs (ou point relais)
→ Étiquettes générées (QR + Code 128 + NINEA)
4. Transit Traitement douanier géré par les restrictions GP
→ Liste produits autorisés/refusés vérifiée à la création
5. Livraison arrivée GP remet au destinataire ou dépose en point relais
→ POD + code retrait si point relais
6. Facturation FISCAL génère facture GP : ELI-GPINV-XXXXXXXX
→ Commission ELISA 12% déduite
→ Virement GP via DYNORS PAIEMENT
Mode Offline (App Livreur)
L'app livreur fonctionne sans connexion (zones peu couvertes) :
Actions en file locale (WatermelonDB/SQLite)
│
▼
Synchronisation dès reconnexion
│ Chaque action : idempotency-key unique
│ Conflits résolus côté serveur (last-write-wins ou merge)
▼
Backend accepte/rejette + renvoie état canonique
Notifications multi-canaux
| Événement |
SMS |
Email |
Push FCM |
WhatsApp |
| Livraison créée |
✓ client |
✓ client |
— |
opt. |
| Livreur assigné |
✓ client |
— |
✓ livreur |
— |
| Pickup effectué |
✓ destinataire |
— |
— |
opt. |
| Livrée |
✓ tout |
✓ tout |
✓ tout |
opt. |
| Incident / retard |
✓ |
✓ |
✓ |
— |
Routage via dynors-notify (extension DYNORS) — jamais direct Twilio/SMTP dans ELISA.
Architecture
Portail Client (Angular) Console Tenant (Angular) Admin (Angular)
│ │ │
└──────────────────────────┴───────────────────────┘
│
App Livreur (React Native)
│
SLY — /elisa/**
│
ELISA Backend (port dev **8190**)
Java 21 · Spring Boot · Hexagonal
┌───────────────────────────┐
│ FATOU (optimisation) │
│ SIRA (routing) │
└───────────────────────────┘
│
┌──────────┬──────────────┼────────────────┬──────────┐
▼ ▼ ▼ ▼ ▼
FISCAL DYNORS PAIEMENT BOOKS notify media
/fiscal/** /paiement/** /books/** /notify/** /media/**
Stack technique
| Couche |
Technologie |
Notes |
| Backend |
Java 21 + Spring Boot 3.x |
Architecture hexagonale obligatoire |
| API |
REST (/api/v1/) + WebSocket STOMP (tracking temps réel) |
|
| Frontend web |
Angular 17+ |
3 portails : elisa-web-customer, elisa-tenant-console, elisa-admin-panel |
| Mobile |
React Native 0.74+ (livreur, offline-first) |
Flutter client envisagé post-M3 |
| Base de données |
PostgreSQL 15+ (multi-tenant, RLS) |
Schéma tenant_elisa |
| Cache |
Redis 7+ |
Positions GPS, sessions, dispatch, rate limiting |
| Events |
dynors-events (bus Kafka/RabbitMQ/Redis selon env) |
Activable via dynors.events.enabled=true |
| Build |
Gradle 8.5+ — train core 1.0.7 / extensions 1.0.3 |
Voir Versions et dépendances |
| Secrets |
HashiCorp Vault (secret/data/dynors/{env}/elisa/…) |
ESO → K8s Secrets |
| Observabilité |
Loki (logs) · Prometheus · Grafana · Sentry (erreurs) |
Tags service:fatou, service:sira — cf. note logging |
| CI/CD |
GitLab CI → Docker → ECS/K8s |
Cycle SIRRAT + templates Forge (pas de sirrat.config.yml dans le repo app) |
Intégrations DYNORS (via SLY)
| App cible |
Path SLY |
Usage |
| FISCAL |
/fiscal/** |
Facturation B2C/B2B, certification DGI SN, attestations livreurs/GP |
| DYNORS PAIEMENT |
/paiement/** |
Encaissement (Wave, OM, PayTech), wallet livreur, paiements GP — jamais de SDK PSP direct |
| DYNORS BOOKS |
/books/** |
Comptabilité commissions, réconciliation financière |
| notify |
/notify/** |
SMS, email, push notifications multi-canaux |
| dynors-media |
/media/** (contrat v2 : POST /media/media/upload, etc.) |
Photos livraison (POD), documents KYC — via SLY, jamais HTTP direct |
| dynors-pdf |
via extension / appel SLY selon déploiement |
Bordereaux de livraison, reçus, étiquettes QR/Code 128 |
Références de facturation ELISA
| Cas |
Préfixe FISCAL |
Exemple |
| Facture livraison B2C |
ELI-INV- |
ELI-INV-20260001 |
| Facture tenant B2B |
ELI-TINV- |
ELI-TINV-20260001 |
| Avoir / remboursement |
ELI-CN- |
ELI-CN-20260001 |
| Attestation livreur |
ELI-CERT- |
ELI-CERT-20260001 |
| Commission point relais |
ELI-RINV- |
ELI-RINV-20260001 |
| Rémunération GP |
ELI-GPINV- |
ELI-GPINV-20260001 |
| Tracking livraison |
ELI-2026- |
ELI-2026-000123 |
API B2B (style Stripe)
Les tenants B2B intègrent ELISA via deux clés (pk_live_… + sk_live_…) gérées via dynors-api-client :
POST /api/v1/quotes → Obtenir un devis
POST /api/v1/deliveries → Créer une livraison
GET /api/v1/deliveries/{id} → Suivre une livraison
POST /api/v1/webhooks → Recevoir événements (HMAC sha256)
GET /api/v1/tracking/{ref} → Tracking public (sans auth)
Webhooks signés via dynors-webhooks : X-Elisa-Signature: sha256=…
Design System — Tokens ELISA
| Token |
Valeur |
Usage |
--elisa-primary |
#FF6B35 |
CTA, accents (orange sahélien) |
--elisa-deep |
#0B1F3A |
Header, navigation, contraste |
--elisa-fatou |
#FFB800 |
Indicateurs FATOU (admin uniquement) |
--elisa-sira |
#1B998B |
Indicateurs SIRA (admin uniquement) |
--dynors-violet |
#6F3BA8 |
Endorsement « by DYNORS » |
Typographie : Inter (UI) + Inter Tight (display) — fallback Segoe UI / Roboto.
Corrections obligatoires avant développement (C1–C5)
Issues identifiées dans le corpus historique YOBALÉ — toutes BLOQUANTES.
| # |
Problème |
Correction |
| C1 |
dynors-invoicing dans le corpus |
Remplacer par FISCAL via SLY uniquement |
| C2 |
Flyway pour migrations |
Migrer vers Liquibase (changesets XML/YAML) |
| C3 |
Appels HTTP directs entre services |
SLY / InterAppCallService obligatoire |
| C4 |
Tokens JWT en localStorage |
HttpOnly cookies uniquement |
| C5 |
DTOs exposent infra interne |
DTOs minimalistes (pas de tenant_id, UUID internes) |
Nomenclature (rebranding YOBALÉ → ELISA)
| Élément |
Ancien (YOBALÉ) |
Nouveau (ELISA) |
| Code app |
yobale |
elisa |
| Route SLY |
/yobale/** |
/elisa/** |
| Modules Gradle |
yob-core, yob-api |
elisa-core, elisa-api |
| Schéma DB |
tenant_yobale |
tenant_elisa |
| Tracking |
YOB-2026-XXXXXX |
ELI-2026-XXXXXX |
| Events |
YOB_DELIVERY_* |
ELI_DELIVERY_* |
| Variable env |
YOBALE_BASE_URL |
ELISA_BASE_URL |
Les cahiers YOBALÉ restent valides en détail métier — en cas de contradiction, ELISA_Architecture_v1.md prévaut.
Variables d'environnement
SLY_BASE_URL=https://sly.dynors.com
SLY_FORWARD_SECRET=<secret-partagé>
ELISA_DB_URL=jdbc:postgresql://pg:5432/elisa
ELISA_REDIS_URL=redis://redis:6379
FISCAL_VIA_SLY=true # toujours — jamais d'appel direct
Checklist développeur (à valider Tech Lead)
- [ ] Lire
docs/POINT_ENTREE_WORKSPACE_DYNORS.md + CLAUDE.md + ELISA_00_Master.md
- [ ] Aucun appel HTTP direct entre apps →
InterAppCallService + SLY
- [ ] Aucun secret en Git → Vault
secret/data/dynors/{env}/elisa/…
- [ ] Pas de
-SNAPSHOT pour com.dynors.* en CI/prod
- [ ] Architecture hexagonale :
domain/ / application/ / infrastructure/
- [ ] Liquibase (jamais Flyway)
- [ ] HttpOnly cookies (jamais
localStorage)
- [ ] TenantContext alimenté uniquement depuis JWT validé
- [ ]
source-app=elisa sur les appels inter-app (X-Source-App via InterAppCallService) — pas un claim JWT
- [ ] DTOs publics sans
tenant_id ni UUID internes
- [ ] Pas de SDK PSP direct → DYNORS PAIEMENT via SLY
/paiement/**
- [ ] Route
/elisa/** déclarée dans dynors-platform/selebeyone/application.yml
- [ ] App déclarée dans SIRRAT Forge (template déploiement) — pas de
sirrat.config.yml dans le repo satellite
Références
- Spec master :
docs/DAW-YOB-FISC/YOBALE/ELISA_00_Master.md
- Backend :
docs/DAW-YOB-FISC/YOBALE/ELISA_01_Backend.md
- Angular :
docs/DAW-YOB-FISC/YOBALE/ELISA_02_Angular.md
- Mobile :
docs/DAW-YOB-FISC/YOBALE/ELISA_03_Mobile.md
- Design Handoff :
docs/DAW-YOB-FISC/YOBALE/ELISA_04_Design_Handoff.md
- Architecture v1 :
docs/DAW-YOB-FISC/YOBALE/ELISA_Architecture_v1.md
- Maquettes interactives :
docs/DAW-YOB-FISC/YOBALE/ELISA_Maquettes.html
- Hub PSP : DYNORS PAIEMENT
Dernière mise à jour : 2026-06-18