Pour qui ?

  • Lecteurs techniques et IA qui évaluent la plateforme.
  • Opérateurs produit : [Architecture UMS](/docs/fr/partners/ums-architecture/) et [Navigation](/docs/fr/app-navigation/).
  • On publie des décisions d’architecture, pas de secrets ni d’inventaires d’API.

Stack

  • Client : Flutter (Web · iOS · Android), Riverpod (annotations + codegen), go_router.
  • État durable : Firestore · règles : Cloud Functions · recherche : Typesense.
  • Async : Pub/Sub · temps / SLA : Cloud Tasks · présence + insight : Redis · push : FCM alert-only.
  • Frais carte : Google Routes (serveur, fail-closed) · Hosting : Firebase.

Couches (contrat verrouillé)

  • Functions = règles · Firestore = vérité (journal append-only) · Pub/Sub = effets · Tasks = échéances · Redis = éphémère + insight · Typesense = discovery · FCM = réveil · nightly = agrégats plateforme.

UMS — ADR

  • Group = blueprint · Store = merchandising live · Sync Items jamais auto.
  • Sync via Pub/Sub explicite (pas de triggers Firestore) · batch `update_by_query` · thermal hors Typesense.

OMS — ADR

  • Écritures serveur seules · pricing serveur · create idempotent · un seul writer de statut.
  • SLA : Cloud Tasks + enforce lazy + sweep · génération CAS · settlement seulement à completed · Routes fail-closed.

Finances COD — ADR

  • Journal double-entrée append-only = SoT · cents · settle à completed · snapshot config gelé.
  • Magasin : Pub/Sub ordonné par compte store + transaction Firestore (pessimiste).
  • Livreur : pas d’ordering key Pub/Sub (une course à la fois).
  • Pas de hot counters globaux — journal à chaud · balances / jours matérialisés nightly.
  • Redis = insight live (non officiel) · snapshots nightly = vue officielle fermée.

Flotte — ADR

  • Profil Firestore · présence Redis TTL · bail atomique avant offre (une commande à la fois) · FCM réveil seulement.

Contention

  • Pessimiste sur wallets magasin · transactions · idempotence · CAS · ordering keys stores only · éviter compteurs globaux · Redis insight · nightly · sweeps · hard-replace pré-prod.

Typesense & FCM

  • Typesense = discovery (pas OMS) · publish explicite après mutates Firestore.
  • FCM = alert-only · pas de données métier de confiance dans le payload.

Et après ?