Версия документа: 1.0 (проект спецификации по утверждённым требованиям)
Дата: 2026-10-17
Язык: русский
Статус: консолидированное ТЗ; открытые вопросы и проектные допущения выделены отдельно
Целевая среда: Linux, первоначально Debian 12 x86-64
Основной сценарий: экспедиционная работа активатора RDA
Принцип документа. Пометка ОБЯЗАТЕЛЬНО означает ранее утверждённую функцию или вытекающее из неё условие корректной работы. ПРЕДЛАГАЕТСЯ означает проектное решение, подлежащее проверке. ТРЕБУЕТ УТОЧНЕНИЯ не считается согласованным требованием. Ссылки на внешние протоколы означают необходимость последующей проверки совместимости с конкретными версиями; наличие публичного API не гарантируется.
1. Назначение, цели и границы
1.1. Назначение. RDA Logger — новое нативное настольное GUI-приложение для Linux, специализированное для радиолюбительских RDA-экспедиций и полноценного ведения журнала QSO. Интерфейс TNXLog не является образцом для копирования.
1.2. Основные цели. Максимально быстрый ввод связей с клавиатуры; сохранение данных при отсутствии интернета; работа одного и многих операторов; последовательная и одновременная активация RDA; прозрачная привязка QSO к местоположению; достоверная доставка данных во внешние системы; безопасное объединение журналов.
1.3. Системные границы. Настольное приложение, локальная база и дополнительные фоновые процессы/синхронизатор. Онлайн-сервисы (TNXQSO, RDA LogFlow, Hamlog, RDA Award, LoTW, eQSL и др.) остаются независимыми системами. Система не вправе объявлять QSO зачтённым за RDA без внешнего подтверждения.
1.4. Не входит в уже утверждённый объём. Клонирование интерфейса TNXLog; иерархия прав операторов; автоматическое переключение RDA без подтверждения; обязательное наличие интернета; безусловное управление трансивером при запуске.
2. Термины и сущности
Термин | Определение |
|---|---|
Экспедиция | Общий выезд, включающий операторов, рабочие места и одну или несколько активаций. |
Активация | Подтверждённый период работы из одного или нескольких RDA; при изменении состава районов создаётся новое состояние/интервал. |
Сеанс | Работа конкретного оператора на конкретном рабочем месте/трансивере в интервале UTC. |
QSO | Единственная физически проведённая радиосвязь, сохранённая ровно одной основной записью. |
DUPE | Предупреждение о возможном повторе согласно выбранному профилю; не запрет сохранения. |
Рабочее место | Компьютер и его локальные настройки, источники CAT/GNSS, кейеры и журнал. |
Источник QSO | Ручной ввод, цифровая программа, файл или сетевой адаптер. |
Публикация | Выгрузка во внешний сервис; отличается от синхронизации рабочих мест. |
UTC | Единственная временная шкала хранения и отображения времени QSO. |
3. Пользователи и сценарии
FR-001 ОБЯЗАТЕЛЬНО. Поддержать один оператор/один трансивер, несколько операторов/трансиверов, онлайн-работу по LAN/Wi-Fi и автономную работу с последующим объединением.
FR-002 ОБЯЗАТЕЛЬНО. Все операторы равноправны; нет ролей «руководитель», «наблюдатель» или индивидуальных полномочий. Идентичность оператора и история изменений обязательны для аудита, но не для иерархии доступа.
FR-003 ОБЯЗАТЕЛЬНО. В рамках одной экспедиции поддержать последовательные RDA-активации и одновременную работу с границы нескольких районов. Один QSO хранится единожды, но может быть связан с несколькими RDA.
FR-004 ОБЯЗАТЕЛЬНО. Изменение активного района или набора районов производится только после подтверждения оператором; GNSS предлагает, но не переключает самостоятельно.
FR-005 ОБЯЗАТЕЛЬНО. Регистрация QSO не блокируется из-за потери сети, CAT, GNSS, справочников позывных, карт, синхронизации или резервных направлений.
FR-006 ОБЯЗАТЕЛЬНО. Сохранять происхождение QSO, оператора и оборудования, UTC, подтверждённую активацию и качество геопривязки на момент записи.
4. Организация данных об экспедиции
FR-010 ОБЯЗАТЕЛЬНО. Экспедиция имеет UUID, имя, позывной/позывные активатора, начало/конец UTC, список операторов, рабочих мест, трансиверов, активаций, журналов, треков и доказательств.
FR-011 ОБЯЗАТЕЛЬНО. Активация имеет UUID, экспедицию, набор RDA, интервал UTC, источник координат, координаты/статус их отсутствия, основание подтверждения и историю переключений.
FR-012 ОБЯЗАТЕЛЬНО. При смене набора RDA предыдущая привязка QSO остаётся неизменной; исправление исторической записи возможно только с записью аудита.
FR-013 ОБЯЗАТЕЛЬНО. Для многооператорской работы поддержать принадлежность активации и местоположения конкретному рабочему месту: одновременные сеансы могут физически находиться в разных местах.
FR-014 ОБЯЗАТЕЛЬНО. Перед изменением районов проверять геоданные и показывать возможную неоднозначность близости к границе; не считать GNSS координаты доказательством права на зачёт без проверки действующих правил.
5. Ввод, хранение и редактирование QSO
FR-020 ОБЯЗАТЕЛЬНО. Интеллектуальная строка быстрого ввода с управлением без мыши, автодополнением позывных, предупреждением DUPE, автоматическим временем UTC, приёмом частоты/режима из CAT и заполнением подтверждённых RDA.
FR-021 ОБЯЗАТЕЛЬНО. Расширенная карточка для просмотра и редактирования всех поддерживаемых стандартных ADIF-полей, дополнительных полей RDA, координат, источников и служебных статусов.
FR-022 ОБЯЗАТЕЛЬНО. Каждому QSO присваивается неизменяемый UUID. Повторная доставка одного события не создаёт второй записи. Фактически самостоятельные повторные QSO разрешены.
FR-023 ОБЯЗАТЕЛЬНО. Сохранять MODE и SUBMODE, частоту и диапазон, RST, позывные, UTC, оператора, станцию, источник и связь с активацией; не терять неизвестные поля при импорте и экспорте ADIF.
FR-024 ОБЯЗАТЕЛЬНО. Редактирование сохраняет UUID, увеличивает версию записи, добавляет запись в журнал изменений и событие для синхронизации.
FR-025 ОБЯЗАТЕЛЬНО. Таблица QSO: выбор/перестановка/ширина колонок, многостолбцовая сортировка, фильтрация, поиск, сохранённые представления, неподвижная шапка, прокрутка содержимого, расширение на доступную высоту.
FR-026 ОБЯЗАТЕЛЬНО. Готовые профили таблицы: эфир, экспедиция, проверка, цифровые режимы, синхронизация, работа с несколькими RDA; пользователь может создавать новые.
FR-027 ОБЯЗАТЕЛЬНО. ADIF импорт/экспорт, CSV экспорт отфильтрованного набора; валидировать данные, сохранять протокол импорта и обнаруженных конфликтов.
FR-028 ПРЕДЛАГАЕТСЯ. При сохранении QSO выполнять короткую транзакцию SQLite, после успешного commit показывать подтверждение регистрации. Режим SQLite WAL, busy_timeout и стратегия synchronous определяются испытаниями на отказ питания.
6. Контроль DUPE
FR-030 ОБЯЗАТЕЛЬНО. Настраиваемые профили RDA, Digital, Expedition и пользовательские. Критерии: позывной, диапазон, MODE/SUBMODE/группа режимов, район RDA, дата UTC, временной интервал и область поиска.
FR-031 ОБЯЗАТЕЛЬНО. При одновременной активации нескольких RDA показывать результат отдельно для каждого района.
FR-032 ОБЯЗАТЕЛЬНО. DUPE — предупреждение, а не запрет. Нельзя автоматически удалять похожие QSO.
FR-033 ОБЯЗАТЕЛЬНО. Проверять повторы в объединённом многопользовательском журнале и пересчитывать результат после восстановления синхронизации.
FR-034 ПРЕДЛАГАЕТСЯ. Профиль должен быть версионирован и включать явно заданные правила нормализации позывного, выделения суффиксов /P, /M и т.п. Эти правила нельзя автоматически приравнивать к официальным условиям зачёта RDA.
7. CAT / трансиверы
FR-040 ОБЯЗАТЕЛЬНО. Использовать Hamlib для USB, UART и TCP/IP; поддерживать подключение через существующий rigctld там, где применимо.
FR-041 ОБЯЗАТЕЛЬНО. Автоматически считывать частоту и режим, при поддержке — VFO, Split и состояние PTT. При недоступности CAT допускается ручной ввод.
FR-042 ОБЯЗАТЕЛЬНО. Асинхронный опрос и переподключение, индивидуальные профили трансиверов, изоляция ошибок по рабочим местам.
FR-043 ПРЕДЛАГАЕТСЯ. Изменяющие команды CAT/PTT выключены по умолчанию; включаются только при явном выборе соответствующей функции Keyer.
8. GNSS и картография
FR-050 ОБЯЗАТЕЛЬНО. Источники: последовательные USB/UART NMEA 0183, gpsd, TCP NMEA, UDP NMEA и ручной ввод координат. Единая нормализованная модель фиксации.
FR-051 ОБЯЗАТЕЛЬНО. Сохранять UTC, широту/долготу, источник, возраст фиксации, доступные параметры точности/качества; отсутствие данных явно отличать от предыдущих координат.
FR-052 ОБЯЗАТЕЛЬНО. GNSS предлагает переключение на иной RDA; изменение подтверждает оператор. При неуверенном положении возле границы показать предупреждение.
FR-053 ОБЯЗАТЕЛЬНО. Адаптивная запись GNSS-трека, учитывающая движение/интервал; обязательное событие геофиксации либо фиксации статуса отсутствия координат для каждого QSO, начала/окончания и каждого переключения активации.
FR-054 ОБЯЗАТЕЛЬНО. Интерактивная карта с проверенными границами RDA, треками, точками активаций, возможностью автономной работы и экспортом GPX/KML.
FR-055 ОБЯЗАТЕЛЬНО. Привязка QSO к данным позиционирования в момент проведения. Позднейшее получение GNSS не переписывает исторические данные автоматически.
FR-056 ПРЕДЛАГАЕТСЯ. MapLibre/Qt WebEngine на совместимых платформах, облегчённый 2D-рендерер на ресурсно ограниченных системах; форматы MBTiles/GeoPackage/GeoJSON.
FR-057 ТРЕБУЕТ УТОЧНЕНИЯ. Авторитетный источник и лицензия границ RDA, периодичность обновления, алгоритм сопоставления координат с RDA, допустимое отклонение GNSS, процедуры работы с границы.
9. Цифровые программы и сетевой импорт
FR-060 ОБЯЗАТЕЛЬНО. Поддержать WSJT-X, JTDX, MSHV и FLDIGI; приём завершённых QSO из доступных UDP/сетевых API и ADIF, при необходимости XML-RPC.
FR-061 ОБЯЗАТЕЛЬНО. Раздельные адаптеры с декларированием возможностей (приём, состояние, частота, режим, текущий корреспондент, подсветка DUPE, отправка RDA/локатора, настройка).
FR-062 ОБЯЗАТЕЛЬНО. Двусторонний обмен там, где конкретная версия программы реально поддерживает соответствующую команду. Не использовать недокументированные возможности как гарантированные.
FR-063 ОБЯЗАТЕЛЬНО. Унифицированный конвейер: адаптер → нормализация → сопоставление источника/активации → валидация → дедупликация событий → транзакционная запись → очереди публикации.
FR-064 ОБЯЗАТЕЛЬНО. Несколько экземпляров программы могут соответствовать разным рабочим местам; конфликт RDA-привязки не исправлять незаметно.
FR-065 ТРЕБУЕТ УТОЧНЕНИЯ. Конкретные версии, схемы сообщений, особенности реализации UDP и условия лицензий для каждой цифровой программы.
10. CW Keyer и Voice Keyer
FR-070 ОБЯЗАТЕЛЬНО. CW Keyer: программируемые макросы, F1–F12/Shift+F1–F12, скорость WPM, Winkeyer и совместимые устройства, очередь передачи, прерывание Esc и разделение рабочих мест.
FR-071 ОБЯЗАТЕЛЬНО. Voice Keyer: запись/воспроизведение, привязка к F-клавишам, выбор аудиоустройств, PTT, настраиваемый цикл Auto CQ.
FR-072 ОБЯЗАТЕЛЬНО. Для каждого устройства исключить одновременное управление TX из конфликтующих макросов; ограничить длительность передачи, обеспечивать аварийную остановку и журналирование.
FR-073 ОБЯЗАТЕЛЬНО. После перезапуска не возобновлять автоматически прерванные передачи; реакция на потерю связи с устройством должна быть явной.
FR-074 ПРЕДЛАГАЕТСЯ. Тест без выхода в эфир, подтверждение безопасного PTT, настраиваемые pre/post-key задержки и сторожевой таймер.
11. Справочники позывных
FR-080 ОБЯЗАТЕЛЬНО. Локальная база/кеш, QRZ.com, HamQTH и расширяемые адаптеры других справочников.
FR-081 ОБЯЗАТЕЛЬНО. Асинхронный поиск, учёт источника и времени обновления, отсутствие блокировки QSO при недоступности сети.
FR-082 ОБЯЗАТЕЛЬНО. Автодополнение, карточка корреспондента и ручное редактирование; ответы справочника не перезаписывают автоматически исторический QSO.
FR-083 ТРЕБУЕТ УТОЧНЕНИЯ. Подписки, правила кеширования, ограничения запросов и правомерность распространения полученных данных.
12. Внешние сервисы и публикация
FR-090 ОБЯЗАТЕЛЬНО. Отдельные адаптеры TNXQSO, RDA LogFlow, Hamlog, RDA Award, LoTW, eQSL и возможность подключения иных сервисов.
FR-091 ОБЯЗАТЕЛЬНО. Независимые очереди, состояния и правила повторной отправки по каждому сервису; успех в одном не влияет на статус остальных.
FR-092 ОБЯЗАТЕЛЬНО. Повторная отправка не должна создавать дубли там, где сервис допускает идемпотентность. Для сервисов без такой гарантии — контроль экспортных идентификаторов, обработка неопределённого результата и ручное разрешение.
FR-093 ОБЯЗАТЕЛЬНО. Синхронизация рабочих мест и внешняя публикация — разные процессы. Для одного сервиса/экспедиции не должно быть двух конкурирующих отправителей одной записи.
FR-094 ОБЯЗАТЕЛЬНО. После изменения ранее опубликованного QSO применить предусмотренный сервисом путь исправления либо пометить ручное вмешательство; не выдавать импорт/отправку за внешнее подтверждение зачёта.
FR-095 ТРЕБУЕТ УТОЧНЕНИЯ. Наличие и условия конкретных API, авторизация, способы импорта, квоты и механизм исправлений TNXQSO, Hamlog, RDA Award, LoTW, eQSL. Реализация адаптеров зависит от результатов исследования.
13. Multi-Operator и объединение журналов
FR-100 ОБЯЗАТЕЛЬНО. На каждом рабочем месте локальная SQLite и полноценная возможность продолжать QSO без центрального сервера.
FR-101 ОБЯЗАТЕЛЬНО. Обмен при наличии LAN/Wi-Fi, автоматическое переподключение, накопление изменений и повторяемая доставка после разрыва соединения.
FR-102 ОБЯЗАТЕЛЬНО. У каждого QSO UUID, версия и источник; дубли событий игнорируются, конфликтующие редактирования обнаруживаются и сохраняются для согласования.
FR-103 ОБЯЗАТЕЛЬНО. Повторное объединение одного набора журналов без новых изменений не должно менять итог и число QSO.
FR-104 ОБЯЗАТЕЛЬНО. Не удалять потенциальные DUPE; отчёт об объединении включает добавленные, совпавшие, конфликтные и отклонённые записи.
FR-105 ОБЯЗАТЕЛЬНО. Все операторы равноправны; сохранять авторство изменений и защиту от случайного параллельного управления одним физическим трансивером.
FR-106 ПРЕДЛАГАЕТСЯ. Локальный сервер/координатор синхронизации на одном ПК или отдельном устройстве; поиск по mDNS, ручной адрес, аутентифицированный зашифрованный транспорт, инкрементальный журнал событий.
FR-107 ТРЕБУЕТ УТОЧНЕНИЯ. Конкретный протокол обнаружения, защита от разделения сети (split-brain) и правила выбора одного активного экспортёра при потере координатора.
14. Архив доказательств и отчёты
FR-110 ОБЯЗАТЕЛЬНО. Архив GNSS-треков, фотографий, документов и заметок операторов, связанных с экспедицией и активацией.
FR-111 ОБЯЗАТЕЛЬНО. Для вложений фиксировать оригинальное имя, размер, SHA-256, источник, UTC импорта, метаданные геопривязки; оригиналы неизменяемы.
FR-112 ОБЯЗАТЕЛЬНО. Автоматический отчёт по экспедиции: районы, интервалы UTC, операторы, оборудование, QSO, статистика, трек, доказательства, результаты проверки, список файлов и хешей.
FR-113 ОБЯЗАТЕЛЬНО. Выгрузка пакета ZIP с журналом, отчётом, треками и подтверждениями; отчёт в Markdown и PDF предусмотрен концепцией.
FR-114 ПРЕДЛАГАЕТСЯ. Манифест архива с версиями схем, контрольными суммами и проверкой после упаковки.
15. Резервное копирование и восстановление
FR-120 ОБЯЗАТЕЛЬНО. Локальные копии, USB, сетевое хранилище и облачная синхронизация/резервирование через отдельные направления.
FR-121 ОБЯЗАТЕЛЬНО. Независимое расписание/политика хранения, повтор при недоступности, состояние и журнал по направлению; резервирование не блокирует QSO.
FR-122 ОБЯЗАТЕЛЬНО. Согласованные SQLite-снимки, включая эффекты WAL, а также все внешние вложения, конфигурации и состояния отправки.
FR-123 ОБЯЗАТЕЛЬНО. Проверка целостности архивов, пробное восстановление, восстановление из выбранной точки с предупреждением о последствиях.
FR-124 ПРЕДЛАГАЕТСЯ. Шифрование резервных копий, хранение секретов отдельно, ротация и регулярное восстановление на тестовой базе.
16. Статистика
FR-130 ОБЯЗАТЕЛЬНО. Число QSO, текущий/средний/максимальный QSO/час, график активности, распределение по операторам, трансиверам, RDA, диапазонам, MODE/SUBMODE, DUPE, состояниям синхронизации.
FR-131 ОБЯЗАТЕЛЬНО. Пересчёт при изменении/слиянии журнала, фильтрация по UTC/экспедиции/активации; одна физическая связь в общем числе QSO учитывается один раз.
FR-132 ОБЯЗАТЕЛЬНО. При нескольких RDA одно QSO может входить в статистику нескольких районов; показывать предупреждение, что сумма по районам может превосходить общий итог.
17. GUI, управление и локализация
FR-140 ОБЯЗАТЕЛЬНО. PySide6 / Qt6, нативное приложение; Qt QMainWindow с вкладками и перемещаемыми/отсоединяемыми панелями QDockWidget.
FR-141 ОБЯЗАТЕЛЬНО. Сохранение компоновки для оператора и рабочего места, поддержка нескольких экранов и восстановление стандартной компоновки.
FR-142 ОБЯЗАТЕЛЬНО. Светлая и тёмная темы, ручное и автоматическое переключение без перезапуска, единое оформление всех панелей.
FR-143 ОБЯЗАТЕЛЬНО. Русский и английский интерфейсы, расширяемые Qt Linguist-переводы; переключение языка без перезапуска. Стандартизованные технические коды не переводить.
FR-144 ОБЯЗАТЕЛЬНО. Настраиваемые горячие клавиши с независимыми профилями SSB, CW, Digital; обработка конфликтов и приоритет клавиатурного ввода позывного.
FR-145 ОБЯЗАТЕЛЬНО. Визуальные уведомления и настраиваемые звуковые сигналы, без необходимости полноценного центра уведомлений. Отдельный аудиовыход; подавление уведомлений при Voice TX.
FR-146 ОБЯЗАТЕЛЬНО. Собственные диалоговые окна в стиле приложения; предупреждения об ошибках и подтверждения не должны зависеть от системного браузера.
FR-147 ОБЯЗАТЕЛЬНО. QSO-таблица занимает доступную высоту, её заголовок не прокручивается вместе с записями.
18. Справка и диагностика
FR-150 ОБЯЗАТЕЛЬНО. Полная офлайн-справка на русском и английском, локальный поиск, контекстные кнопки «?».
FR-151 ОБЯЗАТЕЛЬНО. Мастера настройки CAT, GNSS, CW, Voice, сети и внешних сервисов; обнаружение → настройка → проверка → сохранение.
FR-152 ОБЯЗАТЕЛЬНО. Диагностические проверки SQLite, оборудования, аудио, сети, синхронизации и адаптеров; экспорт Markdown/ZIP отчёта.
FR-153 ОБЯЗАТЕЛЬНО. Удалять или маскировать из диагностического экспорта токены, пароли, ключи, секреты и при необходимости персональные данные.
19. Платформы, производительность и дистрибуция
FR-160 ОБЯЗАТЕЛЬНО. Общая кодовая база для x86-64/amd64, ARM64/aarch64 и ARM32/armhf с учётом ограничений доступных сборок Qt.
FR-161 ОБЯЗАТЕЛЬНО. Адаптивный профиль Performance/Balanced/Lightweight; основные функции QSO, CAT, GNSS, CW/Voice, синхронизации и резервирования сохраняются, тяжёлые графические эффекты и картография могут упрощаться.
FR-162 ОБЯЗАТЕЛЬНО. Пакеты .deb и AppImage, где формат технически поддерживается для конкретной архитектуры; исходная целевая сборка Debian 12 amd64.
FR-163 ОБЯЗАТЕЛЬНО. Автоматическая проверка обновлений, запуск обновления из GUI, проверка происхождения релиза и целостности, резервирование перед миграциями, сохранение пользовательских данных.
FR-164 ПРЕДЛАГАЕТСЯ. Каналы Stable/Beta/Development; для .deb использовать штатный пакетный механизм, для AppImage — контролируемую атомарную замену.
FR-165 ТРЕБУЕТ УТОЧНЕНИЯ. Доступность/лицензия PySide6/Qt WebEngine на ARM32 и возможность сборки AppImage для ARM; нельзя гарантировать идентичные бинарные артефакты на всех архитектурах.
20. Требования к надёжности, безопасности и конфиденциальности
NFR-001. Все поля дат/времени QSO, синхронизации, аудита, GNSS и отчётов хранятся и показываются в UTC; точность и источник времени фиксируются там, где это критично.
NFR-002. Регистрация QSO считается успешной только после подтверждённого коммита на локальное устойчивое хранилище.
NFR-003. Любые сетевые и аппаратные операции выполняются вне GUI-потока; недоступность внешнего сервиса не приводит к зависанию ввода.
NFR-004. Аудит изменения QSO, районов, операторов и состояний доставки должен допускать восстановление происхождения данных.
NFR-005. Пароли/токены не записываются в обычные логи и диагностические архивы; хранение секретов предполагается в системном хранилище либо с эквивалентной защитой.
NFR-006. Сетевой обмен рабочих мест должен быть аутентифицирован и защищён; неверный/несовместимый клиент не может бесконтрольно менять журнал.
NFR-007. Команды PTT/CW/Voice должны иметь явные и проверяемые механизмы остановки; падение GUI не должно оставлять передатчик бесконечно активным (требует испытаний с конкретным аппаратным интерфейсом).
NFR-008. Требования к измеримой производительности, допустимой задержке GUI, периодам резервирования и целевой продолжительности работы без отказа фиксируются на этапе прототипирования и нагрузочного тестирования, а не задаются произвольно.
NFR-009. Все настройки и базы мигрируются версионированно; восстановление и совместимость экспорта проверяются тестами.
21. Предлагаемая модульная архитектура
app-gui: Qt6, док-панели, окна, локализация, темы, горячие клавиши.qso-core: валидация, ADIF, UUID, версии, DUPE, QSO-транзакции.expedition-core: операторы, рабочие места, RDA-активации и история.storage: SQLite, миграции, транзакции, контроль целостности.sync: LAN/Wi-Fi, очередь событий, конфликты, объединение.publish: TNXQSO, RDA LogFlow и остальные независимые сервисные адаптеры.digital: WSJT-X, JTDX, MSHV, FLDIGI, UDP/TCP и ADIF.rig: Hamlib и профили трансиверов.gnss: NMEA/gpsd/TCP/UDP/ручной ввод, треки.geo: RDA-геометрия, карта, координатные сопоставления, GPX/KML.keyers: CW/Winkeyer, Voice/PTT и аудиомаршрутизация.callsigns: локальный индекс, QRZ/HamQTH, кеш.evidence: вложения, SHA-256, отчёты и экспортный манифест.backup: снимки, удалённые направления, восстановление.analytics: агрегаты и графики.support: офлайн-справка, диагностика, обновления.
Архитектурная граница: все модули работают через устойчивые внутренние интерфейсы и не получают прямой произвольный доступ к чужим таблицам SQLite. Для оборудования — асинхронные драйверы; для внешних систем — адаптеры со схемой возможностей.
22. Проектная модель данных
Таблица/агрегат | Основные поля и связи |
|---|---|
|
|
|
|
|
|
|
|
|
|
| activation_id, rda_code (составной ключ) |
|
|
|
|
| qso_id, rda_code, activation_id; много районов на QSO |
| qso_id, raw ADIF keys/values/type info |
|
|
| qso_id, fix_id nullable, snapshot, freshness/validity status |
| expedition, station, timestamps, geometry, quality |
|
|
| event_id, qso_id, revision, origin, UTC, change, actor |
| peer ID, last applied event, acknowledgements |
| service, qso_id, external_id, status, attempts, idempotency_key |
| callsign, source, payload, expiry, provenance |
| backup_id, destination, UTC, items, hashes, verified |
| versioned settings scoped to user/station/expedition |
Инварианты: UUID глобально уникальны; QSO принадлежат одной экспедиции; состояние активации на момент QSO явно зафиксировано; один QSO не дублируется из-за множества RDA; каждое изменение имеет прослеживаемое происхождение.
23. Потоки и состояния
23.1. Регистрация QSO
- Принять ввод либо событие цифрового адаптера.
- Нормализовать позывной, частоту, MODE/SUBMODE и UTC; сохранить оригинальные значения при необходимости.
- Определить рабочее место, оператора и подтверждённую активацию.
- Получить актуальный GNSS-снимок либо явно зарегистрировать отсутствие достоверного местоположения.
- Проверить DUPE по выбранному профилю; показать предупреждение, не блокируя допустимую запись.
- В одной транзакции создать QSO, привязки RDA, геоснимок и событие изменений.
- После commit обновить GUI/статистику и поставить событие в очереди синхронизации/публикации.
23.2. Слияние журналов
- Проверить соответствие идентификаторов экспедиции и версий схемы.
- Получить события с идентификаторами и контрольными суммами.
- Пропустить уже применённые события.
- Применить непротиворечивые события транзакционно.
- Сохранить конфликтующие ветви для согласования операторами.
- Пересчитать DUPE/статистику, сформировать отчёт.
- Подтвердить курсор синхронизации только после устойчивого commit.
23.3. Публикация
Состояния сервисной записи: pending → sending → acknowledged, альтернативно retry_wait, unknown_outcome, needs_review, failed_permanent, cancelled. Переход к acknowledged разрешён только при проверенном ответе соответствующего сервиса.
24. Этапы разработки и критерии выхода
Этап | Состав | Результат |
|---|---|---|
E0 | Проверка API/геоданных/ARM32, фиксация тестовых устройств | Реестр совместимости и рисков |
E1 | Каркас PySide6, SQLite, экспедиции/активации, QSO, ADIF | Полностью локальный GUI-журнал |
E2 | Настраиваемая таблица, ввод, DUPE, профили, локализация, темы | Пригодность для полевой ручной работы |
E3 | Hamlib, GNSS, треки, переключение RDA | Работа с реальным оборудованием |
E4 | WSJT-X, JTDX, MSHV, FLDIGI | Регистрация QSO из цифровых программ |
E5 | LAN-синхронизация, offline merge, разрешение конфликтов | Многопользовательская автономность |
E6 | Подтверждения, карта/offline, отчёты, статистика | Полный цикл экспедиции |
E7 | CW/Voice, PTT, профили макросов | Экспедиционный эфирный функционал |
E8 | Сервисные адаптеры, доставка/очереди, справочники | Внешние интеграции по фактическим API |
E9 | Резервирование, диагностика, мастера, обновления | Эксплуатационная готовность |
E10 | ARM64/ARM32, .deb/AppImage, нагрузочные и аварийные испытания | Выпуск стабильной сборки |
Этапы E3–E9 могут разрабатываться параллельно после стабилизации схемы событий и данных. План — ориентир, не обещание сроков.
25. Матрица приёмочных испытаний
ID | Проверка | Условие успешности |
|---|---|---|
AT-01 | QSO без интернета | QSO сохраняется локально, UUID и UTC не теряются |
AT-02 | Выключение сети в момент ввода | GUI не зависает, commit завершается либо выдаёт явную ошибку |
AT-03 | Последовательные RDA | QSO до/после переключения связаны с правильными интервалами |
AT-04 | Два района одновременно | Один QSO в базе, две RDA-привязки, общая статистика +1 |
AT-05 | Потеря GNSS | QSO сохраняется со статусом «координаты недоступны» |
AT-06 | GNSS сменил район | Без подтверждения активная активация не меняется |
AT-07 | Импорт ADIF с неизвестными тегами | При обратном экспорте незнакомые данные сохранены |
AT-08 | Дубли события UDP | Одна регистрация QSO при повторной доставке того же ID |
AT-09 | Реальный повтор QSO | Вторая запись допустима, отображается предупреждение DUPE |
AT-10 | Две станции без LAN | Независимо регистрируют QSO и позже сливают без потерь |
AT-11 | Повторное объединение | Итог QSO и версии не меняются |
AT-12 | Конфликт правок | Обе версии доступны для согласования, авторство сохранено |
AT-13 | Публикация при отказе сервиса | Другие очереди продолжают работу, ошибка зафиксирована |
AT-14 | Потеря CAT | Поле частоты доступно для ручного редактирования |
AT-15 | Работа Voice Auto CQ | PTT включается/выключается, Esc прекращает цикл |
AT-16 | CW на Winkeyer | Макросы, WPM и аварийная отмена проверены на тестовом стенде |
AT-17 | Резервное копирование с WAL | Снимок проходит проверку и восстанавливает журнал/вложения |
AT-18 | Отказ USB/NAS/облака | Регистрация QSO не блокируется |
AT-19 | Карта офлайн | Границы и сохранённый трек доступны без интернета |
AT-20 | Тема/язык/компоновка | Смена без перезапуска, настройки переживают запуск |
AT-21 | Пакет обновления с неверной подписью | Установка отклонена, текущая версия не повреждена |
AT-22 | Экспорт диагностики | Пароли, токены и ключи отсутствуют |
AT-23 | Облегчённый режим | Основные функции журнала доступны на целевой ARM-сборке |
AT-24 | Отключение питания | После перезапуска база целостна; подтверждённые QSO не исчезли в пределах гарантированной аппаратной устойчивости |
26. Открытые вопросы и риски (не утверждены)
Приоритет | Вопрос | Причина |
|---|---|---|
Критический | Получить проверенный набор границ RDA и действующие правила границы | Нельзя автоматически определить правомерность нескольких районов без надёжных данных |
Критический | Проверить протокол TNXQSO и остальные сервисные API | Реализуемость двусторонней публикации зависит от доступных методов |
Критический | Протоколы/версии MSHV, JTDX, FLDIGI, WSJT-X | Возможности передачи данных различаются |
Высокий | Согласовать идентичность экспедиции и станции при офлайн-объединении | Нужно исключить случайное смешивание независимых экспедиций |
Высокий | Выбрать стратегию split-brain координатора/отправителя | Риск двойной публикации |
Высокий | Реальные целевые ARM32 ОС/Qt/Python окружения | Не вся экосистема Qt6 доступна на ARM32 |
Высокий | Политика восстановления/ретенции и шифрования бэкапов | Влияет на приватность и сохранность |
Средний | Конкретные горячие клавиши, поля Quick QSO и RST | Требуются пользовательские испытания |
Средний | Лицензии карт/позывных и кеширования | Зависит от источников данных |
Средний | Порядок привязки многоканальных GNSS-источников к операторам | Требует тестовых сценариев |
Средний | Минимальные количественные KPI по задержкам и объёмам | Для объективной приёмки нужны измеримые границы |
Средний | Официальное имя/визуальная идентичность продукта и лицензия исходного кода | Решается перед публичным релизом |
27. Трассируемость решения
Все ключевые функции отражены в требованиях: многопользовательская работа (FR-001/100+); RDA и границы (FR-003/010+/050+); Hamlib (FR-040+); GNSS и карты (FR-050+); WSJT-X/JTDX/MSHV/FLDIGI (FR-060+); CW/Voice (FR-070+); позывные (FR-080+); онлайн-сервисы (FR-090+); архив доказательств (FR-110+); резервирование (FR-120+); статистика (FR-130+); GUI/темы/языки/клавиши (FR-140+); справка (FR-150+); архитектуры/дистрибуция (FR-160+).
28. Критерии готовности ТЗ к утверждению
Документ станет базовым ТЗ разработки после: (1) разрешения критических открытых вопросов; (2) фиксации версий и нормативных источников RDA/ADIF и сетевых API; (3) определения проверяемых характеристик производительности; (4) принятия архитектуры конфликтов и публикации; (5) согласования приемочного стенда и матрицы устройств. Нереализуемые внешние функции должны быть честно ограничены подтверждёнными возможностями протоколов, а не заменены имитациями.
Конец документа.