# Прототип ФЗ «КЛГ» — вариант «под АСУ ТК» Данный репозиторий содержит минимально работоспособный прототип серверной части ФЗ «Контроль лётной годности (КЛГ)» в варианте развертывания *в составе АСУ ТК* согласно [Техническому заданию](docs/README.md). **Заказчик:** АО «REFLY» ## Соответствие ТЗ (вариант «под АСУ ТК») ### Платформенные решения АСУ ТК - **ЦХД АСУ ТК** (Центральное хранилище данных): модель — PostgreSQL; выделенные схемы/таблицы под КЛГ. - **П‑ИВ АСУ ТК** (Протокол интеграции и взаимодействия): модель — модуль `app/integration/piv.py` для событий и журналирования интеграционных процессов. - **АСУ ТК‑ИБ** (Информационная безопасность): модель — модуль `app/services/security.py`, OIDC JWKS проверка; маппинг claim'ов подлежит уточнению. - **Информационный портал**: в прототипе реализован базовый UI на React, API рассчитан на подключение портала как «единой точки входа». ### Что реализовано в прототипе - Веб‑приложение (REST API) на **FastAPI**. - Хранение данных в **PostgreSQL** (как модель ЦХД АСУ ТК). - Единая авторизация: **OIDC/JWT‑валидация** (как модель АСУ ТК‑ИБ). В dev возможны HS256 токены. - Приложения/процесс **«заявка на сертификацию организации по ТО»**: - автонумерация; - статусы (draft/submitted/under_review/remarks/approved/rejected/expired); - замечания и автоматический 30‑дневный таймер (настраивается); - уведомления (внутренняя таблица notifications). - Загрузка файлов и привязка вложений (локальное файловое хранилище как заглушка). - Логи загрузок/интеграционных процессов (ingest_job_logs) как часть контура П‑ИВ. - Заглушка клиентского вызова П‑ИВ (push_event). - Управление организациями (операторы, MRO, органы власти). - Управление воздушными судами и их типами. - Дашборд с фирменным стилем REFLY. ### Требования ТЗ, требующие дальнейшей реализации Согласно ТЗ, для полного соответствия необходимо реализовать: 1. **Дополнительные процессы:** - ДЛГ (Документ лётной годности) - КД (Контрольные данные) - Модификации воздушных судов - Инспекции - Контрольные карты программы ТО - Отслеживание компонентов с ограниченным ресурсом (LLP, HT) - Отчеты по ремонтам и повреждениям конструкции - Отчеты по дефектам - Отслеживание комплектующих изделий с ограниченным ресурсом (шасси) 2. **Формы данных согласно ТЗ:** - Статус выполненного технического обслуживания - Статус компонентов с ограниченным межремонтным ресурсом/сроком службы - Отчет по ремонтам и повреждениям конструкции - Отчет по дефектам - Комплектующие изделия с ограниченным ресурсом (шасси) - И другие формы, указанные в ТЗ 3. **Интеграции:** - Уточнить контракты П‑ИВ: форматы сообщений, расписания, ETL‑pipeline, протоколирование. - Подключить централизованную НСИ через П‑НСИ (справочники типов ВС, статусы, классификаторы). 4. **Безопасность и права доступа:** - Реализовать полную ролевую модель и матрицу прав в терминах АСУ ТК‑ИБ. - Реализовать требования к защите информации от НСД. 5. **Документация и тестирование:** - Подготовить ПМИ (Программно-методические инструкции) согласно процедурам приемки. - Реализовать автотесты согласно процедурам приемки. ## Быстрый старт (Docker Compose) ```bash cd klg_asutk_app docker compose up --build ``` После запуска: - Frontend: `http://localhost:8080` - API: `http://localhost:8000/api/v1/health` - API документация: `http://localhost:8000/docs` ## Авторизация (dev) В dev включен режим `ALLOW_HS256_DEV_TOKENS=true`. Для вызовов API требуется заголовок: ``` Authorization: Bearer ``` Минимальный набор claim'ов (пример): ```json { "sub": "user-1", "name": "Иван Иванов", "email": "ivan@example.com", "role": "operator_manager", "org_id": "" } ``` ## Основные эндпоинты ### Организации - `GET /api/v1/organizations` — список организаций - `POST /api/v1/organizations` — создание (admin/authority_inspector) - `GET /api/v1/organizations/{id}` — детали организации - `PATCH /api/v1/organizations/{id}` — обновление - `DELETE /api/v1/organizations/{id}` — удаление ### Воздушные суда - `GET /api/v1/aircraft` — список ВС - `POST /api/v1/aircraft` — создание (operator/admin) ### Заявки на сертификацию - `GET /api/v1/cert-applications` — список заявок - `POST /api/v1/cert-applications` — создание заявки - `GET /api/v1/cert-applications/{id}` — детали заявки - `POST /api/v1/cert-applications/{id}/submit` — подача заявки - `POST /api/v1/cert-applications/{id}/start-review` — начало рассмотрения (authority) - `POST /api/v1/cert-applications/{id}/remarks` — добавление замечаний (authority) - `GET /api/v1/cert-applications/{id}/remarks` — список замечаний - `POST /api/v1/cert-applications/{id}/approve` — одобрение (authority) - `POST /api/v1/cert-applications/{id}/reject` — отклонение (authority) ### Вложения - `POST /api/v1/attachments/{owner_kind}/{owner_id}` — загрузка файла - `GET /api/v1/attachments/{owner_kind}/{owner_id}` — список вложений - `GET /api/v1/attachments/{id}` — метаданные вложения - `GET /api/v1/attachments/{id}/download` — скачивание файла ### Уведомления - `GET /api/v1/notifications` — список уведомлений ### Интеграция - `POST /api/v1/ingest/logs` — логирование интеграционных процессов (authority) ## Структура проекта ``` klg_asutk_app/ ├── backend/ # Backend на FastAPI │ ├── app/ │ │ ├── api/ # API endpoints │ │ ├── core/ # Конфигурация │ │ ├── db/ # Работа с БД │ │ ├── integration/ # Интеграции (П-ИВ) │ │ ├── models/ # Модели данных │ │ ├── schemas/ # Pydantic схемы │ │ └── services/ # Бизнес-логика │ └── requirements.txt ├── frontend/ # Frontend на React + TypeScript │ ├── src/ │ │ ├── api/ # API клиенты │ │ ├── components/ # React компоненты │ │ ├── layout/ # Layout компоненты │ │ ├── pages/ # Страницы приложения │ │ └── assets/ # Шрифты, стили │ └── package.json ├── docs/ # Документация │ └── README.md # Информация о ТЗ └── docker-compose.yml # Docker конфигурация ``` ## Технологический стек - **Backend:** FastAPI, SQLAlchemy, PostgreSQL, APScheduler - **Frontend:** React, TypeScript, Ant Design, Vite - **Инфраструктура:** Docker, Docker Compose ## Лицензия Проект разработан для АО «REFLY» согласно техническому заданию.