Mazad Car Decision Engine
تقارير Excel / PDFMazad Car v2.4.1-r21
');}
const AR_PHRASES=[
['coating thickness readings: there is difference in coating thickness','اختلاف في سماكة الدهان'],
['there is difference in coating thickness','اختلاف في سماكة الدهان'],
['tires condition: tires condition needs attention [less than 4mm]','الإطارات أقل من 4 مم'],
['tires condition: tires condition needs attention [less than 4 mm]','الإطارات أقل من 4 مم'],
['tires condition needs attention [less than 4mm]','الإطارات أقل من 4 مم'],
['tires condition needs attention [less than 4 mm]','الإطارات أقل من 4 مم'],
['tires condition needs attention','الإطارات تحتاج متابعة'],
['engine oil leakage','تهريب زيت المحرك'],['engine oil leak','تهريب زيت المحرك'],['engine oil seepage','رشح زيت المحرك'],
['transmission oil leak','تهريب زيت ناقل الحركة'],['coolant leak','تهريب سائل التبريد'],
['check engine light','لمبة فحص المحرك مضاءة'],['airbag warning light','لمبة تحذير الوسادة الهوائية مضاءة'],
['abs warning light','لمبة تحذير نظام الفرامل مضاءة'],['battery weak','البطارية ضعيفة'],
['tire wear','تآكل في الإطارات'],['tyre wear','تآكل في الإطارات'],['uneven tire wear','تآكل غير منتظم في الإطارات'],
['minor scratch','خدش بسيط'],['deep scratch','خدش عميق'],['scratch','خدش'],
['minor dent','بعجة بسيطة'],['major dent','بعجة كبيرة'],['dent','بعجة'],
['cracked','مشقوق'],['crack','شرخ'],['broken','مكسور'],['damage','ضرر'],['damaged','متضرر'],
['needs replacement','يحتاج استبدال'],['needs repair','يحتاج إصلاح'],['needs attention','يحتاج متابعة'],
['front bumper','الصدام الأمامي'],['rear bumper','الصدام الخلفي'],
['front right fender','الرفرف الأمامي يمين'],['front left fender','الرفرف الأمامي يسار'],
['rear right fender','الرفرف الخلفي يمين'],['rear left fender','الرفرف الخلفي يسار'],
['right front door','الباب الأمامي يمين'],['left front door','الباب الأمامي يسار'],
['right rear door','الباب الخلفي يمين'],['left rear door','الباب الخلفي يسار'],
['hood','الكبوت'],['bonnet','الكبوت'],['trunk','الشنطة'],['tailgate','باب الشنطة'],['roof','السقف'],
['windshield','الزجاج الأمامي'],['mirror','المرآة'],['headlight','الشمعة الأمامية'],['taillight','الشمعة الخلفية'],
['brake pads','فحمات الفرامل'],['brake pad','فحمة الفرامل'],['brake disc','قرص الفرامل'],
['shock absorber','مساعد'],['control arm','مقص'],['ball joint','مفصل كروي'],['tie rod','ذراع توجيه'],
['engine mount','قاعدة المحرك'],['transmission mount','قاعدة ناقل الحركة'],
['a/c','المكيف'],['air conditioning','المكيف']
];
function translateArPhrase(v){
let x=clean(v);if(!x)return '';
for(const [from,to] of AR_PHRASES)x=x.replace(new RegExp(escapeRe(from),'gi'),to);
x=x.replace(/\b4WD\b/gi,'دفع رباعي').replace(/\bAWD\b/gi,'دفع كلي').replace(/\b2WD\b/gi,'دفع ثنائي').replace(/\bFWD\b/gi,'دفع أمامي').replace(/\bRWD\b/gi,'دفع خلفي')
.replace(/\bTPMS\b/gi,'نظام مراقبة ضغط الإطارات').replace(/\bSRS\b/gi,'نظام الوسائد الهوائية').replace(/\bABS\b/gi,'نظام منع انغلاق المكابح')
.replace(/\bSAR\b/gi,'ر.س').replace(/\bmm\b/gi,'مم').replace(/\bkm\b/gi,'كم');
return clean(x);
}
function splitIssueClauses(text){
let x=clean(text);
x=x
.replace(/Grade\s+(?:CLEAN|COSMETIC|MODERATE|HEAVY|STRUCTURAL_REVIEW|REJECT|NO_REPORT)\.?/gi,' | ')
.replace(/Structural\s+(?:PASS|PASSED)\.?/gi,' | ')
.replace(/Structural\s+(?:FAIL|FAILED|REVIEW|STRUCTURAL_REVIEW)\.?/gi,' | Structural condition needs inspection | ')
.replace(/\b0\s+body panels flagged\.?/gi,' | ')
.replace(/\b([1-9]\d*)\s+body panels flagged\.?/gi,' | $1 body panels flagged | ')
.replace(/\b0\s+mechanical failures?\.?/gi,' | ')
.replace(/\b([1-9]\d*)\s+mechanical failures?\.?/gi,' | $1 mechanical issues | ')
.replace(/\b0\s+safety failures?\.?/gi,' | ')
.replace(/\b([1-9]\d*)\s+safety failures?\.?/gi,' | $1 safety issues | ')
.replace(/Repair\s+Range\s+SAR\s*[0-9,.]+\s*-\s*[0-9,.]+\.?/gi,' | ')
.replace(/Repair\s+range\s+SAR\s*[0-9,.]+\s*-\s*[0-9,.]+\.?/gi,' | ')
.replace(/التصنيف\s*:\s*[^|؛.]+[.؛]?/g,' | ')
.replace(/الحالة الهيكلية\s*:\s*سليم[.؛]?/g,' | ')
.replace(/ألواح الهيكل المتأثرة\s*:\s*0[.؛]?/g,' | ')
.replace(/أعطال ميكانيكية\s*:\s*0[.؛]?/g,' | ')
.replace(/ملاحظات سلامة\s*:\s*0[.؛]?/g,' | ')
.replace(/نطاق الإصلاح\s*:\s*[0-9,.-]+\s*ر\.س[.؛]?/g,' | ');
return x.split(/\||؛/).map(clean).filter(Boolean);
}
function arIssue(v){
let x=clean(v);if(!x)return '';
x=x.replace(/Structural condition needs inspection/gi,'ملاحظة هيكلية تحتاج فحص')
.replace(/([1-9]\d*) body panels flagged/gi,'ألواح هيكل متأثرة: $1')
.replace(/([1-9]\d*) mechanical issues/gi,'أعطال ميكانيكية: $1')
.replace(/([1-9]\d*) safety issues/gi,'ملاحظات سلامة: $1');
x=translateArPhrase(x);
x=x.replace(/قراءات سماكة (?:الدهان|الطلاء)\s*:\s*يوجد اختلاف في سماكة (?:الدهان|الطلاء)/g,'اختلاف في سماكة الدهان')
.replace(/يوجد اختلاف في سماكة (?:الدهان|الطلاء)/g,'اختلاف في سماكة الدهان')
.replace(/حالة الإطارات\s*:\s*حالة الإطارات تحتاج متابعة\s*\[?\s*أقل من 4 مم\s*\]?/g,'الإطارات أقل من 4 مم')
.replace(/حالة الإطارات تحتاج متابعة\s*\[?\s*أقل من 4 مم\s*\]?/g,'الإطارات أقل من 4 مم');
const hadLatin=/[A-Za-z]/.test(x);
x=x.replace(/[A-Za-z]+/g,' ').replace(/\s+/g,' ').replace(/\s*:\s*/g,': ').trim();
if(!x&&hadLatin)return 'ملاحظة فنية إضافية في تقرير الفحص';
if(hadLatin && !/[\u0600-\u06FF]/.test(x))return 'ملاحظة فنية إضافية في تقرير الفحص';
return latinDigits(x);
}
function enIssue(v){
let x=clean(v);if(!x)return '';
x=x.replace(/Coating Thickness Readings\s*:\s*There Is Difference In Coating Thickness/gi,'Paint thickness variation')
.replace(/There Is Difference In Coating Thickness/gi,'Paint thickness variation')
.replace(/Tires? Condition\s*:\s*Tires? Condition Needs Attention\s*\[\s*Less than 4\s*mm\s*\]/gi,'Tire tread below 4 mm')
.replace(/Tires? Condition Needs Attention\s*\[\s*Less than 4\s*mm\s*\]/gi,'Tire tread below 4 mm');
return latinDigits(x.replace(/[\u0600-\u06FF]+/g,' ').replace(/\s+/g,' ').trim());
}
function summarize(text,lang){
const out=[],seen=new Set();
for(const clause of splitIssueClauses(text)){
const raw=lang==='ar'?arIssue(clause):enIssue(clause);const value=clean(raw).replace(/[.،؛;:\s]+$/g,'').trim();
if(!value)continue;
const key=value.toLowerCase();if(seen.has(key))continue;seen.add(key);out.push(value);
}
return out.join(lang==='ar'?'؛ ':'; ');
}
function language(){return clean(document.documentElement.lang).toLowerCase().startsWith('en')?'en':'ar';}
function findDefectIndex(table){const ths=[...table.querySelectorAll('thead th')];for(let i=0;i{queued=false;ensureUi();localizeTables();normalizeVisibleDigits();});}
new MutationObserver(run).observe(document.documentElement,{attributes:true,attributeFilter:['lang','dir']});
new MutationObserver(run).observe(document.body,{subtree:true,childList:true,characterData:true});
run();
})();');}
const AR_PHRASES=[
['coating thickness readings: there is difference in coating thickness','اختلاف في سماكة الدهان'],
['there is difference in coating thickness','اختلاف في سماكة الدهان'],
['tires condition: tires condition needs attention [less than 4mm]','الإطارات أقل من 4 مم'],
['tires condition: tires condition needs attention [less than 4 mm]','الإطارات أقل من 4 مم'],
['tires condition needs attention [less than 4mm]','الإطارات أقل من 4 مم'],
['tires condition needs attention [less than 4 mm]','الإطارات أقل من 4 مم'],
['tires condition needs attention','الإطارات تحتاج متابعة'],
['engine oil leakage','تهريب زيت المحرك'],['engine oil leak','تهريب زيت المحرك'],['engine oil seepage','رشح زيت المحرك'],
['transmission oil leak','تهريب زيت ناقل الحركة'],['coolant leak','تهريب سائل التبريد'],
['check engine light','لمبة فحص المحرك مضاءة'],['airbag warning light','لمبة تحذير الوسادة الهوائية مضاءة'],
['abs warning light','لمبة تحذير نظام الفرامل مضاءة'],['battery weak','البطارية ضعيفة'],
['tire wear','تآكل في الإطارات'],['tyre wear','تآكل في الإطارات'],['uneven tire wear','تآكل غير منتظم في الإطارات'],
['minor scratch','خدش بسيط'],['deep scratch','خدش عميق'],['scratch','خدش'],
['minor dent','بعجة بسيطة'],['major dent','بعجة كبيرة'],['dent','بعجة'],
['cracked','مشقوق'],['crack','شرخ'],['broken','مكسور'],['damage','ضرر'],['damaged','متضرر'],
['needs replacement','يحتاج استبدال'],['needs repair','يحتاج إصلاح'],['needs attention','يحتاج متابعة'],
['front bumper','الصدام الأمامي'],['rear bumper','الصدام الخلفي'],
['front right fender','الرفرف الأمامي يمين'],['front left fender','الرفرف الأمامي يسار'],
['rear right fender','الرفرف الخلفي يمين'],['rear left fender','الرفرف الخلفي يسار'],
['right front door','الباب الأمامي يمين'],['left front door','الباب الأمامي يسار'],
['right rear door','الباب الخلفي يمين'],['left rear door','الباب الخلفي يسار'],
['hood','الكبوت'],['bonnet','الكبوت'],['trunk','الشنطة'],['tailgate','باب الشنطة'],['roof','السقف'],
['windshield','الزجاج الأمامي'],['mirror','المرآة'],['headlight','الشمعة الأمامية'],['taillight','الشمعة الخلفية'],
['brake pads','فحمات الفرامل'],['brake pad','فحمة الفرامل'],['brake disc','قرص الفرامل'],
['shock absorber','مساعد'],['control arm','مقص'],['ball joint','مفصل كروي'],['tie rod','ذراع توجيه'],
['engine mount','قاعدة المحرك'],['transmission mount','قاعدة ناقل الحركة'],
['a/c','المكيف'],['air conditioning','المكيف']
];
function translateArPhrase(v){
let x=clean(v);if(!x)return '';
for(const [from,to] of AR_PHRASES)x=x.replace(new RegExp(escapeRe(from),'gi'),to);
x=x.replace(/\b4WD\b/gi,'دفع رباعي').replace(/\bAWD\b/gi,'دفع كلي').replace(/\b2WD\b/gi,'دفع ثنائي').replace(/\bFWD\b/gi,'دفع أمامي').replace(/\bRWD\b/gi,'دفع خلفي')
.replace(/\bTPMS\b/gi,'نظام مراقبة ضغط الإطارات').replace(/\bSRS\b/gi,'نظام الوسائد الهوائية').replace(/\bABS\b/gi,'نظام منع انغلاق المكابح')
.replace(/\bSAR\b/gi,'ر.س').replace(/\bmm\b/gi,'مم').replace(/\bkm\b/gi,'كم');
return clean(x);
}
function splitIssueClauses(text){
let x=clean(text);
x=x
.replace(/Grade\s+(?:CLEAN|COSMETIC|MODERATE|HEAVY|STRUCTURAL_REVIEW|REJECT|NO_REPORT)\.?/gi,' | ')
.replace(/Structural\s+(?:PASS|PASSED)\.?/gi,' | ')
.replace(/Structural\s+(?:FAIL|FAILED|REVIEW|STRUCTURAL_REVIEW)\.?/gi,' | Structural condition needs inspection | ')
.replace(/\b0\s+body panels flagged\.?/gi,' | ')
.replace(/\b([1-9]\d*)\s+body panels flagged\.?/gi,' | $1 body panels flagged | ')
.replace(/\b0\s+mechanical failures?\.?/gi,' | ')
.replace(/\b([1-9]\d*)\s+mechanical failures?\.?/gi,' | $1 mechanical issues | ')
.replace(/\b0\s+safety failures?\.?/gi,' | ')
.replace(/\b([1-9]\d*)\s+safety failures?\.?/gi,' | $1 safety issues | ')
.replace(/Repair\s+Range\s+SAR\s*[0-9,.]+\s*-\s*[0-9,.]+\.?/gi,' | ')
.replace(/Repair\s+range\s+SAR\s*[0-9,.]+\s*-\s*[0-9,.]+\.?/gi,' | ')
.replace(/التصنيف\s*:\s*[^|؛.]+[.؛]?/g,' | ')
.replace(/الحالة الهيكلية\s*:\s*سليم[.؛]?/g,' | ')
.replace(/ألواح الهيكل المتأثرة\s*:\s*0[.؛]?/g,' | ')
.replace(/أعطال ميكانيكية\s*:\s*0[.؛]?/g,' | ')
.replace(/ملاحظات سلامة\s*:\s*0[.؛]?/g,' | ')
.replace(/نطاق الإصلاح\s*:\s*[0-9,.-]+\s*ر\.س[.؛]?/g,' | ');
return x.split(/\||؛/).map(clean).filter(Boolean);
}
function arIssue(v){
let x=clean(v);if(!x)return '';
x=x.replace(/Structural condition needs inspection/gi,'ملاحظة هيكلية تحتاج فحص')
.replace(/([1-9]\d*) body panels flagged/gi,'ألواح هيكل متأثرة: $1')
.replace(/([1-9]\d*) mechanical issues/gi,'أعطال ميكانيكية: $1')
.replace(/([1-9]\d*) safety issues/gi,'ملاحظات سلامة: $1');
x=translateArPhrase(x);
x=x.replace(/قراءات سماكة (?:الدهان|الطلاء)\s*:\s*يوجد اختلاف في سماكة (?:الدهان|الطلاء)/g,'اختلاف في سماكة الدهان')
.replace(/يوجد اختلاف في سماكة (?:الدهان|الطلاء)/g,'اختلاف في سماكة الدهان')
.replace(/حالة الإطارات\s*:\s*حالة الإطارات تحتاج متابعة\s*\[?\s*أقل من 4 مم\s*\]?/g,'الإطارات أقل من 4 مم')
.replace(/حالة الإطارات تحتاج متابعة\s*\[?\s*أقل من 4 مم\s*\]?/g,'الإطارات أقل من 4 مم');
const hadLatin=/[A-Za-z]/.test(x);
x=x.replace(/[A-Za-z]+/g,' ').replace(/\s+/g,' ').replace(/\s*:\s*/g,': ').trim();
if(!x&&hadLatin)return 'ملاحظة فنية إضافية في تقرير الفحص';
if(hadLatin && !/[\u0600-\u06FF]/.test(x))return 'ملاحظة فنية إضافية في تقرير الفحص';
return latinDigits(x);
}
function enIssue(v){
let x=clean(v);if(!x)return '';
x=x.replace(/Coating Thickness Readings\s*:\s*There Is Difference In Coating Thickness/gi,'Paint thickness variation')
.replace(/There Is Difference In Coating Thickness/gi,'Paint thickness variation')
.replace(/Tires? Condition\s*:\s*Tires? Condition Needs Attention\s*\[\s*Less than 4\s*mm\s*\]/gi,'Tire tread below 4 mm')
.replace(/Tires? Condition Needs Attention\s*\[\s*Less than 4\s*mm\s*\]/gi,'Tire tread below 4 mm');
return latinDigits(x.replace(/[\u0600-\u06FF]+/g,' ').replace(/\s+/g,' ').trim());
}
function summarize(text,lang){
const out=[],seen=new Set();
for(const clause of splitIssueClauses(text)){
const raw=lang==='ar'?arIssue(clause):enIssue(clause);const value=clean(raw).replace(/[.،؛;:\s]+$/g,'').trim();
if(!value)continue;
const key=value.toLowerCase();if(seen.has(key))continue;seen.add(key);out.push(value);
}
return out.join(lang==='ar'?'؛ ':'; ');
}
function language(){return clean(document.documentElement.lang).toLowerCase().startsWith('en')?'en':'ar';}
function findDefectIndex(table){const ths=[...table.querySelectorAll('thead th')];for(let i=0;i{queued=false;ensureUi();localizeTables();normalizeVisibleDigits();});}
new MutationObserver(run).observe(document.documentElement,{attributes:true,attributeFilter:['lang','dir']});
new MutationObserver(run).observe(document.body,{subtree:true,childList:true,characterData:true});
run();
})();