diff --git a/apps/treasury/models.py b/apps/treasury/models.py
index 0b5948fda907ead42acadacd6387b96f7d6a0c15..39fb8523cc360f1977cb264eab71cdd74957b9dc 100644
--- a/apps/treasury/models.py
+++ b/apps/treasury/models.py
@@ -11,7 +11,10 @@ from django.db.models import Q
 from django.template.loader import render_to_string
 from django.utils import timezone
 from django.utils.translation import gettext_lazy as _
+
+from member.models import Club, Membership
 from note.models import NoteSpecial, SpecialTransaction, MembershipTransaction, NoteUser
+from wei.models import WEIClub
 
 
 class Invoice(models.Model):
@@ -305,6 +308,40 @@ class SogeCredit(models.Model):
         return self.credit_transaction.total if self.valid \
             else sum(transaction.total for transaction in self.transactions.all())
 
+    def update_transactions(self):
+        """
+        The Sogé credit may be created after the user already paid its memberships.
+        We query transactions and update the credit, if it is unvalid.
+        """
+        if self.valid:
+            return
+
+        bde = Club.objects.get(name="BDE")
+        kfet = Club.objects.get(name="Kfet")
+        wei = WEIClub.objects.order_by('-year').first()
+        bde_qs = Membership.objects.filter(user=self.user, club=bde, date_start__gte=bde.membership_start)
+        kfet_qs = Membership.objects.filter(user=self.user, club=kfet, date_start__gte=kfet.membership_start)
+        wei_qs = Membership.objects.filter(user=self.user, club=wei, date_start__gte=wei.membership_start)
+
+        if bde_qs.exists():
+            m = bde_qs.get()
+            if m.transaction not in self.transactions.all():
+                self.transactions.add(m.transaction)
+
+        if kfet_qs.exists():
+            m = kfet_qs.get()
+            if m.transaction not in self.transactions.all():
+                self.transactions.add(m.transaction)
+
+        if wei_qs.exists():
+            m = wei_qs.get()
+            if m.transaction not in self.transactions.all():
+                self.transactions.add(m.transaction)
+
+        for tr in self.transactions.all():
+            tr.valid = False
+            tr.save()
+
     def invalidate(self):
         """
         Invalidating a Société générale delete the transaction of the bank if it was already created.
diff --git a/apps/wei/models.py b/apps/wei/models.py
index b59a0dfd7b0c22c0dd3fddce129e65253dcd00b9..9e99cd1c78c86f5e824b7e4b36126eb5324a8ca1 100644
--- a/apps/wei/models.py
+++ b/apps/wei/models.py
@@ -364,8 +364,11 @@ class WEIMembership(Membership):
                 # to treasurers.
                 transaction.refresh_from_db()
                 from treasury.models import SogeCredit
-                soge_credit = SogeCredit.objects.get_or_create(user=self.user)[0]
+                soge_credit, created = SogeCredit.objects.get_or_create(user=self.user)
                 soge_credit.refresh_from_db()
                 transaction.save()
                 soge_credit.transactions.add(transaction)
                 soge_credit.save()
+
+                soge_credit.update_transactions()
+                soge_credit.save()