Reports — گزارش و آمار داشبورد
اپ جدا برای آمار و گزارشگیری. الان دو اندپوینت اصلی برای داشبورد سیستممنیجر دارد؛ بعداً هر آمار جدیدی همینجا اضافه میشود تا فرانت یک نقطه واحد برای گزارش داشته باشد.
برای کارت چارت دوخطی داشبورد:
برای اعداد بالای داشبورد (KPI):
GET /reports/dashboard/weekly-trend/
برای اعداد بالای داشبورد (KPI):
GET /reports/dashboard/kpis/
هر دو اندپوینت داشبورد فقط برای سیستممنیجر / ادمین هستند.
Header:
Header:
Authorization: Bearer <access_token>
چرا این آمار؟
بهجای «ثبت ملک و ثبت کاربر»، داشبورد عملیات واقعی آژانس را نشان میدهد:
- ارجاع vs فروش — ورودی کار تأییدشده در برابر خروجی فروش
- KPIهای عملیاتی — صف تأیید، رصد فعال، overdue، تسکهای عقبافتاده
۱) KPIهای داشبورد
GET /reports/dashboard/kpis/
دسترسی: سیستممنیجر / ادمین
نمونه پاسخ:
{
"as_of": "2026-07-19T15:10:00+00:00",
"week": {
"label": "هفته اخیر",
"start": "2026-07-18",
"end": "2026-07-24"
},
"kpis": {
"pending_approval": 7,
"active_tracking": 12,
"overdue_tracking": 2,
"sold_this_week": 3,
"referred_this_week": 8,
"open_tasks": 15,
"overdue_tasks": 4,
"registered_today": 2
}
}
| کلید | معنی | پیشنهاد UI |
|---|---|---|
pending_approval | املاک در صف تأیید | کارت قرمز/نارنجی + لینک به /tracking/pending/ |
active_tracking | پروندههای رصد فعال | کارت آبی |
overdue_tracking | رصدهایی که حداقل یک مرحله overdue دارند | کارت هشدار |
sold_this_week | فروشهای همین هفته (شنبه تا جمعه) | کارت سبز |
referred_this_week | ارجاعهای همین هفته | کنار sold برای مقایسه |
open_tasks | تسکهای باز (غیر done/cancelled) | کارت تسک |
overdue_tasks | تسکهای مهلتگذشته باز | کارت هشدار |
registered_today | ملک ثبتشده امروز | اختیاری / کوچک |
۲) روند هفتگی (چارت دوخطی)
GET /reports/dashboard/weekly-trend/
GET /reports/dashboard/weekly-trend/?metric=referral_vs_sold&range=week
GET /reports/dashboard/weekly-trend/?metric=register_vs_approve&range=last_week
GET /reports/dashboard/weekly-trend/?metric=tasks_created_vs_done&range=week
Query params
| پارامتر | مقادیر | پیشفرض | توضیح |
|---|---|---|---|
metric |
referral_vs_sold | register_vs_approve | tasks_created_vs_done |
referral_vs_sold |
کدام جفت سری روی چارت بیاید |
range |
week | last_week |
week |
هفته جاری یا هفته قبل (شنبه تا جمعه، تایمزون تهران) |
متریکهای آماده
| metric | عنوان | سری ۱ | سری ۲ |
|---|---|---|---|
referral_vs_sold |
روند ارجاع و فروش املاک | referred — ارجاعشده |
sold — فروختهشده |
register_vs_approve |
روند ثبت و تأیید املاک | registered — ثبتشده |
approved — تأیید/ارجاع |
tasks_created_vs_done |
روند تسکهای تیم | created — ساختهشده |
done — انجامشده |
نمونه پاسخ (پیشفرض referral_vs_sold):
{
"metric": "referral_vs_sold",
"title": "روند ارجاع و فروش املاک",
"subtitle": "آمار هفتگی عملیات",
"range": {
"key": "week",
"label": "هفته اخیر",
"start": "2026-07-18",
"end": "2026-07-24"
},
"series": [
{ "key": "referred", "label": "ارجاعشده", "color_hint": "purple" },
{ "key": "sold", "label": "فروختهشده", "color_hint": "green" }
],
"points": [
{
"date": "2026-07-18",
"weekday": "شنبه",
"weekday_index": 5,
"values": { "referred": 1, "sold": 0 }
},
{
"date": "2026-07-19",
"weekday": "یکشنبه",
"weekday_index": 6,
"values": { "referred": 3, "sold": 1 }
},
{
"date": "2026-07-20",
"weekday": "دوشنبه",
"weekday_index": 0,
"values": { "referred": 2, "sold": 0 }
},
{
"date": "2026-07-21",
"weekday": "سهشنبه",
"weekday_index": 1,
"values": { "referred": 4, "sold": 2 }
},
{
"date": "2026-07-22",
"weekday": "چهارشنبه",
"weekday_index": 2,
"values": { "referred": 1, "sold": 1 }
},
{
"date": "2026-07-23",
"weekday": "پنجشنبه",
"weekday_index": 3,
"values": { "referred": 2, "sold": 0 }
},
{
"date": "2026-07-24",
"weekday": "جمعه",
"weekday_index": 4,
"values": { "referred": 3, "sold": 2 }
}
],
"totals": {
"referred": 16,
"sold": 6
},
"available_metrics": [
{ "key": "referral_vs_sold", "title": "روند ارجاع و فروش املاک" },
{ "key": "register_vs_approve", "title": "روند ثبت و تأیید املاک" },
{ "key": "tasks_created_vs_done", "title": "روند تسکهای تیم" }
]
}
چطور فرانت چارت را بکشد؟
titleوsubtitleرا بالای کارت بگذار.- دراپداون «هفته اخیر / هفته قبل» → پارامتر
range. - اگر سوییچ متریک خواستی، از
available_metricsیا اندپوینت catalog استفاده کن. - محور X:
points[].weekday(شنبه … جمعه). - دو خط: برای هر
series[].keyمقدارpoints[].values[key]. color_hintفقط راهنمای رنگ است؛ الزام UI نیست.
const res = await api.get('/reports/dashboard/weekly-trend/', {
params: { metric: 'referral_vs_sold', range: 'week' },
});
const labels = res.data.points.map((p) => p.weekday);
const seriesA = res.data.points.map((p) => p.values.referred);
const seriesB = res.data.points.map((p) => p.values.sold);
// بده به Chart.js / Recharts / ApexCharts
۳) کاتالوگ گزارشها (توسعهپذیر)
GET /reports/catalog/
دسترسی: ادمین، یا staff با پرمیشن reports.view
این اندپوینت فهرست متریکها و مسیرهای داشبورد را برمیگرداند تا فرانت بتواند UI گزارش را داینامیک بسازد و بعداً گزارشهای جدید بدون hardcode اضافه شوند.
{
"dashboard": {
"kpis": "/reports/dashboard/kpis/",
"weekly_trend": "/reports/dashboard/weekly-trend/"
},
"weekly_trend_metrics": [
{
"key": "referral_vs_sold",
"title": "روند ارجاع و فروش املاک",
"subtitle": "آمار هفتگی عملیات",
"series": [
{ "key": "referred", "label": "ارجاعشده", "color_hint": "purple" },
{ "key": "sold", "label": "فروختهشده", "color_hint": "green" }
]
}
]
}
خطاهای رایج
401— توکن نیست / منقضی شده403— کاربر سیستممنیجر نیست400—metricیاrangeنامعتبر
مجوزهای RBAC
reports.view— مشاهده گزارشها / catalogreports.manage— مدیریت گزارشهای آینده
بعد از اضافه شدن: python manage.py sync_rbac
چطور آمار جدید اضافه کنیم؟
- در
Reports/services/dashboard.pyیک تابع سری جدید بنویس. - آن را به
TREND_METRICSوSERIES_BUILDERSاضافه کن. - فرانت بدون تغییر بکاند خاص، از
available_metrics/ catalog متریک جدید را میبیند. - برای گزارشهای ذخیرهشونده بعدی میتوان مدل در
Reports/models.pyتعریف کرد.
اندپوینتهای جدید (PART G)
GET /reports/dashboard/agent-type-breakdown/?range=week— قیف سه رنجGET /reports/dashboard/visits-by-agent/?range=week&agent_id=— بازدید به تفکیک مشاورGET /reports/dashboard/agent/me/— داشبورد خود مشاور- پارامترهای
agent_typeوagent_idروی weekly-trend و kpis
متریکهای تب جدید: sale_outcomes, rent_outcomes, not_closed_at_agency, in_progress_vs_closed, visits_trend, workline_funnel
جزئیات پارتها: changelog-parts
نقشه سریع
GET /reports/dashboard/kpis/
GET /reports/dashboard/weekly-trend/?metric=sale_outcomes&range=week&agent_type=Apartment
GET /reports/dashboard/agent-type-breakdown/?range=week
GET /reports/dashboard/visits-by-agent/?range=week
GET /reports/dashboard/agent/me/
GET /reports/catalog/
- کد:
Reports/ - سرویس آمار:
Reports/services/dashboard.py - Base URL:
/reports/