package dev.lions.audit; import dev.lions.quote.ModuleCatalog; import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.event.Observes; import jakarta.inject.Inject; import jakarta.persistence.EntityManager; import jakarta.transaction.Transactional; import io.quarkus.runtime.StartupEvent; import java.util.Arrays; /** * Initialisation des questions d'audit spécifiques aux PME ivoiriennes */ @ApplicationScoped public class AuditDataInitializer { @Inject EntityManager em; @Transactional public void initializeAuditQuestions(@Observes StartupEvent event) { // Vérifier si les questions existent déjà Long questionCount = em.createQuery("SELECT COUNT(q) FROM AuditQuestion q", Long.class) .getSingleResult(); if (questionCount == 0) { createCommercialQuestions(); createStockQuestions(); createComptabiliteQuestions(); createRhQuestions(); createInfrastructureQuestions(); } // Vérifier si le catalogue existe déjà Long catalogCount = em.createQuery("SELECT COUNT(m) FROM ModuleCatalog m", Long.class) .getSingleResult(); if (catalogCount == 0) { createModuleCatalog(); } } private void createCommercialQuestions() { // Question 1: Gestion des clients AuditQuestion q1 = new AuditQuestion(); q1.setCategory("commercial"); q1.setQuestion("Comment gérez-vous actuellement vos contacts clients ?"); q1.setOptions(Arrays.asList( "Carnet papier ou fichier Excel basique", "Fichier Excel avec historique des contacts", "Logiciel de gestion simple (contacts + ventes)", "CRM complet avec suivi des opportunités", "CRM avancé avec automation marketing" )); q1.setScores(Arrays.asList(1, 2, 3, 4, 5)); q1.setWeight(3); q1.setDisplayOrder(1); q1.setRecommendation("Un CRM adapté améliore la relation client et augmente les ventes de 20-30%"); em.persist(q1); // Question 2: Facturation AuditQuestion q2 = new AuditQuestion(); q2.setCategory("commercial"); q2.setQuestion("Comment établissez-vous vos factures ?"); q2.setOptions(Arrays.asList( "Factures manuscrites ou Word/Excel", "Modèle Excel avec calculs automatiques", "Logiciel de facturation simple", "Système intégré (devis → facture → paiement)", "Facturation automatisée avec relances" )); q2.setScores(Arrays.asList(1, 2, 3, 4, 5)); q2.setWeight(3); q2.setDisplayOrder(2); q2.setRecommendation("La facturation automatisée réduit les erreurs et accélère les paiements"); em.persist(q2); // Question 3: Suivi des ventes AuditQuestion q3 = new AuditQuestion(); q3.setCategory("commercial"); q3.setQuestion("Avez-vous une visibilité sur vos performances commerciales ?"); q3.setOptions(Arrays.asList( "Aucun suivi régulier", "Calculs manuels mensuels", "Tableaux de bord Excel", "Rapports automatiques hebdomadaires", "Dashboard temps réel avec KPI" )); q3.setScores(Arrays.asList(1, 2, 3, 4, 5)); q3.setWeight(2); q3.setDisplayOrder(3); em.persist(q3); // Question 4: Gestion des devis AuditQuestion q4 = new AuditQuestion(); q4.setCategory("commercial"); q4.setQuestion("Comment gérez-vous vos devis et propositions commerciales ?"); q4.setOptions(Arrays.asList( "Devis manuscrits ou Word", "Modèles Excel personnalisables", "Logiciel de devis avec bibliothèque", "Système intégré avec signature électronique", "Configurateur automatique avec approbation workflow" )); q4.setScores(Arrays.asList(1, 2, 3, 4, 5)); q4.setWeight(2); q4.setDisplayOrder(4); em.persist(q4); } private void createStockQuestions() { // Question 1: Inventaire AuditQuestion q1 = new AuditQuestion(); q1.setCategory("stock"); q1.setQuestion("Comment suivez-vous vos stocks ?"); q1.setOptions(Arrays.asList( "Comptage manuel périodique", "Fichier Excel mis à jour manuellement", "Logiciel de stock simple", "Système avec codes-barres", "Gestion automatisée avec alertes" )); q1.setScores(Arrays.asList(1, 2, 3, 4, 5)); q1.setWeight(3); q1.setDisplayOrder(1); em.persist(q1); // Question 2: Approvisionnement AuditQuestion q2 = new AuditQuestion(); q2.setCategory("stock"); q2.setQuestion("Comment planifiez-vous vos achats et approvisionnements ?"); q2.setOptions(Arrays.asList( "Achats au feeling quand stock bas", "Planning mensuel basique", "Calculs de stock minimum", "Prévisions basées sur l'historique", "Optimisation automatique avec IA" )); q2.setScores(Arrays.asList(1, 2, 3, 4, 5)); q2.setWeight(2); q2.setDisplayOrder(2); em.persist(q2); // Question 3: Valorisation AuditQuestion q3 = new AuditQuestion(); q3.setCategory("stock"); q3.setQuestion("Connaissez-vous la valeur exacte de votre stock ?"); q3.setOptions(Arrays.asList( "Estimation approximative", "Calcul manuel périodique", "Valorisation Excel", "Valorisation automatique temps réel", "Analyse de rotation et obsolescence" )); q3.setScores(Arrays.asList(1, 2, 3, 4, 5)); q3.setWeight(2); q3.setDisplayOrder(3); em.persist(q3); } private void createComptabiliteQuestions() { // Question 1: Tenue comptable AuditQuestion q1 = new AuditQuestion(); q1.setCategory("comptabilite"); q1.setQuestion("Comment tenez-vous votre comptabilité ?"); q1.setOptions(Arrays.asList( "Cahiers manuscrits", "Excel avec saisie manuelle", "Logiciel comptable simple", "Logiciel intégré avec automatisation", "ERP complet avec expert-comptable connecté" )); q1.setScores(Arrays.asList(1, 2, 3, 4, 5)); q1.setWeight(3); q1.setDisplayOrder(1); em.persist(q1); // Question 2: Déclarations fiscales AuditQuestion q2 = new AuditQuestion(); q2.setCategory("comptabilite"); q2.setQuestion("Comment gérez-vous vos obligations fiscales (TVA, IS, etc.) ?"); q2.setOptions(Arrays.asList( "Calculs manuels avec expert-comptable", "Excel avec formules de calcul", "Logiciel avec aide au calcul", "Génération automatique des déclarations", "Télédéclaration automatisée" )); q2.setScores(Arrays.asList(1, 2, 3, 4, 5)); q2.setWeight(3); q2.setDisplayOrder(2); em.persist(q2); // Question 3: Analyse financière AuditQuestion q3 = new AuditQuestion(); q3.setCategory("comptabilite"); q3.setQuestion("Avez-vous une vision claire de votre situation financière ?"); q3.setOptions(Arrays.asList( "Bilan annuel uniquement", "Situation trimestrielle", "Tableaux de bord mensuels", "Reporting automatique hebdomadaire", "Dashboard temps réel avec prévisions" )); q3.setScores(Arrays.asList(1, 2, 3, 4, 5)); q3.setWeight(2); q3.setDisplayOrder(3); em.persist(q3); } private void createRhQuestions() { // Question 1: Gestion du personnel AuditQuestion q1 = new AuditQuestion(); q1.setCategory("rh"); q1.setQuestion("Comment gérez-vous les dossiers de vos employés ?"); q1.setOptions(Arrays.asList( "Dossiers papier classés", "Fichiers Excel par employé", "Logiciel RH basique", "SIRH avec self-service employé", "SIRH complet avec workflow" )); q1.setScores(Arrays.asList(1, 2, 3, 4, 5)); q1.setWeight(2); q1.setDisplayOrder(1); em.persist(q1); // Question 2: Paie et CNPS AuditQuestion q2 = new AuditQuestion(); q2.setCategory("rh"); q2.setQuestion("Comment calculez-vous la paie et les cotisations CNPS ?"); q2.setOptions(Arrays.asList( "Calculs manuels", "Excel avec formules", "Logiciel de paie simple", "Paie automatisée avec déclarations", "Intégration complète CNPS/DGI" )); q2.setScores(Arrays.asList(1, 2, 3, 4, 5)); q2.setWeight(3); q2.setDisplayOrder(2); em.persist(q2); // Question 3: Gestion des congés AuditQuestion q3 = new AuditQuestion(); q3.setCategory("rh"); q3.setQuestion("Comment gérez-vous les demandes de congés ?"); q3.setOptions(Arrays.asList( "Demandes papier", "Email et validation manuelle", "Fichier Excel partagé", "Système de workflow digital", "Application mobile avec approbation" )); q3.setScores(Arrays.asList(1, 2, 3, 4, 5)); q3.setWeight(1); q3.setDisplayOrder(3); em.persist(q3); } private void createInfrastructureQuestions() { // Question 1: Équipement informatique AuditQuestion q1 = new AuditQuestion(); q1.setCategory("infrastructure"); q1.setQuestion("Quel est l'état de votre parc informatique ?"); q1.setOptions(Arrays.asList( "Ordinateurs anciens (>5 ans), pas de réseau", "Mix d'ordinateurs, réseau basique", "Parc récent, réseau WiFi, serveur local", "Infrastructure moderne, cloud hybride", "Infrastructure cloud-native sécurisée" )); q1.setScores(Arrays.asList(1, 2, 3, 4, 5)); q1.setWeight(2); q1.setDisplayOrder(1); em.persist(q1); // Question 2: Sauvegardes AuditQuestion q2 = new AuditQuestion(); q2.setCategory("infrastructure"); q2.setQuestion("Comment protégez-vous vos données importantes ?"); q2.setOptions(Arrays.asList( "Aucune sauvegarde régulière", "Copies manuelles sur clé USB", "Sauvegarde externe périodique", "Sauvegarde automatique cloud", "Sauvegarde redondante avec plan de reprise" )); q2.setScores(Arrays.asList(1, 2, 3, 4, 5)); q2.setWeight(3); q2.setDisplayOrder(2); em.persist(q2); // Question 3: Sécurité AuditQuestion q3 = new AuditQuestion(); q3.setCategory("infrastructure"); q3.setQuestion("Quelles mesures de sécurité informatique avez-vous ?"); q3.setOptions(Arrays.asList( "Antivirus basique uniquement", "Antivirus + mots de passe", "Sécurité réseau + formation utilisateurs", "Sécurité multicouche + monitoring", "Sécurité enterprise avec audit régulier" )); q3.setScores(Arrays.asList(1, 2, 3, 4, 5)); q3.setWeight(3); q3.setDisplayOrder(3); em.persist(q3); } /** * Crée le catalogue des modules avec tarification */ private void createModuleCatalog() { // Module CRM Commercial ModuleCatalog crmModule = new ModuleCatalog("CRM", "Gestion Commerciale CRM", "commercial"); crmModule.setDescription("Solution complète de gestion de la relation client avec suivi des prospects, opportunités et ventes"); crmModule.setFeatures("• Gestion contacts et prospects\n• Pipeline de ventes\n• Suivi des opportunités\n• Facturation intégrée\n• Rapports commerciaux\n• Tableaux de bord"); crmModule.setBasicPrice(150000.0); // 150K FCFA crmModule.setStandardPrice(250000.0); // 250K FCFA crmModule.setAdvancedPrice(400000.0); // 400K FCFA crmModule.setEnterprisePrice(650000.0); // 650K FCFA crmModule.setBaseImplementationDays(10); crmModule.setMaxUsers(50); crmModule.setSupportLevel("Email + Téléphone"); crmModule.setTechnicalRequirements("Windows/Mac/Linux, Navigateur web moderne, 4GB RAM minimum"); crmModule.setDisplayOrder(1); crmModule.setPopular(true); em.persist(crmModule); // Module Gestion de Stock ModuleCatalog stockModule = new ModuleCatalog("STOCK", "Gestion des Stocks", "stock"); stockModule.setDescription("Système de gestion des stocks avec codes-barres, inventaires et approvisionnements automatisés"); stockModule.setFeatures("• Gestion multi-entrepôts\n• Codes-barres et QR codes\n• Inventaires automatisés\n• Alertes stock minimum\n• Prévisions d'achat\n• Valorisation FIFO/LIFO"); stockModule.setBasicPrice(120000.0); stockModule.setStandardPrice(200000.0); stockModule.setAdvancedPrice(350000.0); stockModule.setEnterprisePrice(550000.0); stockModule.setBaseImplementationDays(8); stockModule.setMaxUsers(20); stockModule.setSupportLevel("Email + Téléphone"); stockModule.setTechnicalRequirements("Windows/Mac/Linux, Lecteur codes-barres (optionnel), Imprimante étiquettes"); stockModule.setDisplayOrder(2); em.persist(stockModule); // Module Comptabilité ModuleCatalog comptaModule = new ModuleCatalog("COMPTA", "Comptabilité Intégrée", "comptabilite"); comptaModule.setDescription("Comptabilité complète conforme aux normes ivoiriennes avec déclarations fiscales automatisées"); comptaModule.setFeatures("• Plan comptable SYSCOHADA\n• Saisie automatisée\n• Déclarations TVA/IS\n• Bilan et compte de résultat\n• Rapports DGI\n• Intégration bancaire"); comptaModule.setBasicPrice(180000.0); comptaModule.setStandardPrice(300000.0); comptaModule.setAdvancedPrice(500000.0); comptaModule.setEnterprisePrice(800000.0); comptaModule.setBaseImplementationDays(12); comptaModule.setMaxUsers(10); comptaModule.setSupportLevel("Email + Téléphone + Expert-comptable"); comptaModule.setTechnicalRequirements("Windows/Mac/Linux, Connexion internet sécurisée, Sauvegarde automatique"); comptaModule.setDisplayOrder(3); comptaModule.setPopular(true); em.persist(comptaModule); // Module RH ModuleCatalog rhModule = new ModuleCatalog("RH", "Gestion des Ressources Humaines", "rh"); rhModule.setDescription("SIRH complet avec paie, congés, formation et conformité CNPS"); rhModule.setFeatures("• Dossiers employés\n• Calcul de paie CNPS\n• Gestion des congés\n• Formation et évaluation\n• Déclarations sociales\n• Self-service employé"); rhModule.setBasicPrice(100000.0); rhModule.setStandardPrice(180000.0); rhModule.setAdvancedPrice(320000.0); rhModule.setEnterprisePrice(500000.0); rhModule.setBaseImplementationDays(6); rhModule.setMaxUsers(100); rhModule.setSupportLevel("Email + Téléphone"); rhModule.setTechnicalRequirements("Windows/Mac/Linux, Connexion CNPS (optionnelle), Scanner documents"); rhModule.setDisplayOrder(4); em.persist(rhModule); // Module Infrastructure ModuleCatalog infraModule = new ModuleCatalog("INFRA", "Infrastructure IT", "infrastructure"); infraModule.setDescription("Mise en place et sécurisation de l'infrastructure informatique avec sauvegarde cloud"); infraModule.setFeatures("• Audit infrastructure\n• Sécurisation réseau\n• Sauvegarde automatique\n• Antivirus enterprise\n• Monitoring 24/7\n• Support technique"); infraModule.setBasicPrice(200000.0); infraModule.setStandardPrice(350000.0); infraModule.setAdvancedPrice(600000.0); infraModule.setEnterprisePrice(1000000.0); infraModule.setBaseImplementationDays(5); infraModule.setMaxUsers(999); infraModule.setSupportLevel("Email + Téléphone + Intervention sur site"); infraModule.setTechnicalRequirements("Réseau existant, Serveur ou Cloud, Postes de travail Windows/Mac"); infraModule.setDisplayOrder(5); em.persist(infraModule); } }