diff --git a/2/ecolyo.075d8275c6edff2ee08d.js b/2/ecolyo.c149122cc628d8281c62.js
similarity index 99%
rename from 2/ecolyo.075d8275c6edff2ee08d.js
rename to 2/ecolyo.c149122cc628d8281c62.js
index 53d10562e665062ac1199e863be5d2b956cb462e..3cb6f18d234d4a1967fde8204c58b8bced84b431 100644
--- a/2/ecolyo.075d8275c6edff2ee08d.js
+++ b/2/ecolyo.c149122cc628d8281c62.js
@@ -2782,11 +2782,13 @@ Object.defineProperty(exports, "__esModule", {
 });
 exports.default = void 0;
 
+var _I18n = __webpack_require__("buk/");
+
 var _react = _interopRequireDefault(__webpack_require__("q1tI"));
 
 __webpack_require__("BgT8");
 
-var _I18n = __webpack_require__("buk/");
+var _StyledIcon = _interopRequireDefault(__webpack_require__("I07j"));
 
 var _fluid = __webpack_require__("5Wkc");
 
@@ -2794,8 +2796,6 @@ var _picto = __webpack_require__("6DBe");
 
 var _utils = __webpack_require__("c+yx");
 
-var _StyledIcon = _interopRequireDefault(__webpack_require__("I07j"));
-
 var FluidPerformanceIndicator = function FluidPerformanceIndicator(_ref) {
   var performanceIndicator = _ref.performanceIndicator,
       fluidType = _ref.fluidType,
@@ -2834,8 +2834,8 @@ var FluidPerformanceIndicator = function FluidPerformanceIndicator(_ref) {
   }, t('FLUID.' + _fluid.FluidType[fluidType] + '.UNIT')), /*#__PURE__*/_react.default.createElement("span", {
     className: "euro-value month"
   }, /*#__PURE__*/_react.default.createElement("span", {
-    className: "".concat(performanceIndicator && performanceIndicator.percentageVariation && performanceIndicator.percentageVariation > 0 ? 'negative' : 'positive')
-  }, performanceIndicator && performanceIndicator.percentageVariation ? performanceIndicator.percentageVariation > 0 ? "-".concat((0, _utils.formatNumberValues)(performanceIndicator.percentageVariation * 100), " %") : "+".concat((0, _utils.formatNumberValues)(Math.abs(performanceIndicator.percentageVariation) * 100), " %") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
+    className: "".concat(performanceIndicator && performanceIndicator.percentageVariation && performanceIndicator.percentageVariation > 0 ? 'positive' : 'negative')
+  }, performanceIndicator && performanceIndicator.percentageVariation ? performanceIndicator.percentageVariation > 0 ? "+".concat((0, _utils.formatNumberValues)(performanceIndicator.percentageVariation * 100), " %") : "-".concat((0, _utils.formatNumberValues)(Math.abs(performanceIndicator.percentageVariation) * 100), " %") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
     className: "no-comparison"
   }, t('performance_indicator.fpi.no_comparison')))), performanceIndicator.percentageVariation && "/ ".concat((0, _utils.getPreviousMonthName)(date.minus({
     month: 1
diff --git a/app/ecolyo.d76dc88d3641f867c720.js b/app/ecolyo.2c1153d2d060def29500.js
similarity index 99%
rename from app/ecolyo.d76dc88d3641f867c720.js
rename to app/ecolyo.2c1153d2d060def29500.js
index 73f8c98ea1c9c3ba9ce7416feb8fa8baf47a1408..18c2fe9fc831df7759118b32e647ad4d2e9a39fb 100644
--- a/app/ecolyo.d76dc88d3641f867c720.js
+++ b/app/ecolyo.2c1153d2d060def29500.js
@@ -64,7 +64,7 @@
 /******/
 /******/ 	// script path function
 /******/ 	function jsonpScriptSrc(chunkId) {
-/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"2":"075d8275c6edff2ee08d","3":"36b8ec7c4464086d1c01","4":"5e481431cf0b2359d58d","5":"be40de25a698f7337c41","6":"5ea36954335bad0648ec","7":"8e0088481e1baf094fa4","8":"9053e1d3a50ee6a7d4c4","9":"11294a210c09d427c29f","10":"1823bf23fa5cf052fd8e"}[chunkId] + ".js"
+/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"2":"c149122cc628d8281c62","3":"36b8ec7c4464086d1c01","4":"5e481431cf0b2359d58d","5":"be40de25a698f7337c41","6":"5ea36954335bad0648ec","7":"8e0088481e1baf094fa4","8":"9053e1d3a50ee6a7d4c4","9":"11294a210c09d427c29f","10":"1823bf23fa5cf052fd8e"}[chunkId] + ".js"
 /******/ 	}
 /******/
 /******/ 	// The require function
@@ -7577,7 +7577,7 @@ var PerformanceIndicatorService = /*#__PURE__*/function () {
       var agreggatedPerformanceIndicator = {
         value: currentValue,
         compareValue: compareValue,
-        percentageVariation: 1 - currentValue / compareValue
+        percentageVariation: currentValue / compareValue - 1
       };
       return agreggatedPerformanceIndicator;
     }
@@ -7807,23 +7807,23 @@ var _createClass2 = _interopRequireDefault(__webpack_require__("W8MJ"));
 
 var _defineProperty2 = _interopRequireDefault(__webpack_require__("lSNA"));
 
-var _luxon = __webpack_require__("ExVU");
-
 var _cozyClient = __webpack_require__("SH7X");
 
+var _doctypes = __webpack_require__("D2hQ");
+
 var _fluid = __webpack_require__("5Wkc");
 
 var _timeStep = __webpack_require__("cKQ8");
 
-var _consumptionFormatter = _interopRequireDefault(__webpack_require__("wRZ5"));
+var _luxon = __webpack_require__("ExVU");
 
-var _queryRunner = _interopRequireDefault(__webpack_require__("RXTL"));
+var _consumptionFormatter = _interopRequireDefault(__webpack_require__("wRZ5"));
 
 var _consumptionValidator = _interopRequireDefault(__webpack_require__("XGSU"));
 
 var _converter = _interopRequireDefault(__webpack_require__("LXmx"));
 
-var _doctypes = __webpack_require__("D2hQ");
+var _queryRunner = _interopRequireDefault(__webpack_require__("RXTL"));
 
 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; } } }; }
 
@@ -8164,7 +8164,7 @@ var ConsumptionDataManager = /*#__PURE__*/function () {
   }, {
     key: "calculatePerformanceIndicatorVariationPercentage",
     value: function calculatePerformanceIndicatorVariationPercentage(dataSum, comparisonDataSum) {
-      return 1 - dataSum / comparisonDataSum;
+      return dataSum / comparisonDataSum - 1;
     }
   }, {
     key: "fetchSingleFluidGraphData",
diff --git a/index.html b/index.html
index 31dd4cf1cca3048b5cae7176e8de15400acfddcc..7922b9e3e709cd26d28835b3c9c1f6c82f28a89d 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.08cea87f518c2cc2790a.js"></script><script src="app/ecolyo.d76dc88d3641f867c720.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.08cea87f518c2cc2790a.js"></script><script src="app/ecolyo.2c1153d2d060def29500.js"></script></div></body></html>
\ No newline at end of file
diff --git a/services/aggregatorUsageEvents/ecolyo.js b/services/aggregatorUsageEvents/ecolyo.js
index 52e00c5be841f2cb0ba3192be22975ff45711513..c39eab08d209bbbaaa71704c5e28b838171222a5 100644
--- a/services/aggregatorUsageEvents/ecolyo.js
+++ b/services/aggregatorUsageEvents/ecolyo.js
@@ -78788,23 +78788,23 @@ exports.default = void 0;
 
 var _defineProperty2 = _interopRequireDefault(__webpack_require__(2));
 
-var _luxon = __webpack_require__(585);
-
 var _cozyClient = __webpack_require__(39);
 
+var _doctypes = __webpack_require__(553);
+
 var _fluid = __webpack_require__(611);
 
 var _timeStep = __webpack_require__(612);
 
-var _consumptionFormatter = _interopRequireDefault(__webpack_require__(613));
+var _luxon = __webpack_require__(585);
 
-var _queryRunner = _interopRequireDefault(__webpack_require__(619));
+var _consumptionFormatter = _interopRequireDefault(__webpack_require__(613));
 
-var _consumptionValidator = _interopRequireDefault(__webpack_require__(621));
+var _consumptionValidator = _interopRequireDefault(__webpack_require__(619));
 
-var _converter = _interopRequireDefault(__webpack_require__(622));
+var _converter = _interopRequireDefault(__webpack_require__(620));
 
-var _doctypes = __webpack_require__(553);
+var _queryRunner = _interopRequireDefault(__webpack_require__(621));
 
 class ConsumptionDataManager {
   constructor(_client) {
@@ -78933,7 +78933,7 @@ class ConsumptionDataManager {
   }
 
   calculatePerformanceIndicatorVariationPercentage(dataSum, comparisonDataSum) {
-    return 1 - dataSum / comparisonDataSum;
+    return dataSum / comparisonDataSum - 1;
   }
 
   async fetchSingleFluidGraphData(timePeriod, timeStep, fluidType, compareTimePeriod) {
@@ -80101,6 +80101,125 @@ exports.getActualAnalysisDate = getActualAnalysisDate;
 "use strict";
 
 
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+
+var _fluid = __webpack_require__(611);
+
+var _timeStep = __webpack_require__(612);
+
+var _luxon = __webpack_require__(585);
+
+class ConsumptionValidatorService {
+  ValidateGetGraphData(timePeriod, timeStep, fluidTypes, compareTimePeriod) {
+    if (fluidTypes.length === 0) return false;
+    if (!this.ValidateTimePeriod(timePeriod)) return false;
+
+    for (const fluidType of fluidTypes) {
+      if (timeStep === _timeStep.TimeStep.HALF_AN_HOUR && fluidType !== _fluid.FluidType.ELECTRICITY) return false;
+    }
+
+    if (!this.ValidateTimePeriodLength(timePeriod, timeStep)) return false;
+
+    if (compareTimePeriod) {
+      if (!this.ValidateTimePeriod(compareTimePeriod)) return false;
+      if (!this.ValidateTimePeriodLength(compareTimePeriod, timeStep)) return false;
+    }
+
+    return true;
+  }
+
+  ValidateTimePeriodLength(timePeriod, timeStep) {
+    const interval = _luxon.Interval.fromDateTimes(timePeriod.startDate, timePeriod.endDate);
+
+    if (timeStep == _timeStep.TimeStep.HALF_AN_HOUR && interval.length('hour') > 24) return false;
+    if (timeStep == _timeStep.TimeStep.WEEK && interval.length('day') > 7) return false;
+    if (timeStep == _timeStep.TimeStep.DAY && interval.length('day') > 36) return false;
+    if (timeStep == _timeStep.TimeStep.MONTH && interval.length('month') > 12) return false;
+    if (timeStep == _timeStep.TimeStep.YEAR && interval.length('year') > 10) return false;
+    return true;
+  }
+
+  ValidateTimePeriod(timePeriod) {
+    return timePeriod.endDate >= timePeriod.startDate;
+  }
+
+}
+
+exports.default = ConsumptionValidatorService;
+
+/***/ }),
+/* 620 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _interopRequireDefault = __webpack_require__(1);
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+
+var _defineProperty2 = _interopRequireDefault(__webpack_require__(2));
+
+var _fluid = __webpack_require__(611);
+
+var _fluidConfig = _interopRequireDefault(__webpack_require__(616));
+
+class ConverterService {
+  constructor() {
+    (0, _defineProperty2.default)(this, "_fluidConfig", void 0);
+    this._fluidConfig = new _fluidConfig.default().getFluidConfig();
+  }
+
+  LoadToEuro(load, fluidType, price) {
+    let convertedLoad; // If Multifluid do not apply coeff because it doesn't exist
+
+    if (fluidType === _fluid.FluidType.MULTIFLUID) {
+      convertedLoad = load;
+    } else {
+      convertedLoad = this.applyPrice(this._fluidConfig[fluidType], load, price);
+    } // Prevent round 0 case when the actual value is not 0
+
+
+    if (convertedLoad > 0 && convertedLoad < 0.01) {
+      convertedLoad = 0.01;
+    }
+
+    return convertedLoad;
+  }
+  /**
+   * Return calculated price
+   * @param {FluidConfig} fluidConfig - Fluid configuration
+   * @param {number} load - Load value
+   * @param {number} [price] - Price if exist
+   * @returns {number}
+   */
+
+
+  applyPrice(fluidConfig, load, price) {
+    if (price) {
+      return price;
+    } else {
+      return load * fluidConfig.coefficient;
+    }
+  }
+
+}
+
+exports.default = ConverterService;
+
+/***/ }),
+/* 621 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
 var _interopRequireDefault = __webpack_require__(1);
 
 Object.defineProperty(exports, "__esModule", {
@@ -80120,7 +80239,7 @@ var _fluid = __webpack_require__(611);
 
 var _timeStep = __webpack_require__(612);
 
-var _logger = _interopRequireDefault(__webpack_require__(620));
+var _logger = _interopRequireDefault(__webpack_require__(622));
 
 var _dataload = __webpack_require__(614);
 
@@ -80481,7 +80600,7 @@ class QueryRunner {
 exports.default = QueryRunner;
 
 /***/ }),
-/* 620 */
+/* 622 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
@@ -80499,125 +80618,6 @@ const log = minilog('ecolyo')
 /* harmony default export */ __webpack_exports__["default"] = (log);
 
 
-/***/ }),
-/* 621 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = void 0;
-
-var _fluid = __webpack_require__(611);
-
-var _timeStep = __webpack_require__(612);
-
-var _luxon = __webpack_require__(585);
-
-class ConsumptionValidatorService {
-  ValidateGetGraphData(timePeriod, timeStep, fluidTypes, compareTimePeriod) {
-    if (fluidTypes.length === 0) return false;
-    if (!this.ValidateTimePeriod(timePeriod)) return false;
-
-    for (const fluidType of fluidTypes) {
-      if (timeStep === _timeStep.TimeStep.HALF_AN_HOUR && fluidType !== _fluid.FluidType.ELECTRICITY) return false;
-    }
-
-    if (!this.ValidateTimePeriodLength(timePeriod, timeStep)) return false;
-
-    if (compareTimePeriod) {
-      if (!this.ValidateTimePeriod(compareTimePeriod)) return false;
-      if (!this.ValidateTimePeriodLength(compareTimePeriod, timeStep)) return false;
-    }
-
-    return true;
-  }
-
-  ValidateTimePeriodLength(timePeriod, timeStep) {
-    const interval = _luxon.Interval.fromDateTimes(timePeriod.startDate, timePeriod.endDate);
-
-    if (timeStep == _timeStep.TimeStep.HALF_AN_HOUR && interval.length('hour') > 24) return false;
-    if (timeStep == _timeStep.TimeStep.WEEK && interval.length('day') > 7) return false;
-    if (timeStep == _timeStep.TimeStep.DAY && interval.length('day') > 36) return false;
-    if (timeStep == _timeStep.TimeStep.MONTH && interval.length('month') > 12) return false;
-    if (timeStep == _timeStep.TimeStep.YEAR && interval.length('year') > 10) return false;
-    return true;
-  }
-
-  ValidateTimePeriod(timePeriod) {
-    return timePeriod.endDate >= timePeriod.startDate;
-  }
-
-}
-
-exports.default = ConsumptionValidatorService;
-
-/***/ }),
-/* 622 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var _interopRequireDefault = __webpack_require__(1);
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = void 0;
-
-var _defineProperty2 = _interopRequireDefault(__webpack_require__(2));
-
-var _fluid = __webpack_require__(611);
-
-var _fluidConfig = _interopRequireDefault(__webpack_require__(616));
-
-class ConverterService {
-  constructor() {
-    (0, _defineProperty2.default)(this, "_fluidConfig", void 0);
-    this._fluidConfig = new _fluidConfig.default().getFluidConfig();
-  }
-
-  LoadToEuro(load, fluidType, price) {
-    let convertedLoad; // If Multifluid do not apply coeff because it doesn't exist
-
-    if (fluidType === _fluid.FluidType.MULTIFLUID) {
-      convertedLoad = load;
-    } else {
-      convertedLoad = this.applyPrice(this._fluidConfig[fluidType], load, price);
-    } // Prevent round 0 case when the actual value is not 0
-
-
-    if (convertedLoad > 0 && convertedLoad < 0.01) {
-      convertedLoad = 0.01;
-    }
-
-    return convertedLoad;
-  }
-  /**
-   * Return calculated price
-   * @param {FluidConfig} fluidConfig - Fluid configuration
-   * @param {number} load - Load value
-   * @param {number} [price] - Price if exist
-   * @returns {number}
-   */
-
-
-  applyPrice(fluidConfig, load, price) {
-    if (price) {
-      return price;
-    } else {
-      return load * fluidConfig.coefficient;
-    }
-  }
-
-}
-
-exports.default = ConverterService;
-
 /***/ }),
 /* 623 */
 /***/ (function(module, exports, __webpack_require__) {
@@ -97750,7 +97750,7 @@ Object.defineProperty(exports, "__esModule", {
 });
 exports.default = void 0;
 
-var _converter = _interopRequireDefault(__webpack_require__(622));
+var _converter = _interopRequireDefault(__webpack_require__(620));
 
 class PerformanceIndicatorService {
   aggregatePerformanceIndicators(performanceIndicators) {
@@ -97801,7 +97801,7 @@ class PerformanceIndicatorService {
     const agreggatedPerformanceIndicator = {
       value: currentValue,
       compareValue: compareValue,
-      percentageVariation: 1 - currentValue / compareValue
+      percentageVariation: currentValue / compareValue - 1
     };
     return agreggatedPerformanceIndicator;
   }
@@ -97872,7 +97872,7 @@ var _lodash = __webpack_require__(479);
 
 var _utils = __webpack_require__(848);
 
-var _logger = _interopRequireDefault(__webpack_require__(620));
+var _logger = _interopRequireDefault(__webpack_require__(622));
 
 function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
 
@@ -99454,7 +99454,7 @@ var _luxon = __webpack_require__(585);
 
 var _profileTypeData = _interopRequireDefault(__webpack_require__(1034));
 
-var _logger = _interopRequireDefault(__webpack_require__(620));
+var _logger = _interopRequireDefault(__webpack_require__(622));
 
 function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
 
diff --git a/services/consumptionAlert/ecolyo.js b/services/consumptionAlert/ecolyo.js
index 1fdd07358fc1566f3d6018b9d02b57c5adb538f0..59d6b22cd30123aa8bdfc84af54448568470de62 100644
--- a/services/consumptionAlert/ecolyo.js
+++ b/services/consumptionAlert/ecolyo.js
@@ -77418,23 +77418,23 @@ exports.default = void 0;
 
 var _defineProperty2 = _interopRequireDefault(__webpack_require__(2));
 
-var _luxon = __webpack_require__(585);
-
 var _cozyClient = __webpack_require__(39);
 
+var _doctypes = __webpack_require__(553);
+
 var _fluid = __webpack_require__(611);
 
 var _timeStep = __webpack_require__(612);
 
-var _consumptionFormatter = _interopRequireDefault(__webpack_require__(613));
+var _luxon = __webpack_require__(585);
 
-var _queryRunner = _interopRequireDefault(__webpack_require__(619));
+var _consumptionFormatter = _interopRequireDefault(__webpack_require__(613));
 
-var _consumptionValidator = _interopRequireDefault(__webpack_require__(621));
+var _consumptionValidator = _interopRequireDefault(__webpack_require__(619));
 
-var _converter = _interopRequireDefault(__webpack_require__(622));
+var _converter = _interopRequireDefault(__webpack_require__(620));
 
-var _doctypes = __webpack_require__(553);
+var _queryRunner = _interopRequireDefault(__webpack_require__(621));
 
 class ConsumptionDataManager {
   constructor(_client) {
@@ -77563,7 +77563,7 @@ class ConsumptionDataManager {
   }
 
   calculatePerformanceIndicatorVariationPercentage(dataSum, comparisonDataSum) {
-    return 1 - dataSum / comparisonDataSum;
+    return dataSum / comparisonDataSum - 1;
   }
 
   async fetchSingleFluidGraphData(timePeriod, timeStep, fluidType, compareTimePeriod) {
@@ -78731,6 +78731,125 @@ exports.getActualAnalysisDate = getActualAnalysisDate;
 "use strict";
 
 
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+
+var _fluid = __webpack_require__(611);
+
+var _timeStep = __webpack_require__(612);
+
+var _luxon = __webpack_require__(585);
+
+class ConsumptionValidatorService {
+  ValidateGetGraphData(timePeriod, timeStep, fluidTypes, compareTimePeriod) {
+    if (fluidTypes.length === 0) return false;
+    if (!this.ValidateTimePeriod(timePeriod)) return false;
+
+    for (const fluidType of fluidTypes) {
+      if (timeStep === _timeStep.TimeStep.HALF_AN_HOUR && fluidType !== _fluid.FluidType.ELECTRICITY) return false;
+    }
+
+    if (!this.ValidateTimePeriodLength(timePeriod, timeStep)) return false;
+
+    if (compareTimePeriod) {
+      if (!this.ValidateTimePeriod(compareTimePeriod)) return false;
+      if (!this.ValidateTimePeriodLength(compareTimePeriod, timeStep)) return false;
+    }
+
+    return true;
+  }
+
+  ValidateTimePeriodLength(timePeriod, timeStep) {
+    const interval = _luxon.Interval.fromDateTimes(timePeriod.startDate, timePeriod.endDate);
+
+    if (timeStep == _timeStep.TimeStep.HALF_AN_HOUR && interval.length('hour') > 24) return false;
+    if (timeStep == _timeStep.TimeStep.WEEK && interval.length('day') > 7) return false;
+    if (timeStep == _timeStep.TimeStep.DAY && interval.length('day') > 36) return false;
+    if (timeStep == _timeStep.TimeStep.MONTH && interval.length('month') > 12) return false;
+    if (timeStep == _timeStep.TimeStep.YEAR && interval.length('year') > 10) return false;
+    return true;
+  }
+
+  ValidateTimePeriod(timePeriod) {
+    return timePeriod.endDate >= timePeriod.startDate;
+  }
+
+}
+
+exports.default = ConsumptionValidatorService;
+
+/***/ }),
+/* 620 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _interopRequireDefault = __webpack_require__(1);
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+
+var _defineProperty2 = _interopRequireDefault(__webpack_require__(2));
+
+var _fluid = __webpack_require__(611);
+
+var _fluidConfig = _interopRequireDefault(__webpack_require__(616));
+
+class ConverterService {
+  constructor() {
+    (0, _defineProperty2.default)(this, "_fluidConfig", void 0);
+    this._fluidConfig = new _fluidConfig.default().getFluidConfig();
+  }
+
+  LoadToEuro(load, fluidType, price) {
+    let convertedLoad; // If Multifluid do not apply coeff because it doesn't exist
+
+    if (fluidType === _fluid.FluidType.MULTIFLUID) {
+      convertedLoad = load;
+    } else {
+      convertedLoad = this.applyPrice(this._fluidConfig[fluidType], load, price);
+    } // Prevent round 0 case when the actual value is not 0
+
+
+    if (convertedLoad > 0 && convertedLoad < 0.01) {
+      convertedLoad = 0.01;
+    }
+
+    return convertedLoad;
+  }
+  /**
+   * Return calculated price
+   * @param {FluidConfig} fluidConfig - Fluid configuration
+   * @param {number} load - Load value
+   * @param {number} [price] - Price if exist
+   * @returns {number}
+   */
+
+
+  applyPrice(fluidConfig, load, price) {
+    if (price) {
+      return price;
+    } else {
+      return load * fluidConfig.coefficient;
+    }
+  }
+
+}
+
+exports.default = ConverterService;
+
+/***/ }),
+/* 621 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
 var _interopRequireDefault = __webpack_require__(1);
 
 Object.defineProperty(exports, "__esModule", {
@@ -78750,7 +78869,7 @@ var _fluid = __webpack_require__(611);
 
 var _timeStep = __webpack_require__(612);
 
-var _logger = _interopRequireDefault(__webpack_require__(620));
+var _logger = _interopRequireDefault(__webpack_require__(622));
 
 var _dataload = __webpack_require__(614);
 
@@ -79111,7 +79230,7 @@ class QueryRunner {
 exports.default = QueryRunner;
 
 /***/ }),
-/* 620 */
+/* 622 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
@@ -79129,125 +79248,6 @@ const log = minilog('ecolyo')
 /* harmony default export */ __webpack_exports__["default"] = (log);
 
 
-/***/ }),
-/* 621 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = void 0;
-
-var _fluid = __webpack_require__(611);
-
-var _timeStep = __webpack_require__(612);
-
-var _luxon = __webpack_require__(585);
-
-class ConsumptionValidatorService {
-  ValidateGetGraphData(timePeriod, timeStep, fluidTypes, compareTimePeriod) {
-    if (fluidTypes.length === 0) return false;
-    if (!this.ValidateTimePeriod(timePeriod)) return false;
-
-    for (const fluidType of fluidTypes) {
-      if (timeStep === _timeStep.TimeStep.HALF_AN_HOUR && fluidType !== _fluid.FluidType.ELECTRICITY) return false;
-    }
-
-    if (!this.ValidateTimePeriodLength(timePeriod, timeStep)) return false;
-
-    if (compareTimePeriod) {
-      if (!this.ValidateTimePeriod(compareTimePeriod)) return false;
-      if (!this.ValidateTimePeriodLength(compareTimePeriod, timeStep)) return false;
-    }
-
-    return true;
-  }
-
-  ValidateTimePeriodLength(timePeriod, timeStep) {
-    const interval = _luxon.Interval.fromDateTimes(timePeriod.startDate, timePeriod.endDate);
-
-    if (timeStep == _timeStep.TimeStep.HALF_AN_HOUR && interval.length('hour') > 24) return false;
-    if (timeStep == _timeStep.TimeStep.WEEK && interval.length('day') > 7) return false;
-    if (timeStep == _timeStep.TimeStep.DAY && interval.length('day') > 36) return false;
-    if (timeStep == _timeStep.TimeStep.MONTH && interval.length('month') > 12) return false;
-    if (timeStep == _timeStep.TimeStep.YEAR && interval.length('year') > 10) return false;
-    return true;
-  }
-
-  ValidateTimePeriod(timePeriod) {
-    return timePeriod.endDate >= timePeriod.startDate;
-  }
-
-}
-
-exports.default = ConsumptionValidatorService;
-
-/***/ }),
-/* 622 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var _interopRequireDefault = __webpack_require__(1);
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = void 0;
-
-var _defineProperty2 = _interopRequireDefault(__webpack_require__(2));
-
-var _fluid = __webpack_require__(611);
-
-var _fluidConfig = _interopRequireDefault(__webpack_require__(616));
-
-class ConverterService {
-  constructor() {
-    (0, _defineProperty2.default)(this, "_fluidConfig", void 0);
-    this._fluidConfig = new _fluidConfig.default().getFluidConfig();
-  }
-
-  LoadToEuro(load, fluidType, price) {
-    let convertedLoad; // If Multifluid do not apply coeff because it doesn't exist
-
-    if (fluidType === _fluid.FluidType.MULTIFLUID) {
-      convertedLoad = load;
-    } else {
-      convertedLoad = this.applyPrice(this._fluidConfig[fluidType], load, price);
-    } // Prevent round 0 case when the actual value is not 0
-
-
-    if (convertedLoad > 0 && convertedLoad < 0.01) {
-      convertedLoad = 0.01;
-    }
-
-    return convertedLoad;
-  }
-  /**
-   * Return calculated price
-   * @param {FluidConfig} fluidConfig - Fluid configuration
-   * @param {number} load - Load value
-   * @param {number} [price] - Price if exist
-   * @returns {number}
-   */
-
-
-  applyPrice(fluidConfig, load, price) {
-    if (price) {
-      return price;
-    } else {
-      return load * fluidConfig.coefficient;
-    }
-  }
-
-}
-
-exports.default = ConverterService;
-
 /***/ }),
 /* 623 */,
 /* 624 */,
diff --git a/services/enedisHalfHourMonthlyAnalysis/ecolyo.js b/services/enedisHalfHourMonthlyAnalysis/ecolyo.js
index 49ef4764f59d088a142d4cf83c0ba002a77c2977..86f7be98392897d98d5fc2f52fcfbfb89495f032 100644
--- a/services/enedisHalfHourMonthlyAnalysis/ecolyo.js
+++ b/services/enedisHalfHourMonthlyAnalysis/ecolyo.js
@@ -77328,23 +77328,23 @@ exports.default = void 0;
 
 var _defineProperty2 = _interopRequireDefault(__webpack_require__(2));
 
-var _luxon = __webpack_require__(585);
-
 var _cozyClient = __webpack_require__(39);
 
+var _doctypes = __webpack_require__(553);
+
 var _fluid = __webpack_require__(611);
 
 var _timeStep = __webpack_require__(612);
 
-var _consumptionFormatter = _interopRequireDefault(__webpack_require__(613));
+var _luxon = __webpack_require__(585);
 
-var _queryRunner = _interopRequireDefault(__webpack_require__(619));
+var _consumptionFormatter = _interopRequireDefault(__webpack_require__(613));
 
-var _consumptionValidator = _interopRequireDefault(__webpack_require__(621));
+var _consumptionValidator = _interopRequireDefault(__webpack_require__(619));
 
-var _converter = _interopRequireDefault(__webpack_require__(622));
+var _converter = _interopRequireDefault(__webpack_require__(620));
 
-var _doctypes = __webpack_require__(553);
+var _queryRunner = _interopRequireDefault(__webpack_require__(621));
 
 class ConsumptionDataManager {
   constructor(_client) {
@@ -77473,7 +77473,7 @@ class ConsumptionDataManager {
   }
 
   calculatePerformanceIndicatorVariationPercentage(dataSum, comparisonDataSum) {
-    return 1 - dataSum / comparisonDataSum;
+    return dataSum / comparisonDataSum - 1;
   }
 
   async fetchSingleFluidGraphData(timePeriod, timeStep, fluidType, compareTimePeriod) {
@@ -78641,6 +78641,125 @@ exports.getActualAnalysisDate = getActualAnalysisDate;
 "use strict";
 
 
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+
+var _fluid = __webpack_require__(611);
+
+var _timeStep = __webpack_require__(612);
+
+var _luxon = __webpack_require__(585);
+
+class ConsumptionValidatorService {
+  ValidateGetGraphData(timePeriod, timeStep, fluidTypes, compareTimePeriod) {
+    if (fluidTypes.length === 0) return false;
+    if (!this.ValidateTimePeriod(timePeriod)) return false;
+
+    for (const fluidType of fluidTypes) {
+      if (timeStep === _timeStep.TimeStep.HALF_AN_HOUR && fluidType !== _fluid.FluidType.ELECTRICITY) return false;
+    }
+
+    if (!this.ValidateTimePeriodLength(timePeriod, timeStep)) return false;
+
+    if (compareTimePeriod) {
+      if (!this.ValidateTimePeriod(compareTimePeriod)) return false;
+      if (!this.ValidateTimePeriodLength(compareTimePeriod, timeStep)) return false;
+    }
+
+    return true;
+  }
+
+  ValidateTimePeriodLength(timePeriod, timeStep) {
+    const interval = _luxon.Interval.fromDateTimes(timePeriod.startDate, timePeriod.endDate);
+
+    if (timeStep == _timeStep.TimeStep.HALF_AN_HOUR && interval.length('hour') > 24) return false;
+    if (timeStep == _timeStep.TimeStep.WEEK && interval.length('day') > 7) return false;
+    if (timeStep == _timeStep.TimeStep.DAY && interval.length('day') > 36) return false;
+    if (timeStep == _timeStep.TimeStep.MONTH && interval.length('month') > 12) return false;
+    if (timeStep == _timeStep.TimeStep.YEAR && interval.length('year') > 10) return false;
+    return true;
+  }
+
+  ValidateTimePeriod(timePeriod) {
+    return timePeriod.endDate >= timePeriod.startDate;
+  }
+
+}
+
+exports.default = ConsumptionValidatorService;
+
+/***/ }),
+/* 620 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _interopRequireDefault = __webpack_require__(1);
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+
+var _defineProperty2 = _interopRequireDefault(__webpack_require__(2));
+
+var _fluid = __webpack_require__(611);
+
+var _fluidConfig = _interopRequireDefault(__webpack_require__(616));
+
+class ConverterService {
+  constructor() {
+    (0, _defineProperty2.default)(this, "_fluidConfig", void 0);
+    this._fluidConfig = new _fluidConfig.default().getFluidConfig();
+  }
+
+  LoadToEuro(load, fluidType, price) {
+    let convertedLoad; // If Multifluid do not apply coeff because it doesn't exist
+
+    if (fluidType === _fluid.FluidType.MULTIFLUID) {
+      convertedLoad = load;
+    } else {
+      convertedLoad = this.applyPrice(this._fluidConfig[fluidType], load, price);
+    } // Prevent round 0 case when the actual value is not 0
+
+
+    if (convertedLoad > 0 && convertedLoad < 0.01) {
+      convertedLoad = 0.01;
+    }
+
+    return convertedLoad;
+  }
+  /**
+   * Return calculated price
+   * @param {FluidConfig} fluidConfig - Fluid configuration
+   * @param {number} load - Load value
+   * @param {number} [price] - Price if exist
+   * @returns {number}
+   */
+
+
+  applyPrice(fluidConfig, load, price) {
+    if (price) {
+      return price;
+    } else {
+      return load * fluidConfig.coefficient;
+    }
+  }
+
+}
+
+exports.default = ConverterService;
+
+/***/ }),
+/* 621 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
 var _interopRequireDefault = __webpack_require__(1);
 
 Object.defineProperty(exports, "__esModule", {
@@ -78660,7 +78779,7 @@ var _fluid = __webpack_require__(611);
 
 var _timeStep = __webpack_require__(612);
 
-var _logger = _interopRequireDefault(__webpack_require__(620));
+var _logger = _interopRequireDefault(__webpack_require__(622));
 
 var _dataload = __webpack_require__(614);
 
@@ -79021,7 +79140,7 @@ class QueryRunner {
 exports.default = QueryRunner;
 
 /***/ }),
-/* 620 */
+/* 622 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
@@ -79039,125 +79158,6 @@ const log = minilog('ecolyo')
 /* harmony default export */ __webpack_exports__["default"] = (log);
 
 
-/***/ }),
-/* 621 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = void 0;
-
-var _fluid = __webpack_require__(611);
-
-var _timeStep = __webpack_require__(612);
-
-var _luxon = __webpack_require__(585);
-
-class ConsumptionValidatorService {
-  ValidateGetGraphData(timePeriod, timeStep, fluidTypes, compareTimePeriod) {
-    if (fluidTypes.length === 0) return false;
-    if (!this.ValidateTimePeriod(timePeriod)) return false;
-
-    for (const fluidType of fluidTypes) {
-      if (timeStep === _timeStep.TimeStep.HALF_AN_HOUR && fluidType !== _fluid.FluidType.ELECTRICITY) return false;
-    }
-
-    if (!this.ValidateTimePeriodLength(timePeriod, timeStep)) return false;
-
-    if (compareTimePeriod) {
-      if (!this.ValidateTimePeriod(compareTimePeriod)) return false;
-      if (!this.ValidateTimePeriodLength(compareTimePeriod, timeStep)) return false;
-    }
-
-    return true;
-  }
-
-  ValidateTimePeriodLength(timePeriod, timeStep) {
-    const interval = _luxon.Interval.fromDateTimes(timePeriod.startDate, timePeriod.endDate);
-
-    if (timeStep == _timeStep.TimeStep.HALF_AN_HOUR && interval.length('hour') > 24) return false;
-    if (timeStep == _timeStep.TimeStep.WEEK && interval.length('day') > 7) return false;
-    if (timeStep == _timeStep.TimeStep.DAY && interval.length('day') > 36) return false;
-    if (timeStep == _timeStep.TimeStep.MONTH && interval.length('month') > 12) return false;
-    if (timeStep == _timeStep.TimeStep.YEAR && interval.length('year') > 10) return false;
-    return true;
-  }
-
-  ValidateTimePeriod(timePeriod) {
-    return timePeriod.endDate >= timePeriod.startDate;
-  }
-
-}
-
-exports.default = ConsumptionValidatorService;
-
-/***/ }),
-/* 622 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var _interopRequireDefault = __webpack_require__(1);
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = void 0;
-
-var _defineProperty2 = _interopRequireDefault(__webpack_require__(2));
-
-var _fluid = __webpack_require__(611);
-
-var _fluidConfig = _interopRequireDefault(__webpack_require__(616));
-
-class ConverterService {
-  constructor() {
-    (0, _defineProperty2.default)(this, "_fluidConfig", void 0);
-    this._fluidConfig = new _fluidConfig.default().getFluidConfig();
-  }
-
-  LoadToEuro(load, fluidType, price) {
-    let convertedLoad; // If Multifluid do not apply coeff because it doesn't exist
-
-    if (fluidType === _fluid.FluidType.MULTIFLUID) {
-      convertedLoad = load;
-    } else {
-      convertedLoad = this.applyPrice(this._fluidConfig[fluidType], load, price);
-    } // Prevent round 0 case when the actual value is not 0
-
-
-    if (convertedLoad > 0 && convertedLoad < 0.01) {
-      convertedLoad = 0.01;
-    }
-
-    return convertedLoad;
-  }
-  /**
-   * Return calculated price
-   * @param {FluidConfig} fluidConfig - Fluid configuration
-   * @param {number} load - Load value
-   * @param {number} [price] - Price if exist
-   * @returns {number}
-   */
-
-
-  applyPrice(fluidConfig, load, price) {
-    if (price) {
-      return price;
-    } else {
-      return load * fluidConfig.coefficient;
-    }
-  }
-
-}
-
-exports.default = ConverterService;
-
 /***/ }),
 /* 623 */,
 /* 624 */,
diff --git a/services/fluidsPrices/ecolyo.js b/services/fluidsPrices/ecolyo.js
index 6369e39508548a39d4c74280c7e835abb705ea59..24e5f21c76a4f054c64b09a5ebc366964d916e35 100644
--- a/services/fluidsPrices/ecolyo.js
+++ b/services/fluidsPrices/ecolyo.js
@@ -77328,23 +77328,23 @@ exports.default = void 0;
 
 var _defineProperty2 = _interopRequireDefault(__webpack_require__(2));
 
-var _luxon = __webpack_require__(585);
-
 var _cozyClient = __webpack_require__(39);
 
+var _doctypes = __webpack_require__(553);
+
 var _fluid = __webpack_require__(611);
 
 var _timeStep = __webpack_require__(612);
 
-var _consumptionFormatter = _interopRequireDefault(__webpack_require__(613));
+var _luxon = __webpack_require__(585);
 
-var _queryRunner = _interopRequireDefault(__webpack_require__(619));
+var _consumptionFormatter = _interopRequireDefault(__webpack_require__(613));
 
-var _consumptionValidator = _interopRequireDefault(__webpack_require__(621));
+var _consumptionValidator = _interopRequireDefault(__webpack_require__(619));
 
-var _converter = _interopRequireDefault(__webpack_require__(622));
+var _converter = _interopRequireDefault(__webpack_require__(620));
 
-var _doctypes = __webpack_require__(553);
+var _queryRunner = _interopRequireDefault(__webpack_require__(621));
 
 class ConsumptionDataManager {
   constructor(_client) {
@@ -77473,7 +77473,7 @@ class ConsumptionDataManager {
   }
 
   calculatePerformanceIndicatorVariationPercentage(dataSum, comparisonDataSum) {
-    return 1 - dataSum / comparisonDataSum;
+    return dataSum / comparisonDataSum - 1;
   }
 
   async fetchSingleFluidGraphData(timePeriod, timeStep, fluidType, compareTimePeriod) {
@@ -78641,6 +78641,125 @@ exports.getActualAnalysisDate = getActualAnalysisDate;
 "use strict";
 
 
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+
+var _fluid = __webpack_require__(611);
+
+var _timeStep = __webpack_require__(612);
+
+var _luxon = __webpack_require__(585);
+
+class ConsumptionValidatorService {
+  ValidateGetGraphData(timePeriod, timeStep, fluidTypes, compareTimePeriod) {
+    if (fluidTypes.length === 0) return false;
+    if (!this.ValidateTimePeriod(timePeriod)) return false;
+
+    for (const fluidType of fluidTypes) {
+      if (timeStep === _timeStep.TimeStep.HALF_AN_HOUR && fluidType !== _fluid.FluidType.ELECTRICITY) return false;
+    }
+
+    if (!this.ValidateTimePeriodLength(timePeriod, timeStep)) return false;
+
+    if (compareTimePeriod) {
+      if (!this.ValidateTimePeriod(compareTimePeriod)) return false;
+      if (!this.ValidateTimePeriodLength(compareTimePeriod, timeStep)) return false;
+    }
+
+    return true;
+  }
+
+  ValidateTimePeriodLength(timePeriod, timeStep) {
+    const interval = _luxon.Interval.fromDateTimes(timePeriod.startDate, timePeriod.endDate);
+
+    if (timeStep == _timeStep.TimeStep.HALF_AN_HOUR && interval.length('hour') > 24) return false;
+    if (timeStep == _timeStep.TimeStep.WEEK && interval.length('day') > 7) return false;
+    if (timeStep == _timeStep.TimeStep.DAY && interval.length('day') > 36) return false;
+    if (timeStep == _timeStep.TimeStep.MONTH && interval.length('month') > 12) return false;
+    if (timeStep == _timeStep.TimeStep.YEAR && interval.length('year') > 10) return false;
+    return true;
+  }
+
+  ValidateTimePeriod(timePeriod) {
+    return timePeriod.endDate >= timePeriod.startDate;
+  }
+
+}
+
+exports.default = ConsumptionValidatorService;
+
+/***/ }),
+/* 620 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _interopRequireDefault = __webpack_require__(1);
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+
+var _defineProperty2 = _interopRequireDefault(__webpack_require__(2));
+
+var _fluid = __webpack_require__(611);
+
+var _fluidConfig = _interopRequireDefault(__webpack_require__(616));
+
+class ConverterService {
+  constructor() {
+    (0, _defineProperty2.default)(this, "_fluidConfig", void 0);
+    this._fluidConfig = new _fluidConfig.default().getFluidConfig();
+  }
+
+  LoadToEuro(load, fluidType, price) {
+    let convertedLoad; // If Multifluid do not apply coeff because it doesn't exist
+
+    if (fluidType === _fluid.FluidType.MULTIFLUID) {
+      convertedLoad = load;
+    } else {
+      convertedLoad = this.applyPrice(this._fluidConfig[fluidType], load, price);
+    } // Prevent round 0 case when the actual value is not 0
+
+
+    if (convertedLoad > 0 && convertedLoad < 0.01) {
+      convertedLoad = 0.01;
+    }
+
+    return convertedLoad;
+  }
+  /**
+   * Return calculated price
+   * @param {FluidConfig} fluidConfig - Fluid configuration
+   * @param {number} load - Load value
+   * @param {number} [price] - Price if exist
+   * @returns {number}
+   */
+
+
+  applyPrice(fluidConfig, load, price) {
+    if (price) {
+      return price;
+    } else {
+      return load * fluidConfig.coefficient;
+    }
+  }
+
+}
+
+exports.default = ConverterService;
+
+/***/ }),
+/* 621 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
 var _interopRequireDefault = __webpack_require__(1);
 
 Object.defineProperty(exports, "__esModule", {
@@ -78660,7 +78779,7 @@ var _fluid = __webpack_require__(611);
 
 var _timeStep = __webpack_require__(612);
 
-var _logger = _interopRequireDefault(__webpack_require__(620));
+var _logger = _interopRequireDefault(__webpack_require__(622));
 
 var _dataload = __webpack_require__(614);
 
@@ -79021,7 +79140,7 @@ class QueryRunner {
 exports.default = QueryRunner;
 
 /***/ }),
-/* 620 */
+/* 622 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
@@ -79039,125 +79158,6 @@ const log = minilog('ecolyo')
 /* harmony default export */ __webpack_exports__["default"] = (log);
 
 
-/***/ }),
-/* 621 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = void 0;
-
-var _fluid = __webpack_require__(611);
-
-var _timeStep = __webpack_require__(612);
-
-var _luxon = __webpack_require__(585);
-
-class ConsumptionValidatorService {
-  ValidateGetGraphData(timePeriod, timeStep, fluidTypes, compareTimePeriod) {
-    if (fluidTypes.length === 0) return false;
-    if (!this.ValidateTimePeriod(timePeriod)) return false;
-
-    for (const fluidType of fluidTypes) {
-      if (timeStep === _timeStep.TimeStep.HALF_AN_HOUR && fluidType !== _fluid.FluidType.ELECTRICITY) return false;
-    }
-
-    if (!this.ValidateTimePeriodLength(timePeriod, timeStep)) return false;
-
-    if (compareTimePeriod) {
-      if (!this.ValidateTimePeriod(compareTimePeriod)) return false;
-      if (!this.ValidateTimePeriodLength(compareTimePeriod, timeStep)) return false;
-    }
-
-    return true;
-  }
-
-  ValidateTimePeriodLength(timePeriod, timeStep) {
-    const interval = _luxon.Interval.fromDateTimes(timePeriod.startDate, timePeriod.endDate);
-
-    if (timeStep == _timeStep.TimeStep.HALF_AN_HOUR && interval.length('hour') > 24) return false;
-    if (timeStep == _timeStep.TimeStep.WEEK && interval.length('day') > 7) return false;
-    if (timeStep == _timeStep.TimeStep.DAY && interval.length('day') > 36) return false;
-    if (timeStep == _timeStep.TimeStep.MONTH && interval.length('month') > 12) return false;
-    if (timeStep == _timeStep.TimeStep.YEAR && interval.length('year') > 10) return false;
-    return true;
-  }
-
-  ValidateTimePeriod(timePeriod) {
-    return timePeriod.endDate >= timePeriod.startDate;
-  }
-
-}
-
-exports.default = ConsumptionValidatorService;
-
-/***/ }),
-/* 622 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var _interopRequireDefault = __webpack_require__(1);
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = void 0;
-
-var _defineProperty2 = _interopRequireDefault(__webpack_require__(2));
-
-var _fluid = __webpack_require__(611);
-
-var _fluidConfig = _interopRequireDefault(__webpack_require__(616));
-
-class ConverterService {
-  constructor() {
-    (0, _defineProperty2.default)(this, "_fluidConfig", void 0);
-    this._fluidConfig = new _fluidConfig.default().getFluidConfig();
-  }
-
-  LoadToEuro(load, fluidType, price) {
-    let convertedLoad; // If Multifluid do not apply coeff because it doesn't exist
-
-    if (fluidType === _fluid.FluidType.MULTIFLUID) {
-      convertedLoad = load;
-    } else {
-      convertedLoad = this.applyPrice(this._fluidConfig[fluidType], load, price);
-    } // Prevent round 0 case when the actual value is not 0
-
-
-    if (convertedLoad > 0 && convertedLoad < 0.01) {
-      convertedLoad = 0.01;
-    }
-
-    return convertedLoad;
-  }
-  /**
-   * Return calculated price
-   * @param {FluidConfig} fluidConfig - Fluid configuration
-   * @param {number} load - Load value
-   * @param {number} [price] - Price if exist
-   * @returns {number}
-   */
-
-
-  applyPrice(fluidConfig, load, price) {
-    if (price) {
-      return price;
-    } else {
-      return load * fluidConfig.coefficient;
-    }
-  }
-
-}
-
-exports.default = ConverterService;
-
 /***/ }),
 /* 623 */,
 /* 624 */,
@@ -80088,7 +80088,7 @@ var _doctypes = __webpack_require__(553);
 
 var _fluid = __webpack_require__(611);
 
-var _queryRunner = _interopRequireDefault(__webpack_require__(619));
+var _queryRunner = _interopRequireDefault(__webpack_require__(621));
 
 var _environment = _interopRequireDefault(__webpack_require__(1016));
 
diff --git a/services/monthlyReportNotification/ecolyo.js b/services/monthlyReportNotification/ecolyo.js
index 76e8bff60446b275473c227532ec8ea13fade347..b1be34bb7a0165589b5396d4966d59deddf66606 100644
--- a/services/monthlyReportNotification/ecolyo.js
+++ b/services/monthlyReportNotification/ecolyo.js
@@ -77418,23 +77418,23 @@ exports.default = void 0;
 
 var _defineProperty2 = _interopRequireDefault(__webpack_require__(2));
 
-var _luxon = __webpack_require__(585);
-
 var _cozyClient = __webpack_require__(39);
 
+var _doctypes = __webpack_require__(553);
+
 var _fluid = __webpack_require__(611);
 
 var _timeStep = __webpack_require__(612);
 
-var _consumptionFormatter = _interopRequireDefault(__webpack_require__(613));
+var _luxon = __webpack_require__(585);
 
-var _queryRunner = _interopRequireDefault(__webpack_require__(619));
+var _consumptionFormatter = _interopRequireDefault(__webpack_require__(613));
 
-var _consumptionValidator = _interopRequireDefault(__webpack_require__(621));
+var _consumptionValidator = _interopRequireDefault(__webpack_require__(619));
 
-var _converter = _interopRequireDefault(__webpack_require__(622));
+var _converter = _interopRequireDefault(__webpack_require__(620));
 
-var _doctypes = __webpack_require__(553);
+var _queryRunner = _interopRequireDefault(__webpack_require__(621));
 
 class ConsumptionDataManager {
   constructor(_client) {
@@ -77563,7 +77563,7 @@ class ConsumptionDataManager {
   }
 
   calculatePerformanceIndicatorVariationPercentage(dataSum, comparisonDataSum) {
-    return 1 - dataSum / comparisonDataSum;
+    return dataSum / comparisonDataSum - 1;
   }
 
   async fetchSingleFluidGraphData(timePeriod, timeStep, fluidType, compareTimePeriod) {
@@ -78731,6 +78731,125 @@ exports.getActualAnalysisDate = getActualAnalysisDate;
 "use strict";
 
 
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+
+var _fluid = __webpack_require__(611);
+
+var _timeStep = __webpack_require__(612);
+
+var _luxon = __webpack_require__(585);
+
+class ConsumptionValidatorService {
+  ValidateGetGraphData(timePeriod, timeStep, fluidTypes, compareTimePeriod) {
+    if (fluidTypes.length === 0) return false;
+    if (!this.ValidateTimePeriod(timePeriod)) return false;
+
+    for (const fluidType of fluidTypes) {
+      if (timeStep === _timeStep.TimeStep.HALF_AN_HOUR && fluidType !== _fluid.FluidType.ELECTRICITY) return false;
+    }
+
+    if (!this.ValidateTimePeriodLength(timePeriod, timeStep)) return false;
+
+    if (compareTimePeriod) {
+      if (!this.ValidateTimePeriod(compareTimePeriod)) return false;
+      if (!this.ValidateTimePeriodLength(compareTimePeriod, timeStep)) return false;
+    }
+
+    return true;
+  }
+
+  ValidateTimePeriodLength(timePeriod, timeStep) {
+    const interval = _luxon.Interval.fromDateTimes(timePeriod.startDate, timePeriod.endDate);
+
+    if (timeStep == _timeStep.TimeStep.HALF_AN_HOUR && interval.length('hour') > 24) return false;
+    if (timeStep == _timeStep.TimeStep.WEEK && interval.length('day') > 7) return false;
+    if (timeStep == _timeStep.TimeStep.DAY && interval.length('day') > 36) return false;
+    if (timeStep == _timeStep.TimeStep.MONTH && interval.length('month') > 12) return false;
+    if (timeStep == _timeStep.TimeStep.YEAR && interval.length('year') > 10) return false;
+    return true;
+  }
+
+  ValidateTimePeriod(timePeriod) {
+    return timePeriod.endDate >= timePeriod.startDate;
+  }
+
+}
+
+exports.default = ConsumptionValidatorService;
+
+/***/ }),
+/* 620 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _interopRequireDefault = __webpack_require__(1);
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+
+var _defineProperty2 = _interopRequireDefault(__webpack_require__(2));
+
+var _fluid = __webpack_require__(611);
+
+var _fluidConfig = _interopRequireDefault(__webpack_require__(616));
+
+class ConverterService {
+  constructor() {
+    (0, _defineProperty2.default)(this, "_fluidConfig", void 0);
+    this._fluidConfig = new _fluidConfig.default().getFluidConfig();
+  }
+
+  LoadToEuro(load, fluidType, price) {
+    let convertedLoad; // If Multifluid do not apply coeff because it doesn't exist
+
+    if (fluidType === _fluid.FluidType.MULTIFLUID) {
+      convertedLoad = load;
+    } else {
+      convertedLoad = this.applyPrice(this._fluidConfig[fluidType], load, price);
+    } // Prevent round 0 case when the actual value is not 0
+
+
+    if (convertedLoad > 0 && convertedLoad < 0.01) {
+      convertedLoad = 0.01;
+    }
+
+    return convertedLoad;
+  }
+  /**
+   * Return calculated price
+   * @param {FluidConfig} fluidConfig - Fluid configuration
+   * @param {number} load - Load value
+   * @param {number} [price] - Price if exist
+   * @returns {number}
+   */
+
+
+  applyPrice(fluidConfig, load, price) {
+    if (price) {
+      return price;
+    } else {
+      return load * fluidConfig.coefficient;
+    }
+  }
+
+}
+
+exports.default = ConverterService;
+
+/***/ }),
+/* 621 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
 var _interopRequireDefault = __webpack_require__(1);
 
 Object.defineProperty(exports, "__esModule", {
@@ -78750,7 +78869,7 @@ var _fluid = __webpack_require__(611);
 
 var _timeStep = __webpack_require__(612);
 
-var _logger = _interopRequireDefault(__webpack_require__(620));
+var _logger = _interopRequireDefault(__webpack_require__(622));
 
 var _dataload = __webpack_require__(614);
 
@@ -79111,7 +79230,7 @@ class QueryRunner {
 exports.default = QueryRunner;
 
 /***/ }),
-/* 620 */
+/* 622 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
@@ -79129,125 +79248,6 @@ const log = minilog('ecolyo')
 /* harmony default export */ __webpack_exports__["default"] = (log);
 
 
-/***/ }),
-/* 621 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = void 0;
-
-var _fluid = __webpack_require__(611);
-
-var _timeStep = __webpack_require__(612);
-
-var _luxon = __webpack_require__(585);
-
-class ConsumptionValidatorService {
-  ValidateGetGraphData(timePeriod, timeStep, fluidTypes, compareTimePeriod) {
-    if (fluidTypes.length === 0) return false;
-    if (!this.ValidateTimePeriod(timePeriod)) return false;
-
-    for (const fluidType of fluidTypes) {
-      if (timeStep === _timeStep.TimeStep.HALF_AN_HOUR && fluidType !== _fluid.FluidType.ELECTRICITY) return false;
-    }
-
-    if (!this.ValidateTimePeriodLength(timePeriod, timeStep)) return false;
-
-    if (compareTimePeriod) {
-      if (!this.ValidateTimePeriod(compareTimePeriod)) return false;
-      if (!this.ValidateTimePeriodLength(compareTimePeriod, timeStep)) return false;
-    }
-
-    return true;
-  }
-
-  ValidateTimePeriodLength(timePeriod, timeStep) {
-    const interval = _luxon.Interval.fromDateTimes(timePeriod.startDate, timePeriod.endDate);
-
-    if (timeStep == _timeStep.TimeStep.HALF_AN_HOUR && interval.length('hour') > 24) return false;
-    if (timeStep == _timeStep.TimeStep.WEEK && interval.length('day') > 7) return false;
-    if (timeStep == _timeStep.TimeStep.DAY && interval.length('day') > 36) return false;
-    if (timeStep == _timeStep.TimeStep.MONTH && interval.length('month') > 12) return false;
-    if (timeStep == _timeStep.TimeStep.YEAR && interval.length('year') > 10) return false;
-    return true;
-  }
-
-  ValidateTimePeriod(timePeriod) {
-    return timePeriod.endDate >= timePeriod.startDate;
-  }
-
-}
-
-exports.default = ConsumptionValidatorService;
-
-/***/ }),
-/* 622 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var _interopRequireDefault = __webpack_require__(1);
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = void 0;
-
-var _defineProperty2 = _interopRequireDefault(__webpack_require__(2));
-
-var _fluid = __webpack_require__(611);
-
-var _fluidConfig = _interopRequireDefault(__webpack_require__(616));
-
-class ConverterService {
-  constructor() {
-    (0, _defineProperty2.default)(this, "_fluidConfig", void 0);
-    this._fluidConfig = new _fluidConfig.default().getFluidConfig();
-  }
-
-  LoadToEuro(load, fluidType, price) {
-    let convertedLoad; // If Multifluid do not apply coeff because it doesn't exist
-
-    if (fluidType === _fluid.FluidType.MULTIFLUID) {
-      convertedLoad = load;
-    } else {
-      convertedLoad = this.applyPrice(this._fluidConfig[fluidType], load, price);
-    } // Prevent round 0 case when the actual value is not 0
-
-
-    if (convertedLoad > 0 && convertedLoad < 0.01) {
-      convertedLoad = 0.01;
-    }
-
-    return convertedLoad;
-  }
-  /**
-   * Return calculated price
-   * @param {FluidConfig} fluidConfig - Fluid configuration
-   * @param {number} load - Load value
-   * @param {number} [price] - Price if exist
-   * @returns {number}
-   */
-
-
-  applyPrice(fluidConfig, load, price) {
-    if (price) {
-      return price;
-    } else {
-      return load * fluidConfig.coefficient;
-    }
-  }
-
-}
-
-exports.default = ConverterService;
-
 /***/ }),
 /* 623 */,
 /* 624 */,
@@ -148257,28 +148257,28 @@ var _interopRequireDefault = __webpack_require__(1);
 
 var _cozyLogger = _interopRequireDefault(__webpack_require__(3));
 
+var _fluid = __webpack_require__(611);
+
+var _timeStep = __webpack_require__(612);
+
 var _get = _interopRequireDefault(__webpack_require__(162));
 
 var _luxon = __webpack_require__(585);
 
 var _mjml = _interopRequireDefault(__webpack_require__(1039));
 
-var _service = __webpack_require__(23);
+var _consumption = _interopRequireDefault(__webpack_require__(610));
 
-var _profile = _interopRequireDefault(__webpack_require__(609));
+var _environment = _interopRequireDefault(__webpack_require__(1016));
 
 var _mail = _interopRequireDefault(__webpack_require__(1038));
 
-var _fluid = __webpack_require__(611);
-
-var _timeStep = __webpack_require__(612);
-
-var _consumption = _interopRequireDefault(__webpack_require__(610));
-
-var _environment = _interopRequireDefault(__webpack_require__(1016));
+var _profile = _interopRequireDefault(__webpack_require__(609));
 
 var _utils = __webpack_require__(848);
 
+var _service = __webpack_require__(23);
+
 const monthlyReportTemplate = __webpack_require__(1487);
 
 const log = _cozyLogger.default.namespace('report');
@@ -148333,9 +148333,9 @@ const buildConsumptionText = async client => {
 
     if (value) {
       if (value > 0) {
-        text += '<span class="elec-text"><br>-&nbsp;' + Math.ceil(value * 100) + "&nbsp;%&nbsp;d'électricité</span>";
+        text += '<span class="elec-text"><br>+&nbsp;' + Math.ceil(value * 100) + "&nbsp;%&nbsp;d'électricité</span>";
       } else {
-        text += '<span class="elec-text"><br>+&nbsp;' + Math.ceil(Math.abs(value * 100)) + "&nbsp;%&nbsp;d'électricité</span>";
+        text += '<span class="elec-text"><br>-&nbsp;' + Math.ceil(Math.abs(value * 100)) + "&nbsp;%&nbsp;d'électricité</span>";
       }
     }
   }
@@ -148345,9 +148345,9 @@ const buildConsumptionText = async client => {
 
     if (value) {
       if (value > 0) {
-        text += '<span class="gas-text"><br>-&nbsp;' + Math.ceil(value * 100) + '&nbsp;%&nbsp;de&nbsp;gaz</span>';
+        text += '<span class="gas-text"><br>+&nbsp;' + Math.ceil(value * 100) + '&nbsp;%&nbsp;de&nbsp;gaz</span>';
       } else {
-        text += '<span class="gas-text"><br>+&nbsp;' + Math.ceil(Math.abs(value * 100)) + '&nbsp;%&nbsp;de&nbsp;gaz</span>';
+        text += '<span class="gas-text"><br>-&nbsp;' + Math.ceil(Math.abs(value * 100)) + '&nbsp;%&nbsp;de&nbsp;gaz</span>';
       }
     }
   }
@@ -148357,9 +148357,9 @@ const buildConsumptionText = async client => {
 
     if (value) {
       if (value > 0) {
-        text += '<span class="water-text"><br>-&nbsp;' + Math.ceil(value * 100) + "&nbsp;%&nbsp;d'eau</span>";
+        text += '<span class="water-text"><br>+&nbsp;' + Math.ceil(value * 100) + "&nbsp;%&nbsp;d'eau</span>";
       } else {
-        text += '<span class="water-text"><br>+&nbsp;' + Math.ceil(Math.abs(value * 100)) + "&nbsp;%&nbsp;d'eau</span>";
+        text += '<span class="water-text"><br>-&nbsp;' + Math.ceil(Math.abs(value * 100)) + "&nbsp;%&nbsp;d'eau</span>";
       }
     }
   }