# GostGenerator Web

Веб-сервис для генерации ГОСТ-документов из архива Altium-проекта: парсинг в БД, редактирование таблиц и рамки, экспорт PDF/Excel, помощь LLM через OpenRouter (прокси).

## Состав

- `backend/` — FastAPI + PostgreSQL + парсер Altium + генераторы таблиц
- `frontend/` — React (Vite) SPA
- `docker-compose.yml` — api + db + web (nginx)

## Быстрый старт на сервере

```bash
cd web
cp .env.example .env
# отредактируйте .env: API_TOKEN, OPENROUTER_*, POSTGRES_PASSWORD
docker compose up -d --build
```

Откройте `http://<server>:8080`.

В шапке укажите **API token** (значение `API_TOKEN` из `.env`).

### Типовой сценарий

1. Создать проект
2. Загрузить ZIP с Altium-проектом (внутри должен быть `.PrjPcb` + `.SchDoc` / `.PcbDoc`)
3. Заполнить децимальный номер / название платы и поля рамки
4. Выбрать документ → **Сгенерировать** → править ячейки → **Сохранить**
5. Скачать **Excel** или **PDF**
6. При необходимости: чат LLM → просмотреть proposed edits → **Применить**
7. Обновление базы элементов: **Обновить ZIP** (таблицы по умолчанию сохраняются)

## Переменные окружения

| Переменная | Описание |
|---|---|
| `API_TOKEN` | Токен для API / UI |
| `OPENROUTER_BASE_URL` | URL OpenRouter (`…/api/v1`) |
| `OPENROUTER_API_KEY` | Ключ |
| `OPENROUTER_MODEL` | Например `deepseek/deepseek-chat` |
| `OPENROUTER_PROXY` | SOCKS5-прокси, напр. `socks5://user:pass@host:1080` |
| `HTTP_PORT` | Порт nginx (по умолчанию 8080) |
| `DATA_DIR` | В контейнере `/data` (zip и артефакты) |

## Локальная разработка (без Docker UI)

PostgreSQL + API:

```bash
# поднять только БД
docker compose up -d db

cd backend
python -m venv .venv
# Windows: .venv\Scripts\activate
pip install -r requirements.txt
set DATABASE_URL=postgresql+psycopg://gost:gost@localhost:5432/gost
set API_TOKEN=changeme
set DATA_DIR=../data
uvicorn app.main:app --reload --port 8000
```

Frontend:

```bash
cd frontend
npm install
npm run dev
```

Vite проксирует `/api` на `localhost:8000`.

## API

Документация: `http://<host>:8080/docs` (через nginx) или `:8000/docs` напрямую к api.

Основные эндпоинты: `/api/projects`, `…/upload`, `…/tables/{type}/generate`, `…/inscriptions`, `…/export`, `…/llm/chat`, `…/llm/apply`.

Заголовок: `Authorization: Bearer <API_TOKEN>` или `X-API-Token`.

## LLM и стоимость

Вызовы только по явной команде в чате. Автозаполнения всех строк нет. В промпт уходит сжатый снимок таблицы (лимит `LLM_MAX_CONTEXT_ROWS`). Правки не применяются автоматически.
