diff --git a/module/Application/config/module.config.php b/module/Application/config/module.config.php
index dadff29a6e64cd19e44e1991c5784f76c2257bd6..bb4acb17837974cf9e9ac83adb05699b11475174 100755
--- a/module/Application/config/module.config.php
+++ b/module/Application/config/module.config.php
@@ -146,6 +146,7 @@ $main =  array(
             'ApplicationParametres'                          => 'Application\\Service\\Parametres',
             'ApplicationTypeIntervention'                    => 'Application\\Service\\TypeIntervention',
             'ApplicationSource'                              => 'Application\\Service\\Source',
+            'ApplicationTypeRolePhpRole'                     => 'Application\\Service\\TypeRolePhpRole',
             'ApplicationRole'                                => 'Application\\Service\\Role',
             'ApplicationRoleUtilisateur'                     => 'Application\\Service\\RoleUtilisateur',
             'NavigationPageVisibility'                       => 'Application\\Service\\NavigationPageVisibility',
diff --git a/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.TypeRolePhpRole.dcm.xml b/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.TypeRolePhpRole.dcm.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e5db2269347d72c7104c29fdd464c2f1fa08606d
--- /dev/null
+++ b/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.TypeRolePhpRole.dcm.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+  <entity name="Application\Entity\Db\TypeRolePhpRole" table="TYPE_ROLE_PHP_ROLE">
+    <id name="id" type="integer" column="ID">
+      <!--<generator strategy="SEQUENCE"/>-->
+    </id>
+    <field name="phpRoleId" type="string" column="PHP_ROLE_ID" length="64" nullable="false"/>
+    <many-to-one field="typeRole" target-entity="Application\Entity\Db\TypeRole">
+      <join-columns>
+        <join-column name="TYPE_ROLE_ID" referenced-column-name="ID"/>
+      </join-columns>
+    </many-to-one>
+  </entity>
+</doctrine-mapping>
diff --git a/module/Application/src/Application/Entity/Db/TypeRolePhpRole.php b/module/Application/src/Application/Entity/Db/TypeRolePhpRole.php
new file mode 100644
index 0000000000000000000000000000000000000000..fc3c66db95216ed49d30811c781fee5efe52a900
--- /dev/null
+++ b/module/Application/src/Application/Entity/Db/TypeRolePhpRole.php
@@ -0,0 +1,80 @@
+<?php
+
+namespace Application\Entity\Db;
+
+/**
+ * TypeRolePhpRole
+ */
+class TypeRolePhpRole
+{
+    /**
+     * @var integer
+     */
+    protected $id;
+
+    /**
+     * @var \Application\Entity\Db\TypeRole
+     */
+    protected $typeRole;
+
+    /**
+     * @var string
+     */
+    protected $phpRoleId;
+
+    /**
+     * Get id
+     *
+     * @return integer 
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+
+    /**
+     * Set type
+     *
+     * @param \Application\Entity\Db\TypeRole $typeRole
+     * @return self
+     */
+    public function setTypeRole(\Application\Entity\Db\TypeRole $typeRole = null)
+    {
+        $this->typeRole = $typeRole;
+
+        return $this;
+    }
+
+    /**
+     * Get type
+     *
+     * @return \Application\Entity\Db\TypeRole 
+     */
+    public function getTypeRole()
+    {
+        return $this->typeRole;
+    }
+
+    /**
+     * Set phpRoleId
+     *
+     * @param string $phpRoleId
+     * @return TypeRole
+     */
+    public function setPhpRoleId($phpRoleId)
+    {
+        $this->phpRoleId = $phpRoleId;
+
+        return $this;
+    }
+
+    /**
+     * Get phpRoleId
+     *
+     * @return string 
+     */
+    public function getPhpRoleId()
+    {
+        return $this->phpRoleId;
+    }
+}
diff --git a/module/Application/src/Application/Provider/Role/RoleProvider.php b/module/Application/src/Application/Provider/Role/RoleProvider.php
index b5359a2d8be948be17b1def8aec6764eb69f3916..e2af3fed88361ef5a28a6990ec3f71b9b208ef50 100644
--- a/module/Application/src/Application/Provider/Role/RoleProvider.php
+++ b/module/Application/src/Application/Provider/Role/RoleProvider.php
@@ -11,6 +11,7 @@ use Application\Acl\ComposanteRole;
 use Application\Acl\ComposanteDbRole;
 use Application\Entity\Db\Role as RoleEntity;
 use Application\Service\Role as RoleService;
+use Application\Service\TypeRolePhpRole as TypeRolePhpRoleService;
 use Application\Service\RoleUtilisateur as RoleUtilisateurService;
 use Zend\Permissions\Acl\Role\GenericRole;
 
@@ -36,13 +37,19 @@ class RoleProvider implements ProviderInterface
     /**
      * Constructeur.
      * 
+     * @param TypeRolePhpRoleService $typeRolePhpRole
      * @param RoleService $serviceRole
      * @param RoleUtilisateurService $serviceRoleUtilisateur
      * @param array $config
      */
-    public function __construct(RoleService $serviceRole, RoleUtilisateurService $serviceRoleUtilisateur, $config = null)
+    public function __construct(
+            TypeRolePhpRoleService $typeRolePhpRole, 
+            RoleService $serviceRole, 
+            RoleUtilisateurService $serviceRoleUtilisateur, 
+            $config = null)
     {
         $this
+                ->setServiceTypeRolePhpRole($typeRolePhpRole)
                 ->setServiceRole($serviceRole)
                 ->setServiceRoleUtilisateur($serviceRoleUtilisateur);
         
@@ -66,8 +73,15 @@ class RoleProvider implements ProviderInterface
             /**
              * Rôles "composante" : exercés sur une structure de niveau 2 PORTEUSE d'éléments pédagogiques
              */
+            // rôle père
             $roleComposante = new ComposanteRole();
-            $rolesComposante = $this->serviceRole->getList();
+            // rôles métier (importés d'Harpege) correspondant au ROLE_ID PHP
+            $qb = $this->serviceTypeRolePhpRole->finderByPhpRole($roleComposante->getRoleId());
+            $rolesComposante = array();
+            foreach ($qb->getQuery()->getResult() as $trpr) { /* @var $trpr \Application\Entity\Db\TypeRolePhpRole */
+                $qb2 = $this->serviceRole->finderByTypeRole($trpr->getTypeRole());
+                $rolesComposante += $this->serviceRole->getList($qb2);
+            }
             
             /**
              * Rôles utilisateurs au sein de l'application (tables UTILISATEUR, ROLE_UTILISATEUR et ROLE_UTILISATEUR_LINKER)
@@ -116,6 +130,11 @@ class RoleProvider implements ProviderInterface
         return new GenericRole($roleId);
     }
     
+    /**
+     * @var TypeRolePhpRoleService
+     */
+    private $serviceTypeRolePhpRole;
+    
     /**
      * @var RoleService
      */
@@ -126,6 +145,12 @@ class RoleProvider implements ProviderInterface
      */
     private $serviceRoleUtilisateur;
     
+    public function setServiceTypeRolePhpRole(TypeRolePhpRoleService $serviceTypeRolePhpRole)
+    {
+        $this->serviceTypeRolePhpRole = $serviceTypeRolePhpRole;
+        return $this;
+    }
+    
     public function setServiceRole(RoleService $serviceRole)
     {
         $this->serviceRole = $serviceRole;
diff --git a/module/Application/src/Application/Provider/Role/RoleProviderFactory.php b/module/Application/src/Application/Provider/Role/RoleProviderFactory.php
index f07dd8dedb7defde62a6860973e0820e408d3a00..9b6992e2f7fb79548fe313bbbcded3a287c248d6 100644
--- a/module/Application/src/Application/Provider/Role/RoleProviderFactory.php
+++ b/module/Application/src/Application/Provider/Role/RoleProviderFactory.php
@@ -21,8 +21,9 @@ class RoleProviderFactory implements FactoryInterface
      */
     public function createService(ServiceLocatorInterface $serviceLocator)
     {
-        $serviceRole            = $serviceLocator->get('applicationRole'); /* @var $serviceRole \Application\Service\Role */
-        $serviceUtilisateurRole = $serviceLocator->get('applicationRoleUtilisateur'); /* @var $serviceRole \Application\Service\RoleUtilisateur */
+        $serviceTypeRolePhpRole = $serviceLocator->get('applicationTypeRolePhpRole'); /* @var $serviceTypeRolePhpRole \Application\Service\TypeRolePhpRole */
+        $serviceRole            = $serviceLocator->get('applicationRole');            /* @var $serviceRole \Application\Service\Role */
+        $serviceUtilisateurRole = $serviceLocator->get('applicationRoleUtilisateur'); /* @var $serviceUtilisateurRole \Application\Service\RoleUtilisateur */
         $config                 = $serviceLocator->get('BjyAuthorize\Config');
 
         if (! isset($config['role_providers']['ApplicationRoleProvider'])) {
@@ -33,6 +34,6 @@ class RoleProviderFactory implements FactoryInterface
 
         $providerConfig = $config['role_providers']['ApplicationRoleProvider'];
         
-        return new RoleProvider($serviceRole, $serviceUtilisateurRole, $providerConfig);
+        return new RoleProvider($serviceTypeRolePhpRole, $serviceRole, $serviceUtilisateurRole, $providerConfig);
     }
 }
\ No newline at end of file
diff --git a/module/Application/src/Application/Service/Role.php b/module/Application/src/Application/Service/Role.php
index 312c042c4febaf67c9c4902d15d0c4db94e2276c..f968169051e621c5c6d0a526da65aee322ec78ec 100644
--- a/module/Application/src/Application/Service/Role.php
+++ b/module/Application/src/Application/Service/Role.php
@@ -34,7 +34,7 @@ class Role extends AbstractEntityService
     
     /**
      * 
-     * @param string $typeRole
+     * @param \Application\Entity\Db\TypeRole|string $typeRole
      * @param type $qb
      * @param type $alias
      * @return type
@@ -43,6 +43,10 @@ class Role extends AbstractEntityService
     {
         list($qb, $alias) = $this->initQuery($qb, $alias);
         
+        if ($typeRole instanceof \Application\Entity\Db\TypeRole) {
+            $typeRole = $typeRole->getCode();
+        }
+        
         $qb
                 ->innerJoin('r.type', $alias = uniqid('tr'))
                 ->andWhere("$alias.code = :code")->setParameter('code', $typeRole);
@@ -66,6 +70,28 @@ class Role extends AbstractEntityService
         return $qb;
     }
     
+    /**
+     * 
+     * @param QueryBuilder $qb
+     * @param string $alias
+     * @return QueryBuilder
+     */
+    public function finderByOffreFormationExistante(QueryBuilder $qb = null, $alias = null)
+    {
+        list($qb, $alias) = $this->initQuery($qb, $alias);
+        
+        $qb
+                ->select("$alias, tr123, s")
+                ->distinct()
+                ->innerJoin('r.type', 'tr123')
+                ->innerJoin('r.structure', 's')
+                ->innerJoin('s.elementPedagogique', 'ep');
+//                ->where('tr.code <> :code')->setParameter('code', 'IND')
+//                ->andWhere('s.niveau = :niv')->setParameter('niv', 2);
+        
+        return $qb;
+    }
+    
     /**
      * Retourne une liste d'entités en fonction du QueryBuilder donné
      *
@@ -80,11 +106,11 @@ class Role extends AbstractEntityService
         list($qb, $alias) = $this->initQuery($qb, $alias);
         
         $qb
-                ->addSelect("tr, s")
+                ->addSelect("tr987, s12")
                 ->distinct()
-                ->innerJoin('r.type', 'tr')
-                ->innerJoin('r.structure', 's')
-                ->andWhere('tr.code <> :codeExclu')->setParameter('codeExclu', 'IND')/*
+                ->innerJoin('r.type', 'tr987')
+                ->innerJoin('r.structure', 's12')
+                ->andWhere('tr987.code <> :codeExclu')->setParameter('codeExclu', 'IND')/*
                 ->andWhere('s.niveau = :niv')->setParameter('niv', 2)*/;
         
         return parent::getList($qb);
diff --git a/module/Application/src/Application/Service/TypeRolePhpRole.php b/module/Application/src/Application/Service/TypeRolePhpRole.php
new file mode 100644
index 0000000000000000000000000000000000000000..662ea0fdf2ac7c4d737c9e1922f7b17652255e57
--- /dev/null
+++ b/module/Application/src/Application/Service/TypeRolePhpRole.php
@@ -0,0 +1,100 @@
+<?php
+
+namespace Application\Service;
+
+use Doctrine\ORM\QueryBuilder;
+
+/**
+ * Description of TypeRolePhpRole
+ *
+ * @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr>
+ */
+class TypeRolePhpRole extends AbstractEntityService
+{
+    /**
+     * retourne la classe des entités
+     *
+     * @return string
+     * @throws RuntimeException
+     */
+    public function getEntityClass()
+    {
+        return 'Application\Entity\Db\TypeRolePhpRole';
+    }
+
+    /**
+     * Retourne l'alias d'entité courante
+     *
+     * @return string
+     */
+    public function getAlias()
+    {
+        return 'trpr';
+    }
+    
+    /**
+     * 
+     * @param \Application\Entity\Db\TypeRole|string $typeRole
+     * @param QueryBuilder $qb
+     * @param string $alias
+     * @return QueryBuilder
+     */
+    public function finderByTypeRole($typeRole, QueryBuilder $qb = null, $alias = null)
+    {
+        list($qb, $alias) = $this->initQuery($qb, $alias);
+        
+        if ($typeRole instanceof \Application\Entity\Db\TypeRole) {
+            $typeRole = $typeRole->getCode();
+        }
+        
+        $qb
+                ->innerJoin("$alias.typeRole", $trAlias = uniqid('tr'))
+                ->andWhere("$trAlias.code = :code")->setParameter('code', $typeRole);
+        
+        return $qb;
+    }
+    
+    /**
+     * 
+     * @param \Zend\Permissions\Acl\Role\RoleInterface|string $phpRole
+     * @param QueryBuilder $qb
+     * @param string $alias
+     * @return QueryBuilder
+     */
+    public function finderByPhpRole($phpRole, QueryBuilder $qb = null, $alias = null)
+    {
+        list($qb, $alias) = $this->initQuery($qb, $alias);
+        
+        if ($phpRole instanceof \Zend\Permissions\Acl\Role\RoleInterface) {
+            $phpRole = $phpRole->getRoleId();
+        }
+        
+        $qb
+                ->distinct()
+                ->andWhere("$alias.phpRoleId = :roleId")->setParameter('roleId', $phpRole);
+        
+        return $qb;
+    }
+    
+    /**
+     * Retourne une liste d'entités en fonction du QueryBuilder donné
+     *
+     * La liste de présente sous la forme d'un tableau associatif, dont les clés sont les ID des entités et les valeurs les entités elles-mêmes
+     *
+     * @param QueryBuilder|null $qb
+     * @param string|null $alias
+     * @return array
+     */
+//    public function getList(QueryBuilder $qb=null, $alias=null )
+//    {
+//        list($qb, $alias) = $this->initQuery($qb, $alias);
+//        
+//        $qb
+//                ->addSelect("tr, s")
+//                ->distinct()
+//                ->innerJoin('r.typeRole', $trAlias = uniqid('tr'))
+//                ->andWhere("$trAlias.code <> :codeExclu")->setParameter('codeExclu', 'IND');
+//        
+//        return parent::getList($qb);
+//    }
+}
\ No newline at end of file