69 lines
5.9 KiB
Python
69 lines
5.9 KiB
Python
"""Immutable v1 search catalogs."""
|
||
|
||
DOCUMENT_TYPES = {
|
||
"constitution": ("Конституция", "Конституция"), "constitutional_law": ("Конституционный Закон", "Конституциалык Мыйзам"), "code": ("Кодекс", "Кодекс"), "law": ("Закон", "Мыйзам"), "decree": ("Указ", "Жарлык"), "resolution": ("Постановление", "Токтом"), "order": ("Распоряжение", "Распоряжение"), "instruction": ("Инструкция", "Инструкция"), "rules": ("Правила", "Правила"), "procedure": ("Порядок", "Порядок"), "provision": ("Положение", "Жобо"), "regulation": ("Регламент", "Регламент"), "charter": ("Устав", "Жобо (Устав)"), "program": ("Программа", "Программа"), "plan": ("План", "План"), "strategy": ("Стратегия", "Стратегия"), "concept": ("Концепция", "Концепция"), "doctrine": ("Доктрина", "Доктрина"), "agreement": ("Соглашение", "Соглашение"), "declaration": ("Декларация", "Декларация"), "registry": ("Реестр", "Реестр"), "norms": ("Нормативы", "Нормативы"), "model": ("Модель", "Модель"), "matrix": ("Матрица", "Матрица"), "study": ("Исследование", "Исследование"), "report": ("Доклад", "Доклад"), "principles": ("Основные принципы", "Основные принципы"), "unspecified": ("Не указан", "Көрсөтүлгөн эмес"),
|
||
}
|
||
STATUSES = {"active": ("Действует", "Күчүндө"), "repealed": ("Утратил силу", "Күчүн жоготту"), "unspecified": ("Не указан", "Көрсөтүлгөн эмес")}
|
||
AUTHORITIES = {"president": ("Президент", "Президент"), "parliament": ("Органы законодательной власти", "Мыйзам чыгаруу бийлик органдары"), "cabinet": ("Правительство и Кабинет Министров", "Өкмөт жана Министрлер Кабинети"), "ministries_and_committees": ("Министерства и государственные комитеты", "Министрликтер жана мамлекеттик комитеттер"), "administrative_agencies": ("Административные ведомства", "Административдик ведомстволор"), "national_bank": ("Национальный банк", "Улуттук банк"), "other_state_bodies": ("Иные государственные органы", "Башка мамлекеттик органдар"), "local_representative_bodies": ("Представительные органы местного самоуправления", "Жергиликтүү өз алдынча башкаруунун өкүлчүлүктүү органдары"), "other": ("Прочие органы", "Башка органдар")}
|
||
LEGAL_FORCE_LEVELS = {
|
||
"constitutional": ("Конституционный уровень", "Конституциялык деңгээл"),
|
||
"legislative": ("Законодательный уровень", "Мыйзам деңгээли"),
|
||
"subordinate": ("Подзаконный уровень", "Мыйзам алдындагы деңгээл"),
|
||
}
|
||
LEGAL_FORCE_BY_DOCUMENT_TYPE = {
|
||
"constitution": "constitutional",
|
||
"constitutional_law": "constitutional",
|
||
"code": "legislative",
|
||
"law": "legislative",
|
||
"decree": "subordinate",
|
||
"resolution": "subordinate",
|
||
}
|
||
CATALOGS = {"document_type": DOCUMENT_TYPES, "status": STATUSES, "authority": AUTHORITIES, "legal_force": LEGAL_FORCE_LEVELS}
|
||
|
||
|
||
def labels(category: str, code: str) -> dict[str, str]:
|
||
try:
|
||
ru, ky = CATALOGS[category][code]
|
||
except KeyError as error:
|
||
raise ValueError(f"Unknown {category} catalog code: {code}") from error
|
||
return {"ru": ru, "ky": ky}
|
||
|
||
|
||
def source_code(category: str, value: dict | None) -> str:
|
||
pair = ((value or {}).get("ru"), (value or {}).get("ky"))
|
||
if pair == (None, None):
|
||
return "unspecified"
|
||
for code, expected in CATALOGS[category].items():
|
||
if pair == expected or category == "document_type" and code == "provision" and pair == ("Положение", "Положение"):
|
||
return code
|
||
raise ValueError(f"Unmapped {category} catalog value: {pair!r}")
|
||
|
||
|
||
def authority_codes(paths: list[dict]) -> list[str]:
|
||
codes = set()
|
||
for path in paths:
|
||
text = " ".join(path.get("ru", []) + path.get("ky", [])).lower()
|
||
if "президент" in text:
|
||
codes.add("president")
|
||
elif "жогорку кенеш" in text or "верховный совет" in text or "мыйзам чыгаруу" in text:
|
||
codes.add("parliament")
|
||
elif "кабинет министров" in text or "правительство" in text or "өкмөт" in text:
|
||
codes.add("cabinet")
|
||
elif "министер" in text or "мамлекеттик комитет" in text:
|
||
codes.add("ministries_and_committees")
|
||
elif "административ" in text:
|
||
codes.add("administrative_agencies")
|
||
elif "национальн" in text and "банк" in text or "улуттук банк" in text:
|
||
codes.add("national_bank")
|
||
elif "кенеш" in text or "кеңеш" in text or "айыл" in text or "местного самоуправления" in text:
|
||
codes.add("local_representative_bodies")
|
||
elif "иные государственные" in text or "башка мамлекеттик" in text:
|
||
codes.add("other_state_bodies")
|
||
else:
|
||
codes.add("other")
|
||
return sorted(codes) or ["other"]
|
||
|
||
|
||
def legal_force_code(document_type: dict | None) -> str | None:
|
||
return LEGAL_FORCE_BY_DOCUMENT_TYPE.get(source_code("document_type", document_type))
|