docs(matrix): указать разделы ТЗ в новых функциях
This commit is contained in:
parent
2f08ce4155
commit
fabc9b48b2
@ -29,5 +29,5 @@ async def list_rules(
|
|||||||
version_id: uuid.UUID,
|
version_id: uuid.UUID,
|
||||||
service: EliminationRuleServiceDep,
|
service: EliminationRuleServiceDep,
|
||||||
) -> EliminationRulesOut:
|
) -> EliminationRulesOut:
|
||||||
"""Правила зафиксированной версии либо актуальные сегодня, с основанием выбора."""
|
"""Правила §4 зафиксированной либо последней открытой версии с основанием выбора."""
|
||||||
return await service.list_rules(version_id)
|
return await service.list_rules(version_id)
|
||||||
|
|||||||
@ -173,7 +173,7 @@ async def build_intercompany_matrix_preset(
|
|||||||
rule_id: uuid.UUID,
|
rule_id: uuid.UUID,
|
||||||
service: IntercompanyMatrixServiceDep,
|
service: IntercompanyMatrixServiceDep,
|
||||||
) -> IntercompanyMatrixOut:
|
) -> IntercompanyMatrixOut:
|
||||||
"""Cчета пресета с подходящим видом дебета или кредита."""
|
"""Шахматка §6 по счетам сторон правила §4."""
|
||||||
return await service.build_accounts(version_id, mode="PRESET", rule_id=rule_id)
|
return await service.build_accounts(version_id, mode="PRESET", rule_id=rule_id)
|
||||||
|
|
||||||
|
|
||||||
@ -189,7 +189,7 @@ async def get_unpaired_osv(
|
|||||||
rule_id: uuid.UUID,
|
rule_id: uuid.UUID,
|
||||||
service: IntercompanyMatrixServiceDep,
|
service: IntercompanyMatrixServiceDep,
|
||||||
) -> UnpairedOsvOut:
|
) -> UnpairedOsvOut:
|
||||||
"""Все строки односторонних ячеек шахматки и их число."""
|
"""Строки свода односторонних ячеек шахматки §6 и их число."""
|
||||||
return await service.get_unpaired_osv(version_id, rule_id)
|
return await service.get_unpaired_osv(version_id, rule_id)
|
||||||
|
|
||||||
|
|
||||||
@ -206,6 +206,7 @@ async def export_intercompany_matrix_preset(
|
|||||||
service: IntercompanyMatrixServiceDep,
|
service: IntercompanyMatrixServiceDep,
|
||||||
audit: Annotated[RequestAudit, Depends(get_request_audit)],
|
audit: Annotated[RequestAudit, Depends(get_request_audit)],
|
||||||
) -> Response:
|
) -> Response:
|
||||||
|
"""XLSX шахматки §6 по правилу §4 с аудитом выгрузки."""
|
||||||
matrix, info = await service.build_export(version_id, mode="PRESET", rule_id=rule_id)
|
matrix, info = await service.build_export(version_id, mode="PRESET", rule_id=rule_id)
|
||||||
return await _export_response(version_id, matrix, info, audit)
|
return await _export_response(version_id, matrix, info, audit)
|
||||||
|
|
||||||
|
|||||||
@ -12,7 +12,7 @@ from src.models.accounting import ChartOfAccount, EliminationRule, EliminationRu
|
|||||||
async def list_rules_with_accounts(
|
async def list_rules_with_accounts(
|
||||||
session: AsyncSession, version_no: int | None
|
session: AsyncSession, version_no: int | None
|
||||||
) -> list[tuple[EliminationRule, EliminationRuleAccount | None]]:
|
) -> list[tuple[EliminationRule, EliminationRuleAccount | None]]:
|
||||||
"""Правила заданной версии либо открытые правила последней версии."""
|
"""Правила §4 заданной либо последней открытой версии."""
|
||||||
condition = (
|
condition = (
|
||||||
EliminationRule.version_no == version_no
|
EliminationRule.version_no == version_no
|
||||||
if version_no is not None
|
if version_no is not None
|
||||||
@ -35,16 +35,17 @@ async def list_rules_with_accounts(
|
|||||||
|
|
||||||
|
|
||||||
def _current_open_version_stmt():
|
def _current_open_version_stmt():
|
||||||
|
"""Запрос номера последней открытой версии правил §4."""
|
||||||
return select(func.max(EliminationRule.version_no)).where(EliminationRule.valid_to.is_(None))
|
return select(func.max(EliminationRule.version_no)).where(EliminationRule.valid_to.is_(None))
|
||||||
|
|
||||||
|
|
||||||
async def current_open_version_no(session: AsyncSession) -> int | None:
|
async def current_open_version_no(session: AsyncSession) -> int | None:
|
||||||
"""Номер последней версии, в которой есть открытые правила."""
|
"""Номер последней версии с открытыми правилами §4."""
|
||||||
return await session.scalar(_current_open_version_stmt())
|
return await session.scalar(_current_open_version_stmt())
|
||||||
|
|
||||||
|
|
||||||
def is_valid_for_version(rule: EliminationRule | None, version_no: int | None) -> bool:
|
def is_valid_for_version(rule: EliminationRule | None, version_no: int | None) -> bool:
|
||||||
"""Проверить номер версии либо отсутствие `valid_to`."""
|
"""Проверить версию правила §4 либо отсутствие `valid_to`."""
|
||||||
return rule is not None and (rule.version_no == version_no if version_no is not None else rule.valid_to is None)
|
return rule is not None and (rule.version_no == version_no if version_no is not None else rule.valid_to is None)
|
||||||
|
|
||||||
|
|
||||||
@ -76,7 +77,7 @@ async def list_rule_accounts(
|
|||||||
async def rule_with_account(
|
async def rule_with_account(
|
||||||
session: AsyncSession, rule_id: uuid.UUID
|
session: AsyncSession, rule_id: uuid.UUID
|
||||||
) -> tuple[EliminationRule | None, list[EliminationRuleAccount]]:
|
) -> tuple[EliminationRule | None, list[EliminationRuleAccount]]:
|
||||||
"""Правило и его счета; `company_no` задаёт сторону, `is_excluded` — исключение."""
|
"""Правило §4 и его счета; `company_no` задаёт сторону, `is_excluded` — исключение."""
|
||||||
rule = await session.get(EliminationRule, rule_id)
|
rule = await session.get(EliminationRule, rule_id)
|
||||||
if rule is None:
|
if rule is None:
|
||||||
return None, []
|
return None, []
|
||||||
|
|||||||
@ -21,6 +21,7 @@ class EliminationRuleService:
|
|||||||
self._scope = scope
|
self._scope = scope
|
||||||
|
|
||||||
async def list_rules(self, consolidation_version_id: uuid.UUID) -> EliminationRulesOut:
|
async def list_rules(self, consolidation_version_id: uuid.UUID) -> EliminationRulesOut:
|
||||||
|
"""Правила §4 версии консолидации с проверкой видимости и основанием выбора."""
|
||||||
found = await consolidations_repo.get_version(self._session, self._scope, consolidation_version_id)
|
found = await consolidations_repo.get_version(self._session, self._scope, consolidation_version_id)
|
||||||
if found is None:
|
if found is None:
|
||||||
raise NotFoundError(VERSION_NOT_FOUND)
|
raise NotFoundError(VERSION_NOT_FOUND)
|
||||||
|
|||||||
@ -109,6 +109,7 @@ class MatrixExportInfo:
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def preset_details(self) -> tuple[StatementType, int, int, str, str]:
|
def preset_details(self) -> tuple[StatementType, int, int, str, str]:
|
||||||
|
"""Реквизиты правила §4 для имени и шапки XLSX шахматки §6."""
|
||||||
details = (
|
details = (
|
||||||
self.rule_statement_type,
|
self.rule_statement_type,
|
||||||
self.rule_no,
|
self.rule_no,
|
||||||
@ -215,7 +216,7 @@ def calculate_matrix(
|
|||||||
|
|
||||||
|
|
||||||
def get_unpaired_rows(rows: Iterable[ConsolidatedRow], matrix: IntercompanyMatrixOut) -> list[ConsolidatedRow]:
|
def get_unpaired_rows(rows: Iterable[ConsolidatedRow], matrix: IntercompanyMatrixOut) -> list[ConsolidatedRow]:
|
||||||
"""Строки свода, попавшие только на одну сторону пары компаний в шахматке."""
|
"""Строки свода, попавшие только на одну сторону пары шахматки §6."""
|
||||||
entry_ids = {
|
entry_ids = {
|
||||||
entry_id
|
entry_id
|
||||||
for cell in matrix.cells
|
for cell in matrix.cells
|
||||||
@ -429,7 +430,7 @@ class IntercompanyMatrixService:
|
|||||||
return result.matrix, info
|
return result.matrix, info
|
||||||
|
|
||||||
async def get_unpaired_osv(self, version_id: uuid.UUID, rule_id: uuid.UUID) -> UnpairedOsvOut:
|
async def get_unpaired_osv(self, version_id: uuid.UUID, rule_id: uuid.UUID) -> UnpairedOsvOut:
|
||||||
"""Все строки свода без встречной стороны в шахматке заданного пресета."""
|
"""Строки свода без встречной стороны в шахматке §6 заданного пресета."""
|
||||||
result = await self._build_accounts(
|
result = await self._build_accounts(
|
||||||
version_id, mode="PRESET", debit_account_ids=(), credit_account_ids=(), rule_id=rule_id
|
version_id, mode="PRESET", debit_account_ids=(), credit_account_ids=(), rule_id=rule_id
|
||||||
)
|
)
|
||||||
@ -443,7 +444,7 @@ class IntercompanyMatrixService:
|
|||||||
by_id: dict[uuid.UUID, ChartOfAccount],
|
by_id: dict[uuid.UUID, ChartOfAccount],
|
||||||
children: dict[uuid.UUID, list[uuid.UUID]],
|
children: dict[uuid.UUID, list[uuid.UUID]],
|
||||||
) -> tuple[MatrixSelection, EliminationRule]:
|
) -> tuple[MatrixSelection, EliminationRule]:
|
||||||
"""Выбрать счета и показатель пресета для версии консолидации."""
|
"""Выбрать стороны счетов и показатель правила §4 для шахматки §6."""
|
||||||
if rule_id is None:
|
if rule_id is None:
|
||||||
raise DomainValidationError("RULE_REQUIRED", "Выберите правило-пресет")
|
raise DomainValidationError("RULE_REQUIRED", "Выберите правило-пресет")
|
||||||
rule, rule_accounts = await elimination_rules_repo.rule_with_account(self._session, rule_id)
|
rule, rule_accounts = await elimination_rules_repo.rule_with_account(self._session, rule_id)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user