Files
customerTicket/docs/ORGANIZATIONAL_TICKETING_GAP_ANALYSIS.md
2026-09-10 11:34:19 +03:30

36 lines
5.0 KiB
Markdown

# ممیزی حلقه عملیاتی سامانه تیکتینگ سازمانی
این سند وضعیت پیاده‌سازی را در برابر نیازمندی شرکت لوله گستر گلپایگان ثبت می‌کند. معیار «تکمیل» فقط وجود مدل یا صفحه نیست؛ مسیر باید از ایجاد داده تا مجوز، ارسال، مشاهده، پاسخ، ممیزی و گزارش‌گیری قابل آزمون باشد.
| حوزه | مسیر عملیاتی | وضعیت فعلی | شاهد اجرایی |
|---|---|---|---|
| RBAC واحدی | عضویت کاربر → permission واحد/عضو → queryset و object policy | تکمیل | `OrganizationalUnit`, `UnitMembership`, `TicketPolicy` و تست ایزوله‌سازی واحد |
| ایجاد تیکت سازمانی | انتخاب واحد مجاز → مخاطب/نوع/گروه → تیکت واحدی → SMS | تکمیل | فرم staff اکنون permission پویا و مالکیت واحد را اعمال می‌کند |
| مخاطبان چندگروهی | مخاطب → چند `ContactGroup` متعلق به واحدهای مجاز | تکمیل | رابطه Many-to-Many و فرم محدودشده به واحدهای قابل مدیریت |
| ارسال گروهی ایزوله | گروه → یک تیکت خصوصی برای هر مخاطب → یک job و Magic Link مستقل | تکمیل | `dispatch_group_tickets` و تست جداسازی گیرندگان |
| اسناد گروهی | یک یا چند سند → ذخیره مستقل داخل پیام اولیه هر تیکت | تکمیل | `files` در فرم dispatch و تست مسیر ذخیره مجزا |
| پاسخ خارجی | Magic Link بدون حساب → فقط همان تیکت → متن/فایل → اعلان Bale | تکمیل | session grant محدود به یک ticket و تست پاسخ ناشناس |
| ممیزی Magic Link | سازنده/واحد/گیرنده → هر بازدید با زمان/IP/UA → شمارنده | تکمیل | `TicketMagicLink`, `MagicLinkAccessLog` و تست بازدید |
| عملیات امنیتی لینک | فیلتر وضعیت/واحد/بازه → ابطال فوری با permission واحدی | تکمیل | staff audit، pagination و endpoint ابطال POST |
| گزارش ارسال گروهی | وضعیت gateway → بازشدن لینک → پاسخ مخاطب → مقایسه | تکمیل در سطح قابل اثبات | وضعیت پایدار dispatch، پاسخ آخر و شمارنده بازدید |
| بازیابی ارسال خطادار | FAILED → اقدام مجاز واحد → PENDING → worker retry | تکمیل | endpoint تلاش مجدد و تست عدم دسترسی واحد دیگر |
| الگوهای SMS | الگوی واحدی + fallback عمومی + متغیرهای کنترل‌شده | تکمیل | `SMSTemplate`, validation و فرم واحدی |
| فیلتر پیشرفته | واحدها، نوع ارسال، وضعیت، مخاطب، گروه‌ها، تاریخ و tag | تکمیل | `filter_staff_tickets` و UI فیلتر ترکیبی |
| پردازش غیرهمزمان | outbox قفل‌شونده → retry/backoff → SMS/Bale | تکمیل | `process_notifications`, `skip_locked` و سرویس worker در Compose |
| رهگیری provider | نتیجه gateway → شناسه مرجع ذخیره‌شده | تکمیل | `provider_message_id` در `NotificationJob` |
| Delivery Receipt مخابراتی | callback اپراتور → وضعیت تحویل گوشی | نیازمند قرارداد اپراتور | API فعلی 0098SMS فقط پذیرش درخواست را برمی‌گرداند؛ `SENT` به معنی پذیرش gateway است، نه تحویل قطعی |
## مرزهای امنیتی
- مخاطب بیرونی با Magic Link فقط به یک تیکت دسترسی می‌گیرد و به فهرست تیکت‌ها یا تیکت دیگر دسترسی ندارد.
- یادداشت داخلی و پیوست آن برای مشتری و session جادویی پنهان است.
- queryهای staff ابتدا با واحدهای قابل مشاهده محدود می‌شوند و سپس فیلترهای کاربر اعمال می‌شوند.
- ابطال لینک و retry ارسال فقط با permission پویا در همان واحد انجام می‌شود.
- شناسه provider ذخیره می‌شود، اما متن پیام، credential درگاه و token خام Magic Link در گزارش‌ها ذخیره یا نمایش داده نمی‌شود.
## الزام استقرار
- `web` و `notification-worker` باید همزمان و تحت supervisor یا Docker Compose با restart policy اجرا شوند.
- production باید از `config.settings.prod`، HTTPS، secret قوی و `PUBLIC_BASE_URL` عمومی HTTPS استفاده کند.
- برای ادعای «تحویل به گوشی»، endpoint و امضای webhook اپراتور منتخب باید مشخص شود؛ تا آن زمان UI باید بین پذیرش gateway و بازشدن لینک تفاوت بگذارد.