Implement SMS panel user flow and patient records system; add wallet charging, automatic reminders, and patient session management with detailed database schema and user flows.
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
# پایگاه داده — تسک ۱۶: داشبورد هوشمند
|
||||
|
||||
## هیچ migration لازم نیست
|
||||
|
||||
همه دادهها از جداول موجود و جداول ساختهشده در تسکهای قبل خوانده میشوند.
|
||||
|
||||
## Query های جدید
|
||||
|
||||
### نوبتها بر اساس روز (admin chart)
|
||||
```sql
|
||||
SELECT
|
||||
FLOOR(created_at / 86400) * 86400 AS date_unix,
|
||||
COUNT(*) AS count
|
||||
FROM appointments
|
||||
WHERE created_at BETWEEN :from AND :to
|
||||
GROUP BY date_unix
|
||||
ORDER BY date_unix ASC
|
||||
```
|
||||
|
||||
### درآمد بر اساس روز (از patient_sessions)
|
||||
```sql
|
||||
SELECT
|
||||
FLOOR(created_at / 86400) * 86400 AS date_unix,
|
||||
SUM(final_price_rials) AS amount_rials
|
||||
FROM patient_sessions
|
||||
WHERE entity_type = :entityType
|
||||
AND record_id IN (
|
||||
SELECT id FROM patient_records WHERE entity_type = :entityType AND entity_id = :entityId
|
||||
)
|
||||
AND created_at BETWEEN :from AND :to
|
||||
GROUP BY date_unix
|
||||
ORDER BY date_unix ASC
|
||||
```
|
||||
|
||||
### فروش اشتراک بر اساس پنل (admin)
|
||||
```sql
|
||||
SELECT
|
||||
sp.name AS plan,
|
||||
COUNT(cs.id) AS count,
|
||||
SUM(p.amount) AS total_rials
|
||||
FROM clinic_subscriptions cs
|
||||
JOIN subscription_plans sp ON cs.plan_id = sp.id
|
||||
LEFT JOIN payments p ON cs.payment_id = p.id
|
||||
WHERE cs.is_trial = 0
|
||||
AND cs.created_at BETWEEN :from AND :to
|
||||
GROUP BY sp.name
|
||||
```
|
||||
|
||||
### بیماران منحصربهفرد در بازه
|
||||
```sql
|
||||
SELECT COUNT(DISTINCT pr.user_id) AS unique_count
|
||||
FROM patient_records pr
|
||||
JOIN patient_sessions ps ON ps.record_id = pr.id
|
||||
WHERE pr.entity_type = :entityType
|
||||
AND pr.entity_id = :entityId
|
||||
AND ps.created_at BETWEEN :from AND :to
|
||||
```
|
||||
|
||||
## نکات مهم
|
||||
|
||||
- تمام `created_at` ها Unix timestamp هستند — فیلتر بازه زمانی مستقیم روی عدد اعمال میشود
|
||||
- گروهبندی روزانه: `FLOOR(created_at / 86400) * 86400` → شروع روز به Unix
|
||||
- نمایش در frontend: تبدیل Unix به تاریخ شمسی با `formatDate()`
|
||||
Reference in New Issue
Block a user