diff --git a/README.md b/README.md
index 45e0ef9631c3111bf7df6ba65b941ffd1ff78228..50b515de6c57c925cdb19fe2787e133b8960738f 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
-# Financial - Deal Flow
+# Financial - External Contract
 ## Description
 
-Ce module ajoute la gestion du deal flow des outils financiers
+Ce module ajoute la possibilité de créer des contrats pour des partenaires externes.
 
 ## Credits
 
diff --git a/__manifest__.py b/__manifest__.py
index 9169d3c2ebfac6ebb1a0fe21bea90ed4d86998d6..40f00ec5d909315d8bedb2a95c724fa1f542397b 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -1,23 +1,27 @@
 {
     "name": "Financial - Contract",
     "summary": "Gestion des contrats des outils financiers",
-    "author": "Le Filament, Odoo Community Association (OCA)",
+    "author": "Le Filament",
     "website": "https://le-filament.com",
     "version": "16.0.1.0.0",
     "license": "AGPL-3",
     "depends": [
-        "financial_deal_flow",
-        "financial_partner",
+        "contacts",
     ],
     "data": [
         # security
-        # "security/ir.model.access.csv",
+        "security/security_rules.xml",
+        "security/ir.model.access.csv",
         # datas
         # views
-        # "views/financial_contract.xml",
+        "views/financial_contract.xml",
+        "views/financial_external_guarantee.xml",
+        "views/financial_funding.xml",
+        "views/financial_product_template.xml",
+        "views/financial_suspensive_condition.xml",
         "views/res_partner.xml",
         # views menu
-        # "views/menus.xml",
+        "views/menus.xml",
         # wizard
     ],
     "assets": {
diff --git a/models/__init__.py b/models/__init__.py
index e4d34bb4da9ddd771434491978569b2fbac467c7..da59c1d0124ce75869afd443f6ccc77c26c079d7 100644
--- a/models/__init__.py
+++ b/models/__init__.py
@@ -1,4 +1,10 @@
+from . import financial_contract_mixin
 from . import financial_contract
-from . import financial_deal
+from . import financial_contract_suspensive_condition
+from . import financial_external_guarantee
+from . import financial_funding
+from . import financial_product_suspensive_condition
+from . import financial_product_template
+from . import financial_suspensive_condition
 from . import res_company
 from . import res_partner
diff --git a/models/financial_contract.py b/models/financial_contract.py
index cd398df363ab4ce895caee2409bd0d73ffd2cbac..435e0682c5eab04f83e52361911d65573ae419f7 100644
--- a/models/financial_contract.py
+++ b/models/financial_contract.py
@@ -1,16 +1,99 @@
-# © 2019 Le Filament (<http://www.le-filament.com>)
+# © 2024 Le Filament (<http://www.le-filament.com>)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
-from odoo import models
+from odoo import _, api, fields, models
+from odoo.exceptions import AccessError, UserError
 
 
 class FinancialContract(models.Model):
-    _inherit = "financial.contract"
+    _name = "financial.contract"
+    _description = "Financial Contract"
+    _inherit = ["financial.contract.mixin"]
+    _order = "create_date desc"
+
+    tool = fields.Selection(
+        [],
+        string="Outil",
+        required=True,
+    )
+    tool_id = fields.Many2oneReference("ID Outil", model_field="tool", required=True,)
+    state = fields.Selection(
+        [
+            ("init", "Initialisation"),
+            ("offer", "Offre"),
+            ("proposal", "Proposition"),
+            ("contract", "Signé"),
+            ("done", "Terminé"),
+            ("cancel", "Annulé"),
+        ],
+        string="Statut",
+        tracking=1,
+        default="init",
+    )
+
+    # ------------------------------------------------------
+    # Constrains
+    # ------------------------------------------------------
+    @api.constrains("state", "company_id")
+    def _check_user_company(self):
+        for contract in self:
+            if contract.state in ["proposal", "contract", "done", "cancel"]:
+                if contract.company_id not in self.env.user.company_ids:
+                    raise AccessError(_(
+                        "vous n'êtes pas autorisé à modifier ce contrat"
+                    ))
 
     # ------------------------------------------------------
     # Computed fields / Search Fields
     # ------------------------------------------------------
+    @api.depends("tool", "tool_id")
+    def _compute_contract_fields(self):
+        for contract in self:
+            contract_id = contract._get_tool_object()
+            if contract_id:
+                contract.company_id = contract_id.company_id
+                contract.product_id = contract_id.product_id
+                contract.amount = contract_id.amount
+
+    @api.depends("product_id")
+    def _compute_suspensive_condition_ids(self):
+        for contract in self:
+            # contract.suspensive_condition_ids.unlink()
+            condition_to_create = [(5, 0, 0)]
+            if contract.product_id:
+                for condition in self.product_id.suspensive_condition_ids:
+                    condition_to_create.append(
+                        (
+                            0,
+                            None,
+                            {
+                                "condition_id": condition.id,
+                                "condition_comment": condition.condition_comment,
+                            },
+                        )
+                    )
+                if condition_to_create:
+                    contract.update({"suspensive_condition_ids": condition_to_create})
+
+    # ------------------------------------------------------
+    # Onchange
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Actions
+    # ------------------------------------------------------
 
     # ------------------------------------------------------
     # CRUD (Override ORM)
     # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Override ORM
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Business functions
+    # ------------------------------------------------------
+    def _get_tool_object(self):
+        self.ensure_one()
+        return self.env[self.tool].browse(self.tool_id) if self.tool else False
diff --git a/models/financial_contract_mixin.py b/models/financial_contract_mixin.py
new file mode 100644
index 0000000000000000000000000000000000000000..4349bb324a0b8478d54490490bcb778242faf0a2
--- /dev/null
+++ b/models/financial_contract_mixin.py
@@ -0,0 +1,148 @@
+# © 2024 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import _, api, fields, models
+from odoo.exceptions import AccessError, UserError
+
+
+class FinancialContractMixin(models.AbstractModel):
+    _name = "financial.contract.mixin"
+    _inherit = ["mail.thread", "mail.activity.mixin"]
+    _description = "Financial Contract Mixin"
+
+    name = fields.Char(compute="_compute_name")
+    number = fields.Char("Numéro", readonly=True)
+    partner_id = fields.Many2one(
+        comodel_name="res.partner",
+        string="Client",
+        required=True,
+    )
+    product_id = fields.Many2one(
+        comodel_name="financial.product.template",
+        string="Gamme",
+    )
+    active = fields.Boolean(
+        default=True,
+        tracking=1,
+    )
+    amount = fields.Monetary("Montant")
+    company_id = fields.Many2one(
+        comodel_name="res.company",
+        string="Société",
+        default=lambda self: self.env.company,
+    )
+    currency_id = fields.Many2one(
+        comodel_name="res.currency", compute="_compute_currency_id"
+    )
+    suspensive_condition_ids = fields.One2many(
+        comodel_name="financial.contract.suspensive.condition",
+        inverse_name="contract_id",
+        string="Conditions suspensives",
+        compute="_compute_suspensive_condition_ids",
+        store=True,
+        readonly=False,
+    )
+    comment = fields.Text("Commentaire")
+    expiration_date = fields.Date("Date d'expiration")
+
+    guarantee_id = fields.Many2one(
+        comodel_name="financial.external.guarantee",
+        string="Garantie",
+        ondelete="restrict",
+    )
+    funding_id = fields.Many2one(
+        comodel_name="financial.funding",
+        string="Fonds financeur",
+        ondelete="restrict",
+    )
+
+    # ------------------------------------------------------
+    # Constrains
+    # ------------------------------------------------------
+    @api.constrains("state", "company_id")
+    def _check_user_company(self):
+        for contract in self:
+            if contract.state in ["proposal", "contract", "done", "cancel"]:
+                if contract.company_id not in self.env.user.company_ids:
+                    raise AccessError(_(
+                        "vous n'êtes pas autorisé à modifier ce contrat"
+                    ))
+
+    # ------------------------------------------------------
+    # Computed fields / Search Fields
+    # ------------------------------------------------------
+    def _compute_currency_id(self):
+        for contract in self:
+            contract.currency_id = self.env.company.currency_id
+
+    def _compute_name(self):
+        for contract in self:
+            contract.name = (
+                f"{contract.number or '#'} - "
+                f"{contract.partner_id.name} "
+            )
+
+    @api.depends("product_id")
+    def _compute_suspensive_condition_ids(self):
+        for contract in self:
+            # contract.suspensive_condition_ids.unlink()
+            condition_to_create = [(5, 0, 0)]
+            if contract.product_id:
+                for condition in self.product_id.suspensive_condition_ids:
+                    condition_to_create.append(
+                        (
+                            0,
+                            None,
+                            {
+                                "condition_id": condition.id,
+                                "condition_comment": condition.condition_comment,
+                            },
+                        )
+                    )
+                if condition_to_create:
+                    contract.update({"suspensive_condition_ids": condition_to_create})
+
+    # ------------------------------------------------------
+    # Onchange
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Actions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # CRUD (Override ORM)
+    # ------------------------------------------------------
+    @api.model_create_multi
+    def create(self, vals):
+        tools = super().write(vals)
+        for tool in tools:
+            contract = self.env["financial.contract"].create({
+                "tool": self._name,
+                "tool_id": tool.id,
+            })
+            tool.contract_id = contract.id
+        return tools
+
+    def unlink(self):
+        """
+        Restrict contract deletion depending on state
+        """
+        for contract in self:
+            if contract.state != "init":
+                raise UserError(
+                    _("Seuls les deals à l'état Projet peuvent être supprimés")
+                )
+        return super().unlink()
+
+    # ------------------------------------------------------
+    # Override ORM
+    # ------------------------------------------------------
+    def unlink(self):
+        if self.contract_id:
+            self.contract_id.unlink()
+        return super().unlink()
+
+    # ------------------------------------------------------
+    # Business functions
+    # ------------------------------------------------------
diff --git a/models/financial_contract_suspensive_condition.py b/models/financial_contract_suspensive_condition.py
new file mode 100644
index 0000000000000000000000000000000000000000..aef984e5034e3b772367c56a21fbfa62e5531b1a
--- /dev/null
+++ b/models/financial_contract_suspensive_condition.py
@@ -0,0 +1,41 @@
+# © 2019 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import fields, models
+
+
+class FinancialContractSuspensiveCondition(models.Model):
+    _name = "financial.contract.suspensive.condition"
+    _description = "Financial contract suspensive condition"
+
+    condition_id = fields.Many2one(
+        comodel_name="financial.suspensive.condition",
+        string="Condition suspensive",
+        required=True,
+        ondelete="cascade",
+    )
+    contract_id = fields.Many2one(
+        comodel_name="financial.contract",
+        string="Contrat",
+        required=True,
+        ondelete="cascade",
+    )
+    condition_comment = fields.Char("Précision condition")
+    comment = fields.Char("Commentaire")
+    date_done = fields.Date("Date de levée")
+
+    # ------------------------------------------------------
+    # Constrains functions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Computed fields / Search Fields
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Actions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # CRUD (Override ORM)
+    # ------------------------------------------------------
diff --git a/models/financial_deal.py b/models/financial_deal.py
deleted file mode 100644
index b728c2610729eab499294f5359477b010c6eb1c5..0000000000000000000000000000000000000000
--- a/models/financial_deal.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# © 2019 Le Filament (<http://www.le-filament.com>)
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
-from odoo import _, models
-from odoo.exceptions import UserError
-
-
-class FinancialDeal(models.Model):
-    _inherit = "financial.deal"
-
-    # ------------------------------------------------------
-    # Computed fields / Search Fields
-    # ------------------------------------------------------
-
-    # ------------------------------------------------------
-    # Inherit parent
-    # ------------------------------------------------------
-    def action_stage_validated(self):
-        res = super().action_stage_validated()
-
-        for contract in self.coop_contract_ids:
-            if not contract.company_id.contract_sequence_id:
-                raise UserError(
-                    _(
-                        f"Aucune séquence configurée pour les contrats de "
-                        f"la société {contract.company_id.name}"
-                    )
-                )
-            if not contract.number:
-                contract.number = contract.company_id.contract_sequence_id.next_by_id()
-        return res
-
-    # ------------------------------------------------------
-    # CRUD (Override ORM)
-    # ------------------------------------------------------
diff --git a/models/financial_external_guarantee.py b/models/financial_external_guarantee.py
new file mode 100644
index 0000000000000000000000000000000000000000..af773eaec9752fab91777bbd2ea38ebbb27decbe
--- /dev/null
+++ b/models/financial_external_guarantee.py
@@ -0,0 +1,30 @@
+# © 2024 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import fields, models
+
+
+class FinancialExternalGuarantee(models.Model):
+    _name = "financial.external.guarantee"
+    _description = "Financial Funding"
+
+    name = fields.Char("Nom", required=True)
+    active = fields.Boolean(
+        default=True,
+    )
+
+    # ------------------------------------------------------
+    # Constrains functions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Computed fields / Search Fields
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Actions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # CRUD (Override ORM)
+    # ------------------------------------------------------
diff --git a/models/financial_funding.py b/models/financial_funding.py
new file mode 100644
index 0000000000000000000000000000000000000000..626a778381f0fca3aae4a5cf4c7976d7bfbee5f8
--- /dev/null
+++ b/models/financial_funding.py
@@ -0,0 +1,30 @@
+# © 2019 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import fields, models
+
+
+class FinancialFunding(models.Model):
+    _name = "financial.funding"
+    _description = "Financial Funding"
+
+    name = fields.Char(required=True)
+    active = fields.Boolean(
+        default=True,
+    )
+
+    # ------------------------------------------------------
+    # Constrains functions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Computed fields / Search Fields
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Actions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # CRUD (Override ORM)
+    # ------------------------------------------------------
diff --git a/models/financial_product_suspensive_condition.py b/models/financial_product_suspensive_condition.py
new file mode 100644
index 0000000000000000000000000000000000000000..8bb32bb7965424d5dd2f5d10d474e519a2cdac19
--- /dev/null
+++ b/models/financial_product_suspensive_condition.py
@@ -0,0 +1,39 @@
+# © 2019 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import fields, models
+
+
+class FinancialProductSuspensiveCondition(models.Model):
+    _name = "financial.product.suspensive.condition"
+    _description = "Financial product suspensive condition"
+
+    condition_id = fields.Many2one(
+        comodel_name="financial.suspensive.condition",
+        string="Condition suspensive",
+        required=True,
+        ondelete="cascade",
+    )
+    product_id = fields.Many2one(
+        comodel_name="financial.product.template",
+        string="Contrat",
+        required=True,
+        ondelete="cascade",
+    )
+    condition_comment = fields.Char("Précision condition")
+
+    # ------------------------------------------------------
+    # Constrains functions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Computed fields / Search Fields
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Actions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # CRUD (Override ORM)
+    # ------------------------------------------------------
diff --git a/models/financial_product_template.py b/models/financial_product_template.py
new file mode 100644
index 0000000000000000000000000000000000000000..8e7e7f76edeca3c44cf157905cc5aa8d141a0180
--- /dev/null
+++ b/models/financial_product_template.py
@@ -0,0 +1,80 @@
+# © 2024 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import _, api, fields, models
+from odoo.exceptions import UserError
+
+
+class FinancialProductTemplate(models.Model):
+    _name = "financial.product.template"
+    _inherit = ["mail.thread", "mail.activity.mixin",]
+    _description = "Financial product template"
+
+    name = fields.Char(required=True)
+    active = fields.Boolean(
+        default=True,
+        tracking=1,
+    )
+    tool = fields.Selection(
+        [],
+        string="Type d'outil",
+        required=True,
+    )
+    tool_id = fields.Many2oneReference("ID Outil", model_field="tool", required=True,)
+    description = fields.Text()
+    suspensive_condition_ids = fields.One2many(
+        comodel_name="financial.product.suspensive.condition",
+        inverse_name="product_id",
+        string="Conditions suspensives",
+    )
+    company_id = fields.Many2one(
+        comodel_name="res.company",
+        string="Société",
+        change_default=True,
+        required=True,
+        readonly=True,
+        default=lambda self: self.env.company,
+    )
+    currency_id = fields.Many2one(
+        comodel_name="res.currency", related="company_id.currency_id"
+    )
+
+    # ------------------------------------------------------
+    # Constrains functions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Computed fields / Search Fields
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Actions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Override ORM
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # CRUD (Override ORM)
+    # ------------------------------------------------------
+    def unlink(self):
+        """
+        Restrict product deletion if used in
+        """
+        for product in self:
+            contract_ids = self.env["financial.contract"].search(
+                [("product_id", "=", product.id)]
+            )
+            if contract_ids:
+                raise UserError(
+                    _(
+                        "Ce produit est utilisé dans un ou plusieurs dossiers, il n'est "
+                        "pas possible de le supprimer. Il peut être archivé."
+                    )
+                )
+        return super().unlink()
+
+    # ------------------------------------------------------
+    # Business functions
+    # ------------------------------------------------------
diff --git a/models/financial_suspensive_condition.py b/models/financial_suspensive_condition.py
new file mode 100644
index 0000000000000000000000000000000000000000..4d8938da80d7dad755ef21d26247203ebfda68d9
--- /dev/null
+++ b/models/financial_suspensive_condition.py
@@ -0,0 +1,30 @@
+# © 2019 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import fields, models
+
+
+class FinancialSuspensiveCondition(models.Model):
+    _name = "financial.suspensive.condition"
+    _description = "Financial suspensive condition"
+
+    name = fields.Char(required=True)
+    active = fields.Boolean(
+        default=True,
+    )
+
+    # ------------------------------------------------------
+    # Constrains functions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Computed fields / Search Fields
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Actions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # CRUD (Override ORM)
+    # ------------------------------------------------------
diff --git a/models/res_company.py b/models/res_company.py
index cc206802dc1b719910116eac21e8c44335e5f46f..ddd669ab0d6d103b8eab30e44bdde145ffb95cd1 100644
--- a/models/res_company.py
+++ b/models/res_company.py
@@ -39,7 +39,7 @@ class ResCompany(models.Model):
 
         res.contract_sequence_id = self.env["ir.sequence"].create(
             {
-                "name": f"Contrats - {res.name}",
+                "name": f"Contrats Financiers - {res.name}",
                 "company_id": res.id,
                 "number_next": 1,
                 "number_increment": 1,
diff --git a/models/res_partner.py b/models/res_partner.py
index 181200505cf92a7f04dbc631837c6c2953631224..f1dce52cef536ece85e2a960bdf4cd37b1f4413f 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -52,7 +52,7 @@ class ResPartner(models.Model):
             "name": "Contrats",
             "res_model": "financial.contract",
             "view_mode": "tree,form",
-            "domain": [("deal_type", "=", "external"), ("partner_id", "=", self.id)],
+            "domain": [("partner_id", "=", self.id)],
             "flags": {"mode": "readonly"},
         }
 
diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv
index 97dd8b917b8a258799a3ebf0095f13ff73d7cf68..865ccf0306db6237c0f248cc41a7bc54b5b664e1 100644
--- a/security/ir.model.access.csv
+++ b/security/ir.model.access.csv
@@ -1 +1,13 @@
 id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_financial_contract,access_financial_contract,model_financial_contract,group_financial_user,1,1,1,1
+access_financial_contract_suspensive_condition,access_financial_contract_suspensive_condition,model_financial_contract_suspensive_condition,group_financial_user,1,1,1,1
+access_financial_product_template,access_financial_product_template,model_financial_product_template,group_financial_user,1,0,0,0
+access_financial_product_template_admin,access_financial_product_template_admin,model_financial_product_template,group_financial_admin,1,1,1,1
+access_financial_product_suspensive_condition,access_financial_product_suspensive_condition,model_financial_product_suspensive_condition,group_financial_user,1,0,0,0
+access_financial_product_suspensive_condition_admin,access_financial_product_suspensive_condition_admin,model_financial_product_suspensive_condition,group_financial_admin,1,1,1,1
+access_financial_suspensive_condition,access_financial_suspensive_condition,model_financial_suspensive_condition,group_financial_user,1,0,0,0
+access_financial_suspensive_condition_admin,access_financial_suspensive_condition_admin,model_financial_suspensive_condition,group_financial_admin,1,1,1,1
+access_financial_external_guarantee,access_financial_external_guarantee,model_financial_external_guarantee,group_financial_user,1,0,0,0
+access_financial_external_guarantee_admin,access_financial_external_guarantee_admin,model_financial_external_guarantee,group_financial_admin,1,1,1,1
+access_financial_funding,access_financial_funding,model_financial_funding,group_financial_user,1,0,0,0
+access_financial_funding_admin,access_financial_funding_admin,model_financial_funding,group_financial_admin,1,1,1,1
diff --git a/security/security_rules.xml b/security/security_rules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e53a19aab842a087ed6844ed2fee133252dcb8d4
--- /dev/null
+++ b/security/security_rules.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" ?>
+<odoo>
+    <!--
+        Category
+    -->
+    <record id="module_financial_contract" model="ir.module.category">
+        <field name="name">Contrats financiers</field>
+        <field name="sequence">10</field>
+    </record>
+
+    <!--
+        Group user
+    -->
+    <record id="group_financial_user" model="res.groups">
+        <field name="name">Utilisateur</field>
+        <field name="implied_ids" eval="[(4, ref('base.group_user'))]" />
+        <field name="category_id" ref="module_financial_contract" />
+    </record>
+    <record id="group_financial_admin" model="res.groups">
+        <field name="name">Administrateur</field>
+        <field name="implied_ids" eval="[(4, ref('group_financial_user'))]" />
+        <field name="category_id" ref="module_financial_contract" />
+        <field name="users" eval="[(4, ref('base.user_root'))]" />
+    </record>
+
+    <!--
+        Group rules
+    -->
+    <record id="financial_contract_multi_company_rule" model="ir.rule">
+        <field name="name">Financial Contract Multi Company</field>
+        <field name="model_id" ref="model_financial_contract" />
+        <field
+            name="domain_force"
+        >[('company_id', 'in', company_ids + [False])]</field>
+        <field
+            name="groups"
+            eval="[(6, 0, [ref('financial_contract.group_financial_user')])]"
+        />
+        <field name="perm_read" eval="False" />
+        <field name="perm_write" eval="True" />
+        <field name="perm_create" eval="True" />
+        <field name="perm_unlink" eval="True" />
+    </record>
+
+</odoo>
diff --git a/views/financial_contract.xml b/views/financial_contract.xml
index 615ba114702166b8c60187b86c23a78bd6380220..427a35f063543c89303a0159375de14c4368e602 100644
--- a/views/financial_contract.xml
+++ b/views/financial_contract.xml
@@ -1,152 +1,52 @@
 <?xml version="1.0" ?>
 <odoo>
-    <!--
-        Tree
-     -->
-    <!-- Tree Internal -->
-    <record id="financial_contract_all_tree_view" model="ir.ui.view">
-        <field name="name">financial.contract.all.tree</field>
+    <!-- Tree -->
+    <record id="financial_contract_tree_view" model="ir.ui.view">
+        <field name="name">financial.contract.tree</field>
         <field name="model">financial.contract</field>
         <field name="arch" type="xml">
             <tree>
                 <field name="partner_id" />
-                <field name="type" />
+                <field name="tool" />
                 <field name="product_id" />
                 <field name="amount" string="Montant" />
                 <field name="company_id" />
-                <button
-                    name="show_amortization"
-                    type="object"
-                    icon="fa-calculator"
-                    class="btn-outline-primary"
-                    title="Tableau d'amortissement"
-                    attrs="{'invisible': [('type', '!=', 'loan')]}"
-                />
-                <field name="currency_id" invisible="1" />
-            </tree>
-        </field>
-    </record>
-    <!-- Tree Loan -->
-    <record id="financial_contract_loan_tree_view" model="ir.ui.view">
-        <field name="name">financial.contract.loan.tree</field>
-        <field name="model">financial.contract</field>
-        <field name="arch" type="xml">
-            <tree>
                 <field name="currency_id" invisible="1" />
-                <field name="type" invisible="1" />
-                <field name="partner_id" />
-                <field name="product_id" />
-                <field name="state" />
-                <field name="expiration_date" />
-                <field name="amount" string="Montant" />
-                <field name="rate" />
-                <field name="duration" />
-                <field name="periodicity" />
-                <field name="delay_type" />
-                <field name="delay_duration" />
-                <field name="payment_date" />
-                <field name="first_term_date" />
-                <field name="company_id" />
-                <button
-                    name="show_amortization"
-                    type="object"
-                    icon="fa-calculator"
-                    class="btn-outline-primary"
-                    title="Tableau d'amortissement"
-                    attrs="{'invisible': [('type', '!=', 'loan')]}"
-                />
             </tree>
         </field>
     </record>
-    <!-- Tree Invest -->
-    <record id="financial_contract_invest_tree_view" model="ir.ui.view">
-        <field name="name">financial.contract.invest.tree</field>
+    <!-- From -->
+    <record id="financial_contract_form_view" model="ir.ui.view">
+        <field name="name">financial.contract.form</field>
         <field name="model">financial.contract</field>
         <field name="arch" type="xml">
-            <tree>
-                <field name="currency_id" invisible="1" />
-                <field name="type" invisible="1" />
-                <field name="partner_id" />
-                <field name="product_id" />
-                <field name="state" />
-                <field name="expiration_date" />
-                <field name="amount" string="Montant" />
-                <field name="securities_number" />
-                <field name="nominal" />
-                <field name="fixed_rate" />
-                <field name="performance_indicator" />
-                <field name="performance_month" />
-                <field name="issue_date" />
-                <field name="payment_date" />
-                <field name="company_id" />
-                <button
-                    name="show_amortization"
-                    type="object"
-                    icon="fa-calculator"
-                    class="btn-outline-primary"
-                    title="Tableau d'amortissement"
-                    attrs="{'invisible': [('type', '!=', 'loan')]}"
-                />
-            </tree>
+            <form>
+                <sheet>
+                    <group>
+                        <group>
+                            <field name="partner_id" />
+                            <field name="tool" />
+                            <field name="product_id" />
+                        </group>
+                        <group>
+                            <field name="amount" string="Montant" />
+                            <field name="company_id" />
+                            <field name="currency_id" invisible="1" />
+                        </group>
+                    </group>
+                    <separator string="Description" />
+                    <field name="comment" />
+                    <separator string="Conditions suspensives" />
+                    <field name="suspensive_condition_ids" />
+                </sheet>
+                <div class="oe_chatter">
+                    <field name="message_follower_ids" />
+                    <field name="activity_ids" />
+                    <field name="message_ids" />
+                </div>
+            </form>
         </field>
     </record>
-    <!-- Tree Guarantee -->
-    <record id="financial_contract_guarantee_tree_view" model="ir.ui.view">
-        <field name="name">financial.contract.guarantee.tree</field>
-        <field name="model">financial.contract</field>
-        <field name="arch" type="xml">
-            <tree>
-                <field name="currency_id" invisible="1" />
-                <field name="type" invisible="1" />
-                <field name="partner_id" />
-                <field name="product_id" />
-                <field name="state" />
-                <field name="expiration_date" />
-                <field name="amount" string="Montant" />
-                <field name="external_loan_id" />
-                <field name="fmg_amount" />
-                <field name="social_share_amount" />
-                <field name="guarantee_rate" />
-                <field name="is_counter_guarantee" />
-                <field name="loan_balance" />
-                <field name="guarantee_balance" />
-                <field name="final_risk_guarantee" />
-                <field name="payment_date" />
-                <field name="company_id" />
-                <button
-                    name="show_amortization"
-                    type="object"
-                    icon="fa-calculator"
-                    class="btn-outline-primary"
-                    title="Tableau d'amortissement"
-                    attrs="{'invisible': [('type', '!=', 'loan')]}"
-                />
-            </tree>
-        </field>
-    </record>
-    <!-- Tree Partner -->
-    <record id="financial_contract_partner_tree_view" model="ir.ui.view">
-        <field name="name">financial.contract.partner.tree</field>
-        <field name="model">financial.contract</field>
-        <field name="arch" type="xml">
-            <tree>
-                <field name="partner_id" />
-                <field name="deal_partner_id" />
-                <field name="type" />
-                <field name="amount" string="Montant" />
-                <field name="currency_id" invisible="1" />
-                <button
-                    name="show_amortization"
-                    type="object"
-                    icon="fa-calculator"
-                    class="btn-outline-primary"
-                    title="Tableau d'amortissement"
-                    attrs="{'invisible': [('type', '!=', 'loan')]}"
-                />
-            </tree>
-        </field>
-    </record>
-
     <!-- Search -->
     <record id="financial_contract_search_view" model="ir.ui.view">
        <field name="name">financial.contract.search</field>
@@ -156,21 +56,6 @@
                 <field name="name" />
                 <!-- Filter -->
                 <filter name="expiration_date" date="expiration_date" />
-                <filter
-                    string="Prêt"
-                    name="loan"
-                    domain="[('type', '=', 'loan')]"
-                />
-                <filter
-                    string="Investissement"
-                    name="invest"
-                    domain="[('type', '=', 'invest')]"
-                />
-                <filter
-                    string="Garantie"
-                    name="guarantee"
-                    domain="[('type', '=', 'guarantee')]"
-                />
                 <separator />
                 <filter
                     string="Proposition"
@@ -212,87 +97,20 @@
                     />
                     <filter
                         string="Type d'outil"
-                        name="group_type"
-                        context="{'group_by':'type'}"
+                        name="group_toll"
+                        context="{'group_by':'tool'}"
                     />
                 </group>
             </search>
         </field>
     </record>
-
     <!--
         Actions
      -->
     <!-- All -->
-    <record model="ir.actions.act_window" id="financial_contract_all_action">
+    <record model="ir.actions.act_window" id="financial_contract_action">
         <field name="name">Tous les contrats</field>
         <field name="res_model">financial.contract</field>
         <field name="view_mode">tree,form</field>
-<!--        <field name="domain">[('deal_type', '=', 'internal'), ('state', 'in', ['proposal', 'contract', 'done', 'cancel'])]</field>-->
-        <field name="domain">[('deal_type', '=', 'internal')]</field>
-    </record>
-    <!-- Loan -->
-    <record model="ir.actions.act_window" id="financial_contract_loan_action">
-        <field name="name">Prêts</field>
-        <field name="res_model">financial.contract</field>
-        <field name="view_mode">tree,form</field>
-        <field
-            name="view_ids"
-            eval="[(5, 0, 0),
-                  (0, 0, {'view_mode': 'tree', 'view_id': ref('financial_contract_loan_tree_view')}),
-                  ]"
-        />
-        <field
-            name="domain"
-        >[('deal_type', '=', 'internal'), ('type', '=', 'loan'), ('state', 'in', ['proposal', 'contract', 'done', 'cancel'])]</field>
-    </record>
-    <!-- Invest -->
-    <record model="ir.actions.act_window" id="financial_contract_invest_action">
-        <field name="name">Titres participatifs</field>
-        <field name="res_model">financial.contract</field>
-        <field name="view_mode">tree,form</field>
-        <field
-            name="view_ids"
-            eval="[(5, 0, 0),
-                  (0, 0, {'view_mode': 'tree', 'view_id': ref('financial_contract_invest_tree_view')}),
-                  ]"
-        />
-        <field
-            name="domain"
-        >[('deal_type', '=', 'internal'), ('type', '=', 'invest'), ('state', 'in', ['proposal', 'contract', 'done', 'cancel'])]</field>
-    </record>
-    <!-- Guarantee -->
-    <record
-        model="ir.actions.act_window"
-        id="financial_contract_guarantee_action"
-    >
-        <field name="name">Guaranties</field>
-        <field name="res_model">financial.contract</field>
-        <field name="view_mode">tree,form</field>
-        <field
-            name="view_ids"
-            eval="[(5, 0, 0),
-                  (0, 0, {'view_mode': 'tree', 'view_id': ref('financial_contract_guarantee_tree_view')}),
-                  ]"
-        />
-        <field
-            name="domain"
-        >[('deal_type', '=', 'internal'), ('type', '=', 'guarantee'), ('state', 'in', ['proposal', 'contract', 'done', 'cancel'])]</field>
-    </record>
-    <!-- External -->
-    <record
-        model="ir.actions.act_window"
-        id="financial_contract_external_action"
-    >
-        <field name="name">Contrats partenaires</field>
-        <field name="res_model">financial.contract</field>
-        <field name="view_mode">tree,form</field>
-        <field
-            name="view_ids"
-            eval="[(5, 0, 0),
-                  (0, 0, {'view_mode': 'tree', 'view_id': ref('financial_contract_partner_tree_view')}),
-                  ]"
-        />
-        <field name="domain">[('deal_type', '=', 'external')]</field>
     </record>
 </odoo>
diff --git a/views/financial_external_guarantee.xml b/views/financial_external_guarantee.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1e6e22a2c7ab2c599831079779a79263a1536b77
--- /dev/null
+++ b/views/financial_external_guarantee.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" ?>
+<!-- Copyright 2024 Le Filament
+     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
+<odoo>
+    <!-- Tree -->
+    <record model="ir.ui.view" id="financial_external_guarantee_tree_view">
+        <field name="name">financial.external.guarantee.tree</field>
+        <field name="model">financial.external.guarantee</field>
+        <field name="arch" type="xml">
+            <tree editable="top">
+                <field name="name" />
+                <field name="active" invisible="1" />
+            </tree>
+        </field>
+    </record>
+
+    <!-- Action -->
+    <record
+        model="ir.actions.act_window"
+        id="financial_external_guarantee_act_window"
+    >
+        <field name="name">Garantie</field>
+        <field name="res_model">financial.external.guarantee</field>
+        <field name="view_mode">tree</field>
+    </record>
+</odoo>
diff --git a/views/financial_funding.xml b/views/financial_funding.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b28be3d18f756227de7ba0941ea474d694de3384
--- /dev/null
+++ b/views/financial_funding.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" ?>
+<!-- Copyright 2024 Le Filament
+     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
+<odoo>
+    <!-- Tree -->
+    <record model="ir.ui.view" id="financial_funding_tree_view">
+        <field name="name">financial.funding.tree</field>
+        <field name="model">financial.funding</field>
+        <field name="arch" type="xml">
+            <tree editable="top">
+                <field name="name" />
+                <field name="active" invisible="1" />
+            </tree>
+        </field>
+    </record>
+
+    <!-- Action -->
+    <record model="ir.actions.act_window" id="financial_funding_act_window">
+        <field name="name">Fonds financeur</field>
+        <field name="res_model">financial.funding</field>
+        <field name="view_mode">tree</field>
+    </record>
+</odoo>
diff --git a/views/financial_product_template.xml b/views/financial_product_template.xml
new file mode 100644
index 0000000000000000000000000000000000000000..df38fddc8ef1f9f2cde90c533c97d81b101e1d02
--- /dev/null
+++ b/views/financial_product_template.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+<!-- Tree -->
+    <record id="financial_product_template_tree_view" model="ir.ui.view">
+        <field name="name">financial.product.template.tree</field>
+        <field name="model">financial.product.template</field>
+        <field name="arch" type="xml">
+            <tree>
+                <field name="name" />
+                <field name="tool" />
+                <field
+                    name="company_id"
+                    options="{'no_create': 1, 'no_edit': 1}"
+                />
+                <field name="currency_id" invisible="1" />
+            </tree>
+        </field>
+    </record>
+
+    <!-- Form -->
+    <record id="financial_product_template_form_view" model="ir.ui.view">
+        <field name="name">financial.product.template.form</field>
+        <field name="model">financial.product.template</field>
+        <field name="arch" type="xml">
+            <form>
+                <sheet>
+                    <field name="active" invisible="1" />
+                    <widget
+                        name="web_ribbon"
+                        title="Archived"
+                        bg_color="bg-danger"
+                        attrs="{'invisible': [('active', '=', True)]}"
+                    />
+                    <!-- Title -->
+                    <div class="oe_title">
+                        <label for="name" string="Nom" />
+                        <h1>
+                            <field
+                                name="name"
+                                default_focus="1"
+                                placeholder="Nom de la gamme"
+                            />
+                        </h1>
+                    </div>
+                    <!-- Product Type -->
+                    <group>
+                        <group>
+                            <field name="tool" widget="radio" />
+                        </group>
+                        <group>
+                            <field
+                                name="company_id"
+                                options="{'no_create': 1, 'no_edit': 1}"
+                                groups="base.group_multi_company"
+                            />
+                            <field name="company_id" invisible="1" />
+                        </group>
+                    </group>
+                    <notebook>
+                        <page string="Description" name="description">
+                            <field name="description" />
+                        </page>
+                        <page
+                            string="Conditions suspensives"
+                            name="suspensive_condition"
+                        >
+                            <field
+                                name="suspensive_condition_ids"
+                                context="{'default_product_id': active_id}"
+                            >
+                                <tree editable="top">
+                                    <field name="product_id" invisible="1" />
+                                    <field
+                                        name="condition_id"
+                                        options="{'no_create': 1, 'no_edit': 1}"
+                                    />
+                                    <field name="condition_comment" />
+                                </tree>
+                            </field>
+                        </page>
+                    </notebook>
+                </sheet>
+                <div class="oe_chatter">
+                    <field name="message_follower_ids" />
+                    <field name="activity_ids" />
+                    <field name="message_ids" />
+                </div>
+            </form>
+        </field>
+    </record>
+
+    <!-- Action -->
+    <record
+        model="ir.actions.act_window"
+        id="financial_product_template_act_window"
+    >
+        <field name="name">Catalogue</field>
+        <field name="res_model">financial.product.template</field>
+        <field name="view_mode">tree,form</field>
+    </record>
+
+</odoo>
diff --git a/views/financial_suspensive_condition.xml b/views/financial_suspensive_condition.xml
new file mode 100644
index 0000000000000000000000000000000000000000..85af4e4d30924b886f212811562c86c5e0c9c3dc
--- /dev/null
+++ b/views/financial_suspensive_condition.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" ?>
+<!-- Copyright 2024 Le Filament
+     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
+<odoo>
+    <!-- Tree -->
+    <record model="ir.ui.view" id="financial_suspensive_condition_tree_view">
+        <field name="name">financial.suspensive.condition.tree</field>
+        <field name="model">financial.suspensive.condition</field>
+        <field name="arch" type="xml">
+            <tree editable="top">
+                <field name="name" />
+                <field name="active" invisible="1" />
+            </tree>
+        </field>
+    </record>
+
+    <!-- Action -->
+    <record
+        model="ir.actions.act_window"
+        id="financial_suspensive_condition_act_window"
+    >
+        <field name="name">Conditions suspensives</field>
+        <field name="res_model">financial.suspensive.condition</field>
+        <field name="view_mode">tree</field>
+    </record>
+</odoo>
diff --git a/views/menus.xml b/views/menus.xml
index 54c4fd78310ef0d4ce77d97e34c1572df8e6c2c9..08209bb4e03b4f3f63823910f6a0b06aaaea671e 100644
--- a/views/menus.xml
+++ b/views/menus.xml
@@ -13,43 +13,46 @@
         id="menu_financial_contract_all"
         name="Tous les contrats"
         parent="financial_contract_menu_root"
-        action="financial_contract_all_action"
+        action="financial_contract_action"
         sequence="10"
     />
     <menuitem
-        id="menu_financial_contract_loan"
-        name="Prêts participatifs"
+        id="menu_financial_product_template"
+        name="Catalogue"
         parent="financial_contract_menu_root"
-        action="financial_contract_loan_action"
-        sequence="20"
+        action="financial_product_template_act_window"
+        sequence="100"
     />
+
+    <!-- Configuration -->
     <menuitem
-        id="menu_financial_contract_invest"
-        name="Titres participatifs"
+        id="menu_financial_contract_configuration"
+        name="Configuration"
         parent="financial_contract_menu_root"
-        action="financial_contract_invest_action"
-        sequence="30"
+        sequence="100"
     />
     <menuitem
-        id="menu_financial_contract_guarantee"
-        name="Garanties"
-        parent="financial_contract_menu_root"
-        action="financial_contract_guarantee_action"
-        sequence="40"
+        id="menu_financial_suspensive_condition"
+        name="Conditions suspensives"
+        parent="menu_financial_contract_configuration"
+        action="financial_suspensive_condition_act_window"
+        sequence="20"
     />
     <menuitem
-        id="menu_financial_contract_external"
-        parent="financial_contract_menu_root"
-        action="financial_contract_external_action"
-        sequence="50"
+        id="menu_financial_europe_warranty"
+        name="Garantie Europe"
+        parent="menu_financial_contract_configuration"
+        action="financial_external_guarantee_act_window"
+        sequence="30"
     />
-
-    <!-- Configuration -->
     <menuitem
-        id="menu_financial_contract_configuration"
-        name="Configuration"
-        parent="financial_contract_menu_root"
-        sequence="100"
+        id="menu_financial_funding"
+        name="Fonds financeur"
+        parent="menu_financial_contract_configuration"
+        action="financial_funding_act_window"
+        sequence="40"
     />
 
+
+
 </odoo>
diff --git a/views/res_partner.xml b/views/res_partner.xml
index f5e7d7756321ea442304790e717284c481009da5..6af34ad0612178a804549d3ec7e7eb8731605500 100644
--- a/views/res_partner.xml
+++ b/views/res_partner.xml
@@ -24,11 +24,7 @@
                 </button>
             </xpath>
             <xpath expr="//notebook" position="inside">
-                <page
-                    name="contracts"
-                    string="Contracts"
-                    attrs="{'invisible': [('is_cooperative', '!=', True)]}"
-                >
+                <page name="contracts" string="Contracts">
                     <field name="financial_contract_ids" readonly="1" />
                 </page>
             </xpath>