diff --git a/app.py b/app.py
index b34263512b4ad67db2ad4e46c026d86ad8a2565f..b86c821a0b5517845bbfc85d9bdb5257053cd447 100644
--- a/app.py
+++ b/app.py
@@ -237,7 +237,29 @@ def database_store_kpi_relative():
     """
     #if request.json:
     if request:
-        return database.database_store_kpi(cnx, request, True)
+        return database.database_store_kpi(cnx, request, relative=True)
+    else:
+        return constants.ERROR_JSON_NEEDED
+
+@app.get("/database/store/kpi_area")
+def database_store_kpi_area():
+    """
+    The json provided should have the same format that json with the kpi
+    """
+    #if request.json:
+    if request:
+        return database.database_store_kpi(cnx, request, area=True)
+    else:
+        return constants.ERROR_JSON_NEEDED
+
+@app.get("/database/store/kpi_relative_area")
+def database_store_kpi_relative_area():
+    """
+    The json provided should have the same format that json with the kpi
+    """
+    #if request.json:
+    if request:
+        return database.database_store_kpi_relative_area(cnx, request)
     else:
         return constants.ERROR_JSON_NEEDED
 
diff --git a/src/constants.py b/src/constants.py
index 0bb333dc9882eccfd793c39477856740aaf1fe9e..662c2018822562e8c59352e98940dec0b69bc707 100644
--- a/src/constants.py
+++ b/src/constants.py
@@ -82,7 +82,8 @@ VALUES(%s, %s, %s, %s, %s, %s)
 sql_get_kpis_data = """SELECT id, kpi_name, kpi_full_name, parent_id, kpi_level, popularity, use_case_id FROM kpi"""
 sql_get_kpi_from_case_ids = """SELECT id, kpi_name, kpi_full_name, parent_id, kpi_level, popularity, use_case_id FROM kpi WHERE use_case_id IN (%s)"""
 
-sql_action_kpi = """SELECT id, action_id, kpi_id, kpi_name, use_case_id, absolute FROM kpi_action WHERE kpi_id = %s"""
+sql_action_kpi = """SELECT action_id, kpi_id, kpi_name, use_case_id, absolute FROM kpi_action WHERE kpi_id = %s"""
+sql_action_kpi_zone = """SELECT action_id, kpi_id, kpi_name, use_case_id, absolute FROM kpi_action WHERE kpi_id = %s and ZoneId= %s"""
 
 sql_insert_action_kpi = """
 INSERT IGNORE INTO kpi_action(action_id, kpi_id, kpi_name, use_case_id, absolute, relative, geographical, zoneId)
@@ -94,3 +95,15 @@ UPDATE kpi_action
 SET action_id = %s, kpi_id = %s, kpi_name = %s, use_case_id = %s, absolute = %s, relative = %s, geographical = %s, zoneId = %s
 WHERE kpi_id = %s
 """
+
+sql_update_action_kpi_area = """
+UPDATE kpi_action 
+SET action_id = %s, kpi_id = %s, geographical = %s, zoneId = %s
+WHERE kpi_id = %s
+"""
+
+sql_update_action_kpi_relative_area = """
+UPDATE kpi_action 
+SET action_id = %s, kpi_id = %s, relative = %s
+WHERE kpi_id = %s and zoneId = %s
+"""
diff --git a/src/database.py b/src/database.py
index d12e563046decbf9ed9d8bc257a9805b8d160497..73ad4a929f0a6d7d58e778a7a49cbf7f72ed3ab0 100644
--- a/src/database.py
+++ b/src/database.py
@@ -65,7 +65,7 @@ def database_save_plan(cnx, request):
                                     intermediate_nodes)
     return constants.ALL_RIGHT
 
-def database_store_kpi(cnx, request, relative=False):
+def database_store_kpi(cnx, request, relative=False, area=False):
     """
     Stores kpi data from select json file in BD
     :return:
@@ -80,6 +80,8 @@ def database_store_kpi(cnx, request, relative=False):
     kpis_bd_bio_data = {}
     pos = 0
     for key in keys_1_level:
+        if area == True and key == 'area':
+            area = parsed_json['area']
         if key == 'bilbao':
             cursor.execute(constants.sql_get_kpi_from_case_ids, ['BIO'])
             ret = cursor.fetchall()
@@ -94,7 +96,7 @@ def database_store_kpi(cnx, request, relative=False):
                     'use_case_id': row[6],
                 }
                 pos += 1
-    load_json_kpi_data(cnx, parsed_json['bilbao'], 0, kpis_bd_bio_data, 'BIO', relative)
+    load_json_kpi_data(cnx, parsed_json['bilbao'], 0, kpis_bd_bio_data, 'BIO', relative=relative, area=area)
     return constants.ALL_RIGHT
 
 def kpi_by_name_level(cnx, kpi_name, kpi_level, case_id, parent_id=None):
@@ -179,20 +181,22 @@ def update_kpi_action(cnx, value, kpi_name, case_id, parent_id):
         cursor.execute(constants.sql_insert_action_kpi, [4, parent_id, kpi_name, case_id, value, None, None, None])
     cnx.commit()
 
-def get_action_kpi(cnx, action_kpi_id):
+def get_action_kpi(cnx, action_kpi_id, zone_id=False):
     cursor = cnx.cursor(buffered=True)
-    cursor.execute(constants.sql_action_kpi, [action_kpi_id])
+    if zone_id:
+        cursor.execute(constants.sql_action_kpi_zone, [action_kpi_id, zone_id])
+    else:
+        cursor.execute(constants.sql_action_kpi, [action_kpi_id])
     ret = cursor.fetchall()
     res_dict = {}
     if ret and len(ret) == 1:
         result = ret[0]
         res_dict = {
-            'id': result[0],
-            'action_id': result[1],
-            'kpi_id': result[2],
-            'kpi_name': result[3],
-            'use_case_id': result[4],
-            'absolute': result[5],
+            'action_id': result[0],
+            'kpi_id': result[1],
+            'kpi_name': result[2],
+            'use_case_id': result[3],
+            'absolute': result[4],
            # 'relative': ret[6],
            # 'geographical': ret[7],
            # 'zone_id': ret[8],
@@ -207,17 +211,75 @@ def update_kpi_action_relative(cnx, value, kpi_name, case_id, relative, parent_i
         cursor.execute(constants.sql_update_action_kpi, [14, parent_id, kpi_name, case_id, value, relative_data, None, None, parent_id])
         cnx.commit()
 
-def load_json_kpi_data(cnx, json, level, kpis_bd_bio_data, case_id, relative=False, parent_id=None):
+def update_kpi_action_area(cnx, value, kpi_name, case_id, area, parent_id):
+    cursor = cnx.cursor(buffered=True)
+    kpi_action = get_action_kpi(cnx, parent_id)
+    if kpi_action and value != 0:
+        cursor.execute(constants.sql_update_action_kpi_area, [6, parent_id, value, area, parent_id])
+        cnx.commit()
+
+def update_kpi_action_relative_area(cnx, value, kpi_name, case_id, relative_area, parent_id):
+    cursor = cnx.cursor(buffered=True)
+    kpi_action = get_action_kpi(cnx, parent_id, zone_id=relative_area)
+    if kpi_action and value != 0:
+        relative_data = (kpi_action['absolute'] - value) / (value * 100)
+        cursor.execute(constants.sql_update_action_kpi_relative_area,
+                       [14, parent_id, relative_data, parent_id, relative_area])
+        cnx.commit()
+
+def load_json_kpi_data(
+        cnx, json, level, kpis_bd_bio_data, case_id, relative=False, area=False, relative_area=False, parent_id=None):
     if isinstance(json, dict):
         for json_key in json.keys():
             key_data = get_json_key_bd_data(json_key, level, kpis_bd_bio_data, parent_id)
             if not key_data:
                 key_data = kpi_by_name_level(cnx, json_key, level, case_id, parent_id)
-            load_json_kpi_data(cnx, json[json_key], level+1, kpis_bd_bio_data, case_id, relative, key_data['id'])
+            load_json_kpi_data(cnx, json[json_key], level+1, kpis_bd_bio_data, case_id, relative=relative, area=area,
+                               relative_area=relative_area, parent_id=key_data['id'])
     else:
         parent_dict = get_kpi_data_by_id(parent_id, kpis_bd_bio_data)
         if parent_dict:
             if relative:
-                update_kpi_action_relative(cnx, json, parent_dict['kpi_name'], case_id, relative, parent_dict['id'])
+                update_kpi_action_relative(cnx, json, parent_dict['kpi_name'], case_id, relative,
+                                           parent_id=parent_dict['id'])
+            elif area:
+                update_kpi_action_area(cnx, json, parent_dict['kpi_name'], case_id, area, parent_id=parent_dict['id'])
+            elif relative_area:
+                update_kpi_action_relative_area(cnx, json, parent_dict['kpi_name'], case_id, relative_area,
+                                                parent_id=parent_dict['id'])
             else:
                 update_kpi_action(cnx, json, parent_dict['kpi_name'], case_id, parent_dict['id'])
+
+def database_store_kpi_relative_area(cnx, request):
+    """
+    Stores kpi data from select json file in BD
+    :return:
+    """
+    cursor = cnx.cursor(buffered=True)
+    dic = request.args.to_dict()
+    data = [key for key in dic.keys()]
+    file1 = open("extra_data/%s" % data[0], "r")
+    file_contents= file1.read()
+    parsed_json = json.loads(file_contents)
+    keys_1_level = parsed_json.keys()
+    kpis_bd_bio_data = {}
+    pos = 0
+    for key in keys_1_level:
+        if key == 'area':
+            relative_area = parsed_json['area']
+        if key == 'bilbao':
+            cursor.execute(constants.sql_get_kpi_from_case_ids, ['BIO'])
+            ret = cursor.fetchall()
+            for row in ret:
+                kpis_bd_bio_data[pos] = {
+                    'id': row[0],
+                    'kpi_name': row[1],
+                    'kpi_full_name': row[2],
+                    'parent_id': row[3],
+                    'kpi_level': row[4],
+                    'popularity': row[5],
+                    'use_case_id': row[6],
+                }
+                pos += 1
+    load_json_kpi_data(cnx, parsed_json['bilbao'], 0, kpis_bd_bio_data, 'BIO', relative_area=relative_area)
+    return constants.ALL_RIGHT
diff --git a/templates/index.html b/templates/index.html
index 266871bf68947cee43d4a82b74a468cbd43e1538..1ac49b363ec6196888a880350e8eea80123539ec 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -223,8 +223,7 @@ Created on: 16/01/2023
         <p>Input: <br>
             A json file that matches the structure of the response of /planner/plan_detail
         </p>
-
-     <h4>/database/store/kpi_relative</h4>
+     <h4>/database/store/kpi</h4>
         <p>
             Takes a json file that matches the structure that /store/kpi creates and it stores it into the database.<br>
         </p>
@@ -247,7 +246,53 @@ Created on: 16/01/2023
               </tr>
             </tbody>
         </table>
-     <h4>/database/store/kpi</h4>
+    <h4>/database/store/kpi_relative</h4>
+        <p>
+            Takes a json file that matches the structure that /store/kpi creates and it stores it into the database.<br>
+        </p>
+        <p>Input</p>
+        <table class="table table-striped">
+            <thead class="thead-dark">
+              <tr>
+                <th scope="col">Parameter</th>
+                <th scope="col">Mandatory</th>
+                <th scope="col">Data</th>
+                <th scope="col">Example</th>
+                <th scope="col">Regexp</th>
+              </tr>
+            </thead>
+            <tbody>
+              <tr>
+              </tr>
+              <tr>
+                <th scope="row">Json</th> <td>Yes</td> <td>str</td> <td>file.json</td> <td>-</td>
+              </tr>
+            </tbody>
+        </table>
+    <h4>/database/store/kpi_area</h4>
+        <p>
+            Takes a json file that matches the structure that /store/kpi creates and it stores it into the database.<br>
+        </p>
+        <p>Input</p>
+        <table class="table table-striped">
+            <thead class="thead-dark">
+              <tr>
+                <th scope="col">Parameter</th>
+                <th scope="col">Mandatory</th>
+                <th scope="col">Data</th>
+                <th scope="col">Example</th>
+                <th scope="col">Regexp</th>
+              </tr>
+            </thead>
+            <tbody>
+              <tr>
+              </tr>
+              <tr>
+                <th scope="row">Json</th> <td>Yes</td> <td>str</td> <td>file.json</td> <td>-</td>
+              </tr>
+            </tbody>
+        </table>
+     <h4>/database/store/kpi_area_relative</h4>
         <p>
             Takes a json file that matches the structure that /store/kpi creates and it stores it into the database.<br>
         </p>