diff --git a/src/Controllers/ParameterController.ts b/src/Controllers/ParameterController.ts
index 2586a27c883c064a4c46f27b04ad25594704c430..cee60627d9b38d855dcc04c2ba83879d2d5d397a 100644
--- a/src/Controllers/ParameterController.ts
+++ b/src/Controllers/ParameterController.ts
@@ -35,8 +35,8 @@ const getDefaultWeights: Handler = async (req: Request, res: Response) => {
 
 const getDefaultExtraData: Handler = async (req: Request, res: Response) => {
   try {
-    const weights = await ParameterService.getDefaultExtraData();
-    return res.status(200).send(weights);
+    const extraData = await ParameterService.getDefaultExtraData();
+    return res.status(200).send(extraData);
   } catch (error) {
     const e = error as Error;
     logger.info(e.message);
@@ -57,9 +57,13 @@ const updateParameterValue: Handler = async (req: Request, res: Response) => {
         await ParameterService.updateExtraData(parameters);
         break;
       case ParameterType.TEE:
+        await ParameterService.updateTEE(parameters);
+        break;
       case ParameterType.BMR:
+        await ParameterService.updateBMR(parameters);
+        break;
       case ParameterType.GrowthEnergy:
-        await ParameterService.updateEquationConstant(parameters[0]);
+        await ParameterService.updateGrowthEnergy(parameters[0]);
         break;
       default:
         break;
@@ -73,8 +77,8 @@ const updateParameterValue: Handler = async (req: Request, res: Response) => {
 };
 
 router.get('/', getParameters);
-router.post('/weights/', getDefaultWeights);
-router.post('/extraData/', getDefaultExtraData);
+router.get('/weights/', getDefaultWeights);
+router.get('/extraData/', getDefaultExtraData);
 router.put('/parameterUpdate/', validate({ body: updateParameterValueBody }), updateParameterValue);
 
 export default router;
diff --git a/src/Models/DefaultExtraData.ts b/src/Models/DefaultExtraData.ts
index 2114155acff341cccff7e02478f7ab3fa1edb23f..171398d4cc63abbec5855b71c281c6f3c3b4a5d2 100644
--- a/src/Models/DefaultExtraData.ts
+++ b/src/Models/DefaultExtraData.ts
@@ -20,7 +20,7 @@ DefaultExtraData.init(
       primaryKey: true,
     },
     parameterType: DataTypes.STRING,
-    value: DataTypes.FLOAT,
+    value: DataTypes.FLOAT(25),
     order: DataTypes.INTEGER,
     description: DataTypes.STRING,
   },
diff --git a/src/Services/ParameterService.ts b/src/Services/ParameterService.ts
index 8430a176fadf1f364ca0cecaa390091590c222d8..06290043fca28b3d5374e82091b7a7d916296e72 100644
--- a/src/Services/ParameterService.ts
+++ b/src/Services/ParameterService.ts
@@ -196,7 +196,7 @@ const getParameters = async (): Promise<ParameterWrapperDTO> => {
   return res;
 };
 
-const updateEquationConstant = async (parameter: EquationConstantDTO): Promise<void> => {
+const updateGrowthEnergy = async (parameter: EquationConstantDTO): Promise<void> => {
   await EquationConstant.update(
     { value: parameter.value },
     {
@@ -204,13 +204,335 @@ const updateEquationConstant = async (parameter: EquationConstantDTO): Promise<v
         ageRange: parameter.ageRange,
         sex: parameter.sex,
         order: parameter.order,
+        parameterType: parameter.parameterType,
       },
     },
-  ).catch((err) => {
+  ).then((result) => {
+    if (result[0] === 0) {
+      throw new Error('No rows were updated.');
+    }
+  }).catch((err) => {
     throw err;
   });
 };
 
+const updateBMR = async (parameters: EquationConstantDTO[]): Promise<void> => {
+  const sexo: string = parameters[0].sex;
+  const edad: string = parameters[0].ageRange;
+  const orders: number[] = [];
+  parameters.forEach((parameter) => {
+    if (parameter.sex !== sexo || parameter.ageRange !== edad) {
+      throw new Error('Parameters sex and age must be the same for all array items.');
+    }
+    if (orders.includes(parameter.order)) {
+      throw new Error('Order must be different for all array items.');
+    }
+    orders.push(parameter.order);
+  });
+  switch (parameters[0].ageRange) {
+    case AgeBracket.a18_29: {
+      await EquationConstant.update(
+        { value: parameters[0].value },
+        {
+          where: {
+            ageRange: parameters[0].ageRange,
+            sex: parameters[0].sex,
+            order: parameters[0].order,
+            parameterType: parameters[0].parameterType,
+          },
+        },
+      ).then((result) => {
+        if (result[0] === 0) {
+          throw new Error('No rows were updated.');
+        }
+      }).catch((err) => {
+        throw err;
+      });
+      // eslint-disable-next-line no-await-in-loop
+      await EquationConstant.update(
+        { value: parameters[1].value },
+        {
+          where: {
+            ageRange: parameters[1].ageRange,
+            sex: parameters[1].sex,
+            order: parameters[1].order,
+            parameterType: parameters[1].parameterType,
+          },
+        },
+      ).then((result) => {
+        if (result[0] === 0) {
+          throw new Error('No rows were updated.');
+        }
+      }).catch((err) => {
+        throw err;
+      });
+      break;
+    }
+    case AgeBracket.a30_59: {
+      await EquationConstant.update(
+        { value: parameters[0].value },
+        {
+          where: {
+            ageRange: parameters[0].ageRange,
+            sex: parameters[0].sex,
+            order: parameters[0].order,
+            parameterType: parameters[0].parameterType,
+          },
+        },
+      ).then((result) => {
+        if (result[0] === 0) {
+          throw new Error('No rows were updated.');
+        }
+      }).catch((err) => {
+        throw err;
+      });
+      // eslint-disable-next-line no-await-in-loop
+      await EquationConstant.update(
+        { value: parameters[1].value },
+        {
+          where: {
+            ageRange: parameters[1].ageRange,
+            sex: parameters[1].sex,
+            order: parameters[1].order,
+            parameterType: parameters[1].parameterType,
+          },
+        },
+      ).then((result) => {
+        if (result[0] === 0) {
+          throw new Error('No rows were updated.');
+        }
+      }).catch((err) => {
+        throw err;
+      });
+      break;
+    }
+    case AgeBracket.a60: {
+      await EquationConstant.update(
+        { value: parameters[0].value },
+        {
+          where: {
+            ageRange: parameters[0].ageRange,
+            sex: parameters[0].sex,
+            order: parameters[0].order,
+            parameterType: parameters[0].parameterType,
+          },
+        },
+      ).then((result) => {
+        if (result[0] === 0) {
+          throw new Error('No rows were updated.');
+        }
+      }).catch((err) => {
+        throw err;
+      });
+      // eslint-disable-next-line no-await-in-loop
+      await EquationConstant.update(
+        { value: parameters[1].value },
+        {
+          where: {
+            ageRange: parameters[1].ageRange,
+            sex: parameters[1].sex,
+            order: parameters[1].order,
+            parameterType: parameters[1].parameterType,
+          },
+        },
+      ).then((result) => {
+        if (result[0] === 0) {
+          throw new Error('No rows were updated.');
+        }
+      }).catch((err) => {
+        throw err;
+      });
+      break;
+    }
+    default: {
+      throw new Error(`Age range ${parameters[0].ageRange} does not have BMR constants.`);
+    }
+  }
+};
+
+const updateTEE = async (parameters: EquationConstantDTO[]): Promise<void> => {
+  const sexo: string = parameters[0].sex;
+  const edad: string = parameters[0].ageRange;
+  const orders: number[] = [];
+  parameters.forEach((parameter) => {
+    if (parameter.sex !== sexo || parameter.ageRange !== edad) {
+      throw new Error('Parameters sex and age must be the same for all array items.');
+    }
+    if (orders.includes(parameter.order)) {
+      throw new Error('Order must be different for all array items.');
+    }
+    orders.push(parameter.order);
+  });
+  switch (parameters[0].ageRange) {
+    case AgeBracket.m0:
+    case AgeBracket.m1:
+    case AgeBracket.m2:
+    case AgeBracket.m3:
+    case AgeBracket.m4:
+    case AgeBracket.m5: {
+      for (let i = 0; i <= 5; i += 1) {
+        // eslint-disable-next-line no-await-in-loop
+        await EquationConstant.update(
+          { value: parameters[0].value },
+          {
+            where: {
+              ageRange: `${i} meses`,
+              order: parameters[0].order,
+              parameterType: parameters[0].parameterType,
+            },
+          },
+        ).then((result) => {
+          if (result[0] === 0) {
+            throw new Error('No rows were updated.');
+          }
+        }).catch((err) => {
+          throw err;
+        });
+        // eslint-disable-next-line no-await-in-loop
+        await EquationConstant.update(
+          { value: parameters[1].value },
+          {
+            where: {
+              ageRange: `${i} meses`,
+              order: parameters[1].order,
+              parameterType: parameters[1].parameterType,
+            },
+          },
+        ).then((result) => {
+          if (result[0] === 0) {
+            throw new Error('No rows were updated.');
+          }
+        }).catch((err) => {
+          throw err;
+        });
+      }
+      break;
+    }
+    case AgeBracket.m6:
+    case AgeBracket.m7:
+    case AgeBracket.m8:
+    case AgeBracket.m9:
+    case AgeBracket.m10:
+    case AgeBracket.m11: {
+      for (let i = 6; i <= 11; i += 1) {
+        // eslint-disable-next-line no-await-in-loop
+        await EquationConstant.update(
+          { value: parameters[0].value },
+          {
+            where: {
+              ageRange: `${i} meses`,
+              order: parameters[0].order,
+              parameterType: parameters[0].parameterType,
+            },
+          },
+        ).then((result) => {
+          if (result[0] === 0) {
+            throw new Error('No rows were updated.');
+          }
+        }).catch((err) => {
+          throw err;
+        });
+        // eslint-disable-next-line no-await-in-loop
+        await EquationConstant.update(
+          { value: parameters[1].value },
+          {
+            where: {
+              ageRange: `${i} meses`,
+              order: parameters[1].order,
+              parameterType: parameters[1].parameterType,
+            },
+          },
+        ).then((result) => {
+          if (result[0] === 0) {
+            throw new Error('No rows were updated.');
+          }
+        }).catch((err) => {
+          throw err;
+        });
+      }
+      break;
+    }
+    case AgeBracket.a1:
+    case AgeBracket.a2:
+    case AgeBracket.a3:
+    case AgeBracket.a4:
+    case AgeBracket.a5:
+    case AgeBracket.a6:
+    case AgeBracket.a7:
+    case AgeBracket.a8:
+    case AgeBracket.a9:
+    case AgeBracket.a10:
+    case AgeBracket.a11:
+    case AgeBracket.a12:
+    case AgeBracket.a13:
+    case AgeBracket.a14:
+    case AgeBracket.a15:
+    case AgeBracket.a16:
+    case AgeBracket.a17: {
+      for (let i = 1; i <= 17; i += 1) {
+        // eslint-disable-next-line no-await-in-loop
+        await EquationConstant.update(
+          { value: parameters[0].value },
+          {
+            where: {
+              ageRange: `${i} años`,
+              sex: parameters[0].sex,
+              order: parameters[0].order,
+              parameterType: parameters[0].parameterType,
+            },
+          },
+        ).then((result) => {
+          if (result[0] === 0) {
+            throw new Error('No rows were updated.');
+          }
+        }).catch((err) => {
+          throw err;
+        });
+        // eslint-disable-next-line no-await-in-loop
+        await EquationConstant.update(
+          { value: parameters[1].value },
+          {
+            where: {
+              ageRange: `${i} años`,
+              sex: parameters[1].sex,
+              order: parameters[1].order,
+              parameterType: parameters[1].parameterType,
+            },
+          },
+        ).then((result) => {
+          if (result[0] === 0) {
+            throw new Error('No rows were updated.');
+          }
+        }).catch((err) => {
+          throw err;
+        });
+        // eslint-disable-next-line no-await-in-loop
+        await EquationConstant.update(
+          { value: parameters[2].value },
+          {
+            where: {
+              ageRange: `${i} años`,
+              sex: parameters[2].sex,
+              order: parameters[2].order,
+              parameterType: parameters[2].parameterType,
+            },
+          },
+        ).then((result) => {
+          if (result[0] === 0) {
+            throw new Error('No rows were updated.');
+          }
+        }).catch((err) => {
+          throw err;
+        });
+      }
+      break;
+    }
+    default: {
+      throw new Error(`Age range ${parameters[0].ageRange} does not have TEE constants.`);
+    }
+  }
+};
+
 const updateDefaultWeight = async (parameter: DefaultWeightDTO): Promise<void> => {
   await DefaultWeight.update(
     { value: parameter.value },
@@ -218,9 +540,14 @@ const updateDefaultWeight = async (parameter: DefaultWeightDTO): Promise<void> =
       where: {
         ageRange: parameter.ageRange,
         sex: parameter.sex,
+        parameterType: parameter.parameterType,
       },
     },
-  ).catch((err) => {
+  ).then((result) => {
+    if (result[0] === 0) {
+      throw new Error('No rows were updated.');
+    }
+  }).catch((err) => {
     throw err;
   });
 };
@@ -233,9 +560,15 @@ const updatePercentage = async (params: DefaultExtraDataDTO[], total: number): P
       {
         where: {
           id: params[0].id,
+          parameterType: params[0].parameterType,
         },
+        returning: true,
       },
-    ).catch((err) => {
+    ).then((result) => {
+      if (result[0] === 0) {
+        throw new Error('No rows were updated.');
+      }
+    }).catch((err) => {
       throw err;
     });
     await DefaultExtraData.update(
@@ -243,9 +576,15 @@ const updatePercentage = async (params: DefaultExtraDataDTO[], total: number): P
       {
         where: {
           id: params[1].id,
+          parameterType: params[1].parameterType,
         },
+        returning: true,
       },
-    ).catch((err) => {
+    ).then((result) => {
+      if (result[0] === 0) {
+        throw new Error('No rows were updated.');
+      }
+    }).catch((err) => {
       throw err;
     });
     await DefaultExtraData.update(
@@ -253,13 +592,19 @@ const updatePercentage = async (params: DefaultExtraDataDTO[], total: number): P
       {
         where: {
           id: params[2].id,
+          parameterType: params[2].parameterType,
         },
+        returning: true,
       },
-    ).catch((err) => {
+    ).then((result) => {
+      if (result[0] === 0) {
+        throw new Error('No rows were updated.');
+      }
+    }).catch((err) => {
       throw err;
     });
   } else {
-    throw new Error('These percentages must add up to 100');
+    throw new Error('These percentages must add up to 100.');
   }
 };
 
@@ -269,9 +614,14 @@ const updatePair = async (param: DefaultExtraDataDTO, pairID: string): Promise<v
     {
       where: {
         id: param.id,
+        parameterType: param.parameterType,
       },
     },
-  ).catch((err) => {
+  ).then((result) => {
+    if (result[0] === 0) {
+      throw new Error('No rows were updated.');
+    }
+  }).catch((err) => {
     throw err;
   });
   await DefaultExtraData.update(
@@ -279,9 +629,14 @@ const updatePair = async (param: DefaultExtraDataDTO, pairID: string): Promise<v
     {
       where: {
         id: pairID,
+        parameterType: param.parameterType,
       },
     },
-  ).catch((err) => {
+  ).then((result) => {
+    if (result[0] === 0) {
+      throw new Error('No rows were updated.');
+    }
+  }).catch((err) => {
     throw err;
   });
 };
@@ -310,10 +665,10 @@ const updateExtraData = async (parameters: DefaultExtraDataDTO[]): Promise<void>
       if (ids.length === 3) {
         await updatePercentage(parameters, total);
       } else {
-        throw new Error('Too many parameters sent');
+        throw new Error('Too many parameters sent.');
       }
     } else {
-      throw new Error('Missing parameter for update');
+      throw new Error('Missing parameter for update.');
     }
   } else if (ids.includes(extraDataIDs.urbPopPerc)) {
     await updatePair(parameters[0], extraDataIDs.rurPopPerc);
@@ -333,13 +688,19 @@ const updateExtraData = async (parameters: DefaultExtraDataDTO[]): Promise<void>
       {
         where: {
           id: parameters[0].id,
+          parameterType: parameters[0].parameterType,
         },
+        returning: true,
       },
-    ).catch((err) => {
+    ).then((result) => {
+      if (result[0] === 0) {
+        throw new Error('No rows were updated.');
+      }
+    }).catch((err) => {
       throw err;
     });
   } else {
-    throw new Error('Invalid parameter ID');
+    throw new Error('Invalid parameter ID.');
   }
 };
 
@@ -348,7 +709,9 @@ export default {
   getDefaultWeights,
   getDefaultExtraData,
   getParameters,
-  updateEquationConstant,
   updateDefaultWeight,
   updateExtraData,
+  updateTEE,
+  updateBMR,
+  updateGrowthEnergy,
 };
diff --git a/swagger.yaml b/swagger.yaml
index b35eb72985d92234e01907306359a4cb30dd607b..07161ac1beff8bb7b2b061a521b7cb5527c35b90 100644
--- a/swagger.yaml
+++ b/swagger.yaml
@@ -104,7 +104,7 @@ paths:
     put:
       tags:
         - Parameters
-      summary: Update a certain parameter. The array should contain exactly one item, unless the parameters to be updated are a trio, in which case all three parameters should be included.
+      summary: Update a certain parameter. The array contains exactly one item, unless the parameters to be updated are a trio, in which case all three parameters must be included, or have the TEE/BMR parameter type in which case all equation constants must be included.
       requestBody:
         content:
           application/json: