Skip to content

lawref.delegation

Делегационная цепочка: основание подзаконного акта → power-норма родителя.

Ступень 2 связей между актами (DECISION-0010). «Акт издан в пределах компетенции, данной законом» — не семантическое следование (то неразрешимо статически и живёт в proof graph §179–187), а КОНЕЧНАЯ проверка цепочки:

  1. подчинённый акт объявляет основания — id power-норм родительского пакета («издан на основании ст. X закона Y»); их бывает несколько, и каждое проверяется отдельно (DECISION-0046);
  2. основание разрешается: узел существует и действительно power (§105.1 п. 4, payload норм-шаблона §127);
  3. power действовала на дату принятия подчинённого акта: хотя бы одна редакция родителя применима на эту дату — машина применимости D1 (applicability.edition_state, статусы §31) переиспользуется, а не дублируется; её диагностики lifecycle (LDC-E5302) пробрасываются;
  4. издатель совпадает с holder power.

Как и entrenchment (D4), объявление основания — ДАННЫЕ пакета, а не знание компилятора. С DECISION-0042 оно живёт в самом CLIR (§27.1 basis), а параметр CLI остался переопределением для гипотез.

Статика сознательно НЕ проверяет:

  • validWhen/exercise power — условия осуществления компетенции проверяет движок при вычислении (§127–§128);
  • смысловое соответствие предмета: сверяется ВКЛЮЧЕНИЕ двух объявленных перечислений (§27.1 regulates ⊆ §127 subject, DECISION-0043), а не «полномочие охватывает эту норму вообще» — последнее §105.1 запрещает;
  • параметризованный holder (var) — статически не сверяем, сверка ложится на validWhen при exercise. Раньше этот пропуск был МОЛЧАЛИВЫМ и покрывал куда больше объявленного: сверялась ровно одна форма entity_ref, которой в корпусе нет ни одной — поверхностная константа .law лоуверится в const_ref, и на ЕДИНСТВЕННОЙ форме, что порождает компилятор, проверка издателя проходила всегда. Сегодня поимённые формы сверяются обе, а несверяемая форма называет себя предупреждением LDC-W5301.

Коды §199, диапазон E5 (source/provenance), продолжение за E5301 (D4) и E5302 (D1).

Attributes

NameDescription
BASIS_UNRESOLVED_CODENo description.
CROSS_PACKAGE_CODENo description.
EDITION_NOT_PINNED_CODENo description.
HOLDER_NOT_COMPARABLE_CODENo description.
NAMED_HOLDER_KINDSNo description.
NO_BASIS_CODENo description.
ORGAN_MISMATCH_CODENo description.
POWER_NOT_IN_FORCE_CODENo description.
SUBJECT_EXCEEDED_CODENo description.
SUBJECT_NOT_DECLARED_CODENo description.

Functions

NameDescription
adoption_dateДата принятия акта: самое раннее adopted-событие его редакций (§31).
check_delegationЦепочка против ОДНОГО родителя — частный случай check_delegation_all.
check_delegation_allПроверка цепочки против НЕСКОЛЬКИХ родителей; [] — цепочка цела.
declared_basesОснования, объявленные САМИМ актом (§27.1 basis, DECISION-0042).
declared_organИздатель из §27.1 authority: (id, форма-которую-не-прочесть).
declared_subjectsПредмет акта (§27.1 regulates, DECISION-0043) — что он регулирует.
evidence_gapПробел доказательства ли неприменимость родителя на дату adopted.
find_powerPower-норма по id основания: (узел, None) либо (None, причина).

BASIS_UNRESOLVED_CODEattributemodule attribute#

BASIS_UNRESOLVED_CODE = 'LDC-E5304'

CROSS_PACKAGE_CODEattributemodule attribute#

CROSS_PACKAGE_CODE = 'LDC-W5304'

EDITION_NOT_PINNED_CODEattributemodule attribute#

EDITION_NOT_PINNED_CODE = 'LDC-W5303'

HOLDER_NOT_COMPARABLE_CODEattributemodule attribute#

HOLDER_NOT_COMPARABLE_CODE = 'LDC-W5301'

NAMED_HOLDER_KINDSattributemodule attribute#

NAMED_HOLDER_KINDS = ('entity_ref', 'const_ref')

NO_BASIS_CODEattributemodule attribute#

NO_BASIS_CODE = 'LDC-E5303'

ORGAN_MISMATCH_CODEattributemodule attribute#

ORGAN_MISMATCH_CODE = 'LDC-E5306'

POWER_NOT_IN_FORCE_CODEattributemodule attribute#

POWER_NOT_IN_FORCE_CODE = 'LDC-E5305'

SUBJECT_EXCEEDED_CODEattributemodule attribute#

SUBJECT_EXCEEDED_CODE = 'LDC-E5307'

SUBJECT_NOT_DECLARED_CODEattributemodule attribute#

SUBJECT_NOT_DECLARED_CODE = 'LDC-W5302'

adoption_datefunction#

def adoption_date(nodes: list[dict]) -> str | None

Дата принятия акта: самое раннее adopted-событие его редакций (§31).

У работы одна дата принятия; несколько adopted у разных редакций — следствие консолидаций, принятие акта фиксирует самое раннее.

check_delegationfunction#

def check_delegation(sub_nodes: list[dict], parent_nodes: list[dict], *, basis: str | list[str] | None = None, organ: str | None = None, require_basis: bool = False) -> list[dict]

Цепочка против ОДНОГО родителя — частный случай check_delegation_all.

Форма сохранена: у неё есть потребители (CLI, ворота, MCP), и вызов с одним родителем остаётся самым частым.

check_delegation_allfunction#

def check_delegation_all(sub_nodes: list[dict], parents: list[list[dict]], *, basis: str | list[str] | None = None, organ: str | None = None, require_basis: bool = False) -> list[dict]

Проверка цепочки против НЕСКОЛЬКИХ родителей; [] — цепочка цела.

basis/organ — ПЕРЕОПРЕДЕЛЕНИЕ: по умолчанию и то, и другое берётся из самого пакета (§27.1 basis/authority, DECISION-0042), а параметр нужен там, где акт ещё не объявил основание сам либо проверяется гипотеза «а если бы издал другой орган». Приём тот же, что у --protected D4.

Несколько родителей (DECISION-0048) закрывают границу, объявленную DECISION-0047 §5: пока цепочка брала одного родителя за вызов, половина предмета акта на двух основаниях всегда оставалась несопоставимой, и предметная компетенция не устанавливалась НИ ОДНИМ вызовом. Каждое основание адресуется родителю по пространству имён, звенья «дата» и «издатель» считаются у своего родителя, а предмет сверяется против ОБЪЕДИНЕНИЯ предметов всех разрешившихся полномочий — то есть против всей делегации, а не её половины.

Пустой список НЕ означает правомерности акта в целом: соблюдение процедуры издания и условий validWhen проверяется отдельно (§127–128, часть XXI) — здесь только само звено «основание → действовавшая компетенция → издатель».

declared_basesfunction#

def declared_bases(nodes: list[dict]) -> list[str]

Основания, объявленные САМИМ актом (§27.1 basis, DECISION-0042).

Список, а не одно значение (DECISION-0046): приказ V2000021744 издан «в соответствии с подпунктом 62) статьи 7 Кодекса … И пунктом 1 статьи 34 Закона …», и оснований у акта столько, сколько он назвал. Пока поле было одиночным, второе основание приходилось выбрасывать — то есть терять половину делегации молча.

До переноса поля в CLIR основание жило только параметром CLI: знание о том, на чём акт стоит, не ездило вместе с пакетом. Ровно один source_work — то же ограничение v1, что у темпорального звена ниже.

declared_organfunction#

def declared_organ(nodes: list[dict]) -> tuple[str | None, str | None]

Издатель из §27.1 authority: (id, форма-которую-не-прочесть).

Возвращает id, если authority назван поимённо (entity_ref — форма самого §27.1, const_ref — во что лоуверится константа поверхности), и имя нечитаемой формы иначе. Второй компонент существует, чтобы «объявлено, но не прочитано» не выглядело как «не объявлено».

declared_subjectsfunction#

def declared_subjects(nodes: list[dict]) -> list[str]

Предмет акта (§27.1 regulates, DECISION-0043) — что он регулирует.

evidence_gapfunction#

def evidence_gap(parent_nodes: list[dict], adopted: str) -> bool

Пробел доказательства ли неприменимость родителя на дату adopted.

Различаются ДВА случая, которые до 28.08.2026 схлопывались в один LDC-E5305 с формулировкой «издание вне компетенции»:

  • родитель на эту дату действительно не действовал (ещё не введён либо уже прекращён) — вывод о компетенции, ошибка;
  • родитель существовал, но корпус закрепил только ПОЗДНИЕ его редакции — сказать о компетенции нечего, и утверждать ultra vires значит называть неправомерным то, чего проверка не дочитала.

Признак второго: акт принят ПОСЛЕ принятия родителя, но раньше самого раннего открывающего события §31 всех его закреплённых редакций. Именно так выглядит корпус, пиннящий действующую консолидацию: у Кодекса о здоровье adopted @2020-07-07 при in_force с 2026 года.

find_powerfunction#

def find_power(nodes: list[dict], basis: str) -> tuple[dict | None, str | None]

Power-норма по id основания: (узел, None) либо (None, причина).

Power распознаётся по payload.kind == "power" (форма §127, как в T018/T019); modality — подтверждающий признак, не замена payload.

Documentation for Arxo. Writings — blog.arxo.io.

Anonymous visit counts on stats.arxo.io, no cookies.