feat(recipe-generation): STEG 2 RUNDA 2 prep
- Food-safety prompt + lint: doneness krävs, gyllenbrun räcker inte - DensityGPerMl för ginger, örter, mushroom, salsa, corn, olives, peas - RUNDA_2_TARGETS fokuserade på gap-celler (paprika, blandfärs, räkor, torsk, svarta bönor) - Export-verified script + scale-smoke-test - Temp-skript borttagna; inga nycklar kvar i kod
This commit is contained in:
@@ -93,13 +93,20 @@ const RAW_PROTEIN_REQUIRING_SAFE_COOKING = new Set([
|
||||
]);
|
||||
|
||||
const SAFE_COOKING_KEYWORDS_SV = [
|
||||
/\btemperatur\b/i,
|
||||
/\b°\s*c\b/i,
|
||||
/\bgrader\b/i,
|
||||
/\bgenomstekt\b/i,
|
||||
/\bgenomkokt\b/i,
|
||||
/\bgenomgrillad\b/i,
|
||||
/\bgenomv\w+\b/i,
|
||||
/\binte längre rosa\b/i,
|
||||
/\binte rosa\b/i,
|
||||
/\bfiber\w*\b/i,
|
||||
/\bflagnar\b/i,
|
||||
/\bgenomkokt\b/i,
|
||||
/\bkärntemperatur\b/i,
|
||||
/\binnertemperatur\b/i,
|
||||
/\btemperatur\b/i,
|
||||
/\b°\s*c\b/i,
|
||||
/\bgrader\b/i,
|
||||
/\btill(?:s)? den är klar\b/i,
|
||||
/\btill(?:s)? köttet släpper vätskan\b/i,
|
||||
/\b72\s*c?\b/i,
|
||||
@@ -110,14 +117,31 @@ const SAFE_COOKING_KEYWORDS_SV = [
|
||||
/\b70\s*c?\b/i,
|
||||
];
|
||||
|
||||
/** Fraser som INTE räcker som säkerhetsbevis – de beskriver bara utseende/tid. */
|
||||
const UNSAFE_APPEARANCE_ONLY_SV = [
|
||||
/\bgyllenbrun\b/i,
|
||||
/\bgyllene\b/i,
|
||||
/\bkrispig\b/i,
|
||||
/\bkrispiga\b/i,
|
||||
/\bfint färg\b/i,
|
||||
/\bfint färgade\b/i,
|
||||
/\bfärgad\b/i,
|
||||
/\bfräsch\b/i,
|
||||
/\bfräscha\b/i,
|
||||
];
|
||||
|
||||
function requiresSafeCookingStep(ingredientIds: string[]): boolean {
|
||||
return ingredientIds.some((id) => RAW_PROTEIN_REQUIRING_SAFE_COOKING.has(id));
|
||||
}
|
||||
|
||||
function hasSafeCookingStep(steps: RecipeCandidate["steps"]): boolean {
|
||||
return steps.some((s) =>
|
||||
SAFE_COOKING_KEYWORDS_SV.some((re) => re.test(s.instructionSv)),
|
||||
);
|
||||
return steps.some((s) => {
|
||||
const instruction = s.instructionSv;
|
||||
const hasPositive = SAFE_COOKING_KEYWORDS_SV.some((re) => re.test(instruction));
|
||||
const onlyAppearance = UNSAFE_APPEARANCE_ONLY_SV.some((re) => re.test(instruction)) &&
|
||||
!SAFE_COOKING_KEYWORDS_SV.some((re) => re.test(instruction));
|
||||
return hasPositive && !onlyAppearance;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user