HORA BEAUTY — V28.1 MOTOR FINANCEIRO UNIFICADO

HORA BEAUTY — V28.1 MOTOR FINANCEIRO UNIFICADO
================================================

IMPORTANTE
- Não execute a V28 anterior. A V28.1 substitui e consolida Mercado Pago Connect, Split & Comissões e Afiliados.
- Esta atualização exige: pasta src + SQL + deploy de 4 Edge Functions.
- Faça backup do banco antes da migration.

1) ATUALIZAR O FRONTEND
Substitua a pasta src pela pasta src deste pacote.

2) EXECUTAR NO SUPABASE SQL EDITOR
Execute somente:
sql/EXECUTAR_AGORA_V28_1_MOTOR_FINANCEIRO_UNIFICADO.sql

Depois execute:
sql/CONFERIR_DEPOIS_V28_1_MOTOR_FINANCEIRO_UNIFICADO.sql

Os campos de verificação devem retornar true e as contagens de exposição indevida devem retornar 0.

3) DEPLOY DAS EDGE FUNCTIONS
As funções prontas estão em supabase/functions:
- mp-oauth-iniciar
- mp-conectar
- mp-criar-pagamento
- mp-webhook

Comandos sugeridos:
npx supabase functions deploy mp-oauth-iniciar
npx supabase functions deploy mp-conectar
npx supabase functions deploy mp-criar-pagamento
npx supabase functions deploy mp-webhook --no-verify-jwt

4) SECRETS NECESSÁRIOS
Confirme no Supabase:
- MP_ACCESS_TOKEN
- MP_CLIENT_ID
- MP_CLIENT_SECRET
- MP_REDIRECT_URI
- MP_WEBHOOK_URL
- MP_WEBHOOK_SECRET
- APP_URL

SUPABASE_URL, SUPABASE_ANON_KEY e SUPABASE_SERVICE_ROLE_KEY são disponibilizados no ambiente das Edge Functions.
Nunca coloque MP_ACCESS_TOKEN, MP_CLIENT_SECRET ou SUPABASE_SERVICE_ROLE_KEY no frontend.

5) CONFIGURAÇÃO NO MERCADO PAGO
- O redirect OAuth precisa ser exatamente o mesmo de MP_REDIRECT_URI.
- O webhook deve apontar para a Edge Function mp-webhook.
- Configure a assinatura secreta do webhook e salve o mesmo valor em MP_WEBHOOK_SECRET.

FLUXOS IMPLANTADOS
- Serviços/produtos/pacotes/cartão presente/rifa própria: Mercado Pago do salão conectado.
- Global Shoptture: salão recebe e Hora Beauty recebe marketplace_fee.
- Afiliados: empresa libera uma parcela; afiliado, franqueado autorizado e Hora Beauty são calculados dentro dela.
- Assinatura oficial: Mercado Pago Hora Beauty; vendedor e franqueado são creditados pelo ledger.
- Recorrência oficial: cada pagamento cria uma transação financeira própria, sem duplicar ou perder comissão.
- Plano próprio da estação: cobrança centralizada; sem adesão usa recorrência. Quando houver adesão, a primeira cobrança é única para não repetir a adesão mensalmente e a renovação precisa ser tratada sem a taxa de adesão.
- Venda de estação/adesão/mensalidade da estação: somente Hora Beauty.
- Carteiras: taxa padrão configurável, inicialmente R$ 0,50 por transação.
- Créditos de busca/propostas: R$ 50,00 mensais debitados da carteira, com bloqueio por saldo insuficiente.
- Convênio: plano 100% Hora Beauty; sessão validada gera repasse idempotente para a credenciada.
- Marketing: R$ 4,90 reservado e confirmado apenas quando a arte termina; falha cancela a reserva.
- Autoatendimento: solicitação pela empresa/franqueado; preço e comissão definidos pelo Admin; adesão + primeiro mês no checkout; mensalidade posterior na carteira.
- Gestor Financeiro e Notificações API: contratos adicionais por cliente e cobrança mensal separada.
- Notificação interna sem API continua controlada pelo Premium.

SEGURANÇA
- OAuth com state e PKCE.
- Conta Mercado Pago da estação validada no servidor.
- Tokens nunca retornam ao navegador.
- Webhook com validação HMAC.
- Ledger financeiro imutável; estornos são lançamentos compensatórios.
- Idempotência por evento, pagamento, transação e repasse.
- Renovação de token OAuth pelo refresh_token.
- RLS e revogação de acesso direto às tabelas financeiras.

TESTES MÍNIMOS APÓS O DEPLOY
1. Conectar Mercado Pago de uma empresa e comprar um produto próprio.
2. Comprar no Global Shoptture e conferir salão + marketplace_fee.
3. Fazer venda de afiliado e conferir empresa, afiliado e Hora Beauty.
4. Assinar plano oficial por venda direta e por estação.
5. Simular segundo pagamento recorrente e conferir nova transação/novas comissões.
6. Carregar carteira e ativar créditos de R$ 50,00.
7. Gerar arte e conferir débito de R$ 4,90 somente após conclusão.
8. Validar uma sessão de convênio e conferir o crédito líquido da empresa.
9. Pagar implantação do Autoatendimento e conferir ativação.
10. Testar estorno de assinatura e de implantação.

OBSERVAÇÃO
O SQL foi estruturado para evitar UPDATE em massa sem WHERE e não usa ON CONFLICT DO UPDATE, devido à blindagem Safe Update já existente no banco do projeto.