- 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.
3.7 KiB
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بدونsimulate→422با پیام «ابتدا قانون را آزمایش کنید». - ❌ خطا:
activateبعد از تغییر محتوای قانون (نسخهٔ جدید) →simulateقبلی معتبر نیست →422. - ⚠️ مرزی: محیطی که هیچ نوبت گذشتهای ندارد →
simulateبا گزارش خالی وwarning: 'دادهای برای آزمایش نیست'موفق شود (وگرنه کلینیک جدید هرگز نمیتواند قانون فعال کند). - ⚠️ مرزی: قانون
denyکه همهٔ ۵۰ نوبت را رد میکند →simulateموفق ولی باseverity: 'high'و پیام «این قانون همهٔ نوبتهای نمونه را رد میکند». - ⚠️ مرزی:
simulateروی قانون دستهٔpricing→ تفاوت مبلغ per نوبت نمایش داده شود.
خروجی
src/Policy/Simulation/assets/admin/pages/PoliciesPage.tsx+PolicyFormPage.tsx+PolicySimulationPage.tsxdocs/api/policy.mdبهروزرسانی