📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Módulo 08: Bancos de Dados SQL e NoSQL. Recomendado revisar antes de começar.

🕸️ Rastreamento de Fraudes Financeiras em Grafos com Neo4j

v1.0 — Property Graphs, Linguagem Cypher e Detecção de Vínculos Suspeitos

Trilha de Engenharia de Dados & Bancos de Dados — Projeto 8 de 10

🎓 Nível Profissional Simulado: Fraud Prevention Engineer / Graph Data Architect. Redes criminosas utilizam identidades sintéticas compartilhando dispositivos, endereços de entrega e cartões de crédito. Em bancos relacionais, descobrir esses anéis exige dezenas de JOINs recursivos lentos. Em grafos (Neo4j), a travessia de arestas ocorre em tempo constante $O(1)$.


🎯 Objetivo

Modelar um banco de dados orientado a grafos (Property Graph) no Neo4j 5.x para prevenção a fraudes bancárias, criando nós para Cliente, Endereco e Dispositivo, conectando-os por relacionamentos tipados e executando consultas analíticas em Cypher Query Language para identificar anéis de fraude (Fraud Rings).


🏗️ Diagrama de Grafo de Conexões e Vínculos

graph LR
    classDef client fill:#1E3A8A,stroke:#3B82F6,stroke-width:2px,color:#fff;
    classDef device fill:#701A75,stroke:#D946EF,stroke-width:2px,color:#fff;
    classDef address fill:#065F46,stroke:#10B981,stroke-width:2px,color:#fff;

    C1["👤 Cliente: Marcos Souza"]:::client
    C2["👤 Cliente: Lucas Mendes"]:::client
    C3["👤 Cliente: Fernanda Lima"]:::client

    D1["📱 Dispositivo: Samsung S23<br/>dev_hash_998877"]:::device
    D2["📱 Dispositivo: iPhone 15<br/>dev_hash_112233"]:::device

    E1["🏠 Endereço: Rua Central, 120"]:::address
    E2["🏠 Endereço: Av. Paulista, 1500"]:::address

    C1 -->|REALIZOU_TRANSACAO_VIA| D1
    C2 -->|REALIZOU_TRANSACAO_VIA| D1
    C1 -->|RESIDE_EM| E1
    C2 -->|RESIDE_EM| E1

    C3 -->|REALIZOU_TRANSACAO_VIA| D2
    C3 -->|RESIDE_EM| E2

🧑‍💼 Fase 1 — Levantamento de Requisitos

O Briefing do Cliente (Equipe de Risco & Prevenção a Fraudes)

“Nossa fintech está sofrendo ataques de abertura de contas fantasmas. O fraudador cria CPFs diferentes, mas usa o mesmo celular antigo e coloca o mesmo endereço de entrega. No SQL tradicional, rodar uma consulta de 4 níveis de conexão para achar os comparsas travava o servidor. Precisamos de um grafo onde possamos perguntar: ‘Quais clientes distintos compartilham o mesmo celular e residem na mesma casa?’ e receber a resposta em milissegundos.”

Requisitos Funcionais (RF) e Não-Funcionais (RNF)

ID Tipo Descrição Origem no Briefing
RF01 Funcional Modelar entidades e conexões como Nós e Relacionamentos no Neo4j. “conectar clientes, celulares e endereços”
RF02 Funcional Detectar automaticamente anéis de fraude que compartilham dispositivos e locais. “quais compartilham o mesmo celular”
RF03 Funcional Encontrar o caminho mais curto (Shortest Path) entre contas suspeitas. “achar os comparsas”
RNF01 Não-Funcional Travessia de arestas sem índices (Index-Free Adjacency) em tempo real. Performance Antifraude
RNF02 Não-Funcional Constraints de unicidade para CPFs e Device Fingerprints. Integridade de Nós

📋 Fase 2 — Backlog & User Stories

ID User Story Prioridade
US01 Como analista de risco, quero visualizar no Neo4j Browser a teia de relações de um fraudador. Alta
US02 Como motor de risco, quero bloquear transações provenientes de dispositivos com múltiplos CPFs associados. Alta
US03 Como auditor de compliance, quero calcular a proximidade de rede entre dois clientes suspeitos. Média

🌿 Fase 3 — Engenharia em Equipe (Git Flow & Setup)

# Branch da funcionalidade
git checkout -b feature/US01-neo4j-fraud-ring

# Subir o Neo4j isolado via Docker
docker-compose up -d

# Acessar a interface Web do Neo4j Browser
# Abra no navegador: http://localhost:7474 (Usuário: neo4j / Senha: fraudpassword)

🛠️ Fase 4 — Implementação Passo a Passo (cypher/01_create_graph.cypher)

CREATE (c1:Cliente {cpf: "111.222.333-00", nome: "Marcos Souza"})
CREATE (c2:Cliente {cpf: "444.555.666-11", nome: "Lucas Mendes"})
CREATE (e1:Endereco {cep: "19800-000", rua: "Rua Central, 120"})
CREATE (d1:Dispositivo {fingerprint: "dev_hash_998877"})

CREATE (c1)-[:RESIDE_EM]->(e1)
CREATE (c2)-[:RESIDE_EM]->(e1)
CREATE (c1)-[:REALIZOU_TRANSACAO_VIA]->(d1)
CREATE (c2)-[:REALIZOU_TRANSACAO_VIA]->(d1);

🧭 Decisões Técnicas (ADRs)


🚀 Como Executar no Laboratório

1. Abra o terminal na pasta deste projeto

No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:

cd db_nosql_08_neo4j_grafos_fraude

2. Execute a aplicação ou testes

docker-compose up -d
# Executar a suíte de testes automatizados:
python -m unittest tests/test_neo4j_grafos.py

[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd catalogo_projetos/db_nosql_08_neo4j_grafos_fraude


🧪 Testes de Validação & Asserções

// Consulta para alertar clientes em anel de fraude
MATCH (c1:Cliente)-[:REALIZOU_TRANSACAO_VIA]->(d:Dispositivo)<-[:REALIZOU_TRANSACAO_VIA]-(c2:Cliente),
      (c1)-[:RESIDE_EM]->(e:Endereco)<-[:RESIDE_EM]-(c2)
WHERE c1.cpf < c2.cpf
RETURN c1.nome AS Suspeito_1, c2.nome AS Suspeito_2, d.fingerprint AS Dispositivo;


🏛️ Arquitetura Visual & Engenharia de Dados

A arquitetura abaixo demonstra o fluxo de persistência, otimização e isolamento dos componentes na subpasta cypher/:

Arquitetura do Banco de Dados

flowchart TD
    subgraph DDL["Modelagem & Schema (DDL)"]
        S1["Tabelas / Coleções"] --> S2["Constraints & Índices"]
    end
    subgraph DML["Regras & Automação (DML / PL)"]
        R1["Triggers / Aggregations"] --> R2["Procedimentos Transacionais"]
    end
    subgraph Perf["Otimização & Armazenamento"]
        P1["Planos EXPLAIN / Partições"] --> P2["Garantia de ACID / TTL"]
    end
    subgraph Homolog["Homologação & Qualidade"]
        Q1["Docker Compose & Scripts"] --> Q2["Checkpoints CP-01..05 PASS"]
    end

    DDL --> DML
    DML --> Perf
    Perf --> Homolog

    style DDL fill:#e3f2fd,stroke:#1976d2,stroke-width:1.5px
    style DML fill:#fffde7,stroke:#fbc02d,stroke-width:1.5px
    style Perf fill:#e8f5e9,stroke:#388e3c,stroke-width:1.5px
    style Homolog fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px

🎯 Engenharia de Requisitos & Modelagem Formal

👤 User Stories (Histórias de Usuário)

ID Persona História de Usuário Critério de Aceite Prioridade
US-01 Analista de Fraude Desejo modelar entidades financeiras (Cliente, Conta, Dispositivo, Cartão) Nós tipados com propriedades e arestas direcionadas representando relacionamentos Alta
US-02 Especialista em Cibersegurança Desejo detectar anéis de fraude (Fraud Rings) compartilhando CPFs ou IPs Queries Cypher identificando componentes conexos e ciclos suspeitos Alta
US-03 Engenheiro de Risco Desejo calcular distância e menor caminho (Shortest Path) entre contas suspeitas Funções shortestPath() e allShortestPaths() com contagem de saltos (hops) Alta
US-04 Cientista de Dados Desejo pontuação de risco baseada em centralidade de nós (Degree Centrality) Identificação de nós concentradores de movimentações atípicas Média
US-05 Auditor de Fraude Desejo testes unitários automatizados validando detecção de padrões maliciosos Suíte de testes em Python com neo4j-driver validando alertas de fraude Média

⚙️ Requisitos Funcionais (RF)

ID Descrição do Requisito Criticidade
RF-01 Modelo em grafo de nós (:Cliente), (:Conta), (:Cartao), (:IP) e relacionamentos Alta
RF-02 Consultas Cypher para detecção de anéis de contas laranjas (mule accounts) Alta
RF-03 Cálculo de caminhos mais curtos entre atores suspeitos e listas restritivas Alta
RF-04 Mecanismo de atribuição de score de risco relacional em tempo real Média
RF-05 Scripts de carga e testes automatizados de consultas de grafo em cypher/ Média

🛡️ Requisitos Não-Funcionais (RNF)

ID Especificação Arquitetural Criticidade
RNF-01 Desempenho de travessia de relacionamentos independente do volume total do banco Alta
RNF-02 Tempo de resposta de consultas de fraude em menos de 100ms para até 4 saltos Alta
RNF-03 Compatibilidade com Neo4j 5.0+ Enterprise / Community Média
RNF-04 Reprodutibilidade em laboratório via Docker Compose Média
RNF-05 Isolamento das consultas na pasta cypher/ Alta

🔗 Matriz de Rastreabilidade (RTM)

User Story Requisito Funcional Requisito Não-Funcional Módulo / Artefato de Código Status de Homologação
US-01 RF-01 RNF-01, RNF-03 cypher/01_graph_model.cypher Testado
US-02 RF-02 RNF-01, RNF-02 cypher/02_fraud_detection.cypher Testado
US-03 RF-03 RNF-01, RNF-02 cypher/03_path_analysis.cypher Testado
US-04 RF-04 RNF-02, RNF-04 cypher/02_fraud_detection.cypher Testado
US-05 RF-05 RNF-02, RNF-05 tests/test_fraud_graph.py Testado

🏁 Checkpoints de Qualidade & Homologação

Checkpoint Escopo da Validação Artefato Verificado Status
CP-01 Subida Conteinerizada do Ambiente docker-compose.yml PASS ✅
CP-02 Criação de Estrutura & Schemas cypher/ PASS ✅
CP-03 Automação Transacional & Regras Triggers / Queries PASS ✅
CP-04 Otimização de Performance & Índices Indexes / Tuning PASS ✅
CP-05 Homologação com Suíte de Testes tests/ PASS ✅