162 lines
6.0 KiB
Markdown
162 lines
6.0 KiB
Markdown
|
|
# Смета Ассистент
|
|||
|
|
|
|||
|
|
Веб-приложение для автоматизации создания смет на изыскательские работы с ИИ-ассистентом.
|
|||
|
|
|
|||
|
|
## Возможности
|
|||
|
|
|
|||
|
|
- **Чат с ИИ**: Извлечение данных из текста ТЗ или PDF файлов
|
|||
|
|
- **Конструктор смет**: Визуальный редактор позиций сметы
|
|||
|
|
- **Справочники базовых цен**: СБЦ геодезия, геология, экология
|
|||
|
|
- **Автоматический расчёт**: Коэффициенты, перевод в текущие цены, НДС
|
|||
|
|
- **Экспорт в PDF**: Генерация готовой сметы (при наличии Python — через модуль на ReportLab с корректной кириллицей)
|
|||
|
|
|
|||
|
|
## Структура проекта
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
├── backend/ # Node.js + Express + Prisma
|
|||
|
|
│ ├── prisma/
|
|||
|
|
│ │ ├── schema.prisma # Схема БД
|
|||
|
|
│ │ └── seed.ts # Начальные данные
|
|||
|
|
│ └── src/
|
|||
|
|
│ ├── routes/ # API роуты
|
|||
|
|
│ └── services/ # Бизнес-логика
|
|||
|
|
├── frontend/ # React + Vite + Tailwind
|
|||
|
|
│ └── src/
|
|||
|
|
│ ├── components/ # React компоненты
|
|||
|
|
│ └── api/ # API клиент
|
|||
|
|
└── data/
|
|||
|
|
└── price-books/ # JSON справочники цен
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Требования
|
|||
|
|
|
|||
|
|
- Node.js 18+
|
|||
|
|
- PostgreSQL 14+
|
|||
|
|
- npm или yarn
|
|||
|
|
|
|||
|
|
## Установка
|
|||
|
|
|
|||
|
|
### 1. База данных
|
|||
|
|
|
|||
|
|
Создайте базу данных PostgreSQL:
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE DATABASE estimate_assistant;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. Backend
|
|||
|
|
|
|||
|
|
Для корректной кириллицы в PDF рекомендуется использовать **Python-модуль** (ReportLab): установите Python 3.8+, в папке `backend/pdf_generator` выполните `pip install -r requirements.txt`. На Windows скрипт использует системный Arial; иначе положите TTF в `backend/pdf_generator/fonts/` (см. `backend/pdf_generator/README.md`). Если Python недоступен, backend использует генерацию на Node (нужен `npm install` в `backend` для шрифтов). После изменений перезапустите backend (`npm run dev`).
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd backend
|
|||
|
|
|
|||
|
|
# Установка зависимостей
|
|||
|
|
npm install
|
|||
|
|
|
|||
|
|
# Скопируйте .env.example в .env и настройте
|
|||
|
|
cp .env.example .env
|
|||
|
|
|
|||
|
|
# Создание таблиц в БД
|
|||
|
|
npm run prisma:push
|
|||
|
|
|
|||
|
|
# Загрузка начальных данных
|
|||
|
|
npm run prisma:seed
|
|||
|
|
|
|||
|
|
# Запуск сервера (порт 5000)
|
|||
|
|
npm run dev
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. Frontend
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd frontend
|
|||
|
|
|
|||
|
|
# Установка зависимостей
|
|||
|
|
npm install
|
|||
|
|
|
|||
|
|
# Запуск (порт 3000)
|
|||
|
|
npm run dev
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Конфигурация (.env)
|
|||
|
|
|
|||
|
|
```env
|
|||
|
|
# База данных
|
|||
|
|
DATABASE_URL="postgresql://it:iiEasy348ax@@localhost:5432/estimate_assistant?schema=public"
|
|||
|
|
|
|||
|
|
# Сервер
|
|||
|
|
PORT=5000
|
|||
|
|
|
|||
|
|
# AI провайдер: iieasy или lmstudio
|
|||
|
|
AI_PROVIDER=iieasy
|
|||
|
|
|
|||
|
|
# ai.iieasy.ru
|
|||
|
|
IIEASY_API_URL=https://ai.iieasy.ru/v1
|
|||
|
|
IIEASY_API_KEY=your-api-key
|
|||
|
|
IIEASY_MODEL=google/gemma-3n-e4b
|
|||
|
|
|
|||
|
|
# LM Studio (локальный)
|
|||
|
|
LMSTUDIO_API_URL=http://localhost:1234/v1
|
|||
|
|
LMSTUDIO_MODEL=local-model
|
|||
|
|
|
|||
|
|
# Настройки по умолчанию
|
|||
|
|
DEFAULT_EXECUTOR=ООО "ГеоВектор"
|
|||
|
|
DEFAULT_VAT_RATE=20
|
|||
|
|
DEFAULT_COMPANY_COEF=0.2092
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## API
|
|||
|
|
|
|||
|
|
### Сметы
|
|||
|
|
- `GET /api/estimates` - Список смет
|
|||
|
|
- `POST /api/estimates` - Создать смету
|
|||
|
|
- `GET /api/estimates/:id` - Получить смету
|
|||
|
|
- `PUT /api/estimates/:id` - Обновить смету
|
|||
|
|
- `POST /api/estimates/:id/items` - Добавить позицию
|
|||
|
|
- `POST /api/estimates/:id/recalculate` - Пересчитать
|
|||
|
|
- `GET /api/estimates/:id/pdf` - Скачать PDF
|
|||
|
|
|
|||
|
|
### Справочники
|
|||
|
|
- `GET /api/price-books` - Список справочников
|
|||
|
|
- `GET /api/price-books/items/search?query=...` - Поиск позиций
|
|||
|
|
- `GET /api/price-books/coefficients/all` - Коэффициенты
|
|||
|
|
- `GET /api/price-books/directions/all` - Направления изысканий
|
|||
|
|
|
|||
|
|
### Чат
|
|||
|
|
- `POST /api/chat/sessions` - Создать сессию
|
|||
|
|
- `POST /api/chat/sessions/:id/messages` - Отправить сообщение
|
|||
|
|
- `POST /api/chat/sessions/:id/upload` - Загрузить файл
|
|||
|
|
|
|||
|
|
### Настройки
|
|||
|
|
- `GET /api/settings` - Получить настройки
|
|||
|
|
- `PUT /api/settings/:key` - Обновить настройку
|
|||
|
|
|
|||
|
|
### Администрирование
|
|||
|
|
- `GET /api/admin/stats` - Статистика БД
|
|||
|
|
- `POST /api/admin/price-books/import-json` - Импорт справочника
|
|||
|
|
|
|||
|
|
## Справочники базовых цен
|
|||
|
|
|
|||
|
|
Данные извлечены из официальных СБЦ:
|
|||
|
|
- СБЦ "Инженерно-геодезические изыскания" (2004)
|
|||
|
|
- СБЦ "Инженерно-геологические и инженерно-экологические изыскания" (1999)
|
|||
|
|
|
|||
|
|
JSON файлы находятся в `data/price-books/`.
|
|||
|
|
|
|||
|
|
## Формула расчёта сметы
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Базовая_стоимость = Цена_СБЦ × Объём × К1 × К2 × К3
|
|||
|
|
Итого_изыскания = Сумма_работ + Транспорт + Орг_ликв
|
|||
|
|
С_районным_коэф = Итого × Районный_коэф
|
|||
|
|
Текущие_цены = С_районным_коэф × Инфляционный_индекс
|
|||
|
|
Итого_без_НДС = Текущие_цены × Коэф_компании × Коэф_исполнителя
|
|||
|
|
НДС = Итого_без_НДС × Ставка_НДС
|
|||
|
|
Всего = Итого_без_НДС + НДС
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Лицензия
|
|||
|
|
|
|||
|
|
MIT
|