465be4ca04
fix: PyPDF2 → pdfplumber — сохраняет структуру таблиц в PDF
naeel2026-06-27 13:04:47 +04:00
d95c17cc18
v1.0.178: [ZIP] в группах — показываем zip_source рядом с именем файла
naeel2026-06-26 10:08:56 +04:00
2764ab1cb5
v1.0.178: группировка по ZIP в renderFiles — заголовок-секция 📦 + отступ 24px для вложенных файлов
naeel2026-06-26 09:53:07 +04:00
4e59c83699
v1.0.178: zip_source — БД, Python, JS. Дедупликация по паре (zip_source, name). addZipFile передаёт имя архива.
naeel2026-06-26 09:48:18 +04:00
08779c3938
v1.0.178: P0 — улучшены промпты classify и diff. Classify: блок НУБЕС=Исполнитель, parent_number=null для contract, примеры doc_type=other, 3 few-shot примера. Diff: UNRESOLVED вместо ADD при сомнении.
naeel2026-06-26 09:44:31 +04:00
f143894e10
v1.0.178: fix async classify polling — frontend ждёт done>=total через batch-progress, fix путь логов
working_20250625
naeel2026-06-25 14:41:41 +04:00
4e9dd94433
v1.0.178: логи + lock-файл + guard от двойного classify. Ответ Опуса: минимум сейчас.
naeel2026-06-25 13:29:06 +04:00
aa1b801e94
v1.0.178: classify → subprocess.Popen (classify_worker.py). Изолированный процесс — свои коннекты к БД. HTTP-сервер продолжает отвечать.
naeel2026-06-25 13:14:39 +04:00
9a19b10708
v1.0.178: fix zipIdx → zipEntry (ссылка на объект). ZIP temp entry держится до конца обработки.
naeel2026-06-25 10:36:23 +04:00
91f22137d7
v1.0.178: fix — onFilesSelected больше не удаляет существущие файлы. reconcileSelection убрана из оркестратора. Файлы из ZIP/предыдущих загрузок сохраняются при добавлении новых.
naeel2026-06-25 10:33:36 +04:00
60dd40cf05
v1.0.178: унификация ZIP. addZipFile → base64→File→addRegularFile (единый путь). confirm() при дубликате. unzip.py — только распаковка, без БД.
naeel2026-06-25 10:16:06 +04:00
9b129c3707
v1.0.178: fix двойной проверки дубликатов в addZipFile + console.error для диагностики unzip
naeel2026-06-25 10:06:51 +04:00
613a154c2b
v1.0.178: ZIP в диалоге выбора + предупреждение о перезаписи. accept=.zip, ⚠ под input, инфо в «О сервисе».
naeel2026-06-25 09:51:30 +04:00
0f6f102664
v1.0.178: addZipFile — дубликаты из ZIP теперь перезаписываются (как addRegularFile). Унифицировано поведение: файл из архива заменяет существующий с тем же именем.
naeel2026-06-25 09:50:06 +04:00
7e76224203
v1.0.178: Фаза 4 — renderStepper(state). Степпер через state.ui.steps вместо прямой манипуляции DOM. stepDone/stepActive/resetStepper мутируют state → renderStepper.
naeel2026-06-25 09:25:15 +04:00
c9d55b3d80
v1.0.178: Фаза 3 — compare.js. applyCompareEvent, startCompareSSE, renderCompareOpsTable. ~160 строк дублирования SSE → ~60 строк общих + 2 тонких вызова в runCompareForGroup и llmBtn.
naeel2026-06-25 09:24:26 +04:00
e7917c8af5
v1.0.178: Фаза 2 — groups.js. loadGroupsAction + renderGroups + renderGroupCard + renderGroupCardDone. markGroupDone удалена, готовность = group.compare.status === 'done'. renderGroups пересобирает ВСЕ карточки из state.groups.
naeel2026-06-25 09:15:54 +04:00
67658d0ef1
v1.0.178: Фаза 1.3 — вынос в files.js. statusToHTML, renderFiles, syncDB, toggleClassifyDetail, uploadFile, refreshSupps → files.js. app.js похудел на ~200 строк. index.cfm грузит files.js.
naeel2026-06-25 08:57:22 +04:00
3200ce749b
v1.0.178: Фаза 1.2 — renderTable → renderFiles(state). render(state) теперь вызывает renderFiles(state). Имя отражает ответственность — рендерит ТОЛЬКО таблицу файлов.
naeel2026-06-25 08:54:58 +04:00
9dd1afd832
v1.0.178: Фаза 1.1 — statusToHTML. Статусы из HTML-строк в структуры {kind,pct,text,count,elapsed}. Чистая функция statusToHTML(st). renderTable использует statusToHTML(f.status).
naeel2026-06-25 08:54:39 +04:00
7490568b4b
v1.0.178: Фаза 0 — state + render(state). Введён state.js (центральное состояние), render(state) вызывает renderTable(). fileQueue/contractId/batchId/_activeCompare → state.*. app_utils.js адаптирован. Подробные комментарии из decoupling-final-plan.md.
naeel2026-06-25 08:44:52 +04:00