feat: WebSocket temps réel + Finance Workflow + corrections

- Task #6: WebSocket /ws/dashboard + Kafka events (5 topics)
  * Backend: KafkaEventProducer, KafkaEventConsumer
  * Mobile: WebSocketService (reconnection, heartbeat, typed events)
  * DashboardBloc: Auto-refresh depuis WebSocket events

- Finance Workflow: approbations + budgets (backend + mobile)
  * Backend: entities, services, resources, migrations Flyway V6
  * Mobile: features finance_workflow complète avec BLoC

- Corrections DI: interfaces IRepository partout
  * IProfileRepository, IOrganizationRepository, IMembreRepository
  * GetIt configuré avec @injectable

- Spec-Kit: constitution + templates mis à jour
  * .specify/memory/constitution.md enrichie
  * Templates agent, plan, spec, tasks, checklist

- Nettoyage: fichiers temporaires supprimés

Signed-off-by: lions dev Team
This commit is contained in:
dahoud
2026-03-15 02:12:17 +00:00
parent bbc409de9d
commit e8ad874015
635 changed files with 58160 additions and 20674 deletions

View File

@@ -0,0 +1,65 @@
import 'package:equatable/equatable.dart';
class CompteAdherentEntity extends Equatable {
final String numeroMembre;
final String nomComplet;
final String? organisationNom;
final DateTime? dateAdhesion;
final String statutCompte;
final double soldeCotisations;
final double soldeEpargne;
final double soldeBloque;
final double soldeTotalDisponible;
final double encoursCreditTotal;
final double capaciteEmprunt;
final int nombreCotisationsPayees;
final int nombreCotisationsTotal;
final int nombreCotisationsEnRetard;
final double engagementRate;
final int nombreComptesEpargne;
final DateTime dateCalcul;
const CompteAdherentEntity({
required this.numeroMembre,
required this.nomComplet,
this.organisationNom,
this.dateAdhesion,
required this.statutCompte,
required this.soldeCotisations,
required this.soldeEpargne,
required this.soldeBloque,
required this.soldeTotalDisponible,
required this.encoursCreditTotal,
required this.capaciteEmprunt,
required this.nombreCotisationsPayees,
required this.nombreCotisationsTotal,
required this.nombreCotisationsEnRetard,
required this.engagementRate,
required this.nombreComptesEpargne,
required this.dateCalcul,
});
@override
List<Object?> get props => [
numeroMembre,
nomComplet,
organisationNom,
dateAdhesion,
statutCompte,
soldeCotisations,
soldeEpargne,
soldeBloque,
soldeTotalDisponible,
encoursCreditTotal,
capaciteEmprunt,
nombreCotisationsPayees,
nombreCotisationsTotal,
nombreCotisationsEnRetard,
engagementRate,
nombreComptesEpargne,
dateCalcul,
];
}

View File

@@ -1,6 +1,8 @@
import 'package:equatable/equatable.dart';
import 'compte_adherent_entity.dart';
/// Entité pour les statistiques du dashboard
class DashboardStatsEntity extends Equatable {
final int totalMembers;
final int activeMembers;
@@ -225,6 +227,8 @@ class DashboardEntity extends Equatable {
final Map<String, dynamic> userPreferences;
final String organizationId;
final String userId;
/// Compte adhérent unifié (si disponible)
final CompteAdherentEntity? monCompte;
const DashboardEntity({
required this.stats,
@@ -233,6 +237,7 @@ class DashboardEntity extends Equatable {
required this.userPreferences,
required this.organizationId,
required this.userId,
this.monCompte,
});
// Méthodes utilitaires
@@ -250,5 +255,7 @@ class DashboardEntity extends Equatable {
userPreferences,
organizationId,
userId,
monCompte,
];
}