{"id":43900309,"url":"https://github.com/arthurcornelio88/insee_data_processor","last_synced_at":"2026-02-06T18:40:58.285Z","repository":{"id":314873095,"uuid":"1057057506","full_name":"arthurcornelio88/insee_data_processor","owner":"arthurcornelio88","description":"Module Python professionnel pour enrichir des données d'entreprises avec l'API INSEE Sirene. Cache intelligent, export Salesforce, interface CLI flexible.","archived":false,"fork":false,"pushed_at":"2025-09-15T09:13:37.000Z","size":167,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-09-15T11:20:56.242Z","etag":null,"topics":["api","business-intelligence","csv","data-processing","enterprise","insee","pandas","python","salesforce","sirene","uv"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arthurcornelio88.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-15T08:11:52.000Z","updated_at":"2025-09-15T09:18:20.000Z","dependencies_parsed_at":"2025-09-15T11:21:37.041Z","dependency_job_id":"c74380d0-f6f2-47eb-8d19-d16f1aae9dfd","html_url":"https://github.com/arthurcornelio88/insee_data_processor","commit_stats":null,"previous_names":["arthurcornelio88/fetch_insee"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/arthurcornelio88/insee_data_processor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthurcornelio88%2Finsee_data_processor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthurcornelio88%2Finsee_data_processor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthurcornelio88%2Finsee_data_processor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthurcornelio88%2Finsee_data_processor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arthurcornelio88","download_url":"https://codeload.github.com/arthurcornelio88/insee_data_processor/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthurcornelio88%2Finsee_data_processor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29172620,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-06T16:33:35.550Z","status":"ssl_error","status_checked_at":"2026-02-06T16:33:30.716Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","business-intelligence","csv","data-processing","enterprise","insee","pandas","python","salesforce","sirene","uv"],"created_at":"2026-02-06T18:40:57.516Z","updated_at":"2026-02-06T18:40:58.276Z","avatar_url":"https://github.com/arthurcornelio88.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# INSEE Data Processor 🏢\n\n**Module professionnel pour enrichir des données d'entreprises avec l'API INSEE Sirene**\n\n[![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)\n[![uv](https://img.shields.io/badge/uv-compatible-green.svg)](https://github.com/astral-sh/uv)\n\n## 🎯 Fonctionnalités\n\n### 🆕 **Nouveautés Septembre 2025**\n- 🏛️ **Classification INSEE officielle** : Utilise `Categorie_Entreprise_INSEE` (critères financiers inclus)\n- 📊 **Conservation complète** : 19 colonnes API INSEE v3.11 préservées\n- 🔧 **Logique de révision intelligente** : CONFLICT_TO_REVIEW/TO_REVIEW/NOT_FOUND\n- ⚡ **Optimisations avancées** : Détection doublons, cache intelligent, gestion pauses API\n\n### 🚀 **Fonctionnalités principales**\n- 🔍 **Recherche automatique** dans la base Sirene INSEE\n- 📊 **Enrichissement complet** avec toutes les données INSEE disponibles\n- 🚀 **Export Salesforce** avec statuts de révision intelligents\n- ⚡ **Cache intelligent** pour éviter les doublons (30-50% d'économie)\n- 🛡️ **Rate limiting** respecté (30 requêtes/minute max)\n- 🔧 **Correction automatique** des effectifs manquants\n- 📝 **Interface flexible** : Support de noms de colonnes personnalisés\n- 🧪 **Mode démo** pour tester avant traitement complet\n\n## 🚀 Installation\n\n### Prérequis\n- Python 3.9+\n- Clé API INSEE Sirene ([Obtenir ici](https://api.insee.fr/catalogue/))\n\n### Installation avec uv (recommandé)\n\n```bash\n# Cloner le repository\ngit clone git@github.com:arthurcornelio88/insee_data_processor.git\ncd insee_data_processor\n\n# Installer les dépendances\nuv sync\n\n# Configurer la clé API\ncp .env.example .env\n# Éditer .env et ajouter votre SIRENE_API_KEY\n```\n\n### Installation alternative (pip)\n\n```bash\n# Installer les dépendances\npip install requests python-dotenv\n\n# Configurer la clé API\ncp .env.example .env\n# Éditer .env et ajouter votre SIRENE_API_KEY\n```\n\n## 📋 Format des données\n\n### Fichier d'entrée\nVotre fichier CSV doit contenir au minimum une colonne avec les noms d'entreprises :\n\n```csv\nOrganisation,Taille d'entreprise\nACME Corporation,GE\nTech Solutions SAS,ETI\nGlobal Industries,PME\nCompagnieInexistante,PME\n```\n\n### 🆕 Colonnes complètes générées (19 au total)\n\n**Colonnes de base** :\n- `Organisation_Original` : Nom d'entreprise original\n- `Taille_Original` : Taille déclarée par l'utilisateur  \n- `Statut_Recherche` : Trouvé/Non trouvé\n\n**🏛️ Colonnes INSEE enrichies** :\n- `SIREN` : Identifiant unique entreprise (9 chiffres)\n- `SIRET` : Identifiant établissement principal\n- `Denomination_INSEE` : Dénomination officielle complète\n- `Categorie_Entreprise_INSEE` : **Classification officielle (MICRO/PME/ETI/GE)**\n- `Date_Creation` : Date de création de l'entreprise\n- `Activite_Principale` : Code APE/NAF détaillé\n- `Etat_Administratif` : Statut actif/cessé\n- `Etablissement_Siege` : Indicateur siège social\n- `Nombre_Etablissements` : Nombre total d'établissements\n- `tranche_effectifs_unite_legale` : Tranche officielle INSEE\n\n**💼 Colonnes Salesforce** :\n- `Effectifs_Description` : Description textuelle des effectifs\n- `Effectifs_Numeric` : Valeur numérique calculée\n- `Effectifs_Salesforce` : Valeur finale pour export\n- `Confiance_Donnee` : Niveau de confiance (high/medium/low)\n- `Statut_Revision` : TO_REVIEW/CONFLICT_TO_REVIEW/NOT_FOUND\n- `Notes_Revision` : Explications détaillées des divergences\n\n## 🔧 Utilisation\n\n### Interface en ligne de commande\n\n```bash\n# Traitement complet avec toutes les colonnes INSEE\npython scripts/process_companies.py data/\u003cton-fichier\u003e.csv \\\n    --company-col \"Organisation\" \\\n    --size-col \"Taille d'entreprise\" \\\n    --output output/enriched_complet.csv\n\n# Colonnes personnalisées\npython scripts/process_companies.py data.csv \\\n    --company-col \"nom_entreprise\" \\\n    --size-col \"taille\"\n\n# Mode démo (100 premières entreprises pour test)\npython scripts/process_companies.py data/\u003cton-fichier\u003e.csv \\\n    --company-col \"Organisation\" \\\n    --size-col \"Taille d'entreprise\" \\\n    --demo 100\n```\n\n### Utilisation en module Python\n\n```python\nfrom src.insee_client import INSEEClient\nfrom src.data_processor import DataProcessor\nfrom src.salesforce_export import SalesforceExporter\nimport pandas as pd\n\n# Initialisation\nclient = INSEEClient()\nprocessor = DataProcessor(client)\nexporter = SalesforceExporter()\n\n# Chargement des données\ndf = pd.read_csv(\"data/face_raw_full.csv\")\n\n# Traitement complet avec 19 colonnes conservées\ndf_enriched = processor.process_companies(\n    df, \n    company_col=\"Organisation\",\n    size_col=\"Taille d'entreprise\"\n)\n\n# Export Salesforce avec classification officielle\nsf_data = exporter.transform_for_salesforce(df_enriched)\nsf_data.to_csv(\"output/salesforce_export_complet.csv\", index=False)\n\n# Exemple d'analyse des divergences de classification\nconflicts = sf_data[sf_data['Statut_Revision'] == 'CONFLICT_TO_REVIEW']\nprint(f\"Divergences classification: {len(conflicts)} entreprises\")\n```\n\n## ⚙️ Configuration\n\n### Variables d'environnement (.env)\n```env\nSIRENE_API_KEY=votre_cle_api_insee\n```\n\n### Configuration avancée (config/config.yaml)\n```yaml\ninsee:\n  base_url: \"https://api.insee.fr/api-sirene/3.11\"  # API v3.11 avec toutes les données\n  rate_limit: 30  # requêtes par minute\n  delay_between_requests: 4  # secondes\n  cache_enabled: true\n\nprocessing:\n  demo_rows: 100  # Nombre d'entreprises pour le mode démo\n  batch_size: 100\n  preserve_all_columns: true  # Conservation des 19 colonnes\n  \nsalesforce:\n  use_official_classification: true  # Utilise Categorie_Entreprise_INSEE\n  auto_correct_effectifs: true\n  revision_statuses:\n    conflict: \"CONFLICT_TO_REVIEW\"  # Divergence déclaré vs INSEE\n    review: \"TO_REVIEW\"             # Faible confiance\n    not_found: \"NOT_FOUND\"          # Non trouvé Sirene\n```\n\n## 📊 Exemple de résultat (19 colonnes)\n\n```csv\nOrganisation_Original,Taille_Original,Statut_Recherche,SIREN,SIRET,Denomination_INSEE,Categorie_Entreprise_INSEE,Date_Creation,Activite_Principale,Etat_Administratif,Etablissement_Siege,Nombre_Etablissements,tranche_effectifs_unite_legale,Effectifs_Description,Effectifs_Numeric,Effectifs_Salesforce,Confiance_Donnee,Statut_Revision,Notes_Revision\nAIRBUS,GE,Trouvé,383474814,38347481400068,AIRBUS,GE,1991-10-18,30.30Z,A,False,,52,5000 à 9999 salariés,7500.0,7500.0,low,TO_REVIEW,📊 Faible confiance ou grande tranche - 5000 à 9999 salariés - Vérifier\nADECCO,PME,Trouvé,343009866,34300986600926,ADECCO TRAINING,GE,1987-10-05,85.59A,A,False,,22,100 à 199 salariés,150.0,150.0,medium,CONFLICT_TO_REVIEW,⚠️ Classification divergente: PME déclaré vs GE INSEE (effectifs: 150.0)\nCompagnieInexistante,PME,Non trouvé,,,,,,,,,,,100 à 199 salariés,,100.0,medium,NOT_FOUND,📊 Effectifs estimés par script selon Taille_Original (PME)\n```\n\n### 🎯 Points clés du résultat\n- **Classification officielle** : `Categorie_Entreprise_INSEE` fait autorité (ex: ADECCO = GE malgré 150 employés)\n- **Divergences détectées** : Comparaison automatique déclaré vs INSEE\n- **Données complètes** : 19 colonnes conservées pour analyses futures\n- **Statuts intelligents** : TO_REVIEW, CONFLICT_TO_REVIEW, NOT_FOUND\n\n## 🔍 Optimisations\n\n### 🆕 Optimisations Septembre 2025\n- **Classification officielle** : Fin des calculs approximatifs, utilise les critères INSEE complets\n- **Conservation données** : 19 colonnes API complètes vs colonnes minimales précédentes  \n- **Logique révision** : Détection intelligente des divergences (PME déclaré vs GE INSEE)\n\n### Cache intelligent et performance\n- **Détection des doublons** : Évite les requêtes redondantes automatiquement\n- **Économie typique** : 30-50% de requêtes en moins sur gros datasets\n- **Statistics en temps réel** : Affichage du taux d'optimisation et cache hits\n- **Pause intelligente** : 2s entre variations pour respecter les limites API\n\n### Gestion des erreurs et qualité\n- **Rate limiting** : Respect automatique des limites API (30 req/min)\n- **Variations de noms** : Essai de différentes variantes si échec initial\n- **Correction automatique** : Estimation des effectifs manquants selon taille déclarée\n- **Validation données** : Vérification cohérence et marquage des conflits\n\n## 🛠️ Structure du projet\n\n```\ninsee_data_processor/\n├── src/\n│   ├── insee_client.py      # Client API v3.11 avec cache et rate limiting\n│   ├── data_processor.py    # Conservation 19 colonnes + logique enrichissement\n│   └── salesforce_export.py # Export avec classification officielle INSEE\n├── scripts/\n│   ├── process_companies.py     # Interface CLI principale\n│   ├── generate_report.py      # 🆕 Générateur rapports professionnels\n│   ├── fix_size_thresholds.py  # Correction données existantes\n│   └── fix_effectifs_description.py # Correction effectifs\n├── data/\n│   └── face_raw_full.csv       # Dataset principal (3034 entreprises)\n├── docs/\n│   ├── REFACTOR_CLASSIFICATION_INSEE.md # Documentation refactor\n│   ├── RAPPORT_TRAITEMENT_INSEE_*.md    # 🆕 Rapports générés automatiquement\n│   └── RAPPORT_OPTIMISATIONS_*.md       # 🆕 Rapports performance\n├── config/\n│   └── config.yaml            # Configuration API v3.11\n├── .env.example              # Template variables d'environnement\n└── pyproject.toml            # Dépendances uv\n```\n\n## 📊 Génération de rapports automatiques\n\n### 🆕 Script de rapport professionnel\n\nAprès traitement des données, générez automatiquement des rapports complets avec statistiques et analyses :\n\n```bash\n# Génération de rapport standard\npython scripts/generate_report.py output/face_raw_full_enriched.csv\n\n# Rapport dans un répertoire spécifique\npython scripts/generate_report.py output/results.csv --output-dir reports/\n\n# Rapport sur données de démo\npython scripts/generate_report.py output/demo_100_enriched.csv --verbose\n```\n\n### 📋 Contenu des rapports générés\n\n**📊 Rapport principal** : `RAPPORT_TRAITEMENT_INSEE_YYYYMMDD_HHMM.md`\n- **Résumé exécutif** : Taux de succès, optimisations, performance\n- **Statistiques détaillées** : Statuts révision, niveaux confiance, effectifs\n- **Analyse divergences** : Exemples anonymisés de conflits classification\n- **Analyse sectorielle** : Top secteurs NAF, répartition temporelle\n- **Recommandations** : Actions prioritaires par statut (CONFLICT/TO_REVIEW/NOT_FOUND)\n- **ROI économique** : Valeur vs solutions payantes ($15K-50K/an évités)\n\n**⚡ Rapport optimisations** : `RAPPORT_OPTIMISATIONS_YYYYMMDD_HHMM.md`\n- **Détection doublons** : Top entreprises dupliquées, économies requêtes\n- **Métriques performance** : Temps gagné, qualité données, précision\n- **Comparaisons avant/après** : Amélioration logique classification\n\n### 📈 Exemple d'utilisation complète\n\n```bash\n# 1. Traitement complet des données\npython scripts/process_companies.py data/face_raw_full.csv \\\n    --company-col \"Organisation\" \\\n    --size-col \"Taille d'entreprise\" \\\n    --output output/face_raw_full_enriched.csv\n\n# 2. Génération automatique des rapports\npython scripts/generate_report.py output/face_raw_full_enriched.csv\n\n# 3. Résultats dans docs/\n# - RAPPORT_TRAITEMENT_INSEE_20250916_1430.md\n# - RAPPORT_OPTIMISATIONS_20250916_1430.md\n```\n\n### 🎯 Avantages des rapports\n\n- **Anonymisation automatique** : Données entreprises protégées\n- **Analyse business** : Métriques ROI et valeur ajoutée  \n- **Documentation complète** : Traçabilité et validation pour audits\n- **Exemples concrets** : Conflits classification avec explications\n- **Recommandations actionnables** : Priorités par statut révision\n\n## 🧪 Tests et validation\n\n### Mode démo pour validation\n```bash\n# Tester sur 100 entreprises avant traitement complet\npython scripts/process_companies.py data/face_raw_full.csv \\\n    --company-col \"Organisation\" \\\n    --size-col \"Taille d'entreprise\" \\\n    --demo 100\n\n# Analyser les divergences de classification  \npython scripts/process_companies.py data/face_raw_full.csv \\\n    --company-col \"Organisation\" \\\n    --size-col \"Taille d'entreprise\" \\\n    --demo 50 \\\n    --output output/test_classifications.csv\n```\n\n### 🎯 Validation des résultats\n- **Taux de succès validé** : 94% sur échantillon de 50 entreprises\n- **Classification précise** : Détection automatique des divergences (ex: PME déclaré vs GE INSEE)\n- **Données complètes** : 19 colonnes avec toutes les informations INSEE disponibles\n\n### Scripts de correction disponibles\n- `fix_size_thresholds.py` : Correction des classifications dans fichiers existants\n- `fix_effectifs_description.py` : Correction des descriptions d'effectifs\n\n## 🚨 Limitations et bonnes pratiques\n\n### Limites API INSEE\n- **30 requêtes/minute** maximum\n- **Pause recommandée** : 4 secondes entre requêtes\n- **Variations automatiques** : Essai de différentes formes du nom\n\n### Recommandations usage production\n- ✅ **Testez avec --demo** avant traitement complet (3034 entreprises ≈ 2h30)\n- ✅ **Vérifiez votre quota API** INSEE avant gros traitements  \n- ✅ **Analysez les CONFLICT_TO_REVIEW** : Divergences déclaré vs classification INSEE\n- ✅ **Conservez toutes les colonnes** : 19 colonnes pour analyses futures\n- ✅ **Gardez vos clés API sécurisées** (pas de commit dans git)\n- ✅ **Surveillez les logs** pour optimisations et taux de succès\n\n### 🆕 Nouveaux cas d'usage\n- **Audit de classification** : Comparaison systématique déclaré vs INSEE officiel\n- **Enrichissement complet** : 19 colonnes pour analyses avancées  \n- **Détection anomalies** : Entreprises PME qui sont en fait GE (critères financiers)\n\n## 📝 Licence\n\nMIT License - Libre d'utilisation pour projets commerciaux et open source.\n\n## 🤝 Contribution\n\nLes contributions sont les bienvenues ! N'hésitez pas à :\n- Signaler des bugs\n- Proposer des améliorations\n- Soumettre des pull requests\n\n---\n\n**Développé avec ❤️ pour simplifier l'enrichissement de données d'entreprises**","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farthurcornelio88%2Finsee_data_processor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farthurcornelio88%2Finsee_data_processor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farthurcornelio88%2Finsee_data_processor/lists"}