""" Коды строк финансовой (бухгалтерской) отчетности. Используются для расшифровки данных из /finances эндпоинта. Использование: from apps.parsers.clients.checko.datasets import AccountCodes # Получить название строки по коду name = AccountCodes.get_name("1100") # -> "Итого внеоборотных активов" # Получить полный объект item = AccountCodes.get("2110") # Поиск по названию items = AccountCodes.search("прибыль") """ from dataclasses import dataclass from typing import ClassVar from apps.parsers.clients.checko.datasets.base import BaseDataset @dataclass(frozen=True) class AccountCodeItem: """Элемент справочника кодов строк отчетности.""" code: str """Код строки (например: '1100', '2110').""" name: str """Наименование строки.""" class AccountCodes(BaseDataset[AccountCodeItem]): """ Справочник кодов строк финансовой отчетности. Коды соответствуют: - Форма №1 (Бухгалтерский баланс): 1100-1700 - Форма №2 (Отчет о финансовых результатах): 2100-2500 - Форма №3 (Отчет об изменениях капитала): 3100-3600 - Форма №4 (Отчет о движении денежных средств): 4100-4500 - Форма №6 (Отчет о целевом использовании средств): 6100-6400 """ _data: ClassVar[dict[str, AccountCodeItem] | None] = None _json_filename: ClassVar[str] = "account_codes.json" _builtin_raw_data: ClassVar[list[dict]] = [ {"code": "1100", "name": "Итого внеоборотных активов"}, {"code": "2100", "name": "Валовая прибыль (убыток)"}, {"code": "3100", "name": "Величина капитала"}, {"code": "4100", "name": "Сальдо денежных потоков от текущих операций"}, ] @classmethod def _parse_item(cls, raw: dict) -> AccountCodeItem: return AccountCodeItem( code=raw.get("code", ""), name=raw.get("name", ""), ) @classmethod def get_form_codes(cls, form_number: int) -> list[AccountCodeItem]: """ Получить все коды указанной формы отчетности. Args: form_number: Номер формы (1, 2, 3, 4 или 6). Returns: Список кодов указанной формы. """ cls._ensure_loaded() prefix = str(form_number) return [i for i in cls._data.values() if i.code.startswith(prefix)] @classmethod def get_balance_codes(cls) -> list[AccountCodeItem]: """Получить коды Формы №1 (Бухгалтерский баланс).""" return cls.get_form_codes(1) @classmethod def get_profit_loss_codes(cls) -> list[AccountCodeItem]: """Получить коды Формы №2 (Отчет о финансовых результатах).""" return cls.get_form_codes(2) @classmethod def get_capital_codes(cls) -> list[AccountCodeItem]: """Получить коды Формы №3 (Отчет об изменениях капитала).""" return cls.get_form_codes(3) @classmethod def get_cash_flow_codes(cls) -> list[AccountCodeItem]: """Получить коды Формы №4 (Отчет о движении денежных средств).""" return cls.get_form_codes(4)