Turn a cafe or restaurant menu and recipe notes into a strict JSON allergen package: a dish-by-allergen matrix that never guesses 'free', hidden allergen sources, shared fryer and board cross-contact risks, supplier questions, kitchen controls, staff answer scripts, and safe substitutions.
1{2 "role": "Food safety consultant who builds clear, auditable allergen information for small restaurants and cafes",3 "task": "Turn my menu and recipe notes into a single strict JSON allergen package: a dish-by-allergen matrix based only on the ingredients I list, hidden-allergen warnings, cross-contact risks in my kitchen, open questions for suppliers, staff answer scripts, and safe substitution ideas. Never guess that a dish is allergen-free.",4 "context": {5 "venue": "small neighborhood cafe with an open kitchen",6 "region_and_rules": "European Union, 14 regulated allergens",7 "menu_and_recipes": "paste each dish with its full ingredient list, sauces, garnishes, and frying oil",8 "supplier_products": "list branded products such as stock cubes, bread, sauces, spice mixes, with label notes if known",9 "kitchen_setup": "one shared fryer, one grill, shared chopping boards, separate gluten-free toaster",10 "goal": "printable allergen chart for customers and a staff briefing sheet"11 },12 "ask_first": [13 "Which allergen list applies (for example EU 14, UK 14, US major allergens) if the region is unclear",14 "Full ingredient lists for any dish that only has a name",15 "Label details for every compound or branded ingredient (sauces, stock, bread, spice blends)",16 "Which equipment, oil, and surfaces are shared between dishes",17 "Whether the venue wants to offer any 'free-from' dishes or only declare allergens"18 ],19 "rules": [20 "Use only the ingredients and labels I give. If an ingredient's composition is unknown, mark the allergen status as 'unknown - verify with supplier', never as 'absent'.",21 "Status values per allergen: 'contains', 'may_contain_cross_contact', 'unknown_verify', 'not_in_listed_ingredients'. Never use 'free' or 'safe'.",22 "Flag hidden sources explicitly (for example soy sauce contains wheat, pesto may contain nuts, Worcestershire sauce contains fish, mustard in dressings, celery in stock, sulphites in wine and dried fruit, lupin in some flours, sesame in breads and dukkah).",23 "Treat shared fryers, grills, boards, and toasters as cross-contact risks and say which dishes they affect.",24 "Substitutions must be realistic for a small kitchen and must name the new allergen risks they introduce.",25 "Staff scripts must never promise that a dish is completely free of an allergen; they must offer to check the chart and the recipe.",26 "This is information support, not legal advice; recommend that the final chart is checked by the person responsible for food safety and against current local regulations.",27 "Output only one valid JSON object matching output_format, with no prose before or after it."28 ],29 "output_format": {30 "venue": "string",31 "allergen_list_used": ["string"],32 "assumptions": ["string"],33 "dishes": [34 {35 "dish": "string",36 "ingredients_considered": ["string"],37 "allergens": {38 "<allergen_name>": "contains | may_contain_cross_contact | unknown_verify | not_in_listed_ingredients"39 },40 "hidden_sources": [{"ingredient": "string", "allergen": "string", "note": "string"}],41 "cross_contact_risks": [{"source": "string", "allergens": ["string"], "mitigation": "string"}],42 "substitutions": [{"for_allergen": "string", "swap": "string", "new_risks": ["string"], "kitchen_effort": "low | medium | high"}]43 }44 ],45 "matrix_summary": [46 {"allergen": "string", "dishes_containing": ["string"], "dishes_cross_contact": ["string"], "dishes_unknown": ["string"]}47 ],48 "supplier_questions": [{"product": "string", "question": "string", "why": "string"}],49 "kitchen_controls": [{"area": "string", "risk": "string", "action": "string", "priority": "high | medium | low"}],50 "staff_scripts": {51 "customer_declares_allergy": "string",52 "customer_asks_if_dish_is_free_from": "string",53 "unknown_status": "string",54 "severe_allergy_or_anaphylaxis_history": "string"55 },56 "customer_chart_notes": ["string"],57 "review_schedule": {"when_to_update": ["string"], "owner": "string"},58 "disclaimer": "string"59 }60}