diff --git a/lib/modules-lib/bc-db-reader/src/constants.rs b/lib/modules-lib/bc-db-reader/src/constants.rs
index 5eabbb72cb918650b711c70eb8f6d52f6ffd0767..277d69e9020b413f37c883fe5df5fea2f0b6af02 100644
--- a/lib/modules-lib/bc-db-reader/src/constants.rs
+++ b/lib/modules-lib/bc-db-reader/src/constants.rs
@@ -25,6 +25,9 @@ pub static DEFAULT_PAGE_SIZE: &usize = &50;
 /// Current meta datas (CurrentMetaDataKey, ?)
 pub static CURRENT_METAS_DATAS: &str = "cmd";
 
+/// Current frame members datas (MemberFrameInfo {last_personal_block_number: BlockNumber,nb_personal_blocks_in_frame: usize,personal_difficulty: PersonalDifficulty,})
+pub static CURRENT_FRAME_MEMBERS: &str = "cfm";
+
 /// Fork blocks referenced in tree or in orphan blockstamps (Blockstamp, DbBlock)
 pub static FORK_BLOCKS: &str = "fb";
 
diff --git a/lib/modules-lib/bc-db-reader/src/current_frame.rs b/lib/modules-lib/bc-db-reader/src/current_frame.rs
index bb4f35fe844ecb8a36fa9238ada5ed6a9d8129e4..3f8844b1735ffcbe138d2db509b8764fe277b1da 100644
--- a/lib/modules-lib/bc-db-reader/src/current_frame.rs
+++ b/lib/modules-lib/bc-db-reader/src/current_frame.rs
@@ -17,11 +17,14 @@
 
 //use crate::constants::*;
 use crate::*;
+
 extern crate num;
+
 use dubp_common_doc::BlockNumber;
 use durs_dbs_tools::DbError;
 use durs_wot::WotId;
 use num::Float;
+use serde::{Deserialize, Serialize};
 
 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
 /// Describe a member in current frame
@@ -32,7 +35,7 @@ pub struct MemberInCurrentFrame {
     pub difficulty: PersonalDifficulty,
 }
 
-#[derive(Clone, Copy, Debug, Eq, PartialEq)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
 /// Personal difficulty of a member.
 pub struct PersonalDifficulty {
     /// Exclusion factor
@@ -40,6 +43,23 @@ pub struct PersonalDifficulty {
     /// handicap
     pub handicap: usize,
 }
+// FIXME: à tester
+impl Default for PersonalDifficulty {
+    fn default() -> Self {
+        PersonalDifficulty {
+            exclusion_factor: 1,
+            handicap: 0,
+        }
+    }
+}
+
+#[derive(Debug, Copy, Clone, Serialize, Deserialize)]
+/// in frame member info data store
+pub struct MemberFrameInfo {
+    last_personal_block_number: BlockNumber,
+    nb_personal_blocks_in_frame: usize,
+    personal_difficulty: PersonalDifficulty,
+}
 
 /// Get current frame datas
 pub fn get_current_frame<DB: DbReadable>(
@@ -55,10 +75,12 @@ pub fn get_member_diffi<DB: DbReadable, R: DbReader>(
     _r: &R,
     _wot_id: WotId,
 ) -> Result<PersonalDifficulty, DbError> {
-    unimplemented!();
+    Ok(PersonalDifficulty {
+        exclusion_factor: 1,
+        handicap: 0,
+    })
 }
 
-
 /// calcule la difficulté personnalisée à partir des données prêtes à l'emploi
 /// reference dans le protocol : https://github.com/duniter/duniter/blob/master/doc/Protocol.md#br_g18---headpowzeros-and-headpowremainder
 pub fn compute_personal_difficulty(
@@ -108,12 +130,17 @@ pub fn handicap(nb_personal_blocks_in_frame: usize, median_of_blocks_in_frame: u
     )) as f64)
         .ln()
         / 1.189.ln())
-    .floor() as usize
+        .floor() as usize
 }
 
 #[cfg(test)]
 mod tests {
     use super::*;
+    use durs_dbs_tools::kv_db::KvFileDbHandler;
+    //use durs_bc_db_reader::DbValue;
+    //use durs_bc_db_reader::Db;
+    //use Db::db_value;
+    //use log::kv::Value;
     //TODO: déplacer la fonction métier dans blockchain ou bc-db-writer
 
     #[test]
@@ -133,7 +160,7 @@ mod tests {
         assert_eq!(
             PersonalDifficulty {
                 exclusion_factor: 1,
-                handicap: 0
+                handicap: 0,
             },
             compute_personal_difficulty(100, BlockNumber(1000), BlockNumber(1100), 2, 5)
         );
@@ -144,30 +171,67 @@ mod tests {
         assert_eq!(
             PersonalDifficulty {
                 exclusion_factor: 3,
-                handicap: 10
+                handicap: 10,
             },
             compute_personal_difficulty(50, BlockNumber(1000), BlockNumber(1010), 5, 1)
         );
+        assert_eq!(
+            PersonalDifficulty {
+                exclusion_factor: 2,
+                handicap: 13,
+            },
+            compute_personal_difficulty(6, BlockNumber(99), BlockNumber(100), 19, 2)
+        );
     }
 
     // test avec db mockée
-    // #[test]
-    // fn test_personal_difficulty_member_not_in_frame() -> Result<(), DbError> {
-    //     let db = crate::tests::open_tmp_db()?;
-    //     db.write(|mut w| {
-    //         //common::insert_wot_index_entry(&db, &mut w, WotId(0), issuer_a)?;
-    //         Ok(w)
-    //     })?;
-    //     db.read(|r| {
-    //         //common::insert_wot_index_entry(&db, &mut w, WotId(0), issuer_a)?;
-    //     assert_eq!(
-    //         PersonalDifficulty {
-    //             exclusion_factor: 1,
-    //             handicap: 0
-    //         },
-    //         get_member_diffi(db,r, WotId(0))
-    //     );
-    //     })?;
-
-    // }
+//    fn factory_member_frame_info(last: u32, nbr:usize) -> Result<DbValue, DbError> {
+//        Db::db_value(&durs_dbs_tools::to_bytes(&MemberFrameInfo {
+//            last_personal_block_number: BlockNumber(last),
+//            nb_personal_blocks_in_frame: nbr,
+//            ..Default::default()
+//        })?)
+//    }
+    fn init_mocked_db() -> Result<KvFileDbHandler, DbError> {
+        let db = crate::tests::open_tmp_db()?;
+        db.write(|mut w| {
+            //db.get_int_store(CURRENT_FRAME_MEMBERS).put(w.as_mut(), 1, &factory_member_frame_info(99,15)?);
+
+            // créer une hashmap avec comme
+            //  |- clef les wot_id des membres de la fenêtre courante
+            //  |- valeurs :
+            //     |- le block_number du dernier block de ce membre
+            //     |- le nombre de block de ce membre dans la fenêtre courante
+            // {1:{99,15},3:{80,5},4:{97,3},5:{98,1},6:{90,1},8:{71,1}}
+            //common::insert_wot_index_entry(&db, &mut w, WotId(0), issuer_a)?;
+            Ok(w)
+        })?;
+        Ok(db)
+    }
+
+    #[test]
+    fn test_personal_difficulty_member_not_in_frame() -> Result<(), DbError> {
+        let db = init_mocked_db()?;
+        assert_eq!(
+            PersonalDifficulty {
+                exclusion_factor: 1,
+                handicap: 0,
+            },
+            db.read(|r| get_member_diffi(&db, r, WotId(0)))?
+        );
+        Ok(())
+    }
+
+//    #[test]
+//    fn test_personal_difficulty_member_supercalculator() -> Result<(), DbError> {
+//        let db = init_mocked_db()?;
+//        assert_eq!(
+//            PersonalDifficulty {
+//                exclusion_factor: 2,
+//                handicap: 13,
+//            },
+//            db.read(|r| get_member_diffi(&db, r, WotId(1)))?
+//        );
+//        Ok(())
+//    }
 }
diff --git a/lib/modules-lib/bc-db-reader/src/lib.rs b/lib/modules-lib/bc-db-reader/src/lib.rs
index 2edf971581e8a90561a7752e2774387e5f2f8821..03585176b0aa775218a16abcb1ab87a3ef72af05 100644
--- a/lib/modules-lib/bc-db-reader/src/lib.rs
+++ b/lib/modules-lib/bc-db-reader/src/lib.rs
@@ -52,6 +52,7 @@ pub fn bc_db_schema() -> KvFileDbSchema {
     KvFileDbSchema {
         stores: hashmap![
             CURRENT_METAS_DATAS.to_owned() => KvFileDbStoreType::SingleIntKey,
+            CURRENT_FRAME_MEMBERS.to_owned() => KvFileDbStoreType::SingleIntKey,
             MAIN_BLOCKS.to_owned() => KvFileDbStoreType::SingleIntKey,
             FORK_BLOCKS.to_owned() => KvFileDbStoreType::Single,
             ORPHAN_BLOCKSTAMP.to_owned() => KvFileDbStoreType::Single,