GET /api/v1/patient/{uuid} now returns a `profile` object from UserProfile
(demographics, contact, insurance names resolved). Admin record detail shows
a "patient info" section. Empty fields render as "ثبت نشده".
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4.9 KiB
اتصال پروندهی بیمار به پروفایل بیمار
پروژه
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 فیلدهای موجود (نمونه):
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():
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، بیمه پایه/مکمل، تماس) اضافه کن. PatientRecordtype در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 استفاده کن.