diff --git a/src/JobsMedical.Web/Services/Scraping/ListingValidator.cs b/src/JobsMedical.Web/Services/Scraping/ListingValidator.cs index 7392d48..f81e5c9 100644 --- a/src/JobsMedical.Web/Services/Scraping/ListingValidator.cs +++ b/src/JobsMedical.Web/Services/Scraping/ListingValidator.cs @@ -47,6 +47,16 @@ public class ListingValidator "نظافتچی", "خدمتکار", "کارگر منزل", "خدمات منزل", "مستخدم", }; + // Home childcare / babysitting — a family hiring someone to mind their child at home. NOT کادر + // درمان even when phrased «پرستار کودک/بچه». Clinical pediatric roles say «بخش اطفال/کودکان/NICU», + // not «نگهداری/بچه‌داری» or a parent self-identifying («پدر/مادر کودک»). + private static readonly string[] ChildcareMarkers = + { + "بچه داری", "بچه‌داری", "بچه دار ", "نگهداری کودک", "نگهداری از کودک", "نگهداری بچه", + "نگهداری از بچه", "نگهداری فرزند", "نگهداری نوزاد", "نگهداری شیرخوار", "پرستار بچه", + "پدر کودک", "مادر کودک", "نگهدار کودک", "نگهدار بچه", "مراقبت از کودک", "مراقبت از بچه", + }; + // Words that signal a real staffing post (hiring, shift, or availability). private static readonly string[] StaffingIntent = { @@ -82,6 +92,13 @@ public class ListingValidator return new ValidationResult(false, true, 0, issues, looksMedical); // IsSpam → auto-discard } + // Home childcare / babysitting — out of scope (not کادر درمان), discard. + if (ChildcareMarkers.Any(text.Contains)) + { + issues.Add("آگهی نگهداری کودک در منزل است، نه کادر درمان"); + return new ValidationResult(false, true, 0, issues, looksMedical); // IsSpam → auto-discard + } + // «آماده به کار»: a worker offering themselves. No facility/shift-date expected; the role // and a contact number are what matter. if (parsed.Kind == ListingKind.Talent)