Ones
Gestion de stock motos
{{ user.nom || user.email }} {{ roleLabel(user.role) }}
{{ apiDown ? 'API hors ligne' : 'API en ligne' }}
API injoignable sur localhost:8001 — démarre le backend
00 Accueil

Tableau de bord Ones

Accès rapide aux modules de gestion — clique sur une entrée pour ouvrir l'écran correspondant. Les entrées marquées « Bientôt » sont en cours de développement.

Imputations
Saisies comptables & ventes
Formalités
Cartes grises & opérations bancaires
Compléments
Gestion de la caisse
Paramètres
Référentiels & recherche
Rapports
Éditions & états de gestion
05 Transitaire

Transitaires & dossiers

Le dossier ouvre le process : l'arrivage vit dedans. Toute moto d'un arrivage est rattachée à son dossier, et donc à son transitaire.

{{ kpiTr.dossiers_en_cours }}
Dossiers en cours
{{ fmtMoney(kpiTr.solde_du_global) }}
Solde dû aux transitaires
{{ fmtInt(kpiTr.transitaires_actifs) }} transitaire(s) actif(s) · {{ fmtInt(kpiTr.dossiers_total) }} dossier(s) au total
Fiches transitaires
Un même N° CNIB ne peut pas être enregistré deux fois. Un transitaire suspendu reste sur ses dossiers.
Nom Prénoms Téléphone N° CNIB État Dossiers En cours Solde dû
{{ t.nom }} {{ t.prenoms || '—' }} {{ t.telephone || '—' }} {{ t.cnib || '—' }} {{ t.actif ? 'Actif' : 'Suspendu' }} {{ t.nb_dossiers }} {{ t.nb_dossiers_en_cours }} {{ fmtMoney(t.solde_du) }}
Aucun transitaire enregistré. Commencez par « + Nouveau transitaire ».
Dossiers de transit
Le dossier ouvre le process. Un dossier peut porter plusieurs arrivages : l'arrivage vit dedans.
N° dossier Transitaire Ouvert le Statut N° BL Arrivages Motos Montant estimé Solde dû
{{ d.numero_dossier || ('Dossier #' + d.id) }} {{ d.transitaire_libelle || '— à affecter —' }} {{ fmtDate(d.date_ouverture) }} {{ d.statut }} {{ d.num_bl || '—' }} {{ d.nb_arrivages }} {{ d.nb_motos }} {{ fmtMoney(d.montant_estime) }} {{ fmtMoney(d.solde_du) }}
Aucun dossier pour ce filtre. Ouvrez-en un avec « + Nouveau dossier ».
Transactions financières
Chaque mouvement est rattaché à un dossier et à un transitaire, et porte son motif. Dépense = ce que le dossier coûte (le solde dû monte) · Entrée = ce qui est versé au transitaire (le solde dû baisse).
Date Type Nature Transitaire Dossier Montant Motif
{{ fmtDate(t.date_op) }} {{ sensTransaction(t) }} {{ t.nature }} {{ t.transitaire_libelle || '—' }} {{ t.dossier_numero || ('Dossier #' + t.dossier_id) }} {{ fmtMoney(t.montant) }} {{ t.motif || '—' }}
Aucune transaction pour ce filtre. Saisissez-en une avec « + Nouvelle transaction ».
02 Arrivages

Nouvel arrivage

Saisis le lot reçu — le total se calcule automatiquement, ligne par ligne.

Lignes d'arrivage
TR = QR × RU · importer un fichier pour pré-remplir
{{ fmtMoney(trLigne(l)) }}
{{ lignes.length }} ligne{{ lignes.length > 1 ? 's' : '' }} · TR = QR × RU
Arrivages enregistrés
Historique des lots saisis
{{ listeArrivages.length }}
Date arrivage N° BL Fournisseur Type Pièce jointe Motos Revient Vente Marge
{{ fmtDate(a.date) }} {{ a.num_bl || '—' }} {{ a.fournisseur }} {{ a.type_arrivage || '—' }} 📎 {{ a.piece_jointe }} — {{ a.total_motos ?? 0 }} {{ fmtMoney(a.total_arr) }} {{ fmtMoney(a.total_vente) }} {{ fmtMoney(a.total_marge) }}
API injoignable Démarre le backend sur localhost:8001 pour charger les arrivages.
Aucun arrivage enregistré Les lots validés apparaîtront ici.
03 Stock

Parc des motos

Recherche instantanée par marque, modèle ou numéro de série.

{{ totalMotos }}
Motos en stock · quantité totale
{{ stock.total }}
Références actives
Séries suivies dans le parc
Filtres
La recherche se met à jour automatiquement
Grand livre des motos
Toutes les informations — moto, modèle et arrivage fusionnés (une ligne = une moto)
{{ stock.total }} motos
{{ pagePremiere }}–{{ pageDerniere }} sur {{ stock.total }}
page {{ stock.page }} / {{ stock.pages }}
Série / Châssis Marque Modèle Couleur Arrivage Date arrivage Fournisseur N° BL Transitaire Type Lieu Qté RU Prix achat Prix vente Marge Montant $ Taux Total FCFA Frais Pièce jointe Statut Observation
{{ v.serie }} {{ v.marque || '—' }} {{ v.modele || v.cod_typ || '—' }} {{ v.couleur || '—' }} {{ v.numero_arr ?? '—' }} {{ v.date_arr ? fmtDate(v.date_arr) : '—' }} {{ v.code_fournisseur || '—' }} {{ v.num_bl || '—' }} {{ v.transitaire || '—' }}{{ v.dossier }} {{ v.type_arrivage || '—' }} {{ v.depot || '—' }} {{ v.nb }} {{ v.ru ? fmtMoney(v.ru) : '—' }} {{ fmtMoney(v.prix_achat) }} {{ fmtMoney(v.prix_vente) }} {{ fmtMoney((v.prix_vente ?? 0) - (v.prix_achat ?? 0)) }} {{ v.mt ? fmtMoney(v.mt) : '—' }} {{ v.tx || '—' }} {{ v.mt1 ? fmtMoney(v.mt1) : '—' }} {{ v.frais ? fmtMoney(v.frais) : '—' }} 📎 {{ v.piece_jointe }}— SORTI EN STOCK {{ v.observation || '—' }}
API injoignable Démarre le backend sur localhost:8001 pour charger le stock.
Aucun véhicule trouvé Élargis ou vide les filtres pour voir le parc.
04 Vente

Vendre une moto

{{ voirAchat ? 'Le contrôle PMINI protège ta marge — aucun prix sous le seuil ne passe.' : 'Le contrôle PMINI — aucun prix sous le seuil ne passe.' }}

Retrouver le véhicule
Par numéro de série ou châssis
Véhicule trouvé
Informations de référence
SORTI EN STOCK
Série
{{ vente.vehicule.serie }}
Marque
{{ vente.vehicule.marque }}
Modèle
{{ vente.vehicule.modele }}
Prix vente de référence
{{ fmtMoney(vente.vehicule.prix_vente) }}
En stock
{{ vente.vehicule.nb ?? '—' }} unité(s)
{{ regleInfo }}
Prix bas — PVM < PMINI
{{ vente.resultat.detail }}
{{ fmtMoney(vente.pvm) }} contre {{ fmtMoney(vente.pmini) }} minimum
Vente enregistrée
Marge (MU) : {{ fmtMoney(vente.resultat.marge) }}
Prix de vente enregistré : {{ fmtMoney(vente.pvm) }}
{{ vente.resultat.type === 'network' ? 'API injoignable' : 'Vente refusée' }}
{{ vente.resultat.type === 'network' ? 'Démarre le backend sur localhost:8001 pour continuer.' : vente.resultat.msg }}
Aucun véhicule trouvé {{ vente.resultat.msg }}
01 Dashboard

Vue d'ensemble

Indicateurs clés du parc : stock, sorties, valeur et tendances d'arrivages.

API injoignable
Démarre le backend sur localhost:8001 pour charger les statistiques.
Chargement des statistiques…
Aucune donnée disponible Enregistre un arrivage pour voir les statistiques apparaître ici.
06 Paramètres

Utilisateurs & accès

Gère les comptes de l'équipe, les lieux de stockage et les fournisseurs — rôles, suspension et suppression. Réservé à l'administrateur.

Utilisateurs
Comptes ayant accès à Ones
Email Nom Rôle Statut Actions
{{ u.email }} {{ u.nom || '—' }} {{ roleLabel(u.role) }} ACTIF SUSPENDU
Aucun utilisateur Les comptes créés apparaîtront ici.
Lieux de stockage
Entrepôts et magasins proposés dans les arrivages et le filtre stock
Type Nom Statut Actions
{{ typeLieuLabel(l.type_lieu) }} {{ l.nom }} ACTIF SUSPENDU
Aucun lieu Les entrepôts et magasins créés apparaîtront ici.
Fournisseurs
Liste utilisée pour les arrivages (reprise de F5, gérable ici)
Désignation Contact Type Actions
{{ f.designation || '—' }} {{ f.contact || '—' }} {{ f.type_fournisseur || '—' }}
Aucun fournisseur Les fournisseurs créés apparaîtront ici.
08 Suivi de chantier

Suivi de chantier

L'avancement réel du chantier : chaque tâche livrée, sa durée estimée, sa durée réelle et l'écart au plan. Uniquement des tâches et des jours ouvrés — aucun montant.

{{ fmtPct(suiviKpi.avancement_pct || 0) }}
Avancement (tâches accomplies)
{{ fmtInt(suiviKpi.nb_faites) }} tâche(s) terminée(s) sur {{ fmtInt(suiviKpi.nb_taches) }}
{{ fmtJours(suiviKpi.jours_restants) }}
Reste à faire
{{ fmtJours(suiviKpi.jours_travail) }} travaillés · {{ fmtJours(suiviKpi.jours_imprevus) }} en imprévus · semaine de {{ suiviKpi.jours_par_semaine }} j ouvrés
Chantier Ones
Le plan du vault, tenu à jour à chaque mise en production. Les durées sont des jours ouvrés (1 j = 8 h de développement, test et documentation).

{{ suiviErreur }}

1 semaine = {{ suiviGantt.jours_par_semaine }} j ouvrés · {{ fmtJours(suiviKpi.jours_restants) }} de travail restant · plan annoncé jusqu'au {{ fmtDateCourte(suiviGantt.fin_plan) }}
Lots & tâches
{{ l.type === 'tache' ? '' : (l.nb_taches ? (lotOuvertGantt[l.code] ? '▾' : '▸') : '·') }} {{ l.code }} {{ l.titre }} {{ l.statut === 'fait' ? 'livré' : fmtJours(l.jours_reels) + ' / ' + fmtJours(l.jours_estimes) }}
{{ mo.libelle }} aujourd'hui
plan annoncé réalisé jalon aujourd'hui Cliquez un lot pour déplier ses tâches · {{ suiviGantt.ancre_regle }}
LOT {{ lot.code }} {{ lot.titre }} {{ suiviStatutLibelle(lot.statut) }} {{ fmtJours(lot.jours_estimes) }} estimés · {{ fmtJours(lot.jours_reels) }} réels · {{ lot.jalon_code }}
Tâche Libellé Estimé Révisé Réel Écart État Déployé le
{{ t.code || '—' }} {{ t.titre }}
Au-delà du plan annoncé
Estimation revue — {{ t.estime_revise_motif }}
{{ fmtJours(t.jours_estimes_initial) }} {{ t.estime_revise_le ? fmtJours(t.jours_estimes) : '—' }} {{ fmtJours(t.jours_reels) }} {{ t.jours_reels || t.couleur ? fmtEcartPct(t.ecart_pct) : '—' }}
{{ suiviCouleurLibelle(t.couleur) }}
{{ suiviStatutLibelle(t.statut) }} {{ (t.deploye_le || '').slice(0, 10) || '—' }}

Date Objet Type Jours Motif Auteur
{{ r.date_releve }} {{ r.type === 'imprevu' ? 'Imprévu' : 'Travail' }} {{ fmtJours(r.jours) }} {{ r.motif }} {{ r.auteur || '—' }}
Aucun relevé pour l'instant.
{{ fmtPct(suiviKpi.avancement_pct || 0) }}
Avancement
Tâches accomplies sur le total des tâches du plan.
{{ fmtPct(suiviKpi.effort_consomme_pct || 0) }}
Effort consommé
{{ fmtJours(suiviKpi.jours_reels_total) }} réels sur {{ fmtJours(suiviKpi.jours_estimes_total) }} estimés.
{{ fmtJours(suiviKpi.derive_terminees_jours) }}
Dérive sur les tâches terminées
Écart au plan annoncé (estimation d'origine). Négatif = en avance.
{{ fmtPct(suiviKpi.taux_imprevu_pct || 0) }}
Part d'imprévu
{{ fmtJours(suiviKpi.jours_imprevus) }} de travail non planifié sur {{ fmtJours((suiviKpi.jours_travail || 0) + (suiviKpi.jours_imprevus || 0)) }} relevés.
{{ fmtJours(suiviKpi.velocite_jours_semaine) }}
Vélocité (par semaine)
Jours abattus sur les {{ suiviKpi.velocite_fenetre_semaines || 4 }} dernières semaines.
{{ suiviKpi.fin_projetee || '—' }}
Fin projetée
Reste {{ fmtJours(suiviKpi.jours_restants) }} à la vélocité constatée. Aucune projection tant qu'aucun travail n'est relevé.
Jalons
Les étapes qui marquent le chantier — datées quand elles sont atteintes.
{{ j.code }} · {{ j.libelle }}
07 Journal d'activité

Journal d'activité

Historique en lecture seule (append-only) : connexions, arrivages, ventes, imports et gestion des comptes.

Filtres
Affine le journal, puis applique
{{ logsTotal }} entrée{{ logsTotal > 1 ? 's' : '' }}
Journal
Append-only — aucune action de modification ou suppression possible
Quand Qui Action Entité Détails
{{ fmtDateTime(l.created_at) }} {{ l.user_email || '—' }} {{ actionLabel(l.action) }} {{ l.entite || '—' }} #{{ l.entite_id }}
{{ fmtDetails(l.details) }}
Aucune entrée de journal Essaie d'élargir ou de réinitialiser les filtres.
Ones
Connexion
Accéder à la gestion de stock motos
{{ authErreur }}
Ones · Gestion de stock motos
Ones
Mot de passe oublié
Indique ton email — si le compte existe, un lien de réinitialisation sera envoyé.
{{ forgotMessage }}
{{ authErreur }}
Ones · Gestion de stock motos
Ones
Nouveau mot de passe
Choisis un nouveau mot de passe pour ton compte.
{{ resetMessage }}
{{ authErreur }}
Le lien est valide une seule fois
{{ t.title }}
{{ t.msg }}