Add ownership periods

This commit is contained in:
Selim Mustafaev 2020-06-01 20:01:28 +03:00
parent a607973c7a
commit b328b37a78
4 changed files with 239 additions and 9 deletions

171
data_providers/constants.js Normal file
View 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
};

View File

@ -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;

View File

@ -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;

View File

@ -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 });