import { CheckCircle, Info } from "lucide-react"; interface AnonymizationInterfaceProps { isProcessing: boolean; outputText?: string; sourceText?: string; } export const AnonymizationInterface = ({ isProcessing, outputText, sourceText, }: AnonymizationInterfaceProps) => { // Fonction pour détecter quels types de données ont été anonymisés const getAnonymizedDataTypes = () => { if (!outputText || !sourceText) return new Set(); const anonymizedTypes = new Set(); // PII - Données personnelles if (outputText.includes("[PERSONNE]")) { anonymizedTypes.add("Noms et prénoms"); } if (outputText.includes("[DATE]")) { anonymizedTypes.add("Dates"); } if (outputText.includes("[ADRESSE_EMAIL]")) { anonymizedTypes.add("Adresses e-mail"); } if ( outputText.includes("[TELEPHONE_FRANCAIS]") || outputText.includes("[TELEPHONE_BELGE]") || outputText.includes("[TELEPHONE]") ) { anonymizedTypes.add("Numéros de téléphone"); } if ( outputText.includes("[ADRESSE_FRANCAISE]") || outputText.includes("[ADRESSE_BELGE]") || outputText.includes("[ADRESSE]") ) { anonymizedTypes.add("Adresses postales"); } if (outputText.includes("[LOCATION]")) { anonymizedTypes.add("Lieux géographiques"); } if ( outputText.includes("[CARTE_IDENTITE_FRANCAISE]") || outputText.includes("[CARTE_IDENTITE_BELGE]") || outputText.includes("[PASSEPORT_FRANCAIS]") || outputText.includes("[PASSEPORT_BELGE]") || outputText.includes("[PERMIS_CONDUIRE_FRANCAIS]") ) { anonymizedTypes.add("Documents d'identité"); } if (outputText.includes("[NUMERO_SECURITE_SOCIALE_FRANCAIS]")) { anonymizedTypes.add("Numéros de sécurité sociale"); } if (outputText.includes("[BIOMETRIC_DATA]")) { anonymizedTypes.add("Données biométriques"); } if (outputText.includes("[HEALTH_DATA]")) { anonymizedTypes.add("Données de santé"); } if ( outputText.includes("[SEXUAL_ORIENTATION]") || outputText.includes("[POLITICAL_OPINIONS]") ) { anonymizedTypes.add("Données sensibles RGPD"); } // Données financières if ( outputText.includes("[IBAN]") || outputText.includes("[COMPTE_BANCAIRE_FRANCAIS]") ) { anonymizedTypes.add("Comptes bancaires"); } if (outputText.includes("[CREDIT_CARD]")) { anonymizedTypes.add("Cartes de crédit"); } if (outputText.includes("[MONTANT_FINANCIER]")) { anonymizedTypes.add("Montants financiers"); } if (outputText.includes("[NUMERO_FISCAL_FRANCAIS]")) { anonymizedTypes.add("Numéros fiscaux"); } if (outputText.includes("[RGPD_FINANCIAL_DATA]")) { anonymizedTypes.add("Données financières RGPD"); } // Business - Données d'entreprise if (outputText.includes("[ORGANISATION]")) { anonymizedTypes.add("Noms d'organisations"); } if ( outputText.includes("[SIRET_SIREN_FRANCAIS]") || outputText.includes("[SOCIETE_FRANCAISE]") || outputText.includes("[SOCIETE_BELGE]") ) { anonymizedTypes.add("Entreprises et sociétés"); } if ( outputText.includes("[TVA_FRANCAISE]") || outputText.includes("[TVA_BELGE]") ) { anonymizedTypes.add("Numéros de TVA"); } if ( outputText.includes("[NUMERO_ENTREPRISE_BELGE]") || outputText.includes("[REGISTRE_NATIONAL_BELGE]") ) { anonymizedTypes.add("Identifiants d'entreprise"); } if (outputText.includes("[SECRET_COMMERCIAL]")) { anonymizedTypes.add("Secrets commerciaux"); } if (outputText.includes("[REFERENCE_CONTRAT]")) { anonymizedTypes.add("Références de contrats"); } if (outputText.includes("[MARKET_SHARE]")) { anonymizedTypes.add("Parts de marché"); } if ( outputText.includes("[ID_PROFESSIONNEL_BELGE]") || outputText.includes("[DONNEES_PROFESSIONNELLES]") ) { anonymizedTypes.add("Identifiants professionnels"); } // Données techniques if (outputText.includes("[ADRESSE_IP]")) { anonymizedTypes.add("Adresses IP"); } if (outputText.includes("[URL_IDENTIFIANT]")) { anonymizedTypes.add("URLs et identifiants web"); } if (outputText.includes("[CLE_API_SECRETE]")) { anonymizedTypes.add("Clés API secrètes"); } if (outputText.includes("[IDENTIFIANT_PERSONNEL]")) { anonymizedTypes.add("Identifiants personnels"); } if (outputText.includes("[LOCALISATION_GPS]")) { anonymizedTypes.add("Coordonnées GPS"); } if (outputText.includes("[TITRE_CIVILITE]")) { anonymizedTypes.add("Titres de civilité"); } return anonymizedTypes; }; // Structure mise à jour avec les vrais types de données const supportedDataStructure = [ { items: [ "Noms et prénoms", "Numéros de téléphone", "URLs et identifiants web", ], }, { items: ["Adresses postales", "Lieux géographiques", "Dates"], }, { items: ["Documents d'identité", "Comptes bancaires", "Cartes de crédit"], }, { items: ["Adresses e-mail", "Montants financiers", "Adresses IP"], }, { items: [ "Noms d'organisations", "Entreprises et sociétés", "Numéros de TVA", ], }, { items: [ "Parts de marché", "Secrets commerciaux", "Références de contrats", ], }, { items: [ "Données biométriques", "Données de santé", "Données sensibles RGPD", ], }, { items: ["Clés API secrètes", "Coordonnées GPS", "Titres de civilité"], }, ]; if (isProcessing) { return (

Anonymisation en cours...

Analyse du contenu
Détection des données sensibles
Application de l'anonymisation
); } if (outputText) { const anonymizedTypes = getAnonymizedDataTypes(); return (
{/* Instructions Panel */}

Instructions d'utilisation :

  • • Survolez les mots pour les mettre en évidence
  • • Cliquez pour sélectionner un mot, Ctrl/CMD (ou Shift) + clic.
  • • Faites clic droit pour ouvrir le menu contextuel
  • • Modifiez les labels et couleurs selon vos besoins
  • • Utilisez "Toutes les occurrences" pour appliquer à tous les mots similaires
{/* Bloc vert existant */}

Anonymisation terminée avec succès

{supportedDataStructure.map((column, columnIndex) => (
{column.items.map((item, itemIndex) => { const isAnonymized = anonymizedTypes.has(item); return ( {isAnonymized ? "✓" : "•"} {item} ); })}
))}
); } return null; };