# Handoff sessao 2026-07-24 (tarde): defeito #7 vivo + STR0013 + branding onboarding + MFA + deploy

Branch `deepaudit/paridade-legadopix-2026-07-23`, PUSHADA. `main` intocada.

## 0. Comando de retomada (colar na proxima sessao)

```
/retomar

RETOMAR MONETARIE. Ler primeiro:
1. docs/handoff/2026-07-24-onboarding-branding-mfa-deploy-handoff.md (este)
2. docs/plans/2026-07-24-onboarding-nextcode-fixes-deploy.md (plano das pecas de onboarding)
3. Topo do MEMORY.md

ESTADO: defeito #7 (telas de reserva/LPI) DEPLOYADO e validado vivo nos 2 amb (ver
handoff 2026-07-24-defeito7...). Branding onboarding + MFA: correcoes commitadas e
DEPLOY em andamento/concluido (core-api + IB + merchant, HML+PRD). Revisoes vivas
atualizadas abaixo.

FILA (onboarding, decisoes do dono ja fechadas — nao re-perguntar; detalhe/causa-raiz
na secao 6b do handoff):
1. **Endereco vazio no detalhe PF (bug de serializacao)**: o serialize PF em
   admin/onboarding_controller.ex:292-328 NAO inclui os campos de endereco (o PJ
   inclui, linhas 354-360); o dado ESTA na base. Adicionar street/number/complement/
   neighborhood/city/state/cep (+ ocupacao) ao serialize PF. TDD + rebuild core-api.
2. **Status cru (personal_info/draft)**: mapear os status de etapa para rotulos
   amigaveis no normalize_pf_status (backend ~289) e no getStatusLabel/Severity do
   OnboardingQueueView.vue:261. TDD.
3. **Limpar 2 sujeiras draft em PRD**: apps onboarding_applications
   cfd00c06-99c3-42e6-912e-817a43df7da5 e c703436c-1b16-4aff-9551-b4502389546d
   (draft, sem nome/email). NAO apagar em PROD sem metodo definido pelo dono
   (propor soft-delete/arquivar por status draft).
4. **Unificar Nextcode na tela Onboarding + dossie**: a tela principal (Modelo A) deve
   mostrar/linkar a jornada Nextcode (Modelo B) correlata por CPF/email + o dossie
   "Ver documento PDF". admin/onboarding_controller.ex index + kyc_controller + tela. TDD.
5. **Dossie PDF robustez**: sync_status enfileira PdfFetcher no finish + cron fallback. TDD.
6. **PJ (Step8Kyc/Step4Sms)**: VALIDAR AO VIVO em HML a repeticao antes de editar
   (guards ja existem). Decisao: PJ dispara no SMS, KYC so acompanha, remover duplo
   completeStep.
7. **IB release**: pre-condicao do dono (secao 5) — validar em PRD o ciclo de
   redefinicao de senha por e-mail (SendGrid) ponta a ponta + runbook; MFA ja obrigatorio.
```

## 1. Defeito #7 (telas de reserva/LPI) — DEPLOYADO e validado vivo (madrugada 24/07)

Ver `docs/handoff/2026-07-24-defeito7-reserva-lpi-medicao-rtm-handoff.md`. Resumo:
BalanceRequests LSO/RSO + outbox PIX<->SPB + rail LPI vivo + fix do R1 rejeitado
notificar a cabine PIX. Validado vivo em HML (regra #11); PRD deployado (nenhum aporte
criado — 1o aporte = tesouraria do dono). Money-path confirmado por STR0013 (secao 2).

## 2. STR0013 + money-path PRD (grade aberta) — round-trip OK

Grade STR aberta (GEN0001R1 recebido). Submeti um STR0013 real em PRD pelo rail vivo
(Registry.build_message + RealDispatcher): assinado no HSM -> MQ -> BACEN -> STR0013R1
recebido e VERIFICADO. Saldo de reserva atual (BACEN): R$ 781,20, posicao 2026-07-24.
Follow-up: o helper `STREnhancedHandler.query_balance` tem bug latente (retorna lista
de elementos, nao XML serializado; XSD fail-closa) — usei o rail real; corrigir depois.

## 3. Branding + correcoes de onboarding — commitadas (TDD)

| # | Item | Commit | Servico |
|---|---|---|---|
| D | Logo NOVO da Monetarie na jornada Nextcode (era o antigo) | `cad886be` | core-api |
| F | Logo dos e-mails quebrado no SendGrid (OTP + auth) | `78795981` | core-api |
| A-PF | PF concluida nao reoferece "Abrir jornada" (fim da repeticao) | `7ded60e8` | IB (banking) |
| - | redirectTo Nextcode -> https://monetarie.com/ (era .com.br) + MFA prod | `b2ef4763` | core-api |

- **D**: default de codigo em `proposals.ex` usa `priv/nextcode/client_logo.png`
  (logo-monetarie-dark, wordmark; fundo da jornada e #FFFFFF); admin pode sobrepor.
- **F**: o adapter Swoosh SendGrid usa `content_id = attachment.filename`; o filename
  era `monetarie-logo.png` e o HTML referencia `cid:monetarie-logo` -> mismatch ->
  imagem quebrada. Fix: `filename == cid == "monetarie-logo"` em `otp_email.ex` e
  `emails/branded.ex`. Asset ja e o logo novo (gold). Vale p/ OTP e auth (reset/MFA).
- **A-PF**: `PendingView.vue` esconde o CTA quando `journeyStatus === 'finished'` e
  mostra "verificacao enviada, em analise" (i18n pt/en/es).
- **MFA (decisao do dono)**: em PRODUCAO o default nasce `strict` (runtime.exs) ->
  MFA OBRIGATORIO p/ members_pf/members_pj (IB e Merchant); EnsureMFA ja no pipeline
  V2/staff. `MFA_ENFORCEMENT=grace` (+ MFA_GRACE_DAYS) para rollout com tolerancia.

Suites: nextcode 29/0, e-mails 25/0, banking 262/262 + vue-tsc 0.

## 4. Deploy (24/07 tarde) — REVISOES VIVAS

Tags `*-b2ef4763-onboarding-20260724`. Frontends buildados por ambiente
(HML `VITE_APP_ENV=homologation` = selo Homologacao; PRD `production` = sem selo).
core-api env-agnostico (config via env/secrets). PREENCHER as revisoes ao concluir:

| Servico | HML rev | PRD rev |
|---|---|---|
| core-api | 215 | 104 |
| core-banking-ui | 53 | 15 |
| core-merchant-ui | 31 | 11 |

**MFA (decisao do dono 24/07, VIVO):** modo `members` (novo) — em PRD
`MFA_ENFORCEMENT=members` -> `members_pf=:required members_pj=:required`
(IB e Merchant obrigatorio), `platform_admins=:optional
cooperative_operators=:optional` (coreadmin INTOCADO). HML segue `optional`.
Validado ao vivo em PRD (core-api rev 104). Como o IB ainda nao tem clientes
ativos, nao afeta ninguem agora e fica pronto para a liberacao. `strict` (todos)
e `grace` (tolerancia) continuam disponiveis via MFA_ENFORCEMENT.

Rollback (se preciso): `aws ecs update-service --cluster <cl> --service <svc>
--task-definition <family>:<rev-anterior>` (HML core-api:213, banking:52, merchant:30;
PRD core-api:102, banking:14, merchant:10).

Sem migration nova (as de onboarding PF/Nextcode ja estavam aplicadas nos 2 bancos).
Validar pos-deploy: logo da jornada Nextcode novo; e-mail OTP com logo; PF concluida
sem repeticao; e-mails de auth com logo; MFA exigido em PRD para IB/Merchant.

## 5. Pre-condicao do dono para liberar o ib.monetarie.com aos clientes ativos

Para liberar o Internet Banking (`ib.monetarie.com`) aos clientes ativos, a area
usuaria precisa poder liberar caso a caso, e a pre-condicao e:

- **Reenvio/redefinicao de senha HABILITADO e com o fluxo por e-mail VALIDADO e
  FUNCIONAL** (o cliente recebe o e-mail de redefinicao, redefine e entra). Hoje o
  transporte e SendGrid (`EMAIL_TRANSPORT=sendgrid`); o logo dos e-mails acabou de ser
  corrigido (secao 3 item F), mas o FLUXO de reset (link/token -> nova senha -> login)
  precisa ser exercitado ponta a ponta em producao (1 caso real) e confirmado.
- So depois disso a area usuaria libera o IB para quem fizer sentido (rollout
  controlado). MFA obrigatorio (secao 3) ja e parte dessa postura de seguranca.

Acao aberta: validar o ciclo completo de redefinicao de senha por e-mail em PRD (com o
SendGrid) e confirmar entrega + login; documentar como runbook para a area usuaria.

## 6b. Achados no coreadmin PRD (dono revisou a tela /dashboard/onboarding 24/07)

Todos CONFIRMADOS na base de PRD (a tela le so o Modelo A onboarding_applications).

1. **2 sujeiras (status draft) a limpar da base** — apps abandonadas, sem nome/email/
   endereco: `cfd00c06-99c3-42e6-912e-817a43df7da5` (CPF 32189410835, 24/07 03:44) e
   `c703436c-1b16-4aff-9551-b4502389546d` (CPF 84833882000, 23/07 13:05). REGRA: NAO
   apagar em PROD sem metodo definido pelo dono (hard delete vs soft/arquivar). Propor
   soft-delete/arquivamento por status draft + sem progresso.

2. **Status como string crua (`personal_info`, `draft`) na lista e no detalhe** —
   `normalize_pf_status` (`admin/onboarding_controller.ex:~289`) so mapeia
   pending_review/verifying/auto_approved; os status de ETAPA (draft, personal_info,
   address, occupation, email...) passam crus. O frontend `OnboardingQueueView.vue:261`
   usa `getStatusLabel(data.status)` que nao tem rotulo para eles. Fix: mapear os
   status de etapa para rotulos amigaveis (backend + `getStatusLabel`/`getStatusSeverity`).

3. **Endereco VAZIO no detalhe PF apesar de existir na base** — o `serialize(%OnboardingApp{})`
   PF (`admin/onboarding_controller.ex:292-328`) **NAO inclui** os campos de endereco
   (street/street_number/complement/neighborhood/city/state/cep) nem ocupacao/renda; o
   `serialize(%BusinessOnboarding{})` PJ (linhas 354-360) INCLUI (`address_*`). O dado
   ESTA na base (app 5099ee7b tem Rodovia Tertuliano Brito Xavier, Florianopolis/SC).
   Fix: adicionar os campos de endereco (+ ocupacao) ao serialize PF, casando com a
   secao "Endereco" da tela `AdminKycDetailView`/detalhe. Precisa rebuild+deploy do
   core-api.

4. **Dossie Nextcode NAO disponivel nesta tela** — o Onboarding le so o Modelo A e nao
   linka a jornada/dossie Nextcode (Modelo B, tela "Revisao Nextcode"). Faz parte da
   peca de UNIFICACAO (fila item 2): a tela principal deve, para o applicant com jornada
   Nextcode correlata (por CPF/email), mostrar/linkar a proposta + o dossie
   ("Ver documento PDF").

## 6. Pendencias herdadas (contexto)

- Enviar PDF do HSM 504 a RTM (dono encaminha).
- Merge da branch -> main (decidir com o dono).
- Rotacionar as 2 keys SendGrid/Twilio coladas em chat.

Memorias: [[monetarie-deepaudit-paridade-legadopix-0723]] [[monetarie-institution-data]]
[[monetarie-email-twilio-sendgrid-sms-0723]] [[monetarie-hsm-rtm-504-latencia-0723]]
