nutrikom./Science & sources

THE IDEAS BEHIND THE NUMBERS

Explore the science

The data, calculations and their limits.

Complete list without JavaScript

You can still read the items and sources if the map cannot load.

30 objects · 22 links · 7 types

Fibre

Nutrient

How Nutrikom uses this

Amount reported by the source for this portion, in grams. A value being present does not guarantee that its definition has been verified.

Essential limitation

A reported value is not a personal measurement. Missing does not mean zero.

Connections with other items

  • No connection is shown for this item in this version of the map. This does not mean it is unused in Nutrikom.

The sources

View reference excerpt

Technical details

Fibre

Source-reported nutrient values for the selected portion; unit and definition remain distinct.

nut-fiber · r1 · champ fiber / meal-coverage-v1

plugin/assets/js/product-v3/app.js · L27–27 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 8a386ac783cd97c46c7b6ddc08b4e834f60d3397

['fiber','g','Fibre','Fibres']

['fiber','g','Fibre','Fibres']

plugin/src/WordPress/AI/MealCoverage.php · L10–10 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 7fae982e6415a829204836698cd02ec831256b57

'fiber'=>'g'

'fiber'=>'g'
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Saturated fat

Nutrient

How Nutrikom uses this

Amount reported by the source for this portion, in grams. A value being present does not guarantee that its definition has been verified.

Essential limitation

A reported value is not a personal measurement. Missing does not mean zero.

Connections with other items

  • No connection is shown for this item in this version of the map. This does not mean it is unused in Nutrikom.

The sources

View reference excerpt

Technical details

Saturated fat

Source-reported nutrient values for the selected portion; unit and definition remain distinct.

nut-saturated_fat · r1 · champ saturated_fat / meal-coverage-v1

plugin/assets/js/product-v3/app.js · L27–27 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 8a386ac783cd97c46c7b6ddc08b4e834f60d3397

['saturated_fat','g','Saturated fat','Graisses saturées']

['saturated_fat','g','Saturated fat','Graisses saturées']

plugin/src/WordPress/AI/MealCoverage.php · L10–10 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 7fae982e6415a829204836698cd02ec831256b57

'saturated_fat'=>'g'

'saturated_fat'=>'g'
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Sodium

Nutrient

How Nutrikom uses this

Amount reported by the source for this portion, in milligrams. A value being present does not guarantee that its definition has been verified.

Essential limitation

A reported value is not a personal measurement. Missing does not mean zero.

Connections with other items

  • No connection is shown for this item in this version of the map. This does not mean it is unused in Nutrikom.

The sources

View reference excerpt

Technical details

Sodium

Source-reported nutrient values for the selected portion; unit and definition remain distinct.

nut-sodium · r1 · champ sodium / meal-coverage-v1

plugin/assets/js/product-v3/app.js · L28–28 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 8a386ac783cd97c46c7b6ddc08b4e834f60d3397

['sodium','mg','Sodium','Sodium']

['sodium','mg','Sodium','Sodium']

plugin/src/WordPress/AI/MealCoverage.php · L10–10 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 7fae982e6415a829204836698cd02ec831256b57

'sodium'=>'mg'

'sodium'=>'mg'
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Total sugars

Nutrient

How Nutrikom uses this

Amount reported by the source for this portion, in grams. A value being present does not guarantee that its definition has been verified.

Essential limitation

A reported value is not a personal measurement. Missing does not mean zero.

Connections with other items

  • No connection is shown for this item in this version of the map. This does not mean it is unused in Nutrikom.

The sources

View reference excerpt

Technical details

Total sugars

Source-reported nutrient values for the selected portion; unit and definition remain distinct.

nut-sugar · r1 · champ sugar / meal-coverage-v1

plugin/assets/js/product-v3/app.js · L28–28 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 8a386ac783cd97c46c7b6ddc08b4e834f60d3397

['sugar','g','Total sugars','Sucres totaux']

['sugar','g','Total sugars','Sucres totaux']

plugin/src/WordPress/AI/MealCoverage.php · L10–10 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 7fae982e6415a829204836698cd02ec831256b57

'sugar'=>'g'

'sugar'=>'g'
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Protein

Nutrient

How Nutrikom uses this

Amount reported by the source for this portion, in grams. A value being present does not guarantee that its definition has been verified.

Essential limitation

A reported value is not a personal measurement. Missing does not mean zero.

Connections with other items

The sources

View reference excerpt

Technical details

Protein

Source-reported nutrient values for the selected portion; unit and definition remain distinct.

nut-protein · r1 · champ protein / meal-coverage-v1

plugin/assets/js/product-v3/app.js · L25–25 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 8a386ac783cd97c46c7b6ddc08b4e834f60d3397

['protein','g','Protein','Protéines']

['protein','g','Protein','Protéines']

plugin/src/WordPress/AI/MealCoverage.php · L9–9 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 7fae982e6415a829204836698cd02ec831256b57

'protein'=>'g'

'protein'=>'g'
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Reported carbohydrate

Nutrient

How Nutrikom uses this

Amount reported by the source for this portion, in grams. A value being present does not guarantee that its definition has been verified.

Essential limitation

Reported carbohydrate, not automatically verified available carbohydrate or glucose prediction.

Connections with other items

The sources

View reference excerpt

Technical details

Reported carbohydrate

Source-reported nutrient values for the selected portion; unit and definition remain distinct.

nut-carbohydrate · r1 · champ carbohydrate / meal-coverage-v1

plugin/assets/js/product-v3/app.js · L26–26 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 8a386ac783cd97c46c7b6ddc08b4e834f60d3397

['carbohydrate','g','Carbohydrate','Glucides']

['carbohydrate','g','Carbohydrate','Glucides']

plugin/src/WordPress/AI/MealCoverage.php · L9–9 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 7fae982e6415a829204836698cd02ec831256b57

'carbohydrate'=>'g'

'carbohydrate'=>'g'
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Total fat

Nutrient

How Nutrikom uses this

Amount reported by the source for this portion, in grams. A value being present does not guarantee that its definition has been verified.

Essential limitation

A reported value is not a personal measurement. Missing does not mean zero.

Connections with other items

The sources

View reference excerpt

Technical details

Total fat

Source-reported nutrient values for the selected portion; unit and definition remain distinct.

nut-fat · r1 · champ fat / meal-coverage-v1

plugin/assets/js/product-v3/app.js · L26–26 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 8a386ac783cd97c46c7b6ddc08b4e834f60d3397

['fat','g','Total fat','Graisses totales']

['fat','g','Total fat','Graisses totales']

plugin/src/WordPress/AI/MealCoverage.php · L9–9 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 7fae982e6415a829204836698cd02ec831256b57

'fat'=>'g'

'fat'=>'g'
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Reported energy

Reported measure

How Nutrikom uses this

Energy reported by the source for the portion. It is separate from the total calculated using the 4/4/9 convention.

Essential limitation

The portion and source basis define the calculation, not actual consumption.

Connections with other items

  • No connection is shown for this item in this version of the map. This does not mean it is unused in Nutrikom.

The sources

View reference excerpt

Technical details

Reported energy

Energy reported by the source, separate from the illustrative 4/4/9 macro total.

measure-energy · r1 · calories / kcal

plugin/assets/js/product-v3/app.js · L25–25 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 8a386ac783cd97c46c7b6ddc08b4e834f60d3397

['calories','kcal','Energy','Énergie']

['calories','kcal','Energy','Énergie']

plugin/src/WordPress/AI/MealCoverage.php · L9–9 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 7fae982e6415a829204836698cd02ec831256b57

'calories'=>'kcal'

'calories'=>'kcal'
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Portion and basis

Reported measure

How Nutrikom uses this

The entered quantity multiplies a reference portion. A quantity in grams requires an explicitly reported mass.

Essential limitation

The portion and source basis define the calculation, not actual consumption.

Connections with other items

The sources

View reference excerpt

Technical details

Portion and basis

A multiplier of a defined portion. Grams require an explicit mass basis.

measure-portion · r1 · serving / quantity / grams

plugin/assets/js/product-alpha-v12/composer-state.js · L441–479 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 784ea350a1e6c0422509255cc10b7f21bbea32c3

function withCalculatedNutrients

function withCalculatedNutrients(entry) {
  const factor = entry.quantity;
  const nutrients = {};
  for (const key of NUTRIENTS) {
    const value = nullableFinite(entry.serving?.[key]);
    nutrients[key] = value === null ? null : round1(value * factor);
  }

  return { ...entry, ...nutrients };
}

function finite(value) {
  const number = Number(value);

  return Number.isFinite(number) ? number : 0;
}

function nullableFinite(value) {
  if (value === null || value === undefined || value === '') {
    return null;
  }
  const number = Number(value);

  return Number.isFinite(number) ? number : null;
}

function isFoodResult(item) {
  return item !== null
    && typeof item === 'object'
    && foodResultId(item) !== ''
    && canonicalFoodNameForDedup(item.food_name) !== '';
}

function foodResultId(item) {
  return String(item?.food_id ?? '').trim();
}

function foodResultKey(item) {
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Portion calculation

Calculation rule

How Nutrikom uses this

Multiplies the reference values by the entered quantity, keeping the rounding applied to each food.

Essential limitation

A descriptive or technical rule, not clinical validation.

Connections with other items

The sources

View reference excerpt

Technical details

Portion allocation

Scale source values by the entered portion; retain the native rounding per item.

rule-portion · r1 · withCalculatedNutrients

plugin/assets/js/product-alpha-v12/composer-state.js · L441–479 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 784ea350a1e6c0422509255cc10b7f21bbea32c3

function withCalculatedNutrients

function withCalculatedNutrients(entry) {
  const factor = entry.quantity;
  const nutrients = {};
  for (const key of NUTRIENTS) {
    const value = nullableFinite(entry.serving?.[key]);
    nutrients[key] = value === null ? null : round1(value * factor);
  }

  return { ...entry, ...nutrients };
}

function finite(value) {
  const number = Number(value);

  return Number.isFinite(number) ? number : 0;
}

function nullableFinite(value) {
  if (value === null || value === undefined || value === '') {
    return null;
  }
  const number = Number(value);

  return Number.isFinite(number) ? number : null;
}

function isFoodResult(item) {
  return item !== null
    && typeof item === 'object'
    && foodResultId(item) !== ''
    && canonicalFoodNameForDedup(item.food_name) !== '';
}

function foodResultId(item) {
  return String(item?.food_id ?? '').trim();
}

function foodResultKey(item) {
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Nutrient totals

Calculation rule

How Nutrikom uses this

Adds the reported nutrient values. If some are missing, the total remains partial: an unknown value does not become zero.

Essential limitation

A descriptive or technical rule, not clinical validation.

Connections with other items

The sources

View reference excerpt

Technical details

Nutrient sums

Add available nutrient values. A subtotal with missing values remains partial.

rule-aggregate · r1 · aggregateFoods / fromItems

plugin/assets/js/product-alpha-v12/composer-state.js · L207–247 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 784ea350a1e6c0422509255cc10b7f21bbea32c3

function aggregateFoods

function aggregateFoods(foods) {
  const totals = {};
  for (const key of NUTRIENTS) {
    let sum = 0;
    let present = false;
    for (const food of foods) {
      const value = nullableFinite(food[key]);
      if (value !== null) {
        sum += value;
        present = true;
      }
    }
    totals[key] = present ? round1(sum) : null;
  }

  return totals;
}

export function macroEnergySplit(foods) {
  const selectedFoods = Array.isArray(foods) ? foods : [];
  const unavailable = {
    available: false,
    neutral: false,
    carbohydrate_g: null,
    protein_g: null,
    fat_g: null,
    carbohydrate_kcal: null,
    protein_kcal: null,
    fat_kcal: null,
    total_macro_kcal: null,
    carbohydrate_percent: null,
    protein_percent: null,
    fat_percent: null,
  };
  if (selectedFoods.length === 0) {
    return unavailable;
  }

  let carbohydrate = 0;
  let protein = 0;
  le
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Complete or missing data

Calculation rule

How Nutrikom uses this

Shows whether the data for each nutrient are complete, partial or missing, and which results can be displayed.

Essential limitation

A descriptive or technical rule, not clinical validation.

Connections with other items

The sources

View reference excerpt

Technical details

Coverage and unknowns

Identify complete, partial or unavailable fields; keep coverage separate from a result.

rule-coverage · r1 · meal-coverage-v1

plugin/src/WordPress/AI/MealCoverage.php · L19–35 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 7fae982e6415a829204836698cd02ec831256b57

public static function fromItems

public static function fromItems(array $items): array
    {
        $rows = []; $total = count($items);
        foreach (self::UNITS as $key => $unit) {
            $sum = 0.0; $known = 0;
            foreach ($items as $item) {
                $value = $item['nutrients'][$key] ?? null;
                if ($value === null) continue;
                $sum += (float) $value; $known++;
            }
            $status = $known === 0 ? 'unavailable' : ($known === $total ? 'complete' : 'partial');
            $rows[$key] = ['key'=>$key, 'value'=>$known ? round($sum, 1) : null,
                'unit'=>$unit, 'status'=>$status, 'known_foods'=>$known, 'total_foods'=>$total,
                'source'=>'client_submitted_food_entry', 'serving_basis'=>'selected_portions',
                'reference_eligible'=>$status === 'complete' && in_array($key, self::REFERENCES, true)];
        }
        $missin
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

4/4/9 macro split

Calculation rule

How Nutrikom uses this

Shows an illustrative energy split between carbohydrate, protein and fat using the 4/4/9 convention. It is separate from the energy reported by the source.

Essential limitation

A descriptive or technical rule, not clinical validation.

Connections with other items

The sources

View reference excerpt

Technical details

4/4/9 macro split

An illustrative macro split based on 4/4/9, distinct from reported energy.

rule-macro · r1 · macroEnergySplit

plugin/assets/js/product-alpha-v12/composer-state.js · L225–259 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 784ea350a1e6c0422509255cc10b7f21bbea32c3

function macroEnergySplit

function macroEnergySplit(foods) {
  const selectedFoods = Array.isArray(foods) ? foods : [];
  const unavailable = {
    available: false,
    neutral: false,
    carbohydrate_g: null,
    protein_g: null,
    fat_g: null,
    carbohydrate_kcal: null,
    protein_kcal: null,
    fat_kcal: null,
    total_macro_kcal: null,
    carbohydrate_percent: null,
    protein_percent: null,
    fat_percent: null,
  };
  if (selectedFoods.length === 0) {
    return unavailable;
  }

  let carbohydrate = 0;
  let protein = 0;
  let fat = 0;
  for (const food of selectedFoods) {
    const values = [food?.carbohydrate, food?.protein, food?.fat].map(nullableFinite);
    if (values.some((value) => value === null)) {
      return unavailable;
    }
    carbohydrate += values[0];
    protein += values[1];
    fat += values[2];
  }

  const carbohydrateKcal = carbohydrate * 4;
  const proteinKcal = protein
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Food contributions and ties

Calculation rule

How Nutrikom uses this

Describes how foods contribute to nutrient amounts and identifies ties when the required data are complete and the foods are identified. Rounding and calculation details remain traceable.

Essential limitation

A descriptive or technical rule, not clinical validation.

Connections with other items

The sources

View reference excerpt

Technical details

Contributions and ties

Describe contributions and ties only with the required complete data and identities.

rule-contribution · r1 · meal-reading-relations-v1

plugin/assets/js/product-v3/meal-relations.js · L13–24 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · d498f3819a2ddf87783584839c52c60de4f53703

export function projectRelations

export function projectRelations(foods, nutrients, angle = 'general') {
  const identitiesValid = foods.every(food => (typeof food.id === 'string' && food.id.trim()) || Number.isInteger(food.id))
    && new Set(foods.map(food => String(food.id))).size === foods.length;
  const states = {};
  for (const [key,row] of Object.entries(nutrients)) {
    const missing = identitiesValid ? foods.filter(food => !known(food[key])).map(food => String(food.id)) : [];
    const zero = row.status === 'complete' && row.value === 0;
    // Source zero is only asserted when the original serving values establish it.
    const sourceZero = zero && foods.every(food => known(food.serving?.[key]) && food.serving[key] === 0);
    states[key] = {status: row.status, value: row.value, unit: row.unit,
      known_foods: row.known_foods, total_foods: row.total_foods, missing_ids: missing,
      zero: zero ? sourceZe
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

EU label references

Calculation rule

How Nutrikom uses this

Compares nutrient amounts with EU label references for an average adult when the data are complete. For salt, converts sodium in mg to salt equivalent in g using the factor 0.0025.

Essential limitation

General adult label reference, not a personal need or remaining allowance.

Connections with other items

The sources

View reference excerpt

Technical details

EU label references

General adult EU label references when complete, including the sodium-to-salt-equivalent convention.

rule-label · r1 · eu-1169-annex-xiii-2018-v1

plugin/src/WordPress/AI/MealReference.php · L28–44 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · e3c45f7cfbbbbbb09e686f9f978ee166b7f7fc8c

public static function fromItems

public static function fromItems(array $items): array
    {
        $rows = [];
        foreach (self::REFERENCES as $key => [$label, $unit, $reference, $kind, $factor]) {
            $known = 0; $sum = 0.0;
            foreach ($items as $item) {
                $value = $item['nutrients'][$key] ?? null;
                if ($value === null) continue;
                $known++; $sum += (float) $value;
            }
            $count = count($items);
            $status = $known === 0 ? 'unavailable' : ($known === $count ? 'complete' : 'partial');
            $amount = $known ? $sum * $factor : null;
            $rows[] = ['key' => $key, 'label' => $label, 'unit' => $unit,
                'amount' => $amount === null ? null : round($amount, 6),
                'status' => $status, 'known_foods' => $known, 'total_foods' => $count,
                'reference' => $reference, 'percent' => $st
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Reading focus

Explanation

How Nutrikom uses this

Reading focus changes the emphasis, not the meal’s composition.

Essential limitation

General explanation, without personal prediction or treatment advice.

Connections with other items

The sources

View reference excerpt

Technical details

Reading focus

Reading focus changes the emphasis, not the meal’s composition.

claim-general · r1 · general (CLAIMS)

plugin/assets/js/product-v3/claims.js · L1–1 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · cd2db21caf40684f2d109d738e0d1d88aab9b28f

{"claim_id":"general","fr":"L’angle de lecture change la mise en avant, pas la composition du repas.","en":"Reading focus changes the emphasis, not the meal’s composition.","source_report":"NHP01","source_pages_or_reference_id":"p. 24, approach A; Super Lead 6113633832 §1–3","allowed_scope":"Design behaviour of this local prototype only.","prohibited_inference":["Clinical validation","Personal score","Treatment benefit"],"required_data":[],"fallback_when_missing":"Keep the common composition and its unknown values."}

{"claim_id":"general","fr":"L’angle de lecture change la mise en avant, pas la composition du repas.","en":"Reading focus changes the emphasis, not the meal’s composition.","source_report":"NHP01","source_pages_or_reference_id":"p. 24, approach A; Super Lead 6113633832 §1–3","allowed_scope":"Design behaviour of this local prototype only.","prohibited_inference":["Clinical validation","Personal score","Treatment benefit"],"required_data":[],"fallback_when_missing":"Keep the common composition and its unknown values."}
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Sodium and blood pressure

Explanation

How Nutrikom uses this

Reducing sodium over time can help manage blood pressure.

Essential limitation

General explanation, without personal prediction or treatment advice.

Connections with other items

The sources

View reference excerpt

Technical details

Sodium and blood pressure

Reducing sodium over time can help manage blood pressure.

claim-sodium · r1 · sodium (CLAIMS)

plugin/assets/js/product-v3/claims.js · L1–1 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · cd2db21caf40684f2d109d738e0d1d88aab9b28f

{"claim_id":"sodium","fr":"Réduire le sodium au fil du temps peut aider à contrôler la tension.","en":"Reducing sodium over time can help manage blood pressure.","source_report":"NHP01","source_pages_or_reference_id":"p. 27 sodium wording; p. 4; references [4] AHA/ACC 2025 and [34] DASH-Sodium","allowed_scope":"General pattern-level explanation; no inference about this meal’s physiological effect.","prohibited_inference":["Predicted blood-pressure change","Meal ceiling or remaining daily allowance","Potassium salt advice","Heart-failure or kidney treatment target"],"required_data":["snapshot.meal_coverage.nutrients.sodium.status == complete"],"fallback_when_missing":"Omit this general sentence; show the known subtotal/unknown and missing foods, without ranking."}

{"claim_id":"sodium","fr":"Réduire le sodium au fil du temps peut aider à contrôler la tension.","en":"Reducing sodium over time can help manage blood pressure.","source_report":"NHP01","source_pages_or_reference_id":"p. 27 sodium wording; p. 4; references [4] AHA/ACC 2025 and [34] DASH-Sodium","allowed_scope":"General pattern-level explanation; no inference about this meal’s physiological effect.","prohibited_inference":["Predicted blood-pressure change","Meal ceiling or remaining daily allowance","Potassium salt advice","Heart-failure or kidney treatment target"],"required_data":["snapshot.meal_coverage.nutrients.sodium.status == complete"],"fallback_when_missing":"Omit this general sentence; show the known subtotal/unknown and missing foods, without ranking."}
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Fat substitution

Explanation

How Nutrikom uses this

Replacing some saturated-fat sources with unsaturated-fat foods can support LDL cholesterol management.

Essential limitation

General explanation, without personal prediction or treatment advice.

Connections with other items

The sources

View reference excerpt

Technical details

Fat substitution

Replacing some saturated-fat sources with unsaturated-fat foods can support LDL cholesterol management.

claim-fat · r1 · fat (CLAIMS)

plugin/assets/js/product-v3/claims.js · L1–1 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · cd2db21caf40684f2d109d738e0d1d88aab9b28f

{"claim_id":"fat","fr":"Remplacer certaines sources de graisses saturées par des aliments riches en graisses insaturées peut aider à contrôler le LDL-cholestérol.","en":"Replacing some saturated-fat sources with unsaturated-fat foods can support LDL cholesterol management.","source_report":"NHP01","source_pages_or_reference_id":"p. 27 fat substitution wording; p. 4; reference [5] AHA/ACC 2023 chronic coronary disease guideline","allowed_scope":"General replacement concept over the diet; no food substitution prescribed for this meal.","prohibited_inference":["All fat is harmful","Meal-level myocardial infarction risk","Numerical LDL change","Fabricated savings","Personal treatment recommendation"],"required_data":["snapshot.meal_coverage.nutrients.saturated_fat.status == complete"],"fallback_when_missing":"Omit the general sentence; retain total fat and the known saturated-fat subtotal, without full-meal ranking."}

{"claim_id":"fat","fr":"Remplacer certaines sources de graisses saturées par des aliments riches en graisses insaturées peut aider à contrôler le LDL-cholestérol.","en":"Replacing some saturated-fat sources with unsaturated-fat foods can support LDL cholesterol management.","source_report":"NHP01","source_pages_or_reference_id":"p. 27 fat substitution wording; p. 4; reference [5] AHA/ACC 2023 chronic coronary disease guideline","allowed_scope":"General replacement concept over the diet; no food substitution prescribed for this meal.","prohibited_inference":["All fat is harmful","Meal-level myocardial infarction risk","Numerical LDL change","Fabricated savings","Personal treatment recommendation"],"required_data":["snapshot.meal_coverage.nutrients.saturated_fat.status == complete"],"fallback_when_missing":"Omit the general sentence; retain total fat and the known saturated-fat subtotal, without full-meal ranking."}
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Glycemic limitation

Explanation

How Nutrikom uses this

This meal’s composition does not predict an individual blood glucose response.

Essential limitation

General explanation, without personal prediction or treatment advice.

Connections with other items

The sources

View reference excerpt

Technical details

Glycemic limitation

This meal’s composition does not predict an individual blood glucose response.

claim-carb · r1 · carb (CLAIMS)

plugin/assets/js/product-v3/claims.js · L1–1 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · cd2db21caf40684f2d109d738e0d1d88aab9b28f

{"claim_id":"carb","fr":"La composition de ce repas ne prédit pas la réponse glycémique personnelle.","en":"This meal’s composition does not predict an individual blood glucose response.","source_report":"NHP01; GLY01","source_pages_or_reference_id":"NHP01 pp. 18, 23, 27–28; GLY01 research specification: prediction exclusions and carbohydrate-definition admission","allowed_scope":"Limitation of composition-only information; carbohydrate here is reported carbohydrate, not verified available carbohydrate.","prohibited_inference":["Measured or estimated GI/GL result","Glucose spike or curve","Insulin dose","Treatment change","Safe for diabetes","Fibre subtraction with unverified carbohydrate definition"],"required_data":[],"fallback_when_missing":"Retain this limitation when carbohydrate is partial or unavailable; name the missing data in the factual sentence."}

{"claim_id":"carb","fr":"La composition de ce repas ne prédit pas la réponse glycémique personnelle.","en":"This meal’s composition does not predict an individual blood glucose response.","source_report":"NHP01; GLY01","source_pages_or_reference_id":"NHP01 pp. 18, 23, 27–28; GLY01 research specification: prediction exclusions and carbohydrate-definition admission","allowed_scope":"Limitation of composition-only information; carbohydrate here is reported carbohydrate, not verified available carbohydrate.","prohibited_inference":["Measured or estimated GI/GL result","Glucose spike or curve","Insulin dose","Treatment change","Safe for diabetes","Fibre subtraction with unverified carbohydrate definition"],"required_data":[],"fallback_when_missing":"Retain this limitation when carbohydrate is partial or unavailable; name the missing data in the factual sentence."}
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Personal adequacy limitation

Explanation

How Nutrikom uses this

This meal alone cannot establish whether personal energy and protein needs are met.

Essential limitation

General explanation, without personal prediction or treatment advice.

Connections with other items

The sources

View reference excerpt

Technical details

Personal adequacy limitation

This meal alone cannot establish whether personal energy and protein needs are met.

claim-support · r1 · support (CLAIMS)

plugin/assets/js/product-v3/claims.js · L1–1 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · cd2db21caf40684f2d109d738e0d1d88aab9b28f

{"claim_id":"support","fr":"Ce repas seul ne permet pas de savoir si les besoins personnels en énergie et en protéines sont couverts.","en":"This meal alone cannot establish whether personal energy and protein needs are met.","source_report":"NHP01","source_pages_or_reference_id":"pp. 20 and 27 nutrition support; p. 26 competing priorities","allowed_scope":"Composition cannot establish personal adequacy; no target has been collected.","prohibited_inference":["Undernutrition diagnosis","Personal requirement or coverage percentage","Less energy/protein is always better","Calorie deficit instruction","Renal protein target"],"required_data":[],"fallback_when_missing":"Keep the limitation; show independently known values and flag the affected unknown/conflict."}

{"claim_id":"support","fr":"Ce repas seul ne permet pas de savoir si les besoins personnels en énergie et en protéines sont couverts.","en":"This meal alone cannot establish whether personal energy and protein needs are met.","source_report":"NHP01","source_pages_or_reference_id":"pp. 20 and 27 nutrition support; p. 26 competing priorities","allowed_scope":"Composition cannot establish personal adequacy; no target has been collected.","prohibited_inference":["Undernutrition diagnosis","Personal requirement or coverage percentage","Less energy/protein is always better","Calorie deficit instruction","Renal protein target"],"required_data":[],"fallback_when_missing":"Keep the limitation; show independently known values and flag the affected unknown/conflict."}
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Meal composition

Module

How Nutrikom uses this

Displays the meal’s composition from 15 nutrient fields: energy, nutrients, macronutrient split and data availability. No overall score is produced.

Essential limitation

The module describes entered data, not personal adequacy.

Connections with other items

The sources

View reference excerpt

Technical details

V3 descriptive composition

The current descriptive composition interface: nutrients, macros and coverage, without a new global score.

module-compose · r1 · 3.6.0

plugin/assets/js/product-v3/app.js · L54–57 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 8a386ac783cd97c46c7b6ddc08b4e834f60d3397

function makeSnapshot

function makeSnapshot(foods){const totals=NativeComposer.aggregateFoods(foods),nutrients={};for(const [key,unit] of fields){const knownFoods=foods.filter(f=>typeof f[key]==='number'&&Number.isFinite(f[key])).length;nutrients[key]={key,unit,value:totals[key],status:knownFoods===0?'unavailable':knownFoods===foods.length?'complete':'partial',known_foods:knownFoods,total_foods:foods.length};}
 const missing=fields.filter(([key])=>nutrients[key].status!=='complete').map(([key])=>key);
 const conflict=foods.some(f=>f.calories===0&&[f.carbohydrate,f.protein,f.fat].some(v=>typeof v==='number'&&v>0));
 return {totals,meal_coverage:{version:'meal-coverage-v1',nutrients,missing_scoring_nutrients:missing},application_completeness_disclosure:{optional_nutrients_missing:missing},score_status:conflict?'insufficient_energy_basis':missing.length?'insufficient_coverage':'insufficient_food_characteristics'
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Understand this meal

Module

How Nutrikom uses this

Puts the meal in context through reading angles, food contributions and explanations limited to what the data support. These explanations are produced locally, without on-demand document retrieval.

Essential limitation

The module describes entered data, not personal adequacy.

Connections with other items

The sources

View reference excerpt

Technical details

Understand this meal (local)

Local reading angles, contributions and bounded explanations; no RAG.

module-explore · r1 · product-v3

plugin/assets/js/product-v3/app.js · L155–168 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · 8a386ac783cd97c46c7b6ddc08b4e834f60d3397

function renderFocus

function renderFocus() {
 if (!view) return;
 const {foods,snapshot}=view, r=k=>snapshot.meal_coverage.nutrients[k];
 // Catalogue food/serving references are not unique meal-line identities.
 // Bind this reading only to the current editor entries, without changing API foods.
 view.readingFoods=foods.map((food,index)=>({...food,id:entries[index].id,
  reading_source:entries[index].provider ? {kind:'catalogue'} : {kind:'manual',grams:entries[index].grams}}));
 view.reading=projectRelations(view.readingFoods,snapshot.meal_coverage.nutrients,focus);
 const reading=relationReading(view.reading,view.readingFoods,lang),sentences=reading.map(row=>row.text);
 $('#context-title').textContent=T('readingTitle');
 $('#context-title').hidden=sentences.length===0;
 $('#context-angle').textContent=T(focus);
 $('#meal-fact').textContent=sentences.join(' ');
 $('#meal-fact').hidden=sentences.length===0;
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

What an entered meal describes

Concept

How Nutrikom uses this

Describes the entered foods and portions. This entry does not prove what was consumed and does not represent a full day, eating habits or personal requirements.

Essential limitation

One entered meal cannot establish daily intake, habits or personal requirements.

Connections with other items

  • No connection is shown for this item in this version of the map. This does not mean it is unused in Nutrikom.

The sources

View reference excerpt

Technical details

Entered meal and scope

The entered foods and portions define the scope of every explanation.

concept-single-meal · r1 · single_meal

plugin/assets/js/product-v3/claims.js · L1–2 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · cd2db21caf40684f2d109d738e0d1d88aab9b28f

"claim_id":"support"

"claim_id":"support","fr":"Ce repas seul ne permet pas de savoir si les besoins personnels en énergie et en protéines sont couverts.","en":"This meal alone cannot establish whether personal energy and protein needs are met.","source_report":"NHP01","source_pages_or_reference_id":"pp. 20 and 27 nutrition support; p. 26 competing priorities","allowed_scope":"Composition cannot establish personal adequacy; no target has been collected.","prohibited_inference":["Undernutrition diagnosis","Personal requirement or coverage percentage","Less energy/protein is always better","Calorie deficit instruction","Renal protein target"],"required_data":[],"fallback_when_missing":"Keep the limitation; show independently known values and flag the affected unknown/conflict."}];
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Nutrition and health contexts

Documentary source

How Nutrikom uses this

Research synthesis used to design Nutrikom. Read the full report for its methods, findings and limitations.

Essential limitation

Received project synthesis, not an independent primary paper or product validation.

Where is this source cited?

The sources

NHP01 Nutrikom health profiles and therapeutic nutrition contract

Nutrition and health contexts · PDF ↗

Document version

NHP01 · v1.0 · 2026-10-12

SHA256: 042249d3b296ad2b0055e3a9992deca3e47452ec214760e84e055ab08be2080b

Glycemic index and mixed meals

Documentary source

How Nutrikom uses this

Research synthesis used to design Nutrikom. Read the full report for its methods, findings and limitations.

Essential limitation

Received project synthesis, not an independent primary paper or product validation.

Where is this source cited?

The sources

GLY01 Nutrikom glycemic index load and diabetes contract

Glycemic index and mixed meals · PDF ↗

Document version

GLY01 · v1.0 · 2026-10-12

SHA256: 11b0e9437d1c81b5af48fc80107c81b88b9d3f84df365b78e93bbc8a8afb9ad7

Constructing and validating a meal score

Documentary source

How Nutrikom uses this

Research synthesis used to design Nutrikom. Read the full report for its methods, findings and limitations.

Essential limitation

Received project synthesis, not an independent primary paper or product validation.

Where is this source cited?

  • No connection is shown for this item in this version of the map. This does not mean it is unused in Nutrikom.

The sources

NKS01 Nutrikom Meal Score construct and validation

Constructing and validating a meal score · PDF ↗

Document version

NKS01 · v1.0 · 2026-10-11

SHA256: 84ca9c535a9a700e0e7925d18324da8e15add883a405d538a955d18014b54473

Limits of a nutrition index

Documentary source

How Nutrikom uses this

Research synthesis used to design Nutrikom. Read the full report for its methods, findings and limitations.

Essential limitation

Received project synthesis, not an independent primary paper or product validation.

Where is this source cited?

  • No connection is shown for this item in this version of the map. This does not mean it is unused in Nutrikom.

The sources

IDX01 Nutrikom Index construct and validation contract

Limits of a nutrition index · PDF ↗

Document version

IDX01 · v1.0 · 2026-10-11

SHA256: 5b32b0ddf303e4fbeebd93b845e08a13595456a3f630e64d607868700898863a

Understanding nutrient references

Documentary source

How Nutrikom uses this

Research synthesis used to design Nutrikom. Read the full report for its methods, findings and limitations.

Essential limitation

Received project synthesis, not an independent primary paper or product validation.

Where is this source cited?

  • No connection is shown for this item in this version of the map. This does not mean it is unused in Nutrikom.

The sources

REF01 nutrient references and Nutrikom interpretation contract

Understanding nutrient references · PDF ↗

Document version

REF01 · v1.0 · 2026-10-11

SHA256: e88830c5502aefd60e8cc9e198862da181facc6a0798100782c593122871171d

One meal, one day, dietary habits

Documentary source

How Nutrikom uses this

Research synthesis used to design Nutrikom. Read the full report for its methods, findings and limitations.

Essential limitation

Received project synthesis, not an independent primary paper or product validation.

Where is this source cited?

  • No connection is shown for this item in this version of the map. This does not mean it is unused in Nutrikom.

The sources

DAY01 dietary observation evidence and Nutrikom contract

One meal, one day, dietary habits · PDF ↗

Document version

DAY01 · v1.0 · 2026-10-11

SHA256: 2522de0b8e0bb451d8a3d7cc80b5f247401e8579f265160ce4518ce101f5d0a3

EU1169/2011 (2018 version)

Documentary source

How Nutrikom uses this

Document cited for the Annex XIII label references for an average adult. These references do not represent a personal requirement.

Essential limitation

A cited document does not validate every object citing it.

Where is this source cited?

The sources

Regulation (EU) No 1169/2011, consolidated expression 2018-01-01, Annex XIII

View the source ↗

View reference excerpt

Technical details

EU1169/2011 (2018 version)

The dated regulatory expression coded for general adult EU label references, not a personal target.

ref-eu-label · r1 · eli/reg/2011/1169/2018-01-01/eng

Regulation (EU) No 1169/2011, consolidated expression 2018-01-01, Annex XIII

plugin/src/WordPress/AI/MealReference.php · L9–23 · d286b9b88d950533b1e3c5a8ba2d6d965f94c237 · e3c45f7cfbbbbbb09e686f9f978ee166b7f7fc8c

public const SOURCE

public const SOURCE = 'https://eur-lex.europa.eu/eli/reg/2011/1169/2018-01-01/eng';

    // [display name, unit, reference amount, kind, conversion from FatSecret units]
    private const REFERENCES = [
        'calories' => ['Energy', 'kcal', 2000.0, 'context', 1.0],
        'fat' => ['Total fat', 'g', 70.0, 'context', 1.0],
        'saturated_fat' => ['Saturated fat', 'g', 20.0, 'limit', 1.0],
        'carbohydrate' => ['Carbohydrate', 'g', 260.0, 'context', 1.0],
        'sugar' => ['Total sugars', 'g', 90.0, 'context', 1.0],
        'protein' => ['Protein', 'g', 50.0, 'context', 1.0],
        'sodium' => ['Salt equivalent', 'g', 6.0, 'limit', 0.0025],
        'potassium' => ['Potassium', 'mg', 2000.0, 'context', 1.0],
        'calcium' => ['Calcium', 'mg', 800.0, 'context', 1.0],
        'iron' => ['Iron', 'mg', 14.0, 'context', 1.0],
        'vitamin_c' => ['Vitamin C', 'mg', 80.0, 
History / changes

Revision r1, adopted mapping. No subsequent change recorded.

Nutrikom · Powered by MedLabScience & sources · Standalone exploration

Nutrikom research reports

French summary · scientific dossier in English · public edition dated 14 October 2026.

The regulation linked in the map is the consolidation of 1 January 2018. REF01 cites the consolidation of 1 April 2025 in its historical dossier.