Projet étudiant · Data engineering

Des fichiers sources imparfaits à un entrepôt fiable.

Commandes, catalogue produits, livraisons fournisseurs, stocks et ventes d'une chaîne de magasins simulée, réunis dans un schéma en étoile. Trois questions métier : où manque-t-il du stock, quels fournisseurs tiennent leurs promesses, et à quelle vitesse le stock tourne-t-il ?

-lignes de vente
-relevés de stock
-magasins (EUR et CHF)
-contrôles de rapprochement
Défiler
01
Vue d'ensemble

L'activité en un coup d'oeil

Chiffre d'affaires converti en euros au taux du jour, marge calculée avec le coût valable au moment de la vente (historique SCD type 2).

Chiffre d'affaires et marge par jour

EUR, toutes enseignes. Les pics du samedi viennent des promotions.

Par catégorie

Chiffre d'affaires, EUR

Par magasin

Les magasins suisses vendent en CHF : montants convertis en EUR.

02
Ruptures de stock

Où le rayon est vide

Un produit est en rupture quand son stock de fin de journée vaut zéro. Les ventes perdues sont une estimation : la vente moyenne du produit les jours où il était disponible.

Taux de rupture par jour

Part des couples magasin x produit à zéro en fin de journée

Par jour de semaine

Taux de rupture moyen

Par catégorie

Taux de rupture et ventes perdues estimées

Par magasin

Taux de rupture et ventes perdues estimées

Produits le plus souvent en rupture

Jours magasin en rupture sur toute la période

03
Performance fournisseurs

Qui tient ses promesses

Chaque ligne de commande suit ses étapes : commandée, promise, livrée. OTIF = livrée à l'heure ET en totalité. Seules les lignes livrées ou dont la date promise est passée sont comptées.

Taux OTIF par fournisseur

Trié du meilleur au moins bon

Délai promis et délai réel

Jours entre la commande et la première livraison

Evolution mensuelle

Par mois de commande

Statut des lignes de commande

A la dernière date chargée

04
Rotation des stocks

Le stock qui dort

Rotation = coût des ventes / valeur moyenne du stock (au coût). Ramenée à une année pour comparer des périodes de longueur différente. Jours de stock = combien de temps le stock moyen dure.

Rotation annualisée par catégorie

Plus la barre est longue, plus le stock tourne vite

Jours de stock par catégorie

Combien de jours de ventes le stock moyen couvre

Valeur du stock par jour

EUR au coût, toutes enseignes

Produits à rotation lente

Plus grand nombre de jours de couverture

05
Qualité des données et pipeline

Rien ne se perd en silence

Chaque ligne source finit soit dans l'entrepôt, soit en quarantaine avec son motif. Les doublons ne gonflent pas les montants, les lignes en retard sont rangées à leur vraie date, et chaque chargement est rapproché des totaux envoyés par la source.

Lignes isolées par motif

Tables quarantine.*, toutes sources

Ventes arrivées en retard

Ecart entre le jour de la vente et le jour du fichier, hors jour même

Rapprochement avec les totaux sources

Dernière exécution, table audit.reconciliation

Etapes du pipeline

Table audit.pipeline_runs

Indicateurs d'anomalie simulés

Règles simples et explicables. Ce ne sont pas des preuves de vol ou de fraude.

06
Architecture

Le chemin d'une donnée

Airflow lance chaque jour le chargement, la transformation dbt, les tests et le rapprochement. Les couches sont séparées : brut, nettoyé, modèle en étoile, quarantaine et audit.

Sources, ingestion, raw, staging, marts, dashboard Catalogue, POSproduits, ventes Stocks, achatsinventaires, commandes Réception, financelivraisons, taux de change Ingestion PythonCOPY, manifestidempotent par jour raw + stagingtexte brut, puis typérègles qualité, dédoublonnage Schéma en étoiledbt, SCD1/SCD2faits incrémentaux Tableau de bordFastAPI / snapshot JSONPower BI (marts) quarantinelignes rejetées + motif auditlogs, rapprochement Airflow, une exécution par jourwait_for_files → ingest → dbt build → reconcile → export

Faits

fct_sales (ligne de ticket, incrémental), fct_inventory_daily (photo quotidienne, incrémental), fct_purchase_order_lines (snapshot accumulatif).

Dimensions

dim_product (SCD type 2 : prix, coût, fournisseur), dim_store et dim_supplier (SCD type 1), dim_date.

Données en retard

Fenêtre de retraitement de 3 jours, membre "produit inconnu" corrigé au run suivant, historique SCD2 reconstruit à chaque run.