# 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.