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 fetch = require('node-fetch');
|
||||||
|
const Vehicle = require('../models/vehicle');
|
||||||
|
|
||||||
const baseUrl = 'https://vin01.ru/v2';
|
const baseUrl = 'https://vin01.ru/v2';
|
||||||
|
const reportBaseUrl = 'https://vin01.ru/api/gibddApp.php';
|
||||||
|
|
||||||
class Vin01Provider {
|
class Vin01Provider {
|
||||||
static async getVin(number, token) {
|
static async getVin(number, token) {
|
||||||
@ -10,11 +12,33 @@ class Vin01Provider {
|
|||||||
if(json.success && json.code == 200) {
|
if(json.success && json.code == 200) {
|
||||||
return json.data.vin;
|
return json.data.vin;
|
||||||
} else {
|
} else {
|
||||||
console.log('==========================================================');
|
|
||||||
console.log(JSON.stringify(json));
|
|
||||||
throw Error('Vin01 provider failed to get VIN');
|
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;
|
module.exports = Vin01Provider;
|
||||||
@ -1,3 +1,5 @@
|
|||||||
|
const Constants = require('constants');
|
||||||
|
|
||||||
class Vehicle {
|
class Vehicle {
|
||||||
brand
|
brand
|
||||||
model
|
model
|
||||||
@ -15,6 +17,7 @@ class Vehicle {
|
|||||||
photos
|
photos
|
||||||
addedDate
|
addedDate
|
||||||
addedBy
|
addedBy
|
||||||
|
ownershipPeriods
|
||||||
|
|
||||||
static fromAvtocod(report) {
|
static fromAvtocod(report) {
|
||||||
//console.log(JSON.stringify(report));
|
//console.log(JSON.stringify(report));
|
||||||
@ -50,9 +53,40 @@ class Vehicle {
|
|||||||
return v;
|
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;
|
module.exports = Vehicle;
|
||||||
|
|||||||
@ -23,17 +23,18 @@ router.post('/check', async (req, res) => {
|
|||||||
let all = [autocodPromise];
|
let all = [autocodPromise];
|
||||||
|
|
||||||
if(googleIdToken) {
|
if(googleIdToken) {
|
||||||
let vin01Promise = Vin01Provider.getVin(number, googleIdToken);
|
let vin01Promise = Vin01Provider.getReport(number, googleIdToken);
|
||||||
all.push(vin01Promise);
|
all.push(vin01Promise);
|
||||||
}
|
}
|
||||||
let [autocod, vin01] = await Promise.allSettled(all);
|
let [autocod, vin01] = await Promise.allSettled(all);
|
||||||
if(autocod.status == 'fulfilled') {
|
if(autocod.status == 'fulfilled') {
|
||||||
let vehicle = autocod.value;
|
let vehicle = autocod.value;
|
||||||
vehicle.addedBy = login;
|
vehicle.addedBy = login;
|
||||||
if(vin01?.status == 'fulfilled') {
|
if(vin01?.status == 'fulfilled' && vin01.value?.brand?.name?.original == vehicle?.brand?.name?.original) {
|
||||||
vehicle.vin1 = vin01.value;
|
vehicle.vin1 = vin01.value.vin1;
|
||||||
} else {
|
vehicle.vin2 = vin01.value.vin2;
|
||||||
console.log(vin01.reason);
|
vehicle.color = vin01.value.color;
|
||||||
|
vehicle.ownershipPeriods = vin01.value.ownershipPeriods;
|
||||||
}
|
}
|
||||||
await collection.replaceOne({ number }, vehicle, { upsert: true });
|
await collection.replaceOne({ number }, vehicle, { upsert: true });
|
||||||
res.status(201).send({ success: true, data: vehicle });
|
res.status(201).send({ success: true, data: vehicle });
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user