Andrey Epifancev 412a322b9d chore(arm_statements): копия пакета arm-statements@6bce80b (#52)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 19:38:43 +04:00

73 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Предупреждения нормализации: перечень кодов и фабрика с уровнем из словаря."""
from collections.abc import Sequence
from enum import StrEnum
from typing import TYPE_CHECKING
from arm_statements.model import StatementWarning
if TYPE_CHECKING:
from arm_statements.loader import Rules
class WarningCode(StrEnum):
"""Коды предупреждений: по члену на код `rules/statement_warnings.yaml` (имя = значение)."""
JSON_FAILED = "JSON_FAILED"
TABLE_PARSE_ERROR = "TABLE_PARSE_ERROR"
TABLE_LOST = "TABLE_LOST"
TABLE_SKIPPED = "TABLE_SKIPPED"
CODE_COLUMN_NOT_FOUND = "CODE_COLUMN_NOT_FOUND"
SEGMENT_WITHOUT_CODES = "SEGMENT_WITHOUT_CODES"
SHEET_NOT_JOINED = "SHEET_NOT_JOINED"
CONTINUATION_TYPE_CONFLICT = "CONTINUATION_TYPE_CONFLICT"
SEGMENT_COLUMNS_MISMATCH = "SEGMENT_COLUMNS_MISMATCH"
COLUMN_WITHOUT_DATE = "COLUMN_WITHOUT_DATE"
COLUMN_DATE_UNCERTAIN = "COLUMN_DATE_UNCERTAIN"
HEADER_ROW_NOT_FOUND = "HEADER_ROW_NOT_FOUND"
TYPE_CONFLICT = "TYPE_CONFLICT"
NO_ORGANIZATION_NO_INN = "NO_ORGANIZATION_NO_INN"
PERIOD_UNKNOWN = "PERIOD_UNKNOWN"
REPORT_DATE_UNCERTAIN = "REPORT_DATE_UNCERTAIN"
XLSB_SCALE_SUSPECT = "XLSB_SCALE_SUSPECT"
INN_NOT_FOUND = "INN_NOT_FOUND"
INN_UNCERTAIN = "INN_UNCERTAIN"
ORGANIZATION_NOT_FOUND = "ORGANIZATION_NOT_FOUND"
ORGANIZATION_UNCERTAIN = "ORGANIZATION_UNCERTAIN"
REPORT_DATE_UNPARSED = "REPORT_DATE_UNPARSED"
UNITS_NOT_FOUND = "UNITS_NOT_FOUND"
FILE_TYPE_MISMATCH = "FILE_TYPE_MISMATCH"
XLS_NO_CODEPAGE = "XLS_NO_CODEPAGE"
COLUMN_SKIPPED = "COLUMN_SKIPPED"
FRACTIONAL_IN_THOUSANDS = "FRACTIONAL_IN_THOUSANDS"
XLSB_NO_FORMATS = "XLSB_NO_FORMATS"
NUMBER_FORMAT_UNPARSED = "NUMBER_FORMAT_UNPARSED"
VALUE_OUT_OF_RANGE = "VALUE_OUT_OF_RANGE"
SHEET_OTHER = "SHEET_OTHER"
ROW_SPLIT = "ROW_SPLIT"
def make_warning( # noqa: PLR0913 -- сигнатура задана публичным API пакета
code: str,
message: str,
rules: "Rules",
*,
line_refs: Sequence[str] = (),
column_index: int | None = None,
field: str | None = None,
locator: str | None = None,
) -> StatementWarning:
"""Предупреждение с уровнем из словаря; неизвестный код — `KeyError` (выдуманный код не создаётся)."""
rule = rules.warnings.get(code)
if rule is None:
raise KeyError(f"код предупреждения {code} не задан в statement_warnings.yaml")
return StatementWarning(
code=str(code),
severity=rule.severity,
message=message,
line_refs=tuple(line_refs),
column_index=column_index,
field=field,
locator=locator,
)