diff --git a/index.cfm b/index.cfm index b33151a..dd7bbeb 100644 --- a/index.cfm +++ b/index.cfm @@ -71,7 +71,7 @@
Nubes - Сверка договоров — LLM v1.0.88 — Lucee + Сверка договоров — LLM v1.0.89 — Lucee
@@ -92,12 +92,8 @@
- - -
@@ -269,9 +265,6 @@ fileInput.addEventListener('change', async function() { var llmBtn = document.getElementById('llmBtn'); llmBtn.style.display = 'flex'; llmBtn.disabled = false; - var llmBtnV2 = document.getElementById('llmBtnV2'); - llmBtnV2.style.display = 'flex'; - llmBtnV2.disabled = false; lucide.createIcons(); }); @@ -325,12 +318,12 @@ function uploadFile(file, onProgress) { }); } -// ── LLM v2: Event Sourcing ───────────────────────────────── -document.getElementById('llmBtnV2').addEventListener('click', function() { +// ── LLM: Сравнить (Event Sourcing) ──────────────────────── +document.getElementById('llmBtn').addEventListener('click', function() { if (!contractId) return; var btn = this; btn.disabled = true; - btn.innerHTML = ' LLM v2...'; + btn.innerHTML = ' Сравнение...'; var diffCard = document.getElementById('diffCard'); var diffBody = document.getElementById('diffBody'); @@ -377,7 +370,7 @@ document.getElementById('llmBtnV2').addEventListener('click', function() { clearInterval(timerInterval); es.close(); diffBody.innerHTML += '
✗ ' + d.message + '
'; - btn.innerHTML = ' Сравнить v2'; + btn.innerHTML = ' Сравнить'; btn.disabled = false; } }; @@ -425,106 +418,6 @@ function setInitial(suppId) { } window.setInitial = setInitial; -// ── LLM: Сравнить ──────────────────────────────────────────── -document.getElementById('llmBtn').addEventListener('click', async function() { - if (!contractId) return; - var btn = this; - btn.disabled = true; - btn.innerHTML = ' LLM-анализ...'; - - // Сохранить промпт на сервер (ДОЖДАТЬСЯ) - var p = promptEditor.value.trim() || DEFAULT_PROMPT; - if (contractId) { - await fetch('/prompt.cfm?contract_id=' + contractId, { - method: 'POST', - headers: {'Content-Type': 'application/json'}, - body: JSON.stringify({prompt: p}) - }); - } - - var diffCard = document.getElementById('diffCard'); - var diffBody = document.getElementById('diffBody'); - var diffStatus = document.getElementById('diffStatus'); - diffCard.style.display = 'block'; - diffBody.innerHTML = '⏳ LLM-извлечение...'; - diffStatus.textContent = '⏳ 0.0с'; - - var llmStart = Date.now(); - var timerInterval = setInterval(function() { - diffStatus.textContent = '⏳ ' + ((Date.now() - llmStart) / 1000).toFixed(1) + 'с'; - }, 200); - - // 1. Extract for each supplement - try { - var resp = await fetch('/api.cfm?action=query&sql=' + encodeURIComponent("SELECT id, type FROM supplements WHERE contract_id='" + contractId + "' ORDER BY created_at")); - var data = await resp.json(); - if (data.OK && data.ROWS) { - for (var i = 0; i < data.ROWS.length; i++) { - try { - var er = await fetch('/extractor.cfm?supplement_id=' + data.ROWS[i].id); - var ed = await er.json(); - if (ed.OK) { - var info = (ed.SKIPPED ? '⏭ ' : '✓ ') + (data.ROWS[i].type || '') + ': ' + ed.ROWS_SAVED + ' строк'; - diffBody.innerHTML += '
' + info + '
'; - } else { - diffBody.innerHTML += '
✗ ' + (ed.ERROR||'') + '
'; - } - } catch(e) {} - } - } - } catch(e) {} - - // 2. Differ - diffBody.innerHTML += '
📊 Сравнение:
'; - try { - var resp = await fetch('/differ.cfm?contract_id=' + contractId); - var data = await resp.json(); - if (data.OK && data.ALL_CHANGES) { - var all = data.ALL_CHANGES; - diffBody.innerHTML = ''; - all.forEach(function(ch) { - var s = ch.SUMMARY || {}; - diffBody.innerHTML += '
📄 Допник (' + ch.TYPE + ')
'; - diffBody.innerHTML += '
+' + (s.ADDED||0) + ' ~' + (s.CHANGED||0) + ' -' + (s.DELETED||0) + '
'; - diffStatus.textContent = 'изм:' + (s.CHANGED||0) + ' +' + (s.ADDED||0) + ' -' + (s.DELETED||0); - - var changes = ch.CHANGES || []; - if (changes.length === 0) { - diffBody.innerHTML += '
Нет изменений
'; - } else { - var tbl = '
'; - changes.forEach(function(c) { - var cls = c.CHANGE_TYPE === 'added' ? 'diff-added' : c.CHANGE_TYPE === 'deleted' ? 'diff-deleted' : c.CHANGE_TYPE === 'changed' ? 'diff-changed' : ''; - var vals = c.NEW_VALUES && Object.keys(c.NEW_VALUES).length > 0 ? c.NEW_VALUES : (c.OLD_VALUES || {}); - tbl += ''; - }); - tbl += '
УслугаЦенаОбъёмСуммаНачало
' + (c.ROW_NUM||'') + '' + (vals.NAME||'') + '' + _dc(c,'PRICE') + '' + _dc(c,'QTY') + '' + _dc(c,'SUM') + '' + (vals.DATE_START||'') + '
'; - diffBody.innerHTML += tbl; - } - }); - } else { - diffBody.innerHTML += '
✗ ' + (data.ERROR||'') + '
'; - } - } catch(e) { diffBody.innerHTML += '
✗ ' + e.message + '
'; } - - clearInterval(timerInterval); - diffStatus.textContent = '✓ ' + ((Date.now() - llmStart) / 1000).toFixed(1) + 'с'; - - btn.innerHTML = ' ✓ Готово'; - document.getElementById('chatCard').style.display = 'block'; - lucide.createIcons(); -}); - -function _dc(c, field) { - if (c.CHANGE_TYPE === 'changed' && c.OLD_VALUES && c.NEW_VALUES) { - var ov = (c.OLD_VALUES||{})[field], nv = (c.NEW_VALUES||{})[field]; - if (ov !== nv && ov !== undefined) - return '' + (ov||'—') + '' + (nv||'—') + ''; - } - var v = ((c.NEW_VALUES || c.OLD_VALUES || {})[field]); - return v != null ? v : '—'; -} - // ── Чат ────────────────────────────────────────────────────── document.getElementById('chatSend').addEventListener('click', function() { var input = document.getElementById('chatInput');