feat(sprint-9 mobile 2026-04-25): feature compliance dashboard + Devise enum + selector + tests
Apporte aux compliance officers et controleurs internes l'accès mobile au tableau de bord de conformité backend (P1-NEW-7). Et prépare la diaspora avec Devise enum + sélecteur préférence persisté. Feature Compliance (Clean Architecture) - Domain : ComplianceSnapshot + ConformiteIndicateur (Equatable), helpers scoreSeverite + hasAlertesCritiques - Data : ComplianceSnapshotModel.fromJson (parsing tolerant aux nullables), ComplianceRemoteDataSourceImpl Dio (GET /api/compliance/dashboard), ComplianceRepositoryImpl @Injectable - Presentation : ComplianceBloc (Load/Refresh events, Initial/Loading/Loaded/Error states), ConformiteDashboardPage (Material 3, ScoreCard 0-100 colorée, 9 IndicateurTile, AlertesCard rouge si critiques) Feature Devise - Devise enum (10 valeurs miroirs backend, code/libelle/zone) - fromCode tolérant casse + null/vide → XOF - estInternationale pour AML - DeviseSelector widget DropdownButtonFormField + readPreferred/writePreferred via FlutterSecureStorage (clé unionflow.devise.preferee) Tests (17/17 verts) - ComplianceSnapshot : 7 tests (scoreSeverite × 3, hasAlertesCritiques × 4) - ComplianceSnapshotModel.fromJson : 4 tests (complet, fallbacks, string→double, indicateur invalide) - Devise enum : 6 tests (reference, fromCode parse, fromCode null/inconnu, estInternationale × 2, intégrité valeurs) Note : feature reporting trimestriel mobile (PDF viewer + bloc liste) reportée à un sprint dédié — nécessite intégration pdf viewer + cache local non triviale.
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
import 'package:injectable/injectable.dart';
|
||||
import '../../domain/entities/compliance_snapshot.dart';
|
||||
import '../../domain/repositories/compliance_repository.dart';
|
||||
import '../datasources/compliance_remote_datasource.dart';
|
||||
|
||||
@Injectable(as: ComplianceRepository)
|
||||
class ComplianceRepositoryImpl implements ComplianceRepository {
|
||||
final ComplianceRemoteDataSource remote;
|
||||
|
||||
ComplianceRepositoryImpl(this.remote);
|
||||
|
||||
@override
|
||||
Future<ComplianceSnapshot> getSnapshotCurrent() => remote.getSnapshotCurrent();
|
||||
}
|
||||
Reference in New Issue
Block a user