Add ownership periods
This commit is contained in:
parent
a607973c7a
commit
b328b37a78
171
data_providers/constants.js
Normal file
171
data_providers/constants.js
Normal file
@ -0,0 +1,171 @@
|
||||
const organs = [
|
||||
'не предусмотренный код',
|
||||
'Судебные органы',
|
||||
'Судебный пристав',
|
||||
'Таможенные органы',
|
||||
'Органы социальной защиты',
|
||||
'Нотариус',
|
||||
'ОВД или иные правоохр. органы',
|
||||
'ОВД или иные правоохр. органы (прочие)'
|
||||
];
|
||||
|
||||
const ogr = [
|
||||
'',
|
||||
'Запрет на регистрационные действия',
|
||||
'Запрет на снятие с учета',
|
||||
'Запрет на регистрационные действия и прохождение ГТО',
|
||||
'Утилизация (для транспорта не старше 5 лет)',
|
||||
'Аннулирование'
|
||||
];
|
||||
|
||||
const typeAuto = {
|
||||
'01':'Грузовые автомобили бортовые',
|
||||
'02':'Грузовые автомобили шасси',
|
||||
'03':'Грузовые автомобили фургоны',
|
||||
'04':'Грузовые автомобили тягачи седельные',
|
||||
'05':'Грузовые автомобили самосвалы',
|
||||
'06':'Грузовые автомобили рефрижераторы',
|
||||
'07':'Грузовые автомобили цистерны',
|
||||
'08':'Грузовые автомобили с гидроманипулятором',
|
||||
'09':'Грузовые автомобили прочие',
|
||||
'21':'Легковые автомобили универсал',
|
||||
'22':'Легковые автомобили комби (хэтчбек)',
|
||||
'23':'Легковые автомобили седан',
|
||||
'24':'Легковые автомобили лимузин',
|
||||
'25':'Легковые автомобили купе',
|
||||
'26':'Легковые автомобили кабриолет',
|
||||
'27':'Легковые автомобили фаэтон',
|
||||
'28':'Легковые автомобили пикап',
|
||||
'29':'Легковые автомобили прочие',
|
||||
'41':'Автобусы длиной не более 5 м',
|
||||
'42':'Автобусы длиной более 5 м, но не более 8 м',
|
||||
'43':'Автобусы длиной более 8 м, но не более 12 м',
|
||||
'44':'Автобусы сочлененные длиной более 12 м',
|
||||
'49':'Автобусы прочие',
|
||||
'51':'Специализированные автомобили автоцистерны',
|
||||
'52':'Специализированные автомобили санитарные',
|
||||
'53':'Специализированные автомобили автокраны',
|
||||
'54':'Специализированные автомобили заправщики',
|
||||
'55':'Специализированные автомобили мастерские',
|
||||
'56':'Специализированные автомобили автопогрузчики',
|
||||
'57':'Специализированные автомобили эвакуаторы',
|
||||
'58':'Специализированные пассажирские транспортные средства',
|
||||
'59':'Специализированные автомобили прочие',
|
||||
'71':'Мотоциклы',
|
||||
'72':'Мотороллеры и мотоколяски',
|
||||
'73':'Мотовелосипеды и мопеды',
|
||||
'74':'Мотонарты',
|
||||
'80':'Прицепы самосвалы',
|
||||
'81':'Прицепы к легковым автомобилям',
|
||||
'82':'Прицепы общего назначения к грузовым автомобилям',
|
||||
'83':'Прицепы цистерны',
|
||||
'84':'Прицепы тракторные',
|
||||
'85':'Прицепы вагоны-дома передвижные',
|
||||
'86':'Прицепы со специализированными кузовами',
|
||||
'87':'Прицепы трейлеры',
|
||||
'88':'Прицепы автобуса',
|
||||
'89':'Прицепы прочие',
|
||||
'91':'Полуприцепы с бортовой платформой',
|
||||
'92':'Полуприцепы самосвалы',
|
||||
'93':'Полуприцепы фургоны',
|
||||
'95':'Полуприцепы цистерны',
|
||||
'99':'Полуприцепы прочие',
|
||||
'31':'Трактора',
|
||||
'32':'Самоходные машины и механизмы',
|
||||
'33':'Трамваи',
|
||||
'34':'Троллейбусы',
|
||||
'35':'Велосипеды',
|
||||
'36':'Гужевой транспорт',
|
||||
'38':'Подвижной состав железных дорог',
|
||||
'39':'Иной'
|
||||
};
|
||||
|
||||
const typeOperation = {
|
||||
'01':'Регистрация новых, произведенных в России или везенных, а также ввезенных в Россию бывших в эксплуатации, в том числе временно на срок более 6 месяцев, испытательной техники.',
|
||||
'02':'Ранее зарегистрированных в регистрирующих органах',
|
||||
'03':'Изменение собственника (владельца) в результате совершения сделки, вступления в наследство, слияние и разделение капитала у юридического лица, переход права по договору лизинга, судебные решения и др.',
|
||||
'04':'Изменение данных о собственнике (владельце)',
|
||||
'05':'Изменение данных о транспортном средстве, в том числе изменение технических характеристик и (или) назначения (типа) транспортного средства',
|
||||
'06':'Выдача взамен утраченных или пришедших в негодность государственных регистрационных знаков, регистрационных документов, паспортов транспортных средств.',
|
||||
'07':'Прекращение регистрации ',
|
||||
'08':'Снятие с учета в связи с убытием за пределы Российской Федерации',
|
||||
'09':'Снятие с учета в связи с утилизацией',
|
||||
'11':'первичная регистрация',
|
||||
'12':'регистрация снятых с учета',
|
||||
'13':'временная регистрация ТС (на срок проведения проверок, на срок временной прописки, регистрация испытательной техники)',
|
||||
'14':'временный учет (временная регистрация места пребывания ТС без выдачи документов)',
|
||||
'15':'регистрация ТС, ввезенных из-за пределов Российской Федерации',
|
||||
'16':'регистрация ТС, прибывших из других регионов Российской Федерации',
|
||||
'17':'регистрация ТС по новому месту жительства собственника, прибывшего из другого субъекта Российской Федерации, с 18',
|
||||
'21':'постановка на постоянный учет в связи со сверкой',
|
||||
'22':'постановка на оперативный учет',
|
||||
'23':'постановка на постоянный учет',
|
||||
'24':'постановка в розыск утраченной спецпродукции',
|
||||
'25':'постановка уничтоженной спецпродукции',
|
||||
'26':'учет изготовленной и отгруженной спецпродукции (по информации предприятий-изготовителей)',
|
||||
'27':'учет выданной и распределенной спецпродукции (по информации подразделений ГИБДД)',
|
||||
'28':'учет закрепленной спецпродукции',
|
||||
'29':'учет ПТС, выданных заводами-изготовителями',
|
||||
'30':'учет ПТС, выданных таможенными органами',
|
||||
'31':'резерв',
|
||||
'32':'Оформление первичного материала по административному правонарушению',
|
||||
'33':'учет лиц в розыске',
|
||||
'34':'учет утраченного оружия',
|
||||
'35':'первичная выдача после обучения',
|
||||
'36':'первичная выдача после самоподготовки',
|
||||
'37':'замена в связи с утратой',
|
||||
'38':'замена в связи с истечением срока действия',
|
||||
'39':'открытие новой категории',
|
||||
'40':'выдача международного водительского удостоверения',
|
||||
'41':'замена государственного регистрационного знака',
|
||||
'42':'выдача дубликата регистрационного документа',
|
||||
'43':'выдача (замена) паспорта ТС',
|
||||
'44':'замена номерного агрегата, цвета, изменение конструкции ТС',
|
||||
'45':'изменение Ф.И.О. (наименования) владельца',
|
||||
'46':'изменение места жительства (юридического адреса) владельца в пределах территории обслуживания регистрационным пунктом',
|
||||
'47':'наличие запретов и ограничений',
|
||||
'48':'снятие запретов и ограничений',
|
||||
'49':'регистрация залога ТС',
|
||||
'50':'прекращение регистрации залога ТС',
|
||||
'51':'коррекция иных реквизитов',
|
||||
'52':'выдача акта технического осмотра',
|
||||
'53':'проведение ГТО',
|
||||
'54':'постоянная регистрация ТС по окончанию временной',
|
||||
'55':'коррекция реквизитов по информации налоговых органов',
|
||||
'56':'коррекция реквизитов при проведении ГТО',
|
||||
'57':'Оформление этапа производства по делу об АП',
|
||||
'59':'коррекция реквизитов',
|
||||
'61':'в связи с изменением места регистрации',
|
||||
'62':'в связи с прекращением права собственности (отчуждение, конфискация ТС)',
|
||||
'63':'в связи с вывозом ТС за пределы Российской Федерации',
|
||||
'64':'в связи с окончанием срока временной регистрации',
|
||||
'65':'в связи с утилизацией',
|
||||
'66':'в связи с признанием регистрации недействительной',
|
||||
'67':'снятие с временного учета',
|
||||
'68':'снятие с учета в связи с кражей или угоном',
|
||||
'69':'постановка с одновременным снятием с учета',
|
||||
'71':'с ОУ в связи с обнаружением',
|
||||
'72':'с ОУ за давностью лет',
|
||||
'73':'с ОУ в связи с не подтверждением',
|
||||
'74':'с ОУ в связи с переводом на ПУ',
|
||||
'75':'с ПУ в связи с обнаружением',
|
||||
'76':'с ПУ за давностью лет',
|
||||
'77':'чистка ФКУ \'ГИАЦ МВД России\'',
|
||||
'78':'наложенных ограничений',
|
||||
'81':'документов в связи с обнаружением',
|
||||
'82':'удаление ошибочно введенной записи',
|
||||
'83':'удаление в связи со сверкой',
|
||||
'84':'перевод в архив в связи с корректировкой',
|
||||
'91':'по наследству с заменой государственных регистрационных знаков',
|
||||
'92':'по наследству с сохранением государственных регистрационных знаков за новым собственником (наследником)',
|
||||
'93':'по сделкам, произведенным в любой форме (купля-продажа, дарение, др.) с заменой государственных регистрационных знаков',
|
||||
'94':'по сделкам, произведенным в любой форме (купля-продажа, дарение, др.) с сохранением государственных регистрационных',
|
||||
'95':'учет прекращения действия водительского удостоверения',
|
||||
'96':'учет восстановления действия водительского удостоверения',
|
||||
'97':'учет приостановления действия права управления ТС по постановлению судебного пристава-исполнителя о временном',
|
||||
'98':'учет отмены приостановления действия права управления ТС по постановлению судебного пристава-исполнителя о временном ограничении на пользование должников специальным правом'
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
organs, ogr, typeAuto, typeOperation
|
||||
};
|
||||
@ -1,6 +1,8 @@
|
||||
const fetch = require('node-fetch');
|
||||
const Vehicle = require('../models/vehicle');
|
||||
|
||||
const baseUrl = 'https://vin01.ru/v2';
|
||||
const reportBaseUrl = 'https://vin01.ru/api/gibddApp.php';
|
||||
|
||||
class Vin01Provider {
|
||||
static async getVin(number, token) {
|
||||
@ -10,11 +12,33 @@ class Vin01Provider {
|
||||
if(json.success && json.code == 200) {
|
||||
return json.data.vin;
|
||||
} else {
|
||||
console.log('==========================================================');
|
||||
console.log(JSON.stringify(json));
|
||||
throw Error('Vin01 provider failed to get VIN');
|
||||
}
|
||||
}
|
||||
|
||||
static async getReport(number, token) {
|
||||
let vin = await Vin01Provider.getVin(number, token);
|
||||
let result = await fetch(reportBaseUrl, {
|
||||
method: 'POST',
|
||||
body: new URLSearchParams({
|
||||
typeCheckValue: 'history',
|
||||
vinValue: vin,
|
||||
key: token
|
||||
})
|
||||
});
|
||||
let json = await result.json();
|
||||
|
||||
if(json.status == 200) {
|
||||
let vehicle = Vehicle.fromVin01(json.data);
|
||||
vehicle.number = number;
|
||||
return vehicle;
|
||||
} else {
|
||||
let vehicle = new Vehicle();
|
||||
vehicle.vin1 = vin;
|
||||
return vehicle;
|
||||
//throw Error('Vin01 provider failed to get gibdd info');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Vin01Provider;
|
||||
@ -1,3 +1,5 @@
|
||||
const Constants = require('constants');
|
||||
|
||||
class Vehicle {
|
||||
brand
|
||||
model
|
||||
@ -15,6 +17,7 @@ class Vehicle {
|
||||
photos
|
||||
addedDate
|
||||
addedBy
|
||||
ownershipPeriods
|
||||
|
||||
static fromAvtocod(report) {
|
||||
//console.log(JSON.stringify(report));
|
||||
@ -50,9 +53,40 @@ class Vehicle {
|
||||
return v;
|
||||
}
|
||||
|
||||
// updateFromVin01(report) {
|
||||
static fromVin01(report) {
|
||||
let main = report.RequestResult.vehicle;
|
||||
|
||||
// }
|
||||
let v = new Vehicle();
|
||||
v.brand = { name: { original: main.model } };
|
||||
v.category = main.category;
|
||||
v.engine = {
|
||||
number: main.engineNumber,
|
||||
powerHp: main.powerHp,
|
||||
powerKw: main.powerKwt,
|
||||
volume: main.engineVolume
|
||||
};
|
||||
v.year = main.year;
|
||||
v.vin1 = main.vin;
|
||||
v.vin2 = main.bodyNumber;
|
||||
v.color = main.color;
|
||||
|
||||
v.ownershipPeriods = report.RequestResult.ownershipPeriods.ownershipPeriod.map(p => {
|
||||
let period = {
|
||||
lastOperation: Constants[p.lastOperation] ?? p.lastOperation,
|
||||
ownerType: p.simplePersonType.toLowerCase() == 'legal' ? 'legal' : 'individual',
|
||||
from: Date.parse(p.from),
|
||||
to: 0
|
||||
};
|
||||
if('to' in p) {
|
||||
period.to = Date.parse(p.to);
|
||||
}
|
||||
return period;
|
||||
});
|
||||
|
||||
v.addedDate = Date.now();
|
||||
|
||||
return v;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Vehicle;
|
||||
|
||||
@ -23,17 +23,18 @@ router.post('/check', async (req, res) => {
|
||||
let all = [autocodPromise];
|
||||
|
||||
if(googleIdToken) {
|
||||
let vin01Promise = Vin01Provider.getVin(number, googleIdToken);
|
||||
let vin01Promise = Vin01Provider.getReport(number, googleIdToken);
|
||||
all.push(vin01Promise);
|
||||
}
|
||||
let [autocod, vin01] = await Promise.allSettled(all);
|
||||
if(autocod.status == 'fulfilled') {
|
||||
let vehicle = autocod.value;
|
||||
vehicle.addedBy = login;
|
||||
if(vin01?.status == 'fulfilled') {
|
||||
vehicle.vin1 = vin01.value;
|
||||
} else {
|
||||
console.log(vin01.reason);
|
||||
if(vin01?.status == 'fulfilled' && vin01.value?.brand?.name?.original == vehicle?.brand?.name?.original) {
|
||||
vehicle.vin1 = vin01.value.vin1;
|
||||
vehicle.vin2 = vin01.value.vin2;
|
||||
vehicle.color = vin01.value.color;
|
||||
vehicle.ownershipPeriods = vin01.value.ownershipPeriods;
|
||||
}
|
||||
await collection.replaceOne({ number }, vehicle, { upsert: true });
|
||||
res.status(201).send({ success: true, data: vehicle });
|
||||
|
||||
Loading…
Reference in New Issue
Block a user