Эпики 2-6 Благорост: cooptypes / docs / backend / SDK / notifications #55

Open
claude wants to merge 7 commits from feat/blagorost-E2-E5-program-expenses into blagorost
Owner

Скоуп

Замыкает контрактный слой Эпика 1 на цепочку «снизу вверх»:
Эпик 2 → Эпик 3 → Эпик 4 → Эпик 5 → Эпик 6.

Источник истины — план эпиков в 7-prilozhenie-blagorost/_bmad-output/planning-artifacts/epics.md.

Эпик 2. cooptypes — типы и схемы

  • interfaces/capital.ts — добавлены 16 новых action-интерфейсов (closedebt / debtpayretry / markdebtoverd; createpgexp / apprvpgexp / authpgexp / pgexppay / declpgexp / topupprogexp; requestrole / approverole / declinerole / inviterole / acceptinvite / declinvite / requestrateu) + IProgramExpense + IRoleRequest.
  • Расширения existing структур под binary_extension: IDebt.last_pay_error?, IDebt.due_at?, ISegment.approved_rate_per_hour?/approved_hours_per_day?/active_debts_count?, IGlobalState.program_expense_pool?/program_expense_reserved?.
  • ISettledebt приведён к новому ABI (usernamedebt_hash).
  • IDebt (loan) — source_contract (кто инициировал выдачу).
  • Action-файлы actions/* и табличные tables/* по существующему паттерну.

Эпик 3. Документы registry

  • 1012 ProgramExpenseStatement / 1013 ProgramExpenseDecision (расход программы)
  • 1100 RoleRequestStatement / 1101 RoleInviteStatement (L2-допуски)
  • 1102 RateUpdateStatement (обновление ставки)

Шаблоны (HTML context) — минимальные заглушки; реальные подкладываются через document-migrator отдельным шагом публикации.

Эпик 4. Backend controller — capital extension

  • ProgramExpensesManagementResolver + Service + Interactor — 6 mutations + 2 generator-мутации (1012/1013).
  • BlagorostAdditionsResolver — closeDebt / debtPayRetry / markDebtOverdue + 7 L2-mutations + 3 generator-мутации (1100/1101/1102).
  • CapitalBlockchainPort расширен 16 методами; реализация в CapitalBlockchainAdapter через приватный transactAs(...), который сворачивает vault+initialize+transact.

Не входит в этот PR: queries capitalProgramExpenses / capitalRoleRequests — требуют TypeORM entity + sync mapper (отдельный pre-эпик для sync-слоя). Frontend сможет использовать mutations напрямую.

Эпик 5. SDK Zeus

  • pnpm generate-schemapnpm generate-clientpnpm --filter @coopenomics/sdk build.
  • Zeus-клиент components/sdk/src/zeus/ и controller copy components/controller/zeus/ пересобраны и закоммичены.

Эпик 6. Сквозные уведомления (Novu)

  • 9 новых workflow по существующему паттерну WorkflowBuilder + Zod + LiquidJS:
    • расходы программы (5): approval-request / approved / authorized / paid / declined
    • займы (2): due-soon / overdue
    • L2-допуски (2): role-requested / role-approved
  • Триггеры из notification-services controller'а — отдельная итерация (Эпик 6.3).
  • Каналы — стандартные Novu (In-App / Email / Push); Matrix-моста нет, Novu Inbox покрывает требование.

Также

  • Fix preexisting baseline: добавлена заглушка ChatcoopInterProjectCommunicationArtifactsAdapter.listNonProjectCommunicationRooms (метод появился в dist @coopenomics/inter, но реализация в chatcoop отсутствовала — блокировал generate-schema).

План тестирования

  • pnpm --filter cooptypes build — зелёный.
  • pnpm --filter @coopenomics/controller typecheck — зелёный (за вычетом не-нашего chatcoop bug, фиксится этим же PR).
  • pnpm --filter @coopenomics/controller generate-schema — зелёный, schema.gql обновлён.
  • pnpm --filter @coopenomics/controller generate-client — zeus сгенерирован.
  • pnpm --filter @coopenomics/sdk build — зелёный.
  • pnpm --filter @coopenomics/notifications build — зелёный (preexisting warnings).
  • E2E «расход программы» (создание → одобрение → авторизация → выплата) — после deploy provider/dev-loop.
  • pnpm --filter @coopenomics/notifications sync — после согласования с автором.

🤖 Generated with Claude Code

## Скоуп Замыкает контрактный слой Эпика 1 на цепочку «снизу вверх»: **Эпик 2 → Эпик 3 → Эпик 4 → Эпик 5 → Эпик 6**. Источник истины — план эпиков в `7-prilozhenie-blagorost/_bmad-output/planning-artifacts/epics.md`. ### Эпик 2. cooptypes — типы и схемы - `interfaces/capital.ts` — добавлены 16 новых action-интерфейсов (closedebt / debtpayretry / markdebtoverd; createpgexp / apprvpgexp / authpgexp / pgexppay / declpgexp / topupprogexp; requestrole / approverole / declinerole / inviterole / acceptinvite / declinvite / requestrateu) + `IProgramExpense` + `IRoleRequest`. - Расширения existing структур под binary_extension: `IDebt.last_pay_error?`, `IDebt.due_at?`, `ISegment.approved_rate_per_hour?`/`approved_hours_per_day?`/`active_debts_count?`, `IGlobalState.program_expense_pool?`/`program_expense_reserved?`. - `ISettledebt` приведён к новому ABI (`username` → `debt_hash`). - `IDebt` (loan) — `source_contract` (кто инициировал выдачу). - Action-файлы actions/* и табличные tables/* по существующему паттерну. ### Эпик 3. Документы registry - 1012 ProgramExpenseStatement / 1013 ProgramExpenseDecision (расход программы) - 1100 RoleRequestStatement / 1101 RoleInviteStatement (L2-допуски) - 1102 RateUpdateStatement (обновление ставки) Шаблоны (HTML context) — минимальные заглушки; реальные подкладываются через document-migrator отдельным шагом публикации. ### Эпик 4. Backend controller — capital extension - `ProgramExpensesManagementResolver` + Service + Interactor — 6 mutations + 2 generator-мутации (1012/1013). - `BlagorostAdditionsResolver` — closeDebt / debtPayRetry / markDebtOverdue + 7 L2-mutations + 3 generator-мутации (1100/1101/1102). - `CapitalBlockchainPort` расширен 16 методами; реализация в `CapitalBlockchainAdapter` через приватный `transactAs(...)`, который сворачивает vault+initialize+transact. **Не входит** в этот PR: queries `capitalProgramExpenses` / `capitalRoleRequests` — требуют TypeORM entity + sync mapper (отдельный pre-эпик для sync-слоя). Frontend сможет использовать mutations напрямую. ### Эпик 5. SDK Zeus - `pnpm generate-schema` → `pnpm generate-client` → `pnpm --filter @coopenomics/sdk build`. - Zeus-клиент `components/sdk/src/zeus/` и controller copy `components/controller/zeus/` пересобраны и закоммичены. ### Эпик 6. Сквозные уведомления (Novu) - 9 новых workflow по существующему паттерну `WorkflowBuilder` + Zod + LiquidJS: - расходы программы (5): approval-request / approved / authorized / paid / declined - займы (2): due-soon / overdue - L2-допуски (2): role-requested / role-approved - Триггеры из notification-services controller'а — отдельная итерация (Эпик 6.3). - Каналы — стандартные Novu (In-App / Email / Push); Matrix-моста нет, Novu Inbox покрывает требование. ### Также - Fix preexisting baseline: добавлена заглушка `ChatcoopInterProjectCommunicationArtifactsAdapter.listNonProjectCommunicationRooms` (метод появился в dist `@coopenomics/inter`, но реализация в chatcoop отсутствовала — блокировал `generate-schema`). ## План тестирования - [x] `pnpm --filter cooptypes build` — зелёный. - [x] `pnpm --filter @coopenomics/controller typecheck` — зелёный (за вычетом не-нашего chatcoop bug, фиксится этим же PR). - [x] `pnpm --filter @coopenomics/controller generate-schema` — зелёный, schema.gql обновлён. - [x] `pnpm --filter @coopenomics/controller generate-client` — zeus сгенерирован. - [x] `pnpm --filter @coopenomics/sdk build` — зелёный. - [x] `pnpm --filter @coopenomics/notifications build` — зелёный (preexisting warnings). - [ ] E2E «расход программы» (создание → одобрение → авторизация → выплата) — после deploy provider/dev-loop. - [ ] `pnpm --filter @coopenomics/notifications sync` — после согласования с автором. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude added 5 commits 2026-06-02 07:35:03 +00:00
Дополнено `interfaces/capital.ts` интерфейсами под новые actions:
- closedebt / debtpayretry / markdebtoverd (Эпик A);
- createpgexp / apprvpgexp / authpgexp / pgexppay / declpgexp / topupprogexp (Эпик B);
- requestrole / approverole / declinerole / inviterole / acceptinvite / declinvite / requestrateu (Эпик D).

Новые table-интерфейсы IProgramExpense и IRoleRequest. Расширения existing
структур (binary_extension в C++ → optional в TS):
- IDebt: last_pay_error?, due_at?;
- ISegment: approved_rate_per_hour?, approved_hours_per_day?, active_debts_count?;
- IGlobalState: program_expense_pool?, program_expense_reserved?.
- ISettledebt: переход с username на debt_hash (совпадение с C++ ABI).

Loan IDebt: source_contract — кто инициировал выдачу долга
(capital / marketplace / ...), loan не знает доменного контекста.

Action-файлы actions/* и табличные tables/* по существующему паттерну,
индексы экспорта обновлены.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Новые registry-папки для документов Благорост:
- 1012 ProgramExpenseStatement / 1013 ProgramExpenseDecision (расход программы);
- 1100 RoleRequestStatement (заявление пайщика на L2-допуск);
- 1101 RoleInviteStatement (приглашение мастера на L2);
- 1102 RateUpdateStatement (запрос обновления ставки часа).

Регистрация в общем `registry/index.ts`. Generator'ы в backend (Эпик 4)
используют эти registry_id через `documentInteractor.generateDocument`.

Шаблоны (HTML context) — минимальные заглушки; реальные подкладываются
через document-migrator отдельной командой публикации.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Расходы программы (Эпик B):
- DTO `program_expenses_management/inputs.dto.ts` — 6 input;
- `ProgramExpensesManagementInteractor` / `Service` / `Resolver` —
  capitalCreateProgramExpense / capitalApproveProgramExpense /
  capitalAuthorizeProgramExpense / capitalConfirmProgramExpensePayment /
  capitalDeclineProgramExpense / capitalTopupProgramExpensePool;
- Генераторы `capitalGenerateProgramExpenseStatement` (1012) и
  `capitalGenerateProgramExpenseDecision` (1013).

Расширения по займам (Эпик A) + L2-допуски (Эпик D) — в одном резолвере
`BlagorostAdditionsResolver`:
- closeDebt / debtPayRetry / markDebtOverdue;
- requestRole / approveRole / declineRole / inviteRole / acceptInvite /
  declineInvite / requestRateUpdate;
- Генераторы 1100/1101/1102.

Расширен `CapitalBlockchainPort` 16 методами; реализация в
`CapitalBlockchainAdapter` через приватный `transactAs(...)`,
который сворачивает повторяющийся vault+initialize+transact.

Read-queries для programExpenses не делаются в этом проходе — требует
TypeORM entity + sync mapper (отдельный pre-эпик для sync-слоя).

Fix preexisting baseline: добавлена заглушка
`ChatcoopInterProjectCommunicationArtifactsAdapter.listNonProjectCommunicationRooms`
(метод в interface `InterProjectCommunicationArtifactsPort` появился в
dist `@coopenomics/inter`, но реализация в chatcoop отсутствовала —
блокировал generate-schema).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Запущена пятишаговая процедура:
  generate-schema → generate-client → sdk build

В schema появились новые mutations capital:
- capitalCreateProgramExpense / Approve / Authorize / ConfirmPayment / Decline /
  TopupProgramExpensePool + 2 generator-мутации (1012/1013);
- capitalCloseDebt / DebtPayRetry / MarkDebtOverdue;
- capitalRequestRole / ApproveRole / DeclineRole / InviteRole / AcceptInvite /
  DeclineInvite / RequestRateUpdate + 3 generator-мутации (1100/1101/1102).

Zeus-клиент в `components/sdk/src/zeus/` и copy в `components/controller/zeus/`
пересобраны и закоммичены. UI Финансы программ (Эпик 9.4) и UI
Управление (Эпик 10.3) могут использовать эти mutations напрямую.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
9 новых workflow по существующему паттерну `WorkflowBuilder` + Zod-схема
payload + LiquidJS в шаблонах (не Handlebars):

Расходы программы (Эпик B):
- capital-program-expense-approval-request (tag: chairman, capital)
- capital-program-expense-approved (tag: council-member, capital)
- capital-program-expense-authorized (tag: treasurer, capital)
- capital-program-expense-paid (tag: participant, capital)
- capital-program-expense-declined (tag: participant, capital)

Займы (Эпик A) — дедлайн-таймеры:
- capital-debt-due-soon (tag: participant)
- capital-debt-overdue (tag: participant)

L2-допуски (Эпик D):
- capital-role-requested (tag: master)
- capital-role-approved (tag: participant)

Все экспортируются из `@coopenomics/notifications/workflows` и
регистрируются в `allWorkflows`. Триггеры из controller'а добавляются
в notification-services (`debt-notification.service.ts`,
`expense-notification.service.ts` и т.п.) — отдельная итерация Эпика 6.3.

Каналы доставки — стандартные Novu (In-App / Email / Push).
Matrix-моста и отдельного GraphQL Subscription `coopEvents` не делается —
Novu Inbox покрывает требование «уведомление на каждом чихе».

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
claude added 1 commit 2026-06-02 08:52:44 +00:00
— Удалены registry 1100 RoleRequestStatement / 1101 RoleInviteStatement / 1102 RateUpdateStatement: запрос/инвайт роли и обновление ставки — программные сущности контракта, не юридические документы (нет заявления, нет протокола).
— Удалены registry 1012 ProgramExpenseStatement / 1013 ProgramExpenseDecision: дубль уже существующих 1010 ExpenseStatement / 1011 ExpenseDecision, переключил `ProgramExpensesManagementService` на 1010/1011 (общая форма «заявление о расходах»).
— `BlagorostAdditionsResolver`: убраны три document-generator mutations (capitalGenerateRoleRequestStatement / capitalGenerateRoleInviteStatement / capitalGenerateRateUpdateStatement) — остаются только action-mutations.
— Контракт capital: actions requestrole/approverole/declinerole/inviterole/acceptinvite/declinvite/requestrateu и так без поля document — правок в C++ не потребовалось.

SDK: schema.gql + Zeus regenerated.
claude added 1 commit 2026-06-02 09:11:01 +00:00
— 1010.ExpenseStatement переписан под бумажный шаблон 1010.СлужебнаяЗапискаПоРасходам.pdf (Action: project_name/component_name/deadline/total_amount/items[]/position/statement_number; Liquid-разметка по образцу 1005 InitProjectStatement).
— 1011.ExpenseDecision переписан как протокол решения совета по записке 1010 (по образцу 1006 InitProjectDecision; повестка ссылается на номер записки и состав затрат, решение фиксирует согласование списания по Фонду хозяйственной деятельности).
— Из ProgramExpensesManagementResolver/Service удалены дублирующие generator-мутации capitalGenerateProgramExpenseStatement/Decision: генерация теперь только через общие capitalGenerateExpenseStatement/Decision (тот же registry 1010/1011).

SDK: schema.gql + Zeus regenerated.
Author
Owner

Не закрываю — отложен к пересборке после шасси расходов.

Программная часть Эпиков 2-6 Благороста, относящаяся к расходам (createpgexp/apprvpgexp/authpgexp/pgexppay/declpgexp actions, шаблоны 1010/1011, mutations *ProgramExpense, notifications cap.progexp.*) — устарела архитектурно после решения сделать единое шасси расходов в проекте 14 (Версия 3 ЦК). Реализация шасси — эпики C28-28..C28-34.

Что не относится к расходам (роли capital — request/approve/decline role, обновление ставки rate, займы createdebt и lifecycle, registry 1100/1101/1102) — остаётся в силе и должно быть переложено в отдельный PR после мерджа шасси.

Action item: не мерджить этот PR до завершения шасси (C28-28..C28-34). После шасси — переразложить роли+ставки+займы в новый PR, удалив legacy program-expense часть.

**Не закрываю — отложен к пересборке после шасси расходов.** Программная часть Эпиков 2-6 Благороста, относящаяся к расходам (`createpgexp/apprvpgexp/authpgexp/pgexppay/declpgexp` actions, шаблоны 1010/1011, mutations `*ProgramExpense`, notifications `cap.progexp.*`) — устарела архитектурно после решения сделать единое **шасси расходов** в проекте 14 (Версия 3 ЦК). Реализация шасси — эпики **C28-28..C28-34**. Что не относится к расходам (роли capital — request/approve/decline role, обновление ставки rate, займы createdebt и lifecycle, registry 1100/1101/1102) — остаётся в силе и должно быть переложено в отдельный PR после мерджа шасси. **Action item:** не мерджить этот PR до завершения шасси (C28-28..C28-34). После шасси — переразложить роли+ставки+займы в новый PR, удалив legacy program-expense часть.
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/blagorost-E2-E5-program-expenses:feat/blagorost-E2-E5-program-expenses
git checkout feat/blagorost-E2-E5-program-expenses
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#55