Processa fatura de cartão de crédito em lote e lança no FIN App via fin_fatura_transacoes (NÃO via despesa avulsa, regra de negócio do FIN). Aceita 5 formatos (preferência: OFX > CSV > CNAB 240 > texto colado > PDF). Identifica o cartão automaticamente, detecta período REAL da fatura (importante: pode variar do ciclo cadastrado), trata estorno (reversal_of_id) e parcelamento sem duplicar. Garante idempotência. No fim, oferece pagar a fatura via fin_pagar_fatura.
/financeiro:extrato/financeiro:lancarfin_pagar_fatura direto/financeiro:instalar-fin-mcp/financeiro:onboarding primeiro~/.fin-plugin/config.json existe → leia financeiro_pathFinanceiro/ existemfin://docs/guia nessa sessão (CRÍTICO pra essa skill — fatura tem várias regras de negócio do FIN)fin_criar_conta seta automaticamente "Data da Fatura Inicial" = data de criação do cartão, e tudo que tiver tx_date anterior a isso fica fora do cálculo do app (apesar de a API somar). A tool fin_editar_conta NÃO expõe esse campo, então não dá pra corrigir via API — a pessoa precisa abrir o cartão no app e ajustar manualmente. Antes de lançar qualquer fatura histórica, pergunte pra pessoa: "A 'Data da Fatura Inicial' desse cartão no FIN app está anterior a [data da primeira transação da fatura]? Se for a primeira vez usando o FIN com esse cartão, ela provavelmente está com a data de criação do cartão — abre o app e ajusta pra uma data anterior antes de eu lançar." Se a pessoa confirmar que ajustou (ou que já estava certo), prossiga. Se não, pause e oriente.extrato| Aspecto | Extrato (conta) | Fatura (cartão) |
|---|---|---|
| Tool de lançamento | fin_criar_despesa, fin_criar_receita, fin_criar_transferencia | fin_fatura_transacoes (uma chamada com lista) |
| Período | Datas do extrato (mês civil normalmente) | Período REAL da fatura (pode variar do ciclo cadastrado) |
| Estorno | Raro | Comum — tratamento especial via reversal_of_id |
| Parcelamento | Não se aplica | Comum — FIN gera parcelas automaticamente, não duplicar |
| Pagamento | Não se aplica | Depois de lançar, oferece fin_pagar_fatura |
| Conta destino | Conta corrente/poupança | Cartão de crédito (também é conta no FIN) |
3 formas (mesmo do extrato):
Forma A: Caminho de arquivo em $ARGUMENTS
Forma B: Pessoa colou o conteúdo na conversa
Forma C: Pessoa anexou um PDF
Tenta identificar de qual cartão é a fatura:
Cruza com Contas e Cartões.md pra achar o cartão correspondente.
Se não conseguir identificar:
Não consegui identificar de qual cartão é essa fatura. Qual dos teus cartões? [lista cartões de crédito de Contas e Cartões.md]
Se identificar mais de um possível:
Pode ser [cartão A] ou [cartão B]. Qual?
REGRA CRÍTICA: o período da fatura pode ser diferente do dia de fechamento cadastrado por causa de fim de semana, feriado, ciclo do banco.
Procura no conteúdo da fatura:
O período real = (data da primeira transação, data da última transação) ou as datas explícitas do cabeçalho da fatura, o que for mais confiável.
Compara com o cartão em Contas e Cartões.md:
Cartão: C6
Fechamento cadastrado: dia 12
Período REAL detectado: 13/02/2026 a 14/03/2026
→ Variação: fechamento real foi dia 14 (esperado dia 12). Diferença +2 dias.
Se variou, anota em Contas e Cartões.md:
Avisa a pessoa:
Detectei: fatura do C6, período real 13/02/2026 a 14/03/2026 (fechamento observado dia 14, cadastrado é dia 12, diferença de 2 dias). Atualizei tua memória.
Procura na fatura:
Anota pra usar depois no fin_pagar_fatura.
Mesma lógica do extrato pros 5 formatos (OFX, CSV, CNAB 240, texto, PDF). Extrai pra cada transação:
REGRA CRÍTICA do FIN: estorno em cartão NÃO é receita. É uma despesa vinculada à transação original via reversal_of_id.
Pra cada transação que parece estorno (descrição contém "ESTORNO" / "DEVOLUÇÃO" / "REEMBOLSO" OU valor negativo numa fatura):
fin_buscar_transacoes filtrando por mesmo cartão, valor próximo (positivo do mesmo módulo), descrição parecida, dentro de uma janela de tempo (tipicamente até 3 meses antes)fin_criar_estorno (v2.3.4 — tool atômica): passa original_transaction_id + amount_cents. Herda account/category/subcategory da original automaticamente, marca reversal_kind como 'full' ou 'partial' baseado no amount. Sem precisar passar descrição (vira "Estorno: <original desc>") nem conta.reversal_of_id. Tu pode editar depois se quiser."Nunca lança estorno como receita.
REGRA CRÍTICA do FIN: parcelamento gera múltiplas transações automaticamente no FIN. Você não duplica.
Pra cada transação que parece parcelada:
fin_criar_despesa com installments: N e amount_cents = valor_da_parcela * N (valor TOTAL da compra). O FIN cria as N parcelas automaticamente nas faturas seguintes. NÃO passar current_installment — deixar o default (1).installments: N, current_installment: X e original_purchase_date com a data REAL da compra original. O backend caminha pelos ciclos do cartão (usando closing_day/due_day) e coloca cada parcela (X, X+1, ..., N) na fatura correta automaticamente. Não precisa pensar em tx_date nem invoice_cycle_end — só informar a data da compra histórica.original_purchase_date é melhor que os workarounds anteriores: antes o caller tinha que escolher entre (a) passar tx_date alinhado com o mês atual (anti-intuitivo) ou (b) lançar N-X+1 despesas avulsas numeradas manualmente. Ambos davam erro fácil. Agora é uma chamada só com os 3 campos + original_purchase_date e o backend coloca as parcelas nas faturas certas.current_installment)original_purchase_date + current_installment como no item 2 acima.invoice_cycle_end = data de fechamento da fatura atual se a tx_date original cai num ciclo antigo.Mostra na tabela de revisão:
=== PARCELAMENTOS DETECTADOS ===
| Descrição | Parcela | Ação |
|-------------------------|---------|---------------------------------------|
| NOTEBOOK PARC 01/12 | 1/12 | Lançar como nova compra parcelada |
| NOTEBOOK PARC 02/12 | 2/12 | Pular (FIN gerou automaticamente) |
| TV PARC 05/10 | 5/10 | Pular (parcela 1 foi em fatura ant.) |
Antes de lançar, busca no FIN as transações já existentes da fatura desse cartão pro período:
fin_fatura_cartao(cartao_id: <id>, periodo: <período real detectado>)
OU
fin_fatura_transacoes (consulta) — confira a description da tool
Calcula chave de idempotência pra cada (FITID se OFX, hash caso contrário). Compara e separa em 3 grupos (mesmo do extrato):
Lê Estabelecimentos.md. Aplica regras conhecidas. Marca como "a categorizar" o que não tiver regra.
Mostra UMA tabela com TUDO:
=== FATURA: C6 — Período real 13/02 a 14/03/2026 — Vencimento 20/03 ===
=== JÁ EXISTEM NO FIN (vão ser ignoradas) ===
| Data | Valor | Descrição | Categoria |
... [N linhas]
=== PARCELAS JÁ GERADAS PELO FIN (vão ser ignoradas) ===
| Data | Valor | Descrição | Parcela | Compra original |
... [P linhas]
=== ESTORNOS (com original encontrada) ===
| Data | Valor | Descrição | Despesa original revertida |
... [E linhas]
=== CATEGORIZADAS AUTOMATICAMENTE ===
| Data | Valor | Descrição | Categoria sugerida | Regra |
... [M linhas]
=== A CATEGORIZAR (preciso de tu) ===
| # | Data | Valor | Descrição | Categoria? |
... [K linhas]
=== SUSPEITOS DE DUPLICATA ===
... [J linhas]
=== RESUMO ===
- Cartão: C6
- Período: 13/02 a 14/03/2026
- Vencimento: 20/03/2026
- Total de linhas na fatura: 87
- Já existiam: 12
- Parcelas FIN-gerenciadas: 8 (puladas)
- Estornos: 2
- Categorizadas: 47
- A categorizar: 18
- Suspeitos: 0
- Total a lançar: 65
Mesmo do extrato:
fin_fatura_transacoesREGRA CRÍTICA do FIN: fatura inteira é lançada via fin_fatura_transacoes em uma chamada só com a lista de transações, NÃO linha por linha via fin_criar_despesa.
Confira a description da tool fin_fatura_transacoes no MCP antes de chamar pra ver o formato exato esperado.
Estrutura provável (confira na description):
fin_fatura_transacoes(
cartao_id: <id>,
periodo_inicio: "2026-02-13",
periodo_fim: "2026-03-14",
vencimento: "2026-03-20",
transacoes: [
{
data: "...",
valor: ...,
descricao: "...",
categoria_id: ...,
subcategoria_id: ...,
parcelas: 12 (se aplicável),
reversal_of_id: ... (se for estorno)
},
...
]
)
Se a chamada falhar, anota e mostra erro claro.
Estabelecimentos.mdEstabelecimentos novos categorizados pela pessoa → linhas novas.
Contas e Cartões.mdAtualização de "fechamento observado" se variou (já feito no Passo 3).
Status Conciliação.md| C6 | Fatura 13/02-14/03/2026 | Conciliado | 2026-04-12 | [FITIDs ou hashes] |
Preferências.mdDecisões não-óbvias se houver.
Depois de lançar com sucesso, pergunta:
Fatura lançada. Vencimento: 20/03/2026. Total: R$ 4.521,32. Quer que eu marque como paga agora? (vou usar
fin_pagar_fatura— você precisa me dizer de qual conta saiu o pagamento)
Se sim:
fin_pagar_fatura com cartão + conta + dataStatus Conciliação.md se aplicávelSe não:
✓ Fatura processada.
- Cartão: C6
- Período real: 13/02 a 14/03/2026 (variou +2 dias do ciclo cadastrado, atualizei)
- Vencimento: 20/03/2026
- Total: R$ 4.521,32
- Lançadas: 65 transações
- Estornos tratados: 2 (com reversal_of_id)
- Parcelas auto-geradas pelo FIN puladas: 8
- Aprendi 14 estabelecimentos novos.
- Pago: ✓ via Conta C6 / SIM (ou: NÃO, lembro depois)
Aparece toda fatura, mesmo valor, mesma descrição. Aprende como regra muito rápido (1-2 ocorrências já é suficiente porque o padrão é óbvio).
"ANUIDADE" / "ANUID DIFERENC" → categoriza em "Taxas, Juros & Impostos > Anuidade/Taxas cartão". Aprende como regra global pro cartão.
"IOF" / "REPASSE IOF" → "Taxas, Juros & Impostos > IOF". Compras em USD/EUR aparecem com símbolo da moeda — registra valor em BRL conforme a fatura mostra.
"SAQUE CARTAO" / "SAQUE FATURA". Isso é um adiantamento, gera juros. Categoriza em "Taxas, Juros & Impostos > Juros saque cartão". Avisa a pessoa: "Detectei saque no cartão, isso gera juros. Tu sabia?"
"PAGAMENTO RECEBIDO" / "PGTO ANTERIOR" — isso é o pagamento da fatura passada, NÃO é um estorno nem uma transação. Pula, não lança nada. Esse pagamento já foi registrado quando a fatura anterior foi paga via fin_pagar_fatura.
Algumas faturas mostram "RESGATE PONTOS R$0,00" — pula, não tem valor.
Compras internacionais aparecem com USD/EUR + BRL convertido. Lança o valor em BRL (que é o que vai ser cobrado). Anota a moeda original na descrição se for útil.
"ESTORNO PARCIAL R$50 de R$200" — lança o estorno de R$50 com reversal_of_id apontando pra original de R$200. A original NÃO é apagada.
Processa em batches de 50 linhas pra revisão (mesma lógica do extrato).
fin_criar_despesa → SEMPRE usa fin_fatura_transacoesreversal_of_idfin://docs/guia → fatura é onde mais tem regra de negócio do FIN, lê a docPT-BR informal, direto. Sem travessão (—). Mostra trabalho ("identificando cartão...", "detectando período real...", "buscando despesas originais dos estornos..."), tabelas claras, confirmações curtas.