feat(ku-selforg): самоорганизация кооперативных участков [C28-38] #130

Open
claude wants to merge 59 commits from feat/ku-selforg into dev
Owner

Самоорганизация кооперативных участков (трек ku-selforg, issue C28-38)

Универсальный двухуровневый механизм «собрание пайщиков → решение» на контракте branch (зеркало Совета): свободные решения + автоматизируемые; учреждение КУ — первый автоматизируемый тип. Доверенные лица участка — по заявлению с договором матответственности (встречная подпись председателя).

Состав (по эпикам)

  1. Контракт branch L1 — таблицы decisions/decisionq, действия createdec/joindec/setchair/startdec/votedec/closedec (бюллетень 1:1 из meet::vote; протокол утверждает один председатель).
  2. Контракт branch L2execSoviet::create_agenda (тип branchdec), callbacks confirmdec/declinedec, canceldec. Chain-RAM: терминал = erase.
  3. Контракт branch trustreqsreqtrusted/apprtrusted/decltrusted (лимит 3) + YAML-стандарты p.brn.decide/p.brn.trust.
  4. cooptypes — интерфейсы/actions/tables зеркалом ABI; registry-шаблоны 320–327.
  5. factory — 8 шаблонов + 8 фабрик документов 320–327 (325 фетчит решение branch из explorer).
  6. controller — расширение extensions/ku (слот trustee активирован): blockchain-адаптер (подпись кооператива), PG-проекции ku_decisions/ku_decision_questions/ku_trust_requests с синком и fork-обработкой, GraphQL: 11 мутаций + 7 генераторов + 3 запроса, enum-статусы, проверки прав. Unit-тесты KuService (11 passed).
  7. sdk — ZEUS-клиент перегенерён, домен Mutations/Queries.Ku с селекторами.
  8. desktop — workspace «Кооперативный участок» (слот trustee): Мой участок / Собрания / Собрание / Доверенные; циклы generate→sign→submit (320–324, 327 со встречной подписью без регенерации); канон MONO v2.

Спецификация: _bmad-output/tracks/ku-selforg/ (PRD+architecture, ревизия 3) + ADR в requirements.

## Самоорганизация кооперативных участков (трек ku-selforg, issue C28-38) Универсальный двухуровневый механизм «собрание пайщиков → решение» на контракте `branch` (зеркало Совета): свободные решения + автоматизируемые; учреждение КУ — первый автоматизируемый тип. Доверенные лица участка — по заявлению с договором матответственности (встречная подпись председателя). ### Состав (по эпикам) 1. **Контракт branch L1** — таблицы `decisions`/`decisionq`, действия `createdec/joindec/setchair/startdec/votedec/closedec` (бюллетень 1:1 из meet::vote; протокол утверждает один председатель). 2. **Контракт branch L2** — `exec` → `Soviet::create_agenda` (тип `branchdec`), callbacks `confirmdec`/`declinedec`, `canceldec`. Chain-RAM: терминал = erase. 3. **Контракт branch trustreqs** — `reqtrusted/apprtrusted/decltrusted` (лимит 3) + YAML-стандарты `p.brn.decide`/`p.brn.trust`. 4. **cooptypes** — интерфейсы/actions/tables зеркалом ABI; registry-шаблоны 320–327. 5. **factory** — 8 шаблонов + 8 фабрик документов 320–327 (325 фетчит решение branch из explorer). 6. **controller** — расширение `extensions/ku` (слот trustee активирован): blockchain-адаптер (подпись кооператива), PG-проекции `ku_decisions`/`ku_decision_questions`/`ku_trust_requests` с синком и fork-обработкой, GraphQL: 11 мутаций + 7 генераторов + 3 запроса, enum-статусы, проверки прав. Unit-тесты KuService (11 passed). 7. **sdk** — ZEUS-клиент перегенерён, домен `Mutations/Queries.Ku` с селекторами. 8. **desktop** — workspace «Кооперативный участок» (слот trustee): Мой участок / Собрания / Собрание / Доверенные; циклы generate→sign→submit (320–324, 327 со встречной подписью без регенерации); канон MONO v2. Спецификация: `_bmad-output/tracks/ku-selforg/` (PRD+architecture, ревизия 3) + ADR в requirements.
ant changed target branch from dev to marketplace2 2026-07-20 10:43:18 +00:00
ant changed target branch from marketplace2 to dev 2026-07-20 10:44:15 +00:00
ant added 59 commits 2026-07-20 10:44:15 +00:00
- решение совета branchdec: документ 325 переписан (реквизиты явно через Action), мутация kuGenerateEstablishmentDecision, обработчик в decision-factory desktop
- кнопки действий собрания в шапке страницы, canCloseNow-гейт (все проголосовали или 15 минут истекли), busy-лоадеры до обновления проекции
- перевёрстка повестки/результатов по канону meet, back-link, статус в карточке
- диалог объявления: тип собрания (создание КУ / произвольные вопросы), повестка организатора для free, доп.вопросы при открытии голосования
- фикс импортов Int (DTO) и formatDateToLocalTimezone (DecisionFlow)
[C28-38][@ant] фикс: дубли повестки после открытия голосования + контакты участка на собрании
Typecheck / desktop (pull_request) Failing after 8m18s
Typecheck / controller (pull_request) Successful in 13m12s
68db00e8d4
- стёртые контрактом вопросы (erase при replace повестки) оставались в выдаче — фильтр по present в getDecision; бюллетень снова проходит валидацию контракта
- секция повестки скрывается, когда вопросов нет (после завершения собрания повестка живёт в протоколе)
- email и телефон участка запрашиваются при открытии голосования (нужны для добавления участка как подразделения после решения совета), хранятся приватно в БД и видны в карточке собрания
[C28-38][@ant] фича: перестройка стола КУ + статус «Отменено» + гейт отмены принятого решения
Typecheck / desktop (pull_request) Failing after 8m28s
Typecheck / controller (pull_request) Successful in 13m11s
2e54f7a9ac
- статус CANCELLED: контракт стирает запись одинаково при любом исходе, факт отмены фиксируется в БД при canceldec; в списках и карточке показывается «Отменено» вместо «Завершено»
- отмена собрания недоступна после успешного голосования (все бюллетени поданы или окно истекло и по каждому вопросу «за» больше «против») и после утверждения протокола — только направить в совет; при сборе участников и неуспешном голосовании отмена остаётся
- стол КУ: страница «Кооперативные участки» (таблица с председателем и адресом, переход на участок), страница участка (адрес/контакты, ФИО председателя, доверенные лица, заявки на доверенных с одобрением председателем, кнопка «Стать доверенным»), «Мой участок» — тот же виджет для участка, где пайщик председатель
- страница «Доверенные» удалена — её функционал переехал на страницу участка
[C28-38][@ant] фикс: публичные сертификаты участка для пайщиков + доверенные фамилиями
Typecheck / desktop (pull_request) Failing after 8m25s
Typecheck / controller (pull_request) Successful in 13m11s
e35e74cd11
Поля trustee/trusted остаются под guard chairman/member (паспортные данные);
для пайщиков добавлены trustee_certificate/trusted_certificates (ФИО+username)
без guard. Страницы КУ переведены на getPublicBranches, в таблице участков
доверенные показываются фамилиями, прочерк при отсутствии.
[C28-38][@ant] фича: автопривязка председателя КУ к своему участку
Typecheck / desktop (pull_request) Failing after 8m31s
Typecheck / controller (pull_request) Successful in 14m11s
57f2ef43e0
soviet::setbranch (auth _branch) — системная установка/сброс braname без
заявления. Председатель привязывается автоматически при учреждении участка
(confirmdec/createbranch) и при смене (editbranch: новому — установка,
прежнему — сброс, выбирает участок заново). Председатель может возглавлять
только один участок и не может сменить участок заявлением (selectbranch),
пока исполняет обязанности — попап выбора КУ его не касается.
«Мой участок» показывает участок по braname пайщика (выбранный или
автопривязанный), fallback — по председательству.
[C28-38][@ant] фикс: заявка доверенного принимает договор 327 с ФИО председателя
Typecheck / desktop (pull_request) Failing after 8m32s
Typecheck / controller (pull_request) Successful in 13m17s
67eeac5563
requestTrusted был типизирован под заявление 326 (мета без chairman_full_name),
а фронт по канону подписывает договор о полной материальной ответственности 327 —
GraphQL отклонял мету. Тип application заменён на DTO договора 327 (как у
встречной подписи председателя). Формулировка пустого «Моего участка» смягчена:
«Кооперативный участок пока не выбран».
Одобрение заявки доверенного падало «Недостаточно прав доступа для генерации
документа»: председатель регенерировал договор 327 заявителя, а генерация
разрешена только автору. Теперь заявка отдаёт агрегат документа (сырой документ
+ подписи через DocumentAggregator) и ФИО заявителя; председатель накладывает
встречную подпись на документ первого подписанта (канон 2-й подписи как в
собраниях), документ открывается на просмотр из таблицы заявок.

«Направить в совет» показывается избранному председателю участка
(decision.chairman), а не организатору собрания — заявление в совет
подписывает он.

Уведомления: напоминание участникам за час до собрания (cron по meet_at,
маркер meet_reminder_sent), председателю участка о новой заявке доверенного,
заявителю о решении по заявке; workflow «голосование началось» включён в
реестр синхронизации (не был зарегистрирован).
Председатель участка подписывает договор о полной индивидуальной материальной
ответственности (новый документ реестра 328) при подаче заявления о создании КУ —
оба документа уходят в совет одним пакетом действием exec. После решения совета об
учреждении участка договор автоматически уходит на встречную подпись председателю
совета через механизм одобрений (soviet::createapprv → confirmapprv → branch::apprliab).
Отклонить договор нельзя: решение об учреждении уже принято — контракт блокирует
declliab (check(false)), а в UI кнопка «Отклонить» для этого типа скрыта.

- cooptypes: реестровый документ 328.BranchChairmanLiabilityAgreement (юр-текст,
  паспортный блок исполнителя под passport_request, «Общество» = председатель совета);
  интерфейсы branch (IExec.liability, ICoodecision.liability, IApprliab/IDeclliab).
- factory: Template+Action 328 (individual через getUser).
- contract branch: exec(...,liability) хранит договор; confirmdec запускает
  create_approval; apprliab финализирует (make_complete_document); declliab блокирует отказ.
- controller: DTO 328 + liability в ExecKuDecisionInput; execDecision теперь требует
  избранного председателя (assertIsDecisionChairman); генератор + резолвер; адаптер;
  проекция решения расширена полем liability.
- desktop: execDecision генерит и подписывает договор 328 в пакете; метка действия
  и скрытие кнопки «Отклонить» для недопустимого к отказу договора в /chairman/approvals.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Канон ролей зафиксирован: chairman=председатель совета, trustee=председатель участка, trusted=доверенное лицо. Документ 328 BranchChairmanLiabilityAgreement переименован в BranchTrusteeLiabilityAgreement (имя Chairman теперь врало). Документ 327 переписан: вместо короткого огрызка на ICommonUser — полный текст договора (как 328) для доверенного лица на individual (с паспортом), вторая сторона = председатель участка (trustee_full_name). Контракт не трогался: trusted-флоу generic над document2. Сквозь cooptypes/factory/controller/sdk + desktop (DecisionFlow/TrustedFlow). Codegen+SDK пересобраны, 14/14 ku-тестов, ESLint чист.
Мутация saveMyPassport (guard только аутентификация, @CurrentUser, пишет в свой individual через IndividualRepository; reject если паспорт уже установлен — обновление это отдельный процесс). Нужна для ролей, которым паспорт обязателен (председатель участка, доверенное лицо) в кооперативах без сбора паспорта при регистрации. Договоры 327/328 теперь показывают паспортный блок по наличию individual.passport (а не по кооп-флагу vars.passport_request) — паспорт этих ролей обязателен независимо от настройки кооператива. Backend + cooptypes + SDK; codegen обновлён, controller компилируется.
Feature User/CollectPassport: BaseDialog (канон) с паспортными полями + useRequirePassport. Председатель участка собирает паспорт при направлении в совет (execDecision, договор 328), доверенное лицо — при подаче заявки (requestTrusted, договор 327). Если паспорт уже в профиле (session.privateAccount.individual_data.passport) — окно не показывается, действие идёт сразу. Сохранение через saveMyPassport + обновление session. entities/Account/api.saveMyPassport. ESLint чист.
Все документы идут он-чейн: доверенности едут вторым document2 рядом с договорами
матответственности и визируются теми же подписантами, после одобрения комплитятся
(make_complete_document) в реестр документов.

Контракт branch:
- exec(+authority), reqtrusted(+authority), apprtrusted(+countersigned_authority);
  поля authority в coodecision/trustreq.
- доверенность №1 визирует председатель совета — отдельное одобрение branchauth в
  confirmdec (approval_hash = хэш документа) + новые apprauth/declauth.
- доверенность №2 и договор 327 комплитятся в apprtrusted встречной подписью
  председателя участка.

cooptypes: реестр 329 BranchTrusteePowerOfAttorney, 330 BranchTrustedPowerOfAttorney;
interfaces/branch + actions apprAuth/declAuth. factory: Actions/Templates 329/330.
controller: DTO/service/resolver генерации, проброс authority в адаптере, проекция
trustreq.authority + agregate authority_document для встречной подписи. sdk: селектор
заявки + zeus reген. desktop: генерация+подпись доверенностей в DecisionFlow/TrustedFlow,
встречная подпись обоих документов в approveTrusted, просмотр доверенности в виджете.

Контракт пересобран (branch.wasm/.abi), требуется редеплой + рестарт чейна/парсера.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
[C28-38][@ant] правка: повестка КУ — канон-вёрстка, понятный термин адреса, авто-обновление
Typecheck / desktop (pull_request) Failing after 8m35s
Typecheck / controller (pull_request) Has been cancelled
1fcaa242bc
- «адрес привязки» → «по адресу, определённому собранием пайщиков» (термин убран)
- «Повестка дня» → «Повестка собрания»; карточка повестки по канону MeetDetailsAgenda
  (шапка с иконкой, проект решения в обособленном surface-2 блоке, подпись «Ваш голос»)
- фоновый поллинг состояния (15с) на странице собрания и в списке, пока нет websocket

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
[C28-38][@ant] фикс: устойчивость стола КУ + протоколы собрания на странице
Typecheck / desktop (pull_request) Failing after 8m12s
Typecheck / controller (pull_request) Successful in 13m11s
248375a1bf
- getBranches больше не роняет весь список 400-й «Организация не найдена»,
  когда карточка участка ещё не материализована обработчиком confirmdec
  после одобрения советом — не-готовый участок пропускается до след. загрузки
- на странице собрания публикуются протокол собрания пайщиков (323) и решение
  совета (325) агрегатами (html+подписи+бюллетени); договор матответственности
  (328) и доверенность (329) с паспортными данными туда НЕ выносятся
- KuDecision: +protocol_document/+authorization_document (агрегаты), codegen

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
[C28-38][@ant] правка: маски паспортных полей (строки, без спиннеров)
Typecheck / desktop (pull_request) Failing after 8m29s
Typecheck / controller (pull_request) Has been cancelled
b30cf4cdcc
- BaseInput: проп mask (проброс в q-input)
- форма паспорта: серия #### / номер ###### / код ###-### (только цифры,
  без стрелок number), плейсхолдеры + валидация полноты перед сохранением

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- контракт exec: newlink договора (328) и доверенности (329) к пакету повестки
  совета (как votedec линкует бюллетень); branchliab/branchauth в soviet_actions —
  совет читает их вместе с заявлением (нужен redeploy branch)
- предпросмотр перед подписанием: данные → генерация документов с подставленными
  данными → показ на прочтение → подпись и отправка. Для exec (председатель: заявление+
  договор+доверенность) и requestTrusted (доверенный: договор+доверенность)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
[C28-38][@ant] правка: документы заявки — отдельная колонка со ссылками
Typecheck / desktop (pull_request) Failing after 8m19s
Typecheck / controller (pull_request) Successful in 13m25s
359643f4ce
Договор/Доверенность вынесены из «Действия» в колонку «Документы» —
ссылки с иконкой (не ghost-кнопки); «Действия» оставлены под Одобрить/Отклонить

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Документы 323/324/325 (chairman) и 327/330 (trustee) хранили ФИО
председателя в Action → оно попадало в document2.meta и публиковалось
on-chain plaintext. Теперь в Action идёт только username; фабрика через
getUser(username, block_num) резолвит ФИО на момент генерации и вставляет
в рендер PDF (канон 702.AssetContributionAct.receiver). Model/шаблоны не
тронуты — ФИО по-прежнему в документе, но не в meta.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
[C28-38][@ant] правка: в превью неподписанного документа скрываем блок контрольной суммы
Typecheck / desktop (pull_request) Has been cancelled
Typecheck / controller (pull_request) Has been cancelled
f1a0555056
Превью-перед-подписанием строит агрегат с пустым doc_hash (канонического
хэша ещё нет), а BaseDocument пересчитывал хэш из бинарника и DocumentSignatures
показывал красную «Локально пересчитанный хеш не совпадает» — ложная ошибка,
документ просто ещё не подписан. Теперь BaseDocument при пустом doc_hash не
запускает пересчёт и прячет блок контрольной суммы (проп hideChecksum). Для
реальных подписанных документов doc_hash есть → сверка работает как раньше.
Вёрстка и кнопка «скачать» сохранены.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
По просьбе — не только красную плашку, а весь блок DocumentSignatures целиком
(рамка, контрольная сумма, кнопка «скачать») скрываем у документов без
канонического doc_hash (неподписанное превью). Гейт перенесён на уровень
BaseDocument (v-if='hasDocHash' на всём блоке); проп hideChecksum откатан как
лишний — DocumentSignatures вернулся к исходному виду. Подписанные документы
(doc_hash есть) отображаются с полным блоком как раньше.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
[C28-38][@ant] фича: панель состояния мажоритарной системы управления на странице КУ
Typecheck / desktop (pull_request) Failing after 8m30s
Typecheck / controller (pull_request) Successful in 13m20s
6d89d96ad3
Отображает флаг is_branched (system.info.cooperator_account) — включается
контрактом при 3+ кооперативных участках. Read-only индикатор + пояснение
о мажоритарной модели общего собрания через участки.
[C28-38][@ant] фича: колонка «Пайщики» (число участников КУ) в списке участков
Typecheck / desktop (pull_request) Failing after 9m37s
Typecheck / controller (pull_request) Successful in 13m20s
78822f3d6d
Бэкенд считает пайщиков участка из таблицы soviet participants
(status accepted + braname) и отдаёт participants_count в payload веток
(getBranch/getBranches, одно чтение таблицы на список). Поле добавлено в
DTO Branch, оба SDK-селектора, регенерирован zeus. На фронте — колонка
в таблице КУ. Председатель и доверенные входят в число пайщиков участка.
[C28-38][@ant] фича: карточка «Пайщики участка» на странице КУ + единый вид карточек лиц
Typecheck / desktop (pull_request) Failing after 8m48s
Typecheck / controller (pull_request) Has been cancelled
74a19d7e0e
Добавлена карточка с количеством пайщиков участка (participants_count из
публичного payload ветки). Карточка председателя переведена на PersonCard
density=compact — убрана рамка, чтобы совпадала с доверенными лицами.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
[C28-38][@ant] фича: приватные КУ с белым списком — контракт+cooptypes+backend+sdk
Typecheck / controller (pull_request) Has been cancelled
Typecheck / desktop (pull_request) Has been cancelled
e55622636d
branch: поля is_private/whitelist (binary_extension) + actions setprivate/addwhite/delwhite (auth председателя совета); soviet::selectbranch запрещает выбор приватного КУ вне белого списка. backend: is_private/is_available(computed per-user)/whitelist_certificates(role-gated) в Branch DTO, 3 мутации, фильтр-готовность. codegen: zeus+селекторы.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
[C28-38][@ant] фича: UI приватных КУ — управление белым списком + фильтр выбора
Typecheck / desktop (pull_request) Has been cancelled
Typecheck / controller (pull_request) Has been cancelled
3b85a2b783
SDK: операции setBranchPrivate/addBranchWhitelist/deleteBranchWhitelist. desktop: на странице КУ председателю — разворот строки с галочкой «Приватный» и белым списком (добавление по ФИО/удаление); значок «Приватный» в списке; фильтр недоступных приватных участков (is_available) при регистрации и смене КУ.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
[C28-38][@ant] docs: guard приватного участка в стандарте sov.selectbranch
Typecheck / desktop (pull_request) Failing after 8m47s
Typecheck / controller (pull_request) Has been cancelled
93239d71f0
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
[C28-38][@ant] правка: управление приватностью КУ — на стол председателя
Typecheck / desktop (pull_request) Failing after 8m46s
Typecheck / controller (pull_request) Successful in 13m32s
b22fbe1845
Перенёс управление приватностью+белым списком в MemberBranchListPage (стол председателя «Кооперативные участки», развёрнутая строка) через компонент BranchPrivacyManager. Откатил KuBranchesPage (стол «Кооперативный участок») к виду без управления — там оно было не к месту.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
[C28-38][@ant] правка: белый список КУ — любой пайщик, без аккаунтов участков
Typecheck / desktop (pull_request) Failing after 8m50s
Typecheck / controller (pull_request) Successful in 14m0s
72bd5d96d0
contract addwhite: убрано ограничение «только физлицо» — в белый список можно любого пайщика. desktop: UserSearchSelector получил проп exclude, BranchPrivacyManager исключает аккаунты КУ (branames) из поиска пайщиков — КУ не является пайщиком.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
[C28-38][@ant] merge: dev → feat/ku-selforg — разрешение конфликтов + фикс desktop typecheck
Typecheck / desktop (pull_request) Successful in 13m56s
Typecheck / controller (pull_request) Successful in 13m29s
58d7bc52bf
Конфликты:
- extensions.module.ts: оба модуля (Ku + Expenses)
- notifications/workflows/index.ts: оба набора воркфлоу (branch + expense)
- UserSearchSelector.vue: оба пропа (exclude + types)
- zeus (sdk+controller): перегенерирован из объединённой схемы
  (rebuild stale dist: cooptypes, factory, inter, notifications)

Фикс vue-tsc (упавший desktop-typecheck на PR #130):
- BaseInput: добавлен type 'datetime-local' (q-input его поддерживает)
- KuMeetingDetailsPage: AgendaNumberAvatar number-коэрс (?? ""),
  docTarget/openMeetingDoc типизированы IDocumentAggregate,
  preview-агрегат неподписанного документа — каст
- KuBranchDetailsWidget: documentTarget/authorityTarget типизированы
  IDocumentAggregate, preview-агрегат — каст

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
fix(branch): учреждение КУ — один пакет документов вместо двух
Typecheck / desktop (pull_request) Successful in 13m23s
Typecheck / controller (pull_request) Failing after 6m41s
6d970bc0fe
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>
fix(branch): учреждение КУ — разделить пакет собрания и пакет совета по якорю
Typecheck / desktop (pull_request) Successful in 13m15s
Typecheck / controller (pull_request) Successful in 12m58s
fbf6d98abc
Раньше всё (протокол, бюллетени, заявление в совет, договор, доверенность,
решение совета) висело на одном якоре hash → получались две почти одинаковые
карточки одного пакета (протокол и заявление), документы перетекали между ними.

Разводим на два процесса по разным package-хэшам:
- Пакет СОБРАНИЯ пайщиков (якорь = proposal.hash): протокол (closedec) + бюллетени
  (votedec). Появляется в реестре сразу при закрытии собрания.
- Пакет СОВЕТА (якорь = hash процесса): заявление в совет + договор матответственности
  + доверенность + решение совета. Советская часть (createagenda/confirmdec/declinedec/
  одобрения) НЕ тронута — нулевой риск.

Меняются только package-аргументы в closedec (make_complete_document) и votedec (newlink).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
fix(ku): документы учреждения КУ — правки методолога (Смуров, 16.06)
Typecheck / desktop (pull_request) Successful in 13m17s
Typecheck / controller (pull_request) Successful in 12m51s
c4fa1fecc2
Текст генерируемых документов учреждения кооперативного участка по
замечаниям методолога. Структура он-чейн пакетов не затронута.

- 323 Протокол собрания: убрано «кооперативного участка» из названия и
  meeting_name (просто «собрание пайщиков»); литерация «Протокол № КУ-N»
  сохранена.
- Повестка собрания (desktop, KuMeetingDetails/onStart + KuMeetings):
  в каждый вопрос добавлена принадлежность «...потребительского
  кооператива «Восход»»; полномочие обратиться в совет вшито во второй
  вопрос (третий вопрос не нужен — методолог «три в два»). Имя кооператива
  из System store (vars.name / full_abbr_genitive).
- 322 Бюллетень: в текст добавлено «потребительского кооператива «{name}»».
- 324 Заявление в совет: «прошу Совет согласовать создание участка ... и
  согласовать кандидатуру избранного председателя».
- 325 Решение совета: повестка разложена на 2 вопроса (учреждение +
  утверждение председателя и поручение Совету организовать сопровождение —
  банковский счёт, доверенность).
- 327/328 Договоры матответственности: из названия убрано «ПОЛНОЙ
  ИНДИВИДУАЛЬНОЙ» (тело без изменений).
- 329 Доверенность председателю КУ: переработана по эталону —
  реквизиты ПК в шапку, паспорт+регистрация инлайн в первый абзац,
  банковский счёт «№ —» (прочерк до открытия счёта в банке), ссылка на
  «Протокол № —» совета (прочерк), убран нижний блок «Уполномоченный: ФИО»,
  подпись доверителя + М.П.
- 330 Доверенность оператору: переработана по эталону — шапка
  «Кооперативный участок ... ПК ...», доверитель — председатель КУ,
  паспорт оператора инлайн, без банковского счёта, подпись + М.П. (КУ).

Эталоны: ~/blago/production/shared/ШАБЛОН_Доверенность_*.pdf,
ШАБЛОН_ДОГОВОР_О_МАТЕРИАЛЬНОЙ_ОТВЕТСТВЕННОСТИ_*.pdf

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
fix(ku): прочерки в доверенностях — подчёркивание под рукописное заполнение
Typecheck / desktop (pull_request) Successful in 13m26s
Typecheck / controller (pull_request) Successful in 13m3s
7f5f9867d9
Поля под ручное заполнение (банковский счёт в 329, № протокола/доверенности
в 329 и 330) — линия подчёркивания «______________» вместо em-dash, чтобы
вписать значение ручкой на распечатанном экземпляре.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Resolve conflict in process-decisions handlers — keep both
Ku establishment and membership exit decision generators.

Co-authored-by: Cursor <cursoragent@cursor.com>
feat(ku): упростить joindec и доработать документы участка
Typecheck / desktop (pull_request) Successful in 40m44s
Typecheck / controller (pull_request) Has been cancelled
ef96b4c81c
Удалён шаблон 321 и заявление при присоединении к собранию; joindec без document.
В протокол 325 добавлено приложение с положением участка, factory-тесты 320–330.
Экспорт getPaymentMethods.name в SDK; пункт меню «Выйти из кооператива».

Co-authored-by: Cursor <cursoragent@cursor.com>
fix(desktop): добавить поле Email в форму редактирования ИП в реестре пайщиков
Typecheck / desktop (pull_request) Failing after 25m53s
Typecheck / controller (pull_request) Successful in 28m11s
686cd0cff2
У физлица и организации поле уже было в Editable*Card; для ИП пропустили при создании компонента.

Co-authored-by: Cursor <cursoragent@cursor.com>
fix(ku): скрыть кнопки собрания по итогам голосования и ограничить председателя ФЛ
Typecheck / desktop (pull_request) Successful in 30m18s
Typecheck / controller (pull_request) Has been cancelled
07fb4599e6
Кнопки «Отменить» и «Завершить протокол» показываются только после окончания
голосования — в зависимости от принятия повестки. Председатель участка
выбирается только среди физических лиц, с проверкой на backend.

Co-authored-by: Cursor <cursoragent@cursor.com>
fix(desktop): не показывать ложное несовпадение контрольной суммы документа
Typecheck / controller (pull_request) Has been cancelled
Typecheck / desktop (pull_request) Has been cancelled
ff1965376d
Пересчёт хэша при появлении binary и состояние загрузки вместо предупреждения, пока PDF ещё не готов.

Co-authored-by: Cursor <cursoragent@cursor.com>
fix(cooptypes): увеличить прочерк номера счёта в доверенности КУ
Typecheck / desktop (pull_request) Failing after 10m33s
Typecheck / controller (pull_request) Successful in 28m18s
987600dd38
Поле для ручного вписывания банковского счёта в шаблоне 329 расширено в 3 раза.

Co-authored-by: Cursor <cursoragent@cursor.com>
fix(registration): закрывать signup до готовности vars и сериализовать их patch
Typecheck / desktop (pull_request) Successful in 32m7s
Typecheck / controller (pull_request) Successful in 29m46s
de10e16bae
Добавляем расчётный флаг settings.is_registration_open в getSystemInfo и заглушку на странице signup, чтобы пайщик не попадал в ошибку генерации документов. Параллельные утверждения решений больше не затирают vars при read-modify-write.

Co-authored-by: Cursor <cursoragent@cursor.com>
update
Typecheck / desktop (pull_request) Successful in 29m32s
Typecheck / controller (pull_request) Successful in 29m56s
8a59d3e83e
Some checks are pending
Typecheck / desktop (pull_request) Successful in 29m32s
Typecheck / controller (pull_request) Successful in 29m56s
This pull request has changes conflicting with the target branch.
  • components/controller/zeus/const.ts
  • components/controller/zeus/index.ts
  • components/cooptypes/src/cooperative/registry/index.ts
  • components/desktop/src/processes/select-branch/index.ts
  • components/desktop/src/shared/ui/base/BaseInput/BaseInput.types.ts
  • components/desktop/src/shared/ui/base/BaseInput/BaseInput.vue
  • components/sdk/src/zeus/const.ts
  • components/sdk/src/zeus/index.ts
  • package.json
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/ku-selforg:feat/ku-selforg
git checkout feat/ku-selforg
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: C9S/mono#130