# اتصال پرونده‌ی بیمار به پروفایل بیمار ## پروژه `clinicpro` (backend + admin frontend) ## زمینه پرونده‌ی بیمار (`PatientRecord`) فعلاً فقط به `User` وصل است و در پنل صرفاً نام و موبایل (و اخیراً کد ملی) نمایش داده می‌شود. اطلاعات کامل دموگرافیک بیمار که در `UserProfile` ذخیره شده، برای کلینیک/مطب قابل مشاهده نیست. ## مشکل / هدف وقتی کاربری به یک مطب یا کلینیک اضافه می‌شود، **اطلاعات پروفایل او باید برای آن کلینیک مشخص باشد**: نام و نام خانوادگی، کد ملی، جنسیت، تاریخ تولد، بیمه‌ی پایه/مکمل، تماس و … . یعنی پرونده‌ی بیمار باید بر اساس `UserProfile` غنی شود. ## فایل‌های مرتبط | فایل | نقش | |------|-----| | `src/UserProfile/Entity/UserProfile.php` | پروفایل کامل بیمار | | `src/Patient/Entity/PatientRecord.php` | پرونده؛ `toArray()` فعلاً فقط `user_name/user_mobile/user_national_code` | | `src/Patient/Controller/PatientController.php` | `list` + `show` | | `src/Patient/Repository/PatientRecordRepository.php` | کوئری‌ها | | `assets/admin/pages/MyPatientsPage.tsx` | لیست کارتی + صفحه‌ی جزئیات پرونده (بنر بالای پرونده) | | `assets/admin/types/index.ts` | `PatientRecord` type | | `docs/api/patient.md` | مستندات | ## وضعیت فعلی `UserProfile` فیلدهای موجود (نمونه): ```php private ?string $family; private ?string $fathersName; private ?string $nationalCode; private ?string $gender; private ?int $dateOfBirth; // unix private ?string $bloodType; private ?string $maritalStatus; private ?string $job; private ?string $address; private ?string $homePhone; private ?int $basicInsuranceId; private ?int $supplementaryInsuranceId; ``` `PatientRecord::toArray()`: ```php return [ 'uuid' => $this->uuid, 'entity_type' => $this->entityType, 'entity_id' => $this->entityId, 'user_uuid' => $this->user->getUuid(), 'user_name' => $this->user->getRealName(), 'user_mobile' => $this->user->getMobileNumber(), 'user_national_code' => $this->user->getNationalCode(), 'created_by_type' => $this->createdByType, 'created_at' => $this->createdAt, ]; ``` پروفایل بیمار اصلاً در پاسخ نیست. ## وظایف ### ۱. تحلیل رابطه User ↔ UserProfile `UserProfile` را کامل بخوان: رابطه به `User`، repository، و اینکه آیا یک‌به‌یک است. روش گرفتن پروفایل از روی `User` را پیدا کن. ### ۲. غنی‌سازی پاسخ پرونده - در `show` (و در صورت نیاز `list`) اطلاعات پروفایل بیمار را به پاسخ اضافه کن. توصیه: یک کلید `profile` در پاسخِ `show` (جزئیات کامل)، و در `list` فقط فیلدهای سبک (نام، جنسیت، کد ملی) برای کارت. - نام بیمه‌ها از id به نام resolve شود (LEFT JOIN یا lookup روی `insurances`). - اگر پروفایل وجود نداشت، مقادیر null برگردد (نه خطا). > برای `list` از kept-light استفاده کن تا کوئری سنگین نشود؛ برای `show` می‌توان پروفایل کامل را join کرد. ### ۳. Admin Frontend — نمایش پروفایل در پرونده - در صفحه‌ی جزئیات پرونده (بنر بالای تاریخچه‌ی مراجعات)، یک بخش «اطلاعات بیمار» با فیلدهای پروفایل (نام کامل، کد ملی، جنسیت، تاریخ تولد شمسی با `formatDate`، بیمه پایه/مکمل، تماس) اضافه کن. - `PatientRecord` type در `types/index.ts` را با `profile` به‌روز کن. - اگر فیلدی خالی بود، «ثبت نشده» نشان بده. ### ۴. مستندات `docs/api/patient.md` را با ساختار جدید پاسخ (`profile`) برای `show` و فیلدهای سبک `list` به‌روز کن. ## نکات مهم - تاریخ تولد unix timestamp است؛ با `formatDate()` شمسی نمایش بده. - `entity_type` می‌تواند `doctor` یا `clinic` باشد؛ نمایش پروفایل برای هر دو یکسان. - این پرامپت مکمل `create-patient-without-signup.md` است؛ اگر بیمار جدید بدون ثبت‌نام ساخته می‌شود، همان فیلدهای پروفایل باید قابل ذخیره و سپس قابل نمایش باشند — ساختار `UserProfile` را یکدست نگه‌دار. - کوئری list نباید N+1 شود؛ از join استفاده کن.