parsing osago contracts from GB provider
This commit is contained in:
parent
53b9ce193d
commit
9ea088e3f4
@ -59,23 +59,51 @@ class TGProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
parseReport(text) {
|
parseBlock(text) {
|
||||||
let number = this.findFirst(text, /Номер: (.*)\n/);
|
|
||||||
let vin = this.findFirst(text, /VIN: (.*)\n/);
|
|
||||||
let owner = this.findFirst(text, /Владелец: (.*)\n/);
|
|
||||||
let year = this.findFirst(text, /Год: (.*)\n/);
|
|
||||||
let color = this.findFirst(text, /Цвет: (.*)\n/);
|
|
||||||
let sts = this.findFirst(text, /СТС: (.*)\n/);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
number,
|
name: this.findFirst(text, /📋 (.*)\n/),
|
||||||
vin,
|
vin: this.findFirst(text, /VIN: (.*)\n/),
|
||||||
owner,
|
plateNumber: this.findFirst(text, /Гос номер: (.*)\n/),
|
||||||
year,
|
year: this.findFirst(text, /Год: (.*)\n/),
|
||||||
color,
|
color: this.findFirst(text, /Цвет: (.*)\n/),
|
||||||
sts
|
sts: this.findFirst(text, /СТС: (.*)\n/),
|
||||||
|
stsDate: this.findFirst(text, /Дата СТС: (.*)\n/),
|
||||||
|
owner: this.findFirst(text, /Владелец: (.*)\n/),
|
||||||
|
kbm: this.findFirst(text, /КБМ: (.*)\n/),
|
||||||
|
usageRegion: this.findFirst(text, /Регион: (.*)\n/),
|
||||||
|
status: this.findFirst(text, /Статус: (.*)\n/),
|
||||||
|
insurant: this.findFirst(text, /Страхователь: (.*)\n/),
|
||||||
|
birthday: this.findFirst(text, /День рождения: (.*)\n/),
|
||||||
|
number: this.findFirst(text, /Полис: (.*)\n/),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
parseReport(text) {
|
||||||
|
|
||||||
|
let result = text.match(/📋((?:.|\n)*?)^\n/gmu);
|
||||||
|
if(result && result.length > 0) {
|
||||||
|
|
||||||
|
let generalInfo = null;
|
||||||
|
let insurance = null;
|
||||||
|
|
||||||
|
for(let item of result) {
|
||||||
|
let block = Utils.removeNullFields(this.parseBlock(item));
|
||||||
|
if(block.sts) {
|
||||||
|
generalInfo = block;
|
||||||
|
} else if(block.number) {
|
||||||
|
insurance = block;
|
||||||
|
insurance.date = Math.floor(Date.now() / 1000);
|
||||||
|
insurance.restrictions = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(generalInfo || insurance) {
|
||||||
|
return { generalInfo, insurance };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export { TGProvider };
|
export { TGProvider };
|
||||||
|
|||||||
@ -296,22 +296,38 @@ router.post('/checkGbTg', async (req, res) => {
|
|||||||
let report = await tgProvider.getReport(number);
|
let report = await tgProvider.getReport(number);
|
||||||
await tgProvider.close();
|
await tgProvider.close();
|
||||||
|
|
||||||
|
if(!report.generalInfo && !report.insurance) {
|
||||||
|
res.send(makeError('No data found'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let collection = req.db.collection('vehicles');
|
let collection = req.db.collection('vehicles');
|
||||||
let vehicle = await collection.findOne({ number });
|
let vehicle = await collection.findOne({ number });
|
||||||
|
|
||||||
if(vehicle) {
|
if(vehicle) {
|
||||||
let vinRegex = RegExp(vehicle.vin1.replace(/\*/g, '.'));
|
let vinRegex = RegExp(vehicle.vin1.replace(/\*/g, '.'));
|
||||||
//let stsRegex = RegExp(vehicle.sts.replace(/\*/g, '.'));
|
|
||||||
|
|
||||||
if(report.vin.match(vinRegex) /*&& report.sts.match(stsRegex)*/) {
|
if(report.generalInfo.vin.match(vinRegex)) {
|
||||||
let updatedFields = {
|
let updatedFields = {
|
||||||
vin1: report.vin,
|
vin1: report.generalInfo.vin,
|
||||||
color: report.color,
|
color: report.generalInfo.color,
|
||||||
sts: report.sts,
|
sts: report.generalInfo.sts,
|
||||||
updatedDate: Date.now()
|
updatedDate: Date.now()
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log('insurance: ', report.insurance);
|
||||||
|
if(report.insurance) {
|
||||||
|
let osagoFound = vehicle.osagoContracts?.some(elem => {
|
||||||
|
return elem.number = report.insurance.number;
|
||||||
|
}) ?? false;
|
||||||
|
console.log('osago found: ', osagoFound);
|
||||||
|
if(!osagoFound) {
|
||||||
|
await collection.updateOne({ number }, { $push: { osagoContracts: report.insurance } });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await collection.updateOne({ number }, { $set: updatedFields });
|
await collection.updateOne({ number }, { $set: updatedFields });
|
||||||
|
vehicle = await collection.findOne({ number });
|
||||||
res.send({ success: true, data: Object.assign(vehicle, updatedFields) });
|
res.send({ success: true, data: Object.assign(vehicle, updatedFields) });
|
||||||
} else {
|
} else {
|
||||||
res.send(makeError('Vehicle doesn\'t match'));
|
res.send(makeError('Vehicle doesn\'t match'));
|
||||||
|
|||||||
@ -142,6 +142,10 @@ class Utils {
|
|||||||
});
|
});
|
||||||
return { promise, resolve, reject };
|
return { promise, resolve, reject };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static removeNullFields(obj) {
|
||||||
|
return Object.fromEntries(Object.entries(obj).filter(([, v]) => v != null));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Utils;
|
export default Utils;
|
||||||
Loading…
Reference in New Issue
Block a user