diff --git a/3/ecolyo.70ee7c6a37c405135013.js b/3/ecolyo.a29511c9935a11e987b6.js
similarity index 99%
rename from 3/ecolyo.70ee7c6a37c405135013.js
rename to 3/ecolyo.a29511c9935a11e987b6.js
index e0cfcfab7f1c7e558fcc3a4f03dfca051a4c4901..b64450387f090fd00dd2e732bcc83a931754acdb 100644
--- a/3/ecolyo.70ee7c6a37c405135013.js
+++ b/3/ecolyo.a29511c9935a11e987b6.js
@@ -811,8 +811,6 @@ var _Dialog = _interopRequireDefault(__webpack_require__("HhgX"));
 
 var _reactRedux = __webpack_require__("/MKj");
 
-var _decoreText = __webpack_require__("j5h9");
-
 var ReleaseNotesModal = function ReleaseNotesModal(_ref) {
   var open = _ref.open,
       handleCloseClick = _ref.handleCloseClick;
@@ -856,7 +854,7 @@ var ReleaseNotesModal = function ReleaseNotesModal(_ref) {
       className: "release-note-message text-16-bold"
     }, note.title), /*#__PURE__*/_react.default.createElement("div", {
       className: "release-note-description text-16-normal"
-    }, (0, _decoreText.decoreText)(note.description)));
+    }, note.description));
   })), /*#__PURE__*/_react.default.createElement("div", {
     className: "release-note-button"
   }, /*#__PURE__*/_react.default.createElement(_Button.default, {
@@ -5941,25 +5939,11 @@ var TotalConsumption = function TotalConsumption(_ref) {
             switch (_context.prev = _context.next) {
               case 0:
                 consumptionService = new _consumption.default(client);
-
-                if (!(fluidType === _fluid.FluidType.ELECTRICITY)) {
-                  _context.next = 7;
-                  break;
-                }
-
-                _context.next = 4;
+                _context.next = 3;
                 return consumptionService.checkDoctypeEntries(_fluid.FluidType.ELECTRICITY, _timeStep.TimeStep.HALF_AN_HOUR);
 
-              case 4:
-                _context.t0 = _context.sent;
-                _context.next = 8;
-                break;
-
-              case 7:
-                _context.t0 = false;
-
-              case 8:
-                activateHalfHourLoad = _context.t0;
+              case 3:
+                activateHalfHourLoad = _context.sent;
                 converterService = new _converter.default();
                 total = 0;
                 totalPrice = 0;
@@ -5972,7 +5956,7 @@ var TotalConsumption = function TotalConsumption(_ref) {
                 displayedValue = total <= 0 || !activateHalfHourLoad && currentTimeStep === _timeStep.TimeStep.HALF_AN_HOUR && fluidType === _fluid.FluidType.ELECTRICITY ? '-----' : fluidType === _fluid.FluidType.MULTIFLUID ? (0, _utils.formatNumberValues)(total).toString() : totalPrice <= 0 ? (0, _utils.formatNumberValues)(converterService.LoadToEuro(total, fluidType)).toString() : (0, _utils.formatNumberValues)(totalPrice).toString();
                 setTotalValue(displayedValue);
 
-              case 15:
+              case 10:
               case "end":
                 return _context.stop();
             }
diff --git a/app/ecolyo.5cc3e1d382e6cdb43a57.js b/app/ecolyo.661ca74a9860cde92f98.js
similarity index 99%
rename from app/ecolyo.5cc3e1d382e6cdb43a57.js
rename to app/ecolyo.661ca74a9860cde92f98.js
index 35cde550bd4fa74f12e8adc241e7727e9e9931f4..75ee69448c9460efdb36a228b992ebf4666e5412 100644
--- a/app/ecolyo.5cc3e1d382e6cdb43a57.js
+++ b/app/ecolyo.661ca74a9860cde92f98.js
@@ -64,7 +64,7 @@
 /******/
 /******/ 	// script path function
 /******/ 	function jsonpScriptSrc(chunkId) {
-/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"2":"53b3b5017b9ca24efe17","3":"70ee7c6a37c405135013","4":"5e481431cf0b2359d58d","5":"be40de25a698f7337c41","6":"cf316224f80d91ba8e19","7":"8e0088481e1baf094fa4","8":"bcd9da9f5a58c3f60050","9":"b67676e3ba222d0c6efa","10":"1823bf23fa5cf052fd8e"}[chunkId] + ".js"
+/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"2":"53b3b5017b9ca24efe17","3":"a29511c9935a11e987b6","4":"5e481431cf0b2359d58d","5":"be40de25a698f7337c41","6":"cf316224f80d91ba8e19","7":"8e0088481e1baf094fa4","8":"bcd9da9f5a58c3f60050","9":"b67676e3ba222d0c6efa","10":"1823bf23fa5cf052fd8e"}[chunkId] + ".js"
 /******/ 	}
 /******/
 /******/ 	// The require function
@@ -1583,46 +1583,50 @@ var SplashRoot = function SplashRoot(_ref) {
 
               case 6:
                 migrationsResult = _context.sent;
+                _context.next = 9;
+                return initializationService.initIndex();
+
+              case 9:
                 // Init last release notes when they exist
                 dispatch((0, _global.showReleaseNotes)(migrationsResult.show, migrationsResult.notes)); //init Terms
 
-                _context.next = 10;
+                _context.next = 12;
                 return initializationService.initConsent();
 
-              case 10:
+              case 12:
                 termsStatus = _context.sent;
                 if (subscribed) dispatch((0, _global.updateTermValidation)(termsStatus)); // Init fluidPrices
 
-                _context.next = 14;
+                _context.next = 16;
                 return initializationService.initFluidPrices();
 
-              case 14:
-                _context.next = 16;
+              case 16:
+                _context.next = 18;
                 return initializationService.initProfile();
 
-              case 16:
+              case 18:
                 profile = _context.sent;
-                _context.next = 19;
+                _context.next = 21;
                 return initializationService.initProfileType();
 
-              case 19:
+              case 21:
                 profileType = _context.sent;
-                _context.next = 22;
+                _context.next = 24;
                 return initializationService.initProfileEcogesture();
 
-              case 22:
+              case 24:
                 profileEcogesture = _context.sent;
 
                 if (!(subscribed && profile)) {
-                  _context.next = 46;
+                  _context.next = 48;
                   break;
                 }
 
                 setValidExploration(_userExploration.UserExplorationID.EXPLORATION007);
-                _context.next = 27;
+                _context.next = 29;
                 return Promise.all([initializationService.initEcogesture(profile.ecogestureHash), initializationService.initDuelEntity(profile.duelHash), initializationService.initQuizEntity(profile.quizHash), initializationService.initExplorationEntity(profile.challengeHash), initializationService.initChallengeEntity(profile.explorationHash), initializationService.initAnalysis(profile)]);
 
-              case 27:
+              case 29:
                 _yield$Promise$all = _context.sent;
                 _yield$Promise$all2 = (0, _slicedToArray2.default)(_yield$Promise$all, 6);
                 ecogestureHash = _yield$Promise$all2[0];
@@ -1650,11 +1654,11 @@ var SplashRoot = function SplashRoot(_ref) {
 
                 dispatch((0, _global.toggleAnalysisNotification)(!profile.haveSeenLastAnalysis));
 
-              case 46:
-                _context.next = 48;
+              case 48:
+                _context.next = 50;
                 return initializationService.initFluidStatus();
 
-              case 48:
+              case 50:
                 fluidStatus = _context.sent;
 
                 if (subscribed) {
@@ -1683,14 +1687,14 @@ var SplashRoot = function SplashRoot(_ref) {
                 } // Init Challenge
 
 
-                _context.next = 52;
+                _context.next = 54;
                 return initializationService.initUserChallenges(fluidStatus);
 
-              case 52:
+              case 54:
                 userChallengeList = _context.sent;
 
                 if (!subscribed) {
-                  _context.next = 79;
+                  _context.next = 81;
                   break;
                 }
 
@@ -1705,22 +1709,22 @@ var SplashRoot = function SplashRoot(_ref) {
 
 
                 if (!(((_filteredCurrentOngoi2 = filteredCurrentOngoingChallenge[0]) === null || _filteredCurrentOngoi2 === void 0 ? void 0 : _filteredCurrentOngoi2.action.state) === _userAction.UserActionState.ONGOING)) {
-                  _context.next = 63;
+                  _context.next = 65;
                   break;
                 }
 
                 actionService = new _action.default(client);
-                _context.next = 61;
+                _context.next = 63;
                 return actionService.isActionDone(filteredCurrentOngoingChallenge[0]);
 
-              case 61:
+              case 63:
                 updatedUserChallenge = _context.sent;
 
                 if (updatedUserChallenge) {
                   dispatch((0, _challenge.updateUserChallengeList)(updatedUserChallenge));
                 }
 
-              case 63:
+              case 65:
                 // Set Notification if action state is notification
                 if (((_filteredCurrentOngoi3 = filteredCurrentOngoingChallenge[0]) === null || _filteredCurrentOngoi3 === void 0 ? void 0 : _filteredCurrentOngoi3.action.state) === _userAction.UserActionState.NOTIFICATION) {
                   dispatch((0, _global.toggleChallengeActionNotification)(true));
@@ -1731,52 +1735,52 @@ var SplashRoot = function SplashRoot(_ref) {
                 });
 
                 if (!(((_filteredCurrentDuelC = filteredCurrentDuelChallenge[0]) === null || _filteredCurrentDuelC === void 0 ? void 0 : _filteredCurrentDuelC.duel.state) === _userDuel.UserDuelState.ONGOING)) {
-                  _context.next = 79;
+                  _context.next = 81;
                   break;
                 }
 
-                _context.next = 68;
+                _context.next = 70;
                 return initializationService.initDuelProgress(filteredCurrentDuelChallenge[0]);
 
-              case 68:
+              case 70:
                 _yield$initialization = _context.sent;
                 _updatedUserChallenge = _yield$initialization.updatedUserChallenge;
                 dataloads = _yield$initialization.dataloads;
 
                 if (!subscribed) {
-                  _context.next = 79;
+                  _context.next = 81;
                   break;
                 }
 
                 dispatch((0, _challenge.setChallengeConsumption)(_updatedUserChallenge, dataloads)); // Check is duel is done and display notification
 
                 challengeService = new _challenge2.default(client);
-                _context.next = 76;
+                _context.next = 78;
                 return challengeService.isChallengeDone(_updatedUserChallenge, dataloads);
 
-              case 76:
+              case 78:
                 _yield$challengeServi = _context.sent;
                 isDone = _yield$challengeServi.isDone;
                 dispatch((0, _global.toggleChallengeDuelNotification)(isDone));
 
-              case 79:
+              case 81:
                 if (!profile) {
-                  _context.next = 82;
+                  _context.next = 84;
                   break;
                 }
 
-                _context.next = 82;
+                _context.next = 84;
                 return _usageEvent.default.addEvent(client, {
                   type: _usageEvent2.UsageEventType.CONNECTION_EVENT,
                   result: profile.isFirstConnection ? 'firstConnection' : undefined,
                   context: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ? 'mobile' : 'desktop'
                 });
 
-              case 82:
-                _context.next = 84;
+              case 84:
+                _context.next = 86;
                 return partnersInfoService.getPartnersInfo();
 
-              case 84:
+              case 86:
                 partnersInfo = _context.sent;
                 // Get last partnersIssueDate
                 today = _luxon.DateTime.local().setZone('utc', {
@@ -1784,15 +1788,15 @@ var SplashRoot = function SplashRoot(_ref) {
                 }).startOf('day').toISO(); // If notification is activated and konnector is connected, set FluidStatus to PARTNER_ISSUE
 
                 if (!(partnersInfo && partnersInfo.notification_activated)) {
-                  _context.next = 96;
+                  _context.next = 98;
                   break;
                 }
 
                 fluidService = new _fluid3.default(client);
-                _context.next = 90;
+                _context.next = 92;
                 return fluidService.getFluidStatus(partnersInfo);
 
-              case 90:
+              case 92:
                 _updatedFluidStatus = _context.sent;
                 isConcernedByPartnerIssue = false;
                 _iterator2 = _createForOfIteratorHelper(_updatedFluidStatus);
@@ -1819,7 +1823,7 @@ var SplashRoot = function SplashRoot(_ref) {
                   dispatch((0, _global.setPartnersIssue)(true));
                 }
 
-              case 96:
+              case 98:
                 if (subscribed) {
                   _logger.default.info('Initialization finished successfully !');
 
@@ -1830,11 +1834,11 @@ var SplashRoot = function SplashRoot(_ref) {
                   });
                 }
 
-                _context.next = 103;
+                _context.next = 105;
                 break;
 
-              case 99:
-                _context.prev = 99;
+              case 101:
+                _context.prev = 101;
                 _context.t0 = _context["catch"](3);
 
                 if (_context.t0.message === 'Failed to fetch' && !initStepErrors) {
@@ -1843,12 +1847,12 @@ var SplashRoot = function SplashRoot(_ref) {
 
                 _logger.default.error("[Initialization] Error : ".concat(_context.t0));
 
-              case 103:
+              case 105:
               case "end":
                 return _context.stop();
             }
           }
-        }, _callee, null, [[3, 99]]);
+        }, _callee, null, [[3, 101]]);
       }));
       return _loadData.apply(this, arguments);
     }
@@ -2898,6 +2902,7 @@ exports.InitStepsErrors = InitStepsErrors;
   InitStepsErrors["ECOGESTURE_ERROR"] = "ecogesture_error";
   InitStepsErrors["CHALLENGES_ERROR"] = "challenges_error";
   InitStepsErrors["ANALYSIS_ERROR"] = "analysis_error";
+  InitStepsErrors["INDEX_ERROR"] = "index_error";
   InitStepsErrors["PRICES_ERROR"] = "prices_error";
   InitStepsErrors["CONSOS_ERROR"] = "consos_error";
   InitStepsErrors["PARTNERS_ERROR"] = "partners_error";
@@ -3230,7 +3235,6 @@ var _classCallCheck2 = _interopRequireDefault(__webpack_require__("lwsE"));
 
 var _createClass2 = _interopRequireDefault(__webpack_require__("W8MJ"));
 
-/* eslint-disable @typescript-eslint/no-explicit-any */
 var MailService = /*#__PURE__*/function () {
   function MailService() {
     (0, _classCallCheck2.default)(this, MailService);
@@ -6353,36 +6357,6 @@ var migrations = [{
 
     return run;
   }()
-}, {
-  baseSchemaVersion: 20,
-  targetSchemaVersion: 21,
-  appVersion: '1.11.0',
-  description: 'Inform user of the new SGE konnector',
-  releaseNotes: {
-    title: 'Vos connecteurs evoluent !',
-    description: "Pour continuer à accéder à vos données, merci de vous reconnecter via ce nouveau parcours. Aucune donnée ne sera perdue, et vos données seront à nouveau mises à jour quotidiennement. <p>Pourquoi ce changement ?</p> Pour faciliter l'accès aux données de consommation au plus grand nombre. Plus besoin de se créer un compte Enedis, l'accès aux données en est facilité. N'hésitez pas à en parler autour de vous ! :)"
-  },
-  docTypes: '',
-  run: function () {
-    var _run21 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee21() {
-      return _regenerator.default.wrap(function _callee21$(_context21) {
-        while (1) {
-          switch (_context21.prev = _context21.next) {
-            case 0:
-            case "end":
-              return _context21.stop();
-          }
-        }
-      }, _callee21);
-    }));
-
-    function run() {
-      return _run21.apply(this, arguments);
-    }
-
-    return run;
-  }(),
-  isEmpty: true
 }];
 exports.migrations = migrations;
 
@@ -16845,6 +16819,7 @@ var _logger = _interopRequireDefault(__webpack_require__("gjtA"));
 
 var _dataload = __webpack_require__("D5WE");
 
+/* eslint-disable @typescript-eslint/no-explicit-any */
 var QueryRunner = /*#__PURE__*/function () {
   // TODO to be clean up
 
@@ -17251,7 +17226,7 @@ var QueryRunner = /*#__PURE__*/function () {
                   }),
                   endDate: maxTimePeriod.startDate.plus({
                     day: -1
-                  }).endOf('day')
+                  }).endOf('days')
                 };
                 lastDayOfPreviousMonthQuery = this.buildMaxQuery(timeStep, lastDayOfPreviousMonth, fluidType, this._max_limit);
                 _context4.next = 9;
@@ -26945,27 +26920,21 @@ var decoreText = function decoreText(line, action) {
       target: "_blank",
       rel: "noopener noreferrer"
     }, line.substring(indexRefEnd + 2, indexEnd)), line.substring(indexEnd + 4, line.length));
-  } else if (line.includes('<p>')) {
-    var indexStart = line.indexOf('<p>');
-
-    var _indexEnd = line.indexOf('</p>');
-
-    return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, line.substring(0, indexStart), /*#__PURE__*/_react.default.createElement("p", null, line.substring(indexStart + 3, _indexEnd)), line.substring(_indexEnd + 4, line.length));
   } else if (line.includes('<span>')) {
-    var _indexStart = line.indexOf('<span>');
+    var indexStart = line.indexOf('<span>');
 
-    var _indexEnd2 = line.indexOf('</span>');
+    var _indexEnd = line.indexOf('</span>');
 
-    return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, line.substring(0, _indexStart), /*#__PURE__*/_react.default.createElement("span", null, line.substring(_indexStart + 6, _indexEnd2)), line.substring(_indexEnd2 + 7, line.length));
+    return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, line.substring(0, indexStart), /*#__PURE__*/_react.default.createElement("span", null, line.substring(indexStart + 6, _indexEnd)), line.substring(_indexEnd + 7, line.length));
   } else if (line.includes('<span class="action">')) {
-    var _indexStart2 = line.indexOf('<span class="action">');
+    var _indexStart = line.indexOf('<span class="action">');
 
-    var _indexEnd3 = line.indexOf('</span>');
+    var _indexEnd2 = line.indexOf('</span>');
 
-    return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, line.substring(0, _indexStart2), /*#__PURE__*/_react.default.createElement("button", {
+    return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, line.substring(0, _indexStart), /*#__PURE__*/_react.default.createElement("button", {
       className: "action",
       onClick: action
-    }, line.substring(_indexStart2 + 21, _indexEnd3)), line.substring(_indexEnd3 + 7, line.length));
+    }, line.substring(_indexStart + 21, _indexEnd2)), line.substring(_indexEnd2 + 7, line.length));
   } else {
     return line;
   }
@@ -30411,146 +30380,134 @@ function _migrate() {
       while (1) {
         switch (_context8.prev = _context8.next) {
           case 0:
-            if (!migration.isEmpty) {
-              _context8.next = 3;
-              break;
-            }
-
-            updateSchemaVersion(_client, migration.targetSchemaVersion);
-            return _context8.abrupt("return", {
-              errors: [],
-              type: 'MigrationComplete'
-            });
-
-          case 3:
-            _context8.next = 5;
+            _context8.next = 2;
             return schemaExist(_client);
 
-          case 5:
+          case 2:
             if (_context8.sent) {
-              _context8.next = 8;
+              _context8.next = 5;
               break;
             }
 
-            _context8.next = 8;
+            _context8.next = 5;
             return initSchemaDoctype(_client);
 
-          case 8:
-            _context8.next = 10;
+          case 5:
+            _context8.next = 7;
             return currentSchemaVersion(_client);
 
-          case 10:
+          case 7:
             _context8.t0 = _context8.sent;
             _context8.t1 = migration.baseSchemaVersion;
 
             if (!(_context8.t0 !== _context8.t1)) {
-              _context8.next = 16;
+              _context8.next = 13;
               break;
             }
 
             return _context8.abrupt("return", migrationNoop());
 
-          case 16:
-            _context8.prev = 16;
-            _context8.next = 19;
+          case 13:
+            _context8.prev = 13;
+            _context8.next = 16;
             return getDocs(_client, migration.docTypes, migration.queryOptions);
 
-          case 19:
+          case 16:
             docToUpdate = _context8.sent;
 
             if (!migration.isDeprecated) {
-              _context8.next = 24;
+              _context8.next = 21;
               break;
             }
 
             result = migrationNoop();
-            _context8.next = 38;
+            _context8.next = 35;
             break;
 
-          case 24:
+          case 21:
             if (!(docToUpdate.length && !migration.isCreate)) {
-              _context8.next = 37;
+              _context8.next = 34;
               break;
             }
 
-            _context8.next = 27;
+            _context8.next = 24;
             return migration.run(_client, docToUpdate);
 
-          case 27:
+          case 24:
             migratedDocs = _context8.sent;
 
             if (!migratedDocs.length) {
-              _context8.next = 34;
+              _context8.next = 31;
               break;
             }
 
-            _context8.next = 31;
+            _context8.next = 28;
             return save(_client, migratedDocs);
 
-          case 31:
+          case 28:
             result = _context8.sent;
-            _context8.next = 35;
+            _context8.next = 32;
             break;
 
-          case 34:
+          case 31:
             result = migrationNoop();
 
-          case 35:
-            _context8.next = 38;
+          case 32:
+            _context8.next = 35;
             break;
 
-          case 37:
+          case 34:
             result = migrationNoop();
 
-          case 38:
+          case 35:
             if (!(migration.isCreate && !migration.isDeprecated)) {
-              _context8.next = 42;
+              _context8.next = 39;
               break;
             }
 
-            _context8.next = 41;
+            _context8.next = 38;
             return migration.run(_client, docToUpdate);
 
-          case 41:
+          case 38:
             result = {
               type: _migration.MIGRATION_RESULT_COMPLETE,
               errors: []
             };
 
-          case 42:
+          case 39:
             _context8.t2 = result.type;
-            _context8.next = _context8.t2 === _migration.MIGRATION_RESULT_NOOP ? 45 : _context8.t2 === _migration.MIGRATION_RESULT_COMPLETE ? 45 : 48;
+            _context8.next = _context8.t2 === _migration.MIGRATION_RESULT_NOOP ? 42 : _context8.t2 === _migration.MIGRATION_RESULT_COMPLETE ? 42 : 45;
             break;
 
-          case 45:
-            _context8.next = 47;
+          case 42:
+            _context8.next = 44;
             return updateSchemaVersion(_client, migration.targetSchemaVersion);
 
-          case 47:
-            return _context8.abrupt("break", 48);
+          case 44:
+            return _context8.abrupt("break", 45);
 
-          case 48:
-            _context8.next = 54;
+          case 45:
+            _context8.next = 51;
             break;
 
-          case 50:
-            _context8.prev = 50;
-            _context8.t3 = _context8["catch"](16);
+          case 47:
+            _context8.prev = 47;
+            _context8.t3 = _context8["catch"](13);
             console.error(_context8.t3);
             result = {
               type: _migration.MIGRATION_RESULT_FAILED,
               errors: [_context8.t3.toString()]
             };
 
-          case 54:
+          case 51:
             return _context8.abrupt("return", result);
 
-          case 55:
+          case 52:
           case "end":
             return _context8.stop();
         }
       }
-    }, _callee8, null, [[16, 50]]);
+    }, _callee8, null, [[13, 47]]);
   }));
   return _migrate.apply(this, arguments);
 }
@@ -31403,7 +31360,7 @@ exports.push([module.i, "/* Cozy UI utilities classes */\n/* Cozy UI React compo
 /***/ "pZg0":
 /***/ (function(module, exports) {
 
-module.exports = {"name":"Ecolyo","slug":"ecolyo","icon":"icon.svg","categories":["energy"],"version":"1.11.0","licence":"AGPL-3.0","editor":"Métropole de Lyon","default_locale":"fr","locales":{"fr":{"short_description":"Ecolyo est le service proposé par la Métropole de Lyon pour suivre et comprendre les consommations d’énergie et d’eau de votre foyer.","long_description":"Ecolyo est le service proposé par la Métropole de Lyon pour suivre et comprendre les consommations d’énergie et d’eau de votre foyer afin de vous accompagner dans la gestion quotidienne de ces consommations et ce, de façon ludique en vous lançant des défis personnalisés.","permissions":{"ecolyo":{"description":"Requises pour le fonctionnement des différentes parties de l’application (Analyse, liste d’écogestes personnalisée, …)."},"enedis":{"description":"Requises pour l’affichage et l’analyse de vos consommations électriques dans Ecolyo. Issues du connecteur Enedis."},"grdf":{"description":"Requises pour l’affichage et l’analyse de vos consommations de gaz dans Ecolyo. Issues du connecteur GRDF."},"egl":{"description":"Requises pour l’affichage et l’analyse de vos consommations d’eau dans Ecolyo. Issues du connecteur Eau du Grand Lyon."},"konnectors":{"description":"Requis pour vérifier la présence des connecteurs Enedis, GRDF et Eau du Grand Lyon ainsi que pour pouvoir les configurer à partir de l’application Ecolyo."},"accounts":{"description":"Requis pour stocker des informations propres aux comptes énergie et eau (Enedis, GRDF, Eau du Grand Lyon). Sont stockés votre numéro de PDL pour Enedis, votre numéro de PCE pour GRDF, vos logins et mots de passe pour Eau du Grand Lyon."},"triggers":{"description":"Requis pour le bon fonctionnement des connecteurs énergie et eau."},"jobs":{"description":"Requis pour le bon fonctionnement des connecteurs énergie et eau."},"terms":{"description":"Nécessaire pour la gestion des consentements de l'application"},"apps":{"description":"Requis par Cozy pour afficher les icônes des applications installées dans la barre Cozy."},"settings":{"description":"Requis pour afficher les paramètres Cozy dans la barre Cozy."},"ecolyo-dju":{"description":"Requis pour la récupération des DJU (Degrés Jours Unifiés), informations météorologiques permettant d’ajuster le modèle de comparaison des consommations énergétiques."},"dacc-dev":{"description":"Requis pour la récupération et l’envoi de statistiques d’utilisation anonymisées dans un environnement de test."},"dacc":{"description":"Requis pour envoyer des statistiques d'utilisation anonymisées."},"backoffice-rec":{"description":"Requis pour la récupération des données de la newsletter dans un environment de test."},"backoffice":{"description":"Requis pour la récupération des données de la newsletter."},"backoffice-partners-info-rec":{"description":"Requis pour la récupération du status des services partenaires dans un environment de test."},"backoffice-partners-info":{"description":"Requis pour la récupération du status des services partenaires"},"backoffice-prices-rec":{"description":"Requis pour la récupération du prix des fluides dans un environnement de test."},"backoffice-prices":{"description":"Requis pour la récupération du prix des fluides."}}},"en":{"short_description":"Ecolyo a free service developed by Métropole de Lyon to help you to monitor and understand the energy and water consumption of your home.","long_description":"Ecolyo a free service developed by the Métropole de Lyon to help you to monitor and understand the energy and water consumption of your home. To help you in reducing your daily consumption it gives you best energy consumption practices, consumption analysis and challenges to take up. At least one Smartmeter is needed among Linky (for electricity), Gazpar (for gas) or Téléo (for water).","permissions":{"ecolyo":{"description":"Required for the operation of the different parts of the application (Analysis, customized eco-gesture lists, etc...)."},"enedis":{"description":"Required for the display and analysis of your electricity consumption in Ecolyo. Retrieved by the Enedis connector."},"grdf":{"description":"Required for the display and analysis of your gas consumption in Ecolyo. Retrieved by the GRDF connector."},"egl":{"description":"Required for the display and analysis of your water consumption in Ecolyo. Retrieved by the Eau du Grand Lyon connector."},"konnectors":{"description":"Required to verify the presence of the Enedis, GRDF and Eau du Grand Lyon connectors as well as to be able to configure them from the Ecolyo application."},"accounts":{"description":"Required to store information specific to energy and water accounts (Enedis, GRDF, Eau du Grand Lyon). Your PDL number for Enedis, your PCE number for GRDF, your logins and passwords for Eau du Grand Lyon are stored."},"triggers":{"description":"Required for the correct functioning of the energy and water connectors."},"jobs":{"description":"Required for the correct functioning of the energy and water connectors."},"terms":{"description":"Required for the correct managment of CGU."},"apps":{"description":"Required to display the icons of installed applications in the Cozy bar."},"settings":{"description":"Required for the application's consents managment"},"ecolyo-dju":{"description":"Required to gather udd data (Unified Degree Days), a meteorological data allowing the app to adjust our energical consumption model. "},"dacc-dev":{"description":"Required for gathering and sending anonymous usage statistics for test environment."},"dacc":{"description":"Required for sending cozy anonymized stats."},"backoffice-rec":{"description":"Required for retrieving newsletter informations from backoffice rec."},"backoffice":{"description":"Required for retrieving newsletter informations from backoffice prod."},"backoffice-partners-info-rec":{"description":"Required for getting the status of partners' services in test environment."},"backoffice-partners-info":{"description":"Required for getting the status of partners' services"},"backoffice-prices-rec":{"description":"Required for getting fluid prices form backoffice rec."},"backoffice-prices":{"description":"Required for getting fluid prices form backoffice prod"}}}},"langs":["fr"],"developer":{"name":"Métropole de Lyon","url":"https://www.grandlyon.com/"},"routes":{"/":{"folder":"/","index":"index.html","public":false}},"services":{"enedisHalfHourMonthlyAnalysis":{"type":"node","file":"services/enedisHalfHourMonthlyAnalysis/ecolyo.js","trigger":"@cron 0 0 8 3 * *"},"monthlyReportNotification":{"type":"node","file":"services/monthlyReportNotification/ecolyo.js","trigger":"@cron 0 0 10 3 * *"},"consumptionAlert":{"type":"node","file":"services/consumptionAlert/ecolyo.js","trigger":"@cron 0 3 * * *"},"aggregatorUsageEvents":{"type":"node","file":"services/aggregatorUsageEvents/ecolyo.js","trigger":"@cron 0 1 * * *"},"fluidsPrices":{"type":"node","file":"services/fluidsPrices/ecolyo.js","trigger":"@cron 0 2 * * *"}},"permissions":{"ecolyo":{"type":"com.grandlyon.ecolyo.*"},"enedis":{"type":"com.grandlyon.enedis.*"},"grdf":{"type":"com.grandlyon.grdf.*"},"egl":{"type":"com.grandlyon.egl.*"},"konnectors":{"type":"io.cozy.konnectors"},"accounts":{"type":"io.cozy.accounts"},"triggers":{"type":"io.cozy.triggers"},"jobs":{"type":"io.cozy.jobs"},"terms":{"type":"io.cozy.terms"},"apps":{"type":"io.cozy.apps","verbs":["GET"]},"settings":{"type":"io.cozy.settings","verbs":["GET"]},"ecolyo-dju":{"type":"org.ecolyo.dju","verbs":["GET"]},"dacc":{"type":"cc.cozycloud.dacc_v2","verbs":["ALL"]},"dacc-dev":{"type":"cc.cozycloud.dacc.dev_v2","verbs":["ALL"]},"backoffice-rec":{"type":"org.ecolyo.backoffice.rec","verbs":["ALL"]},"backoffice-prod":{"type":"org.ecolyo.backoffice","verbs":["ALL"]},"backoffice-partners-info-rec":{"type":"org.ecolyo.backoffice.partners.info.rec","verbs":["ALL"]},"backoffice-partners-info":{"type":"org.ecolyo.backoffice.partners.info","verbs":["ALL"]},"backoffice-prices-rec":{"type":"org.ecolyo.backoffice.prices.rec","verbs":["ALL"]},"backoffice-prices":{"type":"org.ecolyo.backoffice.prices","verbs":["ALL"]}}}
+module.exports = {"name":"Ecolyo","slug":"ecolyo","icon":"icon.svg","categories":["energy"],"version":"1.10.2","licence":"AGPL-3.0","editor":"Métropole de Lyon","default_locale":"fr","locales":{"fr":{"short_description":"Ecolyo est le service proposé par la Métropole de Lyon pour suivre et comprendre les consommations d’énergie et d’eau de votre foyer.","long_description":"Ecolyo est le service proposé par la Métropole de Lyon pour suivre et comprendre les consommations d’énergie et d’eau de votre foyer afin de vous accompagner dans la gestion quotidienne de ces consommations et ce, de façon ludique en vous lançant des défis personnalisés.","permissions":{"ecolyo":{"description":"Requises pour le fonctionnement des différentes parties de l’application (Analyse, liste d’écogestes personnalisée, …)."},"enedis":{"description":"Requises pour l’affichage et l’analyse de vos consommations électriques dans Ecolyo. Issues du connecteur Enedis."},"grdf":{"description":"Requises pour l’affichage et l’analyse de vos consommations de gaz dans Ecolyo. Issues du connecteur GRDF."},"egl":{"description":"Requises pour l’affichage et l’analyse de vos consommations d’eau dans Ecolyo. Issues du connecteur Eau du Grand Lyon."},"konnectors":{"description":"Requis pour vérifier la présence des connecteurs Enedis, GRDF et Eau du Grand Lyon ainsi que pour pouvoir les configurer à partir de l’application Ecolyo."},"accounts":{"description":"Requis pour stocker des informations propres aux comptes énergie et eau (Enedis, GRDF, Eau du Grand Lyon). Sont stockés votre numéro de PDL pour Enedis, votre numéro de PCE pour GRDF, vos logins et mots de passe pour Eau du Grand Lyon."},"triggers":{"description":"Requis pour le bon fonctionnement des connecteurs énergie et eau."},"jobs":{"description":"Requis pour le bon fonctionnement des connecteurs énergie et eau."},"terms":{"description":"Nécessaire pour la gestion des consentements de l'application"},"apps":{"description":"Requis par Cozy pour afficher les icônes des applications installées dans la barre Cozy."},"settings":{"description":"Requis pour afficher les paramètres Cozy dans la barre Cozy."},"ecolyo-dju":{"description":"Requis pour la récupération des DJU (Degrés Jours Unifiés), informations météorologiques permettant d’ajuster le modèle de comparaison des consommations énergétiques."},"dacc-dev":{"description":"Requis pour la récupération et l’envoi de statistiques d’utilisation anonymisées dans un environnement de test."},"dacc":{"description":"Requis pour envoyer des statistiques d'utilisation anonymisées."},"backoffice-rec":{"description":"Requis pour la récupération des données de la newsletter dans un environment de test."},"backoffice":{"description":"Requis pour la récupération des données de la newsletter."},"backoffice-partners-info-rec":{"description":"Requis pour la récupération du status des services partenaires dans un environment de test."},"backoffice-partners-info":{"description":"Requis pour la récupération du status des services partenaires"},"backoffice-prices-rec":{"description":"Requis pour la récupération du prix des fluides dans un environnement de test."},"backoffice-prices":{"description":"Requis pour la récupération du prix des fluides."}}},"en":{"short_description":"Ecolyo a free service developed by Métropole de Lyon to help you to monitor and understand the energy and water consumption of your home.","long_description":"Ecolyo a free service developed by the Métropole de Lyon to help you to monitor and understand the energy and water consumption of your home. To help you in reducing your daily consumption it gives you best energy consumption practices, consumption analysis and challenges to take up. At least one Smartmeter is needed among Linky (for electricity), Gazpar (for gas) or Téléo (for water).","permissions":{"ecolyo":{"description":"Required for the operation of the different parts of the application (Analysis, customized eco-gesture lists, etc...)."},"enedis":{"description":"Required for the display and analysis of your electricity consumption in Ecolyo. Retrieved by the Enedis connector."},"grdf":{"description":"Required for the display and analysis of your gas consumption in Ecolyo. Retrieved by the GRDF connector."},"egl":{"description":"Required for the display and analysis of your water consumption in Ecolyo. Retrieved by the Eau du Grand Lyon connector."},"konnectors":{"description":"Required to verify the presence of the Enedis, GRDF and Eau du Grand Lyon connectors as well as to be able to configure them from the Ecolyo application."},"accounts":{"description":"Required to store information specific to energy and water accounts (Enedis, GRDF, Eau du Grand Lyon). Your PDL number for Enedis, your PCE number for GRDF, your logins and passwords for Eau du Grand Lyon are stored."},"triggers":{"description":"Required for the correct functioning of the energy and water connectors."},"jobs":{"description":"Required for the correct functioning of the energy and water connectors."},"terms":{"description":"Required for the correct managment of CGU."},"apps":{"description":"Required to display the icons of installed applications in the Cozy bar."},"settings":{"description":"Required for the application's consents managment"},"ecolyo-dju":{"description":"Required to gather udd data (Unified Degree Days), a meteorological data allowing the app to adjust our energical consumption model. "},"dacc-dev":{"description":"Required for gathering and sending anonymous usage statistics for test environment."},"dacc":{"description":"Required for sending cozy anonymized stats."},"backoffice-rec":{"description":"Required for retrieving newsletter informations from backoffice rec."},"backoffice":{"description":"Required for retrieving newsletter informations from backoffice prod."},"backoffice-partners-info-rec":{"description":"Required for getting the status of partners' services in test environment."},"backoffice-partners-info":{"description":"Required for getting the status of partners' services"},"backoffice-prices-rec":{"description":"Required for getting fluid prices form backoffice rec."},"backoffice-prices":{"description":"Required for getting fluid prices form backoffice prod"}}}},"langs":["fr"],"developer":{"name":"Métropole de Lyon","url":"https://www.grandlyon.com/"},"routes":{"/":{"folder":"/","index":"index.html","public":false}},"services":{"enedisHalfHourMonthlyAnalysis":{"type":"node","file":"services/enedisHalfHourMonthlyAnalysis/ecolyo.js","trigger":"@cron 0 0 8 3 * *"},"monthlyReportNotification":{"type":"node","file":"services/monthlyReportNotification/ecolyo.js","trigger":"@cron 0 0 10 3 * *"},"consumptionAlert":{"type":"node","file":"services/consumptionAlert/ecolyo.js","trigger":"@cron 0 3 * * *"},"aggregatorUsageEvents":{"type":"node","file":"services/aggregatorUsageEvents/ecolyo.js","trigger":"@cron 0 1 * * *"},"fluidsPrices":{"type":"node","file":"services/fluidsPrices/ecolyo.js","trigger":"@cron 0 2 * * *"}},"permissions":{"ecolyo":{"type":"com.grandlyon.ecolyo.*"},"enedis":{"type":"com.grandlyon.enedis.*"},"grdf":{"type":"com.grandlyon.grdf.*"},"egl":{"type":"com.grandlyon.egl.*"},"konnectors":{"type":"io.cozy.konnectors"},"accounts":{"type":"io.cozy.accounts"},"triggers":{"type":"io.cozy.triggers"},"jobs":{"type":"io.cozy.jobs"},"terms":{"type":"io.cozy.terms"},"apps":{"type":"io.cozy.apps","verbs":["GET"]},"settings":{"type":"io.cozy.settings","verbs":["GET"]},"ecolyo-dju":{"type":"org.ecolyo.dju","verbs":["GET"]},"dacc":{"type":"cc.cozycloud.dacc_v2","verbs":["ALL"]},"dacc-dev":{"type":"cc.cozycloud.dacc.dev_v2","verbs":["ALL"]},"backoffice-rec":{"type":"org.ecolyo.backoffice.rec","verbs":["ALL"]},"backoffice-prod":{"type":"org.ecolyo.backoffice","verbs":["ALL"]},"backoffice-partners-info-rec":{"type":"org.ecolyo.backoffice.partners.info.rec","verbs":["ALL"]},"backoffice-partners-info":{"type":"org.ecolyo.backoffice.partners.info","verbs":["ALL"]},"backoffice-prices-rec":{"type":"org.ecolyo.backoffice.prices.rec","verbs":["ALL"]},"backoffice-prices":{"type":"org.ecolyo.backoffice.prices","verbs":["ALL"]}}}
 
 /***/ }),
 
@@ -33781,8 +33738,6 @@ var _createClass2 = _interopRequireDefault(__webpack_require__("W8MJ"));
 
 var _defineProperty2 = _interopRequireDefault(__webpack_require__("lSNA"));
 
-var _cozyClient = __webpack_require__("SH7X");
-
 var _migration = __webpack_require__("mfVY");
 
 var _migration2 = __webpack_require__("6QIQ");
@@ -33791,8 +33746,6 @@ var _logger = _interopRequireDefault(__webpack_require__("gjtA"));
 
 var _initialisationSteps = __webpack_require__("3HG6");
 
-var _comGrandlyonEcolyoSchemas = __webpack_require__("xbSX");
-
 function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
 
 function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
@@ -33807,55 +33760,16 @@ var MigrationService = /*#__PURE__*/function () {
     this._client = _client;
     this._setinitStepError = _setinitStepError;
   }
-  /**
-   * Return schema version
-   * @param _client cozyClient
-   * @returns Promise<number> Version number of schema
-   */
-
 
   (0, _createClass2.default)(MigrationService, [{
-    key: "currentSchemaVersion",
+    key: "runMigrations",
     value: function () {
-      var _currentSchemaVersion = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_client) {
-        var _data$data$;
+      var _runMigrations = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(migrations) {
+        var releaseStatus, releaseNotes, _iterator, _step, migration, migrationResult, result;
 
-        var query, data;
         return _regenerator.default.wrap(function _callee$(_context) {
           while (1) {
             switch (_context.prev = _context.next) {
-              case 0:
-                query = (0, _cozyClient.Q)(_comGrandlyonEcolyoSchemas.SCHEMAS_DOCTYPE);
-                _context.next = 3;
-                return _client.query(query.limitBy(1));
-
-              case 3:
-                data = _context.sent;
-                return _context.abrupt("return", (data === null || data === void 0 ? void 0 : (_data$data$ = data.data[0]) === null || _data$data$ === void 0 ? void 0 : _data$data$.version) || 0);
-
-              case 5:
-              case "end":
-                return _context.stop();
-            }
-          }
-        }, _callee);
-      }));
-
-      function currentSchemaVersion(_x) {
-        return _currentSchemaVersion.apply(this, arguments);
-      }
-
-      return currentSchemaVersion;
-    }()
-  }, {
-    key: "runMigrations",
-    value: function () {
-      var _runMigrations = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(migrations) {
-        var releaseStatus, releaseNotes, currentVersion, targetVersion, startMigrationIndex, migrationsToRun, _iterator, _step, migration, migrationResult, result;
-
-        return _regenerator.default.wrap(function _callee2$(_context2) {
-          while (1) {
-            switch (_context2.prev = _context2.next) {
               case 0:
                 _logger.default.info('[Migration] Running migrations...');
 
@@ -33867,53 +33781,39 @@ var MigrationService = /*#__PURE__*/function () {
                     description: ''
                   }]
                 };
-                _context2.next = 5;
-                return this.currentSchemaVersion(this._client);
-
-              case 5:
-                currentVersion = _context2.sent;
-                targetVersion = migrations[migrations.length - 1].targetSchemaVersion; // Prevent Migration service to run every migration if not needed
-
-                if (!(currentVersion != targetVersion)) {
-                  _context2.next = 47;
-                  break;
-                }
-
-                startMigrationIndex = migrations.length - (targetVersion - currentVersion);
-                migrationsToRun = migrations.splice(startMigrationIndex);
-                _iterator = _createForOfIteratorHelper(migrationsToRun);
-                _context2.prev = 11;
+                _iterator = _createForOfIteratorHelper(migrations);
+                _context.prev = 4;
 
                 _iterator.s();
 
-              case 13:
+              case 6:
                 if ((_step = _iterator.n()).done) {
-                  _context2.next = 33;
+                  _context.next = 26;
                   break;
                 }
 
                 migration = _step.value;
-                _context2.next = 17;
+                _context.next = 10;
                 return (0, _migration.migrate)(migration, this._client);
 
-              case 17:
-                migrationResult = _context2.sent;
+              case 10:
+                migrationResult = _context.sent;
 
                 _logger.default.info((0, _migration.migrationLog)(migration, migrationResult));
 
                 if (!(migrationResult.type === _migration2.MIGRATION_RESULT_FAILED)) {
-                  _context2.next = 30;
+                  _context.next = 23;
                   break;
                 }
 
-                _context2.next = 22;
+                _context.next = 15;
                 return (0, _migration.migrate)(migration, this._client);
 
-              case 22:
-                result = _context2.sent;
+              case 15:
+                result = _context.sent;
 
                 if (!(result.type === _migration2.MIGRATION_RESULT_FAILED)) {
-                  _context2.next = 29;
+                  _context.next = 22;
                   break;
                 }
 
@@ -33924,59 +33824,52 @@ var MigrationService = /*#__PURE__*/function () {
 
                 throw new Error();
 
-              case 29:
+              case 22:
                 _logger.default.info((0, _migration.migrationLog)(migration, result));
 
-              case 30:
+              case 23:
                 if (migration.releaseNotes !== null && migrationResult.type === _migration2.MIGRATION_RESULT_COMPLETE) {
                   releaseNotes.notes.push(migration.releaseNotes);
                   releaseStatus = true;
                 }
 
-              case 31:
-                _context2.next = 13;
+              case 24:
+                _context.next = 6;
                 break;
 
-              case 33:
-                _context2.next = 38;
+              case 26:
+                _context.next = 31;
                 break;
 
-              case 35:
-                _context2.prev = 35;
-                _context2.t0 = _context2["catch"](11);
+              case 28:
+                _context.prev = 28;
+                _context.t0 = _context["catch"](4);
 
-                _iterator.e(_context2.t0);
+                _iterator.e(_context.t0);
 
-              case 38:
-                _context2.prev = 38;
+              case 31:
+                _context.prev = 31;
 
                 _iterator.f();
 
-                return _context2.finish(38);
-
-              case 41:
-                releaseNotes.show = releaseStatus; // In case of first instance, don't show release notes
+                return _context.finish(31);
 
-                if (startMigrationIndex === 0) releaseNotes.show = false;
+              case 34:
+                releaseNotes.show = releaseStatus;
 
                 _logger.default.info('[Migration] Done');
 
-                return _context2.abrupt("return", releaseNotes);
-
-              case 47:
-                _logger.default.info('[Migration] Skipped Migration Process, already up-to-date');
+                return _context.abrupt("return", releaseNotes);
 
-                return _context2.abrupt("return", releaseNotes);
-
-              case 49:
+              case 37:
               case "end":
-                return _context2.stop();
+                return _context.stop();
             }
           }
-        }, _callee2, this, [[11, 35, 38, 41]]);
+        }, _callee, this, [[4, 28, 31, 34]]);
       }));
 
-      function runMigrations(_x2) {
+      function runMigrations(_x) {
         return _runMigrations.apply(this, arguments);
       }
 
@@ -36929,6 +36822,8 @@ var _createClass2 = _interopRequireDefault(__webpack_require__("W8MJ"));
 
 var _defineProperty2 = _interopRequireDefault(__webpack_require__("lSNA"));
 
+var _cozyClient = __webpack_require__("SH7X");
+
 var _challengeEntity2 = _interopRequireDefault(__webpack_require__("+LQo"));
 
 var _duelEntity2 = _interopRequireDefault(__webpack_require__("NErO"));
@@ -36945,10 +36840,14 @@ var _doctypes = __webpack_require__("D2hQ");
 
 var _fluid = __webpack_require__("5Wkc");
 
+var _timeStep = __webpack_require__("cKQ8");
+
 var _luxon = __webpack_require__("ExVU");
 
 var _initialisationSteps = __webpack_require__("3HG6");
 
+var _account = _interopRequireDefault(__webpack_require__("gucQ"));
+
 var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
 var _duel = _interopRequireDefault(__webpack_require__("Vpb/"));
@@ -36959,6 +36858,8 @@ var _exploration = _interopRequireDefault(__webpack_require__("z8s1"));
 
 var _fluid2 = _interopRequireDefault(__webpack_require__("z34f"));
 
+var _konnector = _interopRequireDefault(__webpack_require__("kFhK"));
+
 var _konnectorStatus = _interopRequireDefault(__webpack_require__("TsVr"));
 
 var _profile = _interopRequireDefault(__webpack_require__("2l2O"));
@@ -37002,54 +36903,176 @@ var InitializationService = /*#__PURE__*/function () {
     this._setinitStepError = _setinitStepError;
   }
   /*
-   * Check if profil exist
-   * If not, the profil is created
-   * sucess return: profil
-   * failure return: null
+   * Call a query with where clause to create the index if not exist
    */
 
 
   (0, _createClass2.default)(InitializationService, [{
+    key: "createIndex",
+    value: function () {
+      var _createIndex = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(doctype, timestep) {
+        var getMongoSelector, query;
+        return _regenerator.default.wrap(function _callee$(_context) {
+          while (1) {
+            switch (_context.prev = _context.next) {
+              case 0:
+                getMongoSelector = function getMongoSelector() {
+                  switch (timestep) {
+                    case _timeStep.TimeStep.YEAR:
+                      return {
+                        year: {
+                          $lte: 9999
+                        }
+                      };
+
+                    case _timeStep.TimeStep.MONTH:
+                      return {
+                        year: {
+                          $lte: 9999
+                        },
+                        month: {
+                          $lte: 12
+                        }
+                      };
+
+                    case _timeStep.TimeStep.DAY:
+                    case _timeStep.TimeStep.HALF_AN_HOUR:
+                      return {
+                        year: {
+                          $lte: 9999
+                        },
+                        month: {
+                          $lte: 12
+                        },
+                        day: {
+                          $lte: 31
+                        }
+                      };
+
+                    default:
+                      return {};
+                  }
+                };
+
+                query = (0, _cozyClient.Q)(doctype).where(getMongoSelector()).limitBy(1);
+                _context.next = 4;
+                return this._client.query(query);
+
+              case 4:
+                return _context.abrupt("return", _context.sent);
+
+              case 5:
+              case "end":
+                return _context.stop();
+            }
+          }
+        }, _callee, this);
+      }));
+
+      function createIndex(_x, _x2) {
+        return _createIndex.apply(this, arguments);
+      }
+
+      return createIndex;
+    }()
+    /*
+     * create index for each Doctype
+     * sucess return: true
+     * failure throw error
+     */
+
+  }, {
+    key: "initIndex",
+    value: function () {
+      var _initIndex = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
+        var accountService, konnectorService;
+        return _regenerator.default.wrap(function _callee2$(_context2) {
+          while (1) {
+            switch (_context2.prev = _context2.next) {
+              case 0:
+                _context2.prev = 0;
+                accountService = new _account.default(this._client);
+                konnectorService = new _konnector.default(this._client);
+                _context2.next = 5;
+                return Promise.all([this.createIndex(_doctypes.EGL_YEAR_DOCTYPE, _timeStep.TimeStep.YEAR), this.createIndex(_doctypes.EGL_MONTH_DOCTYPE, _timeStep.TimeStep.MONTH), this.createIndex(_doctypes.EGL_DAY_DOCTYPE, _timeStep.TimeStep.DAY), this.createIndex(_doctypes.ENEDIS_YEAR_DOCTYPE, _timeStep.TimeStep.YEAR), this.createIndex(_doctypes.ENEDIS_MONTH_DOCTYPE, _timeStep.TimeStep.MONTH), this.createIndex(_doctypes.ENEDIS_DAY_DOCTYPE, _timeStep.TimeStep.DAY), this.createIndex(_doctypes.ENEDIS_MINUTE_DOCTYPE, _timeStep.TimeStep.HALF_AN_HOUR), this.createIndex(_doctypes.GRDF_YEAR_DOCTYPE, _timeStep.TimeStep.YEAR), this.createIndex(_doctypes.GRDF_MONTH_DOCTYPE, _timeStep.TimeStep.MONTH), this.createIndex(_doctypes.GRDF_DAY_DOCTYPE, _timeStep.TimeStep.DAY), konnectorService.createIndexKonnector(), accountService.createIndexAccount()]);
+
+              case 5:
+                _logger.default.info('[Initialization] Indexes created');
+
+                return _context2.abrupt("return", true);
+
+              case 9:
+                _context2.prev = 9;
+                _context2.t0 = _context2["catch"](0);
+
+                this._setinitStepError(_initialisationSteps.InitStepsErrors.INDEX_ERROR);
+
+                _logger.default.error('Initialization error - initIndex: ', _context2.t0);
+
+                throw _context2.t0;
+
+              case 14:
+              case "end":
+                return _context2.stop();
+            }
+          }
+        }, _callee2, this, [[0, 9]]);
+      }));
+
+      function initIndex() {
+        return _initIndex.apply(this, arguments);
+      }
+
+      return initIndex;
+    }()
+    /*
+     * Check if profil exist
+     * If not, the profil is created
+     * sucess return: profil
+     * failure return: null
+     */
+
+  }, {
     key: "initProfile",
     value: function () {
-      var _initProfile = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
+      var _initProfile = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
         var profileService, loadedProfile, _yield$this$_client$c, newProfile, updatedProfile;
 
-        return _regenerator.default.wrap(function _callee$(_context) {
+        return _regenerator.default.wrap(function _callee3$(_context3) {
           while (1) {
-            switch (_context.prev = _context.next) {
+            switch (_context3.prev = _context3.next) {
               case 0:
                 profileService = new _profile.default(this._client);
-                _context.prev = 1;
+                _context3.prev = 1;
 
                 this._setinitStep(_initialisationSteps.InitSteps.PROFILE);
 
-                _context.next = 5;
+                _context3.next = 5;
                 return profileService.getProfile();
 
               case 5:
-                loadedProfile = _context.sent;
+                loadedProfile = _context3.sent;
 
                 if (loadedProfile) {
-                  _context.next = 19;
+                  _context3.next = 19;
                   break;
                 }
 
-                _context.next = 9;
+                _context3.next = 9;
                 return this._client.create(_doctypes.PROFILE_DOCTYPE, _profileData.default[0]);
 
               case 9:
-                _yield$this$_client$c = _context.sent;
+                _yield$this$_client$c = _context3.sent;
                 newProfile = _yield$this$_client$c.data;
 
                 if (!newProfile) {
-                  _context.next = 15;
+                  _context3.next = 15;
                   break;
                 }
 
                 _logger.default.info('[Initialization] Profile created');
 
-                _context.next = 17;
+                _context3.next = 17;
                 break;
 
               case 15:
@@ -37058,14 +37081,14 @@ var InitializationService = /*#__PURE__*/function () {
                 throw new Error('initProfile: Profile not created');
 
               case 17:
-                _context.next = 20;
+                _context3.next = 20;
                 break;
 
               case 19:
                 _logger.default.info('[Initialization] Profile loaded');
 
               case 20:
-                _context.next = 22;
+                _context3.next = 22;
                 return profileService.updateProfile({
                   lastConnectionDate: _luxon.DateTime.local().setZone('utc', {
                     keepLocalTime: true
@@ -37073,25 +37096,25 @@ var InitializationService = /*#__PURE__*/function () {
                 });
 
               case 22:
-                updatedProfile = _context.sent;
-                return _context.abrupt("return", updatedProfile);
+                updatedProfile = _context3.sent;
+                return _context3.abrupt("return", updatedProfile);
 
               case 26:
-                _context.prev = 26;
-                _context.t0 = _context["catch"](1);
+                _context3.prev = 26;
+                _context3.t0 = _context3["catch"](1);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.PROFILE_ERROR);
 
-                _logger.default.error('Initialization error - initProfile: ', _context.t0);
+                _logger.default.error('Initialization error - initProfile: ', _context3.t0);
 
-                throw _context.t0;
+                throw _context3.t0;
 
               case 31:
               case "end":
-                return _context.stop();
+                return _context3.stop();
             }
           }
-        }, _callee, this, [[1, 26]]);
+        }, _callee3, this, [[1, 26]]);
       }));
 
       function initProfile() {
@@ -37110,40 +37133,40 @@ var InitializationService = /*#__PURE__*/function () {
   }, {
     key: "initProfileType",
     value: function () {
-      var _initProfileType = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
+      var _initProfileType = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
         var profileTypeEntityService, loadedProfileType;
-        return _regenerator.default.wrap(function _callee2$(_context2) {
+        return _regenerator.default.wrap(function _callee4$(_context4) {
           while (1) {
-            switch (_context2.prev = _context2.next) {
+            switch (_context4.prev = _context4.next) {
               case 0:
                 profileTypeEntityService = new _profileTypeEntity.default(this._client);
-                _context2.prev = 1;
-                _context2.next = 4;
+                _context4.prev = 1;
+                _context4.next = 4;
                 return profileTypeEntityService.getProfileType();
 
               case 4:
-                loadedProfileType = _context2.sent;
+                loadedProfileType = _context4.sent;
 
                 _logger.default.info('[Initialization] ProfileType loaded');
 
-                return _context2.abrupt("return", loadedProfileType);
+                return _context4.abrupt("return", loadedProfileType);
 
               case 9:
-                _context2.prev = 9;
-                _context2.t0 = _context2["catch"](1);
+                _context4.prev = 9;
+                _context4.t0 = _context4["catch"](1);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.PROFILETYPE_ERROR);
 
-                _logger.default.error('Initialization error - initProfileType: ', _context2.t0);
+                _logger.default.error('Initialization error - initProfileType: ', _context4.t0);
 
-                throw _context2.t0;
+                throw _context4.t0;
 
               case 14:
               case "end":
-                return _context2.stop();
+                return _context4.stop();
             }
           }
-        }, _callee2, this, [[1, 9]]);
+        }, _callee4, this, [[1, 9]]);
       }));
 
       function initProfileType() {
@@ -37155,40 +37178,40 @@ var InitializationService = /*#__PURE__*/function () {
   }, {
     key: "initProfileEcogesture",
     value: function () {
-      var _initProfileEcogesture = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
+      var _initProfileEcogesture = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
         var profileEcogestureService, loadedProfileEcogesture;
-        return _regenerator.default.wrap(function _callee3$(_context3) {
+        return _regenerator.default.wrap(function _callee5$(_context5) {
           while (1) {
-            switch (_context3.prev = _context3.next) {
+            switch (_context5.prev = _context5.next) {
               case 0:
                 profileEcogestureService = new _profileEcogesture.default(this._client);
-                _context3.prev = 1;
-                _context3.next = 4;
+                _context5.prev = 1;
+                _context5.next = 4;
                 return profileEcogestureService.getProfileEcogesture();
 
               case 4:
-                loadedProfileEcogesture = _context3.sent;
+                loadedProfileEcogesture = _context5.sent;
 
                 _logger.default.info('[Initialization] ProfileEcogesture loaded');
 
-                return _context3.abrupt("return", loadedProfileEcogesture);
+                return _context5.abrupt("return", loadedProfileEcogesture);
 
               case 9:
-                _context3.prev = 9;
-                _context3.t0 = _context3["catch"](1);
+                _context5.prev = 9;
+                _context5.t0 = _context5["catch"](1);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.PROFILETYPE_ERROR);
 
-                _logger.default.error('Initialization error - initProfileEcogesture: ', _context3.t0);
+                _logger.default.error('Initialization error - initProfileEcogesture: ', _context5.t0);
 
-                throw _context3.t0;
+                throw _context5.t0;
 
               case 14:
               case "end":
-                return _context3.stop();
+                return _context5.stop();
             }
           }
-        }, _callee3, this, [[1, 9]]);
+        }, _callee5, this, [[1, 9]]);
       }));
 
       function initProfileEcogesture() {
@@ -37200,75 +37223,75 @@ var InitializationService = /*#__PURE__*/function () {
   }, {
     key: "initEcogesture",
     value: function () {
-      var _initEcogesture = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(hash) {
+      var _initEcogesture = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(hash) {
         var hashEcogestureType, ecogestureService, loadedEcogestures, _iterator, _step, ecogesture, checkCount, _iterator2, _step2, _step2$value, index, _ecogesture, updateEcogesture, _checkCount;
 
-        return _regenerator.default.wrap(function _callee4$(_context4) {
+        return _regenerator.default.wrap(function _callee6$(_context6) {
           while (1) {
-            switch (_context4.prev = _context4.next) {
+            switch (_context6.prev = _context6.next) {
               case 0:
                 this._setinitStep(_initialisationSteps.InitSteps.ECOGESTURE);
 
                 hashEcogestureType = (0, _hash.hashFile)(_ecogestureData.default);
                 ecogestureService = new _ecogesture2.default(this._client); // Populate data if none ecogesture exists
 
-                _context4.next = 5;
+                _context6.next = 5;
                 return ecogestureService.getAllEcogestures(undefined, true);
 
               case 5:
-                loadedEcogestures = _context4.sent;
+                loadedEcogestures = _context6.sent;
 
                 if (!(!loadedEcogestures || (loadedEcogestures === null || loadedEcogestures === void 0 ? void 0 : loadedEcogestures.length) === 0)) {
-                  _context4.next = 40;
+                  _context6.next = 40;
                   break;
                 }
 
-                _context4.prev = 7;
+                _context6.prev = 7;
                 _iterator = _createForOfIteratorHelper(_ecogestureData.default);
-                _context4.prev = 9;
+                _context6.prev = 9;
 
                 _iterator.s();
 
               case 11:
                 if ((_step = _iterator.n()).done) {
-                  _context4.next = 17;
+                  _context6.next = 17;
                   break;
                 }
 
                 ecogesture = _step.value;
-                _context4.next = 15;
+                _context6.next = 15;
                 return this._client.create(_doctypes.ECOGESTURE_DOCTYPE, ecogesture);
 
               case 15:
-                _context4.next = 11;
+                _context6.next = 11;
                 break;
 
               case 17:
-                _context4.next = 22;
+                _context6.next = 22;
                 break;
 
               case 19:
-                _context4.prev = 19;
-                _context4.t0 = _context4["catch"](9);
+                _context6.prev = 19;
+                _context6.t0 = _context6["catch"](9);
 
-                _iterator.e(_context4.t0);
+                _iterator.e(_context6.t0);
 
               case 22:
-                _context4.prev = 22;
+                _context6.prev = 22;
 
                 _iterator.f();
 
-                return _context4.finish(22);
+                return _context6.finish(22);
 
               case 25:
-                _context4.next = 27;
+                _context6.next = 27;
                 return ecogestureService.getAllEcogestures();
 
               case 27:
-                checkCount = _context4.sent;
+                checkCount = _context6.sent;
 
                 if (!(!checkCount || (checkCount === null || checkCount === void 0 ? void 0 : checkCount.length) !== _ecogestureData.default.length)) {
-                  _context4.next = 31;
+                  _context6.next = 31;
                   break;
                 }
 
@@ -37279,38 +37302,38 @@ var InitializationService = /*#__PURE__*/function () {
               case 31:
                 _logger.default.info('[Initialization] Ecogesture list created');
 
-                return _context4.abrupt("return", hashEcogestureType);
+                return _context6.abrupt("return", hashEcogestureType);
 
               case 35:
-                _context4.prev = 35;
-                _context4.t1 = _context4["catch"](7);
+                _context6.prev = 35;
+                _context6.t1 = _context6["catch"](7);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.ECOGESTURE_ERROR);
 
-                _logger.default.error('Initialization error - initEcogesture: ', _context4.t1);
+                _logger.default.error('Initialization error - initEcogesture: ', _context6.t1);
 
-                throw _context4.t1;
+                throw _context6.t1;
 
               case 40:
                 if (!(hash !== hashEcogestureType)) {
-                  _context4.next = 79;
+                  _context6.next = 79;
                   break;
                 }
 
-                _context4.prev = 41;
-                _context4.next = 44;
+                _context6.prev = 41;
+                _context6.next = 44;
                 return ecogestureService.deleteAllEcogestures();
 
               case 44:
                 // Population with the data
                 _iterator2 = _createForOfIteratorHelper(_ecogestureData.default.entries());
-                _context4.prev = 45;
+                _context6.prev = 45;
 
                 _iterator2.s();
 
               case 47:
                 if ((_step2 = _iterator2.n()).done) {
-                  _context4.next = 54;
+                  _context6.next = 54;
                   break;
                 }
 
@@ -37320,39 +37343,39 @@ var InitializationService = /*#__PURE__*/function () {
                   doing: loadedEcogestures[index].doing ? true : false,
                   viewedInSelection: loadedEcogestures[index].viewedInSelection ? true : false
                 }) : _ecogesture;
-                _context4.next = 52;
+                _context6.next = 52;
                 return this._client.create(_doctypes.ECOGESTURE_DOCTYPE, updateEcogesture);
 
               case 52:
-                _context4.next = 47;
+                _context6.next = 47;
                 break;
 
               case 54:
-                _context4.next = 59;
+                _context6.next = 59;
                 break;
 
               case 56:
-                _context4.prev = 56;
-                _context4.t2 = _context4["catch"](45);
+                _context6.prev = 56;
+                _context6.t2 = _context6["catch"](45);
 
-                _iterator2.e(_context4.t2);
+                _iterator2.e(_context6.t2);
 
               case 59:
-                _context4.prev = 59;
+                _context6.prev = 59;
 
                 _iterator2.f();
 
-                return _context4.finish(59);
+                return _context6.finish(59);
 
               case 62:
-                _context4.next = 64;
+                _context6.next = 64;
                 return ecogestureService.getAllEcogestures();
 
               case 64:
-                _checkCount = _context4.sent;
+                _checkCount = _context6.sent;
 
                 if (!(!_checkCount || (_checkCount === null || _checkCount === void 0 ? void 0 : _checkCount.length) !== _ecogestureData.default.length)) {
-                  _context4.next = 68;
+                  _context6.next = 68;
                   break;
                 }
 
@@ -37363,37 +37386,37 @@ var InitializationService = /*#__PURE__*/function () {
               case 68:
                 _logger.default.info('[Initialization] Ecogesture updated');
 
-                return _context4.abrupt("return", hashEcogestureType);
+                return _context6.abrupt("return", hashEcogestureType);
 
               case 72:
-                _context4.prev = 72;
-                _context4.t3 = _context4["catch"](41);
+                _context6.prev = 72;
+                _context6.t3 = _context6["catch"](41);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.ECOGESTURE_ERROR);
 
-                _logger.default.error('Initialization error - initEcogesture: ', _context4.t3);
+                _logger.default.error('Initialization error - initEcogesture: ', _context6.t3);
 
-                throw _context4.t3;
+                throw _context6.t3;
 
               case 77:
-                _context4.next = 81;
+                _context6.next = 81;
                 break;
 
               case 79:
                 // Doctype already up to date
                 _logger.default.info('[Initialization]  Ecogesture already up-to-date');
 
-                return _context4.abrupt("return", hashEcogestureType);
+                return _context6.abrupt("return", hashEcogestureType);
 
               case 81:
               case "end":
-                return _context4.stop();
+                return _context6.stop();
             }
           }
-        }, _callee4, this, [[7, 35], [9, 19, 22, 25], [41, 72], [45, 56, 59, 62]]);
+        }, _callee6, this, [[7, 35], [9, 19, 22, 25], [41, 72], [45, 56, 59, 62]]);
       }));
 
-      function initEcogesture(_x) {
+      function initEcogesture(_x3) {
         return _initEcogesture.apply(this, arguments);
       }
 
@@ -37402,32 +37425,32 @@ var InitializationService = /*#__PURE__*/function () {
   }, {
     key: "initFluidPrices",
     value: function () {
-      var _initFluidPrices = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
+      var _initFluidPrices = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {
         var fpService, loadedPrices, fluidTypes, allPrices, env, remoteUrl, _i, _fluidTypes, fluid, prices, _i2, _allPrices, price;
 
-        return _regenerator.default.wrap(function _callee5$(_context5) {
+        return _regenerator.default.wrap(function _callee7$(_context7) {
           while (1) {
-            switch (_context5.prev = _context5.next) {
+            switch (_context7.prev = _context7.next) {
               case 0:
                 fpService = new _fluidsPrices.default(this._client); // Populate data if none ecogesture exists
 
-                _context5.next = 3;
+                _context7.next = 3;
                 return fpService.getAllPrices();
 
               case 3:
-                loadedPrices = _context5.sent;
+                loadedPrices = _context7.sent;
 
                 if (!(loadedPrices !== null && loadedPrices !== void 0 && loadedPrices.length)) {
-                  _context5.next = 9;
+                  _context7.next = 9;
                   break;
                 }
 
                 _logger.default.info('[Initialization] FluidPrices db already created');
 
-                return _context5.abrupt("return", true);
+                return _context7.abrupt("return", true);
 
               case 9:
-                _context5.prev = 9;
+                _context7.prev = 9;
                 fluidTypes = [_fluid.FluidType.ELECTRICITY, _fluid.FluidType.WATER, _fluid.FluidType.GAS];
                 allPrices = [];
                 env = new _environment.default();
@@ -37436,21 +37459,21 @@ var InitializationService = /*#__PURE__*/function () {
 
               case 15:
                 if (!(_i < _fluidTypes.length)) {
-                  _context5.next = 24;
+                  _context7.next = 24;
                   break;
                 }
 
                 fluid = _fluidTypes[_i];
-                _context5.next = 19;
+                _context7.next = 19;
                 return this._client.getStackClient().fetchJSON('GET', "".concat(remoteUrl, "?fluidtype=").concat(fluid));
 
               case 19:
-                prices = _context5.sent;
+                prices = _context7.sent;
                 allPrices.push.apply(allPrices, (0, _toConsumableArray2.default)(prices));
 
               case 21:
                 _i++;
-                _context5.next = 15;
+                _context7.next = 15;
                 break;
 
               case 24:
@@ -37458,40 +37481,40 @@ var InitializationService = /*#__PURE__*/function () {
 
               case 25:
                 if (!(_i2 < _allPrices.length)) {
-                  _context5.next = 32;
+                  _context7.next = 32;
                   break;
                 }
 
                 price = _allPrices[_i2];
-                _context5.next = 29;
+                _context7.next = 29;
                 return fpService.createPrice(price);
 
               case 29:
                 _i2++;
-                _context5.next = 25;
+                _context7.next = 25;
                 break;
 
               case 32:
                 _logger.default.info('[Initialization] FluidPrices db created successfully');
 
-                return _context5.abrupt("return", true);
+                return _context7.abrupt("return", true);
 
               case 36:
-                _context5.prev = 36;
-                _context5.t0 = _context5["catch"](9);
+                _context7.prev = 36;
+                _context7.t0 = _context7["catch"](9);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.PRICES_ERROR);
 
-                _logger.default.error('Initialization error - initFluidPrices: ', _context5.t0);
+                _logger.default.error('Initialization error - initFluidPrices: ', _context7.t0);
 
-                return _context5.abrupt("return", false);
+                return _context7.abrupt("return", false);
 
               case 41:
               case "end":
-                return _context5.stop();
+                return _context7.stop();
             }
           }
-        }, _callee5, this, [[9, 36]]);
+        }, _callee7, this, [[9, 36]]);
       }));
 
       function initFluidPrices() {
@@ -37503,75 +37526,75 @@ var InitializationService = /*#__PURE__*/function () {
   }, {
     key: "initChallengeEntity",
     value: function () {
-      var _initChallengeEntity = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(hash) {
+      var _initChallengeEntity = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(hash) {
         var challengeHash, challengeService, loadedChallengeEntity, _iterator3, _step3, challengeEntity, checkCount, _iterator4, _step4, _challengeEntity, _checkCount2;
 
-        return _regenerator.default.wrap(function _callee6$(_context6) {
+        return _regenerator.default.wrap(function _callee8$(_context8) {
           while (1) {
-            switch (_context6.prev = _context6.next) {
+            switch (_context8.prev = _context8.next) {
               case 0:
                 this._setinitStep(_initialisationSteps.InitSteps.CHALLENGES);
 
                 challengeHash = (0, _hash.hashFile)(_challengeEntity2.default);
                 challengeService = new _challenge.default(this._client); // Populate data if none challengeEntity exists
 
-                _context6.next = 5;
+                _context8.next = 5;
                 return challengeService.getAllChallengeEntities();
 
               case 5:
-                loadedChallengeEntity = _context6.sent;
+                loadedChallengeEntity = _context8.sent;
 
                 if (!(!loadedChallengeEntity || (loadedChallengeEntity === null || loadedChallengeEntity === void 0 ? void 0 : loadedChallengeEntity.length) === 0)) {
-                  _context6.next = 40;
+                  _context8.next = 40;
                   break;
                 }
 
-                _context6.prev = 7;
+                _context8.prev = 7;
                 _iterator3 = _createForOfIteratorHelper(_challengeEntity2.default);
-                _context6.prev = 9;
+                _context8.prev = 9;
 
                 _iterator3.s();
 
               case 11:
                 if ((_step3 = _iterator3.n()).done) {
-                  _context6.next = 17;
+                  _context8.next = 17;
                   break;
                 }
 
                 challengeEntity = _step3.value;
-                _context6.next = 15;
+                _context8.next = 15;
                 return this._client.create(_doctypes.CHALLENGE_DOCTYPE, challengeEntity);
 
               case 15:
-                _context6.next = 11;
+                _context8.next = 11;
                 break;
 
               case 17:
-                _context6.next = 22;
+                _context8.next = 22;
                 break;
 
               case 19:
-                _context6.prev = 19;
-                _context6.t0 = _context6["catch"](9);
+                _context8.prev = 19;
+                _context8.t0 = _context8["catch"](9);
 
-                _iterator3.e(_context6.t0);
+                _iterator3.e(_context8.t0);
 
               case 22:
-                _context6.prev = 22;
+                _context8.prev = 22;
 
                 _iterator3.f();
 
-                return _context6.finish(22);
+                return _context8.finish(22);
 
               case 25:
-                _context6.next = 27;
+                _context8.next = 27;
                 return challengeService.getAllChallengeEntities();
 
               case 27:
-                checkCount = _context6.sent;
+                checkCount = _context8.sent;
 
                 if (!(!checkCount || (checkCount === null || checkCount === void 0 ? void 0 : checkCount.length) !== _challengeEntity2.default.length)) {
-                  _context6.next = 31;
+                  _context8.next = 31;
                   break;
                 }
 
@@ -37582,75 +37605,75 @@ var InitializationService = /*#__PURE__*/function () {
               case 31:
                 _logger.default.info('[Initialization] Challenge entities created');
 
-                return _context6.abrupt("return", challengeHash);
+                return _context8.abrupt("return", challengeHash);
 
               case 35:
-                _context6.prev = 35;
-                _context6.t1 = _context6["catch"](7);
+                _context8.prev = 35;
+                _context8.t1 = _context8["catch"](7);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.CHALLENGES_ERROR);
 
-                _logger.default.error('Initialization error - initChallengeEntity: ', _context6.t1);
+                _logger.default.error('Initialization error - initChallengeEntity: ', _context8.t1);
 
-                throw _context6.t1;
+                throw _context8.t1;
 
               case 40:
                 if (!(hash !== challengeHash)) {
-                  _context6.next = 78;
+                  _context8.next = 78;
                   break;
                 }
 
-                _context6.prev = 41;
-                _context6.next = 44;
+                _context8.prev = 41;
+                _context8.next = 44;
                 return challengeService.deleteAllChallengeEntities();
 
               case 44:
                 // Population with the data
                 _iterator4 = _createForOfIteratorHelper(_challengeEntity2.default);
-                _context6.prev = 45;
+                _context8.prev = 45;
 
                 _iterator4.s();
 
               case 47:
                 if ((_step4 = _iterator4.n()).done) {
-                  _context6.next = 53;
+                  _context8.next = 53;
                   break;
                 }
 
                 _challengeEntity = _step4.value;
-                _context6.next = 51;
+                _context8.next = 51;
                 return this._client.create(_doctypes.CHALLENGE_DOCTYPE, _challengeEntity);
 
               case 51:
-                _context6.next = 47;
+                _context8.next = 47;
                 break;
 
               case 53:
-                _context6.next = 58;
+                _context8.next = 58;
                 break;
 
               case 55:
-                _context6.prev = 55;
-                _context6.t2 = _context6["catch"](45);
+                _context8.prev = 55;
+                _context8.t2 = _context8["catch"](45);
 
-                _iterator4.e(_context6.t2);
+                _iterator4.e(_context8.t2);
 
               case 58:
-                _context6.prev = 58;
+                _context8.prev = 58;
 
                 _iterator4.f();
 
-                return _context6.finish(58);
+                return _context8.finish(58);
 
               case 61:
-                _context6.next = 63;
+                _context8.next = 63;
                 return challengeService.getAllChallengeEntities();
 
               case 63:
-                _checkCount2 = _context6.sent;
+                _checkCount2 = _context8.sent;
 
                 if (!(!_checkCount2 || (_checkCount2 === null || _checkCount2 === void 0 ? void 0 : _checkCount2.length) !== _challengeEntity2.default.length)) {
-                  _context6.next = 67;
+                  _context8.next = 67;
                   break;
                 }
 
@@ -37661,37 +37684,37 @@ var InitializationService = /*#__PURE__*/function () {
               case 67:
                 _logger.default.info('[Initialization] Challenge entities updated');
 
-                return _context6.abrupt("return", challengeHash);
+                return _context8.abrupt("return", challengeHash);
 
               case 71:
-                _context6.prev = 71;
-                _context6.t3 = _context6["catch"](41);
+                _context8.prev = 71;
+                _context8.t3 = _context8["catch"](41);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.CHALLENGES_ERROR);
 
-                _logger.default.error('Initialization error - initChallengeEntity: ', _context6.t3);
+                _logger.default.error('Initialization error - initChallengeEntity: ', _context8.t3);
 
-                throw _context6.t3;
+                throw _context8.t3;
 
               case 76:
-                _context6.next = 80;
+                _context8.next = 80;
                 break;
 
               case 78:
                 // Doctype already up to date
                 _logger.default.info('[Initialization] Challenge Entity loaded');
 
-                return _context6.abrupt("return", challengeHash);
+                return _context8.abrupt("return", challengeHash);
 
               case 80:
               case "end":
-                return _context6.stop();
+                return _context8.stop();
             }
           }
-        }, _callee6, this, [[7, 35], [9, 19, 22, 25], [41, 71], [45, 55, 58, 61]]);
+        }, _callee8, this, [[7, 35], [9, 19, 22, 25], [41, 71], [45, 55, 58, 61]]);
       }));
 
-      function initChallengeEntity(_x2) {
+      function initChallengeEntity(_x4) {
         return _initChallengeEntity.apply(this, arguments);
       }
 
@@ -37700,73 +37723,73 @@ var InitializationService = /*#__PURE__*/function () {
   }, {
     key: "initDuelEntity",
     value: function () {
-      var _initDuelEntity = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(hash) {
+      var _initDuelEntity = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(hash) {
         var hashDuelEntity, duelService, loadedDuelTypes, _iterator5, _step5, duelEntity, checkCount, _iterator6, _step6, _duelEntity, _checkCount3;
 
-        return _regenerator.default.wrap(function _callee7$(_context7) {
+        return _regenerator.default.wrap(function _callee9$(_context9) {
           while (1) {
-            switch (_context7.prev = _context7.next) {
+            switch (_context9.prev = _context9.next) {
               case 0:
                 hashDuelEntity = (0, _hash.hashFile)(_duelEntity2.default);
                 duelService = new _duel.default(this._client); // Populate data if none DuelEntity exists
 
-                _context7.next = 4;
+                _context9.next = 4;
                 return duelService.getAllDuelEntities();
 
               case 4:
-                loadedDuelTypes = _context7.sent;
+                loadedDuelTypes = _context9.sent;
 
                 if (!(!loadedDuelTypes || (loadedDuelTypes === null || loadedDuelTypes === void 0 ? void 0 : loadedDuelTypes.length) === 0)) {
-                  _context7.next = 39;
+                  _context9.next = 39;
                   break;
                 }
 
-                _context7.prev = 6;
+                _context9.prev = 6;
                 _iterator5 = _createForOfIteratorHelper(_duelEntity2.default);
-                _context7.prev = 8;
+                _context9.prev = 8;
 
                 _iterator5.s();
 
               case 10:
                 if ((_step5 = _iterator5.n()).done) {
-                  _context7.next = 16;
+                  _context9.next = 16;
                   break;
                 }
 
                 duelEntity = _step5.value;
-                _context7.next = 14;
+                _context9.next = 14;
                 return this._client.create(_doctypes.DUEL_DOCTYPE, duelEntity);
 
               case 14:
-                _context7.next = 10;
+                _context9.next = 10;
                 break;
 
               case 16:
-                _context7.next = 21;
+                _context9.next = 21;
                 break;
 
               case 18:
-                _context7.prev = 18;
-                _context7.t0 = _context7["catch"](8);
+                _context9.prev = 18;
+                _context9.t0 = _context9["catch"](8);
 
-                _iterator5.e(_context7.t0);
+                _iterator5.e(_context9.t0);
 
               case 21:
-                _context7.prev = 21;
+                _context9.prev = 21;
 
                 _iterator5.f();
 
-                return _context7.finish(21);
+                return _context9.finish(21);
 
               case 24:
-                _context7.next = 26;
+                _context9.next = 26;
                 return duelService.getAllDuelEntities();
 
               case 26:
-                checkCount = _context7.sent;
+                checkCount = _context9.sent;
 
                 if (!(!checkCount || (checkCount === null || checkCount === void 0 ? void 0 : checkCount.length) !== _duelEntity2.default.length)) {
-                  _context7.next = 30;
+                  _context9.next = 30;
                   break;
                 }
 
@@ -37777,75 +37800,75 @@ var InitializationService = /*#__PURE__*/function () {
               case 30:
                 _logger.default.info('[Initialization] UserDuel entities created');
 
-                return _context7.abrupt("return", hashDuelEntity);
+                return _context9.abrupt("return", hashDuelEntity);
 
               case 34:
-                _context7.prev = 34;
-                _context7.t1 = _context7["catch"](6);
+                _context9.prev = 34;
+                _context9.t1 = _context9["catch"](6);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.CHALLENGES_ERROR);
 
-                _logger.default.error('Initialization error - initDuelEntity: ', _context7.t1);
+                _logger.default.error('Initialization error - initDuelEntity: ', _context9.t1);
 
-                throw _context7.t1;
+                throw _context9.t1;
 
               case 39:
                 if (!(hash !== hashDuelEntity)) {
-                  _context7.next = 77;
+                  _context9.next = 77;
                   break;
                 }
 
-                _context7.prev = 40;
-                _context7.next = 43;
+                _context9.prev = 40;
+                _context9.next = 43;
                 return duelService.deleteAllDuelEntities();
 
               case 43:
                 // Population with the data
                 _iterator6 = _createForOfIteratorHelper(_duelEntity2.default);
-                _context7.prev = 44;
+                _context9.prev = 44;
 
                 _iterator6.s();
 
               case 46:
                 if ((_step6 = _iterator6.n()).done) {
-                  _context7.next = 52;
+                  _context9.next = 52;
                   break;
                 }
 
                 _duelEntity = _step6.value;
-                _context7.next = 50;
+                _context9.next = 50;
                 return this._client.create(_doctypes.DUEL_DOCTYPE, _duelEntity);
 
               case 50:
-                _context7.next = 46;
+                _context9.next = 46;
                 break;
 
               case 52:
-                _context7.next = 57;
+                _context9.next = 57;
                 break;
 
               case 54:
-                _context7.prev = 54;
-                _context7.t2 = _context7["catch"](44);
+                _context9.prev = 54;
+                _context9.t2 = _context9["catch"](44);
 
-                _iterator6.e(_context7.t2);
+                _iterator6.e(_context9.t2);
 
               case 57:
-                _context7.prev = 57;
+                _context9.prev = 57;
 
                 _iterator6.f();
 
-                return _context7.finish(57);
+                return _context9.finish(57);
 
               case 60:
-                _context7.next = 62;
+                _context9.next = 62;
                 return duelService.getAllDuelEntities();
 
               case 62:
-                _checkCount3 = _context7.sent;
+                _checkCount3 = _context9.sent;
 
                 if (!(!_checkCount3 || (_checkCount3 === null || _checkCount3 === void 0 ? void 0 : _checkCount3.length) !== _duelEntity2.default.length)) {
-                  _context7.next = 66;
+                  _context9.next = 66;
                   break;
                 }
 
@@ -37856,37 +37879,37 @@ var InitializationService = /*#__PURE__*/function () {
               case 66:
                 _logger.default.info('[Initialization] UserDuel entities updated');
 
-                return _context7.abrupt("return", hashDuelEntity);
+                return _context9.abrupt("return", hashDuelEntity);
 
               case 70:
-                _context7.prev = 70;
-                _context7.t3 = _context7["catch"](40);
+                _context9.prev = 70;
+                _context9.t3 = _context9["catch"](40);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.CHALLENGES_ERROR);
 
-                _logger.default.error('Initialization error - initDuelEntity: ', _context7.t3);
+                _logger.default.error('Initialization error - initDuelEntity: ', _context9.t3);
 
-                throw _context7.t3;
+                throw _context9.t3;
 
               case 75:
-                _context7.next = 79;
+                _context9.next = 79;
                 break;
 
               case 77:
                 // Doctype already up to date
                 _logger.default.info('[Initialization] Duel Entity loaded');
 
-                return _context7.abrupt("return", hashDuelEntity);
+                return _context9.abrupt("return", hashDuelEntity);
 
               case 79:
               case "end":
-                return _context7.stop();
+                return _context9.stop();
             }
           }
-        }, _callee7, this, [[6, 34], [8, 18, 21, 24], [40, 70], [44, 54, 57, 60]]);
+        }, _callee9, this, [[6, 34], [8, 18, 21, 24], [40, 70], [44, 54, 57, 60]]);
       }));
 
-      function initDuelEntity(_x3) {
+      function initDuelEntity(_x5) {
         return _initDuelEntity.apply(this, arguments);
       }
 
@@ -37895,73 +37918,73 @@ var InitializationService = /*#__PURE__*/function () {
   }, {
     key: "initQuizEntity",
     value: function () {
-      var _initQuizEntity = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(hash) {
+      var _initQuizEntity = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(hash) {
         var quizHash, quizService, loadedQuizEntity, _iterator7, _step7, quizEntity, checkCount, _iterator8, _step8, _quizEntity, _checkCount4;
 
-        return _regenerator.default.wrap(function _callee8$(_context8) {
+        return _regenerator.default.wrap(function _callee10$(_context10) {
           while (1) {
-            switch (_context8.prev = _context8.next) {
+            switch (_context10.prev = _context10.next) {
               case 0:
                 quizHash = (0, _hash.hashFile)(_quizEntity2.default);
                 quizService = new _quiz.default(this._client); // Populate data if none quizEntity exists
 
-                _context8.next = 4;
+                _context10.next = 4;
                 return quizService.getAllQuizEntities();
 
               case 4:
-                loadedQuizEntity = _context8.sent;
+                loadedQuizEntity = _context10.sent;
 
                 if (!(!loadedQuizEntity || (loadedQuizEntity === null || loadedQuizEntity === void 0 ? void 0 : loadedQuizEntity.length) === 0)) {
-                  _context8.next = 39;
+                  _context10.next = 39;
                   break;
                 }
 
-                _context8.prev = 6;
+                _context10.prev = 6;
                 _iterator7 = _createForOfIteratorHelper(_quizEntity2.default);
-                _context8.prev = 8;
+                _context10.prev = 8;
 
                 _iterator7.s();
 
               case 10:
                 if ((_step7 = _iterator7.n()).done) {
-                  _context8.next = 16;
+                  _context10.next = 16;
                   break;
                 }
 
                 quizEntity = _step7.value;
-                _context8.next = 14;
+                _context10.next = 14;
                 return this._client.create(_doctypes.QUIZ_DOCTYPE, quizEntity);
 
               case 14:
-                _context8.next = 10;
+                _context10.next = 10;
                 break;
 
               case 16:
-                _context8.next = 21;
+                _context10.next = 21;
                 break;
 
               case 18:
-                _context8.prev = 18;
-                _context8.t0 = _context8["catch"](8);
+                _context10.prev = 18;
+                _context10.t0 = _context10["catch"](8);
 
-                _iterator7.e(_context8.t0);
+                _iterator7.e(_context10.t0);
 
               case 21:
-                _context8.prev = 21;
+                _context10.prev = 21;
 
                 _iterator7.f();
 
-                return _context8.finish(21);
+                return _context10.finish(21);
 
               case 24:
-                _context8.next = 26;
+                _context10.next = 26;
                 return quizService.getAllQuizEntities();
 
               case 26:
-                checkCount = _context8.sent;
+                checkCount = _context10.sent;
 
                 if (!(!checkCount || (checkCount === null || checkCount === void 0 ? void 0 : checkCount.length) !== _quizEntity2.default.length)) {
-                  _context8.next = 30;
+                  _context10.next = 30;
                   break;
                 }
 
@@ -37972,75 +37995,75 @@ var InitializationService = /*#__PURE__*/function () {
               case 30:
                 _logger.default.info('[Initialization] Quiz entities created');
 
-                return _context8.abrupt("return", quizHash);
+                return _context10.abrupt("return", quizHash);
 
               case 34:
-                _context8.prev = 34;
-                _context8.t1 = _context8["catch"](6);
+                _context10.prev = 34;
+                _context10.t1 = _context10["catch"](6);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.CHALLENGES_ERROR);
 
-                _logger.default.error('Initialization error - initQuizEntity: ', _context8.t1);
+                _logger.default.error('Initialization error - initQuizEntity: ', _context10.t1);
 
-                throw _context8.t1;
+                throw _context10.t1;
 
               case 39:
                 if (!(hash !== quizHash)) {
-                  _context8.next = 77;
+                  _context10.next = 77;
                   break;
                 }
 
-                _context8.prev = 40;
-                _context8.next = 43;
+                _context10.prev = 40;
+                _context10.next = 43;
                 return quizService.deleteAllQuizEntities();
 
               case 43:
                 // Population with the data
                 _iterator8 = _createForOfIteratorHelper(_quizEntity2.default);
-                _context8.prev = 44;
+                _context10.prev = 44;
 
                 _iterator8.s();
 
               case 46:
                 if ((_step8 = _iterator8.n()).done) {
-                  _context8.next = 52;
+                  _context10.next = 52;
                   break;
                 }
 
                 _quizEntity = _step8.value;
-                _context8.next = 50;
+                _context10.next = 50;
                 return this._client.create(_doctypes.QUIZ_DOCTYPE, _quizEntity);
 
               case 50:
-                _context8.next = 46;
+                _context10.next = 46;
                 break;
 
               case 52:
-                _context8.next = 57;
+                _context10.next = 57;
                 break;
 
               case 54:
-                _context8.prev = 54;
-                _context8.t2 = _context8["catch"](44);
+                _context10.prev = 54;
+                _context10.t2 = _context10["catch"](44);
 
-                _iterator8.e(_context8.t2);
+                _iterator8.e(_context10.t2);
 
               case 57:
-                _context8.prev = 57;
+                _context10.prev = 57;
 
                 _iterator8.f();
 
-                return _context8.finish(57);
+                return _context10.finish(57);
 
               case 60:
-                _context8.next = 62;
+                _context10.next = 62;
                 return quizService.getAllQuizEntities();
 
               case 62:
-                _checkCount4 = _context8.sent;
+                _checkCount4 = _context10.sent;
 
                 if (!(!_checkCount4 || (_checkCount4 === null || _checkCount4 === void 0 ? void 0 : _checkCount4.length) !== _quizEntity2.default.length)) {
-                  _context8.next = 66;
+                  _context10.next = 66;
                   break;
                 }
 
@@ -38051,37 +38074,37 @@ var InitializationService = /*#__PURE__*/function () {
               case 66:
                 _logger.default.info('[Initialization] Quiz entities updated');
 
-                return _context8.abrupt("return", quizHash);
+                return _context10.abrupt("return", quizHash);
 
               case 70:
-                _context8.prev = 70;
-                _context8.t3 = _context8["catch"](40);
+                _context10.prev = 70;
+                _context10.t3 = _context10["catch"](40);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.CHALLENGES_ERROR);
 
-                _logger.default.error('Initialization error - initQuizEntity: ', _context8.t3);
+                _logger.default.error('Initialization error - initQuizEntity: ', _context10.t3);
 
-                throw _context8.t3;
+                throw _context10.t3;
 
               case 75:
-                _context8.next = 79;
+                _context10.next = 79;
                 break;
 
               case 77:
                 // Doctype already up to date
                 _logger.default.info('[Initialization] Quiz Entity loaded');
 
-                return _context8.abrupt("return", quizHash);
+                return _context10.abrupt("return", quizHash);
 
               case 79:
               case "end":
-                return _context8.stop();
+                return _context10.stop();
             }
           }
-        }, _callee8, this, [[6, 34], [8, 18, 21, 24], [40, 70], [44, 54, 57, 60]]);
+        }, _callee10, this, [[6, 34], [8, 18, 21, 24], [40, 70], [44, 54, 57, 60]]);
       }));
 
-      function initQuizEntity(_x4) {
+      function initQuizEntity(_x6) {
         return _initQuizEntity.apply(this, arguments);
       }
 
@@ -38090,73 +38113,73 @@ var InitializationService = /*#__PURE__*/function () {
   }, {
     key: "initExplorationEntity",
     value: function () {
-      var _initExplorationEntity = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(hash) {
+      var _initExplorationEntity = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(hash) {
         var explorationHash, explorationService, loadedExplorationEntity, _iterator9, _step9, explorationEntity, checkCount, _iterator10, _step10, _explorationEntity, _checkCount5;
 
-        return _regenerator.default.wrap(function _callee9$(_context9) {
+        return _regenerator.default.wrap(function _callee11$(_context11) {
           while (1) {
-            switch (_context9.prev = _context9.next) {
+            switch (_context11.prev = _context11.next) {
               case 0:
                 explorationHash = (0, _hash.hashFile)(_explorationEntity2.default);
                 explorationService = new _exploration.default(this._client); // Populate data if none explorationEntity exists
 
-                _context9.next = 4;
+                _context11.next = 4;
                 return explorationService.getAllExplorationEntities();
 
               case 4:
-                loadedExplorationEntity = _context9.sent;
+                loadedExplorationEntity = _context11.sent;
 
                 if (!(!loadedExplorationEntity || (loadedExplorationEntity === null || loadedExplorationEntity === void 0 ? void 0 : loadedExplorationEntity.length) === 0)) {
-                  _context9.next = 39;
+                  _context11.next = 39;
                   break;
                 }
 
-                _context9.prev = 6;
+                _context11.prev = 6;
                 _iterator9 = _createForOfIteratorHelper(_explorationEntity2.default);
-                _context9.prev = 8;
+                _context11.prev = 8;
 
                 _iterator9.s();
 
               case 10:
                 if ((_step9 = _iterator9.n()).done) {
-                  _context9.next = 16;
+                  _context11.next = 16;
                   break;
                 }
 
                 explorationEntity = _step9.value;
-                _context9.next = 14;
+                _context11.next = 14;
                 return this._client.create(_doctypes.EXPLORATION_DOCTYPE, explorationEntity);
 
               case 14:
-                _context9.next = 10;
+                _context11.next = 10;
                 break;
 
               case 16:
-                _context9.next = 21;
+                _context11.next = 21;
                 break;
 
               case 18:
-                _context9.prev = 18;
-                _context9.t0 = _context9["catch"](8);
+                _context11.prev = 18;
+                _context11.t0 = _context11["catch"](8);
 
-                _iterator9.e(_context9.t0);
+                _iterator9.e(_context11.t0);
 
               case 21:
-                _context9.prev = 21;
+                _context11.prev = 21;
 
                 _iterator9.f();
 
-                return _context9.finish(21);
+                return _context11.finish(21);
 
               case 24:
-                _context9.next = 26;
+                _context11.next = 26;
                 return explorationService.getAllExplorationEntities();
 
               case 26:
-                checkCount = _context9.sent;
+                checkCount = _context11.sent;
 
                 if (!(!checkCount || (checkCount === null || checkCount === void 0 ? void 0 : checkCount.length) !== _explorationEntity2.default.length)) {
-                  _context9.next = 30;
+                  _context11.next = 30;
                   break;
                 }
 
@@ -38167,75 +38190,75 @@ var InitializationService = /*#__PURE__*/function () {
               case 30:
                 _logger.default.info('[Initialization] Exploration entities created');
 
-                return _context9.abrupt("return", explorationHash);
+                return _context11.abrupt("return", explorationHash);
 
               case 34:
-                _context9.prev = 34;
-                _context9.t1 = _context9["catch"](6);
+                _context11.prev = 34;
+                _context11.t1 = _context11["catch"](6);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.CHALLENGES_ERROR);
 
-                _logger.default.error('Initialization error - initExplorationEntity: ', _context9.t1);
+                _logger.default.error('Initialization error - initExplorationEntity: ', _context11.t1);
 
-                throw _context9.t1;
+                throw _context11.t1;
 
               case 39:
                 if (!(hash !== explorationHash)) {
-                  _context9.next = 77;
+                  _context11.next = 77;
                   break;
                 }
 
-                _context9.prev = 40;
-                _context9.next = 43;
+                _context11.prev = 40;
+                _context11.next = 43;
                 return explorationService.deleteAllExplorationEntities();
 
               case 43:
                 // Population with the data
                 _iterator10 = _createForOfIteratorHelper(_explorationEntity2.default);
-                _context9.prev = 44;
+                _context11.prev = 44;
 
                 _iterator10.s();
 
               case 46:
                 if ((_step10 = _iterator10.n()).done) {
-                  _context9.next = 52;
+                  _context11.next = 52;
                   break;
                 }
 
                 _explorationEntity = _step10.value;
-                _context9.next = 50;
+                _context11.next = 50;
                 return this._client.create(_doctypes.EXPLORATION_DOCTYPE, _explorationEntity);
 
               case 50:
-                _context9.next = 46;
+                _context11.next = 46;
                 break;
 
               case 52:
-                _context9.next = 57;
+                _context11.next = 57;
                 break;
 
               case 54:
-                _context9.prev = 54;
-                _context9.t2 = _context9["catch"](44);
+                _context11.prev = 54;
+                _context11.t2 = _context11["catch"](44);
 
-                _iterator10.e(_context9.t2);
+                _iterator10.e(_context11.t2);
 
               case 57:
-                _context9.prev = 57;
+                _context11.prev = 57;
 
                 _iterator10.f();
 
-                return _context9.finish(57);
+                return _context11.finish(57);
 
               case 60:
-                _context9.next = 62;
+                _context11.next = 62;
                 return explorationService.getAllExplorationEntities();
 
               case 62:
-                _checkCount5 = _context9.sent;
+                _checkCount5 = _context11.sent;
 
                 if (!(!_checkCount5 || (_checkCount5 === null || _checkCount5 === void 0 ? void 0 : _checkCount5.length) !== _explorationEntity2.default.length)) {
-                  _context9.next = 66;
+                  _context11.next = 66;
                   break;
                 }
 
@@ -38246,37 +38269,37 @@ var InitializationService = /*#__PURE__*/function () {
               case 66:
                 _logger.default.info('[Initialization] Exploration entities updated');
 
-                return _context9.abrupt("return", explorationHash);
+                return _context11.abrupt("return", explorationHash);
 
               case 70:
-                _context9.prev = 70;
-                _context9.t3 = _context9["catch"](40);
+                _context11.prev = 70;
+                _context11.t3 = _context11["catch"](40);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.CHALLENGES_ERROR);
 
-                _logger.default.error('Initialization error - initExplorationEntity: ', _context9.t3);
+                _logger.default.error('Initialization error - initExplorationEntity: ', _context11.t3);
 
-                throw _context9.t3;
+                throw _context11.t3;
 
               case 75:
-                _context9.next = 79;
+                _context11.next = 79;
                 break;
 
               case 77:
                 // Doctype already up to date
                 _logger.default.info('[Initialization] Exploration Entity loaded');
 
-                return _context9.abrupt("return", explorationHash);
+                return _context11.abrupt("return", explorationHash);
 
               case 79:
               case "end":
-                return _context9.stop();
+                return _context11.stop();
             }
           }
-        }, _callee9, this, [[6, 34], [8, 18, 21, 24], [40, 70], [44, 54, 57, 60]]);
+        }, _callee11, this, [[6, 34], [8, 18, 21, 24], [40, 70], [44, 54, 57, 60]]);
       }));
 
-      function initExplorationEntity(_x5) {
+      function initExplorationEntity(_x7) {
         return _initExplorationEntity.apply(this, arguments);
       }
 
@@ -38285,21 +38308,21 @@ var InitializationService = /*#__PURE__*/function () {
   }, {
     key: "initAnalysis",
     value: function () {
-      var _initAnalysis = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(profile) {
+      var _initAnalysis = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12(profile) {
         var actualAnalysisDate;
-        return _regenerator.default.wrap(function _callee10$(_context10) {
+        return _regenerator.default.wrap(function _callee12$(_context12) {
           while (1) {
-            switch (_context10.prev = _context10.next) {
+            switch (_context12.prev = _context12.next) {
               case 0:
-                _context10.prev = 0;
+                _context12.prev = 0;
                 actualAnalysisDate = (0, _date.getActualAnalysisDate)();
 
                 if (!(profile.monthlyAnalysisDate && actualAnalysisDate <= profile.monthlyAnalysisDate)) {
-                  _context10.next = 6;
+                  _context12.next = 6;
                   break;
                 }
 
-                return _context10.abrupt("return", {
+                return _context12.abrupt("return", {
                   monthlyAnalysisDate: profile.monthlyAnalysisDate,
                   haveSeenLastAnalysis: profile.haveSeenLastAnalysis
                 });
@@ -38307,34 +38330,34 @@ var InitializationService = /*#__PURE__*/function () {
               case 6:
                 _logger.default.info('[Initialization] Analysis information from profile updated');
 
-                return _context10.abrupt("return", {
+                return _context12.abrupt("return", {
                   monthlyAnalysisDate: actualAnalysisDate,
                   haveSeenLastAnalysis: profile.isFirstConnection ? true : false
                 });
 
               case 8:
-                _context10.next = 15;
+                _context12.next = 15;
                 break;
 
               case 10:
-                _context10.prev = 10;
-                _context10.t0 = _context10["catch"](0);
+                _context12.prev = 10;
+                _context12.t0 = _context12["catch"](0);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.ANALYSIS_ERROR);
 
-                _logger.default.error('Initialization error - initAnalysis: ', _context10.t0);
+                _logger.default.error('Initialization error - initAnalysis: ', _context12.t0);
 
-                throw _context10.t0;
+                throw _context12.t0;
 
               case 15:
               case "end":
-                return _context10.stop();
+                return _context12.stop();
             }
           }
-        }, _callee10, this, [[0, 10]]);
+        }, _callee12, this, [[0, 10]]);
       }));
 
-      function initAnalysis(_x6) {
+      function initAnalysis(_x8) {
         return _initAnalysis.apply(this, arguments);
       }
 
@@ -38349,28 +38372,28 @@ var InitializationService = /*#__PURE__*/function () {
   }, {
     key: "initFluidTypes",
     value: function () {
-      var _initFluidTypes = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11() {
+      var _initFluidTypes = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13() {
         var kss, fluidtypes;
-        return _regenerator.default.wrap(function _callee11$(_context11) {
+        return _regenerator.default.wrap(function _callee13$(_context13) {
           while (1) {
-            switch (_context11.prev = _context11.next) {
+            switch (_context13.prev = _context13.next) {
               case 0:
                 kss = new _konnectorStatus.default(this._client);
-                _context11.prev = 1;
-                _context11.next = 4;
+                _context13.prev = 1;
+                _context13.next = 4;
                 return kss.getKonnectorAccountStatus();
 
               case 4:
-                fluidtypes = _context11.sent;
+                fluidtypes = _context13.sent;
 
                 if (!fluidtypes) {
-                  _context11.next = 10;
+                  _context13.next = 10;
                   break;
                 }
 
                 _logger.default.info('[Initialization] Fluid Types loaded');
 
-                return _context11.abrupt("return", fluidtypes);
+                return _context13.abrupt("return", fluidtypes);
 
               case 10:
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.CONSOS_ERROR);
@@ -38378,25 +38401,25 @@ var InitializationService = /*#__PURE__*/function () {
                 throw new Error('initFluidTypes: FluidTypes not found');
 
               case 12:
-                _context11.next = 19;
+                _context13.next = 19;
                 break;
 
               case 14:
-                _context11.prev = 14;
-                _context11.t0 = _context11["catch"](1);
+                _context13.prev = 14;
+                _context13.t0 = _context13["catch"](1);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.CONSOS_ERROR);
 
-                _logger.default.error('Initialization error - initFluidTypes: ', _context11.t0);
+                _logger.default.error('Initialization error - initFluidTypes: ', _context13.t0);
 
-                throw _context11.t0;
+                throw _context13.t0;
 
               case 19:
               case "end":
-                return _context11.stop();
+                return _context13.stop();
             }
           }
-        }, _callee11, this, [[1, 14]]);
+        }, _callee13, this, [[1, 14]]);
       }));
 
       function initFluidTypes() {
@@ -38414,31 +38437,31 @@ var InitializationService = /*#__PURE__*/function () {
   }, {
     key: "initFluidStatus",
     value: function () {
-      var _initFluidStatus = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12() {
+      var _initFluidStatus = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14() {
         var fs, fluidStatus;
-        return _regenerator.default.wrap(function _callee12$(_context12) {
+        return _regenerator.default.wrap(function _callee14$(_context14) {
           while (1) {
-            switch (_context12.prev = _context12.next) {
+            switch (_context14.prev = _context14.next) {
               case 0:
                 fs = new _fluid2.default(this._client);
-                _context12.prev = 1;
+                _context14.prev = 1;
 
                 this._setinitStep(_initialisationSteps.InitSteps.CONSOS);
 
-                _context12.next = 5;
+                _context14.next = 5;
                 return fs.getFluidStatus();
 
               case 5:
-                fluidStatus = _context12.sent;
+                fluidStatus = _context14.sent;
 
                 if (!fluidStatus) {
-                  _context12.next = 11;
+                  _context14.next = 11;
                   break;
                 }
 
                 _logger.default.info('[Initialization] Fluid Status loaded');
 
-                return _context12.abrupt("return", fluidStatus);
+                return _context14.abrupt("return", fluidStatus);
 
               case 11:
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.CONSOS_ERROR);
@@ -38446,25 +38469,25 @@ var InitializationService = /*#__PURE__*/function () {
                 throw new Error('initFluidStatus: fluidStatus not found');
 
               case 13:
-                _context12.next = 20;
+                _context14.next = 20;
                 break;
 
               case 15:
-                _context12.prev = 15;
-                _context12.t0 = _context12["catch"](1);
+                _context14.prev = 15;
+                _context14.t0 = _context14["catch"](1);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.CONSOS_ERROR);
 
-                _logger.default.error('Initialization error - initFluidStatus: ', _context12.t0);
+                _logger.default.error('Initialization error - initFluidStatus: ', _context14.t0);
 
-                throw _context12.t0;
+                throw _context14.t0;
 
               case 20:
               case "end":
-                return _context12.stop();
+                return _context14.stop();
             }
           }
-        }, _callee12, this, [[1, 15]]);
+        }, _callee14, this, [[1, 15]]);
       }));
 
       function initFluidStatus() {
@@ -38482,28 +38505,28 @@ var InitializationService = /*#__PURE__*/function () {
   }, {
     key: "initUserChallenges",
     value: function () {
-      var _initUserChallenges = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13(fluidStatus) {
+      var _initUserChallenges = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee15(fluidStatus) {
         var challengeService, userChallengeList;
-        return _regenerator.default.wrap(function _callee13$(_context13) {
+        return _regenerator.default.wrap(function _callee15$(_context15) {
           while (1) {
-            switch (_context13.prev = _context13.next) {
+            switch (_context15.prev = _context15.next) {
               case 0:
                 challengeService = new _challenge.default(this._client);
-                _context13.prev = 1;
-                _context13.next = 4;
+                _context15.prev = 1;
+                _context15.next = 4;
                 return challengeService.buildUserChallengeList(fluidStatus);
 
               case 4:
-                userChallengeList = _context13.sent;
+                userChallengeList = _context15.sent;
 
                 if (!userChallengeList) {
-                  _context13.next = 10;
+                  _context15.next = 10;
                   break;
                 }
 
                 _logger.default.info('[Initialization] Challenges loaded');
 
-                return _context13.abrupt("return", userChallengeList);
+                return _context15.abrupt("return", userChallengeList);
 
               case 10:
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.CHALLENGES_ERROR);
@@ -38511,28 +38534,28 @@ var InitializationService = /*#__PURE__*/function () {
                 throw new Error('initUserChallenges: userChallengeList not found');
 
               case 12:
-                _context13.next = 19;
+                _context15.next = 19;
                 break;
 
               case 14:
-                _context13.prev = 14;
-                _context13.t0 = _context13["catch"](1);
+                _context15.prev = 14;
+                _context15.t0 = _context15["catch"](1);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.CHALLENGES_ERROR);
 
-                _logger.default.error('Initialization error - initUserChallenges: ', _context13.t0);
+                _logger.default.error('Initialization error - initUserChallenges: ', _context15.t0);
 
-                throw _context13.t0;
+                throw _context15.t0;
 
               case 19:
               case "end":
-                return _context13.stop();
+                return _context15.stop();
             }
           }
-        }, _callee13, this, [[1, 14]]);
+        }, _callee15, this, [[1, 14]]);
       }));
 
-      function initUserChallenges(_x7) {
+      function initUserChallenges(_x9) {
         return _initUserChallenges.apply(this, arguments);
       }
 
@@ -38547,46 +38570,46 @@ var InitializationService = /*#__PURE__*/function () {
   }, {
     key: "initDuelProgress",
     value: function () {
-      var _initDuelProgress = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14(userChallenge) {
+      var _initDuelProgress = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16(userChallenge) {
         var challengeService, _yield$challengeServi, updatedUserChallenge, dataloads;
 
-        return _regenerator.default.wrap(function _callee14$(_context14) {
+        return _regenerator.default.wrap(function _callee16$(_context16) {
           while (1) {
-            switch (_context14.prev = _context14.next) {
+            switch (_context16.prev = _context16.next) {
               case 0:
                 challengeService = new _challenge.default(this._client);
-                _context14.prev = 1;
-                _context14.next = 4;
+                _context16.prev = 1;
+                _context16.next = 4;
                 return challengeService.initChallengeDuelProgress(userChallenge);
 
               case 4:
-                _yield$challengeServi = _context14.sent;
+                _yield$challengeServi = _context16.sent;
                 updatedUserChallenge = _yield$challengeServi.updatedUserChallenge;
                 dataloads = _yield$challengeServi.dataloads;
-                return _context14.abrupt("return", {
+                return _context16.abrupt("return", {
                   updatedUserChallenge: updatedUserChallenge,
                   dataloads: dataloads
                 });
 
               case 10:
-                _context14.prev = 10;
-                _context14.t0 = _context14["catch"](1);
+                _context16.prev = 10;
+                _context16.t0 = _context16["catch"](1);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.CHALLENGES_ERROR);
 
-                _logger.default.error('Initialization error: ', _context14.t0);
+                _logger.default.error('Initialization error: ', _context16.t0);
 
-                throw _context14.t0;
+                throw _context16.t0;
 
               case 15:
               case "end":
-                return _context14.stop();
+                return _context16.stop();
             }
           }
-        }, _callee14, this, [[1, 10]]);
+        }, _callee16, this, [[1, 10]]);
       }));
 
-      function initDuelProgress(_x8) {
+      function initDuelProgress(_x10) {
         return _initDuelProgress.apply(this, arguments);
       }
 
@@ -38595,47 +38618,47 @@ var InitializationService = /*#__PURE__*/function () {
   }, {
     key: "initConsent",
     value: function () {
-      var _initConsent = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee15() {
+      var _initConsent = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee17() {
         var termsStatus, termService, isUpToDate, lastTerm, isLastConsentValidated, versionType;
-        return _regenerator.default.wrap(function _callee15$(_context15) {
+        return _regenerator.default.wrap(function _callee17$(_context17) {
           while (1) {
-            switch (_context15.prev = _context15.next) {
+            switch (_context17.prev = _context17.next) {
               case 0:
                 termsStatus = {
                   accepted: false,
                   versionType: 'init'
                 };
-                _context15.prev = 1;
+                _context17.prev = 1;
 
                 this._setinitStep(_initialisationSteps.InitSteps.CONSENT);
 
                 termService = new _terms.default(this._client);
-                _context15.next = 6;
+                _context17.next = 6;
                 return termService.isConsentVersionUpToDate();
 
               case 6:
-                isUpToDate = _context15.sent;
-                _context15.next = 9;
+                isUpToDate = _context17.sent;
+                _context17.next = 9;
                 return termService.getLastTerm();
 
               case 9:
-                lastTerm = _context15.sent;
+                lastTerm = _context17.sent;
 
                 if (!lastTerm) {
-                  _context15.next = 24;
+                  _context17.next = 24;
                   break;
                 }
 
                 if (!isUpToDate) {
-                  _context15.next = 18;
+                  _context17.next = 18;
                   break;
                 }
 
-                _context15.next = 14;
+                _context17.next = 14;
                 return termService.isLastTermValidated();
 
               case 14:
-                isLastConsentValidated = _context15.sent;
+                isLastConsentValidated = _context17.sent;
 
                 if (isLastConsentValidated) {
                   termsStatus.accepted = true;
@@ -38649,15 +38672,15 @@ var InitializationService = /*#__PURE__*/function () {
                   _logger.default.info('[Initialization] Consent not up-to-date');
                 }
 
-                _context15.next = 22;
+                _context17.next = 22;
                 break;
 
               case 18:
-                _context15.next = 20;
+                _context17.next = 20;
                 return termService.getTermsVersionType();
 
               case 20:
-                versionType = _context15.sent;
+                versionType = _context17.sent;
 
                 if (versionType === 'minor') {
                   termsStatus.accepted = false;
@@ -38672,7 +38695,7 @@ var InitializationService = /*#__PURE__*/function () {
                 }
 
               case 22:
-                _context15.next = 27;
+                _context17.next = 27;
                 break;
 
               case 24:
@@ -38682,24 +38705,24 @@ var InitializationService = /*#__PURE__*/function () {
                 _logger.default.info('[Initialization] Init first terms');
 
               case 27:
-                return _context15.abrupt("return", termsStatus);
+                return _context17.abrupt("return", termsStatus);
 
               case 30:
-                _context15.prev = 30;
-                _context15.t0 = _context15["catch"](1);
+                _context17.prev = 30;
+                _context17.t0 = _context17["catch"](1);
 
                 this._setinitStepError(_initialisationSteps.InitStepsErrors.CONSENT_ERROR);
 
-                _logger.default.error('Initialization error - initConsent: ', _context15.t0);
+                _logger.default.error('Initialization error - initConsent: ', _context17.t0);
 
-                throw _context15.t0;
+                throw _context17.t0;
 
               case 35:
               case "end":
-                return _context15.stop();
+                return _context17.stop();
             }
           }
-        }, _callee15, this, [[1, 30]]);
+        }, _callee17, this, [[1, 30]]);
       }));
 
       function initConsent() {
diff --git a/index.html b/index.html
index 2d2a72ecc4287b9fec374271fa267ab95b0f9ce0..5497a240388a87b642f755af928d2c8d9a4f8850 100644
--- a/index.html
+++ b/index.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo</title><link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,user-scalable=0,viewport-fit=cover"><!-- PWA Chrome --><link rel="icon" sizes="192x192" href="/android-chrome-192x192.png"><link rel="icon" sizes="512x512" href="/android-chrome-512x512.png"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- PWA Colors --><meta name="theme-color" content="#343641"><meta name="background-color" content="#121212">{{.ThemeCSS}} {{.CozyBar}}<script src="//{{.Domain}}/assets/js/piwik.js"></script></head><body><div role="application" class="application" data-cozy="{{.CozyData}}"><script src="vendors/ecolyo.c1180bc5cd66dfd3234e.js"></script><script src="app/ecolyo.5cc3e1d382e6cdb43a57.js"></script></div></body></html>
\ No newline at end of file
+<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo</title><link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,user-scalable=0,viewport-fit=cover"><!-- PWA Chrome --><link rel="icon" sizes="192x192" href="/android-chrome-192x192.png"><link rel="icon" sizes="512x512" href="/android-chrome-512x512.png"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- PWA Colors --><meta name="theme-color" content="#343641"><meta name="background-color" content="#121212">{{.ThemeCSS}} {{.CozyBar}}<script src="//{{.Domain}}/assets/js/piwik.js"></script></head><body><div role="application" class="application" data-cozy="{{.CozyData}}"><script src="vendors/ecolyo.c1180bc5cd66dfd3234e.js"></script><script src="app/ecolyo.661ca74a9860cde92f98.js"></script></div></body></html>
\ No newline at end of file
diff --git a/manifest.webapp b/manifest.webapp
index 1e28781a82fca0475616c565e8cb92e10d37aa4b..440b229cea46161b3a64034bf086ef623b631862 100644
--- a/manifest.webapp
+++ b/manifest.webapp
@@ -5,7 +5,7 @@
   "categories": [
     "energy"
   ],
-  "version": "1.11.0",
+  "version": "1.10.2",
   "licence": "AGPL-3.0",
   "editor": "Métropole de Lyon",
   "default_locale": "fr",
diff --git a/services/aggregatorUsageEvents/ecolyo.js b/services/aggregatorUsageEvents/ecolyo.js
index 81fb0917e9f507de8bfa0e8bf2417a032d5bc6ee..db858746f6bee262f56eaea5f2adfa3f70edb796 100644
--- a/services/aggregatorUsageEvents/ecolyo.js
+++ b/services/aggregatorUsageEvents/ecolyo.js
@@ -79880,6 +79880,7 @@ var _logger = _interopRequireDefault(__webpack_require__(620));
 
 var _dataload = __webpack_require__(612);
 
+/* eslint-disable @typescript-eslint/no-explicit-any */
 class QueryRunner {
   // TODO to be clean up
 
@@ -80172,7 +80173,7 @@ class QueryRunner {
         }),
         endDate: maxTimePeriod.startDate.plus({
           day: -1
-        }).endOf('day')
+        }).endOf('days')
       };
       const lastDayOfPreviousMonthQuery = this.buildMaxQuery(timeStep, lastDayOfPreviousMonth, fluidType, this._max_limit);
       const lastDayOfPreviousMonthResult = await this.fetchData(lastDayOfPreviousMonthQuery);
diff --git a/services/consumptionAlert/ecolyo.js b/services/consumptionAlert/ecolyo.js
index 4853d877bc39121b0ff83a8db85bcee69da732a9..9c88569e22f283f2d3420252a99fbc9e96ddc2bf 100644
--- a/services/consumptionAlert/ecolyo.js
+++ b/services/consumptionAlert/ecolyo.js
@@ -78510,6 +78510,7 @@ var _logger = _interopRequireDefault(__webpack_require__(620));
 
 var _dataload = __webpack_require__(612);
 
+/* eslint-disable @typescript-eslint/no-explicit-any */
 class QueryRunner {
   // TODO to be clean up
 
@@ -78802,7 +78803,7 @@ class QueryRunner {
         }),
         endDate: maxTimePeriod.startDate.plus({
           day: -1
-        }).endOf('day')
+        }).endOf('days')
       };
       const lastDayOfPreviousMonthQuery = this.buildMaxQuery(timeStep, lastDayOfPreviousMonth, fluidType, this._max_limit);
       const lastDayOfPreviousMonthResult = await this.fetchData(lastDayOfPreviousMonthQuery);
@@ -80926,11 +80927,8 @@ const consumptionAlert = async ({
 
   if (fetchedData && fetchedData.length > 0) {
     fetchedData.forEach(element => {
-      if (element.value) {
+      if (element.value && element.value > lastDayValue) {
         lastDayValue = element.value;
-      }
-
-      if (element.date) {
         alertDay = element.date;
       }
     });
@@ -80980,7 +80978,6 @@ Object.defineProperty(exports, "__esModule", {
 });
 exports.default = void 0;
 
-/* eslint-disable @typescript-eslint/no-explicit-any */
 class MailService {
   async SendMail(client, mailInfo) {
     try {
diff --git a/services/enedisHalfHourMonthlyAnalysis/ecolyo.js b/services/enedisHalfHourMonthlyAnalysis/ecolyo.js
index f9d9c6fff833ce08f2d051129669a7343cc78ddd..b6c2a43bbb9d59f1b27c05a86c6ee1cd44d1876d 100644
--- a/services/enedisHalfHourMonthlyAnalysis/ecolyo.js
+++ b/services/enedisHalfHourMonthlyAnalysis/ecolyo.js
@@ -78420,6 +78420,7 @@ var _logger = _interopRequireDefault(__webpack_require__(620));
 
 var _dataload = __webpack_require__(612);
 
+/* eslint-disable @typescript-eslint/no-explicit-any */
 class QueryRunner {
   // TODO to be clean up
 
@@ -78712,7 +78713,7 @@ class QueryRunner {
         }),
         endDate: maxTimePeriod.startDate.plus({
           day: -1
-        }).endOf('day')
+        }).endOf('days')
       };
       const lastDayOfPreviousMonthQuery = this.buildMaxQuery(timeStep, lastDayOfPreviousMonth, fluidType, this._max_limit);
       const lastDayOfPreviousMonthResult = await this.fetchData(lastDayOfPreviousMonthQuery);
diff --git a/services/fluidsPrices/ecolyo.js b/services/fluidsPrices/ecolyo.js
index 23ea27c0c7e6cf478a32d787c75cb60477db7103..34ae9d3fc5a9e21b2a2ced5adfc52367db1c1ea8 100644
--- a/services/fluidsPrices/ecolyo.js
+++ b/services/fluidsPrices/ecolyo.js
@@ -78420,6 +78420,7 @@ var _logger = _interopRequireDefault(__webpack_require__(620));
 
 var _dataload = __webpack_require__(612);
 
+/* eslint-disable @typescript-eslint/no-explicit-any */
 class QueryRunner {
   // TODO to be clean up
 
@@ -78712,7 +78713,7 @@ class QueryRunner {
         }),
         endDate: maxTimePeriod.startDate.plus({
           day: -1
-        }).endOf('day')
+        }).endOf('days')
       };
       const lastDayOfPreviousMonthQuery = this.buildMaxQuery(timeStep, lastDayOfPreviousMonth, fluidType, this._max_limit);
       const lastDayOfPreviousMonthResult = await this.fetchData(lastDayOfPreviousMonthQuery);
diff --git a/services/monthlyReportNotification/ecolyo.js b/services/monthlyReportNotification/ecolyo.js
index 03d92ef4c76d83884bce9d40d5074e8bd1a05fd5..2d7ae76e5d348f281a6a49b35825a07eec4cbf42 100644
--- a/services/monthlyReportNotification/ecolyo.js
+++ b/services/monthlyReportNotification/ecolyo.js
@@ -78510,6 +78510,7 @@ var _logger = _interopRequireDefault(__webpack_require__(620));
 
 var _dataload = __webpack_require__(612);
 
+/* eslint-disable @typescript-eslint/no-explicit-any */
 class QueryRunner {
   // TODO to be clean up
 
@@ -78802,7 +78803,7 @@ class QueryRunner {
         }),
         endDate: maxTimePeriod.startDate.plus({
           day: -1
-        }).endOf('day')
+        }).endOf('days')
       };
       const lastDayOfPreviousMonthQuery = this.buildMaxQuery(timeStep, lastDayOfPreviousMonth, fluidType, this._max_limit);
       const lastDayOfPreviousMonthResult = await this.fetchData(lastDayOfPreviousMonthQuery);
@@ -80867,7 +80868,6 @@ Object.defineProperty(exports, "__esModule", {
 });
 exports.default = void 0;
 
-/* eslint-disable @typescript-eslint/no-explicit-any */
 class MailService {
   async SendMail(client, mailInfo) {
     try {