diff --git a/models/scop_cotisation.py b/models/scop_cotisation.py
new file mode 100644
index 0000000000000000000000000000000000000000..f52bd53de8a98fe8d22012abe5a2b670f3e2b08e
--- /dev/null
+++ b/models/scop_cotisation.py
@@ -0,0 +1,62 @@
+# © 2021 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import models, fields
+
+
+class ScopCotisation(models.AbstractModel):
+    _name = "scop.cotisation"
+    _description = "Base des cotisations"
+
+    year = fields.Selection(
+        [(year, str(year)) for year in range(
+            fields.Datetime.now().year - 1, fields.Datetime.now().year + 2)],
+        string='Année de cotisation',
+        required=True)
+
+    company_id = fields.Many2one(
+        comodel_name='res.company',
+        string='Company', change_default=True,
+        required=True, readonly=True,
+        default=lambda self: self.env.user.company_id)
+
+    company_currency_id = fields.Many2one(
+        comodel_name='res.currency', related='company_id.currency_id',
+        string="Company Currency", readonly=True)
+    payment_term_id = fields.Many2one(
+        comodel_name='account.payment.term',
+        string="Conditions de paiement",
+        required=True
+    )
+    date_cotisation = fields.Date("Date de cotisation", required=True)
+
+    def create_contribution(self, product, partner, liasse=None, amount=0):
+        result = dict()
+        Invoice = self.env['account.invoice']
+        InvoiceLine = self.env['account.invoice.line']
+        member_invoice = Invoice.create({
+            'partner_id': partner.id,
+            'liasse_fiscale_id': liasse.id,
+            'type': 'out_invoice',
+            'year': self.year,
+            'is_contribution': True,
+            'journal_id': self.company_id.contribution_journal_id.id,
+            'state': 'draft',
+            'account_id': partner.property_account_receivable_id.id,
+            'payment_term_id': self.payment_term_id.id,
+            'payment_mode_id': partner.customer_payment_mode_id.id,
+            'date_invoice': self.date_cotisation,
+        })
+
+        # Création de la ligne CG Scop
+        member_invoice_line = InvoiceLine.create({
+            'invoice_id': member_invoice.id,
+            'product_id': product.id,
+            'account_id': product.property_account_income_id.id,
+            'invoice_line_tax_ids': [(6, 0, product.taxes_id.ids)],
+            'name': product.name,
+            'price_unit': amount
+        })
+        result['invoice'] = member_invoice
+        result['invoice_line'] = member_invoice_line
+        return result