diff --git a/index.cfm b/index.cfm
index 4589033..61970a0 100644
--- a/index.cfm
+++ b/index.cfm
@@ -64,7 +64,7 @@
+
+
+
+
@@ -370,6 +374,68 @@ document.getElementById('btnDiffer').addEventListener('click', async function()
btn.disabled = false;
});
+// ── Полный цикл: парсинг → LLM → сравнение ────────────────
+document.getElementById('btnFull').addEventListener('click', async function() {
+ var btn = this; btn.disabled = true; log('⚡ Полный цикл...');
+ // 1. Парсинг
+ for (var i = 0; i < fileQueue.length; i++) {
+ var f = fileQueue[i];
+ if (!f.doc_id || f.parsed) continue;
+ try {
+ var resp = await fetch('/parser.cfm?doc_id=' + f.doc_id);
+ var d = await resp.json();
+ if (d.OK) { f.element_count = d.ELEMENT_COUNT; f.parsed = true; f.status = 'parsed (' + d.ELEMENT_COUNT + ')'; log('📄 ' + f.name + ': ' + d.ELEMENT_COUNT + ' эл.'); }
+ else { log('❌ ' + f.name + ': ' + (d.ERROR||'')); }
+ } catch(e) { log('❌ ' + f.name + ': ' + e.message); }
+ renderTable();
+ }
+ // 2. LLM-извлечение
+ try {
+ var resp = await fetch('/api.cfm?action=query&sql=' + encodeURIComponent("SELECT s.id,d.filename FROM supplements s JOIN documents d ON s.document_id=d.id WHERE s.contract_id='" + contractId + "' ORDER BY s.created_at"));
+ var data = await resp.json();
+ if (data.OK && data.ROWS) {
+ for (var i = 0; i < data.ROWS.length; i++) {
+ var row = data.ROWS[i];
+ try {
+ var er = await fetch('/extractor.cfm?supplement_id=' + row.id);
+ var ed = await er.json();
+ if (ed.OK) { log('🤖 ' + row.filename + ': ' + ed.ROWS_SAVED + ' строк'); }
+ else { log('❌ ' + row.filename + ': ' + (ed.ERROR||'')); }
+ } catch(e) { log('❌ ' + row.filename + ': ' + e.message); }
+ }
+ }
+ } catch(e) { log('❌ ' + e.message); }
+ // 3. Сравнение
+ try {
+ var resp = await fetch('/differ.cfm?contract_id=' + contractId);
+ var data = await resp.json();
+ if (data.OK) {
+ var s = data.SUMMARY;
+ log('🔍 Изменено: ' + (s.CHANGED||0) + ', Добавлено: ' + (s.ADDED||0) + ', Удалено: ' + (s.DELETED||0));
+ var html = '