Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
73 lines
2.8 KiB
Python
73 lines
2.8 KiB
Python
"""Предупреждения нормализации: перечень кодов и фабрика с уровнем из словаря."""
|
||
|
||
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,
|
||
)
|