# Blueprint QC Backend

FastAPI backend для сбора, хранения и разметки замечаний QC по чертежам.

## Архитектура

```
┌─────────────┐     ┌──────────────┐     ┌─────────────┐
│   React UI  │────▶│  FastAPI     │────▶│   SQLite    │
│  (viewer)   │◀────│  Backend     │◀────│   Database  │
└─────────────┘     └──────────────┘     └─────────────┘
                           │
                           ▼
                    ┌──────────────┐
                    │  OCR + QC    │
                    │  Pipeline    │
                    └──────────────┘
```

## Установка

```bash
cd backend
pip install -r requirements.txt
```

## Запуск

```bash
python -m uvicorn app.main:app --reload --port 8000
```

API будет доступен на http://localhost:8000

Документация (Swagger): http://localhost:8000/docs

## API Endpoints

### Проекты

| Method | Endpoint | Описание |
|--------|----------|----------|
| POST | `/api/projects/upload` | Загрузка PDF, запуск обработки |
| GET | `/api/projects` | Список проектов |
| GET | `/api/projects/{id}` | Детали проекта |

### Замечания (Issues)

| Method | Endpoint | Описание |
|--------|----------|----------|
| GET | `/api/projects/{id}/issues` | Замечания проекта |
| GET | `/api/issues/{id}` | Одно замечание |

### Feedback (разметка)

| Method | Endpoint | Описание |
|--------|----------|----------|
| POST | `/api/feedback` | Отметить TP/FP |
| GET | `/api/feedback/stats` | Статистика |

### Обучение

| Method | Endpoint | Описание |
|--------|----------|----------|
| GET | `/api/training/data` | Данные для обучения |
| POST | `/api/training/export` | Скачать JSON |
| GET | `/api/stats` | Общая статистика |

### Viewer

| Method | Endpoint | Описание |
|--------|----------|----------|
| GET | `/viewer/{project_id}/{page}` | HTML viewer |
| GET | `/viewer_tiles/{project_id}/{path}` | DZI тайлы |

## Workflow

1. **Загрузка**: `POST /api/projects/upload` с PDF
2. **Обработка**: Backend запускает OCR → QC → DZI (фоново)
3. **Просмотр**: `GET /viewer/{id}/{page}` — viewer с overlay
4. **Разметка**: Пользователь кликает замечания → `POST /api/feedback` (is_true_positive: true/false)
5. **Обучение**: `GET /api/training/data` — экспорт размеченных данных

## Feedback Schema

```json
{
  "issue_id": 123,
  "is_true_positive": true,    // true = реальная проблема, false = ложное срабатывание
  "comment": "Размер действительно плохо читается",
  "action_taken": "fixed"      // fixed / ignored / not_sure
}
```

## Training Data

Каждый размеченный пример содержит:
- `bbox`: координаты на PNG
- `issue_type`: тип проблемы
- `is_true_positive`: метка от пользователя
- `image_path`: путь к PNG страницы
- `dimension_text`: текст размера (если есть)
- `confidence`: OCR confidence

Накопив 100-200 размеченных примеров, можно:
1. Fine-tune VLM (few-shot prompting)
2. Обучить YOLO-детектор под ваши типы чертежей
3. Дообучить правила QC (эвристики)

## Модели БД

### Project
- id, name, pdf_filename, status, created_at, output_folder

### Page
- id, project_id, page_number, png_path, ocr_data, vlm_description

### Issue
- id, project_id, page_id, issue_type, severity, message, bbox, dimension_text, confidence

### Feedback
- id, issue_id, is_true_positive, comment, action_taken, created_at
