feat(parsers): добавлен API клиент для checko.ru
- Реализован CheckoClient с поддержкой всех 10 эндпоинтов API v2 - Frozen dataclass модели для запросов и ответов - Справочники ОКВЭД2, ОКФС, ОКОПФ, ОКПД, статусы компаний - Маппинг русских полей API на английские имена - Unit тесты с моками - E2E тесты с реальными запросами - Настройка CHECKO_API_KEY в settings.py
This commit is contained in:
91
src/apps/parsers/clients/checko/datasets/account_codes.py
Normal file
91
src/apps/parsers/clients/checko/datasets/account_codes.py
Normal file
@@ -0,0 +1,91 @@
|
||||
"""
|
||||
Коды строк финансовой (бухгалтерской) отчетности.
|
||||
|
||||
Используются для расшифровки данных из /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"
|
||||
|
||||
@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)
|
||||
Reference in New Issue
Block a user