diff --git a/apps/maarch_entreprise/lang/fr.php b/apps/maarch_entreprise/lang/fr.php
index ce0aa10cfb4c2be5636903da295d69c3a4aaf6ca..ad985dccf61aa630a570653d0b7fe99fb14df3b6 100755
--- a/apps/maarch_entreprise/lang/fr.php
+++ b/apps/maarch_entreprise/lang/fr.php
@@ -4644,6 +4644,12 @@ if (!defined('_REJECTION_WORKFLOW_PREVIOUS')) {
 if (!defined('_REJECTION_WORKFLOW_PREVIOUS_DESC')) {
     define('_REJECTION_WORKFLOW_PREVIOUS_DESC', "Réinitialise la date de visa du précédent viseur présent dans le circuit de visa du document ('process_date' de la table listinstance).");
 }
+if (!defined('_REJECTION_WORKFLOW_ENTITY')) {
+    define('_REJECTION_WORKFLOW_ENTITY', 'Refuser le visa - retour à l\'entité initiatrice');
+}
+if (!defined('_REJECTION_WORKFLOW_ENTITY_DESC')) {
+    define('_REJECTION_WORKFLOW_ENTITY_DESC', 'Réinitialise la date de visa de tous les viseurs présents dans le circuit de visa du document (\'process_date\' de la table listinstance) et le renvoit à l\'entité initiatrice.');
+}
 if (!defined('_VISA_MAIL')) {
     define('_VISA_MAIL', 'Viser le courrier');
 }
diff --git a/core/xml/actions_pages.xml b/core/xml/actions_pages.xml
index fbec250b34676a10a6c39c50c4de847b3420d244..00499e0c3628718cdb43e1ae839fed352cbb4690 100755
--- a/core/xml/actions_pages.xml
+++ b/core/xml/actions_pages.xml
@@ -333,7 +333,19 @@ An action page is described in a ACTIONPAGE tag :
             <COLL_ID>letterbox_coll</COLL_ID>
         </COLLECTIONS>
     </ACTIONPAGE>
-	<ACTIONPAGE>
+    <ACTIONPAGE>
+        <ID>rejection_visa_entity</ID>
+        <LABEL>_REJECTION_WORKFLOW_ENTITY</LABEL>
+        <NAME>rejection_visa_entity</NAME>
+        <DESC>_REJECTION_WORKFLOW_ENTITY_DESC</DESC>
+        <ORIGIN>module</ORIGIN>
+        <MODULE>visa</MODULE>
+        <FLAG_CREATE>false</FLAG_CREATE>
+        <COLLECTIONS>
+            <COLL_ID>letterbox_coll</COLL_ID>
+        </COLLECTIONS>
+    </ACTIONPAGE>
+    <ACTIONPAGE>
         <ID>send_to_visa</ID>
         <LABEL>_SEND_TO_VISA</LABEL>
         <NAME>send_to_visa</NAME>
diff --git a/modules/visa/rejection_visa_entity.php b/modules/visa/rejection_visa_entity.php
new file mode 100644
index 0000000000000000000000000000000000000000..1ae65ce22b3066e7b1b4a4c48bef411d935e042b
--- /dev/null
+++ b/modules/visa/rejection_visa_entity.php
@@ -0,0 +1,152 @@
+<?php
+
+$confirm = false;
+$etapes = ['form', 'empty_error'];
+$frm_width = '355px';
+$frm_height = 'auto';
+
+function get_form_txt($values, $path_manage_action, $id_action, $table, $module, $coll_id, $mode)
+{
+    require('modules/entities/entities_tables.php');
+    require_once('modules/entities/class/EntityControler.php');
+    require_once('apps/' . $_SESSION['config']['app_id'] . '/class/class_chrono.php');
+
+    $db = new Database();
+    $cr7 = new chrono();
+    $entity_ctrl = new EntityControler();
+
+    $servicesCompare = [];
+    $labelAction = '';
+
+    if ($id_action != '') {
+        $stmt = $db->query('select label_action from actions where id = ?', [$id_action]);
+        $resAction = $stmt->fetchObject();
+        $labelAction = functions::show_string($resAction->label_action);
+    }
+
+    $frm_str = '<div id="frm_error_' . $id_action . '" class="error"></div>';
+    if ($labelAction != '') {
+        $frm_str .= '<h2 class="title">' . $labelAction . ' ' . _NUM;
+    } else {
+        $frm_str .= '<h2 class="title">' . _REDIRECT_MAIL . ' ' . _NUM;
+    }
+    $values_str = '';
+    if (empty($_SESSION['stockCheckbox'])) {
+        for ($i = 0; $i < count($values); $i++) {
+            $values_str .= $values[$i] . ', ';
+        }
+    } else {
+
+        for ($i = 0; $i < count($_SESSION['stockCheckbox']); $i++) {
+            $values_str .= $_SESSION['stockCheckbox'][$i] . ', ';
+        }
+    }
+
+    $values_str = preg_replace('/, $/', '', $values_str);
+    if (_ID_TO_DISPLAY == 'res_id') {
+        $frm_str .= $values_str;
+    } else if (_ID_TO_DISPLAY == 'chrono_number') {
+        $chrono_number = $cr7->get_chrono_number($values_str, 'res_view_letterbox');
+        $frm_str .= $chrono_number;
+    }
+
+    $frm_str .= '</h2><br/>';
+    require 'modules/templates/class/templates_controler.php';
+    $templatesControler = new templates_controler();
+
+    $EntitiesIdExclusion = [];
+    $entities = $entity_ctrl->getAllEntities();
+    $countEntities = count($entities);
+
+    for ($cptAllEnt = 0; $cptAllEnt < $countEntities; $cptAllEnt++) {
+        if (!is_integer(array_search($entities[$cptAllEnt]->__get('entity_id'), $servicesCompare))) {
+            array_push($EntitiesIdExclusion, $entities[$cptAllEnt]->__get('entity_id'));
+        }
+    }
+
+    $templates = $templatesControler->getAllTemplatesForSelect();
+    $frm_str .= '<br/><b>' . _NOTES . ':</b><br/>';
+    $frm_str .= '<select name="templateNotes" id="templateNotes" style="width:98%;margin-bottom: 10px;background-color: White;border: 1px solid #999;color: #666;text-align: left;" '
+        . 'onchange="addTemplateToNote($(\'templateNotes\').value, \''
+        . $_SESSION['config']['businessappurl'] . 'index.php?display=true'
+        . '&module=templates&page=templates_ajax_content_for_notes\');document.getElementById(\'notes\').focus();">';
+    $frm_str .= '<option value="">' . _SELECT_NOTE_TEMPLATE . '</option>';
+    for ($i = 0; $i < count($templates); $i++) {
+        if ($templates[$i]['TYPE'] == 'TXT' && ($templates[$i]['TARGET'] == 'notes' || $templates[$i]['TARGET'] == '')) {
+            $frm_str .= '<option value="';
+            $frm_str .= $templates[$i]['ID'];
+            $frm_str .= '">';
+            $frm_str .= $templates[$i]['LABEL'];
+        }
+        $frm_str .= '</option>';
+    }
+    $frm_str .= '</select><br />';
+
+    $frm_str .= '<textarea style="width:98%;height:60px;resize:none;" name="notes"  id="notes" onblur="document.getElementById(\'note_content_to_users\').value = document.getElementById(\'notes\').value;"></textarea>';
+    $frm_str .= '<div id="form2" style="border:none;">';
+    $frm_str .= '<form name="frm_redirect_dep" id="frm_redirect_dep" method="post" class="forms" action="#">';
+    $frm_str .= '<input type="hidden" name="chosen_action" id="chosen_action" value="end_action" />';
+    $frm_str .= '<input type="hidden" name="note_content_to_users" id="note_content_to_users" />';
+    $frm_str .= '</form>';
+    $frm_str .= '</div>';
+    $frm_str .= '<hr />';
+
+    $frm_str .= '<div align="center">';
+    $frm_str .= ' <input type="button" name="redirect_dep" value="' . _VALIDATE . '" id="redirect_dep" class="button" onclick="valid_action_form( \'frm_redirect_dep\', \'' . $path_manage_action . '\', \'' . $id_action . '\', \'' . $values_str . '\', \'' . $table . '\', \'' . $module . '\', \'' . $coll_id . '\', \'' . $mode . '\');" />';
+    $frm_str .= ' <input type="button" name="cancel" id="cancel" class="button"  value="' . _CANCEL . '" onclick="pile_actions.action_pop();destroyModal(\'modal_' . $id_action . '\');"/>';
+    $frm_str .= '</div>';
+
+    return addslashes($frm_str);
+}
+
+function check_form($form_id, $values)
+{
+    return true;
+}
+
+function manage_form($arr_id, $history, $id_action, $label_action, $status, $coll_id, $table, $values_form)
+{
+    if (empty($values_form) || count($arr_id) < 1)
+        return false;
+
+    require_once('modules/notes/class/notes_controler.php');
+    $note = new notes_controler();
+
+    $coll_id = $_SESSION['current_basket']['coll_id'];
+    $res_id = $arr_id[0];
+
+    $formValues = [];
+    for ($i = 0; $i < count($values_form); $i++) {
+        $id = $values_form[$i]['ID'];
+        $formValues[$id] = $values_form[$i]['VALUE'];
+    }
+
+    # save note
+    if ($formValues['note_content_to_users'] != '') {
+        //Add notes
+        $note->addNote($res_id, $coll_id, $formValues['note_content_to_users']);
+    }
+
+    return array('result' => $res_id . '#', 'history_msg' => '');
+}
+
+function manage_empty_error($arr_id, $history, $id_action, $label_action, $status)
+{
+    $db = new Database();
+    $_SESSION['action_error'] = '';
+    $res_id = $arr_id[0];
+
+    $db->query('UPDATE listinstance SET process_date = NULL WHERE res_id = ? AND difflist_type = ?', [$res_id, 'VISA_CIRCUIT']);
+    $stmt = $db->query('SELECT initiator FROM res_letterbox WHERE res_id = ?', [$res_id]);
+    $resInitiator = $stmt->fetch();
+    $stmt = $db->query('SELECT item_id, item_type, item_mode FROM listmodels WHERE object_id = ?', [$resInitiator['initiator']]);
+    $resListModels = $stmt->fetchAll();
+    foreach ($resListModels as $resListModel) {
+        if ($resListModel['item_mode'] == 'dest') {
+            $db->query('UPDATE listinstance SET item_id = ?, item_type = ? WHERE res_id = ? AND item_mode = ?', [$resListModel['item_id'], $resListModel['item_type'], $res_id, $resListModel['item_mode']]);
+        }
+    }
+
+    return array('result' => $res_id . '#', 'history_msg' => $label_action);
+}
+
diff --git a/src/core/lang/lang-en.php b/src/core/lang/lang-en.php
index e38b37d3afedd10b14188a2b732ba618f4e889a0..836f46f211216dad6f1ee36b1be2f0494a672a87 100644
--- a/src/core/lang/lang-en.php
+++ b/src/core/lang/lang-en.php
@@ -327,6 +327,8 @@ define('_REJECTION_WORKFLOW_PREVIOUS', 'Visa rejection - back to the previous au
 define('_REJECTION_WORKFLOW_PREVIOUS_DESC', 'Reset visa date of previous supervisor in visa circuit of document (\'process_date\' of listinstance table).');
 define('_REJECTION_WORKFLOW_REDACTOR', 'Visa rejection - back to the author');
 define('_REJECTION_WORKFLOW_REDACTOR_DESC', 'Reset visa date of all supervisor in visa circuit of document (\'process_date\' of listinstance table).');
+define('_REJECTION_WORKFLOW_ENTITY', 'Visa rejection - back to the initiator entity');
+define('_REJECTION_WORKFLOW_ENTITY_DESC', 'Reset visa date of all supervisor in visa circuit of document (\'process_date\' of listinstance table) and send it to the initiator entity.');
 define('_INTERRUPT_WORKFLOW', 'Break the visa flow');
 define('_INTERRUPT_WORKFLOW_DESC', 'Update visa date of current supervisor / signatory and all next supervisors in visa circuit of document (\'process_date\' of listinstance table). Insère également un message d\'interruption sur le viseur actuel (\'process_comment\' de la table listinstance).');
 define('_PROCEED_WORKFLOW', 'continue the visa flow');
diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php
index 4e68809a55567d996491381f2fd219647b2c8df5..1740ef5df81272c6323f76912ebb5bc0a1fddbe1 100644
--- a/src/core/lang/lang-fr.php
+++ b/src/core/lang/lang-fr.php
@@ -327,6 +327,8 @@ define('_REJECTION_WORKFLOW_PREVIOUS', 'Refuser le visa - retour au précédent
 define('_REJECTION_WORKFLOW_PREVIOUS_DESC', 'Réinitialise la date de visa du précédent viseur présent dans le circuit de visa du document (\'process_date\' de la table listinstance).');
 define('_REJECTION_WORKFLOW_REDACTOR', 'Refuser le visa - retour rédacteur');
 define('_REJECTION_WORKFLOW_REDACTOR_DESC', 'Réinitialise la date de visa de tous les viseurs présents dans le circuit de visa du document (\'process_date\' de la table listinstance).');
+define('_REJECTION_WORKFLOW_ENTITY', 'Refuser le visa - retour à l\'entité initiatrice');
+define('_REJECTION_WORKFLOW_ENTITY_DESC', 'Réinitialise la date de visa de tous les viseurs présents dans le circuit de visa du document (\'process_date\' de la table listinstance) et le renvoit à l\'entité initiatrice.');
 define('_INTERRUPT_WORKFLOW', 'Interrompre le circuit de visa');
 define('_INTERRUPT_WORKFLOW_DESC', 'Met à jour la date du visa de l\'actuel viseur / signataire et de tous les viseurs suivant présents dans le circuit de visa du document (\'process_date\' de la table listinstance). Insère également un message d\'interruption sur le viseur actuel (\'process_comment\' de la table listinstance).');
 define('_PROCEED_WORKFLOW', 'Poursuivre le circuit de visa');