Files
clinicpro/docs/new_feture/taskes/task-10-policy-admin-sandbox/task.md
T
hamed 021d0eb6b2 feat: implement cancellation policy, no-show tracking, and waitlist management
- Add implementation notes for cancellation and waitlist features.
- Create task documentation outlining goals, current status, and acceptance criteria for cancellation policy and resource utilization reporting.
- Establish architecture for domain events and outbox pattern to ensure reliable event publishing.
- Define database schema for domain events and necessary queries for resource utilization and plan accuracy reports.
- Implement detailed implementation notes covering edge cases, testing strategies, and documentation requirements.
2026-07-30 11:43:58 +03:30

3.7 KiB

تسک ۱۰ — فرم ساخت قانون و محیط آزمایش

فاز: ۲ (قوانین) · وابستگی: ۰۹ · زمان: ۱۰-۱۲ ساعت


هدف

مستند بند ۱۷، ریسک دوم: «کاربر غیرفنی نمی‌تواند قانون درست تعریف کند → قانون‌های اشتباه، رفتار عجیب». راه‌حل مستند: فرم آماده، الگوهای از پیش تعریف‌شده، آزمایش اجباری قبل از فعال شدن.

بدون این تسک، تسک ۰۹ یک API قدرتمند است که هیچ‌کس نمی‌تواند از آن استفادهٔ درست کند.

دامنه

هست:

  • فرم ساخت قانون که از GET /api/v1/policy-schema ساخته می‌شود (نه hard-code در فرانت)
  • الگوهای آماده (policy templates) — کاربر الگو را انتخاب و مقدار پر می‌کند
  • محیط آزمایش (dry-run): اجرای قانون روی داده واقعی بدون ثبت هیچ چیز
  • آزمایش اجباری: activate تا وقتی یک اجرای آزمایشی موفق ثبت نشده، رد می‌شود
  • نمایش تاریخچهٔ نسخه‌ها با diff

نیست: موتور قانون (تسک ۰۹).

Endpoint ها

متد مسیر توضیح
POST /api/v1/policy/{uuid}/simulate اجرای آزمایشی روی نوبت‌های واقعی گذشته
GET /api/v1/policy-templates الگوهای آماده

POST /policy/{uuid}/activate (تسک ۰۹) یک شرط جدید می‌گیرد: وجود یک simulate موفق برای نسخهٔ جاری.

معیار پذیرش

  • موفق: کاربر الگوی «حداقل فاصله بین جلسات» را انتخاب می‌کند، سرویس و تعداد روز را پر می‌کند، simulate می‌زند → گزارشی از ۵۰ نوبت اخیر: چند تا تحت تأثیر قرار می‌گرفتند و دقیقاً چه تغییری می‌کردند.
  • موفق: simulate هیچ ردیفی در دیتابیس نمی‌نویسد (به‌جز policy_simulation_runs). تست باید تعداد ردیف‌های appointments, price_snapshots, resource_occupancy را قبل و بعد مقایسه کند.
  • موفق: بعد از simulate موفق، activate کار می‌کند.
  • موفق: فرم ساخت قانون بدون هیچ تغییر کد فرانت، فیلد جدیدی که به FieldRegistry اضافه شود را نشان می‌دهد.
  • خطا: activate بدون simulate422 با پیام «ابتدا قانون را آزمایش کنید».
  • خطا: activate بعد از تغییر محتوای قانون (نسخهٔ جدید) → simulate قبلی معتبر نیست → 422.
  • ⚠️ مرزی: محیطی که هیچ نوبت گذشته‌ای ندارد → simulate با گزارش خالی و warning: 'داده‌ای برای آزمایش نیست' موفق شود (وگرنه کلینیک جدید هرگز نمی‌تواند قانون فعال کند).
  • ⚠️ مرزی: قانون deny که همهٔ ۵۰ نوبت را رد می‌کند → simulate موفق ولی با severity: 'high' و پیام «این قانون همهٔ نوبت‌های نمونه را رد می‌کند».
  • ⚠️ مرزی: simulate روی قانون دستهٔ pricing → تفاوت مبلغ per نوبت نمایش داده شود.

خروجی

  • src/Policy/Simulation/
  • assets/admin/pages/PoliciesPage.tsx + PolicyFormPage.tsx + PolicySimulationPage.tsx
  • docs/api/policy.md به‌روزرسانی