| name | extrai-movimentacoes-print |
| description | Extrai movimentacoes de negociacao (compra/venda e outros tipos) a partir de printscreens de sites de corretora/carteira, valida formato, detecta duplicidade contra o arquivo de operacoes atual, e apresenta linhas prontas para colar manualmente em export_operacoes.txt. Use quando o usuario fornecer um ou mais paths de imagem de extrato/movimentacoes e pedir para extrair/conferir essas movimentacoes. |
Extrai movimentações via printscreen
Converte printscreens de extrato de movimentações (qualquer site — investidor10,
portal da B3, corretora, etc.) em linhas prontas para colar manualmente no
arquivo de operações do projeto ir. Nunca escreve no arquivo sozinha — a
inserção final é sempre manual.
REGRA ABSOLUTA — SOMENTE LEITURA: esta skill NUNCA, em hipótese
nenhuma, escreve, edita, sobrescreve ou apaga qualquer arquivo de operações
(export_operacoes.txt, export_operacoes_egs.txt ou qualquer variante).
Todo acesso a esse arquivo é read-only, mesmo durante sincronização com o
Dropbox. A inserção das linhas "prontas" é sempre manual, feita pelo
usuário fora desta skill.
Quando usar
O usuário fornece um ou mais paths de imagem (printscreens já salvos
localmente) mostrando uma tabela de movimentações e pede para extrair,
conferir ou validar essas movimentações.
Passo a passo
1. Sincronizar a cópia canônica do arquivo de operações
Antes de checar duplicidade, baixe a versão mais recente do arquivo de
operações do Dropbox (mesma função usada pelo resto do projeto):
python3 -c "from src.dropbox_files import download_dropbox_file; download_dropbox_file()"
Isso atualiza o arquivo local em OPERATIONS_FILEPATH (export_operacoes.txt,
na raiz do projeto — ver src/dropbox_files.py). Use esse caminho — não uma
cópia antiga — nos passos seguintes.
2. Ler cada printscreen
Para cada imagem fornecida, use a ferramenta de leitura de imagem para
identificar todas as linhas de movimentação visíveis na tabela. Para cada
linha, extraia:
ticker (código de negociação, ex: ITRI11, BBAS3)
tipo (rótulo literal como aparece na tela: Compra, Venda,
Desdobramento, Bonificação, Subscrição, Conversão, etc. — não
traduza nem normalize, use exatamente o que está escrito)
qtd (quantidade, numérico)
data (formato DD/MM/AAAA ou DD/MM/AA, como aparece na tela — o script
normaliza a saída sempre para DD/MM/AA (ano com 2 dígitos), igual ao
restante do arquivo de operações; nunca gere linha com ano de 4 dígitos,
isso quebra a inferência de tipo de data no pandas)
preco (preço unitário, numérico)
valor (valor total da operação, se visível — numérico; omita a chave se
não estiver visível)
Um print pode conter várias linhas — extraia todas. Vários prints no mesmo
lote são normais — junte todas as linhas extraídas de todos os prints numa
única lista, na ordem em que aparecem.
Monte essa lista como um array JSON e escreva num arquivo temporário, por
exemplo /tmp/candidatos_movimentacoes.json:
[
{"ticker": "BBAS3", "tipo": "Compra", "qtd": 1500, "data": "16/05/2025", "preco": 25.70, "valor": 38550},
{"ticker": "ITRI11", "tipo": "Desdobramento", "qtd": 100, "data": "20/05/2025", "preco": 0, "valor": 0}
]
3. Rodar a classificação determinística
O script é auto-contido dentro desta skill (não depende de src/):
python3 .claude/skills/extrai-movimentacoes-print/movimentacoes_print.py /tmp/candidatos_movimentacoes.json export_operacoes.txt
O segundo argumento é o mesmo arquivo baixado no passo 1 (OPERATIONS_FILEPATH,
export_operacoes.txt na raiz do projeto). Se não tiver certeza do caminho,
confirme com:
python3 -c "from src.dropbox_files import OPERATIONS_FILEPATH; print(OPERATIONS_FILEPATH)"
A saída é um JSON com um item por candidato, cada um com:
categoria: "pronto" ou "observacao"
linha_txt: a linha formatada (só quando categoria == "pronto")
motivo: por que caiu em observação (só quando categoria == "observacao")
4. Apresentar o resultado ao usuário em dois blocos
Nunca escreva no arquivo de operações. Apresente sempre neste formato:
## PRONTO PARA COPIAR
<uma linha por item com categoria "pronto", usando o valor de linha_txt,
em bloco de código para facilitar copiar>
## OBSERVAÇÕES
- <ticker> (<tipo>, <data>): <motivo>
- ... (uma linha por item com categoria "observacao")
Se não houver nenhum item em "pronto", diga isso explicitamente (não omita a
seção). Se não houver nenhuma observação, também diga isso explicitamente.
Fora de escopo
Não faça login em nenhum site, não acesse a internet para buscar dados, não
escreva em export_operacoes.txt. Esta skill só processa imagens já
fornecidas pelo usuário e o arquivo de operações já sincronizado do Dropbox.