diff --git a/models/res_partner.py b/models/res_partner.py
index 85a556b47988c4ff08107e4b35eaa8872f6d132f..d8a31aac4c24f12095157566351089d7fafeb388 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -297,13 +297,27 @@ class ScopPartner(models.Model):
     revision_type = fields.Selection(
         [('1y', "Annuelle"),
          ('5y', 'Quinquennale'),
-         ('5ys', "Quinquennale séquencée")],
+         ('5ys', "Quinquennale séquencée (annuel)"),
+         ('5ys23', "Quinquennale séquencée (2 ans et 3 ans)")],
         string='Périodicité de la révision')
-    revision_next_date = fields.Date("Prochain exercice révisable")
+    revision_next_date = fields.Date("Prochain exercice révisable (old)")
     revision_format_id = fields.Many2one(
         'scop.revision.format',
         string='Format de révision',
         on_delete='restrict')
+    revision_tarif = fields.Integer("Tarif de vente",
+        related='revision_format_id.tarif',
+        store=False)        
+
+    revision_next_exercice = fields.Integer("Prochain exercice révisable",
+        compute='_compute_revision_next_exercice',
+        inverse='_inverse_revision_next_exercice',
+        store=True)
+
+    revision_next_year = fields.Integer("Année prochaine révision",
+        compute='_compute_revision_next_year',
+        inverse='_inverse_revision_next_year',
+        store=True)        
 
     revision_ids = fields.One2many(
         comodel_name='scop.revision',
@@ -851,6 +865,57 @@ class ScopPartner(models.Model):
             else:
                 partner.is_administrative = False
 
+
+    @api.depends('revision_next_exercice')
+    def _compute_revision_next_year(self):
+        for partner in self:
+            partner.revision_next_year = partner.revision_next_exercice + 1
+            
+    def _inverse_revision_next_year(self):
+        for expense in self:
+            return
+
+    @api.depends('revision_type', 'revision_ids', 'revision_ids.revision_result_year', 'first_closeout')
+    @api.multi
+    def _compute_revision_next_exercice(self):
+        for partner in self:
+            # Si aucune périodicité de défini, on n'insiste pas
+            if (partner.revision_type == False):
+                return
+            # On commence par regarder si l'on a des révisions
+            last_rev = partner.revision_ids.sorted(key=lambda r: r.revision_result_year, reverse=True)
+
+            if (len(last_rev) > 0):
+                # On a déjà révisé un exercice
+                # Cas d'une révision annuelle
+                if (partner.revision_type == '1y'):
+                    partner.revision_next_exercice = last_rev[0].revision_result_year + 1
+                # Cas d'une révision quinquénnale
+                if (partner.revision_type == '5y'):
+                    partner.revision_next_exercice = last_rev[0].revision_result_year + 5
+                # Cas d'une révision quinquénnale séquencée (annuelle)
+                if (partner.revision_type == '5ys'):
+                    partner.revision_next_exercice = last_rev[0].revision_result_year + 1
+                # Cas d'une révision quinquénnale séquencée (2 et 3)
+                if (partner.revision_type == '5ys23'):
+                    # On doit regarder l'écart avec la révision précédente
+                    if(len(last_rev)>1):
+                        # On a une réunion précédente, il faut regarder l'écart entre les deux
+                        ex1 = last_rev[0].revision_result_year
+                        ex2 = last_rev[1].revision_result_year
+                        # le prochain exercie est donc 5 moins la durée de la précédente révision
+                        partner.revision_next_exercice = last_rev[0].revision_result_year + (5 - (ex1-ex2))
+                    else:
+                        # Pas de révision précédente 
+                        partner.revision_next_exercice = last_rev[0].revision_result_year + 2
+            else:
+                # On n'a pas révisé d'exercice alors il faut révise le 1er exercice
+                partner.revision_next_exercice = partner.first_closeout.year
+
+    def _inverse_revision_next_exercice(self):
+        for expense in self:
+            return
+
     # ------------------------------------------------------
     # Button Action
     # ------------------------------------------------------
diff --git a/models/scop_revision.py b/models/scop_revision.py
index 42578c14670f4dd53891b6e4be98611406ad2e06..b4682de507033f9458eb5992369eadc8bbf8e3f5 100644
--- a/models/scop_revision.py
+++ b/models/scop_revision.py
@@ -35,6 +35,8 @@ class ScopRevision(models.Model):
          ('demeure', 'Mise en demeure')],
         string='Suivi après révision')
     note = fields.Text("Commentaire")
+    facture = fields.Text("Facture", track_visibility='onchange')
+    facture_reglee = fields.Boolean("Réglée", track_visibility='onchange')
 
 
 class ScopRevisionFormat(models.Model):
@@ -52,3 +54,4 @@ class ScopRevisionFormat(models.Model):
         index=True,
         on_delete='restrict',
         default=_default_ur)
+    tarif = fields.Integer("Tarif de vente")
diff --git a/views/res_partner.xml b/views/res_partner.xml
index 1d0dd4e67d0d228f4639579f90ddcf388f559e76..da5f2912de85ecccfd2fc2f7a1c03cc133044fe6 100644
--- a/views/res_partner.xml
+++ b/views/res_partner.xml
@@ -591,8 +591,8 @@
                             </field>
                         </page>
                     <page name='scop_revision' string="Révisions" attrs="{'invisible': ['|', ('is_cooperative', '!=', True), ('project_status', '!=', '6_suivi')]}">
-                        <group string="Informations de révision">
-                            <group>
+                        <group col="3">
+                            <group string="Contrat de révision">
                                 <field name="revision_contract"/>
                                 <field name="revision_company_id" options="{'no_create': True}"/>
                                 <field name="revision_backup_company_id" options="{'no_create': True}"/>
@@ -600,19 +600,27 @@
                                 <field name="revision_certified_person_id" options="{'no_open': True, 'no_create': True}"/>
                                 <field name="revision_person_assign_date"/>
                             </group>
-                            <group>
-                                <field name="revision_type"/>
-                                <field name="revision_next_date"/>
-                                <field name="revision_format_id" options="{'no_open': True, 'no_create': True}"  domain="[('ur_id', '=', ur_id)]"/>
+                            
+                            <group string="Caractéristiques de la révision">
+                                <field name="revision_format_id" options="{'no_open': True, 'no_create': True}"  domain="[('ur_id', '=', ur_id)]" attrs="{'required': [('revision_contract','!=', False)]}"/>
+                                <field name="revision_tarif" widget="monetary"/>
+                                <field name="revision_type"  attrs="{'required': [('revision_contract','!=', False)]}" />
                             </group>
+
+                            <group string="Prochaine révision">
+                                <field name="revision_next_exercice" attrs="{'required': [('revision_contract','!=', False)]}"/>
+                                <field name="revision_next_year" attrs="{'required': [('revision_contract','!=', False)]}"/>                                
+                            </group>
+
                         </group>
                         <field name="revision_ids" widget="one2many">
                             <tree string="Révisions" editable="top">
-                                <field name="date"/>
-                                <field name="delegate_id" options="{'no_open': True, 'no_create': True}" />
-                                <field name="revision_result_year"/>
-                                <field name="revision_format_id" options="{'no_open': True, 'no_create': True}"/>
-                                <field name="revision_followup"/>
+                                <field name="date" required="1"/>
+                                <field name="delegate_id" required="1" options="{'no_open': True, 'no_create': True}" />
+                                <field name="revision_result_year" required="1"/>
+                                <field name="revision_followup" required="1"/>
+                                <field name="facture" />
+                                <field name="facture_reglee" widget="boolean_toggle"/>
                                 <field name="note"/>
                             </tree>
                         </field>
diff --git a/views/scop_config_lists_views.xml b/views/scop_config_lists_views.xml
index 45633dae805b9033c92cd82fc0e2d6846a335166..57233a608deb97416d546723c94062cbb33d5b78 100644
--- a/views/scop_config_lists_views.xml
+++ b/views/scop_config_lists_views.xml
@@ -68,6 +68,7 @@
             <field name="arch" type="xml">
                 <tree string="Revision Formats" editable="top">
                     <field name="name"/>
+                    <field name="tarif" widget="monetary"/>
                     <field name="ur_id" options="{'no_open': True, 'no_create': True}"/>
                 </tree>
             </field>