diff --git a/docs/easycozy/known_errors.md b/docs/easycozy/known_errors.md
new file mode 100644
index 0000000000000000000000000000000000000000..0081bc6b32fb1c662ac50c11fa2d9679f57c3aaf
--- /dev/null
+++ b/docs/easycozy/known_errors.md
@@ -0,0 +1,10 @@
+# Oops...
+
+Sometime the stack is stuck when we reset several instance due to rabbit mq process. The following screen is then obtain:
+![oops_error](/img/known_errors/oops_error.png)
+
+On the server we can see that the server is underwater by using "top" command:
+![oops_error_1](/img/known_errors/oops_error_1.png)
+
+To fix the issue you can just restart the service with "docker-compose down / docker-compose up -d" in the easy-cozy folder:
+![oops_error_2](/img/known_errors/oops_error_2.png)
\ No newline at end of file
diff --git a/docs/ecolyo/functionalities/usage_events_tracking.md b/docs/ecolyo/functionalities/usage_events_tracking.md
index e23aa5c5faff42400028e711a320da474bea2e4a..4f9acef8fa0d8d37797edf56060fa9718cad4228 100644
--- a/docs/ecolyo/functionalities/usage_events_tracking.md
+++ b/docs/ecolyo/functionalities/usage_events_tracking.md
@@ -19,12 +19,9 @@ Here are the list of collected usage event:
 | Challenge   | ChallengeEndEvent              | Challenge id   |                      |                       | User ends a challenge.                    |
 | Duel        | DuelLaunchEvent                | Duel id        |                      | Challenge id          | User launches a duel.                     |
 | Duel        | DuelEndEvent                   | Duel id        |                      | Challenge id          | User ends a duel.                         |
-| Quiz        | QuizLaunchEvent                | Quiz id        |                      | Challenge id          | User launches a quiz.                     |
 | Quiz        | QuizEndEvent                   | Quiz id        | starsNumber          | Challenge id          | User ends a quiz.                         |
-| Exploration | ExplorationLaunchEvent         | Exploration id |                      | Challenge id          | User launches an exploration.             |
 | Exploration | ExplorationEndEvent            | Exploration id |                      | Challenge id          | User ends an exploration.                 |
 | Action      | ActionChangeEvent              | Action id      |                      | Challenge id          | User change action's ecogesture.          |
-| Action      | ActionLaunchEvent              | Action id      |                      | Challenge id          | User launches a action.                   |
 | Action      | ActionEndEvent                 | Action id      |                      | Challenge id          | User ends a action.                       |
 | Profile     | ProfileSetEvent                |                |                      |                       | User fills in its profile.                |
 | Consumption | ConsumptionCompareEvent        |                |                      | Fluid / TimeStep      | User compares its consumption.            |
@@ -32,3 +29,4 @@ Here are the list of collected usage event:
 | Consumption | ConsumptionInteracteEvent      |                |                      | Fluid / TimeStep      | User selects a consumption on the chart.  |
 
 ## Usage events aggregator service
+
diff --git a/docs/img/known_errors/oops_error.png b/docs/img/known_errors/oops_error.png
new file mode 100644
index 0000000000000000000000000000000000000000..7d47398bbbea682b59d9b025ed9e7d764f34eb94
Binary files /dev/null and b/docs/img/known_errors/oops_error.png differ
diff --git a/docs/img/known_errors/oops_error_1.png b/docs/img/known_errors/oops_error_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..77f6a136edbd27741ded97aeb5d7fb3284784deb
Binary files /dev/null and b/docs/img/known_errors/oops_error_1.png differ
diff --git a/docs/img/known_errors/oops_error_2.png b/docs/img/known_errors/oops_error_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..ffd8f4236a8434d18f8de3d0602330b9d910655e
Binary files /dev/null and b/docs/img/known_errors/oops_error_2.png differ
diff --git a/docs/konnectors/enedis.md b/docs/konnectors/enedis.md
index 615119cb4f33cac9d8e693da3147cc8cde9c79cf..466f711e1d4cbfd0cbe6b52369232c79bb3208ea 100644
--- a/docs/konnectors/enedis.md
+++ b/docs/konnectors/enedis.md
@@ -1,91 +1,91 @@
-This konnector fetches consumptions measures from Enedis API. This is an Oauth Konnector, meaning the authentification performed to access all data is made following an Oauth2 protocol.
-You can clone the project [here](https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-konnector).
-
-You should also check Cozy's official documentations for konnectors :
-[https://docs.cozy.io/en/tutorials/konnector/getting-started/](https://docs.cozy.io/en/tutorials/konnector/getting-started/)
-[https://docs.cozy.io/en/tutorials/konnector/oauth/](https://docs.cozy.io/en/tutorials/konnector/oauth/)
-
-## Enedis Konnector
-
-The Oauth protocol does not take place in the konnector code, therefore it is also important to take a look at the [proxy](../../proxy/description.md) documentation to fully understand all the interactions that will be told below.
-
-All the actions performed by the stack are targetted from pre-registered paramaters, here is the list of all parameters needed by the stack to perform the Oauth protocol and allow the konnector to fetch data.
-On its first launch, following the Oauth Client Connect authentification.
-
-- The cozy stack calls the **authentification_endpoint** and start the oauth protocol, see [proxy doc](../../proxy/description.md).
-- The account has now an access_token and an id_token from the oauth call
-
-!!! info ""
-id token is only given when requesting the token endpoint in \_authorization_code grant_type.
-This token holds several meta datas, including the usage_point_id (id of user's meter) that will be needed further to fetch user's datas.
-
-- Konnector starts, if no usage_point_id are found in database or fields then proceed as a first launch. Store the usage_point_id in oauth_callback_result in db (see [addData](https://docs.cozy.io/en/cozy-konnector-libs/api/#adddata_1)).
-- Konnector finds usage_point_id when starting but token is expired. Proceed to refresh token and restart konnector with usage_point_id in fields params (see _Troubleshooting when asking for refresh token_ section at the end of the page).
-
-## Enedis API
-
-API Url for Production : [https://gw.prd.api.enedis.fr](https://gw.prd.api.enedis.fr)
-API url for Development : [https://gw.hml.api.enedis.fr](https://gw.hml.api.enedis.fr)
-
-Once you've finished the OAuth protocol and have a valid token, you can go fetch the data. Currently we use the two following endpoints in Ecolyo:
-
-Method : **GET**
-
-Route : **/v4/metering_data/consumption_load_curve**
-
-Method : **GET**
-
-Route : **/v4/metering_data/daily_consumption**
-
-```json
-"params":
-{
-	"usage_point_id": <your-usage-point-id>,
-    "start": "YYYY-MM-DD",
-    "end": "YYYY-MM-DD",
-}
-```
-
-```json
-"headers":
-{
-	"Accept": "application/json",
-    "Authorization": "Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
-}
-```
-
-For more information about Datahub-Enedis API, checkout the [Datahub documentation](https://datahub-enedis.fr/data-connect/documentation/metering-data-v4/).
-
-### Konnector Methods
-
-| Method                        | Description                                                                                                                                                                                                                                                                               |
-| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| start                         | Init Function                                                                                                                                                                                                                                                                             |
-| getDailyData                  | Retrieve data from the API. Format: `{ value: "Wh", "date": "YYYY-MM-DD" }`"                                                                                                                                                                                                              |
-| startLoadDataProcess          | Check if history is loaded. If not, call several time the api to retrieve 1 month of history for load data. If yes only call once the api                                                                                                                                                 |
-| launchLoadDataProcess         | Launch process to handle load data                                                                                                                                                                                                                                                        |
-| getLoadData                   | Retrieve data from the API. Format: `{ value: "W", "date": "YYYY-MM-DD hh:mm:ss" }`                                                                                                                                                                                                       |
-| processData                   | Parse data. Remove existing data from DB using hydrateAndFilter, store filtered data and return the list of filtered data                                                                                                                                                                 |
-| agregateMonthAndYearData      | Agregate data from daily data to monthly and yearly data                                                                                                                                                                                                                                  |
-| agregateHourlyData            | Agregate data from load data (every 30 min) to Hourly data                                                                                                                                                                                                                                |
-| storeData                     | Save data in the right doctype db and prevent duplicated keys                                                                                                                                                                                                                             |
-| formateData                   | Format data for DB storage and remove bad data                                                                                                                                                                                                                                            |
-| buildAgregatedData            | Retrieve and remove old data for a specific doctype and return an array of agregated data                                                                                                                                                                                                 |
-| buildDataFromKey              | Format an entry for DB storage using key and value. For year doctype: key = "YYYY". For month doctype: key = "YYYY-MM"                                                                                                                                                                    |
-| isHistoryLoaded               | Function checking if the history is loaded                                                                                                                                                                                                                                                |
-| resetInProgressAggregatedData | Function handling special case.The temporary aggregated data need to be remove in order for the most recent one te be saved. Ex for com.grandlyon.enedis.year : `{ load: 76.712, year: 2020, ... }` need to be replace by `{ load: 82.212, year: 2020, ... }` after enedis data reprocess |
-
-## Troubleshooting when asking for refresh token
-
-When a token expires, the konnector will encounter an error when fetching user data, leading to a refresh token request.
-
-Since refresh token requests restart the Konnector, it was decided to add the `usage_point_id` into the start fields when asking for a refresh token (see line 97).
-
-!!! info "restart to refresh token"
-Line 85: `` await cozyClient.fetchJSON( 'POST', `/accounts/enedisgrandlyon/${accountId}/refresh` ) ``
-
-    Line 97: ```fields.usage_point_id = usage_point_id```
-
-    Line 98: ```return start(fields, cozyParameters, false)```
-
-In fact the usage_point_id still remains in the account collection, but on restart, the konnector loses `this._account` context leading to an error when searching for usage_point_id in account.
+This konnector fetches consumptions measures from Enedis API. This is an Oauth Konnector, meaning the authentification performed to access all data is made following an Oauth2 protocol.
+You can clone the project [here](https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-konnector).
+
+You should also check Cozy's official documentations for konnectors :
+[https://docs.cozy.io/en/tutorials/konnector/getting-started/](https://docs.cozy.io/en/tutorials/konnector/getting-started/)
+[https://docs.cozy.io/en/tutorials/konnector/oauth/](https://docs.cozy.io/en/tutorials/konnector/oauth/)
+
+## Enedis Konnector
+
+The Oauth protocol does not take place in the konnector code, therefore it is also important to take a look at the [proxy](/proxy/description.md) documentation to fully understand all the interactions that will be told below.
+
+All the actions performed by the stack are targetted from pre-registered paramaters, here is the list of all parameters needed by the stack to perform the Oauth protocol and allow the konnector to fetch data.
+On its first launch, following the Oauth Client Connect authentification.
+
+- The cozy stack calls the **authentification_endpoint** and start the oauth protocol, see [proxy doc](/proxy/description.md).
+- The account has now an access_token and an id_token from the oauth call
+
+!!! info ""
+id token is only given when requesting the token endpoint in \_authorization_code grant_type.
+This token holds several meta datas, including the usage_point_id (id of user's meter) that will be needed further to fetch user's datas.
+
+- Konnector starts, if no usage_point_id are found in database or fields then proceed as a first launch. Store the usage_point_id in oauth_callback_result in db (see [addData](https://docs.cozy.io/en/cozy-konnector-libs/api/#adddata_1)).
+- Konnector finds usage_point_id when starting but token is expired. Proceed to refresh token and restart konnector with usage_point_id in fields params (see _Troubleshooting when asking for refresh token_ section at the end of the page).
+
+## Enedis API
+
+API Url for Production : [https://gw.prd.api.enedis.fr](https://gw.prd.api.enedis.fr)
+API url for Development : [https://gw.hml.api.enedis.fr](https://gw.hml.api.enedis.fr)
+
+Once you've finished the OAuth protocol and have a valid token, you can go fetch the data. Currently we use the two following endpoints in Ecolyo:
+
+Method : **GET**
+
+Route : **/v4/metering_data/consumption_load_curve**
+
+Method : **GET**
+
+Route : **/v4/metering_data/daily_consumption**
+
+```json
+"params":
+{
+	"usage_point_id": <your-usage-point-id>,
+    "start": "YYYY-MM-DD",
+    "end": "YYYY-MM-DD",
+}
+```
+
+```json
+"headers":
+{
+	"Accept": "application/json",
+    "Authorization": "Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+}
+```
+
+For more information about Datahub-Enedis API, checkout the [Datahub documentation](https://datahub-enedis.fr/data-connect/documentation/metering-data-v4/).
+
+### Konnector Methods
+
+| Method                        | Description                                                                                                                                                                                                                                                                               |
+| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| start                         | Init Function                                                                                                                                                                                                                                                                             |
+| getDailyData                  | Retrieve data from the API. Format: `{ value: "Wh", "date": "YYYY-MM-DD" }`"                                                                                                                                                                                                              |
+| startLoadDataProcess          | Check if history is loaded. If not, call several time the api to retrieve 1 month of history for load data. If yes only call once the api                                                                                                                                                 |
+| launchLoadDataProcess         | Launch process to handle load data                                                                                                                                                                                                                                                        |
+| getLoadData                   | Retrieve data from the API. Format: `{ value: "W", "date": "YYYY-MM-DD hh:mm:ss" }`                                                                                                                                                                                                       |
+| processData                   | Parse data. Remove existing data from DB using hydrateAndFilter, store filtered data and return the list of filtered data                                                                                                                                                                 |
+| agregateMonthAndYearData      | Agregate data from daily data to monthly and yearly data                                                                                                                                                                                                                                  |
+| agregateHourlyData            | Agregate data from load data (every 30 min) to Hourly data                                                                                                                                                                                                                                |
+| storeData                     | Save data in the right doctype db and prevent duplicated keys                                                                                                                                                                                                                             |
+| formateData                   | Format data for DB storage and remove bad data                                                                                                                                                                                                                                            |
+| buildAgregatedData            | Retrieve and remove old data for a specific doctype and return an array of agregated data                                                                                                                                                                                                 |
+| buildDataFromKey              | Format an entry for DB storage using key and value. For year doctype: key = "YYYY". For month doctype: key = "YYYY-MM"                                                                                                                                                                    |
+| isHistoryLoaded               | Function checking if the history is loaded                                                                                                                                                                                                                                                |
+| resetInProgressAggregatedData | Function handling special case.The temporary aggregated data need to be remove in order for the most recent one te be saved. Ex for com.grandlyon.enedis.year : `{ load: 76.712, year: 2020, ... }` need to be replace by `{ load: 82.212, year: 2020, ... }` after enedis data reprocess |
+
+## Troubleshooting when asking for refresh token
+
+When a token expires, the konnector will encounter an error when fetching user data, leading to a refresh token request.
+
+Since refresh token requests restart the Konnector, it was decided to add the `usage_point_id` into the start fields when asking for a refresh token (see line 97).
+
+!!! info "restart to refresh token"
+Line 85: `` await cozyClient.fetchJSON( 'POST', `/accounts/enedisgrandlyon/${accountId}/refresh` ) ``
+
+    Line 97: ```fields.usage_point_id = usage_point_id```
+
+    Line 98: ```return start(fields, cozyParameters, false)```
+
+In fact the usage_point_id still remains in the account collection, but on restart, the konnector loses `this._account` context leading to an error when searching for usage_point_id in account.
diff --git a/docs/konnectors/grdf.md b/docs/konnectors/grdf.md
index ba81b291089a70162634a344aaaa2a5183407fb3..2c122d38db57e2c974248acaa3c16c614e2b8839 100644
--- a/docs/konnectors/grdf.md
+++ b/docs/konnectors/grdf.md
@@ -1,85 +1,85 @@
-This konnector fetches consumptions measures from Grdf Adict API. This is an Oauth Konnector, meaning the authentification performed to access all data is made following an Oauth2 protocol.
-You can clone the project [here](https://forge.grandlyon.com/web-et-numerique/llle_project/grdf-adict-konnector).
-
-You should also check Cozy's official documentations for konnectors :
-[https://docs.cozy.io/en/tutorials/konnector/getting-started/](https://docs.cozy.io/en/tutorials/konnector/getting-started/)
-[https://docs.cozy.io/en/tutorials/konnector/oauth/](https://docs.cozy.io/en/tutorials/konnector/oauth/)
-
-## Grdf Adict Konnector
-
-The Oauth protocol does not take place in the konnector code, therefore it is also important to take a look at the [proxy](../../proxy/description.md) to fully understand all the interactions that will be told below.
-
-All the actions performed by the stack are targetted from pre-registered paramaters, here is the list of all parameters needed by the stack to perform the Oauth protocol and allow the konnector to fetch data.
-
-![grdfgrandlyon account](/img/grdf_account.jpg)
-
-On its first launch, following the Oauth Client Connect authentification.
-
-- The cozy stack calls the **authentification_endpoint** and start the oauth protocol, see [proxy doc](../../proxy/description.md).
-- The account has now an access_token and an id_token from the oauth call
-
-!!! info ""
-id*token is only given when requesting the token endpoint in \_authorization_code* grant_type.
-This token holds several meta datas, including the pce_id (id of user's meter) that will be needed further to fetch user's datas.
-
-- Konnector starts, fails to find a pce_id in database on first launch therefore decodes the id_token to store the pce_id in db (see [addData](https://docs.cozy.io/en/cozy-konnector-libs/api/#adddata_1)).
-- Konnector restarts, this time knowing a pce_id, it fails to fetch datas because the access_token from oauth call has a reduced scope (only scoping for meta data requests).
-- Konnector launches a refresh call, the proxy knows to answer it with a _client_credentials_ grant_type call to grdf /access_token.
-- Konnector restarts with everyting needed in database to fetch datas and store them in couchdb.
-
-- Further jobs will not need to change scope again and will only ask for refresh tokens.
-
-### Konnector Flow summarized
-
-```plantuml
-  Start -> Restart: No Pce_id
-  Restart -> GetData
-  GetData -> Grdf_Data_Endpoint
-  GetData <-- Grdf_Data_Endpoint: Token forbidden scope too low
-  GetData -> Refresh_Call
-  Refresh_Call -> Proxy
-  Proxy -> Grdf_Token_Endpoint: client_credential option
-  Proxy <-- Grdf_Token_Endpoint: new token
-  GetData <-- Proxy
-  Restart <-- GetData
-  Restart -> GetData
-  GetData -> ProcessData
-  ProcessData -> StoreData
-```
-
-!!! info "to do"
-:construction: Add request PCE's frequency :construction:
-
-    Grdf owns different type of meters, some are read twice a year (every six months therefore called 6M), others are 1M or 1D. Ecolyo could warn the user if its meter is not suited for the application use.
-
-## Launch on standalone
-
-In the project repository type `yarn standalone` to launch the konnector without a cozy stack running.
-
-## Installation
-
-Build the konnector with `yarn build`.
-
-### Install on easy-cozy (development purposes)
-
-`sudo docker cp /home/easy-cozy/fun/grdf-konnector/build/ $container_id:/tmp/grdf-oauth`
-
-`sudo docker-compose exec cozy ./cozy konnectors install grdf-oauth --domain "$alphaDomain" file:///tmp/grdf-oauth $container_id `
-
-### Install on production
-
-Type `yarn deploy` to build on a dedicated branch.
-Build branch is stored as a docker image in a registry : [Container Registry](https://forge.grandlyon.com/web-et-numerique/llle_project/grdf-adict-konnector/container_registry).
-
-### Konnector Methods
-
-| Method                        | Description                                                                                                                                                                                                                                                                           |
-| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| start                         | Init Function                                                                                                                                                                                                                                                                         |
-| getData                       | Retrieve data from API                                                                                                                                                                                                                                                                |
-| processData                   | Parse data. Remove existing data from DB using hydrateAndFilter, store filtered data and return the list of filtered data                                                                                                                                                             |
-| storeData                     | Save data in the right doctype db and prevent duplicated keys                                                                                                                                                                                                                         |
-| formateData                   | Format data for DB storage and remove bad data                                                                                                                                                                                                                                        |
-| buildAgregatedData            | Retrieve and remove old data for a specific doctype and return an array of agregated data                                                                                                                                                                                             |
-| buildDataFromKey              | Format an entry for DB storage using key and value. For year doctype: key = "YYYY". For month doctype: key = "YYYY-MM"                                                                                                                                                                |
-| resetInProgressAggregatedData | Function handling special case.The temporary aggregated data need to be remove in order for the most recent one te be saved. Ex for com.grandlyon.grdf.year : `{ load: 76.712, year: 2020, ... }` need to be replace by `{ load: 82.212, year: 2020, ... }` after grdf data reprocess |
+This konnector fetches consumptions measures from Grdf Adict API. This is an Oauth Konnector, meaning the authentification performed to access all data is made following an Oauth2 protocol.
+You can clone the project [here](https://forge.grandlyon.com/web-et-numerique/llle_project/grdf-adict-konnector).
+
+You should also check Cozy's official documentations for konnectors :
+[https://docs.cozy.io/en/tutorials/konnector/getting-started/](https://docs.cozy.io/en/tutorials/konnector/getting-started/)
+[https://docs.cozy.io/en/tutorials/konnector/oauth/](https://docs.cozy.io/en/tutorials/konnector/oauth/)
+
+## Grdf Adict Konnector
+
+The Oauth protocol does not take place in the konnector code, therefore it is also important to take a look at the [proxy](/proxy/description.md) to fully understand all the interactions that will be told below.
+
+All the actions performed by the stack are targetted from pre-registered paramaters, here is the list of all parameters needed by the stack to perform the Oauth protocol and allow the konnector to fetch data.
+
+![grdfgrandlyon account](/img/grdf_account.jpg)
+
+On its first launch, following the Oauth Client Connect authentification.
+
+- The cozy stack calls the **authentification_endpoint** and start the oauth protocol, see [proxy doc](/proxy/description.md).
+- The account has now an access_token and an id_token from the oauth call
+
+!!! info ""
+id*token is only given when requesting the token endpoint in \_authorization_code* grant_type.
+This token holds several meta datas, including the pce_id (id of user's meter) that will be needed further to fetch user's datas.
+
+- Konnector starts, fails to find a pce_id in database on first launch therefore decodes the id_token to store the pce_id in db (see [addData](https://docs.cozy.io/en/cozy-konnector-libs/api/#adddata_1)).
+- Konnector restarts, this time knowing a pce_id, it fails to fetch datas because the access_token from oauth call has a reduced scope (only scoping for meta data requests).
+- Konnector launches a refresh call, the proxy knows to answer it with a _client_credentials_ grant_type call to grdf /access_token.
+- Konnector restarts with everyting needed in database to fetch datas and store them in couchdb.
+
+- Further jobs will not need to change scope again and will only ask for refresh tokens.
+
+### Konnector Flow summarized
+
+```plantuml
+  Start -> Restart: No Pce_id
+  Restart -> GetData
+  GetData -> Grdf_Data_Endpoint
+  GetData <-- Grdf_Data_Endpoint: Token forbidden scope too low
+  GetData -> Refresh_Call
+  Refresh_Call -> Proxy
+  Proxy -> Grdf_Token_Endpoint: client_credential option
+  Proxy <-- Grdf_Token_Endpoint: new token
+  GetData <-- Proxy
+  Restart <-- GetData
+  Restart -> GetData
+  GetData -> ProcessData
+  ProcessData -> StoreData
+```
+
+!!! info "to do"
+:construction: Add request PCE's frequency :construction:
+
+    Grdf owns different type of meters, some are read twice a year (every six months therefore called 6M), others are 1M or 1D. Ecolyo could warn the user if its meter is not suited for the application use.
+
+## Launch on standalone
+
+In the project repository type `yarn standalone` to launch the konnector without a cozy stack running.
+
+## Installation
+
+Build the konnector with `yarn build`.
+
+### Install on easy-cozy (development purposes)
+
+`sudo docker cp /home/easy-cozy/fun/grdf-konnector/build/ $container_id:/tmp/grdf-oauth`
+
+`sudo docker-compose exec cozy ./cozy konnectors install grdf-oauth --domain "$alphaDomain" file:///tmp/grdf-oauth $container_id `
+
+### Install on production
+
+Type `yarn deploy` to build on a dedicated branch.
+Build branch is stored as a docker image in a registry : [Container Registry](https://forge.grandlyon.com/web-et-numerique/llle_project/grdf-adict-konnector/container_registry).
+
+### Konnector Methods
+
+| Method                        | Description                                                                                                                                                                                                                                                                           |
+| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| start                         | Init Function                                                                                                                                                                                                                                                                         |
+| getData                       | Retrieve data from API                                                                                                                                                                                                                                                                |
+| processData                   | Parse data. Remove existing data from DB using hydrateAndFilter, store filtered data and return the list of filtered data                                                                                                                                                             |
+| storeData                     | Save data in the right doctype db and prevent duplicated keys                                                                                                                                                                                                                         |
+| formateData                   | Format data for DB storage and remove bad data                                                                                                                                                                                                                                        |
+| buildAgregatedData            | Retrieve and remove old data for a specific doctype and return an array of agregated data                                                                                                                                                                                             |
+| buildDataFromKey              | Format an entry for DB storage using key and value. For year doctype: key = "YYYY". For month doctype: key = "YYYY-MM"                                                                                                                                                                |
+| resetInProgressAggregatedData | Function handling special case.The temporary aggregated data need to be remove in order for the most recent one te be saved. Ex for com.grandlyon.grdf.year : `{ load: 76.712, year: 2020, ... }` need to be replace by `{ load: 82.212, year: 2020, ... }` after grdf data reprocess |
diff --git a/docs/proxy/description.md b/docs/proxy/description.md
index 83ef69063e6341288c7948d69f5c990fb30eb91f..d5d089a7cce9f654e5e083e7d1427a047d3cae53 100644
--- a/docs/proxy/description.md
+++ b/docs/proxy/description.md
@@ -1,171 +1,171 @@
-This section of documentation refers to the Oauth protocols working hand in hand with our custom proxy and the cozy-stack.
-To fully understand its whereabouts, you should also look at the [enedis konnector](../ecolyo/konnectors/enedis.md) and [grdf konnector](../ecolyo/konnectors/grdf.md) documentation.
-
-!!! info "proxy code source"
-    Feel free to check the proxy [code](https://forge.grandlyon.com/pocs/cozy/cozy-oauth-proxy) at all time when reading this documentation.
-
-## Oauth Dance
-
-To access customer data, one must first obtain customer authorization. This authorization is materialized by an access token and it must be obtained by the APIs exposed by each energy providers.
-
-These APIs implement Oauth 2.0 protocol, it requires authentication from the customer along with its given consent.
-
-See both **[Enedis](./use_cases/enedis.md)** and **[Grdf](./use_cases/grdfadict.md)** use cases before going further.
-### Cozy Oauth Protocol
-
-!!! info "cozy oauth flow documentation" 
-    [https://docs.cozy.io/en/cozy-stack/konnectors-workflow/#reminder-oauth-flow](https://docs.cozy.io/en/cozy-stack/konnectors-workflow/#reminder-oauth-flow)
-
-#### Couchdb
-
-The couchdb database must hold all informations needed for the konnector authentication to work properly.
-
-Auth informations are stored in the **secrets/io-cozy-account_types** database.
-You can create manually the document by entering these parameters for each konnector:
-
-<table>
-  <colgroup>
-    <col width="30%">
-    <col width="70%">
-  </colgroup>
-  <thead>
-    <tr class="header">
-      <th>Name</th>
-      <th>Description</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td>_id</td>
-      <td>Name of your konnector, for instance: enedisgrandlyon</td>
-    </tr>
-    <tr>
-      <td>grant_mode</td>
-      <td>authorization_code</td>
-    </tr>
-    <tr>
-      <td>client_id</td>
-      <td>Application id given by the API provider</td>
-    </tr>
-    <tr>
-      <td>client_secret</td>
-      <td>Secret also given by the API provider</td>
-    </tr>
-    <tr>
-      <td>auth_endpoint</td>
-      <td>Authorize endpoint to request when starting the oauth protocol</td>
-    </tr>
-    <tr>
-      <td>token_endpoint</td>
-      <td>Token endpoint to request, will be called when the auth endpoint response reaches the stack</td>
-    </tr>
-    <tr>
-      <td>token_mode</td>
-      <td>get</td>
-    </tr>
-  </tbody>
-</table>
-
-Once the document is created, when launching the konnector from the cozy-home or inside the running application. The oauth flow will start.
-
-The cozy-stack will request the authorize endpoint, then call the token endpoint with the code received from the auth step.
-
-If the token request is a success. An account/service-name database will be added in couchdb containing all informations needed for authentication and the konnector will be free to work on all endpoints within its scope.
-
-### Why we Need a Proxy
-
-The Oauth dance could be easily wrapped up with the two requests seen above. But since all cozy applications are hosted on different personnal clouds, following this guideline would mean that we need a **client_id** and a **client_secret** for each one of all the applications running.
-
-To answer this issue, two solutions are possible depending on what the energy supplier is willing to do.
-
-- Providers could allow wildcard subdomains when registering the callback URI, it would parse the subdomain and adapt its redirection when answering **/auth** call.
-
-Exemple:
-
-    https//*.cozygrandlyon.cloud/account/redirect -> parse subdomain before .cozy
-
-    xyz.cozygrandlyon.cloud/account/redirect -> redirect to xyz
-    toto.cozygrandlyon.cloud/account/redirect -> redirect to toto
-
-- If the provider (Enedis for instance) is not accepting wildcards, then we put a proxy as a middleware to provide a generic endpoint to cater for all Oauth2 redirections. 
-
-#### Result
-
-With that in mind, the proxy is now the one calling the auth and token provider endpoints. The instance name will be contained in redirect_uri, the stack will insert this parameters by itself in the /auth call.
-
-3 endpoints are created in the proxy for **each energy supplier**:
-
-- One for the auth
-- One for the token
-- One for the redirect uri
-
-#### Proxy flow
-
-```plantuml
-  Stack -> Proxy: calls
-  Proxy -> Provider: calls
-  Proxy <-- Provider: responds with oauth code on proxy/redirect
-  Stack <-- Proxy: redirect to user instance
-  Stack -> Proxy: calls
-  Proxy -> Provider: calls for token or refresh
-  Proxy <-- Provider: responds
-  Stack <-- Proxy: token
-```
-
-
-## Proxy Code Explained
-
-!!! info "reminder"
-    Feel free to check the proxy [code](https://forge.grandlyon.com/pocs/cozy/cozy-oauth-proxy) at all time when reading this documentation.
-
-The proxy is coded in golang.
-
-It is composed of six endpoints as seen above. The first endpoint to be called is **/auth**.
-
-#### auth
-
-Originally called from a cozy-stack trying to setup its konnector. The proxy gets these informations from the query:
-
-- client_id
-- duration
-- redirect_uri (auto inserted by the cozy-stack, except if you specify **skip_redirect_uri:true** in the couchdb)
-- response_type
-- state (as it was conceived by the cozy-stack)
-
-![auth_params](enedis-auth-params.png)
-
-The state will be merged with the instance name, then decomposed again when reaching /redirect. This way the proxy is able to keep track of the cozy instance originally calling.
-
-With all these informations, the proxy can contact the provider **/auth** endpoint to start the oauth dance.
-
-##### Enedis
-
-!!! warning "note"
-    See that a new composed state is sent to enedis, it is made of the former state conceived by the cozy-stack + the cozyOrigin instance name. This will be usefull when enedis is leading the oauth dance to the next step and we will need the name of the cozy to answer.
-
-Once the call is sent, enedis will point to the **/redirect** endpoint.
-
-##### Grdf
-
-> To be redacted
-
-#### redirect
-
-Retrieve the *code*, *usage_point_id*, and *state* answered by Enedis.
-
-Split the customed state that was modified in the **/auth** process. From this split it creates two variables :
-
-- state
-- host
-
-Finally redirect all these parameters in a query to the cozy-stack (the cozy-stack which is still waiting for an answer from its /auth call).
-
-!!! warning "state / instance"
-    The state must be recovered without the instance name, otherwise the cozy-stack won't recognized it and the handshake will fail.
-
-#### token
-
-Gathering from query or parameters all params.
-
-Sends a post request to the provider /token endpoint. 
-The stack will store the response params in a *accounts* couchdb database.
+This section of documentation refers to the Oauth protocols working hand in hand with our custom proxy and the cozy-stack.
+To fully understand its whereabouts, you should also look at the [enedis konnector](/konnectors/enedis.md) and [grdf konnector](/konnectors/grdf.md) documentation.
+
+!!! info "proxy code source"
+    Feel free to check the proxy [code](https://forge.grandlyon.com/pocs/cozy/cozy-oauth-proxy) at all time when reading this documentation.
+
+## Oauth Dance
+
+To access customer data, one must first obtain customer authorization. This authorization is materialized by an access token and it must be obtained by the APIs exposed by each energy providers.
+
+These APIs implement Oauth 2.0 protocol, it requires authentication from the customer along with its given consent.
+
+See both **[Enedis](./use_cases/enedis.md)** and **[Grdf](./use_cases/grdfadict.md)** use cases before going further.
+### Cozy Oauth Protocol
+
+!!! info "cozy oauth flow documentation" 
+    [https://docs.cozy.io/en/cozy-stack/konnectors-workflow/#reminder-oauth-flow](https://docs.cozy.io/en/cozy-stack/konnectors-workflow/#reminder-oauth-flow)
+
+#### Couchdb
+
+The couchdb database must hold all informations needed for the konnector authentication to work properly.
+
+Auth informations are stored in the **secrets/io-cozy-account_types** database.
+You can create manually the document by entering these parameters for each konnector:
+
+<table>
+  <colgroup>
+    <col width="30%">
+    <col width="70%">
+  </colgroup>
+  <thead>
+    <tr class="header">
+      <th>Name</th>
+      <th>Description</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>_id</td>
+      <td>Name of your konnector, for instance: enedisgrandlyon</td>
+    </tr>
+    <tr>
+      <td>grant_mode</td>
+      <td>authorization_code</td>
+    </tr>
+    <tr>
+      <td>client_id</td>
+      <td>Application id given by the API provider</td>
+    </tr>
+    <tr>
+      <td>client_secret</td>
+      <td>Secret also given by the API provider</td>
+    </tr>
+    <tr>
+      <td>auth_endpoint</td>
+      <td>Authorize endpoint to request when starting the oauth protocol</td>
+    </tr>
+    <tr>
+      <td>token_endpoint</td>
+      <td>Token endpoint to request, will be called when the auth endpoint response reaches the stack</td>
+    </tr>
+    <tr>
+      <td>token_mode</td>
+      <td>get</td>
+    </tr>
+  </tbody>
+</table>
+
+Once the document is created, when launching the konnector from the cozy-home or inside the running application. The oauth flow will start.
+
+The cozy-stack will request the authorize endpoint, then call the token endpoint with the code received from the auth step.
+
+If the token request is a success. An account/service-name database will be added in couchdb containing all informations needed for authentication and the konnector will be free to work on all endpoints within its scope.
+
+### Why we Need a Proxy
+
+The Oauth dance could be easily wrapped up with the two requests seen above. But since all cozy applications are hosted on different personnal clouds, following this guideline would mean that we need a **client_id** and a **client_secret** for each one of all the applications running.
+
+To answer this issue, two solutions are possible depending on what the energy supplier is willing to do.
+
+- Providers could allow wildcard subdomains when registering the callback URI, it would parse the subdomain and adapt its redirection when answering **/auth** call.
+
+Exemple:
+
+    https//*.cozygrandlyon.cloud/account/redirect -> parse subdomain before .cozy
+
+    xyz.cozygrandlyon.cloud/account/redirect -> redirect to xyz
+    toto.cozygrandlyon.cloud/account/redirect -> redirect to toto
+
+- If the provider (Enedis for instance) is not accepting wildcards, then we put a proxy as a middleware to provide a generic endpoint to cater for all Oauth2 redirections. 
+
+#### Result
+
+With that in mind, the proxy is now the one calling the auth and token provider endpoints. The instance name will be contained in redirect_uri, the stack will insert this parameters by itself in the /auth call.
+
+3 endpoints are created in the proxy for **each energy supplier**:
+
+- One for the auth
+- One for the token
+- One for the redirect uri
+
+#### Proxy flow
+
+```plantuml
+  Stack -> Proxy: calls
+  Proxy -> Provider: calls
+  Proxy <-- Provider: responds with oauth code on proxy/redirect
+  Stack <-- Proxy: redirect to user instance
+  Stack -> Proxy: calls
+  Proxy -> Provider: calls for token or refresh
+  Proxy <-- Provider: responds
+  Stack <-- Proxy: token
+```
+
+
+## Proxy Code Explained
+
+!!! info "reminder"
+    Feel free to check the proxy [code](https://forge.grandlyon.com/pocs/cozy/cozy-oauth-proxy) at all time when reading this documentation.
+
+The proxy is coded in golang.
+
+It is composed of six endpoints as seen above. The first endpoint to be called is **/auth**.
+
+#### auth
+
+Originally called from a cozy-stack trying to setup its konnector. The proxy gets these informations from the query:
+
+- client_id
+- duration
+- redirect_uri (auto inserted by the cozy-stack, except if you specify **skip_redirect_uri:true** in the couchdb)
+- response_type
+- state (as it was conceived by the cozy-stack)
+
+![auth_params](enedis-auth-params.png)
+
+The state will be merged with the instance name, then decomposed again when reaching /redirect. This way the proxy is able to keep track of the cozy instance originally calling.
+
+With all these informations, the proxy can contact the provider **/auth** endpoint to start the oauth dance.
+
+##### Enedis
+
+!!! warning "note"
+    See that a new composed state is sent to enedis, it is made of the former state conceived by the cozy-stack + the cozyOrigin instance name. This will be usefull when enedis is leading the oauth dance to the next step and we will need the name of the cozy to answer.
+
+Once the call is sent, enedis will point to the **/redirect** endpoint.
+
+##### Grdf
+
+> To be redacted
+
+#### redirect
+
+Retrieve the *code*, *usage_point_id*, and *state* answered by Enedis.
+
+Split the customed state that was modified in the **/auth** process. From this split it creates two variables :
+
+- state
+- host
+
+Finally redirect all these parameters in a query to the cozy-stack (the cozy-stack which is still waiting for an answer from its /auth call).
+
+!!! warning "state / instance"
+    The state must be recovered without the instance name, otherwise the cozy-stack won't recognized it and the handshake will fail.
+
+#### token
+
+Gathering from query or parameters all params.
+
+Sends a post request to the provider /token endpoint. 
+The stack will store the response params in a *accounts* couchdb database.
diff --git a/mkdocs.yml b/mkdocs.yml
index 8d0f9373c15fc5e232e4bfd72927412cc2cd1fd7..3c9d52dd00668bd71f0034bc69550a94472bb8ab 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -28,6 +28,7 @@ nav:
       - Scripts: easycozy/scripts.md
       - Commands: easycozy/commands.md
       - Tips: easycozy/tips.md
+      - Known errors: easycozy/known_errors.md
   - Ecolyo:
       - Introduction: ecolyo/index.md
       - Getting started:
@@ -52,6 +53,7 @@ nav:
           - Ecogesture: ecolyo/functionalities/ecogesture.md
           - Challenge: ecolyo/functionalities/challenge.md
           - Profile Type: ecolyo/functionalities/profile_type.md
+          - Analysis: ecolyo/functionalities/analysis.md
           - Usage events tracking: ecolyo/functionalities/usage_events_tracking.md
   - Pilote:
       - Pilote - TS - Back: