Sistema em Streamlit e SQLite para ingestão e análise de arquivos .xlsx enviados pela Apple (dados CONFIDENTIAL), com foco em atividade e investigação policial. Permite cruzar dados, identificar padrões (mesmo IP, mesmo local, dispositivos, timeline) e consultar perfis por DSID, e-mail, serial ou IMEI.
Parceria GENI / UFF e SR / RJ / PF
- Ingestão resiliente: leitura dos modelos
General,NuvemeCadastroa partir da pastaAPPLE/, ignorando Data Guides (*_Data_Guide.xlsx) e arquivos temporários (~$...xlsx). Cabecalhos são detectados dinamicamente para cada planilha. - Log e idempotência: tabela
ingestion_logevita reprocessar arquivos já ingeridos. - Geolocalização de IPs: durante a ingestão, IPs são resolvidos via GeoLite2 e gravados na tabela
ip_geo(país, continente, timezone, latitude/longitude), reutilizados depois pelo app. - Mapas: página Mapa de IPs mostra IPs em mapa interativo (
pydeck) com pontos ampliados e tabela enriquecida com país/continente; outras páginas focam dispositivos e timeline. - Cards em vez de tabelas: páginas como Perfil do investigado, Mapa de dispositivos e Compras e apps apresentam resumos em cards responsivos, com opção de ver as tabelas completas em expanders.
- Glossário embutido: termos esotéricos (DSID, GCRM, GUID, etc.) aparecem explicados em
st.captionlogo abaixo das seções relevantes.
- Python 3.12+
- UV (gerenciador de pacotes e ambientes)
# Na raiz do projeto
uv venv # se ainda não existir .venv
source .venv/bin/activate # ativar ambiente
uv pip install -r requirements.txtCopie o arquivo de exemplo e ajuste se necessário:
cp .env.example .envVariáveis (opcionais):
| Variável | Descrição | Padrão |
|---|---|---|
YABLOKO_WATCH_FOLDER |
Pasta monitorada pelo worker para novos .xlsx |
./APPLE |
YABLOKO_WORKER_INTERVAL |
Intervalo em segundos entre varreduras do worker | 15 |
YABLOKO_DB_PATH |
Caminho do banco SQLite | ./data/yabloko.db |
Monitora a pasta configurada a cada YABLOKO_WORKER_INTERVAL segundos e ingere novos arquivos .xlsx que seguem o padrão de confidencialidade (*APPLE_CONFIDENTIAL*.xlsx, variando por domínio), excluindo Data Guides. Arquivos já processados (registrados em ingestion_log) são ignorados.
# Usando o venv do projeto (recomendado)
./run_worker.sh # Unix/macOS
run_worker.bat # Windows
# Ou manualmente
python -m workerOs arquivos de dados devem estar, por padrão, em APPLE/ na raiz do projeto ou na pasta indicada por YABLOKO_WATCH_FOLDER.
Interface com várias páginas:
- Início: visão geral de contagens por tabela e últimos arquivos ingeridos.
- Ingestão: upload de arquivos
.xlsxdiretamente para a pasta monitorada e botão Processar arquivos pendentes (chama o mesmo fluxo do worker). - Busca: pesquisa por DSID, e-mail, serial, IMEI, GUID ou IP em múltiplas tabelas.
- Perfil: consolidação de informações de conta e dispositivos por DSID/e-mail, com cards e tabelas em expanders.
- Timeline: eventos ordenados no tempo (compras, downloads, logins, etc.).
- Mapa de IPs: lista e mapa interativo de IPs com geolocalização persistida em
ip_geo. - Mapa de dispositivos, Compras e apps, Análise financeira, Investigação por dispositivo, Alertas e Créditos: visões especializadas para cruzar dispositivos, contas, transações e anomalias.
# Usando o venv do projeto (recomendado)
./run_app.sh # Unix/macOS
run_app.bat # Windows
# Ou manualmente
streamlit run app/streamlit_app.pyPara subir os dois de uma vez (worker em background e app em primeiro plano):
./run_all.sh # Unix/macOS — Ctrl+C encerra app e worker
run_all.bat # Windows — duas janelas (worker + app)uv run pytest tests/ -v