forked from Yara724/api
234 lines
14 KiB
Markdown
234 lines
14 KiB
Markdown
# راهنمای فرانتاند برای ارسال اطلاعات استعلام
|
||
|
||
این سند قرارداد نهایی فرانتاند برای مرحله استعلام است. از این به بعد اطلاعات اشخاص و خودرو باید با ساختار نقشمحور زیر ارسال شود. فیلدهای تخت قدیمی مانند `nationalCodeOfDriver` و `nationalCodeOfInsurer` دیگر ورودی معتبر نیستند.
|
||
|
||
## ساختار کلی درخواست
|
||
|
||
برای پرونده `THIRD_PARTY`:
|
||
|
||
```json
|
||
{
|
||
"driver": {
|
||
"nationalCode": "0012345678",
|
||
"birthday": "1370/01/01",
|
||
"hasDrivingLicense": true,
|
||
"licenseNumber": "123456789",
|
||
"licenseType": "1"
|
||
},
|
||
"vehicleOwner": { "sameAs": "DRIVER" },
|
||
"thirdPartyPolicyholder": { "sameAs": "VEHICLE_OWNER" },
|
||
"vehicle": {
|
||
"registrationState": "CURRENT",
|
||
"currentPlate": {
|
||
"leftDigits": "44",
|
||
"centerAlphabet": "ب",
|
||
"centerDigits": "111",
|
||
"ir": "22"
|
||
},
|
||
"isNewCar": false
|
||
},
|
||
"sheba": "IR123456789012345678901234"
|
||
}
|
||
```
|
||
|
||
برای پرونده `CAR_BODY`، نقش بیمهگذار بدنه هم الزامی است:
|
||
|
||
```json
|
||
{
|
||
"driver": {
|
||
"nationalCode": "0012345678",
|
||
"birthday": "1370/01/01",
|
||
"hasDrivingLicense": false
|
||
},
|
||
"vehicleOwner": { "sameAs": "DRIVER" },
|
||
"thirdPartyPolicyholder": {
|
||
"nationalCode": "0023456789",
|
||
"birthday": "1360/02/02"
|
||
},
|
||
"carBodyPolicyholder": {
|
||
"nationalCode": "0034567890",
|
||
"birthday": "1350/03/03"
|
||
},
|
||
"vehicle": {
|
||
"currentPlate": {
|
||
"leftDigits": "44",
|
||
"centerAlphabet": "ب",
|
||
"centerDigits": "111",
|
||
"ir": "22"
|
||
},
|
||
"isNewCar": false
|
||
},
|
||
"sheba": "IR123456789012345678901234"
|
||
}
|
||
```
|
||
|
||
`sheba` فقط در routeهایی که قبلاً اطلاعات بانکی را در مرحله استعلام دریافت میکردند ارسال میشود؛ در V6 مرکز تماس، شماره شبا در این body نیست و بعداً توسط کاربر دریافت میشود.
|
||
|
||
## هر استعلام با اطلاعات کدام نقش انجام میشود؟
|
||
|
||
فرانتاند فقط اشخاص را با ساختار نقشمحور ارسال میکند؛ انتخاب کد ملی مناسب برای هر سرویس در بکاند انجام میشود:
|
||
|
||
| استعلام | کد ملی مورد استفاده | شناسه خودرو/بانکی |
|
||
| --- | --- | --- |
|
||
| بیمه شخص ثالث با پلاک یا VIN | `thirdPartyPolicyholder.nationalCode` | پلاک یا `vehicle.vin` |
|
||
| بیمه بدنه با پلاک یا VIN | `carBodyPolicyholder.nationalCode` | پلاک یا `vehicle.vin` |
|
||
| تطبیق شبا | `vehicleOwner.nationalCode` | `sheba` |
|
||
| گواهینامه | `driver.nationalCode` | `driver.licenseNumber` |
|
||
|
||
بنابراین کد ملی راننده نباید بهجای بیمهگذار یا مالک ارسال یا تکرار شود. اگر چند نقش متعلق به یک نفر است، `sameAs` ارتباط را مشخص میکند و بکاند همان شخص را برای استعلام مربوط به هر نقش انتخاب میکند.
|
||
|
||
در مرحله بانکی بعدی جریان V6، برای پروندههای جدید فقط `sheba` لازم است. بکاند کد ملی مالک خودرو را از `participants` و `participantRoles` ذخیرهشده در پرونده تقصیر میخواند. فیلدهای قدیمی `nationalCodeOfInsurer` یا `nationalCodeOfOwner` فقط برای پروندههای تاریخی فاقد اطلاعات نقشمحور fallback هستند؛ اگر همراه پرونده جدید ارسال شوند باید با مالک ذخیرهشده یکسان باشند.
|
||
|
||
پنلهای کارشناسی اطلاعات کامل اشخاص را در `parties[].participants` و نگاشت نقشها را در `parties[].participantRoles` دریافت میکنند. اطلاعات راننده حتی اگر در استعلام بیمه یا شبا استفاده نشود در همین ساختار ذخیره و نمایش داده میشود.
|
||
|
||
## نقشها و فیلدهای هر شخص
|
||
|
||
هر نقش باید یکی از این دو حالت را داشته باشد، نه هر دو را:
|
||
|
||
1. اطلاعات یک شخص جدید؛ یا
|
||
2. ارجاع با `sameAs` به شخصی که قبلاً در همین درخواست معرفی شده است.
|
||
|
||
| فیلد | کاربرد | وضعیت |
|
||
| --- | --- | --- |
|
||
| `nationalCode` | کد ملی شخص | برای شخص جدید الزامی |
|
||
| `birthday` | تاریخ تولد جلالی | برای شخص جدید الزامی |
|
||
| `fullName` | نام نمایشی شخص | اختیاری |
|
||
| `sameAs` | اتصال این نقش به نقش دیگر | بهجای اطلاعات شخص جدید |
|
||
| `hasDrivingLicense` | داشتن گواهینامه راننده | برای نقش راننده الزامی |
|
||
| `licenseNumber` | شماره گواهینامه | اگر `hasDrivingLicense=true` الزامی |
|
||
| `licenseType` | نوع گواهینامه | اگر `hasDrivingLicense=true` الزامی |
|
||
|
||
مقادیر مجاز `sameAs` عبارتاند از:
|
||
|
||
- `DRIVER`
|
||
- `VEHICLE_OWNER`
|
||
- `THIRD_PARTY_POLICYHOLDER`
|
||
- `CAR_BODY_POLICYHOLDER`
|
||
|
||
برای `sameAs` هیچکدام از `nationalCode`، `birthday`، `fullName`، اطلاعات گواهینامه یا `phoneNumber` را در همان آبجکت نفرستید.
|
||
|
||
شماره تلفن بخشی از هویت استعلام نیست و در این DTOها وجود ندارد. احراز هویت پیامکی و شماره تماس طرفین از این مرحله جداست.
|
||
|
||
## اطلاعات خودرو و پلاک
|
||
|
||
| فیلد | کاربرد | وضعیت |
|
||
| --- | --- | --- |
|
||
| `vehicle.registrationState` | وضعیت ثبت رسمی خودرو | `CURRENT` یا `RECENTLY_TRANSFERRED`؛ پیشفرض `CURRENT` |
|
||
| `vehicle.currentPlate` | پلاک رسمی فعلی و شناسه اصلی خودرو | الزامی |
|
||
| `vehicle.previousPlate` | پلاک قبلی در انتقال اخیر | فقط در `RECENTLY_TRANSFERRED` |
|
||
| `vehicle.previousPolicyholderNationalCode` | کد ملی بیمهگذار مربوط به پلاک قبلی | فقط در `RECENTLY_TRANSFERRED` و الزامی |
|
||
| `vehicle.vin` | شماره شاسی/VIN | در انتقال اخیر الزامی؛ در صورت ارسال دقیقاً ۱۷ کاراکتر |
|
||
| `vehicle.isNewCar` | نو بودن خودرو | اختیاری |
|
||
|
||
اجزای پلاک:
|
||
|
||
```json
|
||
{
|
||
"leftDigits": "44",
|
||
"centerAlphabet": "ب",
|
||
"centerDigits": "111",
|
||
"ir": "22"
|
||
}
|
||
```
|
||
|
||
`leftDigits`، `centerDigits` و `ir` را میتوان بهصورت string یا number فرستاد؛ ارسال string پیشنهاد میشود تا صفرهای ابتدایی از بین نروند. `centerAlphabet` باید حرف فارسی پلاک باشد.
|
||
|
||
### انتقال اخیر
|
||
|
||
```json
|
||
{
|
||
"vehicle": {
|
||
"registrationState": "RECENTLY_TRANSFERRED",
|
||
"currentPlate": {
|
||
"leftDigits": "44",
|
||
"centerAlphabet": "ب",
|
||
"centerDigits": "111",
|
||
"ir": "22"
|
||
},
|
||
"previousPlate": {
|
||
"leftDigits": "55",
|
||
"centerAlphabet": "ج",
|
||
"centerDigits": "222",
|
||
"ir": "33"
|
||
},
|
||
"previousPolicyholderNationalCode": "0098765432",
|
||
"vin": "NAAM01E15HK123456"
|
||
}
|
||
}
|
||
```
|
||
|
||
اطلاعات انتقال اخیر فقط بهعنوان متادیتای پرونده ذخیره میشوند. در route پلاک، سیستم فقط `currentPlate` را با کد ملی بیمهگذار نهاییِ مرتبط با نوع بیمه استعلام میکند و هیچ fallbackای به `previousPlate` یا `previousPolicyholderNationalCode` ندارد. در route شماره شاسی نیز فقط `vehicle.vin` با همان بیمهگذار نهایی استعلام میشود.
|
||
|
||
حتی در route مربوط به VIN، آبجکت `vehicle` از قرارداد مشترک استفاده میکند و `currentPlate` در قرارداد فعلی الزامی است. مقدار VIN در `vehicle.vin` قرار میگیرد، نه در فیلد سطح بالای `vin`.
|
||
|
||
## ترتیب پیشنهادی نمایش فرم
|
||
|
||
1. پلاک فعلی و وضعیت انتقال خودرو را بگیرید.
|
||
2. اگر انتقال اخیر بود، پلاک قبلی، کد ملی بیمهگذار پلاک قبلی و VIN را بگیرید.
|
||
3. اطلاعات راننده و وضعیت گواهینامه را بگیرید.
|
||
4. بپرسید مالک خودرو همان راننده است یا شخص دیگری؛ در حالت یکسان از `sameAs` استفاده کنید.
|
||
5. بیمهگذار شخص ثالث را از بین راننده، مالک یا شخص دیگر انتخاب کنید.
|
||
6. در `CAR_BODY` همین کار را برای بیمهگذار بدنه انجام دهید.
|
||
7. خلاصه اطلاعات را به کاربر نشان دهید و سپس درخواست استعلام را ارسال کنید.
|
||
|
||
## مسیرهای اصلی
|
||
|
||
بدنه درخواست در همه این مسیرها همین ساختار را دارد:
|
||
|
||
| جریان | مسیر پلاک | مسیر VIN |
|
||
| --- | --- | --- |
|
||
| کاربر V2 | `/v2/blame-request-management/initial-form/:requestId` | `/v2/blame-request-management/initial-form-vin/:requestId` |
|
||
| کارشناس/پروندهساز V3 تا V5 | `.../run-inquiries/:requestId` | `.../run-inquiries-vin/:requestId` |
|
||
| مرکز تماس V6 | `/v6/call-center-blame/run-inquiry/:requestId` | `/v6/call-center-blame/run-inquiry-vin/:requestId` |
|
||
|
||
در جریانهای V3 تا V5، فراخوان اول برای طرف مقصر (`FIRST`) و فراخوان دوم، فقط در `THIRD_PARTY`، برای طرف زیاندیده (`SECOND`) است. اطلاعات بیمهگذار برای هر دو طرف الزامی است.
|
||
|
||
## تفاوت اطلاعات مقصر و زیاندیده
|
||
|
||
ساختار نقشمحور اشخاص و خودرو برای هر دو طرف یکسان است، اما ترتیب و قواعد کسبوکار آنها تفاوت دارد:
|
||
|
||
| پرونده و طرف | نقشها و رفتار |
|
||
| --- | --- |
|
||
| `THIRD_PARTY / FIRST` (مقصر) | راننده، مالک و بیمهگذار شخص ثالثِ خودروی مقصر ارسال میشوند. شبا در این فراخوان لازم نیست. بیمهنامه مقصر باید متعلق به شرکت بیمه همین سامانه باشد. |
|
||
| `THIRD_PARTY / SECOND` (زیاندیده) | راننده، مالک و بیمهگذار شخص ثالثِ خودروی زیاندیده ارسال میشوند. این مرحله فقط بعد از امضای مقصر و احراز OTP زیاندیده اجرا میشود. `sheba` الزامی است و با کد ملی `vehicleOwner` اعتبارسنجی میشود. بیمهگذار زیاندیده نیز همیشه باید مشخص باشد. |
|
||
| `CAR_BODY / FIRST` (بیمهگذار/زیاندیده بدنه) | هر چهار نقش راننده، مالک، بیمهگذار شخص ثالث و بیمهگذار بدنه ارسال میشوند. `sheba` در همین فراخوان الزامی است و با کد ملی `vehicleOwner` اعتبارسنجی میشود. استعلام بدنه با کد ملی `carBodyPolicyholder` انجام میشود. |
|
||
|
||
در V2 و V6 که شبا در مرحله جداگانه از کاربر دریافت میشود، شبا داخل درخواست استعلام مقصر ارسال نمیشود؛ بکاند هنگام مرحله بانکی آن را با کد ملی مالک ذخیرهشده تطبیق میدهد.
|
||
|
||
## فیلدهایی که نباید ارسال شوند
|
||
|
||
این فیلدها دیگر بخشی از قرارداد ورودی نیستند و ارسال آنها باعث خطای اعتبارسنجی میشود:
|
||
|
||
```text
|
||
nationalCodeOfDriver
|
||
driverBirthday
|
||
driverLicense
|
||
licenseType // در سطح بالا؛ مقدار صحیح داخل driver است
|
||
nationalCodeOfInsurer
|
||
insurerBirthday
|
||
insurerLicense
|
||
driverIsInsurer
|
||
userNoCertificate
|
||
plate // در سطح بالا؛ مقدار صحیح داخل vehicle.currentPlate است
|
||
plateId
|
||
vin // در سطح بالا؛ مقدار صحیح داخل vehicle.vin است
|
||
isNewCar // در سطح بالا؛ مقدار صحیح داخل vehicle.isNewCar است
|
||
phoneNumber // در participantها
|
||
unknown // حذف شده؛ بیمهگذار همیشه باید مشخص باشد
|
||
```
|
||
|
||
## خطاهای رایج فرانتاند
|
||
|
||
- ارسال `vehicleOwner` بهصورت خالی؛ باید شخص جدید یا `sameAs` باشد.
|
||
- استفاده از `sameAs` همراه با `nationalCode` یا `birthday`.
|
||
- ارسال `carBodyPolicyholder` برای `THIRD_PARTY`.
|
||
- ارسال `unknown` برای هر نقش؛ این فیلد دیگر پذیرفته نمیشود.
|
||
- فرستادن `previousPlate` بدون `registrationState=RECENTLY_TRANSFERRED`.
|
||
- فرستادن `RECENTLY_TRANSFERRED` بدون `previousPlate`، `previousPolicyholderNationalCode` یا `vin`.
|
||
- فرستادن `previousPolicyholderNationalCode` برای خودروی دارای وضعیت `CURRENT`.
|
||
- قرار دادن VIN یا پلاک در سطح بالای body.
|
||
- ارسال شماره تلفن در آبجکت شخص.
|
||
- تکرار کد ملی راننده یا بیمهگذار در مرحله شبا؛ تطبیق شبا همیشه با مالک خودرو انجام میشود.
|
||
|
||
مستند مدل دامنه و جزئیات تصمیم معماری در [inquiry-participants-proposal.fa.md](./inquiry-participants-proposal.fa.md) قرار دارد.
|