diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 732d0c4a644eb444d6b4385643ff32fab19fab52..4acca684ec8c5cda7b3ecd21b9e568ab03d57e8c 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -6,6 +6,8 @@ exclude: |
   ^setup/|/static/description/index\.html$|
   # We don't want to mess with tool-generated files
   .svg$|/tests/([^/]+/)?cassettes/|^.copier-answers.yml$|^.github/|
+  # Maybe reactivate this when all README files include prettier ignore tags?
+  ^README\.md$|
   # Library files can have extraneous formatting (even minimized)
   /static/(src/)?lib/|
   # Repos using Sphinx to generate docs don't need prettying
@@ -25,8 +27,13 @@ repos:
         entry: found forbidden files; remove them
         language: fail
         files: "\\.rej$"
+      - id: en-po-files
+        name: en.po files cannot exist
+        entry: found a en.po file
+        language: fail
+        files: '[a-zA-Z0-9_]*/i18n/en\.po$'
   - repo: https://github.com/oca/maintainer-tools
-    rev: 7d8a9f9ad73db0976fb03cbee43d953bc29b89e9
+    rev: ab1d7f6
     hooks:
       # update the NOT INSTALLABLE ADDONS section above
       - id: oca-update-pre-commit-excluded-addons
@@ -48,7 +55,7 @@ repos:
     hooks:
       - id: black
   - repo: https://github.com/pre-commit/mirrors-prettier
-    rev: v2.6.2
+    rev: v2.1.2
     hooks:
       - id: prettier
         name: prettier (with plugin-xml)
@@ -59,7 +66,7 @@ repos:
           - --plugin=@prettier/plugin-xml
         files: \.(css|htm|html|js|json|jsx|less|md|scss|toml|ts|xml|yaml|yml)$
   - repo: https://github.com/pre-commit/mirrors-eslint
-    rev: v8.15.0
+    rev: v7.8.1
     hooks:
       - id: eslint
         verbose: true
@@ -67,7 +74,7 @@ repos:
           - --color
           - --fix
   - repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v4.2.0
+    rev: v3.2.0
     hooks:
       - id: trailing-whitespace
         # exclude autogenerated files
@@ -89,37 +96,33 @@ repos:
       - id: mixed-line-ending
         args: ["--fix=lf"]
   - repo: https://github.com/asottile/pyupgrade
-    rev: v2.32.1
+    rev: v2.7.2
     hooks:
       - id: pyupgrade
         args: ["--keep-percent-format"]
   - repo: https://github.com/PyCQA/isort
-    rev: 5.10.1
+    rev: 5.12.0
     hooks:
       - id: isort
         name: isort except __init__.py
         args:
           - --settings=.
         exclude: /__init__\.py$
-  - repo: https://gitlab.com/PyCQA/flake8
-    rev: 3.9.2
+  - repo: https://github.com/PyCQA/flake8
+    rev: 3.8.3
     hooks:
       - id: flake8
         name: flake8
         additional_dependencies: ["flake8-bugbear==20.1.4"]
-  - repo: https://github.com/PyCQA/pylint
-    rev: v2.11.1
+  - repo: https://github.com/OCA/pylint-odoo
+    rev: 7.0.2
     hooks:
-      - id: pylint
+      - id: pylint_odoo
         name: pylint with optional checks
         args:
           - --rcfile=.pylintrc
           - --exit-zero
         verbose: true
-        additional_dependencies: &pylint_deps
-          - pylint-odoo==5.0.5
-      - id: pylint
-        name: pylint with mandatory checks
+      - id: pylint_odoo
         args:
           - --rcfile=.pylintrc-mandatory
-        additional_dependencies: *pylint_deps
diff --git a/models/api_alfresco.py b/models/api_alfresco.py
index 68735ea31f5615ea0e53dbdfc0cc4c1765c3a130..e893b1e65823c0ab0def6cfc2fdc814935f85262 100644
--- a/models/api_alfresco.py
+++ b/models/api_alfresco.py
@@ -293,8 +293,8 @@ class CgscopAlfresco(models.AbstractModel):
             return file_upload
         except (UpdateConflictException, ContentAlreadyExistsException):
             _logger.info("Le document %s existe déjà dans le dossier spécifié" % name)
-            # Recherche noderef document existant
-            children = cmis_obj.getChildren().getResults()
+            # Recherche node_ref document existant
+            children = cmis_obj.getDescendants(depth="3").getResults()
             old_cmis_file = list(filter(lambda f: f.name == name, children))[0]
             # Création d'une copie de travail du document pour versionnage
             pwc = old_cmis_file.checkout()
@@ -304,10 +304,27 @@ class CgscopAlfresco(models.AbstractModel):
                 contentType="application/pdf",
             )
             return new_cmis_file
-        except (
-            ObjectNotFoundException,
-            InvalidArgumentException,
-        ) as e:
+        except ObjectNotFoundException as e:
+            children = cmis_obj.getDescendants(depth="3").getResults()
+            children_file = list(
+                filter(
+                    lambda f: f.properties.get("crm:type") == metadata.get("crm:type")
+                    and f.properties.get("crm:contexte") == metadata.get("crm:contexte")
+                    and f.properties.get("crm:annee") == metadata.get("crm:annee"),
+                    children,
+                )
+            )
+            if children_file:
+                return children_file[0]
+            else:
+                raise exceptions.ValidationError(
+                    _(
+                        "L'appel à Alfresco à échoué :"
+                        "\n- Code: %s\n\n- Url\n%s\n\n- Détail\n%s"
+                    )
+                    % (e.status, e.url, e.details)
+                )
+        except InvalidArgumentException as e:
             _logger.error(e)
             raise exceptions.ValidationError(
                 _(