v1.0.156: fix index.cfm — lowercase Python API keys, no parser.cfm calls
This commit is contained in:
@@ -75,7 +75,7 @@
|
|||||||
<body>
|
<body>
|
||||||
<div class="topbar">
|
<div class="topbar">
|
||||||
<img src="/nubes-logo.svg" alt="Nubes">
|
<img src="/nubes-logo.svg" alt="Nubes">
|
||||||
<span class="title">Сверка договоров — LLM AI-driven Event Sourcing <span style="font-weight:400;color:var(--muted);font-size:12px;">v1.0.155 — Lucee</span></span>
|
<span class="title">Сверка договоров — LLM AI-driven Event Sourcing <span style="font-weight:400;color:var(--muted);font-size:12px;">v1.0.156 — Lucee</span></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="content">
|
<div class="content">
|
||||||
@@ -339,26 +339,15 @@ fileInput.addEventListener('change', async function() {
|
|||||||
if (!contractId && zf.contract_id) contractId = zf.contract_id;
|
if (!contractId && zf.contract_id) contractId = zf.contract_id;
|
||||||
renderTable();
|
renderTable();
|
||||||
|
|
||||||
// Авто-парсинг
|
// Авто-парсинг: VM Python парсит ВСЁ
|
||||||
var zIsPdf = zf.filename && zf.filename.toLowerCase().endsWith('.pdf');
|
var zpr = zf.parsed;
|
||||||
if (zIsPdf && zf.PARSED && zf.PARSED.STATUS === 'parsed') {
|
if (zpr && zpr.status === 'parsed') {
|
||||||
fileQueue[zIdx].parsed = true;
|
fileQueue[zIdx].parsed = true;
|
||||||
fileQueue[zIdx].status = '<span class="status-ok">✓ ' + zf.PARSED.ELEMENT_COUNT + ' эл.</span>';
|
fileQueue[zIdx].status = '<span class="status-ok">✓ ' + zpr.element_count + ' эл.</span>';
|
||||||
} else if (zIsPdf) {
|
} else if (zpr && zpr.status === 'error') {
|
||||||
fileQueue[zIdx].status = '<span class="status-err">✗ ' + ((zf.PARSED && zf.PARSED.ERROR) || 'ошибка') + '</span>';
|
fileQueue[zIdx].status = '<span class="status-err">✗ ' + (zpr.error || 'ошибка парсинга') + '</span>';
|
||||||
} else {
|
} else {
|
||||||
try {
|
fileQueue[zIdx].status = '<span class="status-err">✗ Неизвестная ошибка</span>';
|
||||||
var zpr = await fetch('/parser.cfm?doc_id=' + zf.doc_id);
|
|
||||||
var zpd = await zpr.json();
|
|
||||||
if (zpd.OK && zpd.STATUS === 'parsed') {
|
|
||||||
fileQueue[zIdx].parsed = true;
|
|
||||||
fileQueue[zIdx].status = '<span class="status-ok">✓ ' + zpd.ELEMENT_COUNT + ' эл.</span>';
|
|
||||||
} else {
|
|
||||||
fileQueue[zIdx].status = '<span class="status-err">✗ ' + (zpd.ERROR_COUNT > 0 ? (zpd.ERRORS && zpd.ERRORS[0] || 'ошибка') : 'ошибка') + '</span>';
|
|
||||||
}
|
|
||||||
} catch(zpe) {
|
|
||||||
fileQueue[zIdx].status = '<span class="status-err">✗ парсинг: сеть</span>';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
renderTable();
|
renderTable();
|
||||||
}
|
}
|
||||||
@@ -390,40 +379,25 @@ fileInput.addEventListener('change', async function() {
|
|||||||
fileQueue[rowIdx].status = '↑ ' + pct + '%';
|
fileQueue[rowIdx].status = '↑ ' + pct + '%';
|
||||||
renderTable();
|
renderTable();
|
||||||
});
|
});
|
||||||
if (resp && resp.CONTRACT_ID) contractId = resp.CONTRACT_ID;
|
// Python API returns lowercase keys (doc_id, contract_id, parsed)
|
||||||
fileQueue[rowIdx].doc_id = resp.DOC_ID;
|
if (resp && resp.contract_id) contractId = resp.contract_id;
|
||||||
|
fileQueue[rowIdx].doc_id = resp.doc_id;
|
||||||
fileQueue[rowIdx].status = '<span class="status-ok">✓</span>';
|
fileQueue[rowIdx].status = '<span class="status-ok">✓</span>';
|
||||||
fileQueue[rowIdx].uploaded = true;
|
fileQueue[rowIdx].uploaded = true;
|
||||||
|
|
||||||
// Авто-парсинг: PDF → VM, остальное → Lucee parser.cfm
|
// Авто-парсинг: VM Python парсит ВСЁ (PDF + DOCX + DOC)
|
||||||
var isPdf = f.name.toLowerCase().endsWith('.pdf');
|
|
||||||
var t0 = Date.now();
|
var t0 = Date.now();
|
||||||
if (isPdf && resp.PARSED && resp.PARSED.STATUS === 'parsed') {
|
var pr = resp.parsed;
|
||||||
|
if (pr && pr.status === 'parsed') {
|
||||||
var elapsed = ((Date.now() - t0) / 1000).toFixed(1);
|
var elapsed = ((Date.now() - t0) / 1000).toFixed(1);
|
||||||
fileQueue[rowIdx].parsed = true;
|
fileQueue[rowIdx].parsed = true;
|
||||||
fileQueue[rowIdx].parseInfo = resp.PARSED;
|
fileQueue[rowIdx].parseInfo = pr;
|
||||||
fileQueue[rowIdx].status = '<span class="status-ok">✓ ' + resp.PARSED.ELEMENT_COUNT + ' эл. (' + elapsed + 'с)</span>';
|
fileQueue[rowIdx].status = '<span class="status-ok">✓ ' + pr.element_count + ' эл. (' + elapsed + 'с)</span>';
|
||||||
} else if (isPdf) {
|
} else if (pr && pr.status === 'error') {
|
||||||
fileQueue[rowIdx].status = '<span class="status-err">✗ ' + ((resp.PARSED && resp.PARSED.ERROR) || 'ошибка') + '</span>';
|
fileQueue[rowIdx].status = '<span class="status-err">✗ ' + (pr.error || 'ошибка парсинга') + '</span>';
|
||||||
|
fileQueue[rowIdx].parseInfo = pr;
|
||||||
} else {
|
} else {
|
||||||
// DOCX/DOC → Lucee Apache POI
|
fileQueue[rowIdx].status = '<span class="status-err">✗ Неизвестная ошибка</span>';
|
||||||
fileQueue[rowIdx].status = '⏳ парсинг...';
|
|
||||||
renderTable();
|
|
||||||
try {
|
|
||||||
var pr = await fetch('/parser.cfm?doc_id=' + resp.DOC_ID);
|
|
||||||
var pd = await pr.json();
|
|
||||||
var elapsed = ((Date.now() - t0) / 1000).toFixed(1);
|
|
||||||
if (pd.OK && pd.STATUS === 'parsed') {
|
|
||||||
fileQueue[rowIdx].parsed = true;
|
|
||||||
fileQueue[rowIdx].parseInfo = pd;
|
|
||||||
fileQueue[rowIdx].status = '<span class="status-ok">✓ ' + pd.ELEMENT_COUNT + ' эл. (' + elapsed + 'с)</span>';
|
|
||||||
} else {
|
|
||||||
fileQueue[rowIdx].status = '<span class="status-err">✗ ' + (pd.ERROR_COUNT > 0 ? (pd.ERRORS && pd.ERRORS[0] || 'ошибка') : 'ошибка') + '</span>';
|
|
||||||
fileQueue[rowIdx].parseInfo = pd;
|
|
||||||
}
|
|
||||||
} catch(pe) {
|
|
||||||
fileQueue[rowIdx].status = '<span class="status-err">✗ парсинг: сеть</span>';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
fileQueue[rowIdx].status = '<span class="status-err">✗ ' + err.message + '</span>';
|
fileQueue[rowIdx].status = '<span class="status-err">✗ ' + err.message + '</span>';
|
||||||
|
|||||||
Reference in New Issue
Block a user