diff --git a/manifest.webapp b/manifest.webapp
index 06e58b9f889162e5f300fcf2df02dd3aa8a82646..30a522b20cb83f9aa103882f1081dfcb4fb3b9a5 100644
--- a/manifest.webapp
+++ b/manifest.webapp
@@ -22,9 +22,9 @@
     }
   },
   "services": {
-    "monthlyReport": {
+    "monthlyReportNotification": {
       "type": "node",
-      "file": "services/monthlyReport/ecolyo.js",
+      "file": "services/monthlyReportNotification/ecolyo.js",
       "trigger": "@cron 0 0 * * * *" 
     }
   },
diff --git a/src/assets/icons/ico/check.svg b/src/assets/icons/ico/check.svg
new file mode 100644
index 0000000000000000000000000000000000000000..17a5c9bd81cc8865cb4825442606ba15caa5d219
--- /dev/null
+++ b/src/assets/icons/ico/check.svg
@@ -0,0 +1,3 @@
+<svg width="15" height="12" viewBox="0 0 15 12" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M1 4.9845L6 9.9845L14 1.9845" stroke="#E3B82A" stroke-width="2" stroke-miterlimit="10" stroke-linecap="round"/>
+</svg>
diff --git a/src/assets/icons/ico/order.svg b/src/assets/icons/ico/order.svg
new file mode 100644
index 0000000000000000000000000000000000000000..feff36b2edae783ed5f0c776eb2ad58ed0ed02c5
--- /dev/null
+++ b/src/assets/icons/ico/order.svg
@@ -0,0 +1,6 @@
+<svg width="26" height="16" viewBox="0 0 26 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M11.375 5.375L7 1L2.625 5.375" stroke="#E0E0E0" stroke-width="2" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
+<line x1="7.125" y1="2" x2="7.125" y2="13.125" stroke="#E0E0E0" stroke-width="2" stroke-linecap="round"/>
+<path d="M22.75 10.625L18.375 15L14 10.625" stroke="#E0E0E0" stroke-width="2" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
+<line x1="1" y1="-1" x2="12.125" y2="-1" transform="matrix(-4.37114e-08 -1 -1 4.37114e-08 17.5 15)" stroke="#E0E0E0" stroke-width="2" stroke-linecap="round"/>
+</svg>
diff --git a/src/assets/icons/ico/sort.svg b/src/assets/icons/ico/sort.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d76209dddc0ef8c029fcc12c90c014770898ec7d
--- /dev/null
+++ b/src/assets/icons/ico/sort.svg
@@ -0,0 +1,8 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<line x1="1" y1="17" x2="19" y2="17" stroke="#E0E0E0" stroke-width="2" stroke-linecap="round"/>
+<line x1="1" y1="10" x2="19" y2="10" stroke="#E0E0E0" stroke-width="2" stroke-linecap="round"/>
+<line x1="1" y1="3" x2="19" y2="3" stroke="#E0E0E0" stroke-width="2" stroke-linecap="round"/>
+<circle cx="7" cy="17" r="2.5" transform="rotate(-90 7 17)" fill="#282932" stroke="#E0E0E0"/>
+<circle cx="7" cy="3" r="2.5" transform="rotate(-90 7 3)" fill="#282932" stroke="#E0E0E0"/>
+<circle cx="13" cy="10" r="2.5" transform="rotate(-90 13 10)" fill="#282932" stroke="#E0E0E0"/>
+</svg>
diff --git a/src/assets/icons/tabbar/bilan/bilan-off.svg b/src/assets/icons/tabbar/bilan/bilan-off.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8089d23ff69069d9571df6d2c7100778f96812e8
--- /dev/null
+++ b/src/assets/icons/tabbar/bilan/bilan-off.svg
@@ -0,0 +1,7 @@
+<svg width="50" height="36" viewBox="0 0 50 36" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M13.5 11.5H36.5V29C36.5 29.8284 35.8284 30.5 35 30.5H15C14.1716 30.5 13.5 29.8284 13.5 29V11.5Z" stroke="#A0A0A0"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M37 12H39C39.5523 12 40 12.4477 40 13C40 13.5523 39.5523 14 39 14H37V15H39C40.1046 15 41 14.1046 41 13C41 11.8954 40.1046 11 39 11H11C9.89543 11 9 11.8954 9 13C9 14.1046 9.89543 15 11 15H13V14H11C10.4477 14 10 13.5523 10 13C10 12.4477 10.4477 12 11 12H13H37Z" fill="#A0A0A0"/>
+<rect x="18" y="16" width="14" height="1" rx="0.5" fill="#A0A0A0"/>
+<rect x="18" y="20" width="14" height="1" rx="0.5" fill="#A0A0A0"/>
+<rect x="18" y="24" width="14" height="1" rx="0.5" fill="#A0A0A0"/>
+</svg>
diff --git a/src/assets/icons/tabbar/bilan/bilan-on.svg b/src/assets/icons/tabbar/bilan/bilan-on.svg
new file mode 100644
index 0000000000000000000000000000000000000000..71cdab2585ab37b9e6ec121889f9db4f2ca7b46c
--- /dev/null
+++ b/src/assets/icons/tabbar/bilan/bilan-on.svg
@@ -0,0 +1,4 @@
+<svg width="50" height="36" viewBox="0 0 50 36" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M14 13H36V14V29C36 29.5523 35.5523 30 35 30H15C14.4477 30 14 29.5523 14 29V14L14 13ZM18 16.5C18 16.2239 18.2239 16 18.5 16H31.5C31.7761 16 32 16.2239 32 16.5C32 16.7761 31.7761 17 31.5 17H18.5C18.2239 17 18 16.7761 18 16.5ZM18.5 20C18.2239 20 18 20.2239 18 20.5C18 20.7761 18.2239 21 18.5 21H31.5C31.7761 21 32 20.7761 32 20.5C32 20.2239 31.7761 20 31.5 20H18.5ZM18 24.5C18 24.2239 18.2239 24 18.5 24H31.5C31.7761 24 32 24.2239 32 24.5C32 24.7761 31.7761 25 31.5 25H18.5C18.2239 25 18 24.7761 18 24.5Z" fill="#E3B82A"/>
+<path d="M39 12C39.5523 12 40 12.4477 40 13C40 13.5523 39.5523 14 39 14H37V15H39C40.1046 15 41 14.1046 41 13C41 11.8954 40.1046 11 39 11H11C9.89543 11 9 11.8954 9 13C9 14.1046 9.89543 15 11 15H13V14H11C10.4477 14 10 13.5523 10 13C10 12.4477 10.4477 12 11 12H39Z" fill="#E3B82A"/>
+</svg>
diff --git a/src/atoms/notification.state.ts b/src/atoms/notification.state.ts
index 1065bca143e112e2f32cdec8dffba43f26712d85..12671316e19838cce107398c17bf6ac9135eec0d 100644
--- a/src/atoms/notification.state.ts
+++ b/src/atoms/notification.state.ts
@@ -1,6 +1,15 @@
-import { atom } from 'recoil'
+import { atom, selector } from 'recoil'
+import { userProfileState } from './userProfile.state'
 
 export const challengeNotificationState = atom<boolean>({
   key: 'challengeNotificationState',
   default: false,
 })
+
+export const reportNotificationState = selector<boolean>({
+  key: 'reportNotificationState',
+  get: ({ get }) => {
+    const userProfile = get(userProfileState)
+    return !userProfile.report.haveSeenLastReport
+  },
+})
diff --git a/src/atoms/userProfile.state.ts b/src/atoms/userProfile.state.ts
index 848cb6127f05a896ca994b08c5003016f8614c70..340fef957d66ba04afc684b3cda2d2e80de6fd2d 100644
--- a/src/atoms/userProfile.state.ts
+++ b/src/atoms/userProfile.state.ts
@@ -1,3 +1,4 @@
+import { DateTime } from 'luxon'
 import { UserProfile } from 'models'
 import { atom } from 'recoil'
 
@@ -8,9 +9,13 @@ export const userProfileState = atom<UserProfile>({
     level: 0,
     challengeTypeHash: '',
     ecogestureHash: '',
-    haveSeenWelcomeModal: false,
+    isFirstConnection: true,
     haveSeenOldFluidModal: false,
     notificationEcogesture: [],
-    report: false,
+    report: {
+      sendReportNotification: false,
+      haveSeenLastReport: true,
+      monthlyReportDate: DateTime.fromISO('0000-01-01T00:00:00.000Z'),
+    },
   },
 })
diff --git a/src/components/Challenge/FinishedChallengeDetailsView.tsx b/src/components/Challenge/FinishedChallengeDetailsView.tsx
index a577c4be9af569cf61f0a3f5d2a11c2e47471b36..bde63a8db62123145fef60adedfbf52e6f3371f2 100644
--- a/src/components/Challenge/FinishedChallengeDetailsView.tsx
+++ b/src/components/Challenge/FinishedChallengeDetailsView.tsx
@@ -65,7 +65,10 @@ const FinishedChallengeDetailsView: React.FC<FinishedChallengeDetailsViewProps>
   useEffect(() => {
     if (userChallengeState) {
       setChallenge(userChallengeState)
-      if (userChallengeState.challengeType && userChallengeState.badge) {
+      if (
+        userChallengeState.challengeType &&
+        userChallengeState.badge != null
+      ) {
         importRightBadge(
           userChallengeState.challengeType.id,
           userChallengeState.badge
diff --git a/src/components/Charts/AxisBottom.tsx b/src/components/Charts/AxisBottom.tsx
index 03072d721dbad11497d126199b3594569762dd58..f3d5a103b785210f8bbbab855863e6aee5711671 100644
--- a/src/components/Charts/AxisBottom.tsx
+++ b/src/components/Charts/AxisBottom.tsx
@@ -22,10 +22,6 @@ function TextAxis(props: TextTypeProps) {
     selectedDate,
     dataload.date
   )
-
-  const isEven = (n: number) => {
-    return n % 2 == 0
-  }
   const style = isSelectedDate
     ? 'tick-text tick-text-selected chart-ticks-x-text'
     : 'tick-text chart-ticks-x-text'
@@ -49,25 +45,12 @@ function TextAxis(props: TextTypeProps) {
     case TimeStep.DAY:
       return (
         <text y="10" dy="0.71em" transform={`translate(${width})`}>
-          {isEven(index) ? (
-            <>
-              <tspan className={style} x="0" textAnchor="middle">
-                {dataload.date.toLocaleString({ weekday: 'narrow' })}
-              </tspan>
-              <tspan className={style} x="0" dy="1.2em" textAnchor="middle">
-                {dataload.date.toLocaleString({ day: 'numeric' })}
-              </tspan>
-            </>
-          ) : (
-            <tspan
-              className={style + ' separator'}
-              dx="0"
-              dy="8px"
-              textAnchor="middle"
-            >
-              .
-            </tspan>
-          )}
+          <tspan className={style} x="0" textAnchor="middle">
+            {dataload.date.toLocaleString({ weekday: 'narrow' })}
+          </tspan>
+          <tspan className={style} x="0" dy="1.2em" textAnchor="middle">
+            {dataload.date.toLocaleString({ day: '2-digit' })}
+          </tspan>
         </text>
       )
     case TimeStep.HOUR:
@@ -140,7 +123,6 @@ const AxisBottom = (props: AxisBottomProps) => {
             width={xScale.bandwidth() / 2}
             selectedDate={selectedDate}
           />
-
           {dateChartService.compareStepDate(
             timeStep,
             DateTime.local(),
diff --git a/src/components/Charts/BarChart.tsx b/src/components/Charts/BarChart.tsx
index 852da714528309608e2dc81b1d1f303ba977d509..90f137aed6e0cb4a8e5ac7affeca3e0bf2257f45 100644
--- a/src/components/Charts/BarChart.tsx
+++ b/src/components/Charts/BarChart.tsx
@@ -79,12 +79,8 @@ const BarChart: React.FC<BarChartProps> = (props: BarChartProps) => {
     const maxCompare = chartData.comparisonData
       ? Math.max(...chartData.comparisonData.map(d => d.value))
       : 0
-
     if (timeStep === TimeStep.DAY || timeStep === TimeStep.HALF_AN_HOUR) {
-      const actualMonth =
-        timeStep === TimeStep.DAY
-          ? selectedDate.startOf('month').month
-          : selectedDate.startOf('week').month
+      const actualMonth = selectedDate.startOf('week').month
       const actualYear = selectedDate.startOf('week').year
       const key = `${actualMonth}/${actualYear}-${isHome}-${fluidTypes.join(
         '-'
@@ -94,9 +90,9 @@ const BarChart: React.FC<BarChartProps> = (props: BarChartProps) => {
       }
       const maxLoad = maxLoads[key] || 0
       if (showCompare) {
-        return Math.round(Math.max(maxLoad, maxCompare))
+        return Math.max(maxLoad, maxCompare)
       }
-      return maxLoad > 0 ? Math.round(maxLoad) : 15
+      return maxLoad > 0 ? maxLoad : 15
     } else {
       let max = chartData.actualData
         ? Math.max(...chartData.actualData.map(d => d.value))
diff --git a/src/components/ConsumptionVisualizer/ConsumptionVisualizer.tsx b/src/components/ConsumptionVisualizer/ConsumptionVisualizer.tsx
index b395e25695006f9331c3def39da28729355d616b..8aa445ea137d389060e47878fd60d6705e8a3f59 100644
--- a/src/components/ConsumptionVisualizer/ConsumptionVisualizer.tsx
+++ b/src/components/ConsumptionVisualizer/ConsumptionVisualizer.tsx
@@ -7,7 +7,7 @@ import { TimeStep } from 'enum/timeStep.enum'
 import { Dataload } from 'models'
 import DateChartService from 'services/dateChart.service'
 
-import DateConsumptionVisualizer from 'components/ConsumptionVisualizer/DateConsumptionVisualizer'
+import DateNavigator from 'components/DateNavigator/DateNavigator'
 import DataloadConsumptionVisualizer from 'components/ConsumptionVisualizer/DataloadConsumptionVisualizer'
 import DetailedConsumptionVisualizer from 'components/ConsumptionVisualizer/DetailedConsumptionVisualizer'
 import LastDataConsumptionVisualizer from 'components/ConsumptionVisualizer/LastDataConsumptionVisualizer'
@@ -53,7 +53,7 @@ const ConsumptionVisualizer = ({
   const dateChartService = new DateChartService()
   return (
     <div className="cv">
-      <DateConsumptionVisualizer
+      <DateNavigator
         timeStep={timeStep}
         date={date}
         handleClickMove={handleClickMove}
diff --git a/src/components/ConsumptionVisualizer/DateConsumptionVisualizer.tsx b/src/components/ConsumptionVisualizer/DateConsumptionVisualizer.tsx
deleted file mode 100644
index e6c4352f486816fc1add4ee52562b9ed031d8f09..0000000000000000000000000000000000000000
--- a/src/components/ConsumptionVisualizer/DateConsumptionVisualizer.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-import React from 'react'
-import { DateTime } from 'luxon'
-
-import { TimeStep } from 'enum/timeStep.enum'
-
-import DateFormatConsumptionVisualizer from 'components/ConsumptionVisualizer/DateFormatConsumptionVisualizer'
-import StyledIconbutton from 'components/CommonKit/IconButton/StyledIconButton'
-import LeftArrowIcon from 'assets/icons/ico/left-arrow.svg'
-import RigthArrowIcon from 'assets/icons/ico/right-arrow.svg'
-import DoubleRightArrowIcon from 'assets/icons/ico/double-right-arrow.svg'
-import DoubleLeftArrowIcon from 'assets/icons/ico/double-left-arrow.svg'
-
-interface DateConsumptionVisualizerProps {
-  timeStep: TimeStep
-  date: DateTime
-  indexDisplayed: number
-  handleClickMove(increment: number): void
-  handleChangeIndex: (index: number) => void
-}
-
-const DateConsumptionVisualizer = ({
-  timeStep,
-  date,
-  indexDisplayed,
-  handleClickMove,
-  handleChangeIndex,
-}: DateConsumptionVisualizerProps) => {
-  return (
-    <div className="cv-content-date">
-      <div>
-        <StyledIconbutton
-          className="cv-button-double"
-          onClick={() => handleChangeIndex(indexDisplayed + 1)}
-          icon={DoubleLeftArrowIcon}
-          size={16}
-        />
-      </div>
-      <div>
-        <StyledIconbutton
-          className="cv-button"
-          onClick={() => handleClickMove(-1)}
-          icon={LeftArrowIcon}
-          size={16}
-        />
-      </div>
-      <DateFormatConsumptionVisualizer timeStep={timeStep} date={date} />
-      <div>
-        <StyledIconbutton
-          className="cv-button"
-          onClick={() => handleClickMove(1)}
-          icon={RigthArrowIcon}
-          size={16}
-        />
-      </div>
-      <div>
-        <StyledIconbutton
-          className="cv-button-double"
-          onClick={() => handleChangeIndex(indexDisplayed - 1)}
-          icon={DoubleRightArrowIcon}
-          size={16}
-        />
-      </div>
-    </div>
-  )
-}
-
-export default DateConsumptionVisualizer
diff --git a/src/components/Content/Content.tsx b/src/components/Content/Content.tsx
index 093d783dd7db279b60f86060c5f71a9d839f872f..e277e4262cc59d4cdddb7cc38f9833fe2f008d13 100644
--- a/src/components/Content/Content.tsx
+++ b/src/components/Content/Content.tsx
@@ -2,13 +2,14 @@ import React, { useCallback, useEffect } from 'react'
 import { useClient } from 'cozy-client'
 import { useRecoilState } from 'recoil'
 import { history } from 'components/App'
-
+import MailService from 'services/mail.service'
 import { ScreenType } from 'enum/screen.enum'
 import { ModalState, UserProfile } from 'models'
 import { userProfileState } from 'atoms/userProfile.state'
 import { screenTypeState } from 'atoms/screenType.state'
 import { modalState } from 'atoms/modal.state'
 import UserProfileService from 'services/userProfile.service'
+import get from 'lodash/get'
 
 import WelcomeModal from 'components/Welcome/WelcomeModal'
 import FeedbackModal from 'components/Feedback/FeedbackModal'
@@ -27,7 +28,7 @@ const Content: React.FC<ContentProps> = ({
   const client = useClient()
   const cozyBarHeight = 48
   const cozyNavHeight = 56
-
+  const mailService = new MailService()
   const [screenType, setScreenType] = useRecoilState<ScreenType>(
     screenTypeState
   )
@@ -37,9 +38,33 @@ const Content: React.FC<ContentProps> = ({
   const [modal, setModalState] = useRecoilState<ModalState>(modalState)
 
   const setWelcomeModalViewed = useCallback(async () => {
+    let username = ''
+    // Retrieve public name from the stack
+    const settings = await client
+      .getStackClient()
+      .fetchJSON('GET', '/settings/instance')
+    const publicName = get(settings, 'data.attributes.public_name')
+    if (publicName) {
+      username = publicName
+    }
+    const bodyWelcome = mailService.CreateBodyWelcome(
+      username,
+      window.location.href
+    )
+    const mailData = {
+      mode: 'noreply',
+      subject: '[Ecolyo] - Bienvenu',
+      parts: [
+        {
+          type: 'text/html',
+          body: bodyWelcome,
+        },
+      ],
+    }
+    mailService.SendMail(client, mailData)
     const userProfileService = new UserProfileService(client)
     await userProfileService
-      .updateUserProfile({ haveSeenWelcomeModal: true })
+      .updateUserProfile({ isFirstConnection: false })
       .then(updatedUserProfile => {
         updatedUserProfile && setUserProfile(updatedUserProfile)
       })
@@ -78,7 +103,7 @@ const Content: React.FC<ContentProps> = ({
   return (
     <>
       <WelcomeModal
-        open={!userProfile.haveSeenWelcomeModal}
+        open={userProfile.isFirstConnection}
         handleCloseClick={setWelcomeModalViewed}
       />
       <FeedbackModal
diff --git a/src/components/DateNavigator/DateNavigator.tsx b/src/components/DateNavigator/DateNavigator.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..960ceb67500b0d4787a6e8f3882732e2b910175a
--- /dev/null
+++ b/src/components/DateNavigator/DateNavigator.tsx
@@ -0,0 +1,111 @@
+import React from 'react'
+import { DateTime, DurationObject } from 'luxon'
+import classNames from 'classnames'
+import './datenavigator.scss'
+
+import { TimeStep } from 'enum/timeStep.enum'
+
+import DateNavigatorFormat from 'components/DateNavigator/DateNavigatorFormat'
+import StyledIconbutton from 'components/CommonKit/IconButton/StyledIconButton'
+import LeftArrowIcon from 'assets/icons/ico/left-arrow.svg'
+import RigthArrowIcon from 'assets/icons/ico/right-arrow.svg'
+import DoubleRightArrowIcon from 'assets/icons/ico/double-right-arrow.svg'
+import DoubleLeftArrowIcon from 'assets/icons/ico/double-left-arrow.svg'
+import { isLastDateReached, isLastPeriodReached } from 'utils/date'
+
+interface DateNavigatorProps {
+  timeStep: TimeStep
+  date: DateTime
+  indexDisplayed: number
+  handleClickMove(increment: number): void
+  handleChangeIndex?: (index: number) => void
+  offset?: DurationObject
+}
+
+const DateNavigator = ({
+  timeStep,
+  date,
+  indexDisplayed,
+  handleClickMove,
+  handleChangeIndex,
+  offset,
+}: DateNavigatorProps) => {
+  const refDate = offset ? date.plus(offset) : date
+  const disablePrev = date < DateTime.local(0, 1, 1)
+  const disableNext = isLastDateReached(date, timeStep)
+  const disableNextSlide = isLastPeriodReached(date, timeStep)
+
+  const handleChangePrevIndex = () => {
+    if (!disablePrev && handleChangeIndex) {
+      handleChangeIndex(indexDisplayed + 1)
+    }
+  }
+
+  const handleChangeNextIndex = () => {
+    if (!disableNext && !disableNextSlide && handleChangeIndex) {
+      handleChangeIndex(indexDisplayed - 1)
+    }
+  }
+
+  const handleClickPrev = () => {
+    if (!disablePrev) {
+      handleClickMove(-1)
+    }
+  }
+  const handleClickNext = () => {
+    if (!disableNext) {
+      handleClickMove(1)
+    }
+  }
+
+  return (
+    <div className="date-navigator">
+      {handleChangeIndex && (
+        <div>
+          <StyledIconbutton
+            className="date-navigator-button"
+            onClick={() => handleChangePrevIndex()}
+            icon={DoubleLeftArrowIcon}
+            size={16}
+          />
+        </div>
+      )}
+      <div>
+        <StyledIconbutton
+          className={classNames('date-navigator-button', {
+            ['disable']: disablePrev,
+          })}
+          onClick={() => handleClickPrev()}
+          icon={LeftArrowIcon}
+          size={16}
+        />
+      </div>
+      <DateNavigatorFormat timeStep={timeStep} date={refDate} />
+
+      <div>
+        <StyledIconbutton
+          className={classNames('date-navigator-button', {
+            ['disable']: disableNext,
+          })}
+          onClick={() => handleClickNext()}
+          icon={RigthArrowIcon}
+          size={16}
+        />
+      </div>
+      {handleChangeIndex && (
+        <div>
+          <StyledIconbutton
+            className={classNames('date-navigator-button', {
+              ['disable']: disableNext || disableNextSlide,
+            })}
+            onClick={() => handleChangeNextIndex()}
+            icon={DoubleRightArrowIcon}
+            size={16}
+          />
+        </div>
+      )}
+    </div>
+  )
+}
+
+export default DateNavigator
diff --git a/src/components/ConsumptionVisualizer/DateFormatConsumptionVisualizer.tsx b/src/components/DateNavigator/DateNavigatorFormat.tsx
similarity index 73%
rename from src/components/ConsumptionVisualizer/DateFormatConsumptionVisualizer.tsx
rename to src/components/DateNavigator/DateNavigatorFormat.tsx
index 5d3155d63bf9a45babba95db3aa10467d9e8c891..b6fba3b4239cc978fc7d6d66768d3818db0b4b45 100644
--- a/src/components/ConsumptionVisualizer/DateFormatConsumptionVisualizer.tsx
+++ b/src/components/DateNavigator/DateNavigatorFormat.tsx
@@ -1,18 +1,19 @@
 import React from 'react'
 import { DateTime } from 'luxon'
 import { TimeStep } from 'enum/timeStep.enum'
+import './datenavigatorformat.scss'
 
-interface DateFormatConsumptionVisualizerProps {
+interface DateNavigatorFormatProps {
   timeStep: TimeStep
   date: DateTime
 }
 
-const DateFormatConsumptionVisualizer: React.FC<DateFormatConsumptionVisualizerProps> = ({
+const DateNavigatorFormat: React.FC<DateNavigatorFormatProps> = ({
   timeStep,
   date,
-}: DateFormatConsumptionVisualizerProps) => {
-  const formatDate = (timeStep: TimeStep) => {
-    switch (timeStep) {
+}: DateNavigatorFormatProps) => {
+  const formatDate = (_timeStep: TimeStep) => {
+    switch (_timeStep) {
       case TimeStep.YEAR:
         return [
           date.toLocaleString({
@@ -69,15 +70,19 @@ const DateFormatConsumptionVisualizer: React.FC<DateFormatConsumptionVisualizerP
   const formatedDate = formatDate(timeStep)
 
   return (
-    <div className="cv-date-group">
+    <div className="date-navigator-format">
       {formatedDate[0] && (
-        <div className="cv-date text-16-bold">{formatedDate[0]}</div>
+        <div className="date-navigator-format-date text-16-bold">
+          {formatedDate[0]}
+        </div>
       )}
       {formatedDate[1] && (
-        <div className="cv-date text-15-normal">{formatedDate[1]}</div>
+        <div className="date-navigator-format-date text-15-normal">
+          {formatedDate[1]}
+        </div>
       )}
     </div>
   )
 }
 
-export default DateFormatConsumptionVisualizer
+export default DateNavigatorFormat
diff --git a/src/components/DateNavigator/datenavigator.scss b/src/components/DateNavigator/datenavigator.scss
new file mode 100644
index 0000000000000000000000000000000000000000..fa94a22fecb185ebe8e2a8bcac51ab1c24624565
--- /dev/null
+++ b/src/components/DateNavigator/datenavigator.scss
@@ -0,0 +1,18 @@
+@import '../../styles/base/color';
+@import '../../styles/base/breakpoint';
+
+.date-navigator {
+  display: flex;
+  flex-direction: row;
+  justify-content: space-around;
+  width: 100%;
+  .date-navigator-button {
+    border: none;
+    background: none;
+    color: $soft-grey;
+    text-decoration: underline;
+    &.disable {
+      opacity: 0,
+    }
+  }
+}
\ No newline at end of file
diff --git a/src/components/DateNavigator/datenavigatorformat.scss b/src/components/DateNavigator/datenavigatorformat.scss
new file mode 100644
index 0000000000000000000000000000000000000000..7fd5df2962dbea84e9b8d5f0a44d76c7f0fc3491
--- /dev/null
+++ b/src/components/DateNavigator/datenavigatorformat.scss
@@ -0,0 +1,17 @@
+@import '../../styles/base/color';
+@import '../../styles/base/breakpoint';
+
+
+.date-navigator-format {
+  display: flex;
+  flex-direction: column;
+  width: 38vw;
+  align-items: center;
+  align-self: center;
+  .date-navigator-format-date {
+    color: $grey-bright;
+    &::first-letter {
+      text-transform: uppercase;
+    }
+  }
+}
diff --git a/src/components/Ecogesture/EcogestureList.tsx b/src/components/Ecogesture/EcogestureList.tsx
index e1defba0441a13ee2d6658320b425d4d1f55fc59..4a6bbb36a0bdcad65733b7506bfbe9f29b881063 100644
--- a/src/components/Ecogesture/EcogestureList.tsx
+++ b/src/components/Ecogesture/EcogestureList.tsx
@@ -3,13 +3,22 @@ import { useI18n } from 'cozy-ui/transpiled/react'
 import { useClient } from 'cozy-client'
 
 import { Ecogesture } from 'models'
+import { FluidType } from 'enum/fluid.enum'
 import ChallengeService from 'services/challenge.service'
 
+import GasIcon from 'assets/icons/ico/gas.svg'
+import ElecIcon from 'assets/icons/ico/elec.svg'
+import WaterIcon from 'assets/icons/ico/water.svg'
+import SortIcon from 'assets/icons/ico/sort.svg'
+import CheckIcon from 'assets/icons/ico/check.svg'
+import OrderIcon from 'assets/icons/ico/order.svg'
+
 import StyledChallengeSpinner from 'components/CommonKit/Spinner/StyledChallengeSpinner'
-import StyledClearGreyButton from 'components/CommonKit/Button/StyledClearGreyButton'
 import EcogestureCard from 'components/Ecogesture/EcogestureCard'
 import EcogestureModal from 'components/Ecogesture/EcogestureModal'
 import NegaWattModal from 'components/Ecogesture/NegaWattModal'
+import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
+import StyledStopButton from 'components/CommonKit/Button/StyledStopButton'
 
 const EcogesturesList: React.FC = () => {
   const { t } = useI18n()
@@ -21,6 +30,9 @@ const EcogesturesList: React.FC = () => {
   const [ecogestures, setEcogestures] = useState<Ecogesture[] | null>(null)
   const [openEcogestureModal, setOpenEcogestureModal] = useState(false)
   const [openNegaWattModal, setOpenNegaWattModal] = useState(false)
+  const [filterbyFluid, setfilterbyFluid] = useState<FluidType | null>(null)
+  const [ascendingSort, setascendingSort] = useState(false)
+  const [openDropDown, setopenDropDown] = useState(false)
   const _challengeService = new ChallengeService(client)
 
   const handleClick = (ecogesture: Ecogesture) => {
@@ -40,6 +52,23 @@ const EcogesturesList: React.FC = () => {
     setOpenNegaWattModal(false)
   }
 
+  const toggleDropDown = () => {
+    setopenDropDown(prev => !prev)
+  }
+  const toggleFilter = (fluid: FluidType | null) => {
+    if (fluid === null) {
+      setfilterbyFluid(null)
+    } else if (filterbyFluid === fluid) {
+      setfilterbyFluid(null)
+    } else {
+      setfilterbyFluid(fluid)
+    }
+    toggleDropDown()
+  }
+  const toggleSort = () => {
+    setascendingSort(prev => !prev)
+  }
+
   useEffect(() => {
     let subscribed = true
     async function loadEcogestures() {
@@ -57,6 +86,7 @@ const EcogesturesList: React.FC = () => {
       }
     }
     loadEcogestures()
+
     return () => {
       subscribed = false
     }
@@ -75,23 +105,176 @@ const EcogesturesList: React.FC = () => {
             handleCloseClick={handleNegaWattCloseClick}
           />
           <div className="negawatt-button-content">
-            <StyledClearGreyButton
-              color="secondary"
-              onClick={handleNegaWattClick}
-              fullWidth={true}
-            >
-              {t('NEGAWATT.QUESTION')}
-            </StyledClearGreyButton>
+            <div className="filters text-16-normal">
+              <div className="filter-button" onClick={() => toggleDropDown()}>
+                <StyledStopButton color="secondary" className="button">
+                  <StyledIcon icon={SortIcon} size={24} />
+                  <span
+                    className={
+                      openDropDown ? 'ecogestures opened' : 'ecogestures'
+                    }
+                  >
+                    {filterbyFluid === null
+                      ? t('ECOGESTURE.FILTER_TITLE')
+                      : t('FLUID.' + FluidType[filterbyFluid] + '.LABEL')}
+                  </span>
+                </StyledStopButton>
+              </div>
+              <div className={openDropDown ? 'dropdown opened' : 'dropdown'}>
+                <div
+                  className={
+                    filterbyFluid === null ? 'filter filter-active' : 'filter'
+                  }
+                  onClick={() => {
+                    toggleFilter(null)
+                  }}
+                >
+                  {t('ECOGESTURE.FILTER_TITLE')}
+                  <StyledIcon
+                    className={
+                      filterbyFluid === null ? 'active checkicon' : 'checkicon'
+                    }
+                    icon={CheckIcon}
+                    size={18}
+                  />
+                </div>
+
+                <div
+                  onClick={() => {
+                    toggleFilter(FluidType.ELECTRICITY)
+                  }}
+                  className={
+                    filterbyFluid === FluidType.ELECTRICITY
+                      ? 'filter filter-active'
+                      : 'filter'
+                  }
+                >
+                  <StyledIcon
+                    className={
+                      filterbyFluid === FluidType.ELECTRICITY
+                        ? 'icon'
+                        : 'active icon'
+                    }
+                    icon={ElecIcon}
+                    size={30}
+                  />
+                  <span>{t(`FLUID.ELECTRICITY.LABEL`)}</span>
+                  <StyledIcon
+                    className={
+                      filterbyFluid === FluidType.ELECTRICITY
+                        ? 'active checkicon'
+                        : 'checkicon'
+                    }
+                    icon={CheckIcon}
+                    size={18}
+                  />
+                </div>
+                <div
+                  onClick={() => {
+                    toggleFilter(FluidType.WATER)
+                  }}
+                  className={
+                    filterbyFluid === FluidType.WATER
+                      ? 'filter filter-active'
+                      : 'filter'
+                  }
+                >
+                  <StyledIcon
+                    className={
+                      filterbyFluid === FluidType.WATER ? 'icon' : 'active icon'
+                    }
+                    icon={WaterIcon}
+                    size={30}
+                  />
+                  <span> {t(`FLUID.WATER.LABEL`)}</span>
+                  <StyledIcon
+                    className={
+                      filterbyFluid === FluidType.WATER
+                        ? 'active checkicon'
+                        : 'checkicon'
+                    }
+                    icon={CheckIcon}
+                    size={18}
+                  />
+                </div>
+                <div
+                  onClick={() => {
+                    toggleFilter(FluidType.GAS)
+                  }}
+                  className={
+                    filterbyFluid === FluidType.GAS
+                      ? 'filter filter-active'
+                      : 'filter'
+                  }
+                >
+                  <StyledIcon
+                    className={
+                      filterbyFluid === FluidType.GAS ? 'icon' : 'active icon'
+                    }
+                    icon={GasIcon}
+                    size={30}
+                  />
+                  <span> {t(`FLUID.GAS.LABEL`)}</span>
+                  <StyledIcon
+                    className={
+                      filterbyFluid === FluidType.GAS
+                        ? 'active checkicon'
+                        : 'checkicon'
+                    }
+                    icon={CheckIcon}
+                    size={18}
+                  />
+                </div>
+              </div>
+
+              <div
+                className="order-container"
+                onClick={() => {
+                  toggleSort()
+                }}
+              >
+                <div className="order-button">
+                  <StyledIcon icon={OrderIcon} size={28} />
+                </div>
+              </div>
+              <div className="ng-question" onClick={handleNegaWattClick}>
+                {t('NEGAWATT.QUESTION')}
+              </div>
+            </div>
           </div>
           <div className="ecogesture-content">
-            {ecogestures.map((ecogesture, index) => (
-              <div key={index} className="ecogesture-list-item">
-                <EcogestureCard
-                  ecogesture={ecogesture}
-                  handleClick={handleClick}
-                />
-              </div>
-            ))}
+            {ecogestures && filterbyFluid !== null
+              ? ecogestures
+                  .filter(ecogesture =>
+                    ecogesture.fluidTypes.includes(filterbyFluid)
+                  )
+                  .sort(
+                    ascendingSort
+                      ? (a, b) => a.nwh - b.nwh
+                      : (a, b) => b.nwh - a.nwh
+                  )
+                  .map((ecogesture, index) => (
+                    <div key={index} className="ecogesture-list-item">
+                      <EcogestureCard
+                        ecogesture={ecogesture}
+                        handleClick={handleClick}
+                      />
+                    </div>
+                  ))
+              : ecogestures
+                  .sort(
+                    ascendingSort
+                      ? (a, b) => a.nwh - b.nwh
+                      : (a, b) => b.nwh - a.nwh
+                  )
+                  .map((ecogesture, index) => (
+                    <div key={index} className="ecogesture-list-item">
+                      <EcogestureCard
+                        ecogesture={ecogesture}
+                        handleClick={handleClick}
+                      />
+                    </div>
+                  ))}
           </div>
         </>
       )}
diff --git a/src/components/Feedback/FeedbackModal.tsx b/src/components/Feedback/FeedbackModal.tsx
index 12d5a33fc85740d259152cdb175212db20434ff6..81d960c01c40dadd170587096e5bede265cb3145 100644
--- a/src/components/Feedback/FeedbackModal.tsx
+++ b/src/components/Feedback/FeedbackModal.tsx
@@ -87,7 +87,6 @@ const FeedbackModal: React.FC<FeedbackModalProps> = ({
       }
       try {
         const jobCollection = client.collection('io.cozy.jobs')
-        console.log(jobCollection)
         await jobCollection.create('sendmail', mailData)
       } catch (e) {
         // eslint-disable-next-line no-console
diff --git a/src/components/FluidChart/FluidChartSlide.tsx b/src/components/FluidChart/FluidChartSlide.tsx
index 7bb66fb103e37e54e8d3c99e7116bae145e2b076..0fcef191a450843652ad11cadd9a791125a071a5 100644
--- a/src/components/FluidChart/FluidChartSlide.tsx
+++ b/src/components/FluidChart/FluidChartSlide.tsx
@@ -87,8 +87,23 @@ const FluidChartSlide: React.FC<FluidChartSlideProps> = ({
         // Full month + last day of the previous month for TimeStep.HALF_AN_HOUR
 
         const maxTimePeriod = {
-          startDate: lastSlideDate.startOf('month'),
-          endDate: lastSlideDate.endOf('month'),
+          startDate:
+            timeStep === TimeStep.HALF_AN_HOUR
+              ? lastSlideDate.startOf('month')
+              : lastSlideDate.startOf('week').startOf('month').weekday === 1
+              ? lastSlideDate.startOf('week').startOf('month')
+              : lastSlideDate
+                  .startOf('week')
+                  .startOf('month')
+                  .plus({ days: +7 })
+                  .startOf('week'),
+          endDate:
+            timeStep === TimeStep.HALF_AN_HOUR
+              ? lastSlideDate.endOf('month')
+              : lastSlideDate.startOf('week').month !==
+                lastSlideDate.endOf('week').month
+              ? lastSlideDate.endOf('week')
+              : lastSlideDate.endOf('month').endOf('week'),
         }
 
         const compareMaxTimePeriod = maxTimePeriod
diff --git a/src/components/Home/HomeIndicators.tsx b/src/components/Home/HomeIndicators.tsx
index 4fc26e07444ae34f63a9ccf923e52268da5f7e86..cbaaaf980f92ded42dd359fd3cd406d552564f74 100644
--- a/src/components/Home/HomeIndicators.tsx
+++ b/src/components/Home/HomeIndicators.tsx
@@ -10,7 +10,7 @@ import TimePeriodService from 'services/timePeriod.service'
 import ConsumptionService from 'services/consumption.service'
 import PerformanceIndicatorService from 'services/performanceIndicator.service'
 import ConfigService from 'services/fluidConfig.service'
-import { convertDateByTimeStep } from 'utils/date'
+import { convertDateToShortDateString } from 'utils/date'
 
 import PerformanceIndicatorContent from 'components/PerformanceIndicator/PerformanceIndicatorContent'
 import FluidPerformanceIndicator from 'components/PerformanceIndicator/FluidPerformanceIndicator'
@@ -82,7 +82,7 @@ const HomeIndicators: React.FC<HomeIndicatorsProps> = ({
           <div className="fi-content">
             <div className="fi-header text-14-normal-uppercase">
               {t('COMMON.CONSO_CARDS_LABEL')}{' '}
-              {convertDateByTimeStep(currentTimePeriod, timeStep, true)}
+              {convertDateToShortDateString(currentTimePeriod, timeStep, true)}
             </div>
             <PerformanceIndicatorContent
               performanceIndicator={performanceIndicatorService.aggregatePerformanceIndicators(
@@ -93,7 +93,11 @@ const HomeIndicators: React.FC<HomeIndicatorsProps> = ({
             <div>
               <span className="text-16-normal-uppercase details-title">
                 {t('INDICATOR.DETAIL')}
-                {convertDateByTimeStep(currentTimePeriod, timeStep, true)}
+                {convertDateToShortDateString(
+                  currentTimePeriod,
+                  timeStep,
+                  true
+                )}
               </span>
               {fluidConfig.map((fluid, index) => {
                 return fluidTypes.includes(fluid.fluidTypeId) ? (
diff --git a/src/components/Navbar/Navbar.tsx b/src/components/Navbar/Navbar.tsx
index 7850d048e0a7884822f9126856141c4fdaf0f318..1f6b054e29d43bcb40cd5237ede7904d6b0a1607 100644
--- a/src/components/Navbar/Navbar.tsx
+++ b/src/components/Navbar/Navbar.tsx
@@ -10,15 +10,21 @@ import ParameterIconOn from 'assets/icons/tabbar/parametre/parametre-on.svg'
 import ParameterIconOff from 'assets/icons/tabbar/parametre/parametre-off.svg'
 import EcogestesIconOn from 'assets/icons/tabbar/ecogeste/ecogeste-on.svg'
 import EcogestesIconOff from 'assets/icons/tabbar/ecogeste/ecogeste-off.svg'
+import ReportIconOn from 'assets/icons/tabbar/bilan/bilan-on.svg'
+import ReportIconOff from 'assets/icons/tabbar/bilan/bilan-off.svg'
 import logoGrandLyon from 'assets/icons/tabbar/grand-lyon.svg'
 import logoTiga from 'assets/png/logo-TIGA.png'
 import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
 import { useRecoilValue } from 'recoil'
-import { challengeNotificationState } from 'atoms/notification.state'
+import {
+  challengeNotificationState,
+  reportNotificationState,
+} from 'atoms/notification.state'
 
 export const Navbar = () => {
   const { t } = useI18n()
   const challengeNotification = useRecoilValue(challengeNotificationState)
+  const reportNotification = useRecoilValue(reportNotificationState)
 
   return (
     <aside className="o-sidebar">
@@ -41,9 +47,7 @@ export const Navbar = () => {
               className="c-nav-link"
               activeClassName="is-active"
             >
-              {challengeNotification && (
-                <div className="nb-challenge-notif">1</div>
-              )}
+              {challengeNotification && <div className="nb-notif">1</div>}
               <StyledIcon className="c-nav-icon off" icon={ChallengeIconOff} />
               <StyledIcon className="c-nav-icon on" icon={ChallengeIconOn} />
               {t('Nav.challenges')}
@@ -60,6 +64,18 @@ export const Navbar = () => {
               {t('Nav.ECOGESTURES')}
             </NavLink>
           </li>
+          <li className="c-nav-item">
+            <NavLink
+              to="/report"
+              className="c-nav-link"
+              activeClassName="is-active"
+            >
+              {reportNotification && <div className="nb-notif">1</div>}
+              <StyledIcon className="c-nav-icon off" icon={ReportIconOff} />
+              <StyledIcon className="c-nav-icon on" icon={ReportIconOn} />
+              {t('Nav.report')}
+            </NavLink>
+          </li>
           <li className="c-nav-item">
             <NavLink
               to="/options"
diff --git a/src/components/Options/ReportOptions.tsx b/src/components/Options/ReportOptions.tsx
index 4ba49f8528cfa5886b6ae2c15c96ed373c81d841..4c3077ad4dc9c4d241f60398806a6712cd495cf7 100644
--- a/src/components/Options/ReportOptions.tsx
+++ b/src/components/Options/ReportOptions.tsx
@@ -16,11 +16,20 @@ const ReportOptions: React.FC = () => {
   const updateUserProfileReport = useCallback(
     async (value: boolean) => {
       const userProfileService = new UserProfileService(client)
-      await userProfileService
-        .updateUserProfile({ report: value })
-        .then(updatedUserProfile => {
-          updatedUserProfile && setUserProfile(updatedUserProfile)
-        })
+      const reportAttributes = {
+        sendReportNotification: value,
+        haveSeenLastReport: userProfile.report.haveSeenLastReport,
+        monthlyReportDate: userProfile.report.monthlyReportDate,
+      }
+      try {
+        await userProfileService
+          .updateUserProfile({ report: reportAttributes })
+          .then(updatedUserProfile => {
+            updatedUserProfile && setUserProfile(updatedUserProfile)
+          })
+      } catch (err) {
+        console.log(err)
+      }
     },
     [setUserProfile]
   )
@@ -32,8 +41,8 @@ const ReportOptions: React.FC = () => {
   }
 
   return (
-    <div className="report-root">
-      <div className="report-content">
+    <div className="report-option-root">
+      <div className="report-option-content">
         <div className="head text-14-normal-uppercase">
           {t('PROFILE.REPORT.TITLE')}
         </div>
@@ -46,7 +55,10 @@ const ReportOptions: React.FC = () => {
               value="true"
               onChange={handleChange}
               checked={
-                userProfile && userProfile.report === true ? true : false
+                userProfile &&
+                userProfile.report.sendReportNotification === true
+                  ? true
+                  : false
               }
             ></input>
             <label htmlFor="monthly"> {t('PROFILE.REPORT.MONTHLY')}</label>
@@ -59,7 +71,10 @@ const ReportOptions: React.FC = () => {
               value="false"
               onChange={handleChange}
               checked={
-                userProfile && userProfile.report === false ? true : false
+                userProfile &&
+                userProfile.report.sendReportNotification === false
+                  ? true
+                  : false
               }
             ></input>
             <label htmlFor="never"> {t('PROFILE.REPORT.NEVER')}</label>
diff --git a/src/components/Report/ChallengeItemReport.tsx b/src/components/Report/ChallengeItemReport.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..1adfc748381fb016f7337d8fe70dbcbf447a8ccc
--- /dev/null
+++ b/src/components/Report/ChallengeItemReport.tsx
@@ -0,0 +1,75 @@
+import React, { useEffect, useState } from 'react'
+import './challengeitemreport.scss'
+import { NavLink } from 'react-router-dom'
+
+import { UserChallenge } from 'models'
+
+import StyledChallengeCard from 'components/CommonKit/Card/StyledChallengeCard'
+import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
+import BlackArrowIcon from 'assets/icons/ico/black-arrow.svg'
+
+interface ChallengeItemReportProps {
+  userChallenge: UserChallenge
+}
+
+const ChallengeItemReport: React.FC<ChallengeItemReportProps> = ({
+  userChallenge,
+}: ChallengeItemReportProps) => {
+  const [badgeSource, setBadgeSource] = useState<string>([])
+
+  async function importRightBadge(id: string, badgeStatus: number) {
+    if (badgeStatus !== -1) {
+      // Les png doivent être au format idchallenge-badgestate.png
+      const importedBadge =
+        id === 'CHA00000001'
+          ? await import(
+              /* webpackMode: "eager" */ `assets/png/badges/${id}-1.png`
+            )
+          : await import(
+              /* webpackMode: "eager" */ `assets/png/badges/${id}-${badgeStatus}.png`
+            )
+      setBadgeSource(importedBadge.default)
+    }
+  }
+
+  useEffect(() => {
+    if (userChallenge && userChallenge.challengeType) {
+      importRightBadge(
+        userChallenge.challengeType.id,
+        userChallenge.badge != null ? userChallenge.badge : 0
+      )
+    }
+  }, [userChallenge.id])
+
+  return (
+    <NavLink
+      className="challenge-card-link"
+      to={{
+        pathname: `challenges/finished`,
+        state: userChallenge,
+      }}
+    >
+      <StyledChallengeCard displayBorder={true}>
+        <div className="challenge-card">
+          <div className="challenge-card-content-left">
+            <div className="challenge-card-content-badge">
+              {badgeSource && (
+                <img className="cp-win-badge" src={badgeSource} width={72} />
+              )}
+            </div>
+            <div className="challenge-card-content-title text-18-normal">
+              {userChallenge.challengeType
+                ? userChallenge.challengeType.title
+                : null}
+            </div>
+          </div>
+          <div className="challenge-card-content-right">
+            <StyledIcon icon={BlackArrowIcon} size={18} />
+          </div>
+        </div>
+      </StyledChallengeCard>
+    </NavLink>
+  )
+}
+
+export default ChallengeItemReport
diff --git a/src/components/Report/ChallengeReport.tsx b/src/components/Report/ChallengeReport.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..578f0d0f1d65661e286fb2bd8bcc0f027c1c73a0
--- /dev/null
+++ b/src/components/Report/ChallengeReport.tsx
@@ -0,0 +1,95 @@
+import React, { useEffect, useState } from 'react'
+import './challengereport.scss'
+import { NavLink } from 'react-router-dom'
+
+import { UserChallenge } from 'models'
+
+import StyledChallengeCard from 'components/CommonKit/Card/StyledChallengeCard'
+import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
+import BlackArrowIcon from 'assets/icons/ico/black-arrow.svg'
+
+interface ChallengeReportProps {
+  userChallenges: UserChallenge[]
+}
+
+const ChallengeReport: React.FC<ChallengeReportProps> = ({
+  userChallenges,
+}: ChallengeReportProps) => {
+  const [badgeSources, setBadgeSources] = useState<string[]>([])
+
+  async function importRightBadge(
+    id: string,
+    badgeStatus: number,
+    index: number
+  ) {
+    if (badgeStatus !== -1) {
+      // Les png doivent être au format idchallenge-badgestate.png
+      const importedBadge =
+        id === 'CHA00000001'
+          ? await import(
+              /* webpackMode: "eager" */ `assets/png/badges/${id}-1.png`
+            )
+          : await import(
+              /* webpackMode: "eager" */ `assets/png/badges/${id}-${badgeStatus}.png`
+            )
+      const updatedList = [...badgeSources]
+      updatedList[index] = importedBadge.default
+      setBadgeSources(updatedList)
+    }
+  }
+
+  useEffect(() => {
+    userChallenges.forEach((userChallenge, index) => {
+      if (userChallenge.challengeType && userChallenge.badge) {
+        importRightBadge(
+          userChallenge.challengeType.id,
+          userChallenge.badge,
+          index
+        )
+      }
+    })
+  }, [])
+
+  return (
+    <div className="challenge-root">
+      {userChallenges.map((userChallenge, index) => {
+        return (
+          <NavLink
+            key={index}
+            className="challenge-card-link"
+            to={{
+              pathname: `challenges/finished`,
+              state: userChallenge,
+            }}
+          >
+            <StyledChallengeCard displayBorder={true}>
+              <div className="challenge-card">
+                <div className="challenge-card-content-left">
+                  <div className="challenge-card-content-badge">
+                    {badgeSources && badgeSources[index] && (
+                      <img
+                        className="cp-win-badge"
+                        src={badgeSources[index]}
+                        width={72}
+                      />
+                    )}
+                  </div>
+                  <div className="challenge-card-content-title text-18-normal">
+                    {userChallenge.challengeType
+                      ? userChallenge.challengeType.title
+                      : null}
+                  </div>
+                </div>
+                <div className="challenge-card-content-right">
+                  <StyledIcon icon={BlackArrowIcon} size={18} />
+                </div>
+              </div>
+            </StyledChallengeCard>
+          </NavLink>
+        )
+      })}
+    </div>
+  )
+}
+
+export default ChallengeReport
diff --git a/src/components/Report/ChartReport.tsx b/src/components/Report/ChartReport.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..8c9063eb0a358f7eca6ded9bbc2fa385446c7552
--- /dev/null
+++ b/src/components/Report/ChartReport.tsx
@@ -0,0 +1,259 @@
+import React, { useState, useEffect, useRef } from 'react'
+import { scaleBand, ScaleBand, scaleLinear, ScaleLinear } from 'd3-scale'
+import { detect } from 'detect-browser'
+import './chartreport.scss'
+
+import { Dataload } from 'models/dataload.model'
+import { formatNumberValues } from 'utils/utils'
+
+interface ChartReportProps {
+  chartData: Dataload[]
+}
+
+const ChartReport: React.FC<ChartReportProps> = ({
+  chartData,
+}: ChartReportProps) => {
+  const divRef = useRef(null)
+  const browser = detect()
+
+  const [width, setWidth] = useState(600)
+  const height = 225
+  const marginTop = 10
+  const marginBottom = 50
+
+  const topRoundedRect = (
+    x: number,
+    y: number,
+    width: number,
+    height: number
+  ) => {
+    const radius = height > 4 ? 4 : height / 4
+    return (
+      'M' +
+      x +
+      ',' +
+      (y + radius) +
+      ' a' +
+      radius +
+      ',' +
+      radius +
+      ' 0 0 1 ' +
+      radius +
+      ',' +
+      -radius +
+      'h' +
+      (width - 2 * radius) +
+      'a' +
+      radius +
+      ',' +
+      radius +
+      ' 0 0 1 ' +
+      radius +
+      ',' +
+      radius +
+      'v' +
+      (height - radius) +
+      'h' +
+      -width +
+      'z'
+    )
+  }
+
+  const xScale: ScaleBand<string> = scaleBand()
+    .domain(['0', '1', '2', '3'])
+    .range([0, width])
+    .padding(0.2)
+
+  const yScale: ScaleLinear<number, number> = scaleLinear()
+    .domain([0, Math.max(...chartData.map(d => d.value))])
+    .range([height - marginTop - marginBottom, 0])
+
+  useEffect(() => {
+    function handleResize() {
+      if (divRef.current) {
+        setWidth(divRef.current.clientWidth)
+      }
+    }
+    handleResize()
+    window.addEventListener('resize', handleResize)
+    return () => window.removeEventListener('resize', handleResize)
+  }, [])
+
+  return (
+    <div ref={divRef} className="chart-root">
+      <svg width={width} height={height}>
+        <g
+          className="axis y"
+          transform={`translate(0, ${height - marginBottom})`}
+        >
+          <g className="tick" opacity="1" transform="translate(0,0)">
+            <line stroke="currentColor" x2={width}></line>
+          </g>
+          <g className="tick" opacity="1" transform="translate(0,-70)">
+            <line stroke="currentColor" x2={width}></line>
+          </g>
+          <g className="tick" opacity="1" transform="translate(0,-140)">
+            <line stroke="currentColor" x2={width}></line>
+          </g>
+        </g>
+        <g transform={`translate(0,${marginTop})`}>
+          <g
+            transform={`translate(${xScale('0')}, ${height -
+              marginTop -
+              marginBottom * 2})`}
+          >
+            <text y="10" dy="0.71em" className="value-text text-16-normal">
+              {`${
+                chartData[0].value >= 0
+                  ? formatNumberValues(chartData[0].value)
+                  : '-,--'
+              } €`}
+            </text>
+          </g>
+          <g
+            transform={`translate(${xScale('1')}, ${yScale(
+              chartData[0].value
+            )})`}
+          >
+            <defs>
+              <linearGradient
+                id="gradient"
+                className="bar-MULTIFLUID"
+                x1="0"
+                x2="0"
+                y1="0"
+                y2="1"
+              >
+                <stop id="stop-color-1" offset="0%" />
+                <stop id="stop-color-2" offset="100%" />
+              </linearGradient>
+            </defs>
+            <path
+              d={topRoundedRect(
+                0,
+                0,
+                xScale.bandwidth(),
+                height -
+                  yScale(chartData[0].value >= 0 ? chartData[0].value : 0) -
+                  marginBottom -
+                  marginTop
+              )}
+              fill="url(#gradient)"
+              className={`bar-MULTIFLUID disabled bounce-${
+                browser && browser.name !== 'edge' ? '1' : '3'
+              } delay`}
+            />
+          </g>
+          <g
+            transform={`translate(${xScale('2')}, ${yScale(
+              chartData[1].value
+            )})`}
+          >
+            <defs>
+              <linearGradient
+                id="gradient"
+                className={`bar-MULTIFLUID selected disabled `}
+                x1="0"
+                x2="0"
+                y1="0"
+                y2="1"
+              >
+                <stop id="stop-color-1" offset="0%" />
+                <stop id="stop-color-2" offset="100%" />
+              </linearGradient>
+            </defs>
+            <path
+              d={topRoundedRect(
+                0,
+                0,
+                xScale.bandwidth(),
+                height -
+                  yScale(chartData[1].value >= 0 ? chartData[1].value : 0) -
+                  marginBottom -
+                  marginTop
+              )}
+              fill="url(#gradient)"
+              className={`bar-MULTIFLUID selected disabled bounce-${
+                browser && browser.name !== 'edge' ? '1' : '3'
+              } delay--0`}
+            />
+          </g>
+          <g
+            transform={`translate(${xScale('3')}, ${height -
+              marginTop -
+              marginBottom * 2})`}
+          >
+            <text
+              y="10"
+              dy="0.71em"
+              className="value-text selected text-16-normal"
+            >
+              {`${
+                chartData[1].value >= 0
+                  ? formatNumberValues(chartData[1].value)
+                  : '-,--'
+              } €`}
+            </text>
+          </g>
+        </g>
+        <g
+          className="axis x"
+          transform={`translate(0, ${height - marginBottom})`}
+        >
+          <g
+            className="tick"
+            opacity="1"
+            transform={`translate(${xScale('1') + xScale.bandwidth() / 2}, 0)`}
+          >
+            <text y="10" dy="0.71em">
+              <tspan
+                className="tick-text chart-ticks-x-text"
+                x="0"
+                textAnchor="middle"
+              >
+                {chartData[0].date
+                  .setLocale('fr-FR')
+                  .toLocaleString({ month: 'long' })}
+              </tspan>
+              <tspan
+                className="tick-text chart-ticks-x-text"
+                x="0"
+                dy="1.2em"
+                textAnchor="middle"
+              >
+                {chartData[0].date.year}
+              </tspan>
+            </text>
+          </g>
+          <g
+            className="tick"
+            opacity="1"
+            transform={`translate(${xScale('2') + xScale.bandwidth() / 2}, 0)`}
+          >
+            <text y="10" dy="0.71em">
+              <tspan
+                className="tick-text tick-text-selected chart-ticks-x-text"
+                x="0"
+                textAnchor="middle"
+              >
+                {chartData[1].date
+                  .setLocale('fr-FR')
+                  .toLocaleString({ month: 'long' })}
+              </tspan>
+              <tspan
+                className="tick-text tick-text-selected chart-ticks-x-text"
+                x="0"
+                dy="1.2em"
+                textAnchor="middle"
+              >
+                {chartData[1].date.year}
+              </tspan>
+            </text>
+          </g>
+        </g>
+      </svg>
+    </div>
+  )
+}
+
+export default ChartReport
diff --git a/src/components/Report/MonthlyReport.tsx b/src/components/Report/MonthlyReport.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..5097615aaa13700d6941e8b38c51ee7798329e52
--- /dev/null
+++ b/src/components/Report/MonthlyReport.tsx
@@ -0,0 +1,183 @@
+import React, { useEffect, useState } from 'react'
+import { useI18n } from 'cozy-ui/transpiled/react'
+import { useClient } from 'cozy-client'
+import { useRecoilValue } from 'recoil'
+import { DateTime } from 'luxon'
+import './monthlyreport.scss'
+
+import { TimeStep } from 'enum/timeStep.enum'
+import { fluidTypeState } from 'atoms/fluidState.state'
+import { userProfileState } from 'atoms/userProfile.state'
+import { PerformanceIndicator, UserChallenge } from 'models'
+import ConsumptionService from 'services/consumption.service'
+import PerformanceIndicatorService from 'services/performanceIndicator.service'
+import ConfigService from 'services/fluidConfig.service'
+import ChallengeService from 'services/challenge.service'
+import { convertDateToMonthString } from 'utils/date'
+
+import PerformanceIndicatorContent from 'components/PerformanceIndicator/PerformanceIndicatorContent'
+import FluidPerformanceIndicator from 'components/PerformanceIndicator/FluidPerformanceIndicator'
+import DateNavigator from 'components/DateNavigator/DateNavigator'
+import ChartReport from 'components/Report/ChartReport'
+import ChallengeReport from 'components/Report/ChallengeReport'
+
+const MonthlyReport: React.FC = () => {
+  const { t } = useI18n()
+  const client = useClient()
+  const fluidTypes = useRecoilValue(fluidTypeState)
+  const userProfile = useRecoilValue(userProfileState)
+  const [reportDate, setReportDate] = useState<DateTime>(
+    userProfile.report.monthlyReportDate
+  )
+  const [performanceIndicators, setPerformanceIndicators] = useState<
+    PerformanceIndicator[]
+  >([])
+  const [
+    aggregatedPerformanceIndicators,
+    setAggregatedPerformanceIndicators,
+  ] = useState<PerformanceIndicator>({
+    value: 0,
+    compareValue: 0,
+    percentageVariation: 0,
+  })
+  const [userChallenges, setUserChallenges] = useState<UserChallenge[] | null>(
+    null
+  )
+  const [isLoaded, setIsLoaded] = useState<boolean>(false)
+
+  const consumptionService = new ConsumptionService(client)
+  const performanceIndicatorService = new PerformanceIndicatorService()
+  const challengeService = new ChallengeService(client)
+  const configService = new ConfigService()
+  const fluidConfig = configService.getFluidConfig()
+  const timeStep = TimeStep.MONTH
+
+  const handleClickMove = (increment: number) => {
+    const newDate = reportDate.plus({ month: increment })
+    setReportDate(newDate)
+  }
+
+  useEffect(() => {
+    let subscribed = true
+    async function populateData() {
+      const periods = {
+        timePeriod: {
+          startDate: reportDate.minus({ month: 1 }).startOf('month'),
+          endDate: reportDate.minus({ month: 1 }).endOf('month'),
+        },
+        comparisonTimePeriod: {
+          startDate: reportDate.minus({ month: 2 }).startOf('month'),
+          endDate: reportDate.minus({ month: 2 }).endOf('month'),
+        },
+      }
+      const fetchedPerformanceIndicators = await consumptionService.getPerformanceIndicators(
+        periods.timePeriod,
+        timeStep,
+        fluidTypes,
+        periods.comparisonTimePeriod
+      )
+      const userChallengesDone = await challengeService.getFinishedUserChallengesOnMonth(
+        reportDate.minus({ month: 1 })
+      )
+      if (subscribed) {
+        if (fetchedPerformanceIndicators) {
+          setPerformanceIndicators(fetchedPerformanceIndicators)
+          setAggregatedPerformanceIndicators(
+            performanceIndicatorService.aggregatePerformanceIndicators(
+              fetchedPerformanceIndicators
+            )
+          )
+        }
+        if (userChallengesDone) {
+          setUserChallenges(userChallengesDone)
+        }
+        setIsLoaded(true)
+      }
+    }
+    populateData()
+    return () => {
+      subscribed = false
+    }
+  }, [timeStep, fluidTypes, reportDate])
+
+  return (
+    <>
+      {isLoaded ? (
+        <div>
+          <div className="report-root black">
+            <div className="report-content">
+              <DateNavigator
+                timeStep={timeStep}
+                date={reportDate}
+                handleClickMove={handleClickMove}
+                indexDisplayed={0}
+                offset={{ month: -1 }}
+              />
+              <div>
+                <div className="report-header text-16-normal-uppercase">
+                  {t('report.reportDate')}{' '}
+                  {convertDateToMonthString(reportDate.plus({ month: -1 }))}
+                </div>
+                <PerformanceIndicatorContent
+                  performanceIndicator={aggregatedPerformanceIndicators}
+                  timeStep={timeStep}
+                />
+                <ChartReport
+                  chartData={[
+                    {
+                      date: reportDate.plus({ month: -2 }),
+                      value: aggregatedPerformanceIndicators.compareValue
+                        ? aggregatedPerformanceIndicators.compareValue
+                        : -1,
+                    },
+                    {
+                      date: reportDate.plus({ month: -1 }),
+                      value: aggregatedPerformanceIndicators.value
+                        ? aggregatedPerformanceIndicators.value
+                        : -1,
+                    },
+                  ]}
+                />
+              </div>
+            </div>
+          </div>
+          <div className="report-root">
+            <div className="report-content">
+              <div>
+                <div className="report-header text-16-normal-uppercase ">
+                  {t('report.detail')}
+                  {convertDateToMonthString(reportDate.plus({ month: -1 }))}
+                </div>
+                {fluidConfig.map((fluid, index) => {
+                  return fluidTypes.includes(fluid.fluidTypeId) ? (
+                    <FluidPerformanceIndicator
+                      key={index}
+                      fluidType={fluid.fluidTypeId}
+                      performanceIndicator={
+                        performanceIndicators[fluid.fluidTypeId]
+                      }
+                    />
+                  ) : null
+                })}
+              </div>
+              <div>
+                <div className="report-header text-16-normal-uppercase ">
+                  {t('report.challenge') +
+                    ' ' +
+                    reportDate
+                      .plus({ month: -1 })
+                      .toLocaleString({ locale: 'fr-FR', month: 'long' })}
+                </div>
+                {userChallenges && (
+                  <ChallengeReport userChallenges={userChallenges} />
+                )}
+              </div>
+            </div>
+          </div>
+        </div>
+      ) : null}
+    </>
+  )
+}
+
+export default MonthlyReport
diff --git a/src/components/Report/ReportView.tsx b/src/components/Report/ReportView.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..30c7b154d734ede145ffadb8876d746baf0774c5
--- /dev/null
+++ b/src/components/Report/ReportView.tsx
@@ -0,0 +1,67 @@
+import React, { useState, useEffect } from 'react'
+import { useClient } from 'cozy-client'
+import { useRecoilState } from 'recoil'
+
+import { ReportAttributes, UserProfile } from 'models'
+import { userProfileState } from 'atoms/userProfile.state'
+import UserProfileService from 'services/userProfile.service'
+
+import CozyBar from 'components/Header/CozyBar'
+import Header from 'components/Header/Header'
+import Content from 'components/Content/Content'
+import MonthlyReport from 'components/Report/MonthlyReport'
+
+const ReportView: React.FC = () => {
+  const client = useClient()
+  const [userProfile, setUserProfile] = useRecoilState<UserProfile>(
+    userProfileState
+  )
+  const [headerHeight, setHeaderHeight] = useState<number>(0)
+  const defineHeaderHeight = (height: number) => {
+    setHeaderHeight(height)
+  }
+
+  useEffect(() => {
+    let subscribed = true
+    const updateUserProfileReport = async () => {
+      if (!userProfile.report.haveSeenLastReport) {
+        const reportAttributes: ReportAttributes = {
+          sendReportNotification: userProfile.report.sendReportNotification,
+          haveSeenLastReport: true,
+          monthlyReportDate: userProfile.report.monthlyReportDate,
+        }
+        const userProfileService = new UserProfileService(client)
+        try {
+          await userProfileService
+            .updateUserProfile({ report: reportAttributes })
+            .then(updatedUserProfile => {
+              subscribed &&
+                updatedUserProfile &&
+                setUserProfile(updatedUserProfile)
+            })
+        } catch (err) {
+          console.log(err)
+        }
+      }
+    }
+    updateUserProfileReport()
+    return () => {
+      subscribed = false
+    }
+  }, [])
+
+  return (
+    <>
+      <CozyBar titleKey={'report.viewTitle'} />
+      <Header
+        setHeaderHeight={defineHeaderHeight}
+        desktopTitleKey={'report.viewTitle'}
+      ></Header>
+      <Content height={headerHeight}>
+        <MonthlyReport />
+      </Content>
+    </>
+  )
+}
+
+export default ReportView
diff --git a/src/components/Report/challengeitemreport.scss b/src/components/Report/challengeitemreport.scss
new file mode 100644
index 0000000000000000000000000000000000000000..515b667acdd5da97c8cfe34de98032a6149b9827
--- /dev/null
+++ b/src/components/Report/challengeitemreport.scss
@@ -0,0 +1,36 @@
+@import '../../styles/base/color';
+@import '../../styles/base/breakpoint';
+
+.challenge-card-link {
+  color: black;
+  text-decoration: none;
+}
+.challenge-card {
+  cursor: pointer;
+  display: flex;
+  flex-direction: row;
+  width: 100%;
+  .challenge-card-content-left {
+    flex: 1;
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-start;
+    align-items: center;
+    width: inherit;
+    .challenge-card-content-badge {
+      height: 4.5rem;
+      width: 4.5rem;
+    }
+    .challenge-card-content-title {
+      margin-left: 1rem;
+      color: $white;
+    }
+  }
+  .challenge-card-content-right {
+    display: flex;
+    flex-direction: row;
+    justify-content: center;
+    align-items: center;
+    align-self: center;
+  }
+}
\ No newline at end of file
diff --git a/src/components/Report/challengereport.scss b/src/components/Report/challengereport.scss
new file mode 100644
index 0000000000000000000000000000000000000000..fe485d3f382f769b669a47e000ff8efc3a1568a3
--- /dev/null
+++ b/src/components/Report/challengereport.scss
@@ -0,0 +1,40 @@
+@import '../../styles/base/color';
+@import '../../styles/base/breakpoint';
+
+
+.challenge-root {
+  margin-bottom: 1rem;
+  .challenge-card-link {
+    color: black;
+    text-decoration: none;
+  }
+  .challenge-card {
+    cursor: pointer;
+    display: flex;
+    flex-direction: row;
+    width: 100%;
+    .challenge-card-content-left {
+      flex: 1;
+      display: flex;
+      flex-direction: row;
+      justify-content: flex-start;
+      align-items: center;
+      width: inherit;
+      .challenge-card-content-badge {
+        height: 4.5rem;
+        width: 4.5rem;
+      }
+      .challenge-card-content-title {
+        margin-left: 1rem;
+        color: $white;
+      }
+    }
+    .challenge-card-content-right {
+      display: flex;
+      flex-direction: row;
+      justify-content: center;
+      align-items: center;
+      align-self: center;
+    }
+  }
+}
\ No newline at end of file
diff --git a/src/components/Report/chartreport.scss b/src/components/Report/chartreport.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e51e717835cfe6d6342d84aa6713b37cb1685ccc
--- /dev/null
+++ b/src/components/Report/chartreport.scss
@@ -0,0 +1,7 @@
+@import '../../styles/base/color';
+@import '../../styles/base/breakpoint';
+
+
+.chart-root {
+  margin-bottom: 1rem;
+}
\ No newline at end of file
diff --git a/src/components/Report/monthlyreport.scss b/src/components/Report/monthlyreport.scss
new file mode 100644
index 0000000000000000000000000000000000000000..c45f49d574c4a61d81bb1bc99c167adb37c0fa6a
--- /dev/null
+++ b/src/components/Report/monthlyreport.scss
@@ -0,0 +1,49 @@
+@import '../../styles/base/color';
+@import '../../styles/base/breakpoint';
+
+
+.report-root {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  padding: 0.5rem 1.5rem;
+  &.black{
+    background: var(--darkLight2);
+  }
+  @media #{$large-phone} {
+    margin-bottom: 0;
+  }
+  .report-content {
+    min-height: 23.875rem;
+    width: 45.75rem;
+    
+    @media #{$large-phone} {
+      width: 100%;
+    }
+    .report-header {
+      margin-top: 1.5rem;
+      margin-bottom: 1.25rem;
+      color: $grey-bright;
+      font-size: 1rem;
+    }
+    .report-date-selector{
+      display: flex;
+      flex-direction: row;
+      justify-content: space-around;
+      width: 100%;
+      .report-date{
+        color: $grey-bright;
+          &::first-letter {
+            text-transform: uppercase;
+          }
+      }
+      .report-date-button {
+          border: none;
+          background: none;
+          color: $soft-grey;
+          text-decoration: underline;
+      }
+    }    
+  }
+}
\ No newline at end of file
diff --git a/src/components/Routes/Routes.tsx b/src/components/Routes/Routes.tsx
index 7b9cf70c6720ac0b89b59b74ac8ba032672e7104..3e73837839545e6f0697e7a1ac604561bfe565a1 100644
--- a/src/components/Routes/Routes.tsx
+++ b/src/components/Routes/Routes.tsx
@@ -13,6 +13,7 @@ import EcogestureView from 'components/Ecogesture/EcogestureView'
 import OptionsView from 'components/Options/OptionsView'
 import FAQView from 'components/FAQ/FAQView'
 import LegalNoticeView from 'components/LegalNotice/LegalNoticeView'
+import ReportView from 'components/Report/ReportView'
 
 const Routes = () => {
   return (
@@ -76,6 +77,7 @@ const Routes = () => {
           </>
         )}
       />
+      <Route path="/report" component={ReportView} />
       <Redirect from="/" to="/consumption" />
       <Redirect from="*" to="/consumption" />
     </Switch>
diff --git a/src/components/SingleFluid/SingleFluidIndicators.tsx b/src/components/SingleFluid/SingleFluidIndicators.tsx
index cbb60c5f445e2d30ae21641a22d1eda28c424a40..a77ffe182ed6524696ff36dab43d1f9c479bc652 100644
--- a/src/components/SingleFluid/SingleFluidIndicators.tsx
+++ b/src/components/SingleFluid/SingleFluidIndicators.tsx
@@ -7,7 +7,7 @@ import { TimeStep } from 'enum/timeStep.enum'
 import { FluidType } from 'enum/fluid.enum'
 import { fluidTypeState } from 'atoms/fluidState.state'
 import { TimePeriod, PerformanceIndicator } from 'models'
-import { convertDateByTimeStep } from 'utils/date'
+import { convertDateToShortDateString } from 'utils/date'
 import TimePeriodService from 'services/timePeriod.service'
 import ConsumptionService from 'services/consumption.service'
 import PerformanceIndicatorService from 'services/performanceIndicator.service'
@@ -86,14 +86,14 @@ const SingleFluidIndicators: React.FC<SingleFluidIndicatorsProps> = ({
           <div className="sfi-content">
             <div className="sfi-header text-14-normal-uppercase">
               {t('COMMON.CONSO_CARDS_LABEL')}{' '}
-              {convertDateByTimeStep(currentTimePeriod, timeStep, true)}
+              {convertDateToShortDateString(currentTimePeriod, timeStep, true)}
             </div>
 
             <PerformanceIndicatorContent
               performanceIndicator={performanceIndicatorService.aggregatePerformanceIndicators(
                 performanceIndicators
               )}
-              timePeriodText={convertDateByTimeStep(
+              timePeriodText={convertDateToShortDateString(
                 comparisonTimePeriod,
                 timeStep
               )}
diff --git a/src/components/Splash/SplashRoot.tsx b/src/components/Splash/SplashRoot.tsx
index 35a6583ebb67ea341c4c280d459c99595be4bf9e..54c2745be2b9b4fee29171f979601f444cf8e61e 100644
--- a/src/components/Splash/SplashRoot.tsx
+++ b/src/components/Splash/SplashRoot.tsx
@@ -1,12 +1,13 @@
 import React, { useState, useEffect, ComponentType, ReactNode } from 'react'
 import { useClient } from 'cozy-client'
-import { useRecoilValue, useSetRecoilState } from 'recoil'
+import { useSetRecoilState } from 'recoil'
 import classNames from 'classnames'
-import { fluidStatusState, fluidTypeState } from 'atoms/fluidState.state'
+import { fluidStatusState } from 'atoms/fluidState.state'
 import { userProfileState } from 'atoms/userProfile.state'
 import { currentChallengeState } from 'atoms/challenge.state'
 import { challengeNotificationState } from 'atoms/notification.state'
 import InitializationService from 'services/initialization.service'
+import { getActualReportDate } from 'utils/date'
 
 interface SplashRootProps {
   fadeTimer?: number
@@ -32,13 +33,14 @@ const SplashRoot = ({
   })
   const [error, setError] = useState<Error | null>(null)
   const setUserProfile = useSetRecoilState(userProfileState)
-  const fluidTypes = useRecoilValue(fluidTypeState)
   const setFluidStatusState = useSetRecoilState(fluidStatusState)
   const setCurrentChallengeState = useSetRecoilState(currentChallengeState)
   const setChallengeNotificationState = useSetRecoilState(
     challengeNotificationState
   )
 
+  const initializationService = new InitializationService(client)
+
   useEffect(() => {
     let timeoutSplash: NodeJS.Timeout
     if (splashStart) {
@@ -51,7 +53,6 @@ const SplashRoot = ({
 
   useEffect(() => {
     let subscribed = true
-    const initializationService = new InitializationService(client)
     async function loadData() {
       try {
         await initializationService.initIndex()
@@ -77,6 +78,13 @@ const SplashRoot = ({
           ) {
             profile = resultEcogesture.userProfile
           }
+
+          const resultReport = await initializationService.initReport(
+            profile.report
+          )
+          if (subscribed && resultReport.result && resultReport.userProfile) {
+            profile = resultReport.userProfile
+          }
           setUserProfile(profile)
           await initializationService.initUserChallenge()
           const fluidStatus = await initializationService.initFluidStatus()
diff --git a/src/db/challengeTypeData.json b/src/db/challengeTypeData.json
index e83ed61d1365bb9a7b8daca1b855d1690cb2abff..2be594a8afa18b8e2374bd1d4da99c5406969d21 100644
--- a/src/db/challengeTypeData.json
+++ b/src/db/challengeTypeData.json
@@ -3,7 +3,7 @@
     "_id": "CHA00000001",
     "type": 1,
     "title": "Ecolyo Royal",
-    "description": "Connecter l'application Ecolyo à votre distributeur d'énergie",
+    "description": "Connecter l'application Ecolyo à un distributeur d'énergie",
     "level": 1,
     "duration": { "days": 0 },
     "fluidTypes": [0, 1, 2],
diff --git a/src/db/userProfileData.json b/src/db/userProfileData.json
index 6c7cc86923bf222058321f83c0c8e46d979dfc85..2656a29f534b7f82679a28d900a736cae1ca31d8 100644
--- a/src/db/userProfileData.json
+++ b/src/db/userProfileData.json
@@ -3,9 +3,13 @@
     "level": 1,
     "challengeTypeHash": "",
     "ecogestureHash": "",
-    "haveSeenWelcomeModal": false,
+    "isFirstConnection": true,
     "haveSeenOldFluidModal": false,
     "notificationEcogesture": ["0085", "0092"],
-    "report": false
+    "report": {
+      "sendReportNotification": false,
+      "haveSeenLastReport": true,
+      "monthlyReportDate": "0000-01-01T00:00:00.000Z"
+    }
   }
 ]
diff --git a/src/locales/fr.json b/src/locales/fr.json
index 1d435022358e00a8d927df8201e5defc968fcb9b..f32ee1c676709d948de136274b495de57b17357c 100644
--- a/src/locales/fr.json
+++ b/src/locales/fr.json
@@ -15,7 +15,8 @@
     "options": "Options",
     "profile": "Profil",
     "connectors": "connecteurs",
-    "graphs": "graphes"
+    "graphs": "graphes",
+    "report": "Bilan"
   },
   "COMMON": {
     "APP_TITLE": "Ecolyo",
@@ -118,7 +119,7 @@
   },
   "PROFILE": {
     "REPORT": {
-      "TITLE": "Réception du bilan énergétique",
+      "TITLE": "Être notifié de l'arrivée du bilan mensuel",
       "WEEKLY": "Hebdomadaire",
       "MONTHLY": "Mensuel",
       "NEVER": "Jamais"
@@ -216,12 +217,13 @@
     "CONSOLATION2": " en chocolat."
   },
   "ECOGESTURE": {
+    "FILTER_TITLE": "Tous les ecogestes",
     "TITLE_ECOGESTURE": "Ecogeste",
     "NO_ECOGESTURE": "Pas d'ecogeste"
   },
   "NEGAWATT": {
     "TITLE_NEGAWATT": "NégaWatt",
-    "QUESTION": "Que sont les nWh ? (néga Watt heure)",
+    "QUESTION": "nWh ?",
     "ANSWER": {
       "BASE": "Le néga Watt heure (ou nWh) sert d'unité de mesure de vos économies d'énergie. Cette unité est purement indicative et arbitraire.",
       "STRONG": "10 nWh : économie importante",
@@ -308,5 +310,11 @@
     "contact": "Veuillez prendre contact directement avec eux.",
     "accessButton": "Accéder aux connecteurs",
     "later": "Plus tard"
+  },
+  "report": {
+    "viewTitle": "Bilan",
+    "reportDate": "Bilan du mois",
+    "detail": "Détail du mois",
+    "challenge": "Défis terminés en"
   }
 }
diff --git a/src/models/index.ts b/src/models/index.ts
index 88c73990f4f8351e79fc372dbd9774464e174413..a3b55612c5d1a66d798cf120c9c677e87481439e 100644
--- a/src/models/index.ts
+++ b/src/models/index.ts
@@ -8,6 +8,7 @@ export * from './fluid.model'
 export * from './indicator.model'
 export * from './konnector.model'
 export * from './modal.model'
+export * from './report.model'
 export * from './timePeriod.model'
 export * from './trigger.model'
 export * from './userProfile.model'
diff --git a/src/models/report.model.ts b/src/models/report.model.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c9c4caaf7a2645d370bc52320f4ab3939f54d720
--- /dev/null
+++ b/src/models/report.model.ts
@@ -0,0 +1,7 @@
+import { DateTime } from 'luxon'
+
+export interface ReportAttributes {
+  sendReportNotification: boolean
+  haveSeenLastReport: boolean
+  monthlyReportDate: DateTime
+}
diff --git a/src/models/userProfile.model.ts b/src/models/userProfile.model.ts
index be4994ed1f2b04d2f426ec7f56e6807ca48b5cb0..55d352f07de2e782b1193931ede83d87c947cf32 100644
--- a/src/models/userProfile.model.ts
+++ b/src/models/userProfile.model.ts
@@ -1,12 +1,13 @@
 import { DateTime } from 'luxon'
+import { ReportAttributes } from './report.model'
 
 export interface UserProfile {
   id: string
   level: number
   challengeTypeHash: string
   ecogestureHash: string
-  haveSeenWelcomeModal: boolean
+  isFirstConnection: boolean
   haveSeenOldFluidModal: DateTime | false
   notificationEcogesture: string[]
-  report: boolean
+  report: ReportAttributes
 }
diff --git a/src/services/challenge.service.ts b/src/services/challenge.service.ts
index 2cfd3e7c37734bb6aea226654a472245001519cf..16bb0f4d4cf40eb68cae8bc30707e24965bf2547 100644
--- a/src/services/challenge.service.ts
+++ b/src/services/challenge.service.ts
@@ -92,7 +92,9 @@ export default class ChallengeService {
     const maxEnergy = await this.getMaxEnergy(challenge, challengeFluidTypes)
     if (maxEnergy && maxEnergy > 0) {
       try {
-        await this.updateChallenge(challenge.id, { maxEnergy: maxEnergy })
+        await this.updateChallenge(challenge.id, {
+          maxEnergy: maxEnergy,
+        })
         return maxEnergy
       } catch (error) {
         console.log(error)
@@ -150,7 +152,9 @@ export default class ChallengeService {
     )
     if (spentEnergy && spentEnergy >= 0) {
       try {
-        await this.updateChallenge(challenge.id, { currentEnergy: spentEnergy })
+        await this.updateChallenge(challenge.id, {
+          currentEnergy: spentEnergy,
+        })
 
         return spentEnergy
       } catch (error) {
@@ -506,6 +510,61 @@ export default class ChallengeService {
     return userChallenges
   }
 
+  public async getFinishedUserChallengesOnMonth(
+    date: DateTime
+  ): Promise<UserChallenge[]> {
+    try {
+      const startDate = date.startOf('month')
+      const endDate = date.endOf('month')
+      const resultUserChallenge = await this._client.query(
+        this._client
+          .find(USERCHALLENGE_DOCTYPE)
+          .include(['challengeType', 'selectedEcogestures'])
+          .where({
+            state: {
+              $eq: ChallengeState.FINISHED,
+            },
+            endingDate: {
+              $gte: startDate.toISO(),
+              $lte: endDate.toISO(),
+            },
+          })
+          .sortBy([{ endingDate: 'desc' }])
+      )
+
+      if (resultUserChallenge && !resultUserChallenge.data[0]) {
+        return []
+      }
+
+      const userChallengeEntitites:
+        | UserChallengeEntity[]
+        | null = resultUserChallenge.data ? resultUserChallenge.data : null
+
+      const userChallengeEntityRelationships:
+        | object
+        | null = resultUserChallenge.included
+        ? resultUserChallenge.included
+        : null
+
+      if (!userChallengeEntitites || userChallengeEntitites.length === 0)
+        return []
+      const userChallenges: UserChallenge[] = []
+
+      userChallengeEntitites.forEach(userChallengeEntitity => {
+        userChallenges.push(
+          this._challengeMapper.mapToUserChallenge(
+            userChallengeEntitity,
+            userChallengeEntityRelationships
+          )
+        )
+      })
+      return userChallenges
+    } catch (error) {
+      console.log(error)
+      throw error
+    }
+  }
+
   public async getCurrentChallenge(
     withEcogestures = true
   ): Promise<UserChallenge | null> {
@@ -546,7 +605,9 @@ export default class ChallengeService {
 
   public async cancelChallenge(id: string): Promise<boolean> {
     try {
-      await this.updateChallenge(id, { state: ChallengeState.ABANDONED })
+      await this.updateChallenge(id, {
+        state: ChallengeState.ABANDONED,
+      })
       return true
     } catch (err) {
       console.log(err)
diff --git a/src/services/consumption.service.ts b/src/services/consumption.service.ts
index d639c1fe28f1413e79aedbfadc67e108363ac7d7..e4beeb4be1347b41a94f43dc8c3b104d18820b19 100644
--- a/src/services/consumption.service.ts
+++ b/src/services/consumption.service.ts
@@ -88,7 +88,6 @@ export default class ConsumptionDataManager {
           timePeriod,
           compareTimePeriod || null
         )
-
         // validating output data
 
         toBeAgreggatedData.push({
@@ -98,6 +97,7 @@ export default class ConsumptionDataManager {
       }
 
       const aggregatedData = this.aggregateGraphData(toBeAgreggatedData)
+
       // mapping result to contract
       mappedData = aggregatedData
 
@@ -389,7 +389,6 @@ export default class ConsumptionDataManager {
 
         for (const singleFluidChart of singleFluidCharts) {
           if (!singleFluidChart.chartData) break
-          if (!singleFluidChart.chartData.actualData[i]) break
           const value = singleFluidChart.chartData.actualData[i].value
 
           let convertedValue = -1
diff --git a/src/services/dateChart.service.ts b/src/services/dateChart.service.ts
index fa05215758ec8d330aeea9b058132efc02444432..49a1921f3cc685a4d4b84eb00bdffc24728b9b68 100644
--- a/src/services/dateChart.service.ts
+++ b/src/services/dateChart.service.ts
@@ -39,21 +39,12 @@ export default class DateChartService {
           endDate: date.plus({ months: -12 * index }),
         }
       case TimeStep.DAY:
-        date = referenceDate.set({
-          day: 1,
-          hour: 0,
-          minute: 0,
-          second: 0,
-          millisecond: 0,
-        })
+        date = referenceDate
+          .endOf('week')
+          .set({ hour: 0, minute: 0, second: 0, millisecond: 0 })
         return {
-          startDate: date.plus({ month: -index }).startOf('day'),
-          endDate: date
-            .plus({
-              month: -index,
-            })
-            .endOf('month')
-            .startOf('day'),
+          startDate: date.plus({ days: -7 * index - (7 - 1) }),
+          endDate: date.plus({ days: -7 * index }),
         }
       case TimeStep.HOUR:
         date = referenceDate.set({
@@ -238,14 +229,10 @@ export default class DateChartService {
         break
       case TimeStep.DAY:
         incrementedDate = initialdate.plus({ day: increment })
-        if (
-          initialdate.day === initialdate.daysInMonth &&
-          incrementedDate.day &&
-          incrementedDate.day !== initialdate.daysInMonth - 1
-        ) {
-          incrementIndex = -1
-        } else if (initialdate.day === 1 && incrementedDate.day !== 2) {
+        if (initialdate.weekday === 1 && incrementedDate.weekday === 7) {
           incrementIndex = 1
+        } else if (initialdate.weekday === 7 && incrementedDate.weekday === 1) {
+          incrementIndex = -1
         } else {
           incrementIndex = 0
         }
diff --git a/src/services/initialization.service.ts b/src/services/initialization.service.ts
index 694a7f97c3e4890a3e86fc4c3d601f06cff67f6a..177def8bb835449ee05ff7401f1612eb9d305d33 100644
--- a/src/services/initialization.service.ts
+++ b/src/services/initialization.service.ts
@@ -18,7 +18,12 @@ import {
 } from 'doctypes'
 
 import { FluidType } from 'enum/fluid.enum'
-import { FluidStatus, UserChallenge, UserProfile } from 'models'
+import {
+  FluidStatus,
+  ReportAttributes,
+  UserChallenge,
+  UserProfile,
+} from 'models'
 
 import ChallengeService from 'services/challenge.service'
 import challengeTypeData from 'db/challengeTypeData.json'
@@ -33,6 +38,7 @@ import AccountService from 'services/account.service'
 import FluidService from 'services/fluid.service'
 
 import { hashFile } from 'utils/hash'
+import { getActualReportDate } from 'utils/date'
 
 export default class InitializationService {
   private readonly _client: Client
@@ -327,6 +333,52 @@ export default class InitializationService {
     }
   }
 
+  public async initReport(
+    userReport: ReportAttributes
+  ): Promise<{
+    result: boolean
+    userProfile: UserProfile | null
+  }> {
+    try {
+      const actualReportDate = getActualReportDate()
+      let isReport = false
+      if (!userReport) {
+        //INIT REPORT OBJECT
+        isReport = true
+        userReport = {
+          monthlyReportDate: actualReportDate,
+          haveSeenLastReport: false,
+          sendReportNotification: true,
+        }
+      }
+
+      if (isReport || actualReportDate > userReport.monthlyReportDate) {
+        const reportAttributes = {
+          monthlyReportDate: actualReportDate,
+          haveSeenLastReport: false,
+          sendReportNotification: userReport.sendReportNotification,
+        }
+        const userProfileService = new UserProfileService(this._client)
+        const updatedUserProfile = await userProfileService.updateUserProfile({
+          report: reportAttributes,
+        })
+        if (updatedUserProfile) {
+          console.log(
+            '%c Initialization: Report from userProfile updated',
+            'background: #222; color: white'
+          )
+          return { result: true, userProfile: updatedUserProfile }
+        } else {
+          throw new Error('initReport: UserProfile not updated')
+        }
+      }
+      return { result: true, userProfile: null }
+    } catch (error) {
+      console.log('Initialization error: ', error)
+      throw error
+    }
+  }
+
   /*
    * Check if userChallenge exist
    * If not, the userChallenge is created
diff --git a/src/services/mail.service.ts b/src/services/mail.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..75b7f9a918b2803ee908026ab282ece378755973
--- /dev/null
+++ b/src/services/mail.service.ts
@@ -0,0 +1,427 @@
+import { Client } from 'cozy-client'
+
+export default class MailService {
+  public async SendMail(
+    client: Client,
+    mailInfo: Record<string, any>
+  ): Promise<void> {
+    try {
+      const jobCollection = client.collection('io.cozy.jobs')
+      jobCollection.create('sendmail', mailInfo)
+    } catch (e) {
+      // eslint-disable-next-line no-console
+      console.error(e)
+      throw e
+    }
+  }
+  public CreateBodyWelcome(username: string, clientUrl: string) {
+    return `
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+    <head>
+      <title>Votre bilan hebdomadaire</title>
+      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+      <style type="text/css">
+        @font-face {
+        font-family: 'Lato';
+        font-style: normal;
+        font-weight: 400;
+        src: local('Lato Regular'), local('Lato-Regular'), url(https://fonts.gstatic.com/s/lato/v11/qIIYRU-oROkIk8vfvxw6QvesZW2xOQ-xsNqO47m55DA.woff) format('woff');
+        }
+        /* Fonts and Content */
+        body,
+        td {
+        font-family: "Lato", sans-serif;
+        font-size: 14px;
+        }
+        body {
+        background-color: #FFFFFF;
+        margin: 0;
+        padding: 0;
+        color: #ffffff;
+        -webkit-text-size-adjust: none;
+        -ms-text-size-adjust: none;
+        }
+        h2 {
+        font-size: 22px;
+        
+        font-weight: 300;
+        }
+        .title {
+          text-align:center;
+        }
+        .headerTxt {
+          font-size: 18px;
+          line-height: 22px;
+          padding: 10px;
+          color: #ffffff;
+        }
+        .headerImg {
+          padding: 10px;
+        }
+        .header {
+          background: radial-gradient(74.83% 76.97% at 50% 13.64%, #343641 0%, #1B1C22 100%);
+        }
+        .body {
+          background: #1B1C22;
+        }
+        .container {
+          width: 640px;
+          background: #000000;
+        }
+        .graph {
+          padding: 5px;
+        }
+        .link {
+          color: #E3B82A!important;
+          font-style: italic;
+          font-weight: bold;
+        }
+        .btnEcolyo {
+          background: #F1C017;
+          border-radius: 2px;
+          padding: 5px 10px;
+          color: #000000;
+          text-decoration: none;
+          font-size: 16px;
+          font-weight: 600;
+          margin-bottom: 10px;
+        }
+        .popup {
+          margin: 1rem 0;
+          padding: 5px;
+          background: linear-gradient(180deg, #323339 0%, #25262B 100%);
+          border: 1px solid rgba(227, 184, 42, 0.4);
+          box-sizing: border-box;
+          box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.55);
+          border-radius: 4px;
+        }
+      </style>
+    </head>
+    <body style="margin:0px; padding:0px; -webkit-text-size-adjust:none;">
+      <table
+        width="100%"
+        cellpadding="0"
+        cellspacing="0"
+        border="0"
+        style="background-color:#ffffff"
+        >
+        <tbody>
+          <tr>
+            <td align="center">
+              <table class="container" cellpadding="0" cellspacing="0" border="0">
+                <tbody>
+                  <!-- entete -->
+                  <tr class="pagetoplogo">
+                    <td class="w640 header" width="640">
+                      <table
+                        class="col300"
+                        width="320"
+                        cellpadding="0"
+                        cellspacing="0"
+                        border="0"
+                        align="left"
+                        >
+                        <tbody>
+                          <tr>
+                            <td
+                              class="headerImg" 
+                              valign="middle"
+                              align="right"
+                              height="65"
+                              >
+                                <img
+                                  style="text-decoration: none;"
+                                  src="data:image/png;base64,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"
+                                  alt="Ecolyo"
+                                  width="45"
+                                  height="45"
+                                  />
+                            </td>
+                          </tr>
+                        </tbody>
+                      </table>
+                      <table 
+                        class="col300"
+                        width="320"
+                        cellpadding="0"
+                        cellspacing="0"
+                        border="0"
+                        align="right">
+                        <tbody>
+                          <tr>
+                            <td class="headerTxt" height="65">
+                            Ecolyo
+                            </td>
+                          </tr> 
+                        </tbody>
+                      </table>
+                    </td>
+                  </tr>
+                  <!-- contenu -->
+                  <tr class="content">
+                    <td class="w640" width="640">
+                      <table
+                        class="w640 body"
+                        width="640"
+                        cellpadding="0"
+                        cellspacing="0"
+                        border="0"
+                        >
+                        <tbody>
+                          <tr>
+                            <td class="w30" width="30"></td>
+                            <td class="w580" width="580">
+                              <!-- content area -->
+                              <table
+                                class="w580"
+                                width="580"
+                                cellpadding="0"
+                                cellspacing="0"
+                                border="0"
+                                >
+                                <tbody>
+                                  <tr>
+                                    <td>
+                                    <table width="180" border="0" cellspacing="0" cellpadding="0" align="left">
+                                    <tbody>
+                                      <tr>
+                                        <td class="graph" style="text-align:end;">
+                                        <img width="96" height="39" border="0" alt="" src="data:image/png;base64,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"/>
+                                      </td>
+                                    </tr>
+                                    </tbody>
+                                    </table>
+                                    <table width="220" border="0" cellspacing="0" cellpadding="0" align="left">
+                                    <tbody>
+                                    <tr>
+                                      <td class="title">
+                                        <h2>Bienvenue sur Ecolyo</h2>
+                                      </td>
+                                    </tr>
+                                    </tbody>
+                                    </table>
+                                    <table width="180" border="0" cellspacing="0" cellpadding="0" align="right">
+                                    <tbody>
+                                      <tr>
+                                        <td class="graph">
+                                        <img width="96" height="39" border="0" alt="" src="data:image/png;base64,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"/>
+                                      </td>
+                                    </tr>
+                                    </tbody>
+                                    </table>
+                                    </td>
+                                  </tr>
+                                  <tr>
+                                    <td class="w30" width="580" height="20"></td>
+                                  </tr>
+                                </tbody>
+                              </table>
+                              <!-- content area -->
+                              <table
+                                class="w580"
+                                width="580"
+                                cellspacing="0"
+                                cellpadding="0"
+                                border="0"
+                                >
+                                <tbody>
+                                  <tr>
+                                    <td class="w580" width="580" align="left">
+                                      <h2
+                                        style="color:#FFFFFF; font-size:22px; margin: 0.5rem 0 0 0;"
+                                        >
+                                        Bonjour ${username},
+                                      </h2>
+                                    </td>
+                                  </tr>
+                                  </tbody>
+                              </table>
+                              <!-- content area -->
+                              <table
+                                class="w580"
+                                width="580"
+                                cellspacing="0"
+                                cellpadding="0"
+                                border="0"
+                                >
+                                <tbody>
+                                  <tr>
+                                    <td class="w580" width="580" align="left">
+                                      <div
+                                        class="article-content"
+                                        style="color:#FFFFFF; font-size:16px;"
+                                        >
+                                        <p>
+                                          vous faites maintenant parti du cercle très prisé des utilisateurs d’Ecolyo ayant franchi avec succès les 64 étapes de connexion. 
+                                        </p>
+                                      </div>
+                                      <div
+                                        class="article-content"
+                                        style="color:#FFFFFF; font-size:16px;"
+                                        >
+                                        <p style="margin: 1rem 0 0 0;">
+                                          Votre espace sécurisé est désormais accessible sur
+                                        </p>
+                                        <a class="link" href="${clientUrl}">${clientUrl}</a>
+                                      </div>
+                                    </td>
+                                  </tr>
+                                  <tr>
+                                    <td class="w30" width="580" height="20"></td>
+                                  </tr>
+                                </tbody>
+                              </table>
+                              <table class="w580"
+                                width="580"
+                                cellspacing="0"
+                                cellpadding="0"
+                                border="0">
+                              <tbody>
+                              <tr>
+                                <td align="center">
+                                  <a class="btnEcolyo" href="${clientUrl}">
+                                  <img
+                                  style="text-decoration: none;"
+                                  src="data:image/png;base64,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"
+                                  alt="Ecolyo"
+                                  width="35"
+                                  height="35"
+                                  />
+                                  <span>Aller sur Ecolyo</span>
+                                  </a> 
+                                </td>
+                              </tr>
+                              </tbody>
+                              </table>
+                               <table class="w580"
+                                width="580"
+                                cellspacing="0"
+                                cellpadding="0"
+                                border="0">
+                              <tbody>
+                              <tr>
+                                <td align="center">
+                                  <table class="popup"
+                                    width="480"
+                                    cellspacing="0"
+                                    cellpadding="0"
+                                    border="0">
+                                  <tbody>
+                                  <tr>
+                                    <td align="center">
+                                      <table 
+                                        width="480"
+                                        cellspacing="0"
+                                        cellpadding="0"
+                                        border="0">
+                                      <tbody>
+                                      <tr>
+                                        <td align="center">
+                                          <img alt="" src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0zNy40MjcyIDQyLjExODZMNDEuNTI3OCAzOC43MTYxTDQzLjQyMTIgMzcuOTc1M0M0My4zMTQ3IDM4LjExOTggNDMuMjQxIDM4LjI1MzkgNDMuMTg5NyAzOC4zNjcyTDQzLjE2MTEgMzguNDQ3MUM0My42NDI5IDM4LjcyNjUgNDQuMjk2MSAzOS4wNDYxIDQ1LjA4MDYgMzkuMzc3QzQ2LjY1MDkgNDAuMDM5NSA0OC41MzU3IDQwLjY1OSA1MC4xOTQgNDEuMDQ5MkM1Mi4wMzI5IDQxLjQ4MTkgNTQuNDgyOSA0Mi4wNzI5IDU2Ljg3NDIgNDMuMDQ3N0M1OS4yNTc2IDQ0LjAxOTMgNjEuODI4NiA0NS40NjY2IDYzLjc2NzkgNDcuNzY1MUM2NC4yMTQgNDguMjkzNyA2NC42MDMxIDQ5LjAzNTEgNjQuNjY4NSA0OS45NTQyQzY0LjY3MjQgNTAuMDA4IDY0LjY3NSA1MC4wNjEyIDY0LjY3NjUgNTAuMTEzOEw1NS40NTE5IDQ5LjU5NzRDNTUuMTE0OSA0OS40MzM5IDU0Ljc2MjUgNDkuMjc3NyA1NC4zOTU2IDQ5LjEyODFDNTIuNTMxOSA0OC4zNjg0IDUwLjUzNzEgNDcuODc1NCA0OC42OSA0Ny40NDA4QzQ2LjY2MjMgNDYuOTYzNyA0NC40MjczIDQ2LjIyOCA0Mi41Mjg0IDQ1LjQyNjlDNDEuNTc4MyA0NS4wMjYxIDQwLjY1OTUgNDQuNTg2OCAzOS44Njc1IDQ0LjEyNzZDMzkuMTUzNCA0My43MTM1IDM4LjI1MDEgNDMuMTIgMzcuNTk2MyA0Mi4zMzUzQzM3LjUzNyA0Mi4yNjQxIDM3LjQ4MDcgNDIuMTkxOCAzNy40MjcyIDQyLjExODZaIiBmaWxsPSIjRTRBNDAwIi8+CjxwYXRoIGQ9Ik0zNi43OTI1IDUzLjQxMjhMNDAuODkzIDUwLjAxMDNMNDIuNzg2NCA0OS4yNjk1QzQyLjY3OTkgNDkuNDE0IDQyLjYwNjMgNDkuNTQ4IDQyLjU1NDkgNDkuNjYxM0w0Mi41MjYzIDQ5Ljc0MTNDNDMuMDA4MSA1MC4wMjA2IDQzLjY2MTMgNTAuMzQwMiA0NC40NDU5IDUwLjY3MTJDNDYuMDE2MiA1MS4zMzM2IDQ3LjkwMDkgNTEuOTUzMSA0OS41NTkyIDUyLjM0MzNDNTEuMzk4MSA1Mi43NzYgNTMuODQ4MSA1My4zNjcxIDU2LjIzOTUgNTQuMzQxOEM1OC42MjI5IDU1LjMxMzQgNjEuMTkzOSA1Ni43NjA4IDYzLjEzMzIgNTkuMDU5MkM2My41NzkyIDU5LjU4NzkgNjMuOTY4MyA2MC4zMjkyIDY0LjAzMzggNjEuMjQ4NEM2NC4wMzc2IDYxLjMwMjEgNjQuMDQwMiA2MS4zNTUzIDY0LjA0MTggNjEuNDA3OUw1NC44MTcxIDYwLjg5MTVDNTQuNDgwMiA2MC43MjgxIDU0LjEyNzggNjAuNTcxOCA1My43NjA5IDYwLjQyMjJDNTEuODk3MSA1OS42NjI1IDQ5LjkwMjMgNTkuMTY5NSA0OC4wNTUzIDU4LjczNDlDNDYuMDI3NSA1OC4yNTc4IDQzLjc5MjUgNTcuNTIyMSA0MS44OTM2IDU2LjcyMUM0MC45NDM1IDU2LjMyMDIgNDAuMDI0OCA1NS44ODA5IDM5LjIzMjggNTUuNDIxN0MzOC41MTg3IDU1LjAwNzcgMzcuNjE1MyA1NC40MTQxIDM2Ljk2MTUgNTMuNjI5NEMzNi45MDIyIDUzLjU1ODIgMzYuODQ1OSA1My40ODYgMzYuNzkyNSA1My40MTI4WiIgZmlsbD0iI0U0QTQwMCIvPgo8cGF0aCBkPSJNMzguMTgxMiA0My4xNTk2QzM4LjY2MjggNDEuNTkyNSAzOS44MjM4IDQwLjQ4ODcgNDAuNjY5NyAzOS44MjE5QzQxLjc4MzggMzguOTQzNiA0My4xNTM1IDM4LjIwMzUgNDQuNDgzMSAzNy41OTY3QzQ3LjEwMjggMzYuNDAxIDUwLjEyNzIgMzUuNDcyNCA1Mi4yNTcxIDM0Ljk1OTZMNTkuOTI2NCAzMi40MDI5QzYwLjEzODggMzIuMzMyMSA2MC4zNTMzIDMyLjI4NDMgNjAuNTY3MiAzMi4yNTc5QzYyLjA1ODIgMzEuNTYyNiA2Mi44MjMxIDI5Ljg0NDEgNjIuMjkwMyAyOC4yNDU3QzYxLjcxNjkgMjYuNTI1NiA1OS44NTc2IDI1LjU5NiA1OC4xMzc0IDI2LjE2OTRMNTAuNDY4MSAyOC43MjZDNDguMzM4MSAyOS4yMzg5IDQ1LjMxMzggMzAuMTY3NCA0Mi42OTQgMzEuMzYzMUM0MS4zNjQ0IDMxLjk3IDM5Ljk5NDggMzIuNzEwMSAzOC44ODA2IDMzLjU4ODRDMzcuODg4IDM0LjM3MDkgMzYuNDYxNCAzNS43NTUxIDM2LjIwODEgMzcuNzgzN0MzNS45MDk5IDQwLjE3MTMgMzYuOTgzMSA0MS45NjEzIDM4LjE4MTIgNDMuMTU5NloiIGZpbGw9IiNGRkRDNUYiLz4KPHBhdGggZD0iTTQ1LjU0NjcgNDcuNzA5QzQ3Ljg5NDMgNDYuNzM0MSA1MC40MTc5IDQ1Ljk3NTQgNTIuMjY3MyA0NS41MzAyTDU5LjY5MzYgNDMuMDU0NkM2MS4xMjQgNDIuMzMyNiA2MS44NDY3IDQwLjY1MjEgNjEuMzI0OSAzOS4wODY4QzYwLjc1MTUgMzcuMzY2NyA1OC44OTIyIDM2LjQzNzEgNTcuMTcyMSAzNy4wMTA1TDQ5LjUwMjggMzkuNTY3MUM0Ny4zNzI4IDQwLjA4IDQ0LjM0ODUgNDEuMDA4NiA0MS43Mjg3IDQyLjIwNDNDNDAuMzk5MSA0Mi44MTExIDM5LjAyOTUgNDMuNTUxMiAzNy45MTUzIDQ0LjQyOTVDMzYuOTIyNyA0NS4yMTIgMzUuNDk2MSA0Ni41OTYzIDM1LjI0MjcgNDguNjI0OEMzNC44ODAzIDUxLjUyNjcgMzYuNTQzNiA1My41NDU4IDM3Ljk5NSA1NC42OTI2QzM3Ljk5ODggNTQuNjU3OCAzOC4wMDI5IDU0LjYyMjkgMzguMDA3MiA1NC41ODc4QzM4LjI2MDYgNTIuNTU5MyAzOS42ODcyIDUxLjE3NSA0MC42Nzk4IDUwLjM5MjVDNDEuNDk2OSA0OS43NDg0IDQyLjQ1MTMgNDkuMTc4NyA0My40MjY2IDQ4LjY4MTNDNDMuNzM3OSA0OC41MTY4IDQ0LjA4MTIgNDguMzQ4MyA0NC40NTUxIDQ4LjE3NzdDNDQuODA4MiA0OC4wMTY1IDQ1LjE3MzkgNDcuODYgNDUuNTQ2NyA0Ny43MDlaIiBmaWxsPSIjRkZEQzVGIi8+CjxwYXRoIGQ9Ik02NC4zNzU0IDQ5LjUzMDNDNjQuOTI5MiA1MS4yNTY4IDYzLjk3ODUgNTMuMTA1NCA2Mi4yNTE5IDUzLjY1OTJMNTAuNjM3OCA1Ny4zODQ1TDUwLjUxMjYgNTcuNDE0MUM0OC42NDYzIDU3Ljg1NTIgNDUuODQyIDU4LjY3OTMgNDMuNTI1NSA1OS42ODU4QzQyLjU0MzcgNjAuMTEyMyA0MS43NTI2IDYwLjUyNzcgNDEuMTg1MyA2MC45MDNMMzYuNDA5MiA2Mi4yMjU0QzM1LjY4NjkgNjIuNDI1NCAzNS4wNzc0IDYyLjg1NzcgMzQuNjUyNSA2My40MjhDMzQuMjE1NSA2Mi40OTAyIDMzLjk4MDcgNjEuMzgxMiAzNC4xNDA3IDYwLjEwMDJDMzQuNDAzIDU3Ljk5OTkgMzUuOTQ0OSA1Ni42MDg1IDM2Ljk1MDkgNTUuODU2M0MzOC4xMDczIDU0Ljk5MTggMzkuNTMwNCA1NC4yNjIzIDQwLjkwOSA1My42NjM0QzQzLjYzNiA1Mi40Nzg3IDQ2Ljc2NTcgNTEuNTU5NyA0OC44NzQ3IDUxLjA1NDNMNjAuMjQ2NCA0Ny40MDY4QzYxLjk3MyA0Ni44NTMgNjMuODIxNiA0Ny44MDM3IDY0LjM3NTQgNDkuNTMwM1oiIGZpbGw9IiNGRkRDNUYiLz4KPHBhdGggZD0iTTM0IDY1LjM4OTVDMzQgNjMuOTEzNyAzNC45ODQ3IDYyLjYxOTMgMzYuNDA3IDYyLjIyNTVMNjIuNjcxNyA1NC45NTMzQzY0Ljc2MzEgNTQuMzc0MyA2Ni44MzA5IDU1Ljk0NzMgNjYuODMwOSA1OC4xMTc0QzY2LjgzMDkgNTguMTE3NCA2Ni44MzA5IDcwLjExNzggNjYuODMwOSA3My40Nzg1QzY2LjgzMDkgNzYuODM5MyA2MS44OSA4Mi41ODUyIDYwLjM3MjMgODIuNTg1MkM1OC44NTQ1IDgyLjU4NTIgNDIuMzc1OCA4Mi41ODUyIDQxLjA3NDkgODIuNTg1MkMzOS43NzM5IDgyLjU4NTIgMzQgNzYuODM5MyAzNCA3My40Nzg1QzM0IDcwLjExNzggMzQgNjUuMzg5NSAzNCA2NS4zODk1WiIgZmlsbD0iI0Y0RjRGNCIvPgo8cGF0aCBkPSJNMzYuNjgzNiA3OC44NkMzOC4zNzc2IDgwLjkyMSA0MC4zNzMyIDgyLjU4NTIgNDEuMDczMyA4Mi41ODUySDYwLjM3MDdDNjEuODg4NSA4Mi41ODUyIDY2LjgyOTQgNzYuODM5MyA2Ni44Mjk0IDczLjQ3ODVWNTguMTE3NEM2Ni44Mjk0IDU1Ljk0NzMgNjQuNzYxNiA1NC4zNzQzIDYyLjY3MDIgNTQuOTUzM0w2Mi40NTk0IDU1LjAxMTdWNjkuNzUzOEM2Mi40NTk0IDczLjExNDYgNTcuNTE4NSA3OC44NjA0IDU2LjAwMDggNzguODYwNEgzNi43MDM0TDM2LjY4MzYgNzguODZaIiBmaWxsPSIjREREREREIi8+CjxyZWN0IHg9IjQwLjc0ODUiIHk9Ijg0LjIxMTYiIHdpZHRoPSIyMC4wNTYyIiBoZWlnaHQ9IjYuNTY2MTgiIHJ4PSIzLjI4MzA5IiBmaWxsPSIjQzRDNEM0Ii8+CjxwYXRoIGQ9Ik00MC45NTA4IDg2LjM1NjZDNDAuODE5NyA4Ni43MTEyIDQwLjc0OCA4Ny4wOTQ2IDQwLjc0OCA4Ny40OTQ5QzQwLjc0OCA4OS4zMDgxIDQyLjIxNzkgOTAuNzc4IDQ0LjAzMTEgOTAuNzc4SDU3LjUyMTFDNTkuMzM0MyA5MC43NzggNjAuODA0MiA4OS4zMDgxIDYwLjgwNDIgODcuNDk0OUM2MC44MDQyIDg3LjA5NDYgNjAuNzMyNiA4Ni43MTEyIDYwLjYwMTUgODYuMzU2NkM2MC4xMzg2IDg3LjYwODYgNTguOTM0MSA4OC41MDEyIDU3LjUyMTEgODguNTAxMkg0NC4wMzExQzQyLjYxODIgODguNTAxMiA0MS40MTM3IDg3LjYwODYgNDAuOTUwOCA4Ni4zNTY2WiIgZmlsbD0iIzlDOUM5QyIvPgo8ZWxsaXBzZSBjeD0iNDYuODczOSIgY3k9Ijg2LjQ4ODIiIHJ4PSIzLjA4OTc1IiByeT0iMS40MDkzMyIgZmlsbD0id2hpdGUiLz4KPHJlY3QgeD0iNDAuNzQ4NSIgeT0iOTEuMzY2OSIgd2lkdGg9IjIwLjA1NjIiIGhlaWdodD0iNi41NjYxOCIgcng9IjMuMjgzMDkiIGZpbGw9IiNDNEM0QzQiLz4KPHBhdGggZD0iTTQwLjk1MDggOTMuNTExN0M0MC44MTk3IDkzLjg2NjQgNDAuNzQ4IDk0LjI0OTggNDAuNzQ4IDk0LjY1QzQwLjc0OCA5Ni40NjMyIDQyLjIxNzkgOTcuOTMzMSA0NC4wMzExIDk3LjkzMzFINTcuNTIxMUM1OS4zMzQzIDk3LjkzMzEgNjAuODA0MiA5Ni40NjMyIDYwLjgwNDIgOTQuNjVDNjAuODA0MiA5NC4yNDk4IDYwLjczMjYgOTMuODY2NCA2MC42MDE1IDkzLjUxMTdDNjAuMTM4NiA5NC43NjM4IDU4LjkzNDEgOTUuNjU2NCA1Ny41MjExIDk1LjY1NjRINDQuMDMxMUM0Mi42MTgyIDk1LjY1NjQgNDEuNDEzNyA5NC43NjM4IDQwLjk1MDggOTMuNTExN1oiIGZpbGw9IiM5QzlDOUMiLz4KPGVsbGlwc2UgY3g9IjQ2Ljg3MzkiIGN5PSI5My42NDM0IiByeD0iMy4wODk3NSIgcnk9IjEuNDA5MzMiIGZpbGw9IndoaXRlIi8+CjxyZWN0IHg9IjQ4IiB5PSIzIiB3aWR0aD0iNCIgaGVpZ2h0PSIxNSIgcng9IjIiIGZpbGw9IiNGRkRDNUYiLz4KPHJlY3QgeD0iOTUiIHk9IjQ0IiB3aWR0aD0iNCIgaGVpZ2h0PSIxNSIgcng9IjIiIHRyYW5zZm9ybT0icm90YXRlKDkwIDk1IDQ0KSIgZmlsbD0iI0ZGREM1RiIvPgo8cmVjdCB4PSIyMSIgeT0iNDQiIHdpZHRoPSI0IiBoZWlnaHQ9IjE1IiByeD0iMiIgdHJhbnNmb3JtPSJyb3RhdGUoOTAgMjEgNDQpIiBmaWxsPSIjRkZEQzVGIi8+CjxyZWN0IHg9IjE3IiB5PSIxNy44Mjg0IiB3aWR0aD0iNCIgaGVpZ2h0PSIxNSIgcng9IjIiIHRyYW5zZm9ybT0icm90YXRlKC00NSAxNyAxNy44Mjg0KSIgZmlsbD0iI0ZGREM1RiIvPgo8cmVjdCB3aWR0aD0iNCIgaGVpZ2h0PSIxNSIgcng9IjIiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjcwNzEwNyAtMC43MDcxMDcgLTAuNzA3MTA3IDAuNzA3MTA3IDgyLjQzNTEgMTUuODI4NCkiIGZpbGw9IiNGRkRDNUYiLz4KPC9zdmc+Cg==" />
+                                        </td>
+                                      </tr>
+                                      </tbody>
+                                      </table>
+                                      <table 
+                                        width="480"
+                                        cellspacing="0"
+                                        cellpadding="0"
+                                        border="0">
+                                      <tbody>
+                                      <tr>
+                                        <td align="center" style="padding-bottom: 10px;">
+                                          <h1 style="color:#E3B82A;">Astuce</h1>
+                                          <p>
+                                          Ajoutez Ecolyo à vos favoris pour accéder plus facilement à votre espace dédié.
+                                          </p>
+                                          <p>
+                                          <span style="font-weight:bold">Lorsque vous serez sur l’application, presser Control + D simultanément</span></br>
+                                          (ou Cmd + D sur Mac)
+                                          </p>
+                                          <a class="btnEcolyo" href="${clientUrl}">J'ai compris</a>
+                                        </td>
+                                      </tr>
+                                      </tbody>
+                                      </table>
+                                    </td>
+                                  </tr>
+                                  </tbody>
+                                  </table>
+                                </td>
+                              </tr>
+                              </tbody>
+                              </table>
+                          </tr>
+                        </tbody>
+                      </table>
+                    </td>
+                  </tr>
+                  <!-- pied de page -->
+                  <tr class="pagebottom">
+                    <td class="w640" width="640">
+                      <table
+                        class="w640"
+                        width="640"
+                        cellpadding="0"
+                        cellspacing="0"
+                        border="0
+                        >
+                        <tbody>
+                          <tr>
+                            <td class="w30" width="30"></td>
+                            <td class="w580" width="580" valign="top">
+                              <p
+                                align="center"
+                                class="pagebottom-content-left"
+                                style="padding-top:5px;"
+                                >
+                                Ecolyo, Métropole de Lyon</br>
+                                <a href="" style="color: #ffffff">Unsubscribe</a>
+                              </p>
+                            </td>
+                            <td class="w30" width="30"></td>
+                          </tr>
+                        </tbody>
+                      </table>
+                      <table
+                        class="w640"
+                        width="640"
+                        cellpadding="0"
+                        cellspacing="0"
+                        border="0"
+                        >
+                        <tbody>
+                          <tr>
+                            <td class="w30" width="30"></td>
+                            <td width="290">
+                              <img width="154" height="42" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJoAAAAqCAYAAABLNUJiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAA3iSURBVHgB7VwJcFRFGv6DyCFXXJQgKhkuFVEIFIWxxGUQhNJi11AeqKUmKbQiYkmirAcqCShqXBTwKqB0E8RFUWthkXIFQQZXKK4KsWC5WYb7vm8I9P5fT/fQ8+a9NzOBZM34vqo/Pe91v35vpr/8/R/dL4U8/C4ghKjLRXeWfixpLF1YmrE0ZklhOcKyjmWHKmelpKT8RJcIKeQhqcEE+yMXg1n6sKTq83v27KHt27fTiRMn5HHdunXp2muvpWuuuca8/ADLDJbxTLrFdBHwiJakUAQbztILxwcPHqSpU6fSokWLaMmSJZJodgDZunXrRnfccQfddddd1LJlS131d/THhPsvVQIe0ZIMTLBGXIxiGcRSe/HixfTWW29Jcp09ezaRruiyyy6jXr160RtvvEFt2rTBKXRQzFLIhDufSF8e0ZIITLL2XMxkab1582YqKCign3/+2bZtkyZNKCcnh5YtW0YLFiyQ5/r06UNr1qyhLVu2RLV/4IEHaNiwYVrDQav1YrIFKU7UIg9JASZZTy7msLT+9NNPqWfPnhEk69KliyxHjRolSxDtnnvukSVw00030VNPPUVXXHGFPG7dunX4GuDbb7+lu+++myZPniyrWebxPTtSnPCIlgTgAe/KxbSKiooWINLLL79MR44ciWhz44030sCBA6levXry+NChQ3T69Gk6efKkPD516hQtX76cbrjhBnkcDAbpvffeowcffDDcx/79+6WWfOedd3DoY5nF924XxyN6RKvp4IFuy8U/uGzy7LPP0pgxY8J1vXv3pttuu01+/vLLL6lp06aSUACIOGHCBNqwYYM8PnfuHPFUSEuXLpXHcARQ/80338jjO++8M9zv6NGj6c0338TH5iwL+N4+8pC84AFuyrKWRbCWEUwkKTztiSlTpogXXnhBlJWVCZ4Ww3UtWrQIf3aTRx99VHCoQ35mD1Qw6aLasPYUCotVnM4RnjNQg8GD+1cuhn788cdUWFgYUffcc8/JabFhw4a0atUqmjVrljwPm+zee++VGqpz58509dVXU61atWjdunW0detWmjlzJi1cuJD27t0r29euXVuG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"/>
+                            </td>
+                            <td width="290" align="right">
+                            Un site de la Métropole de Lyon
+                            </td>
+                            <td class="w30" width="30"></td>
+                          </tr>
+                        </tbody>
+                      </table>
+                    </td>
+                  </tr>
+                  <tr>
+                    <td class="w640" width="640" height="60"></td>
+                  </tr>
+                </tbody>
+              </table>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+      </td>
+      </tr>
+      </tbody>
+      </table>
+    </body>
+  </html>
+  `
+  }
+}
diff --git a/src/services/timePeriod.service.ts b/src/services/timePeriod.service.ts
index ffe91665f3ed6a4115dd1e9382cfb0ff7055e107..efa5c017338e52e0bc0752e27f14acbc3a6b0c5e 100644
--- a/src/services/timePeriod.service.ts
+++ b/src/services/timePeriod.service.ts
@@ -122,9 +122,9 @@ export default class TimePeriodService {
       case TimeStep.HOUR:
         return DateTime.local(startDate.year, startDate.month, startDate.day)
       case TimeStep.DAY:
-        return DateTime.local(startDate.year, startDate.month, 1)
+        return DateTime.local(startDate.year, startDate.month, startDate.day)
           .setLocale('fr-CA')
-          .startOf('month')
+          .startOf('week')
       case TimeStep.MONTH:
         return DateTime.local(startDate.year, startDate.month, 1)
       case TimeStep.YEAR:
diff --git a/src/services/userProfile.service.ts b/src/services/userProfile.service.ts
index 033903ac1f62d0fb7859742a45d69b3e561783c3..630cc1bfd7220ae4ddef2a7263ee0789f547d34f 100644
--- a/src/services/userProfile.service.ts
+++ b/src/services/userProfile.service.ts
@@ -2,6 +2,7 @@ import { Client } from 'cozy-client'
 import { UserProfile } from 'models'
 import { USERPROFILE_DOCTYPE } from 'doctypes'
 import { DateTime } from 'luxon'
+import { ReportAttributes } from 'models'
 
 export default class UserProfileService {
   private readonly _client: Client
@@ -20,11 +21,27 @@ export default class UserProfileService {
         userProfile.haveSeenOldFluidModal
       )
     }
+    //INIT REPORT OBJECT
+    if (
+      userProfile &&
+      userProfile.report &&
+      typeof userProfile.report.monthlyReportDate === 'string'
+    ) {
+      userProfile.report.monthlyReportDate = DateTime.fromISO(
+        userProfile.report.monthlyReportDate
+      )
+    }
     return userProfile
   }
 
   public async updateUserProfile(attributes: {
-    [key: string]: string | string[] | boolean | number | DateTime
+    [key: string]:
+      | string
+      | string[]
+      | boolean
+      | number
+      | DateTime
+      | ReportAttributes
   }): Promise<UserProfile | null> {
     const { data: userProfile } = await this._client
       .query(this._client.find(USERPROFILE_DOCTYPE).limitBy(1))
@@ -40,6 +57,14 @@ export default class UserProfileService {
         userProfile.haveSeenOldFluidModal
       )
     }
+    if (
+      userProfile &&
+      typeof userProfile.report.monthlyReportDate === 'string'
+    ) {
+      userProfile.report.monthlyReportDate = DateTime.fromISO(
+        userProfile.report.monthlyReportDate
+      )
+    }
     return userProfile ? userProfile : null
   }
 }
diff --git a/src/styles/base/_typography.scss b/src/styles/base/_typography.scss
index f80e3e5b9af9b7d06910d8451928b94612875aac..9a379223a73f0f966f44ebe6c7c73a113a8b244c 100644
--- a/src/styles/base/_typography.scss
+++ b/src/styles/base/_typography.scss
@@ -279,7 +279,7 @@ p {
   font-size: 1rem;
   line-height: 120%;
   @media #{$large-phone} {
-    font-size: 0.685rem;
+    font-size: 0.875rem;
   }
 }
 .chart-ticks-y-text {
diff --git a/src/styles/components/_barchart.scss b/src/styles/components/_barchart.scss
index 83019797cc2e8909fa3122dc936bc86ac714e1a5..369fe5d6bc726911e0157901a69930676ebb1cf6 100644
--- a/src/styles/components/_barchart.scss
+++ b/src/styles/components/_barchart.scss
@@ -9,10 +9,11 @@
       fill: $grey-bright;
     }
   }
-  .separator {
-    text-align: center;
-    margin: 0 2px;
-    font-size: 1rem !important;
+}
+.value-text {
+  fill: $grey-dark;
+  &.selected {
+    fill: $grey-bright;
   }
 }
 .background-true {
@@ -87,6 +88,11 @@
     fill: $multi-color;
     filter: drop-shadow(0 -0.1rem 0.2rem $multi-color);
   }
+  &.disabled {
+    &:hover {
+      cursor: default;
+    }
+  }
 }
 
 .bar-compare-MULTIFLUID {
diff --git a/src/styles/components/_consumptionvisualizer.scss b/src/styles/components/_consumptionvisualizer.scss
index d23b4f8f1808f9fd9d86f3aebb1d1fb3ae863caa..48519bbff64f93e51e515e0a54210f5e11a991ee 100644
--- a/src/styles/components/_consumptionvisualizer.scss
+++ b/src/styles/components/_consumptionvisualizer.scss
@@ -9,25 +9,6 @@
   @media #{$large-phone} {
     width: 100%;
   }
-  .cv-content-date {
-    display: flex;
-    flex-direction: row;
-    justify-content: space-around;
-    width: 100%;
-    .cv-date-group {
-      display: flex;
-      flex-direction: column;
-      width: 38vw;
-      align-items: center;
-      align-self: center;
-      .cv-date {
-        color: $grey-bright;
-        &::first-letter {
-          text-transform: uppercase;
-        }
-      }
-    }
-  }
   .cv-load {
     min-height: 5.25rem;
     display: flex;
@@ -126,4 +107,5 @@
     color: $soft-grey;
     text-decoration: underline;
   }
+
 }
diff --git a/src/styles/components/_ecogesture.scss b/src/styles/components/_ecogesture.scss
index 99dbc784d18b53f5bdc552c70c51406723e73587..7a0639f845b4ad3351b3ae7a3aa8c417556f7c8e 100644
--- a/src/styles/components/_ecogesture.scss
+++ b/src/styles/components/_ecogesture.scss
@@ -17,26 +17,140 @@
     @media #{$large-phone} {
       width: 97%;
     }
+    .order-container {
+      display: flex;
+      width: 40px;
+      height: 40px;
+      box-sizing: border-box;
+      margin-left: auto;
+      border: 1px solid #7b7b7b;
+      margin: 0 1rem;
+      .order-button {
+        margin: auto;
+        position: relative;
+        top: 2px;
+      }
+    }
+
+    .ng-question {
+      margin-left: auto;
+      text-decoration: underline;
+    }
+
+    .filters {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      height: 50px;
+      color: white;
+      position: relative;
+      .filter {
+        height: 45px;
+        display: flex;
+        align-items: center;
+        justify-content: flex-start;
+        svg {
+          margin-right: 1rem;
+        }
+        .checkicon {
+          opacity: 0;
+          margin-left: auto;
+          transition: all 300ms ease;
+          &.active {
+            opacity: 1;
+          }
+        }
+      }
+      .ecogestures {
+        margin-bottom: 1rem;
+        font-size: 0.95rem;
+
+        &.opened {
+          color: $gold-shadow;
+        }
+      }
+      .filter-button {
+        display: flex;
+        .button {
+          margin: auto;
+          display: flex;
+          align-items: center;
+          span {
+            display: inline-flex;
+            margin-bottom: 0;
+            transition: all 300ms ease;
+          }
+          svg {
+            margin-right: 1rem;
+            margin-left: -0.5rem;
+          }
+        }
+      }
+
+      .dropdown {
+        position: absolute;
+        top: 3.5rem;
+        background: linear-gradient(
+            0deg,
+            rgba(255, 255, 255, 0.09),
+            rgba(255, 255, 255, 0.09)
+          ),
+          linear-gradient(180deg, #323339 0%, #25262b 100%);
+        border: 1px solid $soft-grey;
+        box-sizing: border-box;
+        box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.55);
+        border-radius: 4px;
+        display: none;
+        z-index: 3;
+        min-width: 230px;
+        padding: 0.5rem 0rem;
+        font-size: 0.875rem;
+        left: 0;
+        transition: all 300ms ease;
+        &.opened {
+          display: block;
+        }
+        .filter {
+          padding: 0 1rem;
+          &.filter-active {
+            background: rgba(160, 160, 160, 0.2);
+          }
+        }
+      }
+    }
   }
   .ecogesture-content {
     display: flex;
     flex-wrap: wrap;
     justify-content: space-around;
     max-width: 53rem;
+    animation: appear 600ms ease;
+
     @media #{$tablet} {
       width: 100%;
     }
     @media #{$large-phone} {
       width: 100%;
     }
+
+    @keyframes appear {
+      from {
+        opacity: 0;
+      }
+      to {
+        opacity: 1;
+      }
+    }
     .ecogesture-list-item {
       width: 48%;
       height: 8rem;
       margin: 1% 1%;
+      animation: appear 600ms ease;
     }
     .ecogesture-list-item > button {
       height: 100%;
       overflow: hidden;
+      animation: appear 600ms ease;
     }
   }
 }
diff --git a/src/styles/components/_indicators.scss b/src/styles/components/_indicators.scss
index 5e91831830d3892fd9b16e7099802eef241097d1..26c1dc9ba73aed8d23dcd32ec0692818d165399b 100644
--- a/src/styles/components/_indicators.scss
+++ b/src/styles/components/_indicators.scss
@@ -77,12 +77,11 @@
       display: flex;
       flex-direction: row;
       &:first-child() {
-        margin-bottom: 2rem;
+        margin-bottom: 0.75rem;
       }
       .icon-line {
         display: flex;
         align-items: center;
-        gap: 0.8rem;
         margin-bottom: 0.25rem;
         .euro-value {
           font-size: 2.2rem;
@@ -106,16 +105,20 @@
         }
       }
       .bilan-card {
-        margin-bottom: 2rem;
+        margin-bottom: 1rem;
+        min-height: 3.563rem;
       }
       .error {
         display: flex;
         gap: 1rem;
+        margin-bottom: 1rem;
+        min-height: 3.563rem;
       }
       .fpi-content-icon {
         margin: 0.5rem 0;
       }
       .perf-icon {
+        margin-right: 0.8rem;
         align-self: start;
       }
       .fpi-content-perf:not(:first-child) {
diff --git a/src/styles/components/_nav.scss b/src/styles/components/_nav.scss
index 71852729c87b6f24d24ab9a90d14cd3145457c7b..91e0315394e7e46b56823ccc3cb1b8840b76b1e7 100644
--- a/src/styles/components/_nav.scss
+++ b/src/styles/components/_nav.scss
@@ -106,7 +106,7 @@
   }
 }
 
-.nb-challenge-notif {
+.nb-notif {
   position: absolute;
   display: flex;
   justify-content: center;
diff --git a/src/styles/components/_report.scss b/src/styles/components/_report.scss
index 92c73a523c0921edcacabc5dd6146ced58f5aad1..16505e1fcf6ad153d5b2d8388eaf1920dcfcde7d 100644
--- a/src/styles/components/_report.scss
+++ b/src/styles/components/_report.scss
@@ -1,10 +1,10 @@
-.report-root {
+.report-option-root {
   display: flex;
   flex-direction: column;
   align-items: center;
   justify-content: center;
   padding: 0 1.5rem;
-  .report-content {
+  .report-option-content {
     width: 45.75rem;
     @media #{$large-phone} {
       width: 100%;
diff --git a/src/targets/services/monthlyReport.ts b/src/targets/services/monthlyReportNotification.ts
similarity index 88%
rename from src/targets/services/monthlyReport.ts
rename to src/targets/services/monthlyReportNotification.ts
index adadaf71ffeb7f841c9f0dcc2bdf136ce4f9b4ec..d70798368dcc899a7f223d034e694d0b43ec37a7 100644
--- a/src/targets/services/monthlyReport.ts
+++ b/src/targets/services/monthlyReportNotification.ts
@@ -8,19 +8,22 @@ import { TimePeriod } from 'models'
 import UserProfileService from 'services/userProfile.service'
 import ConsumptionService from 'services/consumption.service'
 import PerformanceIndicatorService from 'services/performanceIndicator.service'
+import MailService from 'services/mail.service'
 
 const log = logger.namespace('report')
 
-interface MonthlyReportProps {
+interface MonthlyReportNotificationProps {
   client: Client
 }
 
-const monthlyReport = async ({ client }: MonthlyReportProps) => {
+const monthlyReportNotification = async ({
+  client,
+}: MonthlyReportNotificationProps) => {
   log('info', 'Fetching user profile...')
   const upm = new UserProfileService(client)
   const userProfil = await upm.getUserProfile()
-  if (!userProfil || !userProfil.report) {
-    log('info', 'End of process - Report disabled in user profile')
+  if (!userProfil || !userProfil.report.sendReportNotification) {
+    log('info', 'End of process - Report Notification disabled in user profile')
     return
   }
 
@@ -121,15 +124,9 @@ const monthlyReport = async ({ client }: MonthlyReportProps) => {
       },
     ],
   }
-
   log('info', 'Sending mail...')
-  try {
-    const jobCollection = client.collection('io.cozy.jobs')
-    await jobCollection.create('sendmail', mailData)
-  } catch (e) {
-    // eslint-disable-next-line no-console
-    console.error(e)
-  }
+  const mailService = new MailService()
+  mailService.SendMail(client, mailData)
 }
 
-runService(monthlyReport)
+runService(monthlyReportNotification)
diff --git a/src/utils/date.ts b/src/utils/date.ts
index 92cd0171282bad1a7e4bed0a98d5ed62d491766d..54dada4fca6388921a344d05cf7d39305e5b3efe 100644
--- a/src/utils/date.ts
+++ b/src/utils/date.ts
@@ -8,6 +8,72 @@ export function compareDates(dateA: DateTime, dateB: DateTime) {
   return dateA < dateB ? -1 : 1
 }
 
+// Use to define if the selected date is the last possible for the given timestep
+export const isLastDateReached = (date: DateTime, timeStep: TimeStep) => {
+  switch (timeStep) {
+    case TimeStep.HALF_AN_HOUR:
+      return date.year > DateTime.local().year ||
+        date.month > DateTime.local().month ||
+        date.day > DateTime.local().day ||
+        (date.year === DateTime.local().year &&
+          date.month === DateTime.local().month &&
+          date.day === DateTime.local().day &&
+          date.hour === DateTime.local().endOf('day').hour &&
+          date.minute === 30)
+        ? true
+        : false
+    case TimeStep.HOUR:
+      return date.year > DateTime.local().year ||
+        date.month > DateTime.local().month ||
+        date.day > DateTime.local().day ||
+        (date.year === DateTime.local().year &&
+          date.month === DateTime.local().month &&
+          date.day === DateTime.local().day &&
+          date.hour + 1 > DateTime.local().endOf('day').hour)
+        ? true
+        : false
+    case TimeStep.DAY:
+      return date.year > DateTime.local().year ||
+        date.month > DateTime.local().month ||
+        (date.year === DateTime.local().year &&
+          date.month === DateTime.local().month &&
+          date.day + 1 > DateTime.local().day)
+        ? true
+        : false
+    case TimeStep.MONTH:
+      return date.year > DateTime.local().year ||
+        (date.year === DateTime.local().year &&
+          date.month + 1 > DateTime.local().month)
+        ? true
+        : false
+    case TimeStep.YEAR:
+      return date.year + 1 > DateTime.local().year ? true : false
+  }
+}
+
+// Use to define if the selected date is the last possible
+export const isLastPeriodReached = (date: DateTime, timeStep: TimeStep) => {
+  switch (timeStep) {
+    case TimeStep.HALF_AN_HOUR:
+    case TimeStep.HOUR:
+      return date.endOf('day').plus({ day: 1 }) > DateTime.local().endOf('day')
+        ? true
+        : false
+    case TimeStep.DAY:
+      return date.endOf('month').plus({ month: 1 }) >
+        DateTime.local().endOf('month')
+        ? true
+        : false
+    case TimeStep.MONTH:
+      return date.endOf('year').plus({ year: 1 }) >
+        DateTime.local().endOf('year')
+        ? true
+        : false
+    case TimeStep.YEAR:
+      return date.year + 5 > DateTime.local().year ? true : false
+  }
+}
+
 /*
  * Return the diff of day which represent
  * the possible calculation of data based on configured fluidTypes
@@ -53,7 +119,7 @@ export const formatCompareChallengeDate = (challenge: UserChallenge) => {
     'dd/MM'
   )} au ${period.endDate.toFormat('dd/MM')})`
 }
-export const convertDateByTimeStep = (
+export const convertDateToShortDateString = (
   timeperiod: TimePeriod | null,
   timeStep: TimeStep,
   header = false
@@ -62,10 +128,8 @@ export const convertDateByTimeStep = (
   switch (timeStep) {
     case TimeStep.HALF_AN_HOUR:
       return ' du ' + timeperiod.startDate.toFormat('dd/MM')
-
     case TimeStep.HOUR:
       return ' du ' + timeperiod.startDate.toFormat('dd/MM')
-
     case TimeStep.DAY:
       return (
         (!header ? 'semaine ' : '') +
@@ -74,14 +138,28 @@ export const convertDateByTimeStep = (
         ' au ' +
         timeperiod.endDate.toFormat('dd/MM')
       )
-
     case TimeStep.MONTH:
       return ' du ' + timeperiod.startDate.toFormat('MM/y')
-
     case TimeStep.YEAR:
       return ' de ' + timeperiod.startDate.toFormat('y')
-
     default:
       return ''
   }
 }
+
+export const convertDateToMonthString = (date: DateTime): string => {
+  if (date.month !== 4 && date.month != 8 && date.month != 10) {
+    return ' de ' + date.toLocaleString({ locale: 'fr-FR', month: 'long' })
+  } else {
+    return " d'" + date.toLocaleString({ locale: 'fr-FR', month: 'long' })
+  }
+}
+
+export function getActualReportDate(): DateTime {
+  const now = DateTime.local().startOf('day')
+  if (now.day < 3) {
+    return now.set({ day: 3, month: now.month - 1 })
+  } else {
+    return now.set({ day: 3, month: now.month })
+  }
+}
diff --git a/test/createConnections.js b/test/createConnections.js
new file mode 100644
index 0000000000000000000000000000000000000000..76cef9e13f7ae69c793189217c25a7734290e85e
--- /dev/null
+++ b/test/createConnections.js
@@ -0,0 +1,219 @@
+/* eslint-disable @typescript-eslint/no-var-requires */
+/* eslint-disable @typescript-eslint/camelcase */
+const axios = require('axios')
+const headers = {
+  Accept: 'application/json',
+  Authorization:
+    'Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhcHAiLCJpYXQiOjE2MDIyNTExMTEsImlzcyI6ImNvenkudG9vbHM6ODA4MCIsInN1YiI6ImVjb2x5byIsInNlc3Npb25faWQiOiIzZWQ4MzJjZWM2N2U2ZTBiMmM2MzgyZWRkMzAwYTM0MSJ9.vp7r-LxVrwtvSCxTv5NwGV_AJLozUKqFMhCrG3cLCSnU237dp7pCYOq-CXJRLiG2MvTFztPBEZ2-2Zda_aAT5A',
+  Cookie:
+    'cozysessid=AAAAAF-ALvszZWQ4MzJjZWM2N2U2ZTBiMmM2MzgyZWRkMzAwYTM0MYO4rN61eyNbWbrWXaZShPaUM8YPXSjKPqWA7MV1DQfs',
+  'content-type': 'application/json',
+}
+
+const dataEnedisAccount = JSON.stringify({
+  account_type: 'enedisgrandlyon',
+  name: '',
+  oauth: {
+    access_token: '',
+    expires_at: '2020-10-09T08:00:00.285910671+02:00',
+    refresh_token: '',
+    token_type: 'Bearer',
+  },
+  oauth_callback_results: {
+    issued_at: '1592232569642',
+    refresh_token_issued_at: '1592232569642',
+    scope:
+      '/v4/metering_data/production_load_curve.GET /v3/customers/usage_points/addresses.GET /v4/metering_data/consumption_load_curve.GET /v3/customers/usage_points/contracts.GET /v4/metering_data/daily_production.GET /v4/metering_data/daily_consumption.GET /v4/metering_data/daily_consumption_max_power.GET /v3/customers/identity.GET',
+    usage_points_id: '',
+  },
+})
+
+const dataGrdfAccount = JSON.stringify({
+  account_type: 'grdfgrandlyon',
+  auth: {
+    credentials_encrypted:
+      'bmFjbMKrNCS+4Liakxdu+xNu9I3sSyvda8iAp0o3U3OAymbIeoLhLtxPdsa+3mu/8yTnDudBcJo=',
+    login: 'test',
+  },
+  id: '89e68b8450cee09fe2f077610901094d',
+  identifier: 'login',
+  state: null,
+})
+
+const dataEglAccount = JSON.stringify({
+  account_type: 'eglgrandlyon',
+  auth: {
+    credentials_encrypted:
+      'bmFjbHI5OoL+VNCT6JDFYea1dNiBGGNJM1zY0M4uWcjhALJcQT9uk9p9WPD7+1OryCAoYf9eaSE=',
+    login: 'test',
+  },
+  id: '90e68b8450cee09fe2f077610901094d',
+  identifier: 'login',
+  state: null,
+})
+
+const dataEnedisTrigger = JSON.stringify({
+  data: {
+    attributes: {
+      _id: '3ed832cec67e6e0b2c6382edd30df11c',
+      domain: 'cozy.tools:8080',
+      prefix: 'cozy35ba44d2d1749e6f21646edce51e7190',
+      type: '@cron',
+      worker: 'konnector',
+      arguments: '0 47 8 * * *',
+      debounce: '',
+      options: null,
+      message: {
+        account: '88e68b8450cee09fe2f077610901094d',
+        konnector: 'enedisgrandlyon',
+      },
+      cozyMetadata: {
+        doctypeVersion: '1',
+        metadataVersion: 1,
+        createdAt: '2020-10-09T08:00:00.6092798Z',
+        createdByApp: 'ecolyo',
+        updatedAt: '2020-10-09T08:00:00.6092798Z',
+      },
+    },
+  },
+})
+
+const dataGrdfTrigger = JSON.stringify({
+  data: {
+    attributes: {
+      _id: '4ed832cec67e6e0b2c6382edd30df11c',
+      domain: 'cozy.tools:8080',
+      prefix: 'cozy35ba44d2d1749e6f21646edce51e7190',
+      type: '@cron',
+      worker: 'konnector',
+      arguments: '0 47 8 * * *',
+      debounce: '',
+      options: null,
+      message: {
+        account: '89e68b8450cee09fe2f077610901094d',
+        konnector: 'grdfgrandlyon',
+      },
+      cozyMetadata: {
+        doctypeVersion: '1',
+        metadataVersion: 1,
+        createdAt: '2020-10-09T08:00:00.6092798Z',
+        createdByApp: 'ecolyo',
+        updatedAt: '2020-10-09T08:00:00.6092798Z',
+      },
+    },
+  },
+})
+
+const dataEglTrigger = JSON.stringify({
+  data: {
+    attributes: {
+      _id: '5ed832cec67e6e0b2c6382edd30df11c',
+      domain: 'cozy.tools:8080',
+      prefix: 'cozy35ba44d2d1749e6f21646edce51e7190',
+      type: '@cron',
+      worker: 'konnector',
+      arguments: '0 47 8 * * *',
+      debounce: '',
+      options: null,
+      message: {
+        account: '90e68b8450cee09fe2f077610901094d',
+        konnector: 'eglgrandlyon',
+      },
+      cozyMetadata: {
+        doctypeVersion: '1',
+        metadataVersion: 1,
+        createdAt: '2020-10-09T08:00:00.6092798Z',
+        createdByApp: 'ecolyo',
+        updatedAt: '2020-10-09T08:00:00.6092798Z',
+      },
+    },
+  },
+})
+
+async function launch() {
+  // Enedis
+  await axios({
+    method: 'put',
+    url:
+      'http://cozy.tools:8080/data/io.cozy.accounts/88e68b8450cee09fe2f077610901094d',
+    headers: headers,
+    data: dataEnedisAccount,
+  })
+    .then(function(response) {
+      console.log(JSON.stringify(response.data))
+    })
+    .catch(function(error) {
+      console.log(error)
+    })
+
+  await axios({
+    method: 'post',
+    url: 'http://cozy.tools:8080/jobs/triggers',
+    headers: headers,
+    data: dataEnedisTrigger,
+  })
+    .then(function(response) {
+      console.log(JSON.stringify(response.data))
+    })
+    .catch(function(error) {
+      console.log(error)
+    })
+
+  // GRDF
+  await axios({
+    method: 'put',
+    url:
+      'http://cozy.tools:8080/data/io.cozy.accounts/89e68b8450cee09fe2f077610901094d',
+    headers: headers,
+    data: dataGrdfAccount,
+  })
+    .then(function(response) {
+      console.log(JSON.stringify(response.data))
+    })
+    .catch(function(error) {
+      console.log(error)
+    })
+
+  await axios({
+    method: 'post',
+    url: 'http://cozy.tools:8080/jobs/triggers',
+    headers: headers,
+    data: dataGrdfTrigger,
+  })
+    .then(function(response) {
+      console.log(JSON.stringify(response.data))
+    })
+    .catch(function(error) {
+      console.log(error)
+    })
+
+  // EGL
+  await axios({
+    method: 'put',
+    url:
+      'http://cozy.tools:8080/data/io.cozy.accounts/90e68b8450cee09fe2f077610901094d',
+    headers: headers,
+    data: dataEglAccount,
+  })
+    .then(function(response) {
+      console.log(JSON.stringify(response.data))
+    })
+    .catch(function(error) {
+      console.log(error)
+    })
+
+  await axios({
+    method: 'post',
+    url: 'http://cozy.tools:8080/jobs/triggers',
+    headers: headers,
+    data: dataEglTrigger,
+  })
+    .then(function(response) {
+      console.log(JSON.stringify(response.data))
+    })
+    .catch(function(error) {
+      console.log(error)
+    })
+}
+
+launch()
diff --git a/test/data/accountData.json b/test/data/accountData.json
deleted file mode 100644
index 4ffc2d98337c82313cea9359b41e2fa3a5eb7f8f..0000000000000000000000000000000000000000
--- a/test/data/accountData.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{"io.cozy.accounts":
-  [
-    {
-      "account_type": "grdfgrandlyon",
-      "auth": {
-        "credentials_encrypted": "bmFjbI7TqHf7FTj8b6T8JyV7ORUSYjziwua6bnbh0P3CE/3dJ9G0w6GdtmhbuqxAgqiQS/uqrZw=",
-        "login": "test"
-      },
-      "identifier": "login",
-      "state": null
-    },
-    {
-      "account_type": "eglgrandlyon",
-      "auth": {
-        "credentials_encrypted": "bmFjbHI5OoL+VNCT6JDFYea1dNiBGGNJM1zY0M4uWcjhALJcQT9uk9p9WPD7+1OryCAoYf9eaSE=",
-        "login": "test"
-      },
-      "identifier": "login",
-      "state": null
-    },
-    {
-      "account_type": "enedisgrandlyon",
-      "name": "",
-      "oauth": {
-        "access_token": "",
-        "expires_at": "2020-06-16T04:17:03.285910671+02:00",
-        "refresh_token": "",
-        "token_type": "Bearer"
-      },
-      "oauth_callback_results": {
-        "issued_at": "1592232569642",
-        "refresh_token_issued_at": "1592232569642",
-        "scope": "/v4/metering_data/production_load_curve.GET /v3/customers/usage_points/addresses.GET /v4/metering_data/consumption_load_curve.GET /v3/customers/usage_points/contracts.GET /v4/metering_data/daily_production.GET /v4/metering_data/daily_consumption.GET /v4/metering_data/daily_consumption_max_power.GET /v3/customers/identity.GET",
-        "usage_points_id": ""
-      }
-    }
-  ]
-}
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index 545ed92b970e09d4bd23ff7f735f165880493c84..cdf1e09371455206900abea31a709a53f42b7cc4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9472,13 +9472,6 @@ minilog@3.1.0, "minilog@https://github.com/cozy/minilog.git#master":
   dependencies:
     microee "0.0.6"
 
-"minilog@git+https://github.com/cozy/minilog.git#master":
-  version "3.1.0"
-  uid f01f7d9dfe20981177dd34b9662c2f077d818f82
-  resolved "git+https://github.com/cozy/minilog.git#f01f7d9dfe20981177dd34b9662c2f077d818f82"
-  dependencies:
-    microee "0.0.6"
-
 minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"