diff --git a/VERSION_HOTLINE/27346 b/VERSION_HOTLINE/27346
new file mode 100644
index 0000000000000000000000000000000000000000..9b9cd948189256f7acbe87bd8add6ab8b1f3a59c
--- /dev/null
+++ b/VERSION_HOTLINE/27346
@@ -0,0 +1 @@
+  - ticket #27346 : correction de la génération des permissions
\ No newline at end of file
diff --git a/cosmogramme/php/_init.php b/cosmogramme/php/_init.php
index d9ce7dce764e5040f5ca9351370f3ef1a826c2ec..15b3b4cec766c63d85b246f18663819722df8f37 100644
--- a/cosmogramme/php/_init.php
+++ b/cosmogramme/php/_init.php
@@ -1,7 +1,7 @@
 <?php
 error_reporting(E_ERROR | E_PARSE);
 
-define("PATCH_LEVEL","262");
+define("PATCH_LEVEL","263");
 
 define("APPLI","cosmogramme");
 define("COSMOPATH", "/var/www/html/vhosts/opac2/www/htdocs");
diff --git a/cosmogramme/sql/patch/patch_263.php b/cosmogramme/sql/patch/patch_263.php
new file mode 100644
index 0000000000000000000000000000000000000000..a61ffb9b144ff2a9a69d3ec9eee82951fcb8f836
--- /dev/null
+++ b/cosmogramme/sql/patch/patch_263.php
@@ -0,0 +1,23 @@
+<?php
+/* add default permissions to permission table because patch 242 didn't make the job */
+
+$adapter = Zend_Registry::get('sql');
+
+if(!$adapter->query("SELECT * FROM `permission` WHERE code = 'CATEGORY' LIMIT 1;"))
+	$adapter->query("insert into `permission` (code, module, type, sorting, description) VALUES ('CATEGORY', 'ARTICLE', 'Droits', 1, 'Créer des sous-catégories et des articles')");
+
+if(!$adapter->query("SELECT * FROM `permission` WHERE code = 'ARTICLE' LIMIT 1;"))
+	$adapter->query("insert into `permission` (code, module, type, sorting, description) VALUES ('ARTICLE', 'ARTICLE', 'Droits', 2, 'Créer des articles');");
+
+if(!$adapter->query("SELECT * FROM `permission` WHERE code = 'PENDING' LIMIT 1;"))
+	$adapter->query("insert into `permission` (code, module, type, sorting, description) VALUES ('PENDING', 'ARTICLE', 'Nouveaux statuts autorisés', 1, 'À valider');");
+
+if(!$adapter->query("SELECT * FROM `permission` WHERE code = 'VALIDATED' LIMIT 1;"))
+	$adapter->query("insert into `permission` (code, module, type, sorting, description) VALUES ('VALIDATED', 'ARTICLE', 'Nouveaux statuts autorisés', 101, 'Validé');");
+
+if(!$adapter->query("SELECT * FROM `permission` WHERE code = 'REFUSED' LIMIT 1;"))
+	$adapter->query("insert into `permission` (code, module, type, sorting, description) VALUES ('REFUSED', 'ARTICLE', 'Nouveaux statuts autorisés', 102, 'Refusé');");
+
+if(!$adapter->query("SELECT * FROM `permission` WHERE code = 'ARCHIVED' LIMIT 1;"))
+	$adapter->query("insert into `permission` (code, module, type, sorting, description) VALUES ('ARCHIVED', 'ARTICLE', 'Nouveaux statuts autorisés', 103, 'Archivé');");
+?>
\ No newline at end of file
diff --git a/scripts/generate-permissions.php b/scripts/generate-permissions.php
index 2ce490e409b357ce5e31dd54693f82b4c7df7ab9..999bc3d80fd8911fd17d6dad6a2510c7e2fa233e 100644
--- a/scripts/generate-permissions.php
+++ b/scripts/generate-permissions.php
@@ -1,55 +1,72 @@
 <?php
-
 require 'console.php';
-echo BASE_URL."\n";
+echo BASE_URL . "\n";
 
-if (Class_UserGroup_Permission::countBy([])>0) {
-	echo "Permissions detected, stop script\n";
+if(!Class_Permission::findAll()) {
+	echo "No permission in DB, stop script\n";
 	exit;
 }
 
-$group_category = Class_UserGroupCategorie::newInstance(['libelle' => 'Droits d\'accès aux articles']);
-
-$group_category->save();
+if (Class_UserGroup_Permission::countBy([])>0) {
+	echo "Usergroup permissions detected, stop script\n";
+	exit;
+}
 
+if(!$group_category = Class_UserGroupCategorie::findFirstBy(['libelle' => 'Droits d\'accès aux articles'])) {
+	$group_category = Class_UserGroupCategorie::newInstance(['libelle' => 'Droits d\'accès aux articles']);
+	$group_category->save();
+}
 
 $all_cms_permissions = Class_Permission::getCmsPermissions();
 $redac_permissions = Class_Permission::findAllBy(['module' => 'ARTICLE', 'code' => ['ARTICLE' , 'PENDING', 'CATEGORY' ]]);
 
-function addGroupFor($library, $level, $label, $categ,$permissions) {
+$redac_portail = addGroupFor(Class_Bib::getPortail(), ZendAfi_Acl_AdminControllerRoles::MODO_PORTAIL, 'Rédacteurs Portail' ,$group_category,$redac_permissions);
+
+$admin_portail = addGroupFor(Class_Bib::getPortail(), ZendAfi_Acl_AdminControllerRoles::ADMIN_PORTAIL,  'Administrateurs Portail ' ,$group_category,$all_cms_permissions);
+
+foreach(Class_Bib::findAll() as $library) {
+  addGroupFor($library,
+							ZendAfi_Acl_AdminControllerRoles::MODO_BIB,
+							'Rédacteurs ' . $library->getLibelle(),
+							$group_category,
+							$redac_permissions);
+
+	addGroupFor($library,
+							ZendAfi_Acl_AdminControllerRoles::ADMIN_BIB,
+							'Administrateurs ' . $library->getLibelle(),
+							$group_category,
+							$all_cms_permissions);
+
+	allow($redac_permissions,
+				$redac_portail,
+				$library);
+
+	allow($all_cms_permissions,
+				$admin_portail,
+				$library);
+}
 
-  $group = Class_UserGroup::newInstance(['libelle' => $label,
-                                         'group_type' => Class_UserGroup::TYPE_DYNAMIC,
-                                         'role_level' => $level,
-                                         'library' => $library,
-                                         'categorie' => $categ]);
+
+function addGroupFor($library, $level, $label, $categ,$permissions) {
+	if(!$group = Class_UserGroup::findFirstBy(['libelle' => $label,
+																						 'id_cat' => $categ->getId()]))
+		$group = Class_UserGroup::newInstance(['libelle' => $label,
+																					 'group_type' => Class_UserGroup::TYPE_DYNAMIC,
+																					 'role_level' => $level,
+																					 'library' => $library,
+																					 'categorie' => $categ]);
 
   $group->addRight(Class_UserGroup::RIGHT_USER_ACCES_ARTICLES)
 				->addRight(Class_UserGroup::RIGHT_USER_PUBLICATION_DIRECTE)
 				->addRight(Class_UserGroup::RIGHT_USER_FILE_ACCESS)
 				->save();
+
 	allow($permissions,$group,$library);
 	return $group;
 }
 
 
-
 function allow($permissions,$group,$library) {
   foreach($permissions as $permission)
     $permission->permitTo($group, $library);
 }
-
-
-$redac_portail=addGroupFor(Class_Bib::getPortail(), ZendAfi_Acl_AdminControllerRoles::MODO_PORTAIL, 'Rédacteurs Portail' ,$group_category,$redac_permissions);
-
-$admin_portail=addGroupFor(Class_Bib::getPortail(), ZendAfi_Acl_AdminControllerRoles::ADMIN_PORTAIL,  'Administrateurs Portail ' ,$group_category,$all_cms_permissions);
-
-
-foreach(Class_Bib::findAll() as $library) {
-  addGroupFor($library, ZendAfi_Acl_AdminControllerRoles::MODO_BIB, 'Rédacteurs ' . $library->getLibelle(),$group_category,$redac_permissions);
-	addGroupFor($library, ZendAfi_Acl_AdminControllerRoles::ADMIN_BIB,  'Administrateurs ' . $library->getLibelle(),$group_category,$all_cms_permissions);
-
-	allow($redac_permissions,$redac_portail, $library);
-	allow($all_cms_permissions,$admin_portail, $library);
-
-}