Filter out home childcare / babysitter ads (not کادر درمان)
CI/CD / CI · dotnet build (push) Successful in 2m0s
CI/CD / Deploy · hamkadr (push) Successful in 3m10s

Divar «پرستار کودک/خانم شبانه‌روزی» ads are often a family hiring an in-home babysitter («پدر
کودک ۴ ساله هستم … نگهداری و مراقبت تمام‌وقت»), not clinical nursing. Add ChildcareMarkers
(نگهداری/بچه‌داری/«پدر|مادر کودک»/پرستار بچه …) and discard such ads as out of scope, alongside the
existing housekeeping filter. Clinical pediatric roles («بخش اطفال/کودکان/NICU») are unaffected.
New ingests are filtered at crawl; run «بایگانیِ درجا» to re-screen existing rows that have the
full text.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
soroush.asadi
2026-06-21 20:04:57 +03:30
parent 17da713a35
commit 33450a37ea
@@ -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)