diff --git a/src/targets/services/aggregatorUsageEvents.ts b/src/targets/services/aggregatorUsageEvents.ts
index d2f73ef2216872f2f0901f3b9907de78a2a9885d..a4e0b7fe5676c01df0e2e989da59167ee18b35c3 100644
--- a/src/targets/services/aggregatorUsageEvents.ts
+++ b/src/targets/services/aggregatorUsageEvents.ts
@@ -381,16 +381,24 @@ const calculateConnectedKonnectorPerDay = async (client: Client) => {
  */
 const buildProfileWithFuildType = async (
   client: Client,
-  fluidType: FluidType
+  fluidType: FluidType,
+  monthToAggregate?: number
 ): Promise<string> => {
   let formatedProfile = ''
   const profile = await new ProfileService(client).getProfile()
   // If profile is not filled, return empty string
-  if (profile && !profile.isProfileTypeCompleted) return formatedProfile
 
-  const profileType = await new ProfileTypeEntityService(
-    client
-  ).getProfileType()
+  if (profile && !profile.isProfileTypeCompleted) return formatedProfile
+  const date = monthToAggregate
+    ? DateTime.local()
+        .setZone('utc', {
+          keepLocalTime: true,
+        })
+        .set({ month: monthToAggregate })
+    : null
+  const profileType = await new ProfileTypeEntityService(client).getProfileType(
+    date
+  )
   if (fluidType === FluidType.ELECTRICITY) {
     if (
       profile &&
@@ -473,10 +481,15 @@ const buildProfileWithFuildType = async (
 
 const getConsumptionValue = async (
   client: Client,
-  fluidType: FluidType[]
+  fluidType: FluidType[],
+  monthToAggregate?: number
 ): Promise<PerformanceIndicator[]> => {
   const consumptionService = new ConsumptionService(client)
-  const analysisDate = DateTime.local().setZone('utc', { keepLocalTime: true })
+  const analysisDate = monthToAggregate
+    ? DateTime.local()
+        .setZone('utc', { keepLocalTime: true })
+        .set({ month: monthToAggregate })
+    : DateTime.local().setZone('utc', { keepLocalTime: true })
   const periods = {
     timePeriod: {
       startDate: analysisDate.minus({ month: 1 }).startOf('month'),
@@ -501,13 +514,16 @@ const getConsumptionValue = async (
  * @param client
  * @group [{ slug }, { seniority (in month) }, { profile (ECS, chauffage, etc...) }],
  */
-const calculateConsumptionVariation = async (client: Client) => {
+const calculateConsumptionVariation = async (
+  client: Client,
+  monthToAggregate?: number
+) => {
   log('info', `calculateConsumptionVariation`)
-  const consumptionData = await getConsumptionValue(client, [
-    FluidType.ELECTRICITY,
-    FluidType.GAS,
-    FluidType.WATER,
-  ])
+  const consumptionData = await getConsumptionValue(
+    client,
+    [FluidType.ELECTRICITY, FluidType.GAS, FluidType.WATER],
+    monthToAggregate
+  )
   for (const fluidType in [
     FluidType.ELECTRICITY,
     FluidType.GAS,
@@ -521,21 +537,40 @@ const calculateConsumptionVariation = async (client: Client) => {
       })
 
       if (firstConnectionEvent) {
-        const seniority = DateTime.local()
-          .setZone('utc', {
-            keepLocalTime: true,
-          })
-          .diff(firstConnectionEvent.eventDate).months
+        const seniority = 0
+        // Seniority is set to 0, otherwise the indicator is too specific
+        // monthToAggregate
+        //   ? DateTime.local()
+        //       .setZone('utc', {
+        //         keepLocalTime: true,
+        //       })
+        //       .set({ month: monthToAggregate })
+        //       .diff(firstConnectionEvent.eventDate, 'month')
+        //       .get('month')
+        //   : DateTime.local()
+        //       .setZone('utc', {
+        //         keepLocalTime: true,
+        //       })
+        //       .diff(firstConnectionEvent.eventDate, 'month')
+        //       .get('month')
 
         const consumptionVariationIndicator: Indicator = {
           createdBy: 'ecolyo',
           measureName: DaccEvent.CONSUMPTION_VARIATION_MONTHLY,
-          startDate: DateTime.local()
-            .setZone('utc', {
-              keepLocalTime: true,
-            })
-            .startOf('day')
-            .toISODate(),
+          startDate: monthToAggregate
+            ? DateTime.local()
+                .setZone('utc', {
+                  keepLocalTime: true,
+                })
+                .set({ month: monthToAggregate })
+                .startOf('day')
+                .toISODate()
+            : DateTime.local()
+                .setZone('utc', {
+                  keepLocalTime: true,
+                })
+                .startOf('day')
+                .toISODate(),
           value:
             consumptionData[fluidType] &&
             consumptionData[fluidType].percentageVariation
@@ -544,37 +579,63 @@ const calculateConsumptionVariation = async (client: Client) => {
           // eslint-disable-next-line @typescript-eslint/camelcase
           group1: { fluid_type: FluidType[fluidType].toLowerCase() },
           // eslint-disable-next-line @typescript-eslint/camelcase
-          group2: { seniority: seniority.toString() },
+          group2: { seniority: Math.round(seniority).toString() },
           group3: {
             // eslint-disable-next-line @typescript-eslint/camelcase
             fluid_usage: await buildProfileWithFuildType(
               client,
-              getFluidType(FluidType[fluidType])
+              getFluidType(FluidType[fluidType]),
+              monthToAggregate
             ),
           },
         }
 
         // if user wasnt connected during current month, dont send indicator
         const events: UsageEvent[] = await UsageEventService.getEvents(client, {
-          eventDate: {
-            $lt: DateTime.local()
-              .setZone('utc', {
-                keepLocalTime: true,
-              })
-              .endOf('month')
-              .minus({ month: 1 })
-              .toString(),
-            $gt: DateTime.local()
-              .setZone('utc', {
-                keepLocalTime: true,
-              })
-              .startOf('month')
-              .minus({ month: 1 })
-              .toString(),
-          },
+          eventDate: monthToAggregate
+            ? {
+                $lt: DateTime.local()
+                  .setZone('utc', {
+                    keepLocalTime: true,
+                  })
+                  .set({ month: monthToAggregate })
+                  .endOf('month')
+                  .minus({ month: 1 })
+                  .toString(),
+                $gt: DateTime.local()
+                  .setZone('utc', {
+                    keepLocalTime: true,
+                  })
+                  .set({ month: monthToAggregate })
+                  .startOf('month')
+                  .minus({ month: 1 })
+                  .toString(),
+              }
+            : {
+                $lt: DateTime.local()
+                  .setZone('utc', {
+                    keepLocalTime: true,
+                  })
+                  .endOf('month')
+                  .minus({ month: 1 })
+                  .toString(),
+                $gt: DateTime.local()
+                  .setZone('utc', {
+                    keepLocalTime: true,
+                  })
+                  .startOf('month')
+                  .minus({ month: 1 })
+                  .toString(),
+              },
         })
 
         if (events.length > 0 && consumptionVariationIndicator.value !== 0) {
+          log(
+            'info',
+            `Send variation indicator for ${monthToAggregate} : ${JSON.stringify(
+              consumptionVariationIndicator
+            )}`
+          )
           await sendIndicator(consumptionVariationIndicator, client)
         }
       }
@@ -582,27 +643,49 @@ const calculateConsumptionVariation = async (client: Client) => {
   }
 }
 
-const sendConnectionCount = async (client: Client) => {
+const sendConnectionCount = async (
+  client: Client,
+  monthToAggregate?: number
+) => {
   log('info', `sendConnectionCount`)
   // Get daily connexion
   const events: UsageEvent[] = await UsageEventService.getEvents(client, {
     type: UsageEventType.CONNECTION_EVENT,
-    eventDate: {
-      $lt: DateTime.local()
-        .setZone('utc', {
-          keepLocalTime: true,
-        })
-        .endOf('month')
-        .minus({ month: 1 })
-        .toString(),
-      $gt: DateTime.local()
-        .setZone('utc', {
-          keepLocalTime: true,
-        })
-        .startOf('month')
-        .minus({ month: 1 })
-        .toString(),
-    },
+    eventDate: monthToAggregate
+      ? {
+          $lt: DateTime.local()
+            .setZone('utc', {
+              keepLocalTime: true,
+            })
+            .set({ month: monthToAggregate })
+            .minus({ month: 1 })
+            .endOf('month')
+            .toString(),
+          $gt: DateTime.local()
+            .setZone('utc', {
+              keepLocalTime: true,
+            })
+            .set({ month: monthToAggregate })
+            .minus({ month: 1 })
+            .startOf('month')
+            .toString(),
+        }
+      : {
+          $lt: DateTime.local()
+            .setZone('utc', {
+              keepLocalTime: true,
+            })
+            .endOf('month')
+            .minus({ month: 1 })
+            .toString(),
+          $gt: DateTime.local()
+            .setZone('utc', {
+              keepLocalTime: true,
+            })
+            .startOf('month')
+            .minus({ month: 1 })
+            .toString(),
+        },
   })
 
   let uniqueDates = 0
@@ -616,14 +699,28 @@ const sendConnectionCount = async (client: Client) => {
   const connectionMonthly: Indicator = {
     createdBy: 'ecolyo',
     measureName: DaccEvent.CONNECTION_COUNT_MONTHLY,
-    startDate: DateTime.local()
-      .setZone('utc', {
-        keepLocalTime: true,
-      })
-      .startOf('day')
-      .toISODate(),
+    startDate: monthToAggregate
+      ? DateTime.local()
+          .setZone('utc', {
+            keepLocalTime: true,
+          })
+          .set({ month: monthToAggregate })
+          .startOf('day')
+          .toISODate()
+      : DateTime.local()
+          .setZone('utc', {
+            keepLocalTime: true,
+          })
+          .startOf('day')
+          .toISODate(),
     value: uniqueDates,
   }
+  log(
+    'info',
+    `Send connectionMonthly indicator for ${monthToAggregate} : ${JSON.stringify(
+      connectionMonthly
+    )}`
+  )
   await sendIndicator(connectionMonthly, client)
 }
 
@@ -1226,14 +1323,30 @@ const AggregatorUsageEvents = async ({
       })
       .startOf('day').day === profile.monthlyAnalysisDate.day
   ) {
-    sendKonnectorAttemptsMonthly(client)
-    calculateConsumptionVariation(client)
-    sendEmailSubscription(client)
-    sendHalfHourConsumption(client)
-    sendKonnectorEvents(client)
-    sendConnectionCount(client)
-    sendProfileCount(client)
+    await sendKonnectorAttemptsMonthly(client)
+    await calculateConsumptionVariation(client)
+    await sendEmailSubscription(client)
+    await sendHalfHourConsumption(client)
+    await sendKonnectorEvents(client)
+    await sendConnectionCount(client)
+    await sendProfileCount(client)
   }
+
+  log('info', `Recalculates errored indicators`)
+  const today: DateTime = DateTime.local()
+    .setZone('utc', {
+      keepLocalTime: true,
+    })
+    .startOf('day')
+  const lastMonth = 5
+  if (today.day === 3 && today.month === lastMonth) {
+    let monthToAggregate = 1
+    for (monthToAggregate; monthToAggregate <= lastMonth; monthToAggregate++) {
+      await calculateConsumptionVariation(client, monthToAggregate)
+      await sendConnectionCount(client, monthToAggregate)
+    }
+  }
+
   const uniqueReadUsageEvents: UsageEvent[] = uniq(readUsageEvents)
   log(
     'info',