forked from Yara724/api
202 lines
11 KiB
Markdown
202 lines
11 KiB
Markdown
# Fanavaran intake design — user vs inquiry (proposal)
|
||
|
||
This file is a **proposed product design**, not a description of every current default. Use it to decide which YARA screens should collect data and which calls should stay automatic.
|
||
|
||
Two intake channels only:
|
||
|
||
1. **Inquiries & lookups** (Fanavaran / ESG / SandHub — no extra typing when they succeed)
|
||
2. **User input** (owner, expert, file-maker, file-reviewer)
|
||
|
||
Persian titles match Fanavaran field captions where known. Types are what we send on the wire.
|
||
|
||
Related: [third-party-stage-fields.md](./third-party-stage-fields.md), [car-body-stage-fields.md](./car-body-stage-fields.md).
|
||
|
||
---
|
||
|
||
## Shared identity (both products)
|
||
|
||
Collect once on the blame file. Inquiries reuse these keys.
|
||
|
||
| Persian | Field / storage | Type | Channel | Why |
|
||
|---------|-----------------|------|---------|-----|
|
||
| کد ملی بیمهگذار | `nationalCodeOfInsurer` | string(10) | **user** | Policy inquiry key |
|
||
| تاریخ تولد (جلالی) | `birthday` | string `yyyy/mm/dd` or `yyyyMMdd` | **user** | Parties inquiry + GEN.44 |
|
||
| کد ملی راننده | `nationalCodeOfDriver` | string(10) | **user** if `driverIsInsurer=false` | Parties inquiry |
|
||
| راننده همان بیمهگذار است؟ | `driverIsInsurer` | boolean | **user** | Chooses which national code / GEN.44 |
|
||
| شماره موبایل | phone | string | **user** | OTP / SMS, not Fanavaran |
|
||
| VIN / شماره شاسی | vin, chassis | string | **inquiry first**, **user** if miss | VIN inquiry, vehicle GET |
|
||
| شماره موتور | motorNo | string | **inquiry**, else **user** | GEN.06 / GEN.12 |
|
||
| پلاک (۲ رقم، حرف، ۳ رقم، ایران) | plate parts | string/number | **user** (photo/OCR later) then **inquiry** confirm | Plaque + policy match |
|
||
| سال ساخت | builtYear | number | **inquiry**, else **user** | GEN.12 / GEN.06 |
|
||
| نوع بدنه خودرو (سواری/شاسیبلند/…) | `vehicle.carType` | enum string | **user** | Fallback `VehicleKindId` lookup |
|
||
|
||
**Auto after identity**
|
||
|
||
| Persian | Fanavaran field | Type | Call |
|
||
|---------|-----------------|------|------|
|
||
| شناسه بیمهنامه ثالث | `PolicyId` (ثالث) | number | `my-policies` / `processed-third-party-policy` |
|
||
| شناسه بیمهنامه بدنه | `PolicyId` (بدنه) | number | `processed-body-policy` / `body-policy/{id}` |
|
||
| شناسه شخص فناوران | `DriverId` / `AccidentCulpritId` | number | `inquiry-by-unique-identifier` → else GEN.44 |
|
||
| شناسه مشتری بیمهنامه | `CustomerId` | number | hull policy GET |
|
||
| حق بیمه | `ActualPremium` | number | hull `TotalPremium` |
|
||
| ارزش روز خودرو (بیمهنامه) | `VehicleCurrentValue` seed | number | hull `VehicleValue` → `vehicle.carPrice` |
|
||
| رنگ | `ColorId` | number | vehicle GET |
|
||
| نوع کاربری | `AccidentVehicleUsedId` | number | vehicle `UsedId` + `vehicle-use-types` |
|
||
| نوع خودرو فناوران | `VehicleKindId` | number | VIN `VehicleKindId` or `vehicle-kinds` |
|
||
| مشخصات پلاک فناوران | PlaqueKindId / SampleId / … | number/string | VIN / vehicle GET |
|
||
|
||
---
|
||
|
||
## Accident facts (both) — mostly user
|
||
|
||
| Persian | Field | Type | Channel |
|
||
|---------|-------|------|---------|
|
||
| تاریخ حادثه | AccidentDate | Jalali date | **user** |
|
||
| ساعت حادثه | AccidentTime | `HH:mm` | **user** |
|
||
| نشانی محل حادثه | AccidentLocationAddress | string | **user** (today hardcoded تهران) |
|
||
| شهر محل حادثه | AccidentCityId | number | **user** pick from `cities` (today `701`) |
|
||
| علت حادثه | AccidentCauseId | number | **user** pick from `accident-causes` (today `6`) |
|
||
| نحوه اعلام حادثه | AccidentReportTypeId | number | **user** or default from `accident-report-type` |
|
||
| کروکی — سری / سریال / شرح | PoliceReport* | string | **user** optional; null ok |
|
||
| خارج از مرز؟ | IsAccidentOutOfBorder | ans number | **user** default خیر |
|
||
|
||
---
|
||
|
||
## Third-party only — proposed screens
|
||
|
||
### File create (مقصر + زیاندیده)
|
||
|
||
| Persian | Field | Type | Channel |
|
||
|---------|-------|------|---------|
|
||
| نقش طرفین | FIRST / SECOND | enum | **user** |
|
||
| مقصر کیست | guiltyPartyId | id | **user** expert decision |
|
||
| نوع مقصر | CulpritTypeId | number | **user** or default `accident-culprit-type` |
|
||
| شماره گواهینامه مقصر | CulpritLicenceNo | string | **user** (stop dummy when captured) |
|
||
| نوع گواهینامه مقصر | CulpritLicenceTypeId | number | **user** from `driving-licence-types` |
|
||
| تاریخ صدور گواهینامه | CulpritLicenceIssuDate | Jalali date | **user** |
|
||
| گواهینامه تعویضی؟ | IsLicenseReplacement | ans | **user** default خیر |
|
||
| قطعات آسیبدیده زیاندیده | selectedParts | catalog ids | **user** · `car-components` |
|
||
| نوع خودرو زیاندیده | carType | enum | **user** |
|
||
|
||
### Expert pricing (ثالث)
|
||
|
||
| Persian | Field | Type | Channel |
|
||
|---------|-------|------|---------|
|
||
| قیمت قطعه | parts[].price | money | **user** |
|
||
| اجرت | parts[].salary | money | **user** |
|
||
| داغی | parts[].daghi | money/object | **user** |
|
||
| شدت آسیب | AccidentLevel / typeOfDamage | number | **user** · `accident-level` |
|
||
| افت قیمت — دارد/ندارد + مبلغ | DropAmount* | number | **user** · `drop-amount-status` |
|
||
| محل بازدید | InspectionPlaceId | number | **user** or branch default · `inspection-place` |
|
||
| قیمت روز خودرو (اختیاری ثالث) | DamagedVehicleCurrentPrice | money | **user** |
|
||
|
||
### Staff (V4/V5)
|
||
|
||
| Persian | Field | Type | Channel |
|
||
|---------|-------|------|---------|
|
||
| کد کارشناس پرونده ثالث | FileMaker.ThirdPartyClaimExpertId | string/number | **staff admin** |
|
||
| کد ارزیاب ثالث | FileReviewer.ThirdPartyExpertiseClaim | string/number | **staff admin** |
|
||
|
||
Do not ask the owner for these.
|
||
|
||
---
|
||
|
||
## Car-body only — proposed screens
|
||
|
||
Hull is **first party**. One vehicle, one policy.
|
||
|
||
### File create
|
||
|
||
| Persian | Field | Type | Channel |
|
||
|---------|-------|------|---------|
|
||
| نوع حادثه بدنه | AccidentTypeId | number | **user** from `vehicle-hull-accident-types` (default تصادف = 2) |
|
||
| نوع مقصر بدنه | CulpritTypeId | number | **user** from `vehicle-hull-accident-culprit-type` (default بیمهگذار = 300) |
|
||
| مرجع تعیین مقصر | AuthorityCulpritId | number | **user** from `detection-accident-culprits` (default بیمهگذار) |
|
||
| درصد تقصیر بیمهگذار | CustomerFaultPercent | number 0–100 | **user** if not 100%; today always 100 |
|
||
| تفکیک هزینه به نقاط | CostSeparationToDmgSections | ans | **user** default خیر |
|
||
| مالک تغییر یافته؟ | IsOwnerChanged | ans | **user** default خیر |
|
||
| گواهینامه تعویضی؟ | IsLicenseReplaced | ans or empty | **must stay empty/null** unless Fanavaran later requires a value |
|
||
| قطعات آسیبدیده | selectedParts | catalog ids | **user** |
|
||
|
||
### Expert pricing (بدنه)
|
||
|
||
| Persian | Field | Type | Channel |
|
||
|---------|-------|------|---------|
|
||
| قیمت قطعه / اجرت / داغی | price, salary, daghi | money | **user** |
|
||
| قیمت روز خودرو | vehicle.carPrice | money | **user** required; seed from policy `VehicleValue` |
|
||
| افت قیمت | DropAmount / priceDrop.total | money | **user** |
|
||
| مدت تعمیر (روز) | RepairDuration | number | **system** `3` unless product wants **user** |
|
||
| نوع آسیب ردیف | DmgKindId | number | default تخریب; optional **user** · `vehicle-hull-dmg-kind` |
|
||
| نوع هزینه ردیف | DmgCostKindId | number | default مجموع لوازم · `vehicle-hull-dmg-cost-kinds` |
|
||
| لوازم فابریک | VehicleHullAccessoryId | number | **system** `3043330` (do not ask user) |
|
||
|
||
### Staff (V4/V5)
|
||
|
||
| Persian | Field | Type | Channel |
|
||
|---------|-------|------|---------|
|
||
| کد کارشناس پرونده بدنه | FileMaker.CarBodyClaimExpertId | string/number | **staff admin** |
|
||
| کد ارزیاب بدنه | FileReviewer.CarBodyExpertiseClaim | string/number | **staff admin** |
|
||
|
||
If the matching code is missing, YARA must not create/review that product line.
|
||
|
||
---
|
||
|
||
## Documents (both) — user files
|
||
|
||
| Persian | Typical key | Channel |
|
||
|---------|-------------|---------|
|
||
| کارت ملی / گواهینامه / کارت خودرو / پلاک فلزی | requiredDocuments | **user** photos |
|
||
| عکس زاویه خودرو / قطعه | damage + car-angle captures | **user** |
|
||
| فاکتور تعمیر | factor images | **user** when `factorNeeded` |
|
||
|
||
`FileTypeId` is **lookup** (`file-types`), not typed by the owner.
|
||
|
||
---
|
||
|
||
## Lookups catalogue (for UI dropdowns)
|
||
|
||
Expose these as select lists; store the numeric `Id`.
|
||
|
||
| Persian UI | Lookup route | Used on |
|
||
|------------|--------------|---------|
|
||
| علت حادثه | `/lookups/accident-causes` | GEN.03 |
|
||
| نوع اعلام حادثه | `/lookups/accident-report-type` | GEN.03 |
|
||
| شهر | `/lookups/cities` | GEN.03 city |
|
||
| بله/خیر | `/lookups/ans` | hull flags |
|
||
| نوع مقصر ثالث | `/lookups/accident-culprit-type` | ثالث GEN.03 |
|
||
| نوع مقصر بدنه | `/lookups/vehicle-hull-accident-culprit-type` | بدنه GEN.03 |
|
||
| نوع حادثه بدنه | `/lookups/vehicle-hull-accident-types` | بدنه GEN.03 |
|
||
| مرجع تعیین مقصر | `/lookups/detection-accident-culprits` | بدنه GEN.03 |
|
||
| نوع گواهینامه | `/lookups/driving-licence-types` | GEN.03 / GEN.12 |
|
||
| کاربری خودرو | `/lookups/vehicle-use-types` | GEN.03 / GEN.12 |
|
||
| نوع خودرو | `/lookups/vehicle-kinds` | GEN.12 |
|
||
| قطعات | `/lookups/car-components` | parts / DmgSectionId |
|
||
| شدت آسیب | `/lookups/accident-level` | ثالث expertise |
|
||
| محل بازدید | `/lookups/inspection-place` | ثالث expertise |
|
||
| وضعیت افت | `/lookups/drop-amount-status` | ثالث expertise |
|
||
| نوع آسیب بدنه | `/lookups/vehicle-hull-dmg-kind` | بدنه expertise |
|
||
| نوع هزینه بدنه | `/lookups/vehicle-hull-dmg-cost-kinds` | بدنه expertise |
|
||
| نوع فایل | `/lookups/file-types` | attachments |
|
||
| جنسیت / تأهل / تابعیت / نوع شخص | gender, marital-status, countries, person-kind, ans | GEN.44 only if inquiry misses |
|
||
|
||
Inquiry helpers (not dropdowns): `inquiry-by-vin`, `inquiry-by-unique-identifier`, `my-policies`, `processed-third-party-policy`, `processed-body-policy`, `third-party-policy/:id`, `body-policy/:id`.
|
||
|
||
---
|
||
|
||
## Suggested flow (what to collect, in order)
|
||
|
||
```text
|
||
1. User: phone + national code + birthday + plate (and VIN if known)
|
||
2. Inquiry: policy + vehicle + person Id
|
||
3. If person missing → GEN.44 using user national code + birthday (submit time)
|
||
4. User: accident date/time/address + (بدنه) accident type / culprit authority
|
||
5. User: damaged parts
|
||
6. Expert: prices, daghi, carPrice (بدنه)
|
||
7. System: ClaimExpertId / expertise ClaimExpertId from staff profiles
|
||
8. System: POST stages in order (ثالث 1→2→3→4, بدنه 1→3→4)
|
||
```
|
||
|
||
**Do not ask the user for:** Fanavaran `PolicyId`, `DriverId`, `CustomerId`, `ColorId`, `VehicleKindId`, `VehicleHullAccessoryId` (فابریک), `ActualPremium`, `FileTypeId`, expert numeric ids.
|
||
|
||
**Stop using dummies when the screen exists:** `CulpritLicenceNo`, `CulpritLicenceIssuDate`, `AccidentLocationAddress`, `AccidentCityId`, `AccidentCauseId`. Until then, current defaults keep Fanavaran from rejecting the create.
|