Skip to content

Переход с универсальной записи на протоколы

Решение владельца от 22.09.2026: форму протокола задаёт контракт, а не компания. Семейство records устаревает 2026-12-31; до этой даты судья помечает его инструменты состоянием degraded с причиной deprecated (инструмент остаётся видим модели), с этой даты — excluded. Дату судья берёт из слепка: сервер, выпущенный до заката, о ней не знает; если сервер назвал в _meta более раннюю дату, действует она.

Роли первой волны → поля протокола

БылоСтало
роль поля titletitle
роль поля meeting_datemeeting_date
роль поля source_urlsource_url
роль поля participantsparticipant_ids
роль поля organizerorganizer_id
роль поля statusstatus
роль поля agendaagenda
роль поля bodybody
роль варианта статуса draftзначение status = draft
роль варианта статуса doneзначение status = done
роль варианта статуса no_meetingзначение status = no_meeting

Преемники

УстареваетЗаменаПояснение
norm_record_targetsцелей больше нет: право на протоколы — по инструменту, а не по списку баз
norm_record_schemaсхему компания не объявляет: ядро полей протокола зафиксировано в слепке
norm_record_findnorm_protocols_listсписок с фильтром meeting_ids заменяет пакетную проверку «есть ли запись»
norm_record_hintnorm_protocol_typesподсказки едут в справочнике типов встреч одним ответом
norm_record_upsertnorm_protocol_upsertзапись протокола ядром полей контракта, поведение записи сохранено

Поля потребителя первой волны

Каждое поле, которое агент протоколов читал из семейства records, либо получило место в семействе protocols, либо выведено с причиной. Пути проверяются тестом против слепка.

Поле потребителяПреемник или причина вывода
record_schema → metrics.resolvedTargetвыведено: целей записи больше нет: протокол пишется без выбора базы
record_schema → metrics.fields[].keyвыведено: состав полей задан слепком, читать его перед записью не нужно
record_schema → metrics.fields[].roleвыведено: роли полей заменены именованным ядром протокола
record_schema → metrics.fields[].options[].hasHintnorm_protocol_types /data/types/items/hint
record_schema → metrics.fields[].options[].orgUnitIdnorm_protocol_types /data/types/items/unit_id
record_schema → metrics.fields[].options[].membershipKindnorm_protocol_types /data/types/items/membership_kind
record_schema → metrics.fields[].fallbackHintOptionIdnorm_protocol_types /data/fallback_type_id
record_schema → metrics.skippedвыведено: схему компания не объявляет, пропускать нечего
record_schema → metrics.warningsвыведено: схему компания не объявляет, предупреждать о ней нечего
record_schema → metrics.error.codenorm_protocol_types /data/error/code
record_find → metrics.records[].existsnorm_protocols_list /data/protocols/items/meeting_id
record_find → metrics.records[].keynorm_protocols_list /data/protocols/items/meeting_id
record_field_hint → metrics.hint.textnorm_protocol_types /data/types/items/hint/text
record_field_hint → metrics.truncatednorm_protocol_types /data/types/items/truncated
record_upsert → metrics.urlnorm_protocol_upsert /data/url
record_upsert → metrics.error.codenorm_protocol_upsert /data/error/code
record_upsert → metrics.field (имя непринятого поля)norm_protocol_upsert /data/rejected_fields/items/key
record_upsert → metrics.allowedTargetsвыведено: целей записи больше нет
record_targets → metrics.targets[].idвыведено: целей записи больше нет; право на протоколы кабинет выводит из инструмента
record_targets → metrics.targets[].nameвыведено: целей записи больше нет
record_targets → metrics.error.codeвыведено: целей записи больше нет