Esta proposta consolida:
O objetivo é criar uma camada externa de automação desacoplada do Flwe, utilizando Python, FastAPI, LangGraph, Redis, RabbitMQ e crawlers especializados.
O mapa mental abaixo resume a proposta em uma visão executiva, conectando contexto, arquitetura, fluxos, tecnologia, riscos e evolução da plataforma.
A Athina Seguros possui processos manuais envolvendo:
O Flwe já existe e continuará sendo:
A automação NÃO modificará o código do Flwe.
Construir uma plataforma:
Capaz de:
| Princípio | Aplicação |
|---|---|
| Baixo acoplamento | Não alterar o Flwe |
| Evolução incremental | MVP simples e crescimento gradual |
| Clean Architecture | Separação de domínio e infraestrutura |
| Resiliência | Retry, fallback e DLQ |
| Observabilidade | Logs, métricas e auditoria |
| Escalabilidade | Workers e filas |
| Segurança | Controle de credenciais e rastreabilidade |
O LangGraph será o orquestrador, cérebro do fluxo.
Responsabilidades:
Exemplo de estados:
CREATED
EMAIL_RECEIVED
DOCUMENT_EXTRACTED
WAITING_VALIDATION
READY_TO_SYNC
SYNCING_QUIVER
COMPLETED
FAILED
RETRYING
ARCHIVED
Redis será usado para evitar acessos repetitivos ao banco do Flwe durante uma automação.
Uso:
automation:task:{task_id}:context
{
"task_id": "uuid",
"proposal_id": "123",
"customer_name": "Cliente Exemplo",
"document": "policy.pdf",
"insurer": "HDI",
"product": "Auto",
"status": "DOCUMENT_EXTRACTED",
"attempts": 2,
"last_error": null
}
Redis é cache e estado temporário.
A fonte definitiva continua sendo o banco do Flwe e/ou banco operacional da automação.
RabbitMQ será usado para processamento assíncrono robusto.
Uso:
Estratégia:
Funções:
Os diagramas anteriores mostram a arquitetura e os fluxos em alto nível.
Os diagramas de sequência abaixo detalham quem chama quem, em qual ordem, e como os serviços interagem durante a execução real.
Essa seção é importante para alinhar o comportamento esperado entre desenvolvimento, infraestrutura, gestão do projeto e evolução futura da solução.
Este fluxo representa a primeira entrega recomendada para o MVP, focada em documentos recebidos por e-mail, extração de dados e atualização do Quiver.
Este fluxo acontece quando a extração automática não tem confiança suficiente ou quando os dados extraídos não batem com as regras esperadas.
Este fluxo representa a execução dos crawlers para portais de seguradoras.
O Firecrawl é tratado como ferramenta principal candidata, com fallback para Playwright e SeleniumBase.
Este fluxo mostra como evitar consultas repetidas ao banco do Flwe durante a mesma automação.
Este fluxo mostra como as tarefas serão distribuídas para workers e como falhas recorrentes serão tratadas.
Este fluxo mostra como um operador ou usuário técnico pode solicitar retry manual após corrigir dados ou identificar falha temporária.
src/ # Código-fonte principal da aplicação.
domain/ # Camada mais importante. Contém regras puras de negócio.
entities/ # Objetos com identidade e ciclo de vida.
# Ex: AutomationTask, Policy, Proposal, Insurer, Document.
value_objects/ # Objetos imutáveis que representam valores do domínio.
# Ex: CPF, CNPJ, Money, PolicyNumber, TaskStatus, ConfidenceScore.
repositories/ # Interfaces de persistência que o domínio espera.
# Ex: TaskRepository, PolicyRepository, DocumentRepository.
services/ # Regras de negócio que não pertencem a uma única entidade.
# Ex: PolicyMatchingService, CommissionRuleService, ValidationService.
app/ # Camada de aplicação. Coordena casos de uso.
use_cases/ # Ações que o sistema executa.
# Ex: ProcessIncomingEmail, ExtractDocumentData, SyncWithQuiver.
dto/ # Objetos de entrada e saída entre camadas.
# Ex: ExtractedPolicyDTO, CreateAutomationTaskDTO.
ports/ # Contratos para comunicação com mundo externo.
# Ex: EmailPort, QuiverPort, CrawlerPort, StoragePort, QueuePort.
infrastructure/ # Implementações concretas e detalhes técnicos.
database/ # SQLAlchemy/SQLModel, conexões, migrations e repositories concretos.
queues/ # RabbitMQ, producers, consumers, retries e dead-letter queue.
crawlers/ # Firecrawl, Playwright, SeleniumBase e crawlers por seguradora.
email/ # IMAP, Gmail API, Microsoft Graph ou outro provedor de e-mail.
quiver/ # Cliente de API ou automação para integração com Quiver.
storage/ # PDFs, arquivos baixados, documentos processados e logs brutos.
presentation/ # Camada de entrada e saída.
api/ # Rotas FastAPI, controllers, dependencies e middlewares.
workers/ # Entrypoints de execução assíncrona.
# Ex: email_worker.py, document_worker.py, crawler_worker.py.
schemas/ # Schemas Pydantic específicos de request/response da API.
O Diagrama de Classes abaixo representa uma primeira visão do domínio da automação.
Ele não tem o objetivo de definir todos os atributos finais do banco de dados, mas sim mostrar as principais entidades, objetos de valor, serviços de domínio e contratos que sustentam a arquitetura.
Este diagrama mostra como as classes podem ser organizadas dentro da Clean Architecture.
O Diagrama de Classes deve ser tratado como uma visão inicial do design, não como contrato definitivo de implementação.
Durante a implementação, algumas classes podem ser divididas, renomeadas ou simplificadas conforme:
Diferente do Diagrama de Classes, que representa o código Python e o domínio da aplicação, o ERD abaixo representa uma sugestão inicial de tabelas próprias da camada de automação.
Como o banco do Flwe já existe, este modelo não tenta substituir nem redesenhar o banco atual.
A ideia é criar apenas tabelas auxiliares para controle da automação, rastreabilidade, documentos, retries e integração com os fluxos existentes do Flwe.
| Tabela | Propósito |
|---|---|
automation_task |
Controlar cada automação executada |
automation_task_event |
Registrar trilha de auditoria e eventos da tarefa |
automation_document |
Registrar documentos recebidos ou baixados |
extracted_data |
Guardar dados extraídos dos PDFs/documentos |
manual_validation |
Controlar validações humanas realizadas no Flwe |
quiver_sync |
Registrar tentativas de cadastro/atualização no Quiver |
automation_retry |
Registrar histórico de tentativas e reprocessamentos |
insurer_config |
Configurar seguradoras, portais e estratégia de crawler |
credential_reference |
Referenciar credenciais protegidas em cofre/secret manager |
crawler_execution |
Registrar execuções dos crawlers por seguradora |
As entidades FLWE_PROCESS e FLWE_USER no ERD são representações simbólicas.
Elas indicam que a automação terá relacionamento com dados já existentes no Flwe, mas o nome real das tabelas dependerá da estrutura atual criada pelo Emerson.
Na implementação, essas referências podem apontar para:
A recomendação é evitar misturar tudo diretamente nas tabelas principais do Flwe.
Preferência:
Banco Flwe existente
├── tabelas atuais do Flwe
└── schema separado para automação
├── automation_tasks
├── automation_documents
├── extracted_data
├── manual_validations
├── quiver_syncs
├── crawler_executions
└── audit_events
Exemplo:
CREATE SCHEMA automation;
Isso mantém:
A arquitetura foi desenhada para:
Após revisão das transcrições, resumos e mapa mental, os detalhes adicionados permanecem altamente alinhados com o que foi discutido nas reuniões.
Os principais pontos confirmados:
Apesar da proposta apresentar uma visão completa de microserviços e múltiplos workers, a recomendação continua sendo:
Isso mantém aderência ao que foi discutido sobre:
O Firecrawl continua sendo uma excelente opção candidata principal para crawling e extração.
Porém, conforme discutido tecnicamente:
Por isso, a arquitetura mantém fallback progressivo:
O ERD apresentado representa apenas a camada complementar da automação.
O banco principal do Flwe:
A automação apenas:
Após nova revisão comparando:
a proposta permanece muito coerente e ainda mais madura arquiteturalmente.
Os novos detalhes adicionados melhoraram significativamente:
Na seção de roadmap, RabbitMQ aparece apenas na Fase 3.
Porém, como os fluxos já dependem diretamente de:
o RabbitMQ deve ser considerado parte do MVP inicial.
A recomendação ajustada é:
O uso do LangGraph está muito alinhado com o objetivo da solução.
Porém, é importante deixar explícito que:
Ele atua como:
RabbitMQ continua responsável por:
Os diagramas ficaram extremamente ricos, o que é excelente para visão futura.
Porém, para evitar interpretação equivocada por stakeholders não técnicos, recomenda-se reforçar que: