Backend pipeline:
- POST /api/templates/import (multipart, max 25 MB)
- extract.ts: DOCX→mammoth, PDF→pdf-parse, fallback to OCR via tesseract+poppler-utils
(pdftoppm renders pages to PNG, tesseract reads with rus+eng)
- deepseek.ts: chat completions client with strict JSON response_format
- recognize.ts: structured prompt that produces simplified DocBody (string text),
postprocessor wraps text in TipTap-compatible JSON, validates with zod schema
- prompt enforces placeholder substitution: {{customer.*}}, {{executor.*}},
{{contract.number}}, {{contract.date}}, {{today}}
- error codes: NO_OCR / NO_DEEPSEEK_KEY / UNSUPPORTED_MIME / INVALID_DOC_BODY
Dockerfile: apk add tesseract-ocr (+rus +eng data), poppler-utils, imagemagick
Frontend:
- Templates page: ⤴ Загрузить документ → file picker (.docx,.pdf,.png,.jpg)
- doc type selector (contract/invoice/act/upd)
- import-banner with spinner shows uploading→analyzing stages
- on success navigates to /templates/:id (TemplateEdit) for review
Reuses DEEPSEEK_API_KEY pattern from Hall-planer.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Doc_manager
Сервис создания договоров, счетов и актов/УПД с интеграцией банка Точка. Часть экосистемы Queo.
Стек
- Backend — Node.js 20+ / Fastify / Prisma / PostgreSQL (TypeScript, ESM).
- Frontend — React + Vite + TipTap (TypeScript).
- Auth — SSO через
auth.queo.ru(RS256 JWT в cookieq_at, JWKS-валидация). - Bank — Точка API: счета и акты/УПД создаются на стороне банка, договоры — наши.
Структура
apps/
api/ # Fastify + Prisma
web/ # React + Vite
packages/
shared/ # zod-схемы и типы (DocBody, Tochka DTOs)
docker/
docker-compose.yml
Caddyfile
Подготовка перед разработкой
- Node.js ≥ 20 — установлен.
- PostgreSQL — локально или через Docker (
docker compose up postgres). - Auth_server должен принимать редиректы на
doc.queo.ru— добавить вC:\project\Auth_server\.env:ALLOWED_RETURN_TO_HOSTS=auth.queo.ru,hall.queo.ru,cloud.queo.ru,doc.queo.ru
Быстрый старт «пощупать прямо сейчас»
Нет Postgres / Docker / доступа к auth.queo.ru — всё равно работает:
npm install
npm run dev:demo
Что делает dev:demo:
- Запускает встроенный Postgres из
node_modules(первый раз скачает ~80MB binaries вdata/embedded-pg/). - Накатывает схему через
prisma db push. - Сидит организацию
DEFAULT_ORGANIZATION_ID. - Поднимает API на
:3030и web на:5173параллельно. - В API включает
DEV_BYPASS_AUTH=1— фейковый admin без auth.queo.ru.
Открыть http://localhost:5173/ — попадаешь сразу в шелл (без логина), можно ходить:
/organization— реквизиты компании,/clients— клиенты,/services— каталог услуг,- остальное — заглушки до M3+.
Данные между перезапусками сохраняются в data/embedded-pg/. Чтобы начать с нуля — удалить эту папку.
⚠️ Безопасность: DEV_BYPASS_AUTH=1 обходит JWT. API hard-checks: при NODE_ENV=production с этим флагом процесс отказывается стартовать.
Полная установка (с реальным auth.queo.ru)
npm install
cp apps/api/.env.example apps/api/.env
# отредактировать DATABASE_URL, оставить DEV_BYPASS_AUTH=0
npm run prisma:migrate
npm run -w @doc-manager/api prisma:seed
npm run dev # api+web с настоящей SSO-авторизацией
API на http://localhost:3030, web — на http://localhost:5173. Перед этим добавить doc.queo.ru в ALLOWED_RETURN_TO_HOSTS в C:\project\Auth_server\.env.
Тесты M1 (smoke)
GET http://localhost:3030/health→{ ok: true }- Открыть
http://localhost:5173без cookieq_at→ редирект наhttps://auth.queo.ru/auth/login?return_to=.... - С валидной cookie от auth.queo.ru —
/api/meотдаёт payload JWT.
Тесты M2 (организация, клиенты, услуги)
С Postgres и применённой миграцией:
- Поднять БД и применить миграцию:
docker compose -f docker/docker-compose.yml up -d postgres npm run prisma:migrate # создаст первую миграцию npm run -w @doc-manager/api prisma:seed # сидит DEFAULT_ORGANIZATION_ID GET /api/organization→ возвращает запись организации (после сида).GET /api/clients?q=...— поиск по name/inn/email.GET /api/services?includeArchived=1— каталог + архив.- В UI:
/organization— заполнить реквизиты;/clients— добавить клиента;/services— добавить услугу с ценой и НДС.
SQL-предпросмотр миграции без БД: apps/api/prisma/init.sql.preview (генерируется через prisma migrate diff).
План реализации
См. C:\Users\VVMedia\.claude\plans\floofy-baking-jellyfish.md. Этапы M1–M7.
Деплой (домашний сервер)
ssh -i ~/.ssh/id_sat vmv@192.168.0.158
cd ~/Doc-manager
git pull && docker compose build && docker compose up -d