parsing osago contracts from GB provider

This commit is contained in:
Selim Mustafaev 2024-03-31 18:47:18 +03:00
parent 53b9ce193d
commit 9ea088e3f4
4 changed files with 67 additions and 19 deletions

View File

@ -59,23 +59,51 @@ class TGProvider {
}
}
parseReport(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/);
parseBlock(text) {
return {
number,
vin,
owner,
year,
color,
sts
name: this.findFirst(text, /📋 (.*)\n/),
vin: this.findFirst(text, /VIN: (.*)\n/),
plateNumber: this.findFirst(text, /Гос номер: (.*)\n/),
year: this.findFirst(text, /Год: (.*)\n/),
color: this.findFirst(text, /Цвет: (.*)\n/),
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 };

View File

@ -296,22 +296,38 @@ router.post('/checkGbTg', async (req, res) => {
let report = await tgProvider.getReport(number);
await tgProvider.close();
if(!report.generalInfo && !report.insurance) {
res.send(makeError('No data found'));
return;
}
let collection = req.db.collection('vehicles');
let vehicle = await collection.findOne({ number });
if(vehicle) {
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 = {
vin1: report.vin,
color: report.color,
sts: report.sts,
vin1: report.generalInfo.vin,
color: report.generalInfo.color,
sts: report.generalInfo.sts,
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 });
vehicle = await collection.findOne({ number });
res.send({ success: true, data: Object.assign(vehicle, updatedFields) });
} else {
res.send(makeError('Vehicle doesn\'t match'));

View File

@ -142,6 +142,10 @@ class Utils {
});
return { promise, resolve, reject };
}
static removeNullFields(obj) {
return Object.fromEntries(Object.entries(obj).filter(([, v]) => v != null));
}
}
export default Utils;