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:
parent
a8eea46c58
commit
1b787d0cd2
3 changed files with 178 additions and 0 deletions
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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"] },
|
||||
],
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
Loading…
Reference in a new issue