# Mapa de referências "coop" para limpeza SCD (Fase 1, map-first)

Data: 2026-07-07
Escopo primário: `core/apps/admin/src` (frontend admin do Core)
Escopo secundário (correlato): `core/backend/lib` (contratos de API que o front consome)
Natureza: análise e proposta. Nenhum arquivo de código foi editado.

Contexto de negócio: a Monetarie é uma Sociedade de Crédito Direto (SCD), não uma cooperativa de crédito. O front admin foi construído sobre um domínio de cooperativa (associado, capital social, sobras, assembleias, agências, conselho, ato cooperativo). Boa parte desse vocabulário é incompatível com uma SCD e precisa ser renomeada ou removida. Outra parte é, na prática, só "cliente/instituição/usuário" com nome infeliz e deve ser mantida para não gerar risco desproporcional.

## 1. Resumo executivo

### Contagem bruta (linhas com match, família `cooperad|cooperativ|Cooperative|conselheiro|assembleia|revenue_cooperative|cooperative_role`)

- `core/apps/admin/src`: 584 linhas em 121 arquivos.
- `core/backend/lib` (correlato): 1.692 linhas em 320 arquivos.

Match por termo isolado em `admin/src` (grep -rniE): `cooperativ` 489, `Cooperative` 431, `/cooperative` 175, `cooperad` 83, `cooperados` 26, `CooperativeMember` 24, `assembleia` 16, `CooperativeRole` 4, `revenue_cooperative` 2, `cooperative_role` 2, `conselheiro` 1, `quadro social` 0.

### Achado estrutural que muda a estratégia (importante)

Já existe uma limpeza parcial em curso, o que deve orientar a decisão cluster a cluster:

1. O menu lateral já foi higienizado. Em `core/apps/admin/src/layouts/AdminLayout.vue` a seção COOPERATIVA inteira e o item "Distribuição de Sobras" estão comentados com a justificativa "SCD, não cooperativa", e o item de cadastro virou "Clientes" apontando para `/dashboard/clients`. As rotas antigas `/dashboard/cooperative/*` foram preservadas de propósito em `router/index.ts` (não estão mais no menu, mas continuam navegáveis por URL).
2. Já existe uma tela SCD-correta paralela: `core/apps/admin/src/views/clients/*` (ClientsListView, ClientDetailView e 12 abas Client*), servida pela composable `useClients.ts`, que consome `/admin/merchants/*` (modelo merchant/partner), e NÃO `/cooperative/members`. Ou seja, o cadastro de "cliente" da SCD já foi reimplementado noutro lugar.
3. Consequência: todo o subárvore `views/cooperative/*` (members, capital, surplus, assemblies, branches, refunds) está majoritariamente órfão de menu e superado pela tela de clientes. O tratamento preferencial para esses clusters é REMOVER, não renomear, exceto pelos endpoints `/cooperative/*` que ainda têm consumidores vivos (ver item 3 de riscos).

### Classificação dos clusters (visão macro)

- INCOMPATIVEL-SCD (renomear ou remover): governança cooperativa (assembleias, conselho fiscal, papéis `conselheiro`/`diretor`), capital social/quotas, distribuição de sobras/FATES/reserva legal, associado/cooperado como identidade de sócio, agências/PA cooperativos, resultado "cooperativo vs não-cooperativo", relatórios de quadro social.
- GENERICO (manter): a palavra "cooperado" usada como rótulo visual de "cliente/titular" em telas que a SCD mantém (crédito, lançamentos contábeis, compliance PIX, CADOC), o KPI `cooperados_ativos` do dashboard (é contagem de clientes ativos, o dado existe), e os endpoints/paths `/cooperative/*` que só têm nome infeliz mas atendem fluxos vivos.

---

## 2. Tabelas por categoria de localização

Legenda de Risco: `rota` = mexe em path público/URL navegável (precisa de redirect de compatibilidade); `backend` = mudança de contrato de API; `money-path` = toca cálculo ou exibição de valor financeiro; `baixo` = só texto/label interno.

### 2.1 i18n / labels

| Cluster | Arquivos (contagem) | Classificação | Ação proposta | Risco |
|---|---|---|---|---|
| Bloco `cooperative.*` (branches, capital, surplus, assemblies, refunds) com rótulos "Agências", "Capital Social", "Subscrever/Resgatar Quotas", "Distribuição de Sobras", "Reserva FATES/Legal", "Associados" | `i18n/locales/pt-BR.ts` (13), `en.ts` (5), `es-ES.ts` (4), `fr.ts` (4), `zh-CN.ts` (7) | INCOMPATIVEL-SCD | Remover as chaves do bloco `cooperative.*` (surplus, capital, assemblies, refunds) junto com as views que as consomem; o que sobrar de "branches" só se for manter alguma noção de agência (a SCD não tem PA cooperativo) | baixo |
| `accounting.cooperative_result` = "Resultado com Clientes" e `accounting.non_cooperative_result` = "Resultado com Não Clientes"; `accounting.cooperativo` = "Ato com Clientes" | `i18n/locales/pt-BR.ts` (linhas 1481-1530) | INCOMPATIVEL-SCD | Renomear chaves para `result_with_clients` / `result_without_clients` ou remover a segregação ato cooperativo x não cooperativo (não existe em SCD). Depende da decisão contábil (ver 2.5 e riscos money-path) | money-path |
| `docCouncil` = "Carteira de Conselho" (documento de conselheiro) | `i18n/locales/pt-BR.ts` (735) | INCOMPATIVEL-SCD | Remover a opção de tipo de documento "Carteira de Conselho" | baixo |
| String "Cooperativa Capital e Empréstimo (uso exclusivo BCB)" (label de código regulatório) | `i18n/locales/pt-BR.ts` (887) | GENERICO | Manter. É rótulo de um código oficial do BCB numa lista de domínio, não afirma que a Monetarie é cooperativa | baixo |

### 2.2 types / interfaces

| Cluster | Arquivos (contagem) | Classificação | Ação proposta | Risco |
|---|---|---|---|---|
| `interface CooperativeMember` (+ `MemberDashboardStats`, `MemberDependent/Reference/Asset/Employer/IncomeSource`) | `types/cooperative.ts` (arquivo inteiro), consumido por `useMembers.ts`, `useMemberDetail.ts`, `useCapital.ts`, `MemberListView.vue`, tabs Member* | INCOMPATIVEL-SCD (nome) / o dado é genérico | Renomear `CooperativeMember` para `Client`/`AccountHolder` e mover para `types/client.ts`; OU remover em conjunto com `views/cooperative/members/*` se forem descartadas em favor de `views/clients/*` | baixo |
| `type CooperativeRole = 'caixa'|'atendente'|'gerente'|'gerente_geral'|'diretor'|'conselheiro'|'auditor'` e campo `cooperative_role?` no `User` | `types/index.ts` (5, 16) | INCOMPATIVEL-SCD (valor `conselheiro`) / nome infeliz | Renomear tipo para `StaffRole` e campo para `staff_role`; remover o papel `conselheiro` (governança de cooperativa). Cuidado: campo vem do backend no login (ver 2.6) | backend |
| `revenue_cooperative`, `revenue_non_cooperative`, `expenses_cooperative`, `expenses_non_cooperative`, `result_cooperative`, `result_non_cooperative` | `types/accounting.ts` (43-50) | INCOMPATIVEL-SCD | Renomear para `_with_clients`/`_without_clients` ou remover a segregação; casa com o payload do COSIF no backend | backend, money-path |
| Ocorrências residuais de tipo em `types/dashboard.ts` | `types/dashboard.ts` (1) | GENERICO | Verificar no detalhe; provavelmente `cooperados_ativos` como chave de KPI (manter, ver dashboard) | baixo |

### 2.3 rotas / URLs

| Cluster | Arquivos (contagem) | Classificação | Ação proposta | Risco |
|---|---|---|---|---|
| Rotas `path: 'cooperative/branches...'`, `cooperative/members`, `cooperative/capital...`, `cooperative/surplus...`, `cooperative/refund-balances`, `cooperative/assemblies` (nomes `BranchList`, `Members`, `CapitalDashboard`, `SurplusList`, `Assemblies` etc.) | `router/index.ts` (79 matches; blocos linhas 794-893) | INCOMPATIVEL-SCD | Remover as rotas de surplus, capital, assemblies, refunds (conceitos inexistentes na SCD, já fora do menu). Para members, redirecionar `/dashboard/cooperative/members*` para `/dashboard/clients*` com redirect de compatibilidade em vez de simplesmente apagar | rota |
| Rotas `reports/cooperative/total|new|exited|missing-address|top-capital` (nomes `cooperative-report-*`) | `router/index.ts` (1285-1311) | INCOMPATIVEL-SCD | Renomear rota para `reports/clients/*` e nomes para `clients-report-*`, com redirect; o relatório de "quadro social" (total/novos/saídos) vira "carteira de clientes" | rota |
| Rotas `accounting/surplus-distribution` e `accounting/surplus-distribution/:id` (SurplusDistribution/SurplusAllocations) | `router/index.ts` (1228-1236) | INCOMPATIVEL-SCD | Remover (SCD não distribui sobras; já retirado do menu em AdminLayout linha 164) | rota |
| Rotas de relatórios de contas `reports/accounts/*-by-member` e `member-statement` (nomes `accounts-report-*-by-member`) | `router/index.ts` (1327-1353) e views correlatas | INCOMPATIVEL-SCD (só o termo "member") | Renomear "member" para "client" nos paths/nomes com redirect; o relatório em si (extrato por titular, cheque especial por titular, tarifas por titular) é válido para SCD | rota |
| Metadados `requiredRbac: 'cooperados.cadastro.view'`, `'cooperativa.associados.view'` em várias rotas (inclusive as novas de `clients`) | `router/index.ts` (linhas 39, 58, 73, 94, 825, 1288) | INCOMPATIVEL-SCD (nome da chave RBAC) | Renomear as chaves RBAC para `clients.*`; precisa casar com o backend que emite as permissões (ver 2.6) | backend |

### 2.4 relatórios (catálogo e composables de report)

| Cluster | Arquivos (contagem) | Classificação | Ação proposta | Risco |
|---|---|---|---|---|
| Grupo `code: 'cooperative'` no catálogo de relatórios, itens `cooperative.total/new/exited/missing_address/top_capital`, rotas `/dashboard/reports/cooperative/*`, `requiredPermission: 'member_view'` | `composables/useReportsCatalog.ts` (11 matches, linhas 105-148) | INCOMPATIVEL-SCD (nome) | Renomear grupo para `clients` e ids para `clients.*`; os relatórios (total de clientes, novos, saídos, endereço faltante, top capital) são válidos como carteira de clientes, exceto "top_capital" que pressupõe capital social (avaliar remover) | rota |
| `useCooperativeReports.ts`: chama `/v1/reports/cooperative/{total,new,exited,missing-address,top-capital}` e `/export`; tipos `MemberType`, `MemberStatus` | `composables/useCooperativeReports.ts` (11) + testes `__tests__/useCooperativeReports.spec.ts` (16) | INCOMPATIVEL-SCD (nome + endpoint) | Renomear composable para `useClientsReports.ts`, tipos `Member*` para `Client*`; endpoints `/v1/reports/cooperative/*` são contrato de backend, renomear exige mudança coordenada ou alias no backend | backend |
| Views de relatório de quadro social: `TotalMembersReportView`, `NewMembersReportView`, `ExitedMembersReportView`, `MissingAddressReportView`, `TopCapitalReportView` | `views/reports/cooperative/*` (5 arquivos, 1 match cada) | INCOMPATIVEL-SCD | Renomear pasta para `views/reports/clients/` e arquivos `*ClientsReportView`; `TopCapital` avaliar remover (capital social) | rota |
| Views de relatório de contas por titular: `OverdraftByMemberReportView`, `FeesByMemberReportView`, `MemberStatementReportView` | `views/reports/accounts/*` (2, 2, 1) | INCOMPATIVEL-SCD (só termo "Member") | Renomear "Member" para "Client" no nome do arquivo/rota; relatório válido | rota |
| Menções esparsas a "member" em `useAccountsReports.ts`, `useCreditReports.ts`, `useTreasuryReports.ts`, `useInvestmentsReports.ts`, `useCcReports.ts`, `ReportKpis.vue`, `ReportFilters.vue`, `ReportExportMenu.vue` | ~10 arquivos (1-3 matches) | GENERICO na maioria | Manter ou renomear label "member" para "cliente" de forma cosmética; `useAccountsReports.ts` chama `/cooperative/members` (backend) para popular seletor de titular, então o path é contrato vivo | backend (só o path) |

### 2.5 campos de dashboard / contábil

| Cluster | Arquivos (contagem) | Classificação | Ação proposta | Risco |
|---|---|---|---|---|
| Widget/KPI `cooperados_ativos` (cálculo de contas por cooperado, delta mensal) | `views/dashboard/widgetMap.ts` (67), `views/dashboard/WidgetRenderer.vue` (91-107), `views/dashboard/__tests__/personalizeOps.spec.ts` (4) | GENERICO (nome infeliz) | Manter o dado (é "clientes ativos", existe e é exibido). Renomear a chave `cooperados_ativos` para `clientes_ativos` é desejável, mas a chave vem do backend `dashboard/aggregator.ex` (ver 2.6) e casar isso é mudança de contrato. Baixa prioridade | backend |
| Widget `financeiro_sobras` / `FinanceiroSobrasSection.vue` (seção "Sobras" no dashboard financeiro) | `views/dashboard/widgetMap.ts` (229-231), `views/dashboard/components/sections/FinanceiroSobrasSection.vue` (1), `WidgetRenderer.vue` | INCOMPATIVEL-SCD | Remover a seção/widget de sobras (não existe sobra em SCD) | baixo |
| `AtividadeRecenteSection.vue` com referências a cooperado/associado | `views/dashboard/components/sections/AtividadeRecenteSection.vue` (7) | GENERICO | Manter, trocar label "cooperado/associado" por "cliente" de forma cosmética | baixo |
| ResultsView (Ato Cooperativo x Não Cooperativo) com `revenue_cooperative`, `result_non_cooperative` etc. | `views/accounting/ResultsView.vue` (8, linhas 184-214) | INCOMPATIVEL-SCD | Decisão contábil do dono: SCD não separa ato cooperativo. Ou remover os dois cards de segregação, ou renomear para "com clientes / sem clientes" se o COSIF ainda emitir os campos | money-path, backend |
| `SurplusDistributionView.vue`, `SurplusAllocationsView.vue`, `SurplusCalculateView.vue`, `SurplusDetailView.vue`, `SurplusListView.vue` (distribuição de sobras) | `views/accounting/Surplus*` (1+1) e `views/cooperative/surplus/*` (3 arquivos) | INCOMPATIVEL-SCD | Remover todas | money-path |
| `FinanceiroSobrasSection` correlatos e `FixedAssetsView.vue` (menções residuais) | `views/accounting/FixedAssetsView.vue` (1) | GENERICO | Verificar no detalhe; provável label solto, manter | baixo |

### 2.6 lógica / composables

| Cluster | Arquivos (contagem) | Classificação | Ação proposta | Risco |
|---|---|---|---|---|
| `useMembers.ts`, `useMemberDetail.ts`, `useMemberDashboard.ts` (CRUD de associado via `/cooperative/members*`) | 11 + 19 + 2 matches | INCOMPATIVEL-SCD | Superados por `useClients.ts` (que usa `/admin/merchants`). Preferência: remover se `views/cooperative/members/*` forem descartadas; senão renomear para `useClients*` e apontar para o endpoint SCD. Os paths `/cooperative/members` são contrato de backend | backend |
| `useCapital.ts` (capital social/quotas via API) | 11 matches | INCOMPATIVEL-SCD | Remover (capital social não existe em SCD) | backend |
| `useBranches.ts` + `useInstitution.ts` (nome institucional derivado de `/cooperative/branches`) | 7 + 3 matches | INCOMPATIVEL-SCD (path) mas USO VIVO | `useInstitution.ts` usa `useBranches` só para resolver o cabeçalho institucional (nome da instituição no topo da UI). Não remover sem substituir a fonte do nome. Renomear o path exige mudança de backend coordenada | backend |
| `stores/admin.ts`: `cooperativeRole = user.cooperative_role`, exportado como `cooperativeRole` | 14 matches | INCOMPATIVEL-SCD (nome) | Renomear para `staffRole`/`user.staff_role`; sincronizar com `types/index.ts` e com o backend do login (`v2/auth_controller.ex`) | backend |
| `useRbacPermissions.ts`: chaves `cooperados: ['CADASTRO']`, `cooperativa: ['COOPERATIVA']`, `hasCooperativePermission()` | 4 matches (linhas 46, 52, 100, 158) | INCOMPATIVEL-SCD (nome) | Renomear chaves RBAC e o helper `hasCooperativePermission`; precisa casar com as permissões emitidas pelo backend | backend |
| `SimulationDialog.vue` (crédito): busca avalista em `/cooperative/members`, `guarantor_source: 'cooperado'|'manual'`, texto "Nenhum cooperado encontrado" | `views/credit/components/SimulationDialog.vue` (15) | GENERICO na semântica, INCOMPATIVEL no rótulo | Fluxo de avalista é válido para SCD. Trocar rótulo "cooperado" por "cliente"; o path `/cooperative/members` é backend | backend (path), baixo (label) |
| `useLoanCollaterals.ts`: `/cooperative/members/{id}/assets/{assetId}/margin` | 1 match | GENERICO (fluxo vivo) | Fluxo de garantia de empréstimo é válido; só o path tem nome infeliz | backend |
| `NewEntryDialog.vue` (lançamento em conta): comentários e card "cooperado" | `views/accounts/components/NewEntryDialog.vue` (8, quase tudo comentário) | GENERICO | Manter; trocar "cooperado" por "cliente" nos comentários/labels de forma cosmética | baixo |
| `PixComplianceView.vue`: coluna `field="cooperado"` com fallback `data.member_name`/`entity_name` | `views/compliance/PixComplianceView.vue` (8) | GENERICO | Manter (é rótulo de titular no relatório de compliance PIX); ler chave `cooperado` do payload é contrato de dado, não mudar sem alinhar backend | backend (chave de dado) |
| `CadocReportsView.vue`: variável `cooperadoContracts` | `views/regulatory/CadocReportsView.vue` (8) | GENERICO | Renomear variável interna para `clientContracts` (cosmético, sem impacto externo) | baixo |
| `useMemberDashboard.ts`, `useLoanCollaterals`, e demais menções de "member" em composables de crédito/tesouraria/investimento/fee | ~10 arquivos com 1 match | GENERICO | Manter/renomear cosmético caso a caso | baixo |
| Testes que fixam nomes coop: `useCooperativeReports.spec.ts` (16), `ReportsHubView.spec.ts` (12), `personalizeOps.spec.ts` (4), `canSeeNavItem.spec.ts` (3), `useReportsCatalog.spec.ts` (1), `branchHeader.spec.ts` (2), `regulatory/types.spec.ts` (2), `ReportKpis.spec.ts` (3) | 8 arquivos de teste | acompanham o cluster que testam | Atualizar junto com o código que exercitam | baixo |

### 2.7 views de cooperativa (subárvore órfã)

| Cluster | Arquivos (contagem) | Classificação | Ação proposta | Risco |
|---|---|---|---|---|
| `views/cooperative/members/*` (MemberList/Create/Edit/Detail + 15 abas + 3 componentes) | ~20 arquivos (MemberListView 25, useMemberDetail 19, EmployersTab 5, ProfileTab 4, etc.) | INCOMPATIVEL-SCD | Superados por `views/clients/*`. Remover após confirmar que nenhuma rota viva depende deles (só `router/index.ts` referencia) | rota |
| `views/cooperative/capital/*` (Dashboard, Subscribe, TransactionList, MemberCapitalStatement/Transactions) | 5 arquivos (CapitalTransactionList 23, CapitalSubscribe 8, CapitalDashboard 4) | INCOMPATIVEL-SCD | Remover | rota, money-path |
| `views/cooperative/assemblies/AssemblyView.vue` (AGO/AGE, abrir/encerrar assembleia) | 1 arquivo (22) | INCOMPATIVEL-SCD | Remover (governança de cooperativa) | rota |
| `views/cooperative/surplus/*` (List/Calculate/Detail) | 3 arquivos (Surplus* 5+4+1) | INCOMPATIVEL-SCD | Remover | rota, money-path |
| `views/cooperative/branches/*` (BranchList/Create/Edit, ServicePointList) | 4 arquivos (BranchList 14, ServicePointList 13, BranchEdit 10, BranchCreate 9) | INCOMPATIVEL-SCD | Remover, mas antes desacoplar `useInstitution.ts` (que hoje deriva o nome institucional de agência) | rota, backend |
| `views/cooperative/refunds/RefundBalancesView.vue` (valores a devolver de capital) | 1 arquivo (5) | INCOMPATIVEL-SCD | Remover | rota, money-path |

### 2.8 backend correlato (fora do escopo de edição desta fase, mapeado para dimensionar contrato)

| Cluster | Arquivos (contagem) | Classificação | Ação proposta | Risco |
|---|---|---|---|---|
| Scope de rotas `/cooperative/{branches,members,capital,surplus,assemblies}` | `monetarie_web/router.ex` (174 matches; scope linha 1535) | INCOMPATIVEL-SCD (nome) | Fonte dos paths que o front consome. Renomear exige alias/redirect no backend para não quebrar telas vivas (crédito, loan collateral, accounts reports, branch header) | backend |
| Papéis cooperativos e conselho fiscal: `use_cases/cooperative/roles.ex`, `fiscal_council.ex`, plugs `cooperative_auth.ex`, `require_cooperative_permission.ex`, `cooperative_scope.ex` | 5+ arquivos (roles 23, fiscal_council 43, plugs 18/15/13) | INCOMPATIVEL-SCD | Renomear/remover papel `conselheiro`; alinhar com `CooperativeRole` do front | backend |
| Sobras: `use_cases/cooperative/surplus_engine.ex`, `surplus.ex` | 2 arquivos (42, 8) | INCOMPATIVEL-SCD | Remover motor de sobras | backend, money-path |
| Ato cooperativo x não cooperativo no COSIF: `use_cases/cosif/results_engine.ex`, `schemas/cosif/results.ex`, `use_cases/cosif/mapper.ex`, `flows/cooperativa.ex` | 4 arquivos (results_engine 54, results 22, cooperativa.ex 59) | INCOMPATIVEL-SCD | Fonte dos campos `revenue_cooperative` etc. Decisão contábil do dono sobre segregar ou não | backend, money-path |
| Auth emite `cooperative_role` e permissões `cooperados.*`: `controllers/v2/auth_controller.ex` | 1 arquivo (33) | INCOMPATIVEL-SCD (nome) | Renomear o claim/permissão; casar com store e RBAC do front | backend |
| `dashboard/aggregator.ex` emite KPI `cooperados_ativos` | 1 arquivo (14) | GENERICO (nome infeliz) | Renomear chave para `clientes_ativos` casando com o front (baixa prioridade) | backend |

---

## 3. Ações de ALTO RISCO (destacadas)

1. Endpoints `/cooperative/*` ainda têm consumidores VIVOS no front, não são código morto. `SimulationDialog.vue` (busca de avalista e ativos no crédito), `useLoanCollaterals.ts` (margem de garantia de empréstimo), `useAccountsReports.ts` (seletor de titular nos relatórios de conta) e `useInstitution.ts`/`useBranches.ts` (nome institucional exibido no cabeçalho de toda a UI) dependem de `/cooperative/members` e `/cooperative/branches`. Qualquer renome de path é mudança de contrato de backend e precisa de alias/redirect no `router.ex`, senão quebra crédito, relatórios e o cabeçalho institucional. Não apagar `useBranches`/`useInstitution` sem antes prover outra fonte para o nome da instituição.

2. Segregação contábil "cooperativo x não cooperativo" é money-path e atravessa front e backend. `types/accounting.ts`, `views/accounting/ResultsView.vue` e o COSIF do backend (`results_engine.ex`, `results.ex`, `flows/cooperativa.ex`) compartilham os campos `revenue_cooperative`/`result_non_cooperative` etc. Mexer aqui exige decisão explícita do dono sobre se a SCD segrega ou não ato com clientes, e qualquer edição deve preservar o batimento ao centavo dos balancetes/DRE. É a área mais perigosa da limpeza.

3. Rotas públicas navegáveis foram preservadas de propósito e viraram superfície de compatibilidade. As URLs `/dashboard/cooperative/*`, `/dashboard/accounting/surplus-distribution` e `/dashboard/reports/cooperative/*` seguem no `router/index.ts` mesmo fora do menu. Remover sem redirect quebra qualquer link salvo/bookmark. Para `members`, o alvo correto é redirecionar para `/dashboard/clients` (a tela SCD já existe em `views/clients/*` sobre `/admin/merchants`). Para surplus/capital/assemblies/refunds, remover é aceitável (conceito inexistente na SCD), mas idealmente com uma rota-catch que informe "recurso não aplicável à SCD" em vez de 404 seco.

Observação transversal de risco: o papel `conselheiro` (em `CooperativeRole`, `cooperative_role`, `roles.ex`, `fiscal_council.ex`) é governança de cooperativa e é emitido no login pelo backend; remover o valor sem alinhar o `auth_controller.ex` pode derrubar sessões de usuários que hoje carregam esse papel.

---

## 4. Ordem de execução sugerida (em ondas)

Onda 0 (decisões do dono, antes de tocar código):
- Confirmar se a SCD mantém alguma segregação contábil de ato com clientes (define o destino do cluster money-path 2.5/2.8).
- Confirmar que `views/cooperative/members/*` pode ser aposentado em favor de `views/clients/*` (define remover vs renomear no maior subárvore).

Onda 1, i18n primeiro (baixo risco, reversível):
- Remover/renomear chaves `cooperative.*` (surplus, capital, assemblies, refunds) e `docCouncil` nos 5 locales.
- Renomear labels `accounting.cooperative_result`/`non_cooperative_result`/`cooperativo` conforme decisão da Onda 0.
- Trocar rótulos visuais "cooperado/associado" por "cliente" (AtividadeRecenteSection, PixComplianceView, SimulationDialog, NewEntryDialog, CadocReportsView) sem tocar chaves de payload de backend.

Onda 2, types e store (baixo/médio):
- Renomear `CooperativeMember` para `Client`/`AccountHolder`, `CooperativeRole` para `StaffRole`, remover valor `conselheiro`.
- Renomear `cooperativeRole`/`cooperative_role` no `stores/admin.ts` e `types/index.ts` (coordenar com backend do login).
- Renomear campos de `types/accounting.ts` conforme Onda 0.

Onda 3, rotas e catálogo de relatórios (risco de rota):
- Adicionar redirects `/dashboard/cooperative/members* -> /dashboard/clients*`.
- Remover rotas de surplus/capital/assemblies/refunds e `accounting/surplus-distribution` (com catch informativo).
- Renomear grupo `cooperative` para `clients` em `useReportsCatalog.ts` e mover `views/reports/cooperative/*` para `views/reports/clients/*` (com redirect); avaliar remover `top_capital`.
- Renomear `*ByMemberReportView`/`MemberStatementReportView` para `*ByClient*`.
- Renomear chaves RBAC `cooperados.*`/`cooperativa.*` (coordenar com backend).

Onda 4, remoção da subárvore órfã (depende da Onda 0 e dos redirects da Onda 3):
- Remover `views/cooperative/{capital,surplus,assemblies,refunds}/*` e composables `useCapital.ts`.
- Remover `views/cooperative/members/*`, `useMembers.ts`, `useMemberDetail.ts`, `useMemberDashboard.ts` se confirmado o descarte; senão renomear.
- Desacoplar `useInstitution.ts` de `/cooperative/branches` (nova fonte do nome institucional) antes de remover `useBranches.ts`/`views/cooperative/branches/*`.
- Remover widget/seção `financeiro_sobras`/`FinanceiroSobrasSection.vue`.

Onda 5, backend correlato (contrato, fora desta fase de front, coordenado):
- Aliases/redirects de `/cooperative/*` no `router.ex` para os fluxos vivos, depois deprecação.
- Renomear claim `cooperative_role`/permissões `cooperados.*` no `auth_controller.ex`.
- Renomear KPI `cooperados_ativos` para `clientes_ativos` no `aggregator.ex` casando com o front.
- Tratar sobras (`surplus_engine.ex`) e segregação COSIF conforme Onda 0.

Onda 6, testes:
- Atualizar os 8 arquivos de teste que fixam nomes coop, acompanhando cada onda.

---

## Decisões do dono aprovadas (2026-07-07)

Estas decisões travam a Fase 2 e sobrepõem as recomendações abertas acima.

1. **Segregação contábil "ato cooperativo x não cooperativo": REMOVER inteira.** SCD não tem ato cooperativo. Remover os cards de `ResultsView.vue`, os campos `revenue_cooperative`/`non_cooperative`/`result_*` de `types/accounting.ts`, e a lógica correlata do COSIF no backend (`results_engine.ex`, `results.ex`, `flows/cooperativa.ex`). Money-path: revisão contábil cuidadosa, preservar o balancete/DRE ao centavo nos demais campos.
2. **Subárvore órfã `views/cooperative/*` (members/capital/surplus/assemblies/branches/refunds): REMOVER** (superada por `views/clients/*`), após desacoplar `useInstitution.ts` da fonte "branches" para o nome institucional.
3. **Endpoints `/cooperative/*` com consumidores vivos (crédito/avalista, garantia de empréstimo, relatórios por titular, cabeçalho institucional): manter funcionando via ALIAS/REDIRECT** no backend enquanto renomeio para o vocabulário SCD; nada de quebrar fluxo vivo.
4. Papel `conselheiro` no `CooperativeRole`/login: remover, alinhando `auth_controller.ex` e as chaves RBAC (`cooperados.*`/`cooperativa.*` viram `clients.*`).
