Metadata-Version: 2.4
Name: cyberlink-extract
Version: 0.2.0
Summary: Extrai e-mails, URLs, IPs, telefones, CPFs e CNPJs de planilhas XLSX, agrupados por id.
Project-URL: Homepage, https://github.com/italofds/cyberlink-extract
Project-URL: Repository, https://github.com/italofds/cyberlink-extract
Project-URL: Issues, https://github.com/italofds/cyberlink-extract/issues
Author-email: Ítalo Santos <italofds.dev@gmail.com>
License-Expression: MIT
License-File: LICENSE
Keywords: cnpj,cpf,excel,extracao,osint,regex,xlsx
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Natural Language :: Portuguese (Brazilian)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Office/Business :: Financial :: Spreadsheet
Classifier: Topic :: Text Processing :: Filters
Requires-Python: >=3.8
Requires-Dist: openpyxl>=3.0
Provides-Extra: dev
Requires-Dist: build>=1.0; extra == 'dev'
Requires-Dist: pytest>=7.0; extra == 'dev'
Requires-Dist: twine>=5.0; extra == 'dev'
Description-Content-Type: text/markdown

# cyberlink-extract

Extrai **e-mails, URLs, telefones, CPFs e CNPJs** da coluna de histórico de
uma planilha XLSX, agrupa as ocorrências por id e gera um arquivo Excel para
cada tipo encontrado.

> A extração de IP está temporariamente desativada (regex comentado em
> `patterns.py`).

## Instalação

```bash
pip install cyberlink-extract
```

## Uso

```bash
cyberlink-extract planilha.xlsx
```

Com todos os parâmetros:

```bash
cyberlink-extract planilha.xlsx \
    --col-id B \
    --col-hist H \
    --linha-inicio 7 \
    --saida ./resultados \
    --blacklist minha_blacklist.csv
```

| Opção | Padrão | Descrição |
|---|---|---|
| `arquivo` | — | Caminho do `.xlsx` de entrada (obrigatório) |
| `-i`, `--col-id` | `B` | Coluna do id |
| `-c`, `--col-hist` | `H` | Coluna do histórico |
| `-l`, `--linha-inicio` | `7` | Primeira linha lida |
| `-o`, `--saida` | `.` | Diretório de saída |
| `--blacklist` | — | CSV (uma coluna, sem cabeçalho) com valores exatos a excluir de qualquer tipo (CPF, PHONE, EMAIL, URL, CNPJ) |
| `-q`, `--quiet` | — | Omite o resumo final |

## Blacklists

Dois filtros de exclusão são aplicados depois da extração por regex:

- **CNPJ de instituições financeiras (sempre ativo)**: os CNPJs cuja raiz (8
  primeiros dígitos) constar em
  `src/cyberlink_extract/data/blacklist_cnpj_padrao.csv` são descartados do
  resultado. Essa lista é embutida no pacote e **não pode ser sobrescrita**
  por parâmetro de linha de comando.
- **Blacklist geral do usuário (opcional, `--blacklist`)**: um CSV próprio
  (uma coluna, sem cabeçalho) com valores a excluir. Um valor só é removido se
  for **exatamente igual** (após a normalização do tipo) a uma ocorrência
  encontrada — vale para qualquer tipo (CPF, PHONE, EMAIL, URL, CNPJ), não só
  CNPJ.

Também funciona como módulo:

```bash
python -m cyberlink_extract planilha.xlsx
```

## Saída

Um arquivo por tipo, com as colunas `id` e o nome do tipo:

- `OCORRENCIA-EMAIL.xlsx`
- `OCORRENCIA-URL.xlsx`
- `OCORRENCIA-PHONE.xlsx`
- `OCORRENCIA-CPF.xlsx`
- `OCORRENCIA-CNPJ.xlsx`

Cada valor aparece **uma única vez por id**, mas o mesmo valor pode se repetir
em ids diferentes.

## Normalização

CPF, CNPJ e telefone são gravados apenas com dígitos, sem pontuação. Telefones
com código de país (`+55`) têm o prefixo removido. E-mails são convertidos
para minúsculas. URLs são reduzidas ao domínio: são removidos o esquema
(`https://`, `http://`, `ftp://`, `file://`), o prefixo `www.` e qualquer
path/query/fragmento após o domínio (ex.: `https://www.exemplo.com/id/123/`
vira `exemplo.com`).

## Uso como biblioteca

```python
from cyberlink_extract import processar_planilha, salvar_todos
from cyberlink_extract.blacklist import (
    carrega_prefixos_cnpj,
    carrega_valores,
    filtra_cnpj_por_prefixo,
    filtra_valores_exatos,
)

resultados, linhas = processar_planilha("planilha.xlsx", col_id="B",
                                        col_hist="H", linha_inicio=7)
print(resultados["CPF"])  # {'id1': {'12345678900': None}, ...}

# blacklist de CNPJ de instituicoes financeiras (por raiz de 8 digitos)
prefixos = carrega_prefixos_cnpj("blacklist_cnpj_padrao.csv")
filtra_cnpj_por_prefixo(resultados, prefixos)

# blacklist geral, por valor exato, em qualquer tipo
valores = carrega_valores("minha_blacklist.csv")
filtra_valores_exatos(resultados, valores)

salvar_todos(resultados, "./resultados")
```

## Licença

MIT
