Banc V0 — un hub, quatre nœuds, Paris

Nous ne remplaçons ni votre boutique,
ni votre ERP, ni vos coursiers.

DITOCO est l'orchestrateur qui manque entre eux. Shopify encaisse, Odoo dit la vérité du stock, Onfleet roule. Nous décidons quel nœud sert quelle ligne, à quelle heure, et nous en gardons la trace — ligne par ligne, événement par événement.

14 ms
service tarifaire, 95ᵉ centile mesuré au banc
6
écrans codés — tout le reste est natif
0
champ de statut : l'état se déduit du journal
Le réseau du banc — schéma illustration
N1 ROQUETTE75011 · 75012 · 75003N2 SENTIER75002 · 75009 · 75011N3 ORDENER75018 · 75017N4 VAUGIRARD75015 · 75014HUB CENTRALréassort
Nœud du réseauAdresse clienteZone éligible, créneau 2 h

Positionnement

Trois systèmes savent déjà faire leur métier. Aucun ne parle aux deux autres.

C'est le seul endroit où nous apportons quelque chose — et c'est le seul endroit où nous écrivons du code.

Shopify

Encaisse et déclenche

Le checkout reste le sien. Nous répondons à son service tarifaire — un créneau, un tarif — et nous écoutons ses webhooks. Aucune extension d'interface : elles sont réservées à Shopify Plus, et un sélecteur maison serait une régression.

Odoo

Dit la vérité du stock

Un entrepôt par nœud. Odoo maîtrise le physique, nous maîtrisons le réservé — jamais dans la même transaction. Le commerçant, lui, n'a aucun compte Odoo : il ne verra jamais ce mot.

Onfleet

Affecte et roule

Nous posons une paire de tâches — retrait, remise — et nous écoutons. L'affectation, l'ETA, la preuve de livraison, le SMS à la cliente : natifs. Aucune ligne de code de tournée chez nous.

La ligne verte

La vie d'une unité, de l'annonce d'envoi jusqu'au retour.

C'est le seul parcours qui traverse tous les mondes : site de la marque, webhook, trottoir, écran opérateur, ERP, checkout. Il faut posséder toute la chaîne pour le faire tenir.

  1. 1

    La marque annonce

    la marque

    Référence, quantité, numéro de lot. C'est la seule porte d'entrée du lot dans tout le système : sans lui, plus rien n'est traçable en aval.

  2. 2

    L'exploitation place

    nous

    Le système suggère une répartition, un humain décide autre chose et dit pourquoi. Le couple suggestion / décision / motif est l'actif qui s'accumule.

  3. 3

    La cliente choisit

    la cliente

    Onze créneaux de deux heures, plus un « 2 h glissant ». Rien n'est réservé à l'affichage : le service tarifaire est en lecture seule.

  4. 4

    Le paiement réserve

    l'orchestrateur

    À orders/create, et là seulement : stock et minutes-coursier pris dans une seule transaction. Deux commandes sur la dernière unité ne peuvent pas gagner ensemble.

  5. 5

    Le nœud prépare

    l'opérateur

    Après 90 secondes de latence — une annulation dans cette fenêtre n'a mobilisé personne. Deux scans : l'article, puis l'étiquette. Rien d'autre.

  6. 6

    Le coursier livre

    Onfleet

    Onfleet affecte, roule, prouve. La cliente suit sa commande aux couleurs de la marque, et nous n'apparaissons nulle part sur cet écran.

  7. 7

    Le retour revient à pied

    l'opérateur

    Cinq minutes de marche jusqu'au nœud. Trois boutons pour l'opérateur, l'humain tranche, et l'unité conforme est de nouveau vendable dans l'heure.

Le périmètre

Six écrans codés. Tout le reste est natif.

Chaque acteur ne voit qu'un seul monde. La cliente ne voit que la marque, l'opérateur ne voit que sa file, le coursier ne voit qu'Onfleet. Personne n'a besoin de comprendre le système entier pour tenir son rôle — c'est ce qui rend un commerçant opérationnel en une heure.

Annoncer un envoi

la marque

Un formulaire, rien d'autre. Seule porte d'entrée du numéro de lot.

Décider un placement

l'exploitation

Volontairement manuel. La trace vaut plus que la répartition.

La file du nœud

l'opérateur

Triée par heure limite. Deux scans, et un bouton « indisponible ».

Le constat de retour

l'opérateur

Trois boutons, un humain, aucun automatisme.

La chronologie

la marque

Lecture seule du journal. Deux filtres : état, nœud. C'est tout.

Le stock, trois niveaux

la marque

Au hub, dans les nœuds, en transfert. La somme fait toujours le total.

Ce qui n'est pas là est délibéré : pas de checkout maison, pas de page de suivi, pas d'application coursier, pas de tableau de bord de résultats. Six surfaces, pas un produit SaaS complet.

Ce qui ne se négocie pas

Six règles qui décident de tout le reste.

Le journal fait foi

L'état d'une ligne n'est pas un champ qu'on écrit : c'est une projection de la suite de ses événements. Le journal est ajout seul — rien ne s'y réécrit, jamais.

Rien n'est réservé à l'affichage

Le service tarifaire est en lecture seule. La réservation attend le paiement. La contrepartie — une commande acceptée puis non servable — est mesurée, pas cachée.

La capacité se compte à l'heure

En minutes-coursier par heure, jamais par créneau. Un créneau de 14 h à 16 h consomme l'heure de 14 et celle de 15. C'est ce compteur qui empêche de vendre deux fois la même heure.

L'étiquette est la seule clé physique

Entre un sac sur une étagère et une ligne d'exécution, il n'y a qu'elle. Aucune ligne ne se clôture sans elle, et le coursier scanne le même objet que l'opérateur.

Panne et régulation ne se mélangent pas

Une panne est un dysfonctionnement : elle est seuillée, elle alerte. Une régulation est un fait d'exploitation : elle est observée. Les confondre, c'est cesser de lire les deux.

Les hypothèses restent des hypothèses

Cycle coursier, latence, marge de fin de créneau : toutes ces valeurs vivent en base avec leur drapeau. Un chiffre codé en dur devient une vérité que personne n'ose plus remettre en cause.

Sous le capot

Le journal est le livrable durable.

Il survit à l'orchestrateur qui l'a produit. Une ligne par événement, exportable en entier, sans passer par nous.

chronologie — ligne DTC-L-000412
14:02  ligne_allouee        noeud N1 · lot L2601 · stock_ville [N1 12, N2 4]
14:02  option_retenue       creneau ditoco_creneau_14 · tarif 690
14:04  notification_noeud    noeud N1
14:04  tournee              paire_creee · retrait + remise liés
14:21  scan_preparation     etiquette DIT-004512 · regle 15 min respectée
14:21  geste_remunerable    preparation_aboutie
14:49  scan_enlevement      coursier K. · physique et réservé baissent ensemble
15:37  remise               preuve photo
J+3    retour_declare       remboursement Shopify · aucun mouvement de stock
J+3    retour_constate      conforme · réintégré au lot L2601

Next.js 16 · React 19

Server Components par défaut

PostgreSQL · Prisma

Réservation conditionnelle atomique

Europe/Paris

Tout horodatage ancré, serveur en UTC

Une unité, du hub au trottoir, et retour.

Les comptes de démonstration du banc sont ouverts : la marque, l'exploitation et les quatre nœuds.