diff --git a/models/res_partner.py b/models/res_partner.py
index c8e0b8542d9bed175db9be3b90f197fd7e165464..817e49b7450241202e276b31609366655806b368 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -76,6 +76,10 @@ class ScopPartner(models.Model):
         string="Nb de statuts de facturation",
         compute="_compute_project_invoicing_status_nb",
     )
+    liasse_membership_id = fields.Many2one(
+        comodel_name="scop.liasse.fiscale",
+        string="Liasse fiscale adhésion"
+    )
 
     # Changement de statuts
     list_logs = fields.Text("Liste des erreurs")
@@ -122,18 +126,15 @@ class ScopPartner(models.Model):
             ],
             limit=1,
         )
-        if not staff_id:
-            staff_id = staff_id.create(
-                {
-                    "partner_id": self.id,
-                    "type_entry": "membership",
-                    "effective_date": fields.Date.today(),
-                    "staff_count": 0,
-                }
-            )
 
         wizard = self.env["scop.membership.staff.wizard"].create(
-            {"partner_id": self.id, "staff_id": staff_id.id}
+            {
+                "partner_id": self.id,
+                "staff_id": staff_id.id if staff_id else None,
+                "effective_date": fields.Date.today()
+                if not staff_id
+                else staff_id.effective_date,
+            }
         )
         return {
             "name": "Effectifs à l'adhésion",
@@ -147,7 +148,10 @@ class ScopPartner(models.Model):
     def fill_membership_liasse(self):
         self.ensure_one()
         wizard = self.env["scop.membership.liasse.wizard"].create(
-            {"partner_id": self.id,}
+            {
+                "partner_id": self.id,
+                "liasse_id": self.liasse_membership_id.id,
+            }
         )
         return {
             "name": "Données financières",
@@ -161,29 +165,6 @@ class ScopPartner(models.Model):
     # ------------------------------------------------------
     # Business methods
     # ------------------------------------------------------
-    # TODO: supprimer ou modifier (suppression fonction get_liasse_adhesion)
-    def check_compulsory_fields(self, lm):
-        """
-        Vérification des champs de la liste ministère et de la liasse fiscale
-        :param lm:
-        :return:
-        """
-        res = ""
-        errors_lm = lm.check_compulsory_fields_lm()
-        if errors_lm:
-            res += (
-                "<hr/><strong>Dossier d'Adhésion : </strong><ul>" + errors_lm + "</ul>"
-            )
-
-
-        liasse_adhesion = self.get_liasse_adhesion(lm)
-        errors_lf = liasse_adhesion.check_compulsory_fields_lf()
-        if errors_lf:
-            res += (
-                "<hr/><strong>Données financières :</strong><ul>" + errors_lf + "</ul>"
-            )
-        return res
-
     def create_num_adherent(self):
         """
         Generate new num adherent with sequence
@@ -330,7 +311,7 @@ class ScopPartner(models.Model):
     # ------------------------------------------------------
     def scop_sumbit_cg(self):
         """
-        Ouvre le wizard et vérifie les effectifs
+        Ouvre le wizard
         """
         wizard = self.env["scop.membership.submit.wizard"].create(
             {
@@ -351,23 +332,31 @@ class ScopPartner(models.Model):
         """
         Modifie le statut de la coopérative pour transmission du dossier à la CG
         - positionner la date_transmission_cg avec la date du jour
-        - affecter la coop à sa DIRECCTE
         @return : True
         """
+        # Check Staff
         staff_line = self.staff_ids.filtered(
             lambda s: s.type_entry == "membership"
         ).sorted(key="effective_date", reverse=True)
-        if staff_line and staff_line[0].staff_count > 0:
-            self.update(
-                {
-                    "membership_status": "soumis_cg",
-                    "date_transmission_cg": fields.Date.today(),
-                    "list_logs": False,
-                }
-            )
-            self.affectation_contact_ministere()
-        else:
+        if not (staff_line or staff_line[0].staff_count > 0):
             raise UserError(_("Les effectifs à l'adhésion ne sont pas renseignés."))
+        # Check financial datas
+        if not self.liasse_membership_id:
+            raise UserError(_(
+                "Il est nécessaire de renseigner les données financières pour valider"
+            ))
+        if self.liasse_membership_id.check_compulsory_fields_lf():
+            raise UserError(_(
+                "Les données financières ne peuvent pas être nulles."
+            ))
+
+        self.update(
+            {
+                "membership_status": "soumis_cg",
+                "date_transmission_cg": fields.Date.today(),
+                "list_logs": False,
+            }
+        )
 
     def scop_abandonne(self):
         """
diff --git a/models/scop_liasse_fiscale.py b/models/scop_liasse_fiscale.py
index c44f1473ce54cbb7066b133b47e16fc667ab1bc7..8f1ced22b012675890374906cae5e866aa10ab21 100644
--- a/models/scop_liasse_fiscale.py
+++ b/models/scop_liasse_fiscale.py
@@ -25,4 +25,4 @@ class ScopAdhesionLiasseFiscale(models.Model):
                 "(CA ou VA obligatoire)</li>"
             )
         else:
-            return str()
+            return False
diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv
index 8c6de3e85401d90f89158fc705ca7bca31c45d3d..b03743409152c19dc748a1d8f32d0e50ba981518 100644
--- a/security/ir.model.access.csv
+++ b/security/ir.model.access.csv
@@ -8,4 +8,4 @@ admin_scop_adhesion_file,admin_scop_adhesion_file,model_scop_adhesion_file,cgsco
 cg_access_compulsory_fields_suivi_wizard,cg_access_compulsory_fields_suivi_wizard,model_scop_compulsory_fields_suivi_wizard,base.group_user,1,1,1,0
 access_scop_membership_liasse_wizard,access_scop_membership_liasse_wizard,model_scop_membership_liasse_wizard,base.group_user,1,1,1,1
 access_scop_membership_staff_wizard,access_scop_membership_staff_wizard,model_scop_membership_staff_wizard,base.group_user,1,1,1,1
-access_scop_membership_submit_wizard,access_scop_membership_submit_wizard,model_scop_membership_submit_wizard,base.group_user,1,1,1,1
\ No newline at end of file
+access_scop_membership_submit_wizard,access_scop_membership_submit_wizard,model_scop_membership_submit_wizard,base.group_user,1,1,1,1
diff --git a/wizard/scop_compulsory_fields_suivi_wizard.py b/wizard/scop_compulsory_fields_suivi_wizard.py
index 6f3a5c9a74157fb6476d1f312b88e1fff68544d8..0db63cc511b3e3830b8ef7063cd473d94263c5c7 100644
--- a/wizard/scop_compulsory_fields_suivi_wizard.py
+++ b/wizard/scop_compulsory_fields_suivi_wizard.py
@@ -47,6 +47,7 @@ class ScopCompulsoryFieldsSuiviWizard(models.TransientModel):
         if self.with_adhesion:
             self.partner_id.write({"membership_status": "adhesion"})
         if form_id in form_id._get_lm_form():
+            # Create extranet access
             self.partner_id.write({"extranet_service_access": True})
             if not self.partner_id.director_ids:
                 raise UserError(
@@ -59,6 +60,12 @@ class ScopCompulsoryFieldsSuiviWizard(models.TransientModel):
                         "extranet_update_company": True,
                     }
                 )
+            # Create LM
+            self.env["scop.liste.ministere"].sudo().create_folder(
+                self.partner_id, self.date_1st_sign.year, "subscribe"
+            )
+            # Set DDETS
+            self.partner_id.affectation_contact_ministere()
 
         return {"type": "ir.actions.act_window_close"}
 
diff --git a/wizard/scop_membership_liasse_wizard.py b/wizard/scop_membership_liasse_wizard.py
index 75b842f2d350ce52156633b88eb46c01f477c8ee..df8055bb7ccd9598e244f69119594e979fa0c468 100644
--- a/wizard/scop_membership_liasse_wizard.py
+++ b/wizard/scop_membership_liasse_wizard.py
@@ -12,9 +12,7 @@ class ScopMembershipLiasseWizard(models.TransientModel):
     # Field declaration
     # ------------------------------------------------------
     partner_id = fields.Many2one(
-        comodel_name="res.partner",
-        string="Coopérative",
-        required=True
+        comodel_name="res.partner", string="Coopérative", required=True
     )
     liasse_id = fields.Many2one(
         comodel_name="scop.liasse.fiscale",
@@ -36,8 +34,12 @@ class ScopMembershipLiasseWizard(models.TransientModel):
     av_lf = fields.Monetary(related="liasse_id.av_lf")
     L2052_FY = fields.Monetary(related="liasse_id.L2052_FY")
     L2053_HN = fields.Float(related="liasse_id.L2053_HN")
-    contribution_base_type = fields.Selection(related="liasse_id.contribution_base_type")
-    contribution_base_amount = fields.Integer(related="liasse_id.contribution_base_amount")
+    contribution_base_type = fields.Selection(
+        related="liasse_id.contribution_base_type"
+    )
+    contribution_base_amount = fields.Integer(
+        related="liasse_id.contribution_base_amount"
+    )
     contribution_cg = fields.Float(related="liasse_id.contribution_cg")
 
     # ------------------------------------------------------
@@ -45,9 +47,9 @@ class ScopMembershipLiasseWizard(models.TransientModel):
     # ------------------------------------------------------
     def _compute_is_financial_data(self):
         for wizard in self:
-            liasse_ids = self.env["scop.liasse.fiscale"].search([
-                ("partner_id", "=", wizard.partner_id.id)
-            ])
+            liasse_ids = self.env["scop.liasse.fiscale"].search(
+                [("partner_id", "=", wizard.partner_id.id)]
+            )
             wizard.is_financial_data = True if liasse_ids else False
 
     @api.depends("liasse_id")
@@ -65,6 +67,7 @@ class ScopMembershipLiasseWizard(models.TransientModel):
         """
         Sauvegarder les données même avec erreurs
         """
+        self.partner_id.liasse_membership_id = self.liasse_id
         return {"type": "ir.actions.act_window_close"}
 
     def new_forecast(self):
@@ -76,11 +79,10 @@ class ScopMembershipLiasseWizard(models.TransientModel):
             "type_id": "forecast",
             "is_qualified": True,
         }
-        liasse_fiscale_id = self.env["scop.liasse.fiscale"].create(
-            liasse_values
-        )
+        liasse_id = self.env["scop.liasse.fiscale"].create(liasse_values)
+        self.partner_id.liasse_membership_id = liasse_id
 
-        return self.open_forecast(liasse_fiscale_id)
+        return self.open_forecast(liasse_id)
 
     def update_forecast(self):
         return self.open_forecast(self.liasse_id)
@@ -92,6 +94,7 @@ class ScopMembershipLiasseWizard(models.TransientModel):
         action = self.env["ir.actions.actions"]._for_xml_id(
             "cgscop_liasse_fiscale.scop_liasse_fiscale_previsionnelle_act_window"
         )
+        self.partner_id.liasse_membership_id = liasse_id
         action.update(
             {
                 "target": "new",
diff --git a/wizard/scop_membership_liasse_wizard.xml b/wizard/scop_membership_liasse_wizard.xml
index 82dedd2bfdc721f509e8abda85d8f71d7a2d0d14..ac3a036c1f6137e9c7ef8c21caf7ae26c5cc491f 100644
--- a/wizard/scop_membership_liasse_wizard.xml
+++ b/wizard/scop_membership_liasse_wizard.xml
@@ -9,7 +9,11 @@
             <field name="model">scop.membership.liasse.wizard</field>
             <field name="arch" type="xml">
                 <form string="Effectifs à l'adhésion">
-                    <h3><field name="partner_id" readonly="1" options="{'no_open': True}" /></h3>
+                    <h3><field
+                            name="partner_id"
+                            readonly="1"
+                            options="{'no_open': True}"
+                        /></h3>
                     <!-- Liasse existante -->
                     <div
                         role="alert"
@@ -21,7 +25,7 @@
                         Si une liasse parmi les liasses déjà présentes vous semble valide pour le calcul des cotisations, vous n'avez pas d'action supplémentaire à effectuer.
                     </div>
                     <group>
-                        <field name="is_financial_data" invisible="1"/>
+                        <field name="is_financial_data" invisible="1" />
                         <group>
                             <field
                                 name="liasse_id"
@@ -65,7 +69,10 @@
                                 widget="monetary"
                             />
                         </group>
-                        <group string="Simulation cotisations" attrs="{'invisible': [('liasse_id', '=', False)]}">
+                        <group
+                            string="Simulation cotisations"
+                            attrs="{'invisible': [('liasse_id', '=', False)]}"
+                        >
                             <field
                                 name="contribution_base_type"
                                 string="Type Assiette"
@@ -77,7 +84,7 @@
                             <field name="contribution_cg" string="Cotisation CG Scop" />
                         </group>
                         <group attrs="{'invisible': [('liasse_id', '=', False)]}">
-                            <field name="is_editable" invisible="1"/>
+                            <field name="is_editable" invisible="1" />
                             <div
                                 class="text-center"
                                 colspan="2"
@@ -135,6 +142,7 @@
                             <button
                                 type="action"
                                 name="%(cgscop_liasse_fiscale.scop_load_liasse_act_window)d"
+                                context="{'membership': True}"
                                 class="btn btn-outline-info btn-lg"
                                 style="width: 250px;"
                             >
@@ -149,6 +157,13 @@
                             string="Sauvegarder"
                             class="oe_highlight"
                         />
+                        <button
+                            type="action"
+                            name="%(cgscop_liasse_fiscale.scop_load_liasse_act_window)d"
+                            class="btn btn-outline-info"
+                        >
+                            Importer une nouvelle liasse
+                        </button>
                         <button special="cancel" string="Annuler" />
                     </footer>
                 </form>
diff --git a/wizard/scop_membership_staff_wizard.py b/wizard/scop_membership_staff_wizard.py
index ae1497e8a54d6da0caeb386e3af73e06f0221644..21c4d4d742444215fd26ff68cc840fc4570babf8 100644
--- a/wizard/scop_membership_staff_wizard.py
+++ b/wizard/scop_membership_staff_wizard.py
@@ -12,17 +12,25 @@ class ScopMembershipStaffWizard(models.TransientModel):
     # Field declaration
     # ------------------------------------------------------
     partner_id = fields.Many2one(comodel_name="res.partner", required=True)
-    staff_id = fields.Many2one(comodel_name="scop.partner.staff", required=True)
-    effective_date = fields.Date(related="staff_id.effective_date", readonly=False)
-    staff_count = fields.Integer(related="staff_id.staff_count", readonly=False)
+    staff_id = fields.Many2one(
+        comodel_name="scop.partner.staff",
+    )
+    effective_date = fields.Date(
+        related="staff_id.effective_date", readonly=False, store=True
+    )
+    staff_count = fields.Integer(
+        related="staff_id.staff_count", readonly=False, store=True
+    )
     staff_shareholder_count = fields.Integer(
-        related="staff_id.staff_shareholder_count", readonly=False
+        related="staff_id.staff_shareholder_count", readonly=False, store=True
     )
     staff_shareholder_total = fields.Integer(
-        related="staff_id.staff_shareholder_total", readonly=False
+        related="staff_id.staff_shareholder_total", readonly=False, store=True
+    )
+    staff_average = fields.Float(
+        related="staff_id.staff_average", readonly=False, store=True
     )
-    staff_average = fields.Float(related="staff_id.staff_average", readonly=False)
-    comment = fields.Char(related="staff_id.comment", readonly=False)
+    comment = fields.Char(related="staff_id.comment", readonly=False, store=True)
 
     # ------------------------------------------------------
     # Actions / Buttons
@@ -31,4 +39,18 @@ class ScopMembershipStaffWizard(models.TransientModel):
         """
         Sauvegarder les données même avec erreurs
         """
-        return {"type": "ir.actions.act_window_close"}
+        if self.staff_id:
+            return {"type": "ir.actions.act_window_close"}
+        else:
+            return self.staff_id.create(
+                {
+                    "partner_id": self.partner_id.id,
+                    "type_entry": "membership",
+                    "effective_date": self.effective_date,
+                    "staff_count": self.staff_count,
+                    "staff_shareholder_count": self.staff_shareholder_count,
+                    "staff_shareholder_total": self.staff_shareholder_total,
+                    "staff_average": self.staff_average,
+                    "comment": self.comment,
+                }
+            )
diff --git a/wizard/scop_membership_staff_wizard.xml b/wizard/scop_membership_staff_wizard.xml
index 865e30ed453122cb61b6b8e8ad13b66a7d940cf5..eb9135db20d63452fb2019bdeb27ecc152cec994 100644
--- a/wizard/scop_membership_staff_wizard.xml
+++ b/wizard/scop_membership_staff_wizard.xml
@@ -9,13 +9,30 @@
             <field name="model">scop.membership.staff.wizard</field>
             <field name="arch" type="xml">
                 <form string="Effectifs à l'adhésion">
-                    <h5><field name="partner_id" readonly="1" string="Coopérative" options="{'no_open': True}" /></h5>
+                    <h5><field
+                            name="partner_id"
+                            readonly="1"
+                            string="Coopérative"
+                            options="{'no_open': True}"
+                        /></h5>
                     <group>
                         <field name="staff_id" readonly="1" invisible="1" />
-                        <field name="effective_date" required="1" string="Date effective de l'information" />
-                        <field name="staff_count" required="1" string="Effectif total" />
+                        <field
+                            name="effective_date"
+                            required="1"
+                            string="Date effective de l'information"
+                        />
+                        <field
+                            name="staff_count"
+                            required="1"
+                            string="Effectif total"
+                        />
                         <field name="staff_shareholder_count" required="1" />
-                        <field name="staff_shareholder_total" required="1" string="Total associés y compris non salariés" />
+                        <field
+                            name="staff_shareholder_total"
+                            required="1"
+                            string="Total associés y compris non salariés"
+                        />
                         <field name="staff_average" required="1" />
                         <field name="comment" />
                     </group>
@@ -32,10 +49,7 @@
             </field>
         </record>
 
-        <record
-            id="scop_membership_staff_wizard_action"
-            model="ir.actions.act_window"
-        >
+        <record id="scop_membership_staff_wizard_action" model="ir.actions.act_window">
             <field name="name">Effectifs à l'adhésion</field>
             <field name="type">ir.actions.act_window</field>
             <field name="res_model">scop.membership.staff.wizard</field>
diff --git a/wizard/scop_membership_submit_wizard.py b/wizard/scop_membership_submit_wizard.py
index 514b6a8498c792aec2b877eeeaddbab8773982ec..b82b9a58836c3b58f20cd7b59af5cbd363fe627b 100644
--- a/wizard/scop_membership_submit_wizard.py
+++ b/wizard/scop_membership_submit_wizard.py
@@ -11,10 +11,14 @@ class ScopMembershipSubmitWizard(models.TransientModel):
     partner_id = fields.Many2one(
         comodel_name="res.partner", string="Coop", required=True
     )
-
     ur_id = fields.Many2one(related="partner_id.ur_id", readonly=False)
+    list_logs = fields.Text("Liste des erreurs", compute="_compute_list_logs")
 
-    list_logs = fields.Text("Liste des erreurs")
+    # ------------------------------------------------------
+    # Compute
+    # ------------------------------------------------------
+    def _compute_list_logs(self):
+        self.list_logs = self.partner_id.liasse_membership_id.check_compulsory_fields_lf()
 
     # ------------------------------------------------------
     # Actions / Buttons
@@ -26,9 +30,3 @@ class ScopMembershipSubmitWizard(models.TransientModel):
         self.partner_id.scop_send_to_cg()
 
         return {"type": "ir.actions.act_window_close"}
-
-    def save_data(self):
-        """
-        Sauvegarder les données même avec erreurs
-        """
-        return {"type": "ir.actions.act_window_close"}
diff --git a/wizard/scop_membership_submit_wizard.xml b/wizard/scop_membership_submit_wizard.xml
index db1cf9b1445079d2463af5a3fe5ecf7f1611eb7e..609401252a395ad593e57ec95d596c3341e579e4 100644
--- a/wizard/scop_membership_submit_wizard.xml
+++ b/wizard/scop_membership_submit_wizard.xml
@@ -32,14 +32,7 @@
                             class="oe_highlight"
                             attrs="{'invisible':[('list_logs', '!=', False)]}"
                         />
-                        <button
-                            name="save_data"
-                            type="object"
-                            string="Sauvegarder"
-                            class="oe_highlight"
-                            attrs="{'invisible':[('list_logs', '=', False)]}"
-                        />
-                        <button special="cancel" string="Annuler" />
+                        <button special="cancel" string="Fermer" />
                     </footer>
                 </form>
             </field>