# Professional Experience - ALTEN & Stellantis

---

## 🚗 Stellantis Projects

### 1. AutoExport-BI : Automated Power BI Data Export & Processing Pipeline

#### Context & Problem
Dans le cadre des activités d'ingénierie et d'analyse financière/opérationnelle menées pour le compte de **Stellantis**, la récupération et l'exportation de jeux de données complexes et massifs à partir des modèles sémantiques **Power BI Analysis Services** posaient d'importants problèmes de performance, de fiabilité et d'expérience utilisateur. 

Les tentatives d'extraction synchrone sur de longues périodes (multi-mois ou exercices fiscaux complets) ou sur des portefeuilles multi-entités entraînaient régulièrement des échecs critiques :
- **Dépassements de délais (Timeouts) & Blocages d'Interface :** Les requêtes DAX volumineuses bloquaient le fil d'exécution principal, gelant l'interface utilisateur et provoquant des interruptions d'interopérabilité .NET/Python.
- **Épuisement de la Mémoire (OOM) :** La manipulation synchrone de grands DataFrames en mémoire vive saturait les ressources système lors de la conversion directe des tables .NET.
- **Incapacité d'Annulation & Défaut de Reprise :** Impossibilité d'interrompre proprement un job bloqué ou de reprendre un traitement interrompu sans tout réexécuter depuis le début.
- **Absence de Contrôle d'Intégrité Automatisé :** Nécessité de vérifications manuelles fastidieuses pour s'assurer de l'exactitude des sommes et du nombre de lignes exportées par rapport au modèle source Power BI.

#### Objective
Concevoir et développer **AutoExport-BI**, une application desktop professionnelle et un pipeline d'orchestration de données Python haute performance, résilient et automatisé, dédié à l'extraction, la transformation, la validation et l'exportation multi-format des jeux de données Power BI de Stellantis. 

Le projet vise à offrir une interface graphique réactive (PyQt6), à supporter 4 modes d'exportation métier spécialisés, à optimiser la mémoire grâce à un stockage prioritaire au format Parquet, et à garantir une tolérance absolue aux pannes avec journalisation d'état et contrôle automatisé d'intégrité.

#### Architectural Rationale (Pourquoi PyQt6 ?)
- **0 € de coût de serveur :** L'application s'exécute entièrement sur l'ordinateur de l'utilisateur, évitant d'acheter ou de maintenir des serveurs cloud ou des bases de données distantes.
- **Déploiement simple et gratuit :** Distribué sous forme de binaire autonome (`.exe`), l'outil s'exécute immédiatement sans nécessiter d'installation lourde ou de droits d'administrateur informatique.
- **Sécurité et rapidité :** Toutes les données restent 100 % en local sur le poste de l'utilisateur, garantissant une confidentialité absolue et un traitement haute performance.

#### Features / Functionalities
- **Interface Desktop PyQt6 & Architecture Asynchrone :** Développement d'une application GUI moderne avec sélection de modes, boîte de dialogue interactive, suivi de progression en temps réel (`QtProgressTracker`), console de logs intégrée et gestionnaire d'annulation à chaud (*Cancel Task*) permettant le débrayage propre des workers d'arrière-plan (`QThread` / `ExportWorker`).
- **Connectivité Native Power BI & Yielding Dynamique du GIL :** Interopérabilité directe avec Power BI Analysis Services via le pilote natif .NET `ADOMDClient` (`pythonnet`). Intégration d'un mécanisme de libération explicite du GIL Python (`time.sleep(0)` tous les 1 000 enregistrements) durant l'itération des `DataTable` .NET pour préserver la réactivité de l'interface utilisateur.
- **Moteur d'Orchestration à 4 Modes d'Exportation Mémoire :**
  1. *12-Month Export :* Extraction glissante sur 12 mois se terminant au mois sélectionné.
  2. *Single Month :* Export ciblé sur un mois unique avec structuration en archives.
  3. *Customs Annual Export :* Export douanier/annuel global couvrant l'ensemble des entités juridiques (*legal entities*) pour un exercice donné.
  4. *GL Account Analysis :* Analyse approfondie des comptes du grand livre (GL Accounts) filtrée par plage de dates, pays d'origine et statuts, enrichie dynamiquement par rapprochement automatique des règles d'imputation (*CAT matching* via `Input_CAT.xlsx`).
- **Pipeline de Stockage Parquet-First & Conversions Excel Différées :** Stratégie de stockage hybride privilégiant le format columnar **Apache Parquet** (via Polars / PyArrow / Pandas) pour réduire considérablement l'empreinte mémoire et accélérer les I/O, couplée à un gestionnaire d'arrière-plan (`BackgroundExportManager`) orchestrant les conversions Excel (OpenPyXL / XlsxWriter) de manière asynchrone.
- **Gestionnaire d'État (State Manager) & Retry Tolérant aux Pannes :** Système de retentative intelligent avec persistance de l'état d'exécution et journalisation détaillée (`execution_log.json`), permettant d'isoler les échecs et de garantir la reprise sur erreur sans perte de données.
- **Module de Validation & Rapports d'Audit de Clichés (*Snapshots*) :** Contrôle automatisé post-export comparant dynamiquement le nombre de lignes et les sommes de contrôle (*checksums*) entre la requête DAX initiale et les fichiers générés, produisant un rapport d'intégrité d'audit pour les équipes Stellantis / ALTEN.

#### Impact & End Result
- **Élimination Totale des Timeouts & Disponibilité 100% :** Suppression définitive des erreurs de délai dépassé et des engorgements mémoire lors des exports volumineux multi-mois Stellantis grâce au streaming asynchrone et à la mémoire tampon Parquet.
- **Ergonomie & Contrôle Utilisateur Renforcé :** Déploiement d'une interface GUI réactive permettant aux ingénieurs et analystes de lancer, suivre et annuler des exports complexes en un clic sans bloquer leur poste de travail.
- **Polyvalence Analytique Ingénierie & Finance :** Automatisation réussie des exports récurrents d'ingénierie et des clôtures financières/comptables (GL Accounts) avec enrichissement automatique CAT.
- **Garantie de Qualité & Couverture de Test Intégrale :** Suite de tests automatisés (Pytest, Pytest-Qt) assurant une couverture de code rigoureuse (100%), incluant un test de fumée (*smoke test*) en direct contre l'environnement Power BI.
- **Packaging Industriel & Autonomie Totale :** Application autonomisée et compilée sous forme d'exécutable Windows sans dépendance externe (PyInstaller EXE via `AutoExport-BI.spec`), distribuée avec script de release PowerShell (`build_release.ps1`) et déployable instantanément dans `%LOCALAPPDATA%`.

#### Stack Used
- **Langage & Environnement :** Python 3.13, `uv` (gestionnaire de projet et de dépendances verrouillées)
- **Interface Graphique Desktop :** PyQt6, `pytest-qt`
- **Connectivité & Interopérabilité Power BI :** .NET `ADOMDClient.dll`, `pythonnet`, requêtes DAX
- **Traitement & Formatage de Données :** Apache Parquet, Polars, PyArrow, Pandas, OpenPyXL, XlsxWriter
- **Orchestration & Validation :** QThread Workers, State Manager JSON, Pytest, Coverage
- **Packaging & Déploiement :** PyInstaller (`AutoExport-BI.spec`), PowerShell release scripts

### 2. Monthly Billing Gap Analysis : Analyse mensuelle des écarts de facturation et amélioration continue

#### Context & Problem
Dans le cadre de ma mission mensuelle chez **Stellantis**, je réalise l'analyse comparative des extractions de facturation et de coûts de transport entre deux arrêtés successifs. Cette activité répond à un besoin de contrôle financier et opérationnel : expliquer pourquoi les montants et les volumes de *Billing Cases* évoluent d'un mois à l'autre, identifier les nouveaux chargements, localiser les écarts significatifs et fournir aux équipes métier une lecture exploitable des causes de variation.

Le traitement manuel de fichiers d'archives volumineux rendait l'analyse lente, peu reproductible et difficile à approfondir. Une variation globale pouvait provenir de plusieurs facteurs combinés : changement de statut d'un dossier, ajout d'un nouveau *Load ID*, modification d'un montant, rattachement à un autre centre de coûts ou effet de périmètre lié à une usine, un *Steering Partner*, un niveau de service, un compte GL ou un *Scheduling Pool*. Sans modèle analytique centralisé, il était difficile de passer rapidement du constat global à la cause racine.

Le projet **Monthly Billing Gap Analysis**, matérialisé par le rapport Power BI `06_Gap_Calculation - July_Export_2026.pbix`, industrialise cette mission récurrente. Chaque mois, le rapport compare l'extraction du mois courant à celle du mois précédent. Il est ensuite amélioré de manière incrémentale à partir des anomalies rencontrées, des nouveaux besoins métier et des retours des utilisateurs Stellantis.

#### Objective
Concevoir et maintenir un tableau de bord Power BI réutilisable permettant de :
- comparer deux snapshots mensuels d'archives de facturation ;
- calculer les écarts de montants en euros et de volumes de *Billing Cases* ;
- expliquer les variations selon les principaux axes financiers, logistiques et organisationnels ;
- détecter les nouveaux chargements ainsi que les dossiers nécessitant une vérification ;
- standardiser la procédure mensuelle grâce à des paramètres de période et de source ;
- améliorer progressivement la qualité, la lisibilité et la profondeur de l'analyse d'un mois à l'autre.

#### Architecture
L'architecture repose sur une chaîne analytique locale **Power Query → modèle sémantique tabulaire → DAX → rapport Power BI interactif** :

1. **Paramétrage mensuel des sources :** quatre paramètres Power Query (`Period1_Name`, `Period1_Source`, `Period2_Name`, `Period2_Source`) définissent les noms et les répertoires des deux périodes comparées. Le cycle mensuel consiste à faire glisser la période courante vers la période précédente, renseigner la nouvelle extraction, actualiser le modèle puis contrôler les résultats.
2. **Ingestion des archives Parquet :** les requêtes `AR_Old_Month` et `AR_New_Month` parcourent les dossiers d'archives, ignorent les fichiers cachés, appliquent des fonctions de transformation homogènes et consolident les fichiers de chaque période.
3. **Nettoyage et normalisation Power Query :** typage des dates et montants, nettoyage et suppression des espaces parasites, normalisation en minuscules des statuts et harmonisation de nombreux attributs métier avant chargement.
4. **Table de faits unifiée :** `Gap_Large` combine les deux snapshots mensuels et ajoute des clés analytiques, notamment `CA / Gl Account` et `Key_CostCenter_LegalEntity`, afin de faciliter les rapprochements et les analyses croisées.
5. **Enrichissement référentiel :** la dimension `Cost Centers`, alimentée depuis un référentiel Stellantis en ligne, enrichit les données avec le domaine, l'usine, l'entité juridique, le pays et le périmètre. La dimension calculée `DimDate` structure les analyses par date, mois, trimestre et semaine ISO.
6. **Comparaison au niveau du chargement :** la table calculée `Comparison_Jun26_vs_Jull26` agrège les deux snapshots par `Billing Cases_LoadId`, rapproche le mois courant du mois précédent avec `NATURALLEFTOUTERJOIN` et expose les montants, statuts et nombres de cas anciens et nouveaux. Cette couche permet notamment d'identifier les chargements nouvellement apparus.
7. **Modèle relationnel :** relations plusieurs-à-un entre la table de faits, le calendrier et les centres de coûts, complétées par une relation de comparaison au niveau du `Load ID`. Le modèle utilise le mode **Import** pour assurer des interactions rapides dans le rapport.
8. **Couche de calcul DAX :** douze mesures centralisées dans `#Measures` calculent les montants, volumes, écarts, sens de variation, pourcentage de changement, contribution au gap et valeurs des deux périodes.
9. **Couche de restitution :** dix pages Power BI, dont une page dédiée aux filtres, permettent de naviguer du KPI global vers les causes détaillées grâce aux slicers synchronisés et aux vues spécialisées.

#### Features / Functionalities
- **Calcul dynamique du gap entre deux extractions :** la mesure `Total_Gap` vérifie que deux snapshots sont sélectionnés, identifie automatiquement le plus récent et le plus ancien, puis calcule `Montant récent - Montant précédent`.
- **Suivi financier et volumétrique :** mesures `Total Amount`, `Count of Billing Cases`, `Number of Billing Cases`, `Sum_Previous_Month`, `Sum_New_Month`, `Gap % Change`, `Gap Direction` et `Gap Contribution %`.
- **Analyse temporelle des écarts :** page **Gap evolution in year** combinant évolution mensuelle, comparaison des extractions, ventilation par statut et cartes KPI de variation.
- **Comparaison du nombre de dossiers :** page **Comparaison of Bc number** consacrée aux écarts de volumes de *Billing Cases* par mois, extraction et statut.
- **Analyse géographique et industrielle :** page **Gap by Plant** avec carte Azure, tableau de détail et comparaison des montants ancien/nouveau par usine.
- **Analyse par partenaire de pilotage :** page **Gap by steering partner** permettant d'identifier les partenaires responsables des variations les plus importantes.
- **Analyse financière détaillée :** page **Gap by cost center** avec matrice par centre de coûts et compte GL, complétée par la page **Gap by Service Level and Gl Account** pour croiser les écarts avec le niveau de service et le type de coût.
- **Analyse opérationnelle par pool :** page **Gap by SchedullingPoolId** pour repérer les pools de planification générant les principaux écarts.
- **Détection des nouveaux chargements :** page **Newly Added Loads** comparant les `Load ID`, les statuts et les montants entre les deux snapshots afin d'isoler les nouveaux éléments du mois.
- **Contrôle des rattachements :** page **To be Verified** exposant les incohérences ou correspondances à contrôler entre centre de coûts, entité juridique, partenaire de pilotage et clé composite.
- **Filtres métier transverses :** période de traitement, statut, domaine, usine, centre de coûts, extraction et *Scheduling Pool*, avec navigation par boutons entre les pages.
- **Visualisations avancées :** graphiques combinés, histogrammes, matrices, tables détaillées, cartes KPI, **Azure Maps** et composants visuels personnalisés **Zebra BI Tables** et **Inforiver Charts**.

#### Monthly Operating Cycle & Continuous Improvement
La mission est exécutée selon un cycle mensuel reproductible :
1. réception et contrôle des nouvelles archives Parquet ;
2. mise à jour des paramètres de noms et de chemins des deux périodes ;
3. actualisation des requêtes Power Query et du modèle Import ;
4. contrôle de cohérence des montants, volumes, statuts et `Load ID` ;
5. analyse du gap global, puis décomposition par usine, domaine, centre de coûts, compte GL, partenaire, niveau de service et pool de planification ;
6. qualification des nouveaux chargements et des lignes à vérifier ;
7. synthèse des causes de variation pour les parties prenantes Stellantis ;
8. amélioration du rapport pour le cycle suivant : ajout ou adaptation de mesures, correction des règles de transformation, enrichissement des axes d'analyse et optimisation de l'ergonomie.

Cette approche transforme le rapport en produit analytique évolutif plutôt qu'en livrable ponctuel : les enseignements de chaque clôture mensuelle sont réinjectés dans le modèle et les visualisations du mois suivant.

#### Impact & End Result
- **Industrialisation d'une analyse mensuelle critique :** remplacement d'investigations dispersées par un processus paramétré, reproductible et documenté.
- **Réduction du temps de diagnostic :** navigation directe du gap global vers les dimensions responsables, sans reconstruire manuellement plusieurs tableaux intermédiaires.
- **Traçabilité des variations :** distinction claire entre évolution des montants, évolution du nombre de cas, changements de statut et apparition de nouveaux `Load ID`.
- **Vision multidimensionnelle :** lecture commune des impacts financiers et opérationnels par période, statut, domaine, usine, centre de coûts, compte GL, partenaire de pilotage, niveau de service et *Scheduling Pool*.
- **Détection précoce des anomalies :** mise en évidence des rattachements incohérents et des dossiers nécessitant une validation métier avant diffusion des conclusions.
- **Aide à la décision Stellantis :** production d'une restitution interactive utilisable lors des revues mensuelles pour prioriser les investigations et concentrer les actions correctives sur les écarts les plus significatifs.
- **Amélioration continue du dispositif :** consolidation mensuelle des règles de qualité, des calculs DAX et de l'expérience utilisateur afin d'augmenter progressivement la fiabilité et la valeur métier de l'analyse.
- **Résultat final :** un tableau de bord Power BI de dix pages, connecté à deux snapshots paramétrables, capable de comparer les périodes, calculer et expliquer les gaps, identifier les nouveaux chargements et fournir une piste d'analyse structurée jusqu'au niveau opérationnel.

#### Stack Used
- **Business Intelligence :** Microsoft Power BI Desktop
- **Préparation et transformation :** Power Query, langage **M**, ingestion de dossiers **Apache Parquet**
- **Modélisation sémantique :** moteur tabulaire Power BI, modèle Import, schéma relationnel, tables calculées
- **Calcul analytique :** **DAX** (`CALCULATE`, `VALUES`, `TOPN`, `SUMMARIZE`, `SELECTCOLUMNS`, `NATURALLEFTOUTERJOIN`, `DIVIDE`, `DISTINCTCOUNT`)
- **Référentiels et sources :** archives mensuelles Parquet sur lecteur d'entreprise, référentiel de centres de coûts Stellantis accessible en ligne
- **Visualisation :** Azure Maps, graphiques combinés, bar charts, matrices, tables, cartes KPI, slicers synchronisés
- **Custom visuals :** Zebra BI Tables, Inforiver Charts

---

## 🏢 ALTEN Projects

### 1. STALGEN-AI : Automated Test Scenario Generation for Automotive Software

#### Problem
Dans le cadre des activités de validation logicielle réalisées par ALTEN pour le compte du constructeur automobile **Stellantis**, les ingénieurs qualité sont amenés à analyser un volume particulièrement important de documents de spécifications fonctionnelles (SFD) pour des systèmes embarqués complexes (notamment les applications **Stellantis CRONOS / OMS**). La vérification manuelle de ces spécifications exige une conformité stricte aux normes de sécurité fonctionnelle automobile (**ISO 26262**). 

Cependant, cette activité de conception de cas de test est historiquement réalisée entièrement à la main, ce qui nécessite un temps considérable d'analyse et mobilise très fortement les ressources et compétences des équipes QA (Quality Assurance). De plus, la densité des exigences, la complexité technologique croissante des documents et la grande diversité des exigences métier associées augmentent de manière significative le risque d'erreurs d'interprétation, d'oublis de cas de test limites (*edge cases*) ou d'incohérences dans la conception des scénarios de validation logicielle.

#### Objective
Afin de surmonter ces contraintes, d'améliorer l’efficacité globale du processus de test et de standardiser la qualité des livrables produits pour le client, ALTEN souhaite mettre en place une solution intelligente et automatisée capable de générer des scénarios de test directement à partir des spécifications fonctionnelles. 

L’objectif principal du projet **STALGEN-AI** est de concevoir et développer une plateforme industrielle tirant parti des capacités avancées des grands modèles de langage (LLMs) pour analyser automatiquement les documents SFD et en extraire les informations fonctionnelles clés nécessaires à la génération de scénarios de validation. La solution vise à réduire significativement le temps consacré à l’analyse documentaire manuelle tout en garantissant la cohérence globale, la traçabilité complète et la haute qualité des scénarios générés. Elle permet également d'opérer un glissement stratégique dans le rôle des équipes QA, leur permettant de se concentrer sur des activités à très forte valeur ajoutée telles que la revue fonctionnelle critique, l'analyse d'exigences complexes et la validation métier sur bancs d'essais.

#### Functionalities
- **Chaîne d'Ingestion & Conversion Documentaire :** Ingestion des fichiers Word (`.docx`) et conversion en Markdown via Pandoc. Nettoyage du bruit documentaire et extraction automatique des exigences fonctionnelles clés, règles métier et user stories à l'aide d'expressions régulières (Regex).
- **Orchestration LLM Avancée & Prompt Engineering :** Utilisation de techniques de prompt engineering avancées incluant le raisonnement par chaîne de pensée (**Chain-of-Thought - CoT**) et des exemples guidés (**few-shot prompting**) pour guider le modèle LLM (*via Ollama*) vers une génération précise et déterministe de cas de test.
- **Validation de Schéma & Fallback de Génération :** Validation stricte des données générées au format JSON via **Pydantic** et intégration de mécanismes de fallback pour gérer les échecs de génération et éliminer toute incohérence.
- **Peuplement Automatique Excel :** Conversion et transfert automatique des cas de test JSON structurés vers des modèles Excel pré-définis (`.xlsx`) conformes aux trames qualité ALTEN.
- **Interface Utilisateur Streamlit :** Développement d'une interface web intuitive permettant le téléchargement de documents, la sélection du modèle LLM local et le téléchargement direct de la suite de tests finale par des utilisateurs non-techniques.

#### Impact and Results
- **Accélération du Cycle de Validation :** Réduction drastique du temps d'analyse et de génération de scénarios pour les systèmes complexes Stellantis CRONOS / OMS (traitement en quelques minutes par document au lieu de plusieurs jours).
- **Conformité ISO 26262 & Qualité :** Amélioration de la traçabilité des exigences et couverture exhaustive des cas limites (*edge cases*) pour respecter les normes de sécurité fonctionnelle automobile.
- **Confidentialité & Souveraineté des Données :** Garantie absolue de la confidentialité des spécifications confidentielles de Stellantis grâce à l'exécution 100% locale des modèles LLM via Ollama, évitant tout transfert de données vers des services cloud externes non autorisés.
- **Livrables Fournis & Validation :** Application Python modulaire complète, code source, documentation technique, guide utilisateur et chaîne complète de traitement validée par les équipes qualité ALTEN.

#### Stack Used
- **Langage & Cœur Applicatif :** Python *(orchestration et scripts de traitement)*
- **Interface Utilisateur :** Streamlit *(interface web interactive et ergonomique)*
- **Moteur LLM & IA :** Ollama *(exécution locale de modèles de langage open source)*
- **Parsing & Conversion Documentaire :** Pandoc, Regex
- **Validation de Données :** Pydantic *(validation de schémas JSON)*
- **Génération Excel :** OpenPyXL *(formatage des rapports conformes aux trames QA)*

---

### 2. Deliverable Management System (ALTENOVA) : Migration Excel vers Power Platform

#### Problem
Au sein de l'équipe **OMOL** d'**ALTEN Delivery Center Maroc**, le suivi rigoureux des livrables constitue une activité fondamentale et stratégique. Ce suivi permet de mesurer avec précision la performance des équipes, de garantir le respect strict des engagements contractuels (SLAs) pris envers le client et d'offrir une visibilité claire, fiable et réactualisée sur l’avancement global des projets. 

Cependant, le système historique reposait sur un unique fichier Excel macro (`.xlsm`) monolithique stocké et partagé sur SharePoint, présentant des limites critiques :
- **Problèmes d'Architecture & Surcharge :** Structure de données surdimensionnée comportant plus de **70 colonnes** dans une seule table.
- **Limites d'Accès Concurrent & Corruption :** Conflits d'accès simultanés fréquents et risques élevés de corruption du fichier.
- **Défaut de Confidentialité :** Manque de cloisonnement (un consultant pouvait consulter les données et saisies d'un autre).
- **Obligation de Récréation Annuelle :** Nécessité manuelle de créer un tout nouveau fichier Excel chaque année pour archiver et repartir de zéro.
- **Reporting Manuel Lourd :** Calculs manuels complexes des KPIs (OTD, RFT) et manque de centralisation, rendant le processus long et dépendant des utilisateurs.

#### Objective
Face à ces contraintes, ALTEN a décidé de concevoir, migrer et déployer **ALTENOVA**, une plateforme métier centralisée et sécurisée basée sur la Microsoft Power Platform. 

La solution vise à industrialiser la gestion des livrables, supprimer la dépendance aux fichiers Excel, automatiser le calcul des métriques de performance et offrir une vision analytique consolidée et réactualisée en temps réel, avec une capacité d'extension globale à l'échelle d'ALTEN.

#### Functionalities
- **Nouvelle Architecture de Données Normalisée :** Refonte et répartition des données dans **5 listes SharePoint interconnectées** (`DeliverableLog`, `DeliverableLookup`, `UserLookup`, `Date`, `WeekLookup`) avec définition de clés primaires et étrangères pour éliminer la redondance et optimiser le nombre de colonnes. Déclinaisons multi-projets adaptées (`KPI_Deliverables_Sharepoint`, `KPI_Deliverables_Sharepoint - Os`, `KPI_Deliverables_Sharepoint - SCEE`).
- **Confidentialité & Contrôle d'Accès Réseau :** Sécurisation et cloisonnement fin des droits d'accès (les consultants accèdent uniquement à leur périmètre de livrables, les managers disposent d'une vue globale).
- **Interface Utilisateur Sur-Mesure (Power Apps) :** Saisie, modification, mise à jour et suivi ergonomique de l'état des livrables et de l'historique complet des modifications.
- **Automatisations & Flux de Notification (Power Automate) :** Notifications en temps réel et rappels automatiques pour anticiper les échéances de livraison et alerte en cas de retard.
- **Calcul Automatique des Métriques & Formules DAX Avancées :**
  - **OTD (*On-Time Delivery Rate*) :** Mesure DAX évaluant le pourcentage de livrables remis dans les délais prévus (`Actual Delivery Date <= Initial Planned Delivery Date`).
  - **RFT (*Right First Time Rate*) :** Taux de livrables validés dès la première soumission sans nécessiter de révision ou retravaillage.
  - **Days Allocated & Days Delayed :** Cumul des jours de travail alloués et calcul dynamique du retard en jours par livrable (`Days Delayed`).
  - **Total Work Hours & Productivity Index :** Suivi consolidé des heures de travail consommées par semaine (`WeekNumber`) et par consultant.
  - **Indicateur d'Efficience (*Efficiency Metric*) :** Rapprochement croisé entre la charge allouée aux livrables finalisés (`Days Allocated`) et le nombre de jours de présence effectifs (`Days Present`).
- **Architecture de Reporting & Visualisations Décisionnelles Power BI (8 Pages Thématiques) :**
  - **1. Dashboard OTD + RFT :** Vue synthétique avec cartes KPI (`% OTD`, `% RFT`, `Total Quantity Otd`, `Total Quantity RFT`), graphiques combinés lignes/histogrammes (`lineClusteredColumnComboChart`) pour l'évolution mensuelle, Treemap de répartition par équipe et matrices multidimensionnelles.
  - **2. Analyse OTD / RFT (*Deep-Dive Analysis*) :** Table d'analyse détaillée au niveau du livrable (`ID`, `Deliverable Name`, `Responsable_Name`, `Deliverable Quantity`, `Request Received Date`, `Initial Planned Delivery Date`, `Actual Delivery Date`, `Days Delayed`) filtrable par statut OTD/RFT (Oui/Non), scope et dates.
  - **3. KPI Allocated Days :** Visualisation de la charge de travail avec histogrammes mensuels (`Total of Allocated days by month`), répartition par responsable (`Total quantity by deliverable responsable`) et camembert par périmètre métier.
  - **4. KPI Work Hours :** Suivi temporel de l'effort global par semaine (`WeekNumber`), année et mois via graphiques combinés et classement du volume d'heures par consultant.
  - **5. KPI Deliverables :** Vue volumétrique globale (`Total Deliverables`), histogramme par nom de livrable, camembert par scope métier et tableau croisé dynamique de suivi des livrables.
  - **6. KPI Efficiency & Dynamic Consultant Profiling :** Évaluation de la performance individuelle intégrant un affichage d'image dynamique (`Consultant Image URL`) pour visualiser le profil du consultant sélectionné, la carte KPI d'efficience, un tableau récapitulatif `Days Present` vs `Days Allocated` vs `Efficiency` et des courbes de tendance.
  - **7. Deliverable Revision & Defect Tracking :** Suivi hebdomadaire des révisions et des modifications d'état (`Deliverable Status`), identifiant les goulots d'étranglement et les retravaillages.
  - **8. Validation Mensuelle des Livrables & Intégration Power Apps Native :** Tableau de bord interactif intégrant un visuel custom **Power Apps** (`PowerApps_PBI_CV_...`) au cœur de Power BI. Permet l'écriture retour (*write-back*) et la validation en direct des statuts de livrables (`Deliverable Status`, `Responsable_Email`, `Deliverable ID`, `Deliverable Quantity`) par les responsables sans quitter l'interface Power BI.

#### Impact and Results
- **Passage à l'Échelle (30 Millions d'éléments) :** Capacité technique augmentée jusqu'à **30 000 000 d'éléments par liste**, éliminant définitivement le besoin de recréer de nouveaux fichiers d'archive annuels.
- **Suppression des Risques & Gains d'Efficacité :** 0% de conflits d'accès simultanés, traçabilité automatique (versionning) et réduction significative des tâches répétitives.
- **Maîtrise des Coûts & Conformité M365 :** Réutilisation des licences M365 existantes, zéro serveur à maintenir (Low-Code/Cloud).
- **Généralisation & Extension Globale :** Succès du projet et déploiement étendu à d'autres projets et équipes au sein d'ALTEN comme standard de référence pour le suivi des livrables.

#### Stack Used
- **Interface Utilisateur :** Microsoft **Power Apps** *(Canvas App métier)*
- **Base de Données Centralisée :** Microsoft **SharePoint Online** *(5 listes normalisées)*
- **Workflows & Notifications :** Microsoft **Power Automate**
- **Reporting & Business Intelligence :** Microsoft **Power BI**
- **Sécurité & Authentification :** Microsoft **365** *(RBAC basé sur l'authentification M365)*

---

### 3. AI-Powered Resume Ranking System : Automated Candidate Evaluation Platform

#### Problem
In modern recruitment, hiring teams face a severe bottleneck during the initial candidate screening phase. When a company posts a job opening, it frequently receives hundreds of applications containing resumes in various formats (PDF, DOCX, TXT, scanned images). 

Manual resume screening suffers from critical limitations:
- **Time-Consuming Process:** Recruiters typically spend 40% to 70% of their time reading resumes individual by individual, taking days to process a single hiring batch.
- **Inconsistency & Unconscious Bias:** Human evaluation is inherently subjective and error-prone. Different recruiters apply varying criteria, leading to inconsistent candidate rankings and potential unconscious bias.
- **High Risk of Missing Top Talent:** Due to fatigue and superficial skimming, recruiters often overlook highly qualified candidates or miss key technical skills buried in complex resume layouts.

#### Objective
The goal of the **AI-Powered Resume Ranking System** is to deliver a comprehensive, scalable, and automated technical blueprint that standardizes candidate evaluation using Large Language Models (LLMs).

The system aims to:
- Automate the first-pass screening stage by parsing resumes and semantically matching candidate profiles against structured job descriptions.
- Produce an objective, ranked leaderboard featuring a percentage match score (0-100%), a natural language candidate summary, and a structured Pros & Cons analysis.
- Dramatically reduce time-to-hire from days to minutes while empowering recruiters with **Human-in-the-Loop** capabilities (manual score overrides and custom notes).
- Ensure data sovereignty by supporting both cloud AI models (Gemini) and self-hosted local LLMs (Ollama with Llama 3 / Mistral) for sensitive candidate data.

#### Functionalities
- **Bulk Ingestion & Asynchronous Task Queue:** Drag-and-drop interface supporting batch uploads of PDF, DOCX, and TXT resumes. Requests are enqueued via **Redis** and processed asynchronously by **Celery** background workers to prevent HTTP connection timeouts during large batch processing.
- **Multi-Format Document Parsing & OCR Fallback:** Dedicated parsing pipeline utilizing **PyMuPDF** (`fitz`) for PDF text extraction, **python-docx** for Word documents, and **Tesseract OCR** as a fallback for scanned or image-based PDFs. Strips headers/footers, removes whitespace, and normalizes encodings.
- **Structured Job Requirements Management:** Recruiter interface capturing Must-Have skills, Nice-to-Have skills, required experience levels, and contextual role descriptions.
- **Custom Python AI Orchestrator & Weighted Scoring Rubric:** A lightweight, custom-developed Python orchestration module constructs structured prompts enforcing a configurable scoring rubric:
  - 🥇 **40% Weight:** Must-have skills match
  - 🥈 **25% Weight:** Experience level match
  - 🥉 **20% Weight:** Nice-to-have skills match
  - 🏅 **15% Weight:** Profile coherence & communication quality
- **Multi-Provider Adapter Pattern:** Provider-agnostic architecture built directly into the custom Python orchestrator supporting Google Gemini, OpenAI, or local models via **Ollama** (e.g., Llama 3, Mistral) for strict data privacy requirements.
- **Structured JSON Schema Enforcement:** Enforces strict JSON outputs containing `match_score` (integer 0-100), `summary` (2-4 sentences), `pros` (3-6 strengths), and `cons` (2-4 gaps). Automated schema validation and retry logic handled natively by the custom Python orchestrator.
- **Ranked Dashboard & Human-in-the-Loop:** Real-time frontend displaying candidates sorted by match score with visual percentage bars, expandable pros/cons, manual recruiter score overrides, notes, and CSV/PDF export.
- **Progressive Polling & Real-Time Updates:** React Query integration with exponential backoff polling (`GET /api/v1/jobs/{id}/results`) or WebSockets to display candidate scores as they are processed in background workers.

#### Impact and Results
- **70% Reduction in Time-to-Hire:** Cuts initial screening time from days of manual reading to a few minutes per candidate batch.
- **Objective & Standardized Candidate Evaluation:** Applies consistent, weighted evaluation rubrics across all applicants, significantly mitigating unconscious bias.
- **Lightweight & Custom AI Orchestration:** High performance, zero framework overhead, and complete architectural control without heavy external dependencies (built with a custom, native Python AI Orchestrator).
- **High Scalability & Async Resilience:** Decoupled three-tier architecture (FastAPI + Celery + Redis + PostgreSQL) capable of handling massive upload volumes without server memory exhaustion or connection dropouts.
- **Data Privacy & Sovereignty:** Full support for on-premises deployment via Ollama (running Llama 3 / Mistral on a single GPU), ensuring complete candidate data protection.
- **Recruiter Productivity Boost:** Enables HR teams to focus on interviewing top-ranked talent rather than performing manual document filtering.

#### Stack Used
- **Frontend SPA :** React + TypeScript
- **UI Components & Styling :** Tailwind CSS + `shadcn/ui`
- **State Management & Polling :** React Query (TanStack Query)
- **Backend API Gateway :** FastAPI (Python async REST framework)
- **Task Queue & Worker Broker :** Celery + Redis
- **Document Parsing :** PyMuPDF (`fitz`), `python-docx`
- **OCR Fallback :** Tesseract (`pytesseract`)
- **AI Orchestration :** **Custom Python AI Orchestrator** *(Native Python implementation with custom provider adapters, prompt templates, Pydantic schema validation, and retry logic — without external frameworks like LangChain)*
- **LLM Engine :** Google Gemini / Ollama (Local Llama 3, Mistral)
- **Database & Persistence :** PostgreSQL 16 (JSONB columns for flexible pros/cons arrays)
- **ORM & Migrations :** SQLAlchemy + Alembic
- **Object Storage :** MinIO (Self-hosted S3-compatible) / AWS S3
- **Authentication :** JWT + OAuth 2.0
- **Containerization & CI/CD :** Docker, Docker Compose, GitHub Actions

---

### 4. SOM & eDCT Quality Checker : Automated Excel Workbook Validation & Data Quality Platform

#### Context & Problem
Au sein des équipes de coordination et de gestion des fournisseurs (**Supplier Onboarding & Management - SOM**) d'**ALTEN**, le suivi et la qualification des dossiers fournisseurs (notamment dans le cadre des processus **eDCT - electronic Delivery & Coordination Tracking**) reposent sur la manipulation de classeurs Excel complexes comportant plusieurs dizaines de colonnes et des centaines de lignes saisies par différents intervenants.

La vérification manuelle de la conformité de ces classeurs présentait des limites critiques :
- **Taux d'Erreur Élevé & Traitement Manuel :** Contrôles visuels répétés et fastidieux des formats d'email, numéros de téléphone, identifiants COFOR (ex: format `6 caractères + 2 espaces + 2 caractères`), et dates de jalons (kick-off, onboarding).
- **Règles Métier & Cohérence Inter-Feuilles :** Complexité des validations croisées entre feuilles (ex: vérification de l'existence des *Punch Codes* fournisseurs de la feuille `Supplier Level` dans la feuille `Open Task`) et contrôle de la cohérence des formules de calcul sans altérer la structure Excel source.
- **Risque de Corruption des Formules et Métadonnées OOXML :** L'utilisation d'outils d'automatisation classiques risquait de supprimer ou dégrader les formules, styles, tables de données et extensions XML complexes (`openpyxl` ne gérant pas nativement l'ensemble des parties OOXML avancées).
- **Absence de Traçabilité & Historique :** Manque d'un registre centralisé d'audit permettant de suivre l'évolution des taux de conformité au fil des exécutions.

#### Objective
Concevoir et développer une plateforme d'analyse et de contrôle qualité automatisée (**SOM & eDCT Quality Checker**), combinant un moteur d'analyse Python hautement résilient et une application desktop réactive (PyQt6). 

L'objectif est d'automatiser le filtrage par périmètre (*Analysis scope*), d'exécuter un catalogue rigoureux de règles de validation sur les lignes évaluées, de générer des indicateurs d'erreurs enrichis (`Check` et `Comment`) et d'exporter un classeur d'analyse parfaitement préservé au niveau de ses structures, formules et extensions XML OOXML.

#### Architectural Rationale (Pourquoi PyQt6 ?)
- **0 € de coût de serveur :** L'application s'exécute entièrement sur l'ordinateur de l'utilisateur, évitant d'acheter ou de maintenir des serveurs cloud ou des bases de données distantes.
- **Déploiement simple et gratuit :** Distribué sous forme de binaire autonome (`.exe`), l'outil s'exécute immédiatement sans nécessiter d'installation lourde ou de droits d'administrateur informatique.
- **Sécurité et rapidité :** Toutes les données restent 100 % en local sur le poste de l'utilisateur, garantissant une confidentialité absolue et un traitement haute performance.

#### Features / Functionalities
- **Interface Desktop PyQt6 Multi-Projets :** Interface graphique ergonomique permettant de sélectionner le contexte d'analyse (*SOM Quality Checker* ou *eDCT Quality Checker*), de choisir les classeurs sources/destinations et de prévisualiser les résultats de validation en temps réel.
- **Moteur d'Orchestration & Exécution Asynchrone :** Séparation stricte de l'interface et des traitements lourds via un worker thread dédié (`AnalysisWorker` / `QThread`), évitant tout gel de l'application durant le chargement et l'analyse de volumineux fichiers Excel.
- **Catalogue Avancé de Règles de Validation (SOM & eDCT) :**
  - **Validation de Formats & Formules :** Vérification des masques d'emails, numéros de téléphone (7-20 chiffres), codes COFOR (format 12 caractères), dates conformes (format native Excel ou `DD.MM.YYYY`), et intégrité de la structure des formules d'une ligne de référence par rapport aux lignes suivantes.
  - **Cohérence Métier & Cross-Sheet Rules :** Rapprochement automatique inter-feuilles (*Punch Code* entre `Supplier Level` et `Open Task`) et règles conditionnelles d'onboarding/statuts.
  - **Masques de Validation & Agrégation :** Calcul dynamique par ligne évaluée du nombre d'erreurs (`Check`) et assemblage d'explications lisibles (`Comment`) séparées par des tuyaux (`|`).
- **Préservation Intégrale des Métadonnées & Extensions OOXML :** Algorithme de réinjection post-traitement restaurant les 16 sous-parties XML, les styles, les formules, les tableaux `Tabella2` et les structures d'extension non gérées par défaut par `openpyxl`, garantissant l'intégrité à 100% du fichier source.
- **Base de Données Historique & Traçabilité (SQLite) :** Persistance de l'historique complet des exécutions et des métriques de qualité (`som_analyzer.db`) stockée dans `%LOCALAPPDATA%` pour l'audit et l'analyse des tendances de qualité.
- **Moteur Packageable & Approche Notebook-First :** Architecture modulaire disponible sous forme de package Python isolable (`som_analyzer`), exécutable via CLI (`som-analyze`, `som-analyze-smoke`) ou à partir du notebook canonique (`som_analyzer.ipynb`).

#### Impact & End Result
- **Gain de Temps & Réduction des Erreurs (Gain > 80%) :** Automatisation complète de l'analyse des classeurs fournisseurs (100+ lignes vérifiées en quelques secondes contre plusieurs heures de vérification manuelle).
- **Zéro Altération de la Structure Source :** Maintien absolu de la fidélité des feuilles de calcul, garantissant qu'aucune formule ou mise en forme métier n'est perdue lors de la génération du rapport de qualité.
- **Standardisation de la Qualité des Données SOM/eDCT :** Uniformisation des critères de validation à l'échelle des équipes ALTEN et détection précoce des blocages de déploiement fournisseurs.
- **Historisation & Auditing :** Suivi centralisé des exécutions permettant de piloter la qualité des données transmises par les fournisseurs au fil des campagnes.
- **Packaging & Déploiement Portable :** Packaging automatisé en exécutable Windows autonome (script `build_exe.ps1`) facilitant le déploiement immédiat auprès des équipes opérationnelles non technologiques.

#### Stack Used
- **Langage & Core :** Python >=3.12, `uv` (gestionnaire de projet et d'environnement)
- **Interface Graphique Desktop :** PyQt6, `QThread`
- **Manipulation & Extraction Excel :** Pandas, `openpyxl`, Regex
- **Base de Données & Historique :** SQLite 3 (`som_analyzer.db`)
- **Environnement & Packaging :** PyInstaller (`build_exe.ps1`), Jupyter Notebook (`som_analyzer.ipynb`), Husky, Prettier

---

### 5. SOM FollowUp & Escalation Dashboard : Supplier Onboarding & Performance Tracking Platform

#### Context & Problem
Dans le cadre des activités de suivi de l'intégration et de la qualification des fournisseurs (**Supplier Onboarding & Management - SOM**) pour le compte d'**ALTEN** et **Stellantis**, le pilotage des processus d'onboarding exige un suivi rigoureux des jalons d'intégration et du traitement des incidents. 

Le workflow de qualification implique plusieurs niveaux de décision et d'escalade :
- **Jalons d'intégration critiques :** Suivi des étapes de *Readiness status*, *Kick-off milestone* et *Go-live status*.
- **Workflow d'Escalade à 4 Niveaux (Owner Roles) :** Progression hiérarchique des cas complexes du Niveau 0 (`00_SOM_Team`), Niveau 1 (`01_SOM+`), Niveau 2 (`02_TL` - Team Lead) jusqu'au Niveau 3 (`03_Stellantis`).
- **Absence de Métriques Unifiées :** L'absence d'un outil décisionnel centralisé empêchait le calcul automatisé des taux d'escalade entre niveaux, le suivi des délais de résolution et l'anticipation des retards sur les jalons d'intégration.

#### Objective
Concevoir et déployer **SOM FollowUp Dashboard**, une suite de tableaux de bord décisionnels Power BI haute performance connectée aux référentiels de données centralisés (`Gold source Original`, `Gold source For Kpis`). 

Le projet vise à industrialiser le suivi des dossiers d'onboarding, mesurer l'efficacité de la résolution des escalades par niveau de responsabilité, fournir des alertes temporelles automatisées sur les jalons en retard et offrir une visibilité consolidée en temps réel pour les comités de pilotage ALTEN / Stellantis.

#### Features / Functionalities
- **Modèle de Données Centralisé & Traitement des Multi-Sources :** Structuration du modèle sémantique autour des bases de données fournisseurs (`Gold source Original`, `Gold source For Kpis`) et de la table dédiée au suivi des escalades (`Escalation Data`).
- **Moteur d'Escalade Multi-Niveaux & Redistribution Automatique (Moteur DAX Avancé) :**
  - **Mesure d'Escalade Inter-Niveaux (`Escalation % vs Previous Level`) :** Calcul dynamique en DAX du taux de transfert des incidents d'un rôle d'escalade à l'autre (`00_SOM_Team` -> `01_SOM+` -> `02_TL` -> `03_Stellantis`).
  - **Redistribution des Cas Clôturés (`Total Case by Owner`) :** Algorithme DAX réattribuant dynamiquement tous les cas résolus/clôturés (*Closed*, *Closed Kick Off*) vers l'équipe de premier niveau `00_SOM_Team`, tout en excluant les statuts non valides (`No Valid`, `Maf`, `Type 1`).
  - **Suivi des Objectifs & Formatage Conditionnel (`Escalation Color`, `Escalation Target`) :** Attribution automatique de codes couleurs selon le respect des cibles de délai d'escalade (`Escalation Delay`).
- **Indicateurs Logic Flags & Système d'Alerte Précoce (Kick-Off & Readiness) :**
  - **Readiness Flag & Algorithme de Sévérité (`Readiness Flag`) :** Mesure automatique de l'écart entre la date de Kick-off effective et aujourd'hui. En cas de dépassement du délai standard de 3 semaines (21 jours), classification automatique du niveau de risque : *Simple* (< 5 jours après 3 semaines), *Moyen* (5 à 10 jours) ou *Critique* (> 10 jours).
  - **KickOff Flag & Détection des Dossiers Orphelins :** Suivi automatisé des jalons Kick-off et comptage distinct des fournisseurs en attente de confirmation (`Seller Empty Return` / `Count of Seller Empty`).
- **Architecture de Reporting & Visualisations Décisionnelles Power BI (13 Pages Thématiques) :**
  - **1. Escalation Overview :** Entonnoir de conversion (*Funnel visual*) des cas par niveau d'escalade, cartes KPI synthétiques et matrice globale des volumes et taux d'escalade.
  - **2. Escalation Detail :** Analyse détaillée au niveau fournisseur avec jauges de performance (*Gauge visual*), tables d'audit et filtres interactifs par rôle d'escalade.
  - **3. Escalation FollowUp - Ongoing Topics :** Suivi en temps réel des dossiers d'escalade en cours d'instruction, identifiant les blocages actifs.
  - **4. KPI Type 2, 3 & 4 :** Histogrammes et ventilations détaillées par typologies d'incidents et statuts de dossiers.
  - **5. Readiness & KickOff FollowUp :** Graphiques en secteurs (*Pie chart*), histogrammes et tables croisées comparant les dates planifiées vs effectives de Kick-off et Readiness.
  - **6. Go-Live Tracking :** Suivi des dates d'entrée en production effectives, analyse des retards de déploiement et des dossiers en attente de validation vendeur.
  - **7. Vues Consolidées & Analyses de Direction :** Pages d'analyse ad-hoc structurées pour les revues opérationnelles hebdomadaires ALTEN / Stellantis.

#### Impact and Results
- **Visibilité à 360° sur le Workflow Onboarding :** Centralisation complète de l'état d'avancement de plusieurs centaines de dossiers fournisseurs sur un unique tableau de bord interactif.
- **Réduction des Délais de Résolution des Escalades :** Détection immédiate des goulots d'étranglement par niveau hiérarchique (`SOM+`, `Team Lead`, `Stellantis`) et réactivité accrue sur les incidents critiques.
- **Détection Précoce des Risques (Early Warning System) :** Alertes visuelles automatiques (*Simple*, *Moyen*, *Critique*) sur les fournisseurs accumulant plus de 3 semaines de retard post-Kick-off.
- **Standard de Pilotage Opérationnel :** Déploiement réussi et adoption comme outil de référence hebdomadaire pour les comités de pilotage SOM ALTEN / Stellantis.

#### Stack Used
- **Business Intelligence & Reporting :** Microsoft **Power BI Desktop & Service**, format PBIR (*Power BI Enhanced Report Format*)
- **Langage de Modélisation & Calculs :** **DAX** *(variables complexes, SWITCH(TRUE()), DATEDIFF, DISTINCTCOUNTNOBLANK, filtres contextuels)*
- **Langage de Structure de Rapport :** **TMDL** *(Tabular Model Definition Language)*
- **Architecture de Données :** SharePoint Online / Tables de Données Centralisées (`Gold source Original`, `Gold source For Kpis`)
- **Visualisations Avancées :** Funnel Visuals, Gauge Charts, Line & Clustered Column Charts, Dynamic Formatting Rules