# گزارش اجرای فاز ۳ پنل مدیر تاریخ اجرا: ۱۴۰۵/۰۵/۲۹ (2026-08-20) ## محدوده اجراشده - بخش مستقل «تخصیص آموزش» به ناوبری مدیر اضافه شد. - جریان ساده و پنج‌مرحله‌ای مخاطب، آموزش، مهلت، اعلان و بازبینی پیاده‌سازی شد. - مدیر می‌تواند یک تیم تحت مدیریت یا چند کارمند مشخص از همان محدوده را انتخاب کند. - فقط نسخه‌های منتشرشده دوره‌ها و مسیرهای یادگیری در انتخاب آموزش نمایش داده می‌شوند. - سه حالت بدون مهلت، تاریخ مشخص و مهلت نسبی پشتیبانی می‌شود. - اعلان فوری، یادآوری قبل از مهلت، یادآوری روز مهلت و شرط «فقط اگر شروع نشده» قابل تنظیم است. - پیش از ثبت، خلاصه کامل تصمیم نمایش داده می‌شود و پس از ثبت، تعداد تخصیص موفق، تکراری، اعلان ارسال‌شده، ردشده و زمان‌بندی‌شده گزارش می‌شود. - فهرست تخصیص‌های اخیر مدیر با امکان تغییر/حذف مهلت و ارسال یادآوری اضافه شد. - اقدام‌های «تخصیص آموزش» و «ارسال یادآوری» از پروفایل کارمند، با deep-link و فیلتر همان کارمند، به جریان جدید متصل شدند. ## قرارداد API و مجوزها Endpointهای اختصاصی و محدود به مدیر: - `GET /api/v1/manager/assignment-contexts` - `GET /api/v1/manager/assignments` - `POST /api/v1/manager/assignments` - `PATCH /api/v1/manager/assignments/{assignment}/deadline` - `POST /api/v1/manager/assignments/{assignment}/reminders` مجوزهای افزوده‌شده: - `manager.assignments.manage` - `manager.deadlines.manage` - `manager.reminders.send` Endpoint عمومی سازمان برای assignment همچنان برای مدیر ممنوع است. مجوزهای جدید فقط جریان محدودشده مدیر را فعال می‌کنند. ## امنیت، Scope و یکپارچگی داده - مخاطبان در backend از تیم‌های تحت مدیریت و اعضای فعال آن‌ها استخراج می‌شوند؛ شناسه ارسالی کلاینت منبع اعتماد نیست. - ساخت، مشاهده، تغییر مهلت و یادآوری فقط برای تخصیص‌هایی مجاز است که مدیر ساخته و همه گیرندگان آن همچنان داخل scope او باشند. - دوره Draft یا محتوای خصوصی از context حذف و در mutation نیز رد می‌شود. - تخصیص فعال تکراری در سطح هر گیرنده رد می‌شود؛ گیرندگان غیرتکراری همان درخواست همچنان ثبت می‌شوند. - ساخت تخصیص، تغییر مهلت و ارسال یادآوری در audit log ثبت می‌شوند. - reminder دستی دارای کلید idempotency روزانه است تا ارسال تکراری ناخواسته رخ ندهد. - مسیر یادآوری با rate limit مستقل محافظت شده است. ## معماری اعلان و زمان‌بندی - ارسال واقعی از کانال In-App موجود انجام می‌شود و Notification Center یادگیرنده را تغذیه می‌کند. - جدول `notification_schedules` برای اعلان‌های آینده، وضعیت تحویل، شرط، خطا و کلید idempotency اضافه شد. - فرمان `notifications:process-schedules` هر دقیقه توسط scheduler اجرا می‌شود. - هنگام تحویل، تکمیل/لغو assignment و شرط «شروع نشده» دوباره ارزیابی می‌شود. - با تغییر مهلت، reminderهای در انتظار لغو و بر اساس مهلت جدید زمان‌بندی می‌شوند؛ با حذف مهلت لغو می‌شوند. - تنظیمات `inAppNotifications`، `assignmentNotifications` و `deadlineReminders` کاربر رعایت می‌شوند؛ اعلان‌های الزامی از اعلان اختیاری تفکیک شده‌اند. - لایه orchestration از کانال تحویل جدا است و برای اتصال بعدی Web/PWA/FCM آماده است؛ هیچ اتصال ساختگی FCM یا Push اضافه نشده است. ## تصمیم‌های UI/UX - طراحی با tokenها، RTL، dark mode و ترجمه فارسی/انگلیسی موجود هماهنگ نگه داشته شد. - هر مرحله یک تصمیم مشخص دارد و خطا پیش از عبور از همان مرحله با `role="alert"` اعلام می‌شود. - ورودی‌ها label واقعی، دکمه آیکونی بستن نام قابل‌دسترسی و ترتیب طبیعی keyboard دارند. - وضعیت‌ها تنها با رنگ منتقل نمی‌شوند و متن/آیکن مکمل دارند. - motion محدود است و `prefers-reduced-motion` رعایت می‌شود. - در پروفایل کارمند، لینک تخصیص ویزارد را برای همان شخص باز می‌کند؛ لینک یادآوری فقط تخصیص‌های مرتبط با او را فیلتر می‌کند. ## تست و راستی‌آزمایی - Backend کامل: ۱۶۲ تست و ۱۱۰۲ assertion پاس. - Frontend کامل: ۳۱ فایل و ۹۸ تست پاس. - تست متمرکز Manager frontend: ۷ تست پاس. - تست متمرکز Manager backend: ۷ تست و ۵۸ assertion پاس. - TypeScript typecheck، lint، Pint و build تولیدی پاس. - migration زمان‌بندی اعلان با موفقیت اجرا شد. - Playwright فاز ۳ در Chrome: ۲ تست پاس؛ ویزارد پنج‌مرحله‌ای و عرض‌های ۳۷۵، ۷۶۸ و ۱۴۴۰ پیکسل بدون overflow بررسی شدند. - build هشدار قدیمی chunkهای بزرگ‌تر از ۵۰۰ کیلوبایت را دارد؛ این هشدار مانع build نیست و به این فاز اختصاص ندارد. - PHPStan در وابستگی‌های نصب‌شده پروژه وجود ندارد؛ بنابراین اجرای آن ممکن نبود و جایگزین نتایج آن ادعا نشده است. ## خارج از محدوده این فاز - قابلیت‌های Skills، Insights، Reports و Approvals فاز ۴ - bulk deadline extension فراتر از نیاز واقعی فعلی - اتصال تولیدی Web Push، PWA Push یا FCM - هرگونه redesign سراسری پنل مدیر فاز ۳ در همین نقطه متوقف شده است و فاز ۴ شروع نشده است.