AI-Оцінка вартості пошкоджень за фотографією у мобільних застосунках
Детекція пошкоджень (попередній етап)—технічна задача. Оцінка вартості ремонту—задача на стику computer vision, баз даних нормативів й бізнес-логіки конкретної країни. Одна й та ж вмятина на крилі обійдеться по-різному в Москві й Варшаві, у офіційного дилера й у незалежному сервісі. Система повинна це розуміти.
Архітектура оціночного конвеєра
Оцінка вартості—не прямий вивід нейросмережі. Це багатокроковий розрахунок:
Фото → Детекція пошкоджень → [тип, серйозність, площа, локалізація]
↓
Нормативна база ремонту
(нормо-години за типом робіт)
↓
Регіональні расценки
(вартість нормо-години)
↓
Вартість запчастин
(OEM vs aftermarket)
↓
Итогова оцінка [min, expected, max]
Нейросмережа використовується тільки на першому кроці—усе інше—детермінований розрахунок за базами даних.
Нормативні бази ремонту
У Росії стандарт де-факто—AUDATEX (тепер Solera) та GT Motive. Вони містять нормо-години за кожною операцією для кожного автомобіля: заміна переднього крила Toyota Camry XV70—2,4 нормо-години, рихтовка—1,8 нормо-години, фарбування—3,2 нормо-години. Доступ до API—через партнерське угоду.
Для MVP без дорогих ліцензій: відкриті бази Mitchell1, AllData (США) або власна база за публічними прайс-листами СТО—через scraping + нормалізацію.
// iOS: запит розрахунку вартості
struct DamageCostRequest: Codable {
let vehicleInfo: VehicleInfo // марка, модель, рік
let damageDetections: [DamageDetection]
let repairLocation: RepairLocation // місто, країна
let repairType: RepairType // дилер, сертифікований, незалежний
}
struct VehicleInfo: Codable {
let make: String
let model: String
let year: Int
let bodyType: BodyType
let vin: String?
}
// Відповідь з розбивкою по позиціях
struct DamageCostEstimate: Codable {
let lineItems: [CostLineItem]
let laborCost: MoneyAmount
let partsCost: MoneyAmount
let paintCost: MoneyAmount
let totalMin: MoneyAmount
let totalExpected: MoneyAmount
let totalMax: MoneyAmount
let currency: String
let validUntilDate: Date // расценки змінюються
let disclaimer: String
}
struct CostLineItem: Codable {
let description: String // "Заміна переднього бампера"
let damageType: DamageType
let panelLocation: PanelLocation // front_bumper, hood, etc.
let laborHours: Double
let laborCostPerHour: MoneyAmount
let partsCost: MoneyAmount?
let repairVsReplaceRecommendation: RepairOption
}
Логіка ремонту vs заміни
Для кожного пошкодження система рекомендує: ремонт (рихтовка + фарбування) або заміна деталі. Правило спрощено:
func recommendRepairOption(
damage: DamageDetection,
panel: PanelInfo
) -> RepairOption {
let damageAreaRatio = damage.maskAreaPx / panel.totalAreaPx
// Якщо пошкодження > 40% площі деталі → заміна, не ремонт
if damageAreaRatio > 0.4 { return .replace }
// Структурні пошкодження → тільки заміна
if damage.severity == .structural { return .replace }
// Якщо ремонт дорожче 70% вартості нової деталі → заміна
let repairEstimate = calculateRepairCost(damage, panel)
let partPrice = panel.partPrice.aftermarket
if repairEstimate > partPrice * 0.7 { return .replace }
return .repair
}
UI: зрозумілий вивід для нетехнічної аудиторії
Страховий агент або власник автомобіля не читає «ММАSDA-норматив 2,4 н/ч». Інтерфейс повинен показувати зрозумілу розбивку:
@Composable
fun CostEstimateScreen(estimate: DamageCostEstimate) {
Column(modifier = Modifier.padding(16.dp)) {
// Итогова сума—крупно й першою
TotalCostBanner(
min = estimate.totalMin,
expected = estimate.totalExpected,
max = estimate.totalMax
)
Spacer(Modifier.height(24.dp))
// Розбивка по статтях
SectionHeader("Розбивка витрат")
CostBreakdownBar(
labor = estimate.laborCost,
parts = estimate.partsCost,
paint = estimate.paintCost
)
Spacer(Modifier.height(16.dp))
// Позиції по пошкодженням
SectionHeader("Пошкодження й роботи")
estimate.lineItems.forEach { item ->
DamageLineItemCard(item = item)
}
// Disclaimer—обов'язковий
DisclaimerText(text = estimate.disclaimer)
}
}
Діапазон min–expected–max чесніший за точну цифру. Точна цифра створює ложні очікування й приводить до конфліктів при виставленні рахунку від СТО.
Орієнтири за часом
Backend з детекцією пошкоджень (YOLOv8) + розрахунком вартості за фіксованою регіональною базою + мобільний клієнт iOS/Android—2–3 тижні. Повна система з інтеграцією Audatex/GT Motive, регіональними расценками, актуальними цінами на запчастини, експортом звіту в PDF й підписом—1–3 місяці.







