diff --git a/index.ts b/index.ts
index e188a3b5cf42196eb6747fa6f292ee01dc8c56db..c2f9288aad104e23d9276c81a64e0936bff5be8f 100644
--- a/index.ts
+++ b/index.ts
@@ -42,7 +42,7 @@ program.command('main')
     while (true) {
       const role: Role = await getRole(tezos)
 
-      console.log(chalk.bgBlue(`\nVous êtes connecté en tant que ${role}\n`))
+      console.log(`Vous êtes connecté en tant que ${chalk.bgBlue(role)}\n`)
 
       const questions = [
         {
@@ -65,7 +65,7 @@ program.command('main')
         case 'ADHERENT':
           // VOTER POUR UNE PROPOSITION
           // CLOTURER ET RESOUDRE LES PROPOSITIONS DONT IL EST LE CREATEUR
-          questions[0].choices = ['Faire une proposition', 'Créer un token']
+          questions[0].choices = ['Faire une proposition', 'Voir les propositions', 'Créer un token']
 
           if (await handleHasToken(tezos)) { questions[0].choices.push('Bruler des tokens') }
 
diff --git a/src/features/proposal/closeProposal.ts b/src/features/proposal/closeProposal.ts
index da2edd1d3c2e1910a32a8c0687d4b80d8613c231..3307d31d6628ff1d20ad40a382fb7935c0b67376 100644
--- a/src/features/proposal/closeProposal.ts
+++ b/src/features/proposal/closeProposal.ts
@@ -1,11 +1,13 @@
 import { type TezosToolkit } from '@taquito/taquito'
 import chalk from 'chalk'
-import { handleGetProposals, handleCloseProposal } from '../../handlers/proposal/proposalHandlers.js'
+import { handleGetOpenProposals, handleCloseProposal } from '../../handlers/proposal/proposalHandlers.js'
 
 async function closeProposal (tezos: TezosToolkit): Promise<void> {
-  await handleGetProposals(tezos).then(async (response) => {
+  await handleGetOpenProposals(tezos).then(async (response) => {
     const proposalsByTitle: string[] = response
 
+    if (response.length === 0) throw new Error("Aucune proposition n'est ouverte")
+
     await handleCloseProposal(proposalsByTitle, tezos).then(() => {
       console.log(chalk.bgGreenBright('\nVous avez clôturé la proposition !!\n'))
     }).catch((error) => {
diff --git a/src/features/proposal/resolveProposal.ts b/src/features/proposal/resolveProposal.ts
index 0f1703c54b13930df3d3b82e8fbf818e38f51819..7477c596bd434413e47db79b16d40df285c6b496 100644
--- a/src/features/proposal/resolveProposal.ts
+++ b/src/features/proposal/resolveProposal.ts
@@ -1,11 +1,13 @@
 import { type TezosToolkit } from '@taquito/taquito'
 import chalk from 'chalk'
-import { handleGetProposals, handleResolveProposal } from '../../handlers/proposal/proposalHandlers.js'
+import { handleGetSolvableProposals, handleResolveProposal } from '../../handlers/proposal/proposalHandlers.js'
 
 async function resolveProposal (tezos: TezosToolkit): Promise<void> {
-  await handleGetProposals(tezos).then(async (response) => {
+  await handleGetSolvableProposals(tezos).then(async (response) => {
     const proposalsByTitle: string[] = response
 
+    if (response.length === 0) throw new Error("Aucune proposition n'est résoluble")
+
     await handleResolveProposal(proposalsByTitle, tezos).then(() => {
       console.log(chalk.bgGreenBright('\nVous avez résolue la proposition !!\n'))
     }).catch((error) => {
diff --git a/src/handlers/association/associationHandlers.ts b/src/handlers/association/associationHandlers.ts
index b5fac0292877dbbea21ad9f104f11654e57229a1..7bbfc678455ebfaf8a18fa2f87d0559025737532 100644
--- a/src/handlers/association/associationHandlers.ts
+++ b/src/handlers/association/associationHandlers.ts
@@ -57,7 +57,8 @@ async function handleCreateAssociation (tezos: TezosToolkit): Promise<void> {
   try {
     await createAssociation(association, tezos)
   } catch (error) {
-    throw new Error(`${error.lastError.with.string}`)
+    const errorMessage = error.lastError.with.string ? error.lastError.with.string : 'Unknown error occurred'
+    throw new Error(`${errorMessage}`)
   }
 }
 
@@ -86,20 +87,23 @@ async function handleJoinAssociation (associations: string[], tezos: TezosToolki
   try {
     await joinAssociation(associationName, tezos)
   } catch (error) {
-    throw new Error(`${error.lastError.with.string}`)
+    const errorMessage = error.lastError.with.string ? error.lastError.with.string : 'Unknown error occurred'
+    throw new Error(`${errorMessage}`)
   }
 }
 
 /**
  * Handles the process of listing associations.
  * @param {TezosToolkit} tezos - The TezosToolkit instance used for blockchain operations.
- * @returns {Promise<string[]>} A promise with a string of association name.
+ * @returns {Promise<string[]>} A promise with a list of string of association name.
  */
 async function handleGetAssociations (tezos: TezosToolkit): Promise<string[]> {
   try {
-    return await getAssociations(tezos)
+    const associations = await getAssociations(tezos)
+    return associations.map(association => association.name)
   } catch (error) {
-    throw new Error(`${error.lastError.with.string}`)
+    const errorMessage = error.lastError.with.string ? error.lastError.with.string : 'Unknown error occurred'
+    throw new Error(`${errorMessage}`)
   }
 }
 
@@ -128,7 +132,8 @@ async function handleGetAssociationDetails (associations: string[], tezos: Tezos
   try {
     return await getAssociationDetails(associationName, tezos)
   } catch (error) {
-    throw new Error(`${error.lastError.with.string}`)
+    const errorMessage = error.lastError.with.string ? error.lastError.with.string : 'Unknown error occurred'
+    throw new Error(`${errorMessage}`)
   }
 }
 
@@ -141,7 +146,8 @@ async function handleIsAdmin (tezos: TezosToolkit): Promise<boolean> {
   try {
     return await isAdminOfAssociation(tezos)
   } catch (error) {
-    throw new Error(`${error}`)
+    const errorMessage = error.lastError.with.string ? error.lastError.with.string : 'Unknown error occurred'
+    throw new Error(`${errorMessage}`)
   }
 }
 
diff --git a/src/handlers/proposal/proposalHandlers.ts b/src/handlers/proposal/proposalHandlers.ts
index 892cfd67714aaed005a29b4233f08b9141d8753f..707f5e32f7518e3c569e904accd5b460b9adebd3 100644
--- a/src/handlers/proposal/proposalHandlers.ts
+++ b/src/handlers/proposal/proposalHandlers.ts
@@ -57,7 +57,8 @@ async function handleCreateProposal (tezos: TezosToolkit): Promise<void> {
   try {
     await createProposal(proposal, tezos)
   } catch (error) {
-    throw new Error(`${error.lastError.with.string}`)
+    const errorMessage = error.lastError.with.string ? error.lastError.with.string : 'Unknown error occurred'
+    throw new Error(`${errorMessage}`)
   }
 }
 
@@ -86,7 +87,8 @@ async function handleResolveProposal (proposals: string[], tezos: TezosToolkit):
   try {
     await resolveProposal(associationName, tezos)
   } catch (error) {
-    throw new Error(`${error.lastError.with.string}`)
+    const errorMessage = error.lastError.with.string ? error.lastError.with.string : 'Unknown error occurred'
+    throw new Error(`${errorMessage}`)
   }
 }
 
@@ -101,7 +103,7 @@ async function handleCloseProposal (proposals: string[], tezos: TezosToolkit): P
     {
       type: 'list',
       name: 'choice',
-      message: 'Quelle proposition voulez-vous clôturé ?',
+      message: 'Quelle proposition voulez-vous clôturer ?',
       choices: proposals
     }
   ]
@@ -115,21 +117,54 @@ async function handleCloseProposal (proposals: string[], tezos: TezosToolkit): P
   try {
     await closeProposal(associationName, tezos)
   } catch (error) {
-    throw new Error(`${error.lastError.with.string}`)
+    const errorMessage = error.lastError.with.string ? error.lastError.with.string : 'Unknown error occurred'
+    throw new Error(`${errorMessage}`)
   }
 }
 
 /**
  * Handles the process of listing proposals.
  * @param {TezosToolkit} tezos - The TezosToolkit instance used for blockchain operations.
- * @returns {Promise<string[]>} A promise with a string of proposal title.
+ * @returns {Promise<Proposal[]>} A promise with a list of proposal title.
  */
 async function handleGetProposals (tezos: TezosToolkit): Promise<string[]> {
   try {
-    return await getProposals(tezos)
+    const proposals: Proposal[] = await getProposals(tezos)
+    return proposals.map(proposal => proposal.title)
   } catch (error) {
-    throw new Error(`${error.lastError.with.string}`)
+    const errorMessage = error.lastError.with.string ? error.lastError.with.string : 'Unknown error occurred'
+    throw new Error(`${errorMessage}`)
   }
 }
 
-export { handleCreateProposal, handleResolveProposal, handleGetProposals, handleCloseProposal }
+/**
+ * Handles the process of listing open proposals.
+ * @param {TezosToolkit} tezos - The TezosToolkit instance used for blockchain operations.
+ * @returns {Promise<string[]>} A promise with a list of open proposal title.
+ */
+async function handleGetOpenProposals (tezos: TezosToolkit): Promise<string[]> {
+  try {
+    const proposals: Proposal[] = await getProposals(tezos)
+    return proposals.filter(proposal => proposal.isOpen).map(proposal => proposal.title)
+  } catch (error) {
+    const errorMessage = error.lastError.with.string ? error.lastError.with.string : 'Unknown error occurred'
+    throw new Error(`${errorMessage}`)
+  }
+}
+
+/**
+ * Handles the process of listing solvable proposals.
+ * @param {TezosToolkit} tezos - The TezosToolkit instance used for blockchain operations.
+ * @returns {Promise<string[]>} A promise with a list of solvable proposal title.
+ */
+async function handleGetSolvableProposals (tezos: TezosToolkit): Promise<string[]> {
+  try {
+    const proposals: Proposal[] = await getProposals(tezos)
+    return proposals.filter(proposal => proposal.approveRate >= 51).map(proposal => proposal.title)
+  } catch (error) {
+    const errorMessage = error.lastError.with.string ? error.lastError.with.string : 'Unknown error occurred'
+    throw new Error(`${errorMessage}`)
+  }
+}
+
+export { handleCreateProposal, handleResolveProposal, handleGetProposals, handleCloseProposal, handleGetOpenProposals, handleGetSolvableProposals }
diff --git a/src/handlers/roleHandlers.ts b/src/handlers/roleHandlers.ts
index 6e6a5d7f00c996ae9e93db29eeaef50354a0873d..095352b6afbecb7272a4f39b046760e5b8597843 100644
--- a/src/handlers/roleHandlers.ts
+++ b/src/handlers/roleHandlers.ts
@@ -58,6 +58,9 @@ async function handleAdherentChoice (choice: string, tezos: TezosToolkit): Promi
     case 'Créer un token':
       await createToken(tezos)
       break
+    case 'Voir les propositions':
+      await showProposals(tezos)
+      break
     case 'Voir mon portefeuille':
       await showBalance(tezos)
       break
diff --git a/src/handlers/token/tokenHandlers.ts b/src/handlers/token/tokenHandlers.ts
index 8d1df95f952d9b2285677f86bb576eb4f11a8506..edb1f2728d14ba8c78fe18bb524bb9db05e9b594 100644
--- a/src/handlers/token/tokenHandlers.ts
+++ b/src/handlers/token/tokenHandlers.ts
@@ -38,7 +38,8 @@ async function handleCreateToken (tezos: TezosToolkit): Promise<void> {
   try {
     await createFAToken(nbTokenFungible, tezos)
   } catch (error) {
-    throw new Error(`${error.lastError.with.string}`)
+    const errorMessage = error.lastError.with.string ? error.lastError.with.string : 'Unknown error occurred'
+    throw new Error(`${errorMessage}`)
   }
 }
 
@@ -75,7 +76,8 @@ async function handleBurnToken (tezos: TezosToolkit): Promise<void> {
   try {
     await burnToken(nbTokenToBurn, tezos)
   } catch (error) {
-    throw new Error(`${error.lastError.with.string}`)
+    const errorMessage = error.lastError.with.string ? error.lastError.with.string : 'Unknown error occurred'
+    throw new Error(`${errorMessage}`)
   }
 }
 
diff --git a/src/services/association.service.ts b/src/services/association.service.ts
index 7ebd20ea49038d1f4dc5b99d673674d56eed776c..6a00b3d038b4c66d874c3b2bf8a2578dcfcc8dc7 100644
--- a/src/services/association.service.ts
+++ b/src/services/association.service.ts
@@ -21,7 +21,6 @@ async function createAssociation (association: Association, tezos: TezosToolkit)
   const op: Operation = await contract.methodsObject.registerAssociation(association).send()
 
   await op.confirmation()
-  console.log(op.hash)
 }
 
 // NEED UPDATE ENTRYPOINT !!
@@ -33,7 +32,7 @@ async function joinAssociation (associationName: string, tezos: TezosToolkit): P
 }
 
 // NEED UPDATE ENTRYPOINT !!
-async function getAssociations (tezos: TezosToolkit): Promise<string[]> {
+async function getAssociations (tezos: TezosToolkit): Promise<Association[]> {
   // const contract = await tezos.contract.at(address)
   // const op: Operation = await contract.methodsObject.getAssociations().send()
 
@@ -41,7 +40,7 @@ async function getAssociations (tezos: TezosToolkit): Promise<string[]> {
   // return op
 
   // MOCK
-  return mockAssociations.map(association => association.name)
+  return mockAssociations
 }
 
 async function getAssociationDetails (associationName: string, tezos: TezosToolkit): Promise<Association> {
diff --git a/src/services/proposal.service.ts b/src/services/proposal.service.ts
index d4a562c0ce82c60f1a334c37f78026d7978a8e9d..c6caeff394d3ee58c7007eede278afb2851cfd66 100644
--- a/src/services/proposal.service.ts
+++ b/src/services/proposal.service.ts
@@ -7,7 +7,9 @@ const address = 'KT1QZJzhSPQ89K4eC59tmQYCt44qph7wXoJu'
 const mockProposals: Proposal[] = [
   {
     title: 'Proposal 1',
-    description: 'Ceci est la proposition 1'
+    description: 'Ceci est la proposition 1',
+    isOpen: true,
+    approveRate: 50
   },
   {
     title: 'Proposal 2',
@@ -61,14 +63,14 @@ async function viewVoteInProgressProposal (proposalName: string, tezos: TezosToo
 }
 
 // NEED UPDATE ENTRYPOINT !!
-async function getProposals (tezos: TezosToolkit): Promise<string[]> {
+async function getProposals (tezos: TezosToolkit): Promise<Proposal[]> {
   // const contract = await tezos.contract.at(address)
   // const op: Operation = await contract.methodsObject.resolveProposal(proposalName).send()
 
   // await op.confirmation()
 
   // MOCK
-  return mockProposals.map(association => association.title)
+  return mockProposals
 }
 
 export { createProposal, voteForProposal, viewVoteInProgressProposal, closeProposal, resolveProposal, getProposals }
diff --git a/src/services/token.service.ts b/src/services/token.service.ts
index 983f279ee1a9ea8a6f26ba2a9fe996d4d8932d8b..4835dd19c91fb42e7094ec7fcbbab260542db1cf 100644
--- a/src/services/token.service.ts
+++ b/src/services/token.service.ts
@@ -30,7 +30,7 @@ async function hasToken (tezos: TezosToolkit): Promise<boolean> {
 
   // await op.confirmation()
 
-  return false
+  return true
 }
 
 export { createFAToken, burnToken, hasToken }
diff --git a/src/types/Proposal.ts b/src/types/Proposal.ts
index cb05777b2f21411b0ebcc3978cb748a068476a22..5bb57811105fe0831bddac3b6baeaefc25a42e77 100644
--- a/src/types/Proposal.ts
+++ b/src/types/Proposal.ts
@@ -4,4 +4,5 @@ export interface Proposal {
   fct?: () => void
   participationRate?: number
   approveRate?: number
+  isOpen?: boolean
 }
diff --git a/src/utils/getRole.ts b/src/utils/getRole.ts
index 5aaaa553ffcd46e2fa0151ddac1fe47546d6f3b2..b5bab0f62daba0d5b8b2998593c9275d2d8a7e33 100644
--- a/src/utils/getRole.ts
+++ b/src/utils/getRole.ts
@@ -1,11 +1,11 @@
 import { type TezosToolkit } from '@taquito/taquito'
 import { type Role } from '../types/Role'
-// import { handleIsAdmin } from '../handlers/association/associationHandlers.js'
+import { handleIsAdmin } from '../handlers/association/associationHandlers.js'
 
 export async function getRole (tezos: TezosToolkit): Promise<Role> {
-  // const isAdmin = await handleIsAdmin(tezos)
+  const isAdmin = await handleIsAdmin(tezos)
 
-  // if (isAdmin) return 'ADMIN'
+  if (isAdmin) return 'ADMIN'
 
   // TEMPORARY
   return 'CONNECTED'
diff --git a/test/handlers/association/associationHandlers.spec.ts b/test/handlers/association/associationHandlers.spec.ts
index f5a9c10ce4cdef8350b9b4a4d7e0a4a5d6aec099..5132f7254632a9fa1d5f5a4de2a0f734d65f3c7b 100644
--- a/test/handlers/association/associationHandlers.spec.ts
+++ b/test/handlers/association/associationHandlers.spec.ts
@@ -129,16 +129,12 @@ describe('associationHandlers', () => {
         const associations = await handleGetAssociations(mockedTezosToolkit)
 
         expect(getAssociationsSpy).toBeCalledWith(mockedTezosToolkit)
-        expect(associations).toStrictEqual([
-          {
-            name: 'Association 1',
-            description: 'Association 1 description'
-          },
-          {
-            name: 'Association 2',
-            description: 'Association 2 description'
-          }
-        ])
+        expect(associations).toStrictEqual(
+          [
+            'Association 1',
+            'Association 2'
+          ]
+        )
       })
     })
 
diff --git a/test/handlers/roleHandlers.spec.ts b/test/handlers/roleHandlers.spec.ts
index 7eaae2a1e63a6b1bb7dd5e469f022999506374eb..755f601ab93910318f2ce7d5d456236f1e26f217 100644
--- a/test/handlers/roleHandlers.spec.ts
+++ b/test/handlers/roleHandlers.spec.ts
@@ -157,6 +157,14 @@ describe('roleHandlers', () => {
       })
     })
 
+    describe('when choice is "Voir les propositions"', () => {
+      it('should call showProposals', async () => {
+        await handleAdminChoice('Voir les propositions', mockedTezosToolkit)
+
+        expect(showProposals).toBeCalled()
+      })
+    })
+
     describe('when choice is invalid', () => {
       it('should log "Choix invalide"', async () => {
         const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {})