import 'package:equatable/equatable.dart'; /// Indicateur de conformité avec statut + message explicatif. class ConformiteIndicateur extends Equatable { final String statut; // OK, EN_ATTENTE, RETARD, OPTIONNEL, OBLIGATOIRE, EN_VEILLE final String message; const ConformiteIndicateur({required this.statut, required this.message}); @override List get props => [statut, message]; } /// Snapshot du tableau de bord de conformité (miroir mobile du record backend). /// /// Couvre AG annuelle, rapports AIRMS, CMU dirigeants, KYC, formation LBC/FT, UBO, /// commissaire aux comptes, FOMUS-CI, et le score global agrégé (0-100). class ComplianceSnapshot extends Equatable { final String organisationId; final String organisationNom; final String referentielComptable; final bool complianceOfficerDesigne; final ConformiteIndicateur agAnnuelle; final ConformiteIndicateur rapportAirms; final int dirigeantsAvecCmu; final double tauxKycAJourPct; final double tauxFormationLbcFtPct; final ConformiteIndicateur commissaireAuxComptes; final ConformiteIndicateur fomusCi; final double couvertureUboPct; final int scoreGlobal; const ComplianceSnapshot({ required this.organisationId, required this.organisationNom, required this.referentielComptable, required this.complianceOfficerDesigne, required this.agAnnuelle, required this.rapportAirms, required this.dirigeantsAvecCmu, required this.tauxKycAJourPct, required this.tauxFormationLbcFtPct, required this.commissaireAuxComptes, required this.fomusCi, required this.couvertureUboPct, required this.scoreGlobal, }); /// Couleur indicative selon le score (Material 3 semantic). String get scoreSeverite { if (scoreGlobal >= 80) return 'success'; if (scoreGlobal >= 60) return 'warning'; return 'danger'; } bool get hasAlertesCritiques => !complianceOfficerDesigne || agAnnuelle.statut == 'RETARD' || scoreGlobal < 60; @override List get props => [ organisationId, organisationNom, referentielComptable, complianceOfficerDesigne, agAnnuelle, rapportAirms, dirigeantsAvecCmu, tauxKycAJourPct, tauxFormationLbcFtPct, commissaireAuxComptes, fomusCi, couvertureUboPct, scoreGlobal, ]; }