diff --git a/app/decorators.py b/app/decorators.py
index f84ca85a69617b9e0764382bc683fe1df0af15ed..5c853c118c4926189c311e8f5b51dec3d72926f0 100644
--- a/app/decorators.py
+++ b/app/decorators.py
@@ -1,6 +1,5 @@
 # -*- coding: UTF-8 -*
-"""Decorators for permissions, roles and ScoDoc7 Zope compatibility
-"""
+"""Decorators for permissions, roles and ScoDoc7 Zope compatibility"""
 from functools import wraps
 import inspect
 
@@ -19,7 +18,7 @@ import app.scodoc.sco_utils as scu
 from app.scodoc.sco_exceptions import ScoValueError
 
 
-class ZUser(object):
+class ZUser:
     "Emulating Zope User"
 
     def __init__(self):
@@ -146,6 +145,7 @@ def permission_required_compat_scodoc7(permission):  # XXX TODO A SUPPRIMER
 
 
 def admin_required(f):
+    "requiert la permission SuperAdmin"
     from app.auth.models import Permission
 
     return permission_required(Permission.ScoSuperAdmin)(f)
diff --git a/app/models/etudiants.py b/app/models/etudiants.py
index 573f3f2ba0ef0ac80ec09daaf373fff64d6e65b1..b0e2ae4779bb2d452999a9254110d2ee50a3283e 100644
--- a/app/models/etudiants.py
+++ b/app/models/etudiants.py
@@ -295,6 +295,9 @@ class Identite(models.ScoDocModel):
         """
         check_etud_duplicate_code(args, "code_nip", etudid=self.id)
         check_etud_duplicate_code(args, "code_ine", etudid=self.id)
+        if self.admission is None:
+            self.admission = Admission()
+            db.session.add(self.admission)
         modified = super().from_dict(args, **kwargs)
         if modified:
             msg = f"""Modification de l'étudiant {self.html_link_fiche()} id={self.id} nip={
diff --git a/app/scodoc/sco_report.py b/app/scodoc/sco_report.py
index ab38f6d3e357e885e33ffad43152b3067ff797df..c7e171ccdd2f2f8d2a1a6abe49a46c68a5c7e882 100644
--- a/app/scodoc/sco_report.py
+++ b/app/scodoc/sco_report.py
@@ -92,8 +92,9 @@ def formsemestre_etuds_stats(
             continue
         etud = Identite.get_etud(etudid)
         e_dict = etud.to_dict_scodoc7()
-        e_dict |= etud.admission.to_dict()
-        e_dict["annee_admission"] = etud.admission.annee  # plus explicite
+        if etud.admission:
+            e_dict |= etud.admission.to_dict()
+            e_dict["annee_admission"] = etud.admission.annee  # plus explicite
         decision = nt.get_etud_decision_sem(etudid)
         if decision:
             e_dict["codedecision"] = decision["code"]
diff --git a/app/scodoc/sco_synchro_etuds.py b/app/scodoc/sco_synchro_etuds.py
index fef8b33ba00043ed652c4f553cdb70dc515d6dcf..08896943a283316bfc64598b469ddbcc7d01ef46 100644
--- a/app/scodoc/sco_synchro_etuds.py
+++ b/app/scodoc/sco_synchro_etuds.py
@@ -779,6 +779,7 @@ def do_import_etud_admission(etud: Identite, etud_data: dict, import_identite=Fa
     }
     if etud.admission is None:
         etud.admission = Admission()
+        db.session.add(etud.admission)
     args = {k: v for k, v in args.items() if v not in ("", None)}
     etud.admission.from_dict(args)