lawref.applicability
Машина применимости редакции по lifecycle-статусам §31 (D1).
v1 резолюции §30.2 (resolver.resolve_dynamic_references) читает ровно один
статус — in_force. Этого хватало корпусу, но не хватает ни решению
конституционного суда о неконституционности акта («прекращает действие со дня
решения» — Конституция РК ст. 75), ни смене самой конституции (переходные
положения ст. 94–96), ни приостановлению действия акта. Здесь статусы §31
получают семантику применимости, а resolver переключается на неё отдельным
шагом — файл резолвера сейчас в правке параллельной полосы, и модуль написан
самодостаточным именно поэтому.
Классы статусов (§31: Core не hard-code-ит последствия ВСЕХ labels, но
in_force имеет стандартный смысл; здесь фиксируется минимальный набор,
остальные статусы применимость не меняют):
- открывающие
in_force,restored— редакция применима с момента события и до конца его extent; - приостанавливающие
suspended— не применима на протяжении extent; - закрывающие
repealed,expired,invalidated— не применима с момента события и НЕОБРАТИМО: открывающее событие после закрывающего есть дефект данных (LDC-E5302), а не «воскрешение» редакции; - нейтральные
adopted,published— фиксируют историю, применимость не меняют (в корпусеadoptedвстречается вместе сin_force).
invalidated реализует ровно ex nunc («со дня решения»): признание
неконституционным задаётся событием с началом в дату решения. Ex tunc
(недействительность с момента принятия) в v1 НЕ выражается и не
подразумевается: для неё нужен отдельный статус со своей семантикой, и
молчаливо трактовать invalidated как ретроактивный — значило бы решать за
правопорядок.
Attributes
| Name | Description |
|---|---|
CLOSING | No description. |
LIFECYCLE_INCONSISTENT_CODE | No description. |
OPENING | No description. |
SUSPENDING | No description. |
TIMELESS_LIFECYCLE_CODE | No description. |
Functions
| Name | Description |
|---|---|
applicable_editions | Редакции источника, применимые на момент, + диагностики данных. |
edition_state | Состояние редакции на момент: применима, приостановлена, закрыта или |
is_applicable | Короткая форма: применима ли редакция на момент (без деталей). |
lifecycle_diagnostics | Дефекты данных lifecycle: открывающее событие после закрывающего. |
CLOSINGattributemodule attribute#
CLOSING = ('repealed', 'expired', 'invalidated')LIFECYCLE_INCONSISTENT_CODEattributemodule attribute#
LIFECYCLE_INCONSISTENT_CODE = 'LDC-E5302'OPENINGattributemodule attribute#
OPENING = ('in_force', 'restored')SUSPENDINGattributemodule attribute#
SUSPENDING = ('suspended')TIMELESS_LIFECYCLE_CODEattributemodule attribute#
TIMELESS_LIFECYCLE_CODE = 'LDC-E5308'applicable_editionsfunction#
def applicable_editions(nodes: list[dict], work: str, legal_time: str) -> tuple[list[str], list[dict]]Редакции источника, применимые на момент, + диагностики данных.
Замена v1-фильтра resolve_dynamic_references (тот считал применимой
любую редакцию с покрывающим in_force-событием и не видел ни
прекращения, ни приостановления). На данных из одних лишь in_force
и adopted-событий ответ совпадает с v1 — проверяется воротами.
edition_statefunction#
def edition_state(edition: dict, legal_time: str) -> dictСостояние редакции на момент: применима, приостановлена, закрыта или ещё не открыта.
Возвращает {"state": …, "since": …, "status": …, "mismatched": …}, где
state — applicable | suspended | closed | not_yet, mismatched —
граница lifecycle с granularity, отличной от legal_time (§82/§2.15:
сравнение Date-vs-Instant требует TemporalResolutionPolicy, которой в v1
нет; вызывающий обязан отклонить резолюцию как ambiguous).
Правило: состояние определяет ПОСЛЕДНЕЕ наступившее событие, extent которого покрывает момент; открывающее событие с истёкшим extent применимость не даёт (редакция действовала, но перестала).
is_applicablefunction#
def is_applicable(edition: dict, legal_time: str) -> boolКороткая форма: применима ли редакция на момент (без деталей).
lifecycle_diagnosticsfunction#
def lifecycle_diagnostics(edition: dict) -> list[dict]Дефекты данных lifecycle: открывающее событие после закрывающего.
Закрывающие статусы необратимы (§31: consolidated/новая редакция — это НОВЫЙ edition с provenance chain, а не оживление старого).
Documentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.