feat(catalog): étoffe le catalogue d'ingrédients à partir de la table Ciqual 2025

Source : « Table des aliments moyens Ciqual 2025 » (ANSES, ciqual.anses.fr),
utilisée comme source de noms pour combler des trous du catalogue plutôt
qu'importée telle quelle — le fichier est une table de correspondance
"aliment moyen ↔ aliments contributeurs" très granulaire (états de cuisson,
produits de marque, boissons/snacks industriels), pas directement
réutilisable comme liste d'ingrédients génériques pour une app de recettes.

55 nouveaux ingrédients ajoutés à reference-seed-data.ts, catégorisés et
allergène-tagués selon les conventions existantes :
- 26 fromages régionaux français (Brie, Camembert, Roquefort, Munster,
  Reblochon, Cantal, Beaufort, Saint-Nectaire, Cancoillotte, Tomme,
  Époisses, etc.) — allergène Lait.
- 18 charcuteries/abats/gibiers (Andouille, Boudin blanc/noir, Rillettes,
  Foie de veau, Ris de veau, Tripes, Cerf, Chevreuil, Sanglier…).
- 4 volailles (Caille, Pintade, Oie, Foie de volaille).
- 2 poissons — allergène Poissons (Anguille, Carrelet).
- 2 crustacés/mollusques — allergène Crustacés/Mollusques (Araignée de
  mer, Bigorneau).
- 3 fruits/légumes (Cardon, Cassis, Canneberge).

Chaque ajout a sa clé anglaise dans catalog-en-keys.ts ; translation.json
régénéré via `tsx scripts/generate-catalog-i18n.ts` (pas d'édition
manuelle). Pas de migration Prisma nécessaire — pure donnée de référence,
upsertée par `seedReferenceData` au prochain déploiement/seed.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Nicolas 2026-08-19 16:34:19 +02:00
parent a8eea46c58
commit 1b787d0cd2
3 changed files with 178 additions and 0 deletions

View file

@ -97,6 +97,7 @@ const INGREDIENT_KEYS: Record<string, string> = {
Shiitake: "shiitake",
Daikon: "daikon",
"Piment vert frais": "fresh_green_chili",
Cardon: "cardoon",
// --- Produits frais / Fruits -----------------------------------------
Citron: "lemon",
@ -127,6 +128,8 @@ const INGREDIENT_KEYS: Record<string, string> = {
Grenade: "pomegranate",
Rhubarbe: "rhubarb",
Coing: "quince",
Cassis: "blackcurrant",
Canneberge: "cranberry",
// --- Produits frais / Herbes fraîches ---------------------------------
Basilic: "basil",
@ -169,12 +172,35 @@ const INGREDIENT_KEYS: Record<string, string> = {
Pancetta: "pancetta",
Mortadelle: "mortadella",
Salami: "salami",
Andouille: "andouille",
Andouillette: "andouillette",
"Boudin blanc": "white_pudding",
"Boudin noir": "black_pudding",
Cervelas: "cervelat",
Rillettes: "rillettes",
"Saucisson sec": "dry_cured_sausage",
"Jambon de Bayonne": "bayonne_ham",
Coppa: "coppa",
"Rosette (saucisson)": "rosette_sausage",
"Foie de veau": "veal_liver",
"Rognons de veau": "veal_kidneys",
"Cervelle de veau": "veal_brain",
"Ris de veau": "veal_sweetbread",
"Langue de bœuf": "beef_tongue",
Tripes: "tripe",
Cerf: "venison",
Chevreuil: "roe_deer",
Sanglier: "wild_boar",
// --- Boucherie & poissonnerie / Volailles -----------------------------
Poulet: "chicken",
Dinde: "turkey",
Canard: "duck",
"Magret de canard": "duck_breast",
Caille: "quail",
Pintade: "guinea_fowl",
Oie: "goose",
"Foie de volaille": "poultry_liver",
// --- Boucherie & poissonnerie / Poissons -------------------------------
Saumon: "salmon",
@ -207,6 +233,8 @@ const INGREDIENT_KEYS: Record<string, string> = {
Panga: "pangasius",
"Saumon fumé": "smoked_salmon",
"Poisson séché": "dried_fish",
Anguille: "eel",
"Carrelet (ou plie)": "plaice",
// --- Boucherie & poissonnerie / Crustacés & fruits de mer -------------
Crevettes: "shrimp",
@ -221,6 +249,8 @@ const INGREDIENT_KEYS: Record<string, string> = {
Poulpe: "octopus",
Palourdes: "clams",
Bulots: "whelks",
"Araignée de mer": "spider_crab",
Bigorneau: "periwinkle",
// --- Épicerie sèche / Féculents ----------------------------------------
Semoule: "semolina",
@ -341,6 +371,32 @@ const INGREDIENT_KEYS: Record<string, string> = {
Pecorino: "pecorino",
Gorgonzola: "gorgonzola",
Cheddar: "cheddar",
Brie: "brie",
Camembert: "camembert",
Roquefort: "roquefort",
Munster: "munster",
Reblochon: "reblochon",
Cantal: "cantal",
Beaufort: "beaufort",
"Saint-Nectaire": "saint_nectaire",
"Bleu (fromage)": "blue_cheese",
Cancoillotte: "cancoillotte",
Tomme: "tomme",
Époisses: "epoisses",
Chaource: "chaource",
Livarot: "livarot",
"Pont-l'Évêque": "pont_leveque",
Morbier: "morbier",
"Raclette (fromage)": "raclette_cheese",
"Fourme d'Ambert": "fourme_d_ambert",
Salers: "salers",
"Ossau-Iraty": "ossau_iraty",
Vacherin: "vacherin",
"Saint-Marcellin": "saint_marcellin",
Neufchâtel: "neufchatel",
"Crottin de Chavignol": "crottin_de_chavignol",
Abondance: "abondance_cheese",
"Carré de l'Est": "carre_de_l_est",
// --- Crémerie & fromage / Œufs -------------------------------------------
Œuf: "egg",

View file

@ -158,6 +158,7 @@ export const INGREDIENT_GROUPS: Array<{
{ name: "Shiitake", allergenNames: [] },
{ name: "Daikon", allergenNames: [] },
{ name: "Piment vert frais", allergenNames: [] },
{ name: "Cardon", allergenNames: [] },
],
},
{
@ -194,6 +195,8 @@ export const INGREDIENT_GROUPS: Array<{
{ name: "Grenade", allergenNames: [] },
{ name: "Rhubarbe", allergenNames: [] },
{ name: "Coing", allergenNames: [] },
{ name: "Cassis", allergenNames: [] },
{ name: "Canneberge", allergenNames: [] },
],
},
{
@ -251,6 +254,28 @@ export const INGREDIENT_GROUPS: Array<{
{ name: "Pancetta", allergenNames: [] },
{ name: "Mortadelle", allergenNames: [] },
{ name: "Salami", allergenNames: [] },
// Added from the Ciqual 2025 "aliments moyens" table — French
// charcuterie/offal/game staples the pantry list was missing (see
// the PR description for how this batch was sourced/curated).
{ name: "Andouille", allergenNames: [] },
{ name: "Andouillette", allergenNames: [] },
{ name: "Boudin blanc", allergenNames: [] },
{ name: "Boudin noir", allergenNames: [] },
{ name: "Cervelas", allergenNames: [] },
{ name: "Rillettes", allergenNames: [] },
{ name: "Saucisson sec", allergenNames: [] },
{ name: "Jambon de Bayonne", allergenNames: [] },
{ name: "Coppa", allergenNames: [] },
{ name: "Rosette (saucisson)", allergenNames: [] },
{ name: "Foie de veau", allergenNames: [] },
{ name: "Rognons de veau", allergenNames: [] },
{ name: "Cervelle de veau", allergenNames: [] },
{ name: "Ris de veau", allergenNames: [] },
{ name: "Langue de bœuf", allergenNames: [] },
{ name: "Tripes", allergenNames: [] },
{ name: "Cerf", allergenNames: [] },
{ name: "Chevreuil", allergenNames: [] },
{ name: "Sanglier", allergenNames: [] },
],
},
{
@ -263,6 +288,11 @@ export const INGREDIENT_GROUPS: Array<{
{ name: "Dinde", allergenNames: [] },
{ name: "Canard", allergenNames: [] },
{ name: "Magret de canard", allergenNames: [] },
// Ciqual 2025 additions — see the VIANDES group above.
{ name: "Caille", allergenNames: [] },
{ name: "Pintade", allergenNames: [] },
{ name: "Oie", allergenNames: [] },
{ name: "Foie de volaille", allergenNames: [] },
],
},
{
@ -301,6 +331,9 @@ export const INGREDIENT_GROUPS: Array<{
{ name: "Panga", allergenNames: ["Poissons"] },
{ name: "Saumon fumé", allergenNames: ["Poissons"] },
{ name: "Poisson séché", allergenNames: ["Poissons"] },
// Ciqual 2025 additions.
{ name: "Anguille", allergenNames: ["Poissons"] },
{ name: "Carrelet (ou plie)", allergenNames: ["Poissons"] },
],
},
{
@ -321,6 +354,9 @@ export const INGREDIENT_GROUPS: Array<{
{ name: "Poulpe", allergenNames: ["Mollusques"] },
{ name: "Palourdes", allergenNames: ["Mollusques"] },
{ name: "Bulots", allergenNames: ["Mollusques"] },
// Ciqual 2025 additions.
{ name: "Araignée de mer", allergenNames: ["Crustacés"] },
{ name: "Bigorneau", allergenNames: ["Mollusques"] },
],
},
// =========================================================================
@ -517,6 +553,36 @@ export const INGREDIENT_GROUPS: Array<{
{ name: "Pecorino", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Gorgonzola", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Cheddar", icon: "CHEESE", allergenNames: ["Lait"] },
// Ciqual 2025 additions — classic French regional cheeses the
// catalog only had a handful of internationally-known ones for
// (Emmental, Parmesan, Mozzarella…), missing the actual French
// aisle staples Ciqual's "aliments moyens" table surfaced.
{ name: "Brie", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Camembert", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Roquefort", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Munster", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Reblochon", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Cantal", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Beaufort", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Saint-Nectaire", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Bleu (fromage)", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Cancoillotte", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Tomme", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Époisses", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Chaource", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Livarot", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Pont-l'Évêque", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Morbier", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Raclette (fromage)", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Fourme d'Ambert", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Salers", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Ossau-Iraty", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Vacherin", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Saint-Marcellin", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Neufchâtel", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Crottin de Chavignol", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Abondance", icon: "CHEESE", allergenNames: ["Lait"] },
{ name: "Carré de l'Est", icon: "CHEESE", allergenNames: ["Lait"] },
],
},
{

View file

@ -384,6 +384,7 @@
"shiitake": "Shiitake",
"daikon": "Daikon",
"fresh_green_chili": "Piment vert frais",
"cardoon": "Cardon",
"lemon": "Citron",
"lime": "Citron vert",
"apple": "Pomme",
@ -412,6 +413,8 @@
"pomegranate": "Grenade",
"rhubarb": "Rhubarbe",
"quince": "Coing",
"blackcurrant": "Cassis",
"cranberry": "Canneberge",
"basil": "Basilic",
"parsley": "Persil",
"thyme": "Thym",
@ -450,10 +453,33 @@
"pancetta": "Pancetta",
"mortadella": "Mortadelle",
"salami": "Salami",
"andouille": "Andouille",
"andouillette": "Andouillette",
"white_pudding": "Boudin blanc",
"black_pudding": "Boudin noir",
"cervelat": "Cervelas",
"rillettes": "Rillettes",
"dry_cured_sausage": "Saucisson sec",
"bayonne_ham": "Jambon de Bayonne",
"coppa": "Coppa",
"rosette_sausage": "Rosette (saucisson)",
"veal_liver": "Foie de veau",
"veal_kidneys": "Rognons de veau",
"veal_brain": "Cervelle de veau",
"veal_sweetbread": "Ris de veau",
"beef_tongue": "Langue de bœuf",
"tripe": "Tripes",
"venison": "Cerf",
"roe_deer": "Chevreuil",
"wild_boar": "Sanglier",
"chicken": "Poulet",
"turkey": "Dinde",
"duck": "Canard",
"duck_breast": "Magret de canard",
"quail": "Caille",
"guinea_fowl": "Pintade",
"goose": "Oie",
"poultry_liver": "Foie de volaille",
"salmon": "Saumon",
"tuna": "Thon",
"cod": "Cabillaud",
@ -484,6 +510,8 @@
"pangasius": "Panga",
"smoked_salmon": "Saumon fumé",
"dried_fish": "Poisson séché",
"eel": "Anguille",
"plaice": "Carrelet (ou plie)",
"shrimp": "Crevettes",
"langoustine": "Langoustines",
"lobster": "Homard",
@ -496,6 +524,8 @@
"octopus": "Poulpe",
"clams": "Palourdes",
"whelks": "Bulots",
"spider_crab": "Araignée de mer",
"periwinkle": "Bigorneau",
"semolina": "Semoule",
"couscous": "Couscous",
"bulgur": "Boulgour",
@ -603,6 +633,32 @@
"pecorino": "Pecorino",
"gorgonzola": "Gorgonzola",
"cheddar": "Cheddar",
"brie": "Brie",
"camembert": "Camembert",
"roquefort": "Roquefort",
"munster": "Munster",
"reblochon": "Reblochon",
"cantal": "Cantal",
"beaufort": "Beaufort",
"saint_nectaire": "Saint-Nectaire",
"blue_cheese": "Bleu (fromage)",
"cancoillotte": "Cancoillotte",
"tomme": "Tomme",
"epoisses": "Époisses",
"chaource": "Chaource",
"livarot": "Livarot",
"pont_leveque": "Pont-l'Évêque",
"morbier": "Morbier",
"raclette_cheese": "Raclette (fromage)",
"fourme_d_ambert": "Fourme d'Ambert",
"salers": "Salers",
"ossau_iraty": "Ossau-Iraty",
"vacherin": "Vacherin",
"saint_marcellin": "Saint-Marcellin",
"neufchatel": "Neufchâtel",
"crottin_de_chavignol": "Crottin de Chavignol",
"abondance_cheese": "Abondance",
"carre_de_l_est": "Carré de l'Est",
"egg": "Œuf",
"coconut_milk": "Lait de coco",
"coconut_cream": "Crème de coco",