diff --git a/models/__init__.py b/models/__init__.py
index 98a507251a1e056c783e460702d12f862c8eef9d..c34981509f9c6ecfd42f18c4df619cc48a4f5832 100755
--- a/models/__init__.py
+++ b/models/__init__.py
@@ -5,6 +5,7 @@ from . import account_invoice
 from . import res_company
 from . import res_config_settings
 from . import scop_bordereau_cg
+from . import scop_bordereau_cg_version
 from . import scop_cotisation_simulation
 from . import scop_liasse_fiscale
 from . import scop_cotisation_cg
diff --git a/models/scop_bordereau_cg.py b/models/scop_bordereau_cg.py
index 75c5578070416425f8776aeb9023eb0b0d2b8247..368513e9d39159a37ac747fbaef7cabb8dbee740 100644
--- a/models/scop_bordereau_cg.py
+++ b/models/scop_bordereau_cg.py
@@ -188,6 +188,13 @@ class Bordereau(models.Model):
     #     compute='_compute_emails'
     # )
 
+    # Historique des versions
+    bordereau_version_ids = fields.One2many(
+        comodel_name='scop.bordereau.version',
+        inverse_name='bordereau_id',
+        string='Historique'
+    )
+
     # ------------------------------------------------------
     # Compute
     # ------------------------------------------------------
diff --git a/models/scop_bordereau_cg_version.py b/models/scop_bordereau_cg_version.py
new file mode 100644
index 0000000000000000000000000000000000000000..b84002b2a9c82c777b86694dd27db217c5c00af7
--- /dev/null
+++ b/models/scop_bordereau_cg_version.py
@@ -0,0 +1,53 @@
+# © 2021 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+from datetime import timedelta
+
+from odoo import fields, models
+
+
+class BordereauVersion(models.Model):
+    _name = 'scop.bordereau.version'
+    _description = 'Historique des versions des bordereaux des cotisations CG'
+
+    bordereau_id = fields.Many2one(
+        comodel_name='scop.bordereau',
+        string='Bordereau de rattachement',
+        required=True,
+        readonly=True,
+        ondelete='cascade')
+    name = fields.Char('Nom')
+    liasse_fiscale_id_old = fields.Many2one(
+        comodel_name='scop.liasse.fiscale',
+        string='Ancienne liasse fiscale',
+        ondelete='set null'
+    )
+    type_assiette = fields.Selection(
+        string='Ancien type d\'assiette',
+        selection=[('ca', 'CA'),
+                   ('va', 'VA'), ])
+    date = fields.Date('Date')
+    montant_assiette = fields.Integer(
+        string='Ancien montant assiette',)
+    company_currency_id = fields.Many2one(
+        related='bordereau_id.company_currency_id')
+    amount_total_cotiz = fields.Monetary(
+        string='Ancien montant cotisation',
+        currency_field='company_currency_id',)
+    state = fields.Boolean('Validée', default=False)
+
+    # ------------------------------------------------------
+    # Compute
+    # ------------------------------------------------------
+    # @api.depends('liasse_fiscale_id')
+    # @api.multi
+    # def _compute_values_calculation(self):
+    #     for r in self:
+    #         if r.liasse_fiscale_id:
+    #             liasse = r.liasse_fiscale_id
+    #             r.ca = liasse.revenue_cgsubv
+    #             r.va = r.base_cotisation_cg.get_va(liasse)
+    #             r.net_results = liasse.L2053_HN \
+    #                 if liasse.L2053_HN > 0 else liasse.L2051_DI
+    #             r.wage_cg = liasse.wage_cg
+    #         else:
+    #             r.ca = r.va = r.net_results = r.wage_cg = 0
diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv
index 68bfdfbe3ce217b57d6aa7c62b09d3b8bf20a629..1f7f053e9fad6a1ce6120f4fd73a3503d117e271 100755
--- a/security/ir.model.access.csv
+++ b/security/ir.model.access.csv
@@ -5,3 +5,5 @@ access_scop_cotisation_cg,access_scop_cotisation_cg,model_scop_cotisation_cg,acc
 admin_access_scop_cotisation_cg,admin_access_scop_cotisation_cg,model_scop_cotisation_cg,cgscop_partner.group_cg_administrator,1,1,1,1
 access_scop_bordereau,access_scop_bordereau,model_scop_bordereau,account.group_account_manager,1,1,1,1
 admin_access_scop_bordereau,admin_access_scop_bordereau,model_scop_bordereau,cgscop_partner.group_cg_administrator,1,1,1,1
+access_scop_bordereau_version,access_scop_bordereau_version,model_scop_bordereau_version,account.group_account_manager,1,1,1,1
+admin_access_scop_bordereau_version,admin_access_scop_bordereau_version,model_scop_bordereau_version,cgscop_partner.group_cg_administrator,1,1,1,1
diff --git a/views/scop_bordereau_cg.xml b/views/scop_bordereau_cg.xml
index 265f902e177fbfeca43cb010f6f3ae7142603a2a..9c0c67dfa20c342c4de10100b7927a91e5397a94 100644
--- a/views/scop_bordereau_cg.xml
+++ b/views/scop_bordereau_cg.xml
@@ -69,14 +69,15 @@
                             </group>
                             <group>
                                 <span class="oe_grey" attrs="{'invisible': [('liasse_fiscale_id', '!=', False)]}">Pas de liasse fiscale pour le calcul</span>
+                                <field name="liasse_fiscale_id" attrs="{'invisible': [('liasse_fiscale_id', '=', False)]}"/>
+                                <field name="year_liasse" attrs="{'invisible': [('liasse_fiscale_id', '=', False)]}"/>
+                                <field name="type_liasse_fiscale" options="{'no_open': True}" attrs="{'invisible': [('liasse_fiscale_id', '=', False)]}"/>
                                 <button name="action_change_liasse"
                                         class="btn-info mb5"
                                         string="Changer de liasse fiscale"
                                         type="object"
                                         states="new"/>
-                                <field name="liasse_fiscale_id" attrs="{'invisible': [('liasse_fiscale_id', '=', False)]}"/>
-                                <field name="year_liasse" attrs="{'invisible': [('liasse_fiscale_id', '=', False)]}"/>
-                                <field name="type_liasse_fiscale" options="{'no_open': True}" attrs="{'invisible': [('liasse_fiscale_id', '=', False)]}"/>
+                                <br/>
                                 <hr/>
                                 <field name="type_assiette" attrs="{'invisible': [('liasse_fiscale_id', '=', False)]}"/>
                                 <field name="montant_assiette" attrs="{'invisible': [('liasse_fiscale_id', '=', False)]}"/>
@@ -112,6 +113,18 @@
                                     </form>
                                 </field>
                             </page>
+                            <page string="Historique">
+                                <field name="bordereau_version_ids" widget="one2many" class="mt-2">
+                                    <tree edit="false" create="false" delete="false" default_order="date desc">
+                                        <field name="date"/>
+                                        <field name="liasse_fiscale_id_old"/>
+                                        <field name="type_assiette"/>
+                                        <field name="montant_assiette"/>
+                                        <field name="amount_total_cotiz"/>
+                                        <field name="state" widget="boolean_toggle"/>
+                                    </tree>
+                                </field>
+                            </page>
                         </notebook>
                     </sheet>
                     <div class="oe_chatter">
diff --git a/wizard/scop_cotisation_cg_regul.py b/wizard/scop_cotisation_cg_regul.py
index 7516ed43d9f1350ee0a51ef3ece268228e6e7a3f..f8aae7e00aa7e98599e4e9a50787627f501562e6 100644
--- a/wizard/scop_cotisation_cg_regul.py
+++ b/wizard/scop_cotisation_cg_regul.py
@@ -190,6 +190,15 @@ class ScopCotisationRegul(models.TransientModel):
                         'price_unit': refund_amount
                     })
 
+        self.env['scop.bordereau.version'].create({
+            'bordereau_id': bordereau_id.id,
+            'date': self.date_regul,
+            'name': bordereau_id.name[0:10],
+            'liasse_fiscale_id_old': bordereau_id.liasse_fiscale_id,
+            'type_assiette': bordereau_id.type_assiette,
+            'montant_assiette': bordereau_id.montant_assiette,
+            'amount_total_cotiz': bordereau_id.amount_total_cotiz,
+        })
         bordereau_id.update({
             'name': bordereau_id.name[0:10] + '-' + str(bordereau_id.version + 1),
             'version': bordereau_id.version + 1,