Resumo técnico

Esta entrega implementa no front a camada pública de identificação e apresentação do parceiro. Isso significa que o Site consegue resolver uma configuração pública a partir do host, aplicar marca, limitar produtos visíveis e encaminhar um contexto de início de jornada. Esta entrega não implementa a identificação operacional definitiva do lojista. Essa parte depende do backend, porque envolve allowlist de domínio, credenciais, códigos FortCard, persistência, auditoria e validação contra a API.

Fluxo operacional esperado

O fluxo abaixo é o contrato recomendado para produção. Ele separa apresentação pública no navegador de decisão operacional no backend.
  1. A requisição chega por um domínio ou subdomínio.
  2. O navegador usa o host apenas para resolver uma configuração pública de apresentação.
  3. O Site aplica PublicTenantConfig, exibe a marca pública permitida e filtra enabledProducts.
  4. Ao iniciar uma jornada, o front envia PublicFlowContext com origem pública, produto escolhido e valores do formulário.
  5. O backend observa o host real recebido pelo servidor ou proxy confiável.
  6. O backend normaliza o host, valida uma allowlist e resolve o parceiro comercial vigente.
  7. O backend confirma se o produto público está habilitado para essa origem.
  8. O backend mapeia selectedProductId para os códigos operacionais FortCard.
  9. O backend persiste a correlação entre origem, lead, produto e proposta.
  10. Se houver divergência entre host observado e contexto recebido, o backend registra auditoria e bloqueia a operação.
Essa separação permite que o Site seja white label sem transformar o browser em fonte de autorização.

O que já existe no front

Arquivos envolvidos

src/shared/marca/publicTenantRuntime.ts

Define o contrato público de tenant usado pelas páginas públicas. Campos principais: Também contém:
  • fortcardPublicTenant: fallback FORT para ambiente local ou host sem configuração.
  • fictitiousPublicTenant: exemplo demonstrativo usado na rota /exemplo-white-label.
  • resolvePublicTenant(hostname): função que normaliza o host e retorna a configuração pública correspondente.
Regra importante: este arquivo não contém credencial, token, usuário, senha, strLojista, strLoja, código interno de produto ou qualquer valor operacional.

src/site/LandingEntryRoute.tsx

É a entrada das páginas públicas. Fluxo executado:
  1. Localiza o conteúdo da rota pública com findLandingEntryContent(route.publicPath).
  2. Resolve o tenant público com resolveLandingEntryTenant(content, window.location.hostname).
  3. Converte o tenant em marca visual com brandForPublicTenant(tenant).
  4. Verifica se o produto está habilitado com isLandingEntryEnabled(content, tenant).
  5. Renderiza home, landing de produto ou estado seguro de produto indisponível.
Se um produto não estiver habilitado para aquele tenant, a página não mostra a landing do produto e exibe uma mensagem segura de indisponibilidade.

src/site/PublicBrandScope.tsx

Aplica a marca pública nas páginas públicas por CSS variables. Variáveis principais: Esse escopo deve ser usado somente no Site, nas páginas de produto e nas páginas institucionais. Fluxos de Empréstimos e Área Logada continuam com marca FortCard.

src/site/landingEntryContent.ts

Centraliza o conteúdo das páginas públicas e a fronteira de início de jornada. Funções importantes: O evento disparado por beginPublicFlow usa o nome:
Payload público enviado:
Esse payload serve como contexto de navegação e intenção comercial pública. Ele não deve ser usado pelo backend como autorização.

Campos visíveis e campos operacionais

Checklist para backend

Antes de aceitar a criação ou retomada de uma proposta, o backend deve confirmar:
  • o host observado está na allowlist;
  • o parceiro comercial está ativo;
  • o produto público está habilitado para o parceiro;
  • o produto público foi mapeado para um código operacional válido;
  • campos FortCard operacionais foram resolvidos fora do navegador;
  • CPF, valor, prazo e dados informados foram validados;
  • a proposta foi vinculada a uma origem comercial auditável;
  • mensagens técnicas foram convertidas para erros seguros de tela.

src/site/pagina-inicial/HomeLandingView.tsx

Usa tenant.enabledProducts para:
  • filtrar os cards de solução exibidos na home;
  • filtrar banners vinculados a produtos;
  • usar banners públicos do tenant quando existirem;
  • manter um banner genérico FORT como apoio visual.

src/site/landings/ProductLandingView.tsx

Nas páginas de produto, o formulário inicial coleta CPF e valor desejado. Ao enviar, chama beginPublicFlow com:
  • tenantId;
  • partnerId;
  • sourceDomain;
  • selectedProductId;
  • cpf;
  • requestedAmount;
  • targetPath.
Exemplo de destino por produto:

O que o backend precisa assumir

O backend deve tratar o contexto público como uma dica de origem, não como fonte de verdade. Ao receber uma intenção de jornada, o backend deve:
  1. observar o host real recebido pelo servidor ou proxy confiável;
  2. normalizar o host;
  3. validar o host em allowlist;
  4. resolver o parceiro comercial vigente;
  5. confirmar se o produto está habilitado para o parceiro;
  6. mapear selectedProductId para o código operacional FortCard;
  7. resolver strLojista, strLoja, strProduto, strPlano e demais campos exigidos pela API;
  8. persistir origem comercial, produto escolhido e vínculo com a proposta;
  9. registrar auditoria quando houver divergência entre host observado e contexto recebido.

Relação com a API FortCard

O front trabalha com IDs públicos estáveis: A API FortCard pode exigir campos operacionais como strLojista, strLoja, strProduto e strPlano. Esses campos devem ser resolvidos pelo backend a partir da configuração comercial validada. Não exponha esses códigos no front. Se algum deles precisar aparecer em logs, use logs de backend com controle de acesso.

Cenários esperados

Como evoluir para produção

O front atual tem uma resolução local suficiente para demonstração e contrato técnico. Para produção, a recomendação é substituir a fonte local por uma configuração pública controlada pelo backend ou por arquivo gerado no deploy. Opções aceitáveis: Independentemente do modelo, o contrato visual pode continuar igual: o Site recebe PublicTenantConfig, aplica marca pública e envia PublicFlowContext ao iniciar uma jornada.

Exemplo de configuração pública

Este exemplo mostra o formato conceitual de uma configuração pública. Ele pode vir do backend, de um arquivo gerado no deploy ou de configuração por build.
O backend ainda precisa revalidar sourceDomain pelo host observado. O exemplo acima não substitui allowlist, configuração operacional ou credenciais.

Limite de confiança

Dados no browser ajudam a experiência, mas não definem autorização. Marca, banner, origem comercial pública e produto escolhido são contexto. Comissão, credencial, acesso, regras de crédito e códigos FortCard são sempre resolvidos e validados no backend.