fix(branch): учреждение КУ — один пакет документов вместо двух
Typecheck / desktop (pull_request) Successful in 13m23s
Typecheck / controller (pull_request) Failing after 6m41s

closedec при типе createbranch заводил отдельный complete-document (newsubmitted)
на протокол собрания пайщиков, а exec/create_agenda — второй на заявление в совет.
Один и тот же package=hash, но два newsubmitted → две почти одинаковые карточки
в реестре документов.

Теперь для createbranch протокол линкуется (newlink) по якорному хэшу к пакету
заявления председателя в совет: заявление — единственный statement пакета, внутри
него протокол собрания пайщиков, бюллетени, договор матответственности, доверенность
и решение совета. Для free-решений протокол остаётся самостоятельным документом.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
coopops
2026-06-16 11:30:21 +00:00
parent 58d7bc52bf
commit 6d970bc0fe
@@ -30,11 +30,10 @@
bool all_voted = dec.signed_ballots >= dec.participants.size();
eosio::check(window_passed || all_voted, "Голосование ещё идёт");
// Протокол завершает пакет документов собрания в реестре (привязка к якорному хэшу)
Soviet::make_complete_document(_branch, coopname, dec.initiator, get_valid_soviet_action("branchdec"_n), hash, protocol);
if (dec.type == "free"_n) {
// Свободное решение зафиксировано протоколом и завершается (история — в журнале действий)
// Свободное решение: протокол — самостоятельный завершённый документ (отдельный пакет в реестре).
Soviet::make_complete_document(_branch, coopname, dec.initiator, get_valid_soviet_action("branchdec"_n), hash, protocol);
// Решение зафиксировано протоколом и завершается (история — в журнале действий)
decision_index decisions(_branch, coopname.value);
auto itr = decisions.find(dec.id);
erase_coodecquests(coopname, dec.id);
@@ -42,6 +41,22 @@
return;
}
// Решение об учреждении участка: протокол НЕ заводит отдельный пакет, а линкуется по
// якорному хэшу к пакету заявления председателя в совет (его заводит exec → create_agenda).
// Иначе процесс плодит две почти одинаковые карточки документов (протокол + заявление)
// вместо одной: заявление в совет — единственный statement пакета, всё прочее (протокол,
// бюллетени, договор матответственности, доверенность, решение совета) — приложения к нему.
Action::send<newlink_interface>(
_soviet,
"newlink"_n,
_branch,
coopname,
dec.initiator,
get_valid_soviet_action("branchdec"_n),
hash,
protocol
);
// Автоматизируемое решение — переходит в ожидание исполнения (exec → совет)
decision_index decisions(_branch, coopname.value);
auto itr = decisions.find(dec.id);