# Projeto: HISCON 360 â€“ Parser, Painel e Motor de Oportunidades

## 1. VisÃ£o Geral
- **Objetivo**: ingerir o extrato HISCON (layout fixo) de cada lead, estruturar os dados e abastecer um painel no CRM com suporte a simulaÃ§Ãµes manuais e geraÃ§Ã£o automÃ¡tica de oportunidades via motor de regras.
- **Escopo**:
  1. Upload, parsing e armazenamento do HISCON (PDF + payload JSON).
  2. Card exclusivo no detalhe do lead exibindo o snapshot atual e histÃ³rico.
  3. SimulaÃ§Ãµes manuais por contrato (checkbox + aÃ§Ã£o â€œSimular oportunidadeâ€), com sugestÃ£o do melhor banco/produto para atender cada parcela.
  4. Motor de regras mensal que avalia leads com HISCON, projeta prÃ³ximas oportunidades e agenda automaticamente follow-ups no mÃ³dulo de agendamentos.
- **Perfil de usuÃ¡rios**: Administrador, Corretor e FuncionÃ¡rio (mesma base de permissÃµes do mÃ³dulo de leads).

## 2. Arquitetura de Alto NÃ­vel
```
Upload PDF â†’ HisconParser â†’ lead_hiscon_snapshots (PDF + JSON)
                                         â†“
                               Lead Panel (card HISCON)
                                         â†“
             SeleÃ§Ã£o manual (checkbox)               Motor mensal
                  â†“                                       â†“
            SimulaÃ§Ã£o Oportunidade â†’ lead_opportunities â† OpportunityRuleEngine
```

## 3. Modelo de Dados

### 3.1 Tabela `lead_hiscon_snapshots`
| Coluna | Tipo | DescriÃ§Ã£o |
|---|---|---|
| `id` | PK | Identificador |
| `lead_id` | FK -> `leads` | Lead associado |
| `file_path` | string | Caminho do PDF armazenado em disco |
| `hash` | string | Hash SHA-256 para deduplicaÃ§Ã£o |
| `document_datetime` | datetime | Data/hora original do HISCON (cabeÃ§alho) |
| `verification_code` | string | CÃ³digo de autenticaÃ§Ã£o do INSS |
| `payload` | json | JSON estruturado (beneficiÃ¡rio, margens, contratos etc.) |
| `status` | enum (`ok`, `parser_failed`) | Estado do processamento |
| `errors` | json nullable | Lista de campos com problema (quando falha) |
| `created_by` | FK -> `users` | UsuÃ¡rio que importou |
| `created_at` / `updated_at` | datetime | Auditoria |

### 3.2 Tabela `lead_opportunities`
| Coluna | Tipo | DescriÃ§Ã£o |
|---|---|---|
| `id` | PK | Identificador |
| `lead_id` | FK -> `leads` | Lead alvo |
| `hiscon_snapshot_id` | FK -> `lead_hiscon_snapshots` | Snapshot base (opcional) |
| `contract_origin_code` | string | CÃ³digo do contrato avaliado (ex.: FIN0000) |
| `contract_number` | string | NÃºmero completo do contrato |
| `type` | enum (`portabilidade`, `refinanciamento`, `novo_consignado`, etc.) |
| `source` | enum (`manual_simulation`, `rule_engine`) |
| `payload` | json | Dados usados na anÃ¡lise (margens, taxas, parcelas) |
| `status` | enum (`nova`, `em_andamento`, `concluida`, `descartada`) |
| `priority` | tinyint | Prioridade sugerida (1-5) |
| `notes` | text | ObservaÃ§Ãµes do motor ou do usuÃ¡rio |
| `created_by` | FK -> `users` | UsuÃ¡rio (null para motor) |
| `created_at` / `updated_at` | datetime | Auditoria |

### 3.3 Tabela `opportunity_rules`
| Coluna | Tipo | DescriÃ§Ã£o |
|---|---|---|
| `id` | PK | Identificador |
| `name` | string | Nome amigÃ¡vel |
| `description` | text | ExplicaÃ§Ã£o da regra |
| `condition_expression` | text | ExpressÃ£o (ex.: JSONPath + operadores) |
| `action_type` | enum | Tipo de oportunidade gerada |
| `priority` | tinyint | Prioridade sugerida |
| `schedule` | enum (`monthly`, `weekly`, `on_import`) | FrequÃªncia |
| `enabled` | boolean | Ativa/inativa |
| `valid_from` / `valid_to` | datetime | Janela de aplicaÃ§Ã£o |
| `metadata` | json | Config extra (limiares, taxa mÃ­nima, etc.) |
| `created_at` / `updated_at` | datetime | Auditoria |

### 3.4 Tabela `opportunity_logs`
| Coluna | Tipo | DescriÃ§Ã£o |
|---|---|---|
| `id` | PK | Identificador |
| `lead_opportunity_id` | FK | Oportunidade relacionada |
| `rule_id` | FK -> `opportunity_rules` | Regra aplicada (quando motor) |
| `log_type` | enum (`created`, `updated`, `closed`, `error`) |
| `message` | text | Detalhe do evento |
| `payload` | json | Snapshot de dados usados |
| `created_at` | datetime | Auditoria |

## 4. Parser HISCON

### 4.1 Pipeline
1. **ExtraÃ§Ã£o de texto** com `PyPDF2` (texto nativo, sem OCR).
2. **NormalizaÃ§Ã£o**: remover quebras, ajustar encoding (acentos), separar seÃ§Ãµes.
3. **Mapeamento**:
   - BeneficiÃ¡rio: nome, benefÃ­cio, status, banco pagador, agÃªncia, conta, flags (procurador, representante, pensÃ£o).
   - Margens: disponÃ­vel, reservada, extrapolada, utilizada, base de cÃ¡lculo, total comprometido, mÃ¡ximo permitido.
   - Contratos Ativos: cÃ³digo, nÃºmero, banco, competÃªncia inicial/final, parcelas, valor parcela, valor emprestado, valor liberado (quando existir), CET, taxa de juros, datas de inclusÃ£o/primeiro desconto.
   - Contratos Reservados/ExcluÃ­dos: mesma estrutura (armazenar para histÃ³rico, opcional nos cards).
   - RMC/RCC: se disponÃ­vel, extrair limite e status.
4. **ValidaÃ§Ã£o**:
   - Campos obrigatÃ³rios (nome, nÃºmero do benefÃ­cio, pelo menos uma margem).
   - Prazo das parcelas (inÃ­cio/fim coerente).
   - Registro de warnings (ex.: valor extrapolado > 0).
5. **PersistÃªncia**: JSON final (beneficiary, margins, contracts_active, contracts_other, metadata).

### 4.2 JSON (snapshot)
```json
{
  "beneficiary": {
    "name": "...",
    "benefit_type": "...",
    "benefit_number": "...",
    "status": "...",
    "payment_bank": "...",
    "agency": "...",
    "account": "...",
    "flags": {
      "has_procurator": false,
      "has_representative": false,
      "alimony": false,
      "loan_enabled": true,
      "loan_eligible": true
    }
  },
  "margins": {
    "available": 0.0,
    "reserved": 1122.87,
    "extrapolated": 167.91,
    "used": 167.91,
    "consignable": 1175.38,
    "base_calculation": 3358.23,
    "total_committed": 1511.20,
    "max_committed": 1343.28,
    "benefit_margin_extrapolated": 0.0
  },
  "contracts": {
    "active": [
      {
        "origin_code": "FIN0000",
        "contract_number": "547697329",
        "bank": "QI SOCIEDADE DE CREDITO DIRETO S.A.",
        "situation": "ATIVO",
        "origination_type": "REFINANCIAMENTO",
        "inclusion_date": "2025-10-10",
        "competence_start": "11/2025",
        "competence_end": "10/2033",
        "installments": 96,
        "installment_value": 805.39,
        "principal_value": 36743.26,
        "released_value": 36230.45,
        "cit": {
          "cet_month": 1.76,
          "cet_year": 23.22,
          "interest_month": 1.72,
          "interest_year": 22.70
        },
        "first_discount": "2025-12-10"
      }
    ],
    "others": [
      { "...": "Contratos reservados/suspensos/excluÃ­dos" }
    ]
  },
  "metadata": {
    "document_datetime": "2025-10-15T15:04:16",
    "verification_code": "251015QWETOFH8VVZ6MU22",
    "pages": 16,
    "source": "hiscon_pdf_v2024",
    "parser_version": "1.0.0",
    "warnings": []
  }
}
```

## 5. UI â€“ Card HISCON (Lead)
### 5.1 Layout
- **Header**: â€œHISCON â€“ HistÃ³rico de EmprÃ©stimo Consignadoâ€ + badge com data da Ãºltima importaÃ§Ã£o.
- **BeneficiÃ¡rio & BenefÃ­cio**: nome, status, banco/conta, flags (alertas).
- **Margens**: tabela com colunas â€œDispoÂ­nÃ­vel, Reservada, Utilizada, Extrapolada, Base cÃ¡lculo, Total comprometido, MÃ¡ximo permitidoâ€.
- **Contratos Ativos**:
  - Tabela com colunas: `Selecionar`, `Origem/CÃ³digo`, `Banco`, `CompetÃªncia`, `Parcelas`, `Parcela`, `Valor contratado`, `Valor liberado`, `Taxa mensal`, `Taxa anual`.
  - Checkbox por linha (apenas contratos ativos/suspensos). BotÃ£o â€œSimular oportunidadeâ€ habilita quando hÃ¡ seleÃ§Ã£o.
- **HistÃ³rico** (colapsÃ¡vel): lista de importaÃ§Ãµes anteriores (data, usuÃ¡rio, link para baixar PDF).
- **AÃ§Ãµes**:
  - BotÃ£o â€œImportar novo HISCONâ€ (modal file upload).
  - BotÃ£o â€œBaixar PDFâ€ para o snapshot atual.
  - BotÃ£o â€œSimular oportunidadeâ€ (quando hÃ¡ seleÃ§Ã£o manual).

### 5.2 Estados
- **Sem HISCON**: card mostra CTA â€œNenhum HISCON importadoâ€ + botÃ£o de upload.
- **Parser falhou**: alerta vermelho â€œFalha ao processar arquivoâ€ + botÃ£o â€œReprocessarâ€.

## 6. SimulaÃ§Ã£o Manual
- Evento: usuÃ¡rio seleciona um ou mais contratos â†’ clica â€œSimular oportunidadeâ€.
- Backend: `HisconOpportunityService::simulate(lead, contracts, snapshot)`:
  - Calcula margem disponÃ­vel pÃ³s-quitaÃ§Ã£o/portabilidade.
  - Estima valor refinanciÃ¡vel (parcelas restantes Ã— parcela - saldo liberado).
  - Aplica regras rÃ¡pidas (ex.: se taxa > 1.8% ao mÃªs â†’ sugerir portabilidade).
  - Retorna payload com recomendaÃ§Ã£o, possÃ­veis ganhos (reduÃ§Ã£o de parcela, troco, etc.).
- Frontend: exibir resultado em modal com opÃ§Ã£o â€œGerar oportunidadeâ€ (cria registro `lead_opportunities` com source `manual_simulation`).

## 7. Motor de Regras (AutomÃ¡tico)
- **ExecuÃ§Ã£o**: comando `php automation hiscon:scan`.
  - FrequÃªncia: mensal (1Âº dia Ãºtil) + opcionalmente ao importar novo HISCON (`schedule = on_import`).
  - Seleciona leads com snapshot `status = ok`.
  - Recupera regras ativas de `opportunity_rules`.
  - Avalia cada contrato (JSONPath/expressÃµes) e cria/atualiza oportunidades.
- **Exemplo de regra**:
  - Nome: â€œPortabilidade taxa altaâ€.
  - CondiÃ§Ã£o: `contract.cit.interest_year > 25` **AND** `margins.available > 0`.
  - AÃ§Ã£o: criar oportunidade `type = portabilidade`, `priority = 4`, payload com taxa atual, parcelas restantes, recomendaÃ§Ã£o do banco mais competitivo e agendamento automÃ¡tico para contato futuro.
- **Logs/Auditoria**: `opportunity_logs` registra resultado (criado, jÃ¡ existia, descartado).
- **NotificaÃ§Ãµes**: ao gerar nova oportunidade, opcional disparar alerta (badge no lead, e-mail para corretor).

## 8. SeguranÃ§a e Compliance
- Armazenar PDFs e JSON em diretÃ³rio protegido (apenas usuÃ¡rios autenticados com permissÃ£o).
- Registrar importador e horÃ¡rio (auditoria LGPD).
- Oferecer mecanismo de exclusÃ£o do documento caso cliente solicite.
- Sanitizar exibiÃ§Ã£o (mascarar CPF parcialmente quando necessÃ¡rio).

## 9. Roadmap Detalhado
1. **Infra/Modelos**
   - Criar migrations das tabelas (`lead_hiscon_snapshots`, `lead_opportunities`, `opportunity_rules`, `opportunity_logs`).
   - Criar modelos Eloquent correspondentes + relacionamentos com `Lead`.
2. **Parser `HisconParser`**
   - Implementar serviÃ§o com testes unitÃ¡rios (input fixture â†’ JSON esperado).
   - Tratamento de erros e normalizaÃ§Ã£o (acentos, conversÃ£o de valores).
3. **Upload & API**
   - Rota `POST /leads/{id}/hiscon` (CSRF + ACL).
   - Controller aciona parser, salva snapshot, retorna status.
   - Logar eventos em `storage/logs/hiscon.log`.
4. **Card HISCON no Lead**
   - Atualizar `LeadController::show` para carregar snapshot.
   - Criar partial view `leads/partials/hiscon.php` com layout descrito.
   - Implementar modal de upload e aÃ§Ã£o de download.
5. **SimulaÃ§Ã£o Manual**
   - Endpoint `POST /leads/{id}/hiscon/simulate` (recebe array de contratos).
   - ServiÃ§o `HisconOpportunityService` calcula sugestÃµes, ranqueia bancos/produtos e retorna JSON.
   - Modal na view exibe resultado; botÃ£o â€œCriar oportunidadeâ€ (persistir em `lead_opportunities` e gerar registro em `lead_schedules` para contato futuro, quando aplicÃ¡vel).
6. **Motor de Regras**
   - Implementar `OpportunityRuleEngine` com suporte a expressÃµes (JSONPath + DSL simples).
   - Comando agendado `php automation hiscon:scan`.
   - Registrar logs, evitar duplicidades (oportunidade jÃ¡ aberta) e criar agendamentos automÃ¡ticos (tabela de lembretes) com base na data ideal de contato.
7. **HistÃ³rico & Reprocessamento**
   - Exibir lista de snapshots anteriores.
   - Permitir reprocessar (reparsear JSON) sem reenviar PDF.
8. **IntegraÃ§Ã£o WhatsApp (futuro)**
   - Possibilitar que oportunidade criada gere disparo de mensagem prÃ©-aprovada (ver doc `whatsapp-integration.md`).

## 10. Riscos & MitigaÃ§Ãµes
- **MudanÃ§a no layout HISCON**: monitorar cÃ³digo de versÃ£o (`metadata.source`), criar testes regressivos, flag `parser_failed` para revisÃ£o manual.
- **Falhas de parsing**: capturar exceÃ§Ãµes e registrar stack trace em log; reduzir dependÃªncia de regex frÃ¡gil.
- **Volume de dados**: armazenar snapshots antigos; considerar limpeza ou compressÃ£o apÃ³s X meses.
- **Motor de regras complexo**: iniciar com critÃ©rio simples; planejar UI futura para manutenÃ§Ã£o de regras.
- **Privacidade**: mascarar dados sensÃ­veis; limitar acesso Ã  equipe autorizada.

## 11. PrÃ³ximos Passos Imediatos
1. Aprovar esta documentaÃ§Ã£o.
2. Implementar migrations + parser + card HISCON (MVP).
3. Configurar cron (ou job scheduler) para o motor mensal.
4. RevisÃ£o conjunta com time comercial para ajustar regras.

## 12. ApÃªndices

### ApÃªndice A â€” Regras Finanto para Portabilidade e Refin
- **Escopos cobertos**: operaÃ§Ãµes de portabilidade e refin de portabilidade vinculadas Ã  Finanto.
- **Limites de idade**: regra geral atÃ© 69 anos e 10 meses; benefÃ­cios do tipo LOAS limitados a 66 anos e 10 meses. Aplicar restriÃ§Ãµes regionais (ver itens especÃ­ficos) antes da aprovaÃ§Ã£o.
- **Bancos proibidos**: rejeitar automaticamente contratos originados em QI, Inbursa, Safra, Pine, Facta, C6, BNP Paribas, PicPay ou Alfa (flag `eligible = false` independentemente do perfil).
- **Perfis de contrato** (avaliar total de parcelas, parcelas pagas ou restantes):
  1. *Perfil 1* â€” contratos com 1 a 12 parcelas pagas **ou** 83 a 72 parcelas restantes: aceitar apenas se `banco_origem` âˆˆ {Banrisul, Bradesco (237), ItaÃº (341), ItaÃº (029), Banco do Brasil, BMG, Digio, Caixa, Crefisa, PagBank, BRB, Sicoob, Inter, Nubank, Zema, Sicredi, Senff, Paulista}, `valor_parcela` â‰¥ 190, taxa de juros mensal â‰¥ 1,57%.
  2. *Perfil 2* â€” contratos com 12 a 20 parcelas pagas **ou** 72 a 64 parcelas restantes: aceitar apenas se `banco_origem` âˆˆ {Santander, Agibank, PAN, Daycoval, ParanÃ¡ Banco, Mercantil, Parati}, `valor_parcela` â‰¥ 190, taxa de juros mensal â‰¥ 1,38%.
  3. *Perfil 3* â€” contratos com mais de 20 parcelas pagas **ou** menos de 64 parcelas restantes: aceitar bancos elegÃ­veis de ambos os perfis anteriores (excluÃ­dos os bancos bloqueados), `valor_parcela` â‰¥ 97, taxa de juros mensal â‰¥ 1,17%.
- **Portabilidade pura**: aprovar somente quando o saldo devedor estimado for igual ou superior a R$ 8.000,00 e houver entre 80 e 95 parcelas restantes; exigir taxa mÃ­nima de 1,75% ao mÃªs.
- **Portabilidade com refin**: permitir quando o contrato gerar troco mÃ­nimo equivalente a 5% do endividamento apÃ³s refinanciamento. Dispensa taxa de entrada.
- **Tipos de tabela aceitos**: Seguro 25% (Power), Seguro 15% (Max) e Sem seguro. Persistir tipo escolhido no payload para auditoria.
- **Faixas de saldo e taxa**:
  - Saldo â‰¥ R$ 8.000,00: aceitar taxas entre 1,66% e 1,85% a partir de 1 parcela paga.
  - Saldo entre R$ 4.000,00 e R$ 7.999,99: exigir taxa mÃ­nima de 1,80% com pelo menos 12 parcelas pagas.
- **Bancos habilitados a partir de 12 parcelas**: Pan, Santander, ParanÃ¡ Banco, Parati, Mercantil, Agibank e Daycoval; usar essa lista como filtro adicional para perfis com maior maturidade.
- **RestriÃ§Ãµes adicionais**:
  - Calcular idade sempre a partir de `lead.date_of_birth` na data de processamento (considerar aniversÃ¡rio no ano corrente). O motor deve rejeitar casos sem data vÃ¡lida.
  - UF do benefÃ­cio em PB, AP, TO ou RR: sÃ³ aprovar se idade <= 59 anos.
  - BenefÃ­cio 32 ou 92 (invalidez previdenciÃ¡ria): aprovar apenas se idade >= 60 anos.
  - BenefÃ­cio 21: reprovar se idade > 45 anos.
  - Validar sempre o limite de comprometimento de 5% do endividamento total antes de aprovar.
- **InterpretaÃ§Ã£o da taxa**: os limiares â€œtaxa a partir deâ€ referem-se Ã  taxa de juros mensal registrada no HISCON (`taxa_juros_mes`). O motor deve garantir que o contrato analisado tenha taxa maior ou igual ao mÃ­nimo exigido pelo perfil.
- **SaÃ­das sugeridas**: ao aprovar, anexar ao payload da oportunidade o `perfil_finanto`, lista de bloqueios aplicados (quando houver), tipo de tabela selecionado e indicaÃ§Ã£o se o caso foi aceito por portabilidade pura ou refin (dependendo do saldo liberado estimado).
- **Margem livre detectada**: quando `margem_disponivel` > 0, sugerir oportunidade de â€œemprÃ©stimo novo Finantoâ€ com parcela alvo equivalente a 99% da margem livre. Se existir `margem_extrapolada`, subtrair esse valor antes de calcular a parcela sugerida. Bloquear casos em que a parcela resultante seja < R$ 20,00 (limite mÃ­nimo da Finanto).
- **Formato das indicaÃ§Ãµes**:
  - **OperaÃ§Ãµes imediatas**: exibir em lista (no card HISCON ou mÃ³dulo de oportunidades) a frase â€œIndicaÃ§Ã£o de operaÃ§Ãµes imediatas â€” Contrato {contrato}, parcela R$ {valor_parcela}, banco original {banco_origem}, tipo de operaÃ§Ã£o indicada: {tipo} para Finanto Bankâ€, acompanhada de botÃ£o â€œGerar simulaÃ§Ã£oâ€ que prÃ©-preenche a oportunidade com o payload calculado.
  - **OperaÃ§Ãµes futuras**: para contratos que ainda nÃ£o atendem as regras, mas cumprirÃ£ o critÃ©rio em data projetada, exibir lista â€œIndicaÃ§Ã£o de operaÃ§Ãµes futuras â€” Contrato {contrato}, parcela R$ {valor_parcela}, banco original {banco_origem}, tipo de operaÃ§Ã£o indicada: {tipo} para Finanto Bank (a partir de {data_prevista})â€, tambÃ©m com aÃ§Ã£o â€œGerar simulaÃ§Ã£oâ€ que agenda ou preenche a oportunidade.
  - **Status automático**: operações futuras identificadas devem ser criadas automaticamente como oportunidades com `status = agendada` e agendamento em `{data_prevista}`, permitindo disparo automático e antecipação via "Gerar simulação".
### ApÃªndice B â€” CÃ¡lculo de Parcelas Restantes (HISCON)
- **Campos necessÃ¡rios**: `data_inicio_desconto`, `data_fim_desconto`, `quantidade_parcelas` e `valor_parcela` presentes na seÃ§Ã£o de contratos ativos do JSON gerado pelo parser.
- **ReferÃªncia temporal**: considerar a data de processamento (`now()`) ajustada para o corte da folha INSS (todo dia 28 jÃ¡ contempla o prÃ³ximo ciclo). Caso o parser seja executado antes do dia 28, projetar parcelas futuras a partir do mÃªs corrente; apÃ³s o dia 28, incluir o prÃ³ximo desconto jÃ¡ provisionado.
- **Algoritmo sugerido**:
  1. Converter `data_inicio_desconto` e `data_fim_desconto` em objetos `DateTimeImmutable` (assumir dia 1Âº do mÃªs se o HISCON nÃ£o trouxer dia especÃ­fico).
  2. Calcular total de parcelas previstas usando `quantidade_parcelas`.
  3. Estimar parcelas pagas pela diferenÃ§a entre `data_inicio_desconto` e `now()` (limitado ao intervalo do contrato) dividida por ciclos mensais completos.
  4. `parcelas_restantes = max(0, quantidade_parcelas - parcelas_pagas_calculadas)`.
  5. Se `now()` ultrapassar `data_fim_desconto`, zerar `parcelas_restantes`.
- **ValidaÃ§Ã£o**: sempre que o HISCON trouxer nÃºmero de parcelas jÃ¡ pagas explicitamente, priorizar esse valor como â€œfonte oficialâ€ e usar o cÃ¡lculo acima apenas como fallback.
- **Uso no motor**: com `parcelas_restantes` e `parcelas_pagas` derivadas, o motor consegue classificar o contrato no perfil Finanto adequado e projetar saldo devedor e possibilidade de refin.

## 13. Plano de Implementação por Módulos

| Fase | Escopo | Entregáveis principais | Pré-requisitos | QA/Observações |
|------|--------|------------------------|----------------|----------------|
| **0. Preparação** | Setup de repositório, ambientes e dados de teste | Checklist de permissões, fixtures HISCON anonimizadas, definição de SLAs de parser | Aprovação desta documentação | Garantir controle de versão do layout HISCON (metadata `source`) |
| **1. Parser & Persistência** | Implementar `HisconParser`, migrations das tabelas e storage seguro | Serviço de parsing com testes unitários, migrations aplicadas, comandos de upload | Fase 0 concluída | Validar contra amostras reais; registrar falhas em log dedicado |
| **2. APIs & Upload** | Endpoints para ingestão e reprocessamento, ACL e logging | Rotas `POST /leads/{id}/hiscon`, reprocessamento, policies de acesso | Fases 0-1 | Testar fluxo com CSRF expirado, anexar eventos em `lead_hiscon_snapshots` |
| **3. UI do Lead** | Card HISCON, histórico, gatilho de simulação manual | Componentes Blade atualizados, UX responsiva, integração com Goal Dashboard quando aplicável | Fases anteriores | Revisar contraste/temas conforme perfis de usuário |
| **4. Motor de Regras Finanto** | `OpportunityRuleEngine` com regras Finanto e cálculo de parcelas | Engine com DSL mínima, scheduler `hiscon:scan`, oportunidades imediatas/futuras | Fases 1-3 | Cobrir perfis Finanto, idade, margem livre e status agendado nas operações futuras |
| **5. Simulações & Popups** | Modal de simulação, criação automática de oportunidades, popups de selo e leads atrasados | Serviço `HisconOpportunityService` expandido, popups reativos conforme requisitos do dashboard | Fases 3-4 | Ensaiar UX de popups para corretores/funcionários; validar acessibilidade |
| **6. Automação & Alertas** | Agendamentos, notificações internas, integrações futuras | Jobs no scheduler, notificações no painel e futuras integrações WhatsApp | Fases 4-5 | Garantir idempotência e registros em `opportunity_logs` |
| **7. QA Final & Implantação** | Testes integrados, performance, hand-off | Plano de testes por perfil (admin/corretor/funcionário), atualização do hand-off comercial, checklist LGPD | Todas as fases concluídas | Pilotar com subset de leads antes do rollout completo |

- **Governança**: cada fase deve encerrar com revisão técnica + validação do time comercial para garantir aderência às regras Finanto.
- **Dependências externas**: mapear eventual necessidade de atualização no módulo de agendamentos antes da Fase 4.
- **Métricas de sucesso**: taxa de parsing sem erro (>95%), tempo médio de sugestão automática < 1h pós-upload, conversão das oportunidades Finanto > baseline atual.


## 14. Orientacoes Complementares de Parsing
- Identificar cada valor de tabela combinando cabecalho de linha e coluna (ex.: margem_disponivel.rcc = linha 'Margem Disponivel*' / coluna 'RCC').
- Se qualquer cabecalho esperado nao for encontrado ou trouxer valor inconsistente, retornar status parser_failed e detalhar em errors.
- Validar margens por modalidade confrontando com o bloco 'Valores do Beneficio' antes de persistir o snapshot.

## 15. Diretrizes de UI para o Snapshop HISCON
- **Bloco “Informações do Benefício”**: cabeçalho com colunas `beneficio`, `especie`, `representante_legal`, `bloqueado_para_emprestimos`, `pensao_alimenticia`, `situacao`. Abaixo, sub-blocos com banco pagador (banco/meio pagamento/agencia/conta/DDB) e contribuição atual.
- **Cards de resumo**: sequência horizontal exibindo `valor_beneficio`, `base_de_calculo`, `margem_total_disponivel`, `margem_disponivel_aumento`, `margem_disponivel_rmc`, `margem_disponivel_rcc`. Cada card mostra título, valor formatado e tooltip opcional.
- **Tabela de contratos**: lista com colunas `Banco`, `Contrato`, `Averbação`, `Início/Final do desconto`, `Valor do contrato`, `Taxa`, `Parcela`, `Pagas/Total`. Incluir checkbox por linha para seleção manual e destaque da taxa (azul) e parcela (laranja) conforme print de referência.
- **Gatilhos**: manter botão “Atualizar margem” e ações contextuais no rodapé, reutilizando componentes padrões do dashboard para consistência visual.
