# Отчёт о проверке работоспособности (КЛГ / модуль Legal) **Дата:** 2025 **Проверено:** приложение КЛГ (АСУ ТК), модуль юридических документов (Legal). **Примечание:** в проекте нет компонента с названием «Lawer R» / «Lawyer R»; проверка выполнена для всего приложения и Legal-модуля. --- ## 1. Что проверено | Область | Результат | |---------|-----------| | Линтер (backend, frontend) | Ошибок нет | | Синтаксис Python (main, db, config, legal) | Ошибок нет | | Совместимость с SQLite | Исправлена сортировка в Legal (см. ниже) | | Зависимости для запуска без Docker | Добавлен `requirements-sqlite.txt` (без psycopg2) | --- ## 2. Внесённые исправления ### 2.1. Legal API: совместимость с SQLite **Файл:** `backend/app/api/routes/legal.py` **Проблема:** В `list_judicial_practices` использовалось `order_by(..., nulls_last())`. В SQLite старше 3.30 `NULLS LAST` не поддерживается и запрос мог падать. **Исправление:** Сортировка заменена на переносимый вариант: `order_by(decision_date.is_(None), decision_date.desc(), created_at.desc())` — строки с `decision_date = NULL` уходят в конец и при SQLite, и при PostgreSQL. ### 2.2. Запуск без Docker при отсутствии PostgreSQL **Проблема:** `pip install -r requirements.txt` требует `psycopg2-binary`, для которого нужен `pg_config` (установленный PostgreSQL). На Mac без Homebrew/PostgreSQL установка падала. **Исправление:** - Добавлен `backend/requirements-sqlite.txt` без `psycopg2-binary`. - `run-without-docker.sh` переведён на `requirements-sqlite.txt`. Для запуска с PostgreSQL по-прежнему используется `requirements.txt`. --- ## 3. Модуль Legal (условно «Lawyer») ### 3.1. Backend - Роуты: юрисдикции, документы, перекрёстные ссылки, комментарии, судебная практика, ИИ-анализ (`/analyze`, `/documents/{id}/analyze`). - Схемы и модели согласованы. - При отсутствии `OPENAI_API_KEY` агенты работают в режиме заглушек (эвристики, без вызовов LLM), падений нет. - `AnalysisRequest` требует `jurisdiction_id` — проверка на стороне API есть. ### 3.2. Frontend - Отдельной страницы «Legal» / «Юридические документы» в UI нет. - Модуль доступен через: - Swagger: `http://localhost:8000/docs` → секция **legal**; - `curl` или иной HTTP-клиент. Если под «Lawer R» подразумевается юридический модуль, для полноценного использования из браузера нужна отдельная страница и вызовы `/api/v1/legal/*`. --- ## 4. Рекомендации 1. **Запуск без Docker** Использовать `./run-without-docker.sh` (используется `requirements-sqlite.txt`). Если `pip install` для `requirements-sqlite.txt` падает (например, на Python 3.14) — проверить доступность колес для Вашей версии Python или использовать 3.11–3.12. 2. **Отладочные логи в production** В `frontend/src/api/client.ts` в ответах на `/aircraft` остаются `console.log`. Для prod их лучше отключить или вынести за флаг. 3. **Интерфейс для Legal** Для работы с юрисдикциями, документами и ИИ-анализом через браузер имеет смысл добавить страницу «Юридические документы» с вызовами `/api/v1/legal/*`. 4. **Docker** Поведение при `docker compose up` не менялось: по-прежнему используются `requirements.txt`, `DATABASE_URL` и `STORAGE_DIR` из `docker-compose.yml`. --- ## 5. Как перепроверить ```bash # Без Docker (SQLite) ./run-without-docker.sh # В браузере: http://localhost:3000, токен dev # Legal API (после запуска backend) curl -s -H "Authorization: Bearer dev" http://localhost:8000/api/v1/legal/jurisdictions curl -s http://localhost:8000/api/v1/health ``` --- ## 6. Итог - Критичных ошибок в коде и конфигурации не найдено. - Устранены: несовместимость Legal с SQLite и зависимость запуска без Docker от установленного PostgreSQL. - Модуль Legal на backend реализован и пригоден к использованию через API; в веб-интерфейсе для него отдельного раздела пока нет.