Files
mostovik-backend/src/apps/parsers/clients/checko/datasets/account_codes.py
Aleksandr Meshchriakov ea473f0f2d
Some checks failed
CI/CD Pipeline / Build & Push Images (push) Has been cancelled
CI/CD Pipeline / Code Quality Checks (push) Has been cancelled
CI/CD Pipeline / Run Tests (push) Has been cancelled
Исправлены падения тестов и Telegram-уведомления CI
- Исправлен импорт core.celery в тестах health-check вместо устаревшего config.celery

- Добавлен fallback для Checko datasets при отсутствии JSON-файлов в CI

- Обновлен BaseDataset: загрузка встроенных данных при missing JSON

- Прокинуты TG_BOT_KEY/TG_CHANNEL из secrets в jobs lint/test/build_push
2026-02-18 13:36:47 +01:00

98 lines
3.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.
"""
Коды строк финансовой (бухгалтерской) отчетности.
Используются для расшифровки данных из /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)