diff --git a/__manifest__.py b/__manifest__.py
index 02fb90eda988a6372364a0d7469ad1989bab433a..a8c586e8bbb3611a6a8fbfefa9249755214cfdfa 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -10,6 +10,7 @@
     "data": [
         "security/ir.model.access.csv",
         # datas
+        "data/company_size.xml",
         # views
         "views/res_partner.xml",
         "views/union_regionale.xml",
diff --git a/data/company_size.xml b/data/company_size.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e202706d3d1a3d7f47e05c6e186f6c5e8671182c
--- /dev/null
+++ b/data/company_size.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+    <data noupdate="1">
+        <record id="1-5" model="company.size">
+            <field name="name">1 à 5</field>
+        </record>
+        <record id="5-15" model="company.size">
+            <field name="name">5 à 15</field>
+        </record>
+        <record id="15-50" model="company.size">
+            <field name="name">15 à 50</field>
+        </record>
+        <record id="50-100" model="company.size">
+            <field name="name">50 à 100</field>
+        </record>
+        <record id="+100" model="company.size">
+            <field name="name">plus de 100</field>
+        </record>
+    </data>
+</odoo>
diff --git a/models/__init__.py b/models/__init__.py
index 747285fc21d2cd732f42be536465ee2c6dad1191..9c05e4b56703ca629960c91b02f8aa2191a3f09f 100644
--- a/models/__init__.py
+++ b/models/__init__.py
@@ -1,2 +1,7 @@
 from . import res_partner
 from . import union_regionale
+from . import company_size
+from . import mucs_contract
+from . import meeting_event
+from . import mgmt_event
+
diff --git a/models/company_size.py b/models/company_size.py
new file mode 100644
index 0000000000000000000000000000000000000000..3c4296b8d6d7cae849235c5f33aa0b386a0caf33
--- /dev/null
+++ b/models/company_size.py
@@ -0,0 +1,43 @@
+# Copyright 2024- Le Filament (https://le-filament.com)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import models, fields, api
+from odoo.exceptions import ValidationError
+
+
+class CompanySize(models.Model):
+    _name = "company.size"
+
+    # ------------------------------------------------------
+    # Fields declaration
+    # ------------------------------------------------------
+
+    name = fields.Char("Taille d'entreprise")
+
+    # ------------------------------------------------------
+    # SQL Constraints
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Default methods
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Computed fields / Search Fields
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Onchange / Constraints
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # CRUD methods (ORM overrides)
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Actions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Business methods
+    # ------------------------------------------------------
diff --git a/models/meeting_event.py b/models/meeting_event.py
new file mode 100644
index 0000000000000000000000000000000000000000..d0bc2cc0c05b6e383f8de26ffcf8a6d6f0f38b45
--- /dev/null
+++ b/models/meeting_event.py
@@ -0,0 +1,49 @@
+# Copyright 2024- Le Filament (https://le-filament.com)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import models, fields, api
+
+
+class MeetingEvent(models.Model):
+    _name = "meeting.event"
+
+    date = fields.Date("Date")
+    name = fields.Char("Sujet")
+    description = fields.Char("Description")
+    # TODO tags ?
+    # categ_ids = fields.Many2one("X")
+
+    # relations
+    partner_id = fields.Many2one(comodel_name="res.partner")
+
+    # ------------------------------------------------------
+    # Fields declaration
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # SQL Constraints
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Default methods
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Computed fields / Search Fields
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Onchange / Constraints
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # CRUD methods (ORM overrides)
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Actions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Business methods
+    # ------------------------------------------------------
diff --git a/models/mgmt_event.py b/models/mgmt_event.py
new file mode 100644
index 0000000000000000000000000000000000000000..63f29c515e4b2f9d34b6e787f6c411c56e559274
--- /dev/null
+++ b/models/mgmt_event.py
@@ -0,0 +1,49 @@
+# Copyright 2024- Le Filament (https://le-filament.com)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import models, fields, api
+
+
+class MgmtEvent(models.Model):
+    _name = "mgmt.event"
+
+    qs = fields.Selection(string="Qualité de service", selection=[("s", "Satisfait")])
+    # TODO catégories ?
+    # theme = fields.Many2one(string="Thématique", comodel_name="")
+    topic = fields.Char("Sujet")
+    resolution = fields.Char("Résolution")
+
+    # relations
+    partner_id = fields.Many2one(comodel_name="res.partner")
+
+    # ------------------------------------------------------
+    # Fields declaration
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # SQL Constraints
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Default methods
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Computed fields / Search Fields
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Onchange / Constraints
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # CRUD methods (ORM overrides)
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Actions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Business methods
+    # ------------------------------------------------------
diff --git a/models/mucs_contract.py b/models/mucs_contract.py
new file mode 100644
index 0000000000000000000000000000000000000000..c38cd3daacb7e52b40b70f4a237a0279ab8dfc85
--- /dev/null
+++ b/models/mucs_contract.py
@@ -0,0 +1,49 @@
+# Copyright 2024- Le Filament (https://le-filament.com)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import models, fields, api
+
+
+class Contract(models.Model):
+    _name = "mucs.contract"
+
+    number = fields.Char("Numéro de contrat")
+    # On attend d'avoir des données
+    # product_id = fields.Many2one("Type de couverture")
+    member_count = fields.Integer("Effectifs adhérents")
+    maybe_member_count = fields.Integer("Potentiel adhérents")
+
+    # relations
+    partner_id = fields.Many2one(comodel_name="res.partner")
+
+    # ------------------------------------------------------
+    # Fields declaration
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # SQL Constraints
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Default methods
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Computed fields / Search Fields
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Onchange / Constraints
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # CRUD methods (ORM overrides)
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Actions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Business methods
+    # ------------------------------------------------------
diff --git a/models/res_partner.py b/models/res_partner.py
index 75c014918dbc505bceafd4ae0f6c3d96e1a7e126..d470b9df3963d60009c9728b815687f45a1a9f35 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -14,11 +14,12 @@ class ResPartner(models.Model):
 
     is_cooperative = fields.Boolean("Est une coopérative")
     is_member_cgscop = fields.Boolean("Est adhérent à la CG SCOP")
-    size_group = fields.Selection(
-        [("1-5", "1 à 5"), ("5-15", "5 à 15"), ("15-50", "15 à 50"),
-         ("50-100", "50 à 100"), ("+100", "plus de 100")],
-        string="Tranche d'effectif")
+    company_size_id = fields.Many2one("company.size",
+                                      string="Tranche d'effectif")
+    company_size = fields.Integer(string="Effectif approximatif")
 
+    # Note : peut-être utiliser l10n-france/l10n_fr_siret_lookup
+    # en 18.0 qui gère la récupération des codes APE et forme juridique
     siret = fields.Char(index=True, tracking=True, copy=False)
     siren = fields.Char(
         string="SIREN",
@@ -28,6 +29,17 @@ class ResPartner(models.Model):
         copy=False,
         tracking=True
     )
+    # Note : pour l'instant str, à changer vers m2o quand on y verra plus clair
+    ape = fields.Char("APE Code")
+    ape_label = fields.Char("APE Label")
+    ccn = fields.Char("CCN Code")
+    ccn_label = fields.Char("CCN Label")
+
+    is_member_sante = fields.Boolean("Adhérent Santé", compute="_compute_is_member_sante")
+    is_member_unmi = fields.Boolean("Adhérent UNMI")
+    is_member_mutex = fields.Boolean("Adhérent MUTEX")
+    type_rma_aid = fields.Selection(string="Assistance RMA",
+                                    selection=[("base", "Base")])
 
     # overwrite state to compute it based on department which itself is computed from zip
     state_id = fields.Many2one("res.country.state", string='State',
@@ -45,6 +57,28 @@ class ResPartner(models.Model):
         ondelete="restrict",
     )
 
+    contract_id = fields.One2many(
+        string="Contrats",
+        comodel_name="mucs.contract",
+        inverse_name="partner_id",
+    )
+    # child_ids (odoo) Contacts
+    lead_ids = fields.One2many(
+        string="Opportunités",
+        comodel_name="crm.lead",
+        inverse_name="partner_id",
+    )
+    meeting_ids = fields.One2many(
+        string="Suivi commercial",
+        comodel_name="meeting.event",
+        inverse_name="partner_id",
+    )
+    mgmt_event_ids = fields.One2many(
+        string="Suivi de gestion",
+        comodel_name="mgmt.event",
+        inverse_name="partner_id",
+    )
+
     # ------------------------------------------------------
     # SQL Constraints
     # ------------------------------------------------------
@@ -63,6 +97,11 @@ class ResPartner(models.Model):
             if partner.siret:
                 partner.siren = partner.siret.replace(" ", "")[0:9]
 
+    # TODO compute this
+    @api.depends("contract_id")
+    def _compute_is_member_sante(self):
+        for partner in self:
+            pass
     # ------------------------------------------------------
     # Onchange / Constraints
     # ------------------------------------------------------
diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv
index bde96825517321a3a9d225f58846ea09fa827c43..30fa26c7bf756665584839a2770f068640b47598 100644
--- a/security/ir.model.access.csv
+++ b/security/ir.model.access.csv
@@ -1,3 +1,7 @@
 id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
 access_union_regionale,access_union_regionale,model_union_regionale,base.group_user,1,0,0,0
 admin_union_regionale,admin_union_regionale,model_union_regionale,base.group_erp_manager,1,1,1,1
+access_company_size,access_company_size,model_company_size,base.group_user,1,0,0,0
+access_mucs_contract,access_mucs_contract,model_mucs_contract,base.group_user,1,1,1,1
+access_meeting_event,access_meeting_event,model_meeting_event,base.group_user,1,1,1,1
+access_mgmt_event,access_mgmt_event,model_mgmt_event,base.group_user,1,1,1,1
diff --git a/views/res_partner.xml b/views/res_partner.xml
index 3124f43d4374cd12651050fc0d88bda3c5e1e2cd..b62eeb77f28674927bcfb34d49b13dbb2de21a91 100644
--- a/views/res_partner.xml
+++ b/views/res_partner.xml
@@ -10,31 +10,60 @@
         <field name="model">res.partner</field>
         <field name="inherit_id" ref="base.view_partner_form"/>
         <field name="arch" type="xml">
-            <xpath expr="//h1" position="before">
-                <span invisible="not is_company">
-                    <label for="is_cooperative" string="Coopérative"/>
-                    <field name="is_cooperative"/>
-                </span>
-            </xpath>
-            <xpath expr="//h1" position="after">
-                <group invisible="not is_company">
-                    <group>
-                        <field name="ur_id" invisible="not is_cooperative"/>
-                        <field name="size_group"/>
-                    </group>
-                </group>
-            </xpath>
-            <xpath expr="//field[@name='vat']" position="after">
-                <field name="siret" readonly="1" widget="CopyClipboardChar"/>
-                <field name="siren" readonly="1" widget="CopyClipboardChar"/>
-            </xpath>
             <xpath expr="//page[@name='contact_addresses']" position="before">
                 <page
                     name="company"
-                    string="Company"
+                    string="Entreprise"
+                    invisible="not is_company"
+                >
+                    <group>
+                        <group>
+                            <field name="siret" readonly="1"
+                                   widget="CopyClipboardChar"/>
+                            <field name="siren" readonly="1"
+                                   widget="CopyClipboardChar"/>
+                            <field name="company_size_id"/>
+                            <field name="company_size"/>
+                        </group>
+                        <group>
+                            <field name="is_cooperative"/>
+                            <field name="ur_id" invisible="not is_cooperative"/>
+                        </group>
+                    </group>
+                </page>
+                <page
+                    name="leads"
+                    string="Opportunités"
+                >
+                    <group>
+<!--                        <field name="leads_id"/>-->
+                    </group>
+                </page>
+                <page
+                    name="contracts"
+                    string="Contrats"
+                    invisible="not is_company"
+                >
+                    <group>
+                        <field name="contract_id"/>
+                    </group>
+                </page>
+                <page
+                    name="suivi_commercial"
+                    string="Suivi commercial"
+                    invisible="not is_company"
+                >
+                    <group>
+                        <field name="meeting_ids"/>
+                    </group>
+                </page>
+                <page
+                    name="suivi_gestion"
+                    string="Suivi gestion"
                     invisible="not is_company"
                 >
                     <group>
+                        <field name="mgmt_event_ids"/>
                     </group>
                 </page>
             </xpath>