1. Funcionameinto de la información nutricional
tspoonlab dispone de información nutricional asociada a ingredientes/productos y permite el cálculo de la información nutricional para los productos elaborados o finales.
Los parámetros que contemplamos son
En el caso de ingredientes/productos dicha información debe ser siempre expresada para 100 g.
En el caso de las elaboraciones se puede expresar para 100 g, para el peso total de la elaboración o para una unidad de la elaboración.
Se puede bajo demanda calcular la información nutricional de una elaboración o si se prefiere asignarla directamente. Este último caso es el recomendado cuando en en los procesos de elaboración se realizan acciones (freír, horno) que alteran la información nutricional de los ingredientes.
La energia expresada en Kj se calcula automáticamente en función de las Kcal.
1 Kj = 4,184 Kcal
Las Kcal se pueden asignar en base a los valores proporcionados en la fichas técnicas de los proveedores o calcular en base a la formula
Kcal = fat * 9 + carbohydrates * 4 + proteins * 4 + fiber * 2
1.1. Rest API : Login
Para poder hacer llamadas a nuestas api's lo primero que ncesitamos es identificarnos mediante una llamada de login
Esa llamada nos retornara una token que después debemos asociar en cada llamada posterior.
Este shell script muestra como authenticar-nos mediante curl
[email protected]
password=XXXXXXX
url=https://www.tspoonlab.com/recipes/api
authenticate='username='$username'&password='$password
echo -n 'rememberme:' > rememberme.txt
curl -v --data $authenticate $url/login >> rememberme.txt
En las llamadas posteriores debemos añadir a nuestros headers el token recibido de la llamada de login
curl -X PUT -v -H "$(cat rememberme.txt)" $url/integration/llamada
1.2. Rest API : Seleccionar un centro de coste/restaurante
Las peticiones que se describen en los apartados siguientes hacen referencia a un centro de coste. Que en la mayoría de los casos se correspondería con un restaurante
Para recuperar la lista de centros de costes y sus identificadores consulta el documento
El identificador de cenetro de coste se corresponde al campo idOrderCenter de la classe UserOrderCenter
Una vez tenemos el identificador este deberá añadirse a los headers para que sea utilizado en llamadas posteriores
echo -n 'order:351583444167656299610202XXXXXXXXXXXX' >> rememberme.txt
Por tanto en nuestros request headers debemos especificar tanto el token devuelto por el login como el identificador del centro de coste
rememberme:aGVucnkudXBzYWxsLmRAZXXXXXXXXXXXXXXXXXX
order:351583444167656299610202XXXXXXXXXXXX
1.3. Rest API : Asignar información nutricional a un producto
Debemos disponer del identificador del producto idComponent y realizaremos la siguiente llamada
PUT
https://www.tspoonlab.com/recipes/api/ingredient/{idComponent}/nutritional
https://www.tspoonlab.com/recipes/api/recipe/{idComponent}/nutritional
https://www.tspoonlab.com/recipes/api/dish/{idComponent}/nutritional
pasaremos en el request body
public class NewComponentNutritional {
private Double energy;
private Double fat;
private Double saturated;
private Double proteins;
private Double carbohydrates;
private Double sugar;
private Double salt;
private Double fiber;
private Boolean nutritionalPercent;
private Boolean nutritionalUnitari;
private String idComponentUnitNutritional;
}
nutricinalPercent toma valor true si los valores son para 100 g. Siempre para ingredientes/productos base.
nutricinalUnitari toma valor true si se envian valores para la unidad de la elaboración. En este caso el campo idComponentUnitNutritional nos indicará el id de la unidad de la elaboración para la que se envia información.
Si ambos (nutricinalPercent, nutricinalUnitari) son nulos o toman el vlor falso los valores enviados son para la totalidad de la elaboración.
1.4. Rest API : calcular la información nutricional
Debemos disponer del identificador idComponent del producto elaborado (receta o plato) y realizaremos la siguiente llamada
GET
https://www.tspoonlab.com/recipes/api/recipe/{idComponent}/nutritional
https://www.tspoonlab.com/recipes/api/dish/{idComponent}/nutritional
En el calculo podemos indicar si queremos realizar-lo para 100 g para el total o para una unidad de cantidad
En la llamada deberemos añadir estos dos parámetros
....?percent=false&unitari=false&idComponentUnit=null
percent a false y unitari a false calcula para el total.
Si queremos calcular para 100 g percent a true y unitari a false
Si queremos calcular para la unidad unitari a true
En este caso en idComponentUnit especificaremos el id de la unidad dentro de la elaboración para el que queramos realizar el cálculo
Nos retornará el valor calculado
class NutritionalInfo {
Double energy;
Double carbohydrates;
Double sugar;
Double fat;
Double saturated;
Double proteins;
Double salt;
Double fiber;
boolean nutritionalPercent;
boolean nutritionalUnitari;
String idComponentUnitNutritional;
List<EntityBaseQuantity> listIncomplete;
List<EntityBaseQuantity> listNoInfo;
List<EntityBaseQuantity> listNoInfoCarbohydrates;
List<EntityBaseQuantity> listNoInfoSugar;
List<EntityBaseQuantity> listNoInfoFat;
List<EntityBaseQuantity> listNoInfoSaturated;
List<EntityBaseQuantity> listNoInfoProteins;
List<EntityBaseQuantity> listNoInfoSalt;
List<EntityBaseQuantity> listNoInfoFiber;
List<EntityBaseQuantity> listNoInfoEnergy;
}
class EntityBaseQuantity {
String id;
String descr;
Short type;
Long color;
}
energy se corresponde a las kcal. Se envian tambien todos los valores en caso de que se hayan podido calcular o null en caso contrario
Puede ocurrir que no se pueda calcular porque la aplicación no puede convertir la cantidad usada de un producto/ingrediente en la elaboración a kg. Estos casos quedaran reflejados en listIncomplete
También puede ocurrir que el ingrediente que forma parte de la elaboración no se especifico alguno de los parámetros de información nutricional. Si una elaboración tiene tres productos y para uno de ellos no se especifico el parámetro fat . Se retornará nulo para fat y se indicará que no se puede realizar el calculo ya que uno de los ingredientes no tiene información. Se reflejara en listNoInfoFat o el correspondiente para el resto de valores.
listNotInfo tiene aquellos productos que no tienen nada de información nutricional
nutricinalPercent toma valor true si ha calculado es para 100gr
nutricinalUnitari toma valor true si ha calculado es para la unidad de la elaboración. En este caso el campo idComponentUnitNutritional nos indicará el id de la unidad de la receta para la que se ha realizado el cálculo.
en caso contrario se calcula para la totalidad de la elaboración