add-preset-shahmatka #141
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "add-preset-shahmatka"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Добавлен расчёт и XLSX-экспорт шахматки по правилу-пресету
Обновлено получение правил по версии консолидации, если в consolidation_version нет elimination_rules_version, то берутся все актуальные правила на текущий момент
Корректировки учитываются в шахматке (важно: корректировки применяются к уже готовой шахматке, учитывая правило, пересечения счетов между правилами не учитывается);
Добавлена ручка строк сводной ОСВ без встречной стороны по правилу.
Основная претензия по build_account, остальное на твое усмотрение, можно оставить, но build_account прям не нравится
@ -565,1 +567,4 @@return dict(groups)async def correction_for_version_consolidation(Не очень мне нравятся функции, начинающиеся не с глагола, но вроде уже приняли во всем проекте так, можно условиться на будущее, что select запросы можно не начинать с глагола, а если что-то в БД меняем, то все же желательно. Сейчас проще оставить как есть.
исправила
@ -29,0 +31,4 @@as_of = Noneversion_no = version.elimination_rules_versionelse:as_of = moscow_date(utc_now())А у нас КА не только в Мск же сидят, раз есть КА РФ, допустим, аналитик или ГК из Екб, в этом случае элиминация тоже будет по Москве время прилетать? Пока не до конца въехал, мб чего-то пока не догоняю
я уточнила, теперь время вообще не важно для актуальности, просто проверка отсутствия записи в valid_to
@ -175,0 +185,4 @@entry_idfor cell in matrix.cellsif cell.one_sidedfor entry_id in (*cell.osv_entry_ids_debit, *cell.osv_entry_ids_credit)Прикольно, я всегда через itertools.chain подобное делал, даже не задумывался, что так можно
@ -316,3 +335,1 @@"""ALL использует все счета нужного вида; MANUAL раскрывает выбранные счета и потомков."""matrix, _, _, _ = await self._build_accounts(version_id, mode=mode, debit_account_ids=debit_account_ids, credit_account_ids=credit_account_ids"""Рассчитать матрицу по всем счетам, ручному выбору или правилу-пресету."""Я бы оставил в докстринге для чего каждый mode нужен, или думаешь уже лишнего?
вернула
@ -357,2 +458,3 @@credit_account_ids: Sequence[uuid.UUID],) -> tuple[IntercompanyMatrixOut, ConsolidationVersion, Consolidation, list[ChartOfAccount]]:rule_id: uuid.UUID | None = None,) -> tuple[Тут все же буду настаивать. Когда функция\метод возвращает два значения это еще туда сюда, но когда уже больше - код превращается в месиво. Не очевидно, какой параметр возвращается каким (например, надо помнить, что объект MatrixSelection возвращается 5, нужно заходить в определение функции и отсчитывать, в каком он месте. К тому же, если тебе нужен только 2 каких-то придется писать либо matrix, _, _, _, selection, _ = self._build_accounts(...) либо built_account = self._build_account(...)\matrix, selection = built_account[0], built_account[4]). Исходя из вышеперечисленного предлагаю сделать в файле класс
Ну либо через pydantic аналогичный. Вроде _build_account только в двух местах вызывается, там поправить получение даннх в связи с этим
Ну и, соответственно, получение данных теперь будет matrix = (await self._build_account(...)).matrix или просто брать built_account = await self._build_account(...) и далее просто брать че надо, built_account.matrix или там built_account.selection и т д
исправила
aep referenced this pull request2026-10-21 13:41:25 +03:00
PR относится к AURORA-1747 «Шахматка: пресет по правилу ББ Прил. 3 и формат elimination-rules» — выделена из AURORA-1536. Расчёт элиминации §5 (каскад, упаковка, API пар, фиксация версии правил) остаётся в AURORA-1536, она вернулась в «Разработку». Название PR и коммиты лучше привязать к AURORA-1747.
Спасибо, замечания Ивана закрыты:
_build_accountsтеперь возвращаетMatrixBuildResult, свод —ConsolidatedOsvBuildResult, докстринг режимов на месте, московское время убрано.Что сделано в ветке со стороны ревью (перед продолжением работы —
git pull):a8e510e— влит свежий main (без конфликтов).367a11e—ruff format(3 файла) и длинная строка имени файла вconsolidated_osv.py; mypy вintercompany_matrix.py(measure: Measure); удалено полеas_ofизEliminationRulesOut— после правок оно всегда былоNone; интеграционныйtest_preset_uses_current_rules_when_version_unfixedприведён к текущему поведению (is_version_fixed=false,version_no=None).0e95f95— OpenSpec changeopenspec/changes/intercompany-matrix-presets/: дельтыconsolidations-api(ответelimination-rulesтеперь объект),consolidated-osv(PRESET, xlsx пресета),audit-trail(mode=PRESET,rule_id). В README добавлены новые маршруты и коды ошибок.3adaf6f— решения по объёму PR (ниже) записаны вdesign.mdиtasks.mdchange.wip/shahmatka-corrections-unpaired(на0e95f95) — закладка: учёт корректировок и ручка unpaired-osv сохранены там как есть, ничего не потеряется.Сейчас зелёные:
make check(ruff, mypy, 1793 юнит-теста) иmake test-integration(945 passed, 0 failed).Решения по объёму PR
(правило, A, B)ложится на ячейки (A, B) / (B, A), учитываются ли её счета иparent_correction_id. По §6 шахматка — суммы первички. Вернём из закладки после решения по аналитике AURORA-1643.osv_entry_ids_*в ячейке уже есть), настоящие строки без пары — упаковка §5 в AURORA-1536 (следующий шаг).elimination_rules_versionделаем следующим шагом в AURORA-1536: версия правил, действующая на дату составления консолидации (не на отчётный период), при создании версии или первом расчёте, не в GET. В этом PR запасной вариант «открытые правила» остаётся: сейчас версия правил одна, результат не плавает.Обязательно
_apply_corrections,correction_for_version_consolidation,correction_ids_*в ячейке) и ручку unpaired-osv (get_unpaired_rows,UnpairedOsvOut, маршрут) вместе с их тестами, в том числеtest_correction_repository.pyи строки вtest_openapi_routes. Отдельный коммит — чтобы потом вернуть всё однимgit revert. Спеку и README после этого поправлю сам.statement_type = balance; правило ОФР — 422INVALID_RULE, и тест на это.valid_to IS NULL) могут оказаться сразу из двухversion_no, если новую версию завели, а старую не закрыли: получим дублиrule_no. Нужно брать одну версию (maxversion_no) или явно падать, и тест на это. Заодно при незафиксированной версии стоит отдавать в ответе фактическийversion_noоткрытых правил, чтобы фронт видел, по какой версии посчитано.Желательно
…_preset-<uuid>.xlsxнеудобно пользователю; лучше номер правила (…_rule-balance-6.xlsx). В шапке книги стоит только «Пресет» — добавить номер правила, статьи и версию правил.ConsolidatedOsvService.build()теперь просто вызываетbuild_with_members()— можно оставить один метод. Переименование старых приватных хелперов (_amount→_get_amountи т.п.) не обязательно: Иван просил только про select-функции и сам предложил оставить.side_1 = "K"в_resolve_preset_selectionбез теста.все исправила
Ревью, раунд 2 (
b7d9794,02d67ff)Прошлый список закрыт, make check и интеграционные зелёные, main влилась без потерь в коде. Я влил свежий main, вернул в README потерявшуюся при мерже фразу про выгрузку результирующей таблицы, поправил change и гайд фронта.
Сливаю. Что осталось по мелочи, вынес в техдолг AURORA-1761: шапка xlsx пресета (счета как в правиле и «кроме …» вместо 50 раскрытых субсчетов), подписи статей при side_1 = K, лишний raise ValueError в _export_response, реквизиты правила в MatrixExportInfo и _filename, описания ошибок preset в OpenAPI, проверка правила до расчёта свода.
С #165 у тебя теперь будет конфликт в intercompany_matrix.py и тестах шахматки, плюс тесты на старый смысл one_sided отсюда там упадут — подтяни main в ту ветку.