# Handoff — Padronização da UI do Admin + i18n (branch `feat/admin-ui-table-standardization`)

**Data:** 2026-07-14
**Branch:** `feat/admin-ui-table-standardization`
**Base:** sincronizada com `origin/main` (merge `94db9e7a`) — 0 commits atrás, 44 à frente.
**App:** `core/apps/admin` (Vue 3 + PrimeVue + vue-i18n, 5 idiomas)

## Objetivo

Padronizar, menu-a-menu, o topo das telas do Admin com um cabeçalho reutilizável
(`AppPageHeader`: ícone igual ao do menu + título + descrição via i18n), largura de
conteúdo consistente, tabelas em card e filtros em `AppTableToolbar` — além de
internacionalizar o corpo das telas (pt-BR/en/es-ES/fr/zh-CN) e corrigir bugs
encontrados no caminho.

## Números

- **138 arquivos** alterados · **+10.993 / −3.871** linhas (3-dot vs `main`).
- **35 commits** de feature/fix/style (fora os merges).
- **i18n:** ~1.041 chaves novas **por idioma** (5 arquivos de locale, +5.205 linhas no total).
- **Validação:** `vue-tsc --noEmit` = **0 erros** (inclusive pós-merge da main).

## Componentes reutilizáveis (base da padronização)

- `src/components/AppPageHeader.vue` — cabeçalho-card com slot `#icon`, `#actions` e `#description`.
- `src/components/AppTableToolbar.vue` — barra de filtros/ações acima das tabelas (slot default + `#actions`).
- `src/components/AppDataTable.vue` — tabela padronizada (bordas arredondadas, grids `auto-fit`/`auto-fill`).

## Escopo por seção do menu

### Headers padronizados (AppPageHeader) — **todas as 12 seções**
| Seção | Telas | Observações |
|-------|-------|-------------|
| ADMINISTRAÇÃO | cabeçalhos + i18n | — |
| CADASTRO | cabeçalhos + largura padrão no onboarding | — |
| COMPLIANCE | cabeçalhos + tabelas em card | — |
| CONTA CORRENTE | cabeçalhos + i18n + tabelas em card | KPIs 3+3 |
| CONTABILIDADE | 9 telas | 3 views grandes com i18n de corpo |
| CRÉDITO | headers + i18n parcial | ver "Pendências" |
| INVESTIMENTO | 3 telas | KPIs da Mesa de Renda Fixa 4+3 |
| OPERAÇÕES | 6 telas | Reconciliação KPIs 3+3 |
| REGULATÓRIO | 12 telas + Painel Regulatório | corrige TS pré-existente do CadocReports |
| RELATÓRIOS | ReportsHub | — |
| SEGURANÇA | 3 telas | corpo i18n completo |
| TESOURARIA | 7 telas | — |

### i18n de corpo (namespaces novos, 5 idiomas)
- **CONTABILIDADE:** `contab.*` (subgrupos common/results/nonUse/managerial/period/fixed/liquidity/journal/chart/reports) + `cc.*` / `ccDict.*` (Conta Corrente).
- **CRÉDITO:** `credito.*` — consignors, loans, payroll, accrual, riskLevels, tiers, **risk4966Body** (Risco 4966, corpo completo: filtros, KPIs, tabela, 4 diálogos, toasts, labels de carteira/garantia). `common.months` (1–12) reutilizável.
- **SEGURANÇA:** `ipWhitelist.*` (view estava órfã do namespace — ligada; chave `cidrInvalid` adicionada). API Keys e Configurações PIX já estavam i18n.
- **Cabeçalhos:** `pageHeaders.*` estendido para todas as seções; `reportsHub`, `regulatoryPanel`, `treasury*`, `apiKeys`, `pixSettingsHdr`, etc.

Boundaries mantidos em pt-BR por serem dado regulatório/técnico: modalidades BACEN,
headers de export CSV, tradutor de erros de validação do backend.

## Backend — Perfil do cliente grava em `cooperative_members` (`039f1917`)

`core/backend/lib/monetarie_web/controllers/admin/merchants_controller.ex` (+157) e teste
(`merchants_controller_test.exs`, +84, 3 casos críticos).

- `update_user_profile/2` → `persist_user_profile/2`: `Repo.transaction` atômico gravando
  identidade em `users` **e** perfil no `cooperative_members` canônico
  (`Member.update_changeset/2`), com rollback e payload mesclado no retorno.
- `canonical_member/1`: linha mais antiga por `inserted_at` (PK é UUID).
- `member_profile_attrs/1`: camelCase→snake, ignora `nil`/`""` (protege campos preenchidos,
  evita quebra de cast em date/decimal). `gender` ignorado (sem coluna).
- **Decisões do dono:** members duplicados → só a linha canônica; user sem member → grava só
  identidade; email/phone espelhados nos dois lados.
- **Deploy pendente:** `core-api` em HML para o fix valer no ambiente remoto.

## Ajustes de layout/UX (commits `style(...)`)

- Configurações PIX: campo TTL do cache DICT em linha de configuração (label esq. / input+Salvar dir.).
- Lançamentos em CC: filtro de datas separado da busca de conta (vira toolbar da tabela).
- Disponibilidades: largura total + grid `auto-fill` dos cards.
- Espaçamento após header (`<br>`), tabelas/conteúdo em Card e bordas mais visíveis em diversas telas.

## Bug corrigido no caminho (ambiente dev)

Endpoint `GET /api/v1/credit/loan-products` retornava 500 (`42703 column "principal_account"`)
por drift do schema local (`loan_products_historic` recriada pelo ETL sem colunas). Corrigido
**só em dev local** (re-run das migrations idempotentes `20260707120000/130000`); **sem mudança
de código**.

## Merge da `main` (`94db9e7a`)

13 commits da main integrados **sem conflitos**. Novidades relevantes trazidas: `ReceiptsReportView`
(Tesouraria), validação de débito PIX/SPB (`core_debit_validation`, client debit gate), i18n do
SPB frontend. `vue-tsc` continua 0 erros; namespaces de i18n da branch coexistem sem duplicata.

## Pendências (não feitas)

- **CRÉDITO — corpo:** `LoanProductsView` (~2.170 linhas, ~150 strings; a maior view do admin) e os
  componentes de detalhe de `LoansView` (LoanDetail, SimulationDialog **85 KB**, SimulationSearch,
  EditSimulationDialog, ContractAddendumDialog). Recomenda-se passada dedicada por tamanho.
- **i18n de corpo:** INVESTIMENTO (3 views), OPERAÇÕES (6), REGULATÓRIO (12) — headers ok, corpo pendente.
- **Deploy:** `core-api` HML para o dual-write do perfil.
- **PR** para `main`.

## Não commitado (WIP de dev-env — intencional)

`.gitignore`, `docker-compose.yml`, `pix/frontend/admin/package-lock.json`, `.tool-versions`,
`dev.sh`, `scripts/*`, `docs/operator/2026-07-09-*` — arquivos locais de ambiente, deixados fora
dos commits por combinação.

## Commits da branch (mais recentes primeiro)

```
3eddb345 style(core-admin): ajusta largura e grid dos cards em Disponibilidades
4cddbeb7 style(core-admin): separa busca e filtro de datas em Lançamentos em CC
2c347f86 style(core-admin): ajustes de layout/espaçamento em telas do admin
e4cbdfbf style(core-admin): TTL do cache DICT na mesma linha, input à direita (Configurações PIX)
6ead7a1d feat(core-admin): i18n do corpo de IP Whitelist (IpWhitelistView)
b9c37187 feat(core-admin): padroniza header do Painel Regulatório (AppPageHeader)
385a27fd feat(core-admin): i18n do corpo de Risco 4966 (RiskClassification4966View)
a2796270 feat(core-admin): padroniza headers de TESOURARIA (7 telas)
ae546dc0 feat(core-admin): padroniza headers de SEGURANÇA (3 telas)
36a39bf4 feat(core-admin): padroniza header de RELATÓRIOS (ReportsHubView) + i18n
39330f86 feat(core-admin): padroniza headers de REGULATÓRIO (12 telas) + corrige TS do CadocReports
11d5d27e fix(core-admin): KPIs de Reconciliação em 3 colunas (3+3)
589c8100 feat(core-admin): padroniza headers de OPERAÇÕES (6 telas)
5b9f9d2a feat(core-admin): padroniza headers de INVESTIMENTO + KPIs da Mesa de Renda Fixa
2dccd292 feat(core-admin): i18n de Alçadas (ApprovalTiersView)
f784c6b6 feat(core-admin): i18n de Carteiras 4966 (RiskLevels4966View)
be4fb405 feat(core-admin): i18n de Correção de Juros (LoanAccrualView)
f22665a1 feat(core-admin): i18n de Consignação (PayrollListView) + common.months reutilizável
bb35c778 feat(core-admin): i18n do LoanSearch (colunas, filtros e status de Empréstimos)
bef4295c feat(core-admin): i18n de Empréstimos (LoansView + KPIs do dashboard)
3cd567d2 feat(core-admin): padroniza headers de CRÉDITO + i18n de Consignantes + KPIs de Empréstimos
f18417bd feat(core-admin): i18n das 3 telas grandes de CONTABILIDADE
bed488c8 feat(core-admin): tabelas em card + ajuste de bordas (compliance/PIX + componentes)
5ef89f9a feat(core-admin): padroniza CONTA CORRENTE e CONTABILIDADE (header + i18n + tabelas em card)
039f1917 feat(core-admin): perfil do cliente lê/grava em cooperative_members
b20ccb4a feat(admin): i18n do ClientConfig + toggle de compliance PIX-IN e ajustes de UI
9e2d906b feat(admin-ui): padroniza a secao Compliance (AppPageHeader + tabelas em card)
2faeca34 style(admin-ui): borda dos cards de tabela/toolbar mais visivel (--flx-border)
a4eee618 i18n(admin): chaves dos cabecalhos da secao Compliance (5 idiomas)
c74dd577 feat(admin-ui): AppPageHeader nos menus de cadastro + largura padrao no onboarding
f7dd9a45 refactor(admin-ui): padroniza cabecalhos/superficie e limite de largura do conteudo
4444b922 feat(admin-ui): AppPageHeader padronizado nos cabecalhos de administracao
0ffcbb27 i18n(admin): chaves dos cabecalhos de administracao (5 idiomas)
ebf9131e refactor(admin-ui): padroniza tabelas com AppDataTable/AppTableToolbar + grids auto-fit
be48c794 feat(admin-ui): componentes AppDataTable/AppTableToolbar + bordas arredondadas
```
