داستان رصد املاک (Workline)
از اینجا به بعد هدف فقط «ثبت ملک» نیست. هدف این است که بعد از تأیید، مسیر کار مشاور مثل وضعیت سفارش دیجیکالا قابل دیدن و قابل اندازهگیری باشد.
خیلی ساده:
ملک ثبت میشود با وضعیت
ملک ثبت میشود با وضعیت
pending (+ ارزش فایل ۲۰/۸۰)
→ سیستممنیجر تأیید میکند (بدون تعیین ارزش)
→ پرونده رصد شروع میشود
→ مشاور مرحلهبهمرحله تیک میزند (بازدید، قرارداد، وضعیت نهایی)
→ بستن رصد با outcome.
مستند کامل پارتبندیشده + پرامپت فرانت:
changelog-parts
و فایل
Documents/FRONTEND_PROMPT_WORKLINE.txt
چه اتفاقی میافتد؟
- مشاور یا staff یک ملک جدید میسازد → همیشه
pending+file_valueاجباری. - سیستممنیجر در پنل «املاک تأییدنشده» آن را میبیند (ارزش فایل فقط نمایشی).
- تأیید میکند و مشاور را مشخص میکند (دیگر ارزش فایل/معرفی ۲۰ اینجا نیست).
- ملک
okمیشود؛ به مشاور ارجاع و به همرنجها نوتیف میرود. - ساعت ارجاع (
referred_at) ثبت میشود؛ مهلتهای اولیه از همین لحظه حساب میشوند. - مشاور: تماس اولیه → نشر → کارشناسی+GPS → (معرفی ۲۰) → تحلیل آگهی → بازدید (شمارنده) → قرارداد (+رسانه) → وضعیت نهایی.
- وضعیت نهایی: فروش/اجاره توسط ما یا خودشون، یا منصرفشده (تسک یکماهه).
ورکلاین برای فرانت (مثل دیجیکالا)
در جزئیات هر پرونده رصد، آرایه 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_contactpublish_contentexpert_media(+ GPS الزامی)ad_feedbackintroduce_to_old_clients(فقط مشاور، فایل ۲۰)visitcontractoutcome(+ فیلد 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)
پیشنهاد صفحات فرانت
- تأیید املاک ←
/tracking/pending/+ دکمه تأیید - رصد املاک ← لیست active + فیلتر overdue
- جزئیات رصد ← رسم
worklineبهصورت خط زمانی - گزارش لاگ ← جدول از
/tracking/log/ - زنگوله نوتیف ← badge از unread-count + لیست notifications
کجا در بکاند است؟
Tracking/— مدل رصد، ورکلاین، API تأیید/تیک/لاگ/badgeNotifications/— صندوق اعلان و unread count