📚 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.
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
- v1: Modelagem Relacional 3FN · PostgreSQL 16
- v2: Modelagem NoSQL · MongoDB 7.0
- v3: Estratégias de Cache · Redis 7.2
- v4: DBA Enterprise · Particionamento & RLS · PostgreSQL 16
- v5: Modelagem Visual EER & Stored Procedures · MySQL 8.0
- v6: Séries Temporais IoT · Apache Cassandra 5.0
- v7: Prontuário Objeto-Relacional & JSONB · PostgreSQL 16
- ➡️ v8 (este): Rastreamento de Fraudes em Grafos · Neo4j 5.x
- v9: Data Warehouse & Consultas OLAP · PostgreSQL 16
- v10: Persistência Poliglota Integrada · Postgres + Mongo + Redis
🎓 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
JOINsrecursivos lentos. Em grafos (Neo4j), a travessia de arestas ocorre em tempo constante $O(1)$.
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).
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
“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.”
| 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 |
| 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 |
# 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)
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);
No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:
cd db_nosql_08_neo4j_grafos_fraude
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
// 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;
A arquitetura abaixo demonstra o fluxo de persistência, otimização e isolamento dos componentes na subpasta cypher/:
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
| 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 |
| 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 |
| 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 |
| 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 |
| 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 ✅ |