Refactor PRD documentation: Remove outdated pre_prd.md and create comprehensive prd.md for ClinicPro Phase 2, detailing new features, requirements, and API endpoints. Add initial pre_prd.md for settings and staff management.

This commit is contained in:
hamed
2026-06-14 20:43:59 +03:30
parent 9c935c341f
commit a1d3442b9b
2 changed files with 31 additions and 17 deletions
+31 -17
View File
@@ -91,15 +91,23 @@ ClinicStaff:
| 2 | Professional | ۵ منشی + پرونده بیمار + مدیریت سرویس‌ها |
#### دوره‌های اشتراک (مثال)
| دوره | مدت (ماه) | قیمت Basic | قیمت Professional |
|------|-----------|-----------|------------------|
| ۱ ماهه | 1 | ادمین تعیین می‌کند | ادمین تعیین می‌کند |
| ۳ ماهه | 3 | ادمین تعیین می‌کند | ادمین تعیین می‌کند |
| ۶ ماهه | 6 | ادمین تعیین می‌کند | ادمین تعیین می‌کند |
| ۱۲ ماهه | 12 | ادمین تعیین می‌کند | ادمین تعیین می‌کند |
| دوره | مدت (ماه) | نوع | قیمت |
|------|-----------|-----|------|
| تریال | 1 | trial — رایگان | ۰ ریال |
| ۱ ماهه | 1 | paid | ادمین تعیین می‌کند |
| ۳ ماهه | 3 | paid | ادمین تعیین می‌کند |
| ۶ ماهه | 6 | paid | ادمین تعیین می‌کند |
| ۱۲ ماهه | 12 | paid | ادمین تعیین می‌کند |
> ادمین می‌تواند دوره‌های دلخواه اضافه، ویرایش یا غیرفعال کند.
#### دوره تریال
- تریال فقط برای پنل **Basic** فعال است
- هر کلینیک/دکتر فقط **یک بار** می‌تواند از تریال استفاده کند (بررسی در `ClinicSubscription`)
- تریال نیازی به پرداخت ندارد — مستقیم فعال می‌شود
- ادمین می‌تواند تریال را به‌طور کلی فعال/غیرفعال کند (`trial_enabled` در SiteConfig)
- بعد از انقضای تریال، سیستم به پنل Free بازمی‌گردد (نه حذف داده)
#### نیازمندی‌های کارکردی
- **F2.1** — ادمین برای هر ترکیب (پنل × دوره) یک قیمت تعریف می‌کند
- **F2.2** — ادمین می‌تواند دوره‌های جدید اضافه کند (مثلاً ۲ ماهه) یا دوره‌ای را غیرفعال کند
@@ -109,6 +117,8 @@ ClinicStaff:
- **F2.6** — gate: `hasFeature('patient_records')` — بررسی اشتراک فعال و expired نبودن
- **F2.7** — گزارش فروش پنل‌ها در داشبورد ادمین (تعداد، درآمد، بر اساس دوره و سطح)
- **F2.8** — نمایش تاریخ انقضا و هشدار ۷ روز قبل به کلینیک/دکتر
- **F2.9** — تریال Basic: فعال‌سازی رایگان یک‌بار — endpoint جداگانه `POST /api/v1/subscription/trial`
- **F2.10** — بررسی استفاده قبلی از تریال قبل از فعال‌سازی (`used_trial: bool` روی entity)
#### موجودیت‌های جدید مورد نیاز
```
@@ -124,9 +134,10 @@ SubscriptionPlan:
SubscriptionPeriod:
- id, uuid
- plan_id (FK → subscription_plans)
- label: string (مثال: "۶ ماهه", "سالانه")
- label: string (مثال: "۶ ماهه", "تریال ۱ ماهه")
- duration_months: int (1, 3, 6, 12, ...)
- price_rials: int (قیمت این دوره برای این پنل)
- price_rials: int (0 برای تریال)
- is_trial: bool (default: false — فقط یک دوره trial در Basic)
- active: bool
- sort_order: int (ترتیب نمایش)
- created_at, updated_at
@@ -137,7 +148,8 @@ ClinicSubscription:
- entity_id: int
- plan_id (FK → subscription_plans)
- period_id (FK → subscription_periods)
- payment_id (FK → payments, nullable)
- payment_id (FK → payments, nullable — برای تریال null است)
- is_trial: bool (کپی از period — برای گزارش راحت‌تر)
- starts_at: int (Unix timestamp)
- expires_at: int (Unix timestamp — null = بی‌نهایت برای Free)
- created_at
@@ -150,25 +162,27 @@ ClinicSubscription:
#### API endpoints
| Method | Path | Permission |
|--------|------|-----------|
| `GET` | `/api/v1/subscription/plans` | public — لیست پنل‌ها با دوره‌ها و قیمت‌ها |
| `GET` | `/api/v1/subscription/my` | clinic/doctor — اشتراک فعال + تاریخ انقضا |
| `GET` | `/api/v1/subscription/plans` | public — لیست پنل‌ها با دوره‌ها، قیمت‌ها و دوره تریال |
| `GET` | `/api/v1/subscription/my` | clinic/doctor — اشتراک فعال + تاریخ انقضا + `used_trial` |
| `POST` | `/api/v1/subscription/trial` | clinic/doctor — فعال‌سازی تریال Basic (رایگان، یک‌بار) |
| `POST` | `/api/v1/subscription-payment` | clinic/doctor — `{ period_uuid }` |
| `GET` | `/api/v1/admin/subscription/plans` | admin — مدیریت پنل‌ها |
| `POST` | `/api/v1/admin/subscription/plan` | admin |
| `PATCH` | `/api/v1/admin/subscription/plan/{uuid}` | admin |
| `POST` | `/api/v1/admin/subscription/period` | admin — افزودن دوره جدید |
| `PATCH` | `/api/v1/admin/subscription/period/{uuid}` | admin — ویرایش قیمت/مدت |
| `PATCH` | `/api/v1/admin/subscription/period/{uuid}` | admin — ویرایش قیمت/مدت/تریال |
| `DELETE` | `/api/v1/admin/subscription/period/{uuid}` | admin — غیرفعال‌سازی |
| `GET` | `/api/v1/admin/subscription/report` | admin — گزارش فروش |
| `GET` | `/api/v1/admin/subscription/report` | admin — گزارش فروش + تعداد تریال‌های فعال‌شده |
#### Frontend
- صفحه کلینیک/دکتر: `SubscriptionPage.tsx`
- نمایش پنل فعال + تاریخ انقضا (شمسی)
- جدول مقایسه پنل‌ها با انتخاب دوره (مثل toggle ماهانه/سالانه)
- اگر `used_trial = false`: بنر «۱ ماه رایگان امتحان کنید» با دکمه فعال‌سازی تریال
- نمایش پنل فعال + تاریخ انقضا (شمسی) + badge «تریال» اگر is_trial باشد
- جدول مقایسه پنل‌ها با انتخاب دوره (toggle)
- دکمه خرید → redirect به gateway
- صفحه ادمین: `AdminSubscriptionPage.tsx`
- تب «پنل‌ها»: ویرایش قیمت دوره‌ها (DataTable با inline edit)
- تب «گزارش»: فروش بر اساس بازه زمانی، سطح، دوره
- تب «پنل‌ها»: ویرایش قیمت دوره‌ها + مشخص کردن کدام دوره تریال است
- تب «گزارش»: فروش + تریال‌ها بر اساس بازه زمانی
---