داستان رصد املاک (Workline)

از اینجا به بعد هدف فقط «ثبت ملک» نیست. هدف این است که بعد از تأیید، مسیر کار مشاور مثل وضعیت سفارش دیجیکالا قابل دیدن و قابل اندازه‌گیری باشد.


خیلی ساده:
ملک ثبت می‌شود با وضعیت pending (+ ارزش فایل ۲۰/۸۰) → سیستم‌منیجر تأیید می‌کند (بدون تعیین ارزش) → پرونده رصد شروع می‌شود → مشاور مرحله‌به‌مرحله تیک می‌زند (بازدید، قرارداد، وضعیت نهایی) → بستن رصد با outcome.
مستند کامل پارت‌بندی‌شده + پرامپت فرانت: changelog-parts و فایل Documents/FRONTEND_PROMPT_WORKLINE.txt
چه اتفاقی می‌افتد؟
  1. مشاور یا staff یک ملک جدید می‌سازد → همیشه pending + file_value اجباری.
  2. سیستم‌منیجر در پنل «املاک تأییدنشده» آن را می‌بیند (ارزش فایل فقط نمایشی).
  3. تأیید می‌کند و مشاور را مشخص می‌کند (دیگر ارزش فایل/معرفی ۲۰ اینجا نیست).
  4. ملک ok می‌شود؛ به مشاور ارجاع و به هم‌رنج‌ها نوتیف می‌رود.
  5. ساعت ارجاع (referred_at) ثبت می‌شود؛ مهلت‌های اولیه از همین لحظه حساب می‌شوند.
  6. مشاور: تماس اولیه → نشر → کارشناسی+GPS → (معرفی ۲۰) → تحلیل آگهی → بازدید (شمارنده) → قرارداد (+رسانه) → وضعیت نهایی.
  7. وضعیت نهایی: فروش/اجاره توسط ما یا خودشون، یا منصرف‌شده (تسک یک‌ماهه).
ورک‌لاین برای فرانت (مثل دیجیکالا)

در جزئیات هر پرونده رصد، آرایه workline می‌آید. فرانت فقط همین را رسم می‌کند. هر آیتم می‌گوید: انجام شده؟ مهلت تا کی؟ overdue شده؟

{
  "current_step": "initial_contact",
  "workline": [
    {
      "key": "referred",
      "title": "تأیید و ارجاع به مشاور",
      "actor": "manager",
      "done": true,
      "done_at": "2026-07-08T12:00:00+00:00",
      "deadline_at": null,
      "remaining_seconds": null,
      "overdue": false
    },
    {
      "key": "initial_contact",
      "title": "تماس اولیه با مالک",
      "actor": "agent",
      "done": false,
      "deadline_hours": 5,
      "remaining_seconds": 7800,
      "overdue": false
    }
  ]
}
مهلت‌ها (از لحظه ارجاع)
مرحلهحداکثرچه کسی تیک می‌زند؟
تماس اولیه۵ ساعتمشاور
نشر آگهی / ارسال به تولید محتوا۲۴ ساعتمشاور
کارشناسی و عکس/فیلم (+ GPS دستگاه)۴۸ ساعتمشاور
ارزش فایل ۲۰/۸۰—فقط نمایشی (از ثبت ملک)
معرفی فایل ۲۰ به مشتریان قدیمی—مشاور (نه منیجر)
تحلیل بازخورد آگهی۷۲ ساعتمشاور
بازدید (شمارنده تکرارپذیر)—مشاور
قرارداد (+ آپلود رسانه)—مشاور
وضعیت نهایی (outcome)—مشاور → بستن رصد
APIهای مهم
کارآدرسچه کسی؟
لیست املاک تأییدنشدهGET /tracking/pending/سیستم‌منیجر
تأیید + شروع رصدPOST /tracking/approve/سیستم‌منیجر
لیست رصدGET /tracking/list/منیجر / مشاور
جزئیات + ورک‌لاینGET /tracking/<id>/منیجر / مشاور مربوطه
تیک مرحلهPOST /tracking/<id>/complete/طبق مرحله
آمار بازدید یک ملکGET /tracking/<id>/visits/analytics/منیجر / مشاور
آپلود رسانه قراردادPOST /tracking/<id>/contract-media/مشاور مربوطه
جدول گزارش کاملGET /tracking/log/سیستم‌منیجر
اعداد بدجGET /tracking/badge/همه کاربران لاگین
نمونه تأیید ملک
POST /tracking/approve/
{
  "property_slug": "تست",
  "agent_id": 3
}

یا با شناسه عددی:

POST /tracking/approve/
{
  "property_id": 12,
  "agent_id": 3
}

ارزش فایل و معرفی مشتریان قدیمی دیگر در Approve نیست (PART C / D). یکی از property_slug یا property_id کافی است.

نمونه تیک مرحله توسط مشاور
POST /tracking/5/complete/
{
  "step": "initial_contact",
  "note": "ساعت ۱۴ با مالک تماس گرفتم"
}
POST /tracking/5/complete/
{
  "step": "expert_media",
  "note": "کارشناسی انجام شد",
  "latitude": 35.6892,
  "longitude": 51.3890,
  "accuracy": 10
}
POST /tracking/5/complete/
{ "step": "visit", "note": "بازدید خانواده احمدی" }
POST /tracking/5/complete/
{ "step": "contract", "note": "قرارداد امضا شد" }
POST /tracking/5/complete/
{
  "step": "outcome",
  "outcome": "sold_by_us",
  "note": "فروش قطعی"
}

مراحل مجاز step:

  • initial_contact
  • publish_content
  • expert_media (+ GPS الزامی)
  • ad_feedback
  • introduce_to_old_clients (فقط مشاور، فایل ۲۰)
  • visit
  • contract
  • outcome (+ فیلد outcome)

set_file_value و sold ساده حذف/جایگزین شده‌اند.

Badge برای فرانت
GET /tracking/badge/
// ادمین
{
  "unread_notifications": 4,
  "pending_approval": 7,
  "active_tracking": 12,
  "overdue": 2,
  "sold": 30
}

// مشاور
{
  "unread_notifications": 1,
  "my_active": 5,
  "my_overdue": 1
}

فرانت با همین عددها badge کنار منوها می‌سازد.

جدول گزارش سیستم‌منیجر
GET /tracking/log/

هر ردیف تقریباً همان ستون‌هایی است که خواستی:

  • نام مالک
  • مشاور پیگیر
  • تاریخ/ساعت ارجاع
  • تماس اولیه
  • کارشناسی و عکس/فیلم
  • ارزش فایل ۲۰/۸۰
  • معرفی فایل ۲۰
  • نشر آگهی / تولید محتوا
  • تحلیل بازخورد آگهی
اپ Notifications

اعلان‌ها اپ جدا دارند تا بعداً برای کل سیستم گسترش پیدا کنند.

  • GET /notifications/ — لیست اعلان‌های من
  • GET /notifications/unread-count/ — فقط عدد بدج
  • POST /notifications/<id>/read/ — خوانده شد
  • POST /notifications/mark-all-read/ — همه خوانده شد

الان این نوتیف‌ها ساخته می‌شوند:

  • به مشاور: ملک ارجاع شد
  • به هم‌رنج‌ها: ملک جدید در رنج شما ثبت شد
  • به سیستم‌منیجر: هر تیک جدید روی رصد
  • به سیستم‌منیجر: تلاش ثبت ملک تکراری
  • به مشاور: یادآوری مهلت وقتی کمتر از ۱ ساعت مانده / overdue (هنگام صدا زدن badge)
پیشنهاد صفحات فرانت
  1. تأیید املاک ← /tracking/pending/ + دکمه تأیید
  2. رصد املاک ← لیست active + فیلتر overdue
  3. جزئیات رصد ← رسم workline به‌صورت خط زمانی
  4. گزارش لاگ ← جدول از /tracking/log/
  5. زنگوله نوتیف ← badge از unread-count + لیست notifications
کجا در بک‌اند است؟
  • Tracking/ — مدل رصد، ورک‌لاین، API تأیید/تیک/لاگ/badge
  • Notifications/ — صندوق اعلان و unread count