naeel
958865c397
v3.3.0: чат с договором — задать вопрос по spec_rows
2026-06-18 09:23:09 +04:00
naeel
f1495d07e3
v3.2.1: /llm — отдельная страница, / — без LLM
2026-06-18 09:01:30 +04:00
naeel
e534d014ef
v3.2.0: LLM-извлечение + сравнение допников — кнопка Сравнить
2026-06-18 08:54:39 +04:00
naeel
557a238fb8
v3.1.0: разбить app.py на routes/main,parse,misc — 52 строки вместо 330
2026-06-18 08:10:23 +04:00
naeel
822b47bace
v3.0.1: application = ContractsApp().app для gunicorn
2026-06-18 08:01:57 +04:00
naeel
12d67de7ed
v3.0.0 VM: убрать v2/Redis/чанки, чистый FormData, PostgreSQL
2026-06-18 07:57:51 +04:00
naeel
bc0a5345ac
v2.0.1: fix ImportError — sys.path для v2/
2026-06-18 06:20:03 +04:00
naeel
c28baa446b
v2: чанки 30KB + MD5, /v2/chunk + /v2/finalize, Redis, worker, v2.0
2026-06-17 23:14:34 +04:00
naeel
2525ad039f
чанки в памяти (не БД), 30KB + 60s timeout, v1.43
2026-06-17 23:00:04 +04:00
naeel
f9cb9de91d
Redis push в фоновом потоке (не блокирует ответ), v1.41
2026-06-17 22:43:56 +04:00
naeel
9bae90e9a0
сырой разбор JSON (regex, без get_json), v1.40
2026-06-17 22:34:36 +04:00
naeel
65c0c80687
Redis очередь: /upload → RPUSH → 200 сразу, воркер → DB + парсинг, v1.38
2026-06-17 22:28:10 +04:00
naeel
72a7ac4345
логи в памяти (не БД), /logs endpoint, v1.37
2026-06-17 22:18:07 +04:00
naeel
637fdce1bc
чанки 10KB base64: /chunk_json + uploadFileChunked10k, v1.33
2026-06-17 21:52:50 +04:00
naeel
5ce38d0735
полный лог _upload_json: 12 шагов, v1.25
2026-06-17 19:51:33 +04:00
naeel
c3232c43e7
лог upload_entry в _upload_json, v1.24.1
2026-06-17 19:50:31 +04:00
naeel
4480b24245
base64 как TEXT (без декодирования), original_b64 колонка, v1.24
2026-06-17 19:09:51 +04:00
naeel
05c41e8c4a
upload: всегда одно соединение, убран if cid, v1.23
2026-06-17 18:58:43 +04:00
naeel
6585598fca
пул: keepalive, проверка живости, min=2 max=5, reconnect, v1.22
2026-06-17 18:50:33 +04:00
naeel
5c0fb98955
base64 JSON загрузка вместо FormData/multipart — обход лимита Ingress, v1.21
2026-06-17 18:29:34 +04:00
naeel
2615e781ce
пул соединений psycopg2 (min=1 max=3), db.put_conn вместо close, v1.20
2026-06-17 18:23:41 +04:00
naeel
dfb9a4218b
debug_log: таблица + логи на каждом шаге _chunk_upload, v1.19
2026-06-17 17:49:33 +04:00
naeel
ba5933b715
одно DB-соединение на сборку чанков (вместо 7 отдельных), v1.18
2026-06-17 17:37:27 +04:00
naeel
0dac6bf37b
чанки в БД (таблица chunks), убран _chunk_store в памяти, v1.17
2026-06-17 17:23:43 +04:00
naeel
87026a1fd8
чанковая загрузка 50KB, /chunk endpoint, v1.15
2026-06-17 16:34:27 +04:00
naeel
f66d188551
elements_json JSONB: структура документа в БД, PDF page, v1.12
2026-06-17 08:22:33 +04:00
naeel
30460cc78c
ℹ первые строки таблиц в модалке, v1.11
2026-06-17 07:33:37 +04:00
naeel
f627572abb
ℹ модальное окно с деталями парсинга (параграфы, таблицы, ошибки, превью), v1.10
2026-06-17 07:19:38 +04:00
naeel
4474190cae
мс вместо сек, идемпотентность (кнопка блокируется после успеха), v1.9
2026-06-17 07:14:17 +04:00
naeel
e0c58fcbd0
fix: ZIP-счётчик только PDF/Word, expanded тоже пропускать при повторе, v1.8
2026-06-16 15:18:36 +04:00
naeel
64b2295d8c
загрузка по одному файлу с XHR-прогрессом, ZIP-размеры, v1.6
2026-06-16 15:08:09 +04:00
naeel
435f617a25
ZIP: только PDF/Word, остальные пропускать, v1.5
2026-06-16 14:59:19 +04:00
naeel
d5858d7836
ZIP: полные пути файлов (подпапки), v1.4
2026-06-16 14:57:19 +04:00
naeel
21f8c0b072
ZIP: распаковка и парсинг каждого файла внутри, v1.3
2026-06-16 14:56:12 +04:00
naeel
3cffca73b3
убрал LLM: только парсинг с интерактивным прогрессом в таблице
2026-06-16 14:49:52 +04:00
naeel
fa4c7fe378
SSE-обработка: интерактивный прогресс с таймерами, итоги по времени/байтам
2026-06-16 14:34:00 +04:00
naeel
07344482cd
fix(ui): обычный form submit без JS submit()
...
Форма теперь в DOM, кнопка type=submit.
JS только переносит файлы в скрытый input перед отправкой.
Браузер сам делает POST и следует редиректу.
2026-06-15 07:51:14 +04:00
naeel
fdd7d89ce5
fix: двухшаговый процесс — загрузка (быстро) → обработка (LLM)
...
Шаг 1: POST / → сохранить файлы, парсинг → редирект на /?id=X
Шаг 2: POST /process/X → LLM extract + diff → редирект на /?id=X
Нет таймаута — загрузка мгновенная, LLM по отдельной кнопке.
2026-06-15 07:41:13 +04:00
naeel
9899ede8c6
fix(app): полная перезапись — все шаги пайплайна + ZIP-обработка
...
- ZIP: elements объединяются из всех файлов
- LLM: extractor.extract(text)
- diff: differ.diff(prev, rows)
- spec_rows + spec_history
- Без дубликатов, без replace_string_in_file
2026-06-15 07:29:47 +04:00
naeel
7095d1201f
fix: methods=[GET,POST], красная корзина, детект дубликатов
...
- / принимает GET и POST (было только GET → 405 Method Not Allowed)
- Кнопка удаления: красная иконка trash-2
- Дубликаты: предупреждение + пометка в очереди
2026-06-15 07:15:29 +04:00
naeel
4e714f5680
fix: форма без AJAX — обычный POST, сервер всё делает
...
Убран JS fetch. Форма отправляется напрямую на сервер.
Сервер обрабатывает файлы и возвращает страницу с результатами.
Нет Failed to fetch.
2026-06-15 07:00:44 +04:00
naeel
8fc4d6a15a
clean(app): убран дубликат if __name__, мёртвый _index(), неиспользуемые импорты
2026-06-15 06:43:38 +04:00
naeel
cb92f9072e
fix(ui): корень /, лого Nubes + favicon, убраны поля номера/клиента/даты
...
- Страница перенесена с /upload на / (корень)
- Верхняя панель с логотипом Nubes (nubes-logo.svg)
- favicon.png из ipwhitelist-app
- Поля номера/клиента/даты убраны — договор создаётся авто
- Исправлен JS (относительные URL)
2026-06-15 06:35:02 +04:00
naeel
54d9924c04
feat(ui): страница загрузки договора /upload
...
Дизайн: Nubes Design System (карточки, форма, таблица).
Lucide Icons. drag&drop файла docx/pdf/zip.
Пайплайн: создание договора → загрузка допника → таблица строк.
2026-06-15 06:15:12 +04:00
naeel
cb7a729df7
feat(api): api.py Blueprint — договоры, допники, история
...
POST /api/contracts — создать договор
GET /api/contracts — список
GET /api/contracts/<id> — договор + допники
POST /api/contracts/<id>/supplements — загрузить допник (полный пайплайн)
GET /api/contracts/<id>/history — история изменений
Пайплайн допника: upload→parse→textify→extract→diff→spec_rows→spec_history
2026-06-14 17:02:31 +04:00
naeel
8db35e3b9d
feat(upload): слой загрузки документов + регистрация в app.py
...
POST /upload (multipart/form-data: file):
1. Сохраняет original_bytes в documents (status='uploaded')
2. parser.parse() → elements
3. textify.to_text() → parsed_text
4. UPDATE documents SET parsed_text, status='parsed'
5. Возвращает {document_id, filename, status, elements_count}
При ошибке парсинга: status='error', error_message, 422
2026-06-14 06:11:23 +04:00
naeel
cbfba0bc54
feat: schema.py (DDL 5 таблиц), db.py без DDL, app.py минимальный, test_routes с комментариями
...
По рекомендации Sonnet:
- schema.py — все DDL (documents, contracts, supplements, spec_rows, spec_history)
- db.py — только транспорт (connect/query), DDL убран
- app.py — минимальный: ensure_schema() + register_blueprint()
- test_routes.py — подробные комментарии, исправлен импорт psysql
2026-06-13 17:14:48 +04:00
naeel
6b5a6f79aa
feat: /test createdb — создание БД через API
2026-06-13 12:48:33 +04:00
naeel
b5c007044f
feat: ensure_db() — автосоздание БД при старте
2026-06-13 12:46:18 +04:00
naeel
c7fbc4dc07
fix: db.connect() возвращает ошибку, /test показывает детали
2026-06-13 12:34:55 +04:00