feat(patient): edit patient basic info (doctor/clinic/secretary)
Add PATCH /api/v1/patient/{uuid} to update User.realName + UserProfile
demographic/insurance fields (mobile stays immutable, national_code
uniqueness enforced). Expose name/family separately in profile payload.
Add edit modal in my-patients. Update patient.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -139,6 +139,8 @@ Returns a single patient record, enriched with the patient's full profile (`prof
|
||||
"created_at": 1718375000,
|
||||
"profile": {
|
||||
"full_name": "محمد محمدی",
|
||||
"name": "محمد",
|
||||
"family": "محمدی",
|
||||
"national_code": "0012345678",
|
||||
"gender": "male",
|
||||
"date_of_birth": 700000000,
|
||||
@@ -169,6 +171,63 @@ Returns a single patient record, enriched with the patient's full profile (`prof
|
||||
|
||||
---
|
||||
|
||||
### Update Patient Basic Info
|
||||
|
||||
```
|
||||
PATCH /api/v1/patient/{uuid}
|
||||
```
|
||||
|
||||
اطلاعات پایهی بیمار را بهروزرسانی میکند. برای هر سه نقشِ صاحبِ پرونده در دسترس است: **پزشک، کلینیک، و منشیِ فعالِ همان مطب/کلینیک** (دسترسی از طریق همان `resolveEntity` + `assertPatientGate` مثل بقیهی endpointهای بیمار کنترل میشود؛ منشی باید `db_uuid` فعال داشته باشد).
|
||||
|
||||
بهروزرسانی **partial** است — فقط کلیدهای ارسالشده اعمال میشوند. مقدار `""`/`null` برای فیلدهای پروفایل یعنی «پاککردن». `name` روی `User.realName` و بقیهی فیلدها روی `UserProfile` مینشینند (در صورت نبود پروفایل، ساخته میشود).
|
||||
|
||||
> **شماره موبایل قابل ویرایش نیست** — شناسهی حساب کاربر است و در این endpoint نادیده گرفته میشود.
|
||||
|
||||
**Request body:**
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "محمد",
|
||||
"family": "محمدی",
|
||||
"national_code": "0012345678",
|
||||
"gender": "male",
|
||||
"blood_type": "O+",
|
||||
"marital_status": "single",
|
||||
"job": "مهندس",
|
||||
"home_phone": "03511111111",
|
||||
"work_phone": "03512222222",
|
||||
"address": "...",
|
||||
"basic_insurance_id": 3,
|
||||
"supplementary_insurance_id": 9
|
||||
}
|
||||
```
|
||||
|
||||
| Field | Type | Notes |
|
||||
|-------|------|-------|
|
||||
| `name` | string | اگر ارسال شود و خالی نباشد → `User.realName`. رشتهی خالی نادیده گرفته میشود. |
|
||||
| `family` | string\|null | `UserProfile.family` |
|
||||
| `national_code` | string\|null | اگر خالی نباشد باید ۱۰ رقم و در سطح بیمار یکتا باشد؛ روی `User.nationalCode` و `UserProfile.nationalCode` ست میشود |
|
||||
| `gender` | `male`\|`female`\|null | |
|
||||
| `blood_type` | string\|null | |
|
||||
| `marital_status` | string\|null | |
|
||||
| `job` | string\|null | |
|
||||
| `home_phone`, `work_phone` | string\|null | |
|
||||
| `address` | string\|null | |
|
||||
| `basic_insurance_id`, `supplementary_insurance_id` | int\|null | id بیمه؛ `null` = حذف |
|
||||
|
||||
**Response 200:** مثل `GET /api/v1/patient/{uuid}` (رکورد + `profile` تازه).
|
||||
|
||||
**Errors:**
|
||||
|
||||
| Code | HTTP | Description |
|
||||
|------|------|-------------|
|
||||
| `ERR_PATIENT_NOT_FOUND` | 404 | Record not found or not owned by caller |
|
||||
| `ERR_VALIDATION_001` | 422 | کد ملی باید ۱۰ رقم باشد (`field: national_code`) |
|
||||
| `ERR_PROFILE_NATIONAL_CODE_TAKEN` | 409 | کد ملی متعلق به بیمار دیگری است (`field: national_code`) |
|
||||
| `ERR_SUBSCRIPTION_REQUIRED` | 403 | No `patient_records` feature |
|
||||
|
||||
---
|
||||
|
||||
### List Patient Sessions
|
||||
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user