fin-app-mcp 2.1.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/guia.md +70 -14
- package/index.mjs +146 -16
- package/package.json +1 -1
package/docs/guia.md
CHANGED
|
@@ -61,27 +61,29 @@ Cada cartão de crédito tem:
|
|
|
61
61
|
|
|
62
62
|
O ciclo de uma fatura vai do fechamento anterior até o fechamento atual. Transações dentro desse período pertencem a essa fatura.
|
|
63
63
|
|
|
64
|
-
### `reference_month`
|
|
64
|
+
### `reference_month`
|
|
65
65
|
|
|
66
|
-
O FIN usa `reference_month` baseado no **mês do
|
|
66
|
+
O FIN usa `reference_month` baseado no **mês dos gastos / mês de fechamento do ciclo**, NÃO no mês do vencimento. Geralmente coincide com o label que o banco usa para a fatura (quando o banco rotula pelo mês dos gastos).
|
|
67
67
|
|
|
68
|
-
**
|
|
69
|
-
|
|
70
|
-
Exemplo concreto — cartão com `closing_day=1` e `due_day=9`:
|
|
68
|
+
**Exemplo concreto — cartão com `closing_day=1` e `due_day=9`:**
|
|
71
69
|
- Ciclo: 1 de março a 1 de abril
|
|
72
70
|
- Vencimento: 9 de abril
|
|
73
|
-
-
|
|
74
|
-
|
|
71
|
+
- `reference_month: 2026-04` (o mês onde o ciclo fecha)
|
|
72
|
+
|
|
73
|
+
**Exemplo concreto — cartão com `closing_day=19` e `due_day=26`:**
|
|
74
|
+
- Ciclo: 20 de março a 19 de abril
|
|
75
|
+
- Vencimento: 26 de abril
|
|
76
|
+
- `reference_month: 2026-04` (o mês onde o ciclo fecha — abril)
|
|
75
77
|
|
|
76
|
-
**Regra prática:**
|
|
77
|
-
|
|
78
|
-
|
|
78
|
+
**Regra prática:** o `reference_month` é o mês em que a fatura **fecha** (atinge o `closing_day`). Não é o mês da compra mais antiga da fatura, e não é o mês do vencimento quando o cartão fecha e vence em meses diferentes.
|
|
79
|
+
|
|
80
|
+
Se o banco rotula a fatura pelo mês de vencimento (raro), some -1 para chegar ao `reference_month`.
|
|
79
81
|
|
|
80
82
|
### Em qual fatura cai uma transação?
|
|
81
83
|
|
|
82
84
|
Uma transação cai na fatura cujo ciclo contém a `tx_date`:
|
|
83
|
-
-
|
|
84
|
-
-
|
|
85
|
+
- Cartão fecha dia 1: compra em 15/03 com ciclo 01/03–01/04 → fatura que fecha em abril → `reference_month: 2026-04`
|
|
86
|
+
- Cartão fecha dia 19: compra em 25/03 com ciclo 20/03–19/04 → fatura que fecha em abril → `reference_month: 2026-04`
|
|
85
87
|
|
|
86
88
|
**Detalhe:** transação feita exatamente no dia do fechamento (`closing_day`) é empurrada para o **próximo** ciclo.
|
|
87
89
|
|
|
@@ -221,8 +223,8 @@ Resultado: refund + ajuste se anulam → líquido bate com o banco.
|
|
|
221
223
|
|
|
222
224
|
### `cycle_end` vs `reference_month`
|
|
223
225
|
|
|
224
|
-
- **`cycle_end`** é a data de fechamento do ciclo (ex: `2026-04-01` para um cartão que fecha dia 1). É o identificador usado internamente pelo FIN e na tool `fin_ajuste_fatura`.
|
|
225
|
-
- **`reference_month`** é o mês
|
|
226
|
+
- **`cycle_end`** é a data exata de fechamento do ciclo (ex: `2026-04-01` para um cartão que fecha dia 1). É o identificador usado internamente pelo FIN e na tool `fin_ajuste_fatura`.
|
|
227
|
+
- **`reference_month`** é o mês em que o ciclo fecha (ex: `2026-04` para uma fatura com `cycle_end: 2026-04-01`). É usado nas tools `fin_fatura_cartao` e `fin_fatura_transacoes`. Ver seção 4 para a regra completa.
|
|
226
228
|
|
|
227
229
|
Para descobrir o `cycle_end` de uma fatura, use `fin_fatura_transacoes` — a resposta inclui o `cycle_end`.
|
|
228
230
|
|
|
@@ -269,3 +271,57 @@ As ocorrências são geradas **lazily**: ao consultar um mês (`fin_bills_do_mes
|
|
|
269
271
|
|
|
270
272
|
- `fixed`: valor fixo todo mês (ex: condomínio R$1.383). O `amount` da ocorrência já vem preenchido.
|
|
271
273
|
- `variable`: valor muda (ex: Light). O `amount` da ocorrência vem `null` até ser definido no momento do pagamento.
|
|
274
|
+
|
|
275
|
+
## 10. Câmbio USD/BRL e ajuste de saldo
|
|
276
|
+
|
|
277
|
+
O FIN tem suporte para contas cash em USD (carteira física, Wise, conta no exterior). No v0, contas em USD trabalham com **saldo manual** — você não lança despesas/receitas categorizadas em dólar. Em vez disso, usa duas operações:
|
|
278
|
+
|
|
279
|
+
### `fin_cambio` — comprar ou vender dólar
|
|
280
|
+
|
|
281
|
+
O FIN não usa cotação automática para câmbio — **você informa a taxa praticada** na operação, porque a taxa real varia por banco/spread/operação. A tool cria atomicamente 2 transações vinculadas (`exchange_pair_id` compartilhado):
|
|
282
|
+
|
|
283
|
+
- **Vender dólar:** `from = conta USD`, `to = conta BRL`
|
|
284
|
+
- **Comprar dólar:** `from = conta BRL`, `to = conta USD`
|
|
285
|
+
|
|
286
|
+
Cada transação fica na sua conta respectiva, com a moeda da conta. A categoria "Câmbio" é criada automaticamente no primeiro uso.
|
|
287
|
+
|
|
288
|
+
**Exemplo — vendi $100 e recebi R$540 no Itaú:**
|
|
289
|
+
```json
|
|
290
|
+
fin_cambio({
|
|
291
|
+
"from_account_name": "Wise USD",
|
|
292
|
+
"to_account_name": "Itaú",
|
|
293
|
+
"amount_from_cents": 10000,
|
|
294
|
+
"amount_to_cents": 54000,
|
|
295
|
+
"description": "Venda de dólar"
|
|
296
|
+
})
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
Resultado: despesa de $100 na Wise USD + receita de R$540 no Itaú. Ambas com `exchange_pair_id` igual.
|
|
300
|
+
|
|
301
|
+
### `fin_ajustar_saldo_conta` — atualizar saldo manualmente
|
|
302
|
+
|
|
303
|
+
Para casos onde o saldo USD muda **sem motivo categórico** (ex: você achou mais $50 na carteira, ou simplesmente quer atualizar pra refletir o saldo real), use `fin_ajustar_saldo_conta`. Ele atualiza o `initial_balance` da conta diretamente, **sem criar transação**.
|
|
304
|
+
|
|
305
|
+
**Importante:** o valor é o **saldo absoluto**, não um delta. Se a conta tinha $400 e você quer somar $50, passe `45000` (não `5000`).
|
|
306
|
+
|
|
307
|
+
```json
|
|
308
|
+
fin_ajustar_saldo_conta({
|
|
309
|
+
"account_name": "Wise USD",
|
|
310
|
+
"amount_cents": 45000
|
|
311
|
+
})
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
Funciona para qualquer conta cash (BRL ou USD). Não funciona para cartão de crédito.
|
|
315
|
+
|
|
316
|
+
### Restrições no v0
|
|
317
|
+
|
|
318
|
+
- ❌ Lançar despesa/receita categorizada em USD via `fin_criar_despesa`/`fin_criar_receita` (continua bloqueado — mensagem: "use fin_cambio ou fin_ajustar_saldo_conta")
|
|
319
|
+
- ❌ Cotação automática (você sempre informa a taxa)
|
|
320
|
+
- ❌ Cartão de crédito em USD
|
|
321
|
+
- ❌ Filtros nos relatórios mensais por moeda (transações de câmbio aparecem no relatório como categoria "Câmbio" — visualmente identificadas)
|
|
322
|
+
|
|
323
|
+
### Para "comprei algo no exterior por $20"
|
|
324
|
+
|
|
325
|
+
No v0, a recomendação é **registrar como ajuste de saldo**: subtrair $20 do saldo atual da conta USD via `fin_ajustar_saldo_conta`. A categorização (que tipo de gasto foi) pode ser feita depois manualmente pela UI, ou simplesmente ignorada se não for crítica para o seu controle.
|
|
326
|
+
|
|
327
|
+
Lançar despesas categorizadas em USD pode entrar em uma versão futura se virar uma dor real.
|
package/index.mjs
CHANGED
|
@@ -182,17 +182,16 @@ CAMPOS:
|
|
|
182
182
|
- reference_month: string YYYY-MM — mês de referência da fatura.
|
|
183
183
|
|
|
184
184
|
REGRAS DE NEGÓCIO:
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
-
|
|
188
|
-
- Regra prática: some +1 ao mês que o banco informa.
|
|
185
|
+
- reference_month = mês dos GASTOS / mês de fechamento do ciclo da fatura (NÃO é o mês do vencimento).
|
|
186
|
+
- Exemplo: uma fatura com ciclo 20/03–19/04 e vencimento 26/04 está em reference_month "2026-04". Normalmente coincide com o label que o banco usa (ex: "Fatura de Abril" quando o banco rotula pelo mês dos gastos).
|
|
187
|
+
- Se o banco rotula pelo mês de vencimento, some -1 mês para chegar ao reference_month.
|
|
189
188
|
- net_total já desconta estornos.
|
|
190
189
|
- Valores em centavos.`,
|
|
191
190
|
inputSchema: {
|
|
192
191
|
type: "object",
|
|
193
192
|
properties: {
|
|
194
193
|
card_name: { type: "string", description: "Nome do cartão" },
|
|
195
|
-
reference_month: { type: "string", description: "YYYY-MM" },
|
|
194
|
+
reference_month: { type: "string", description: "YYYY-MM (mês dos gastos / fechamento)" },
|
|
196
195
|
},
|
|
197
196
|
},
|
|
198
197
|
},
|
|
@@ -303,14 +302,14 @@ CAMPOS:
|
|
|
303
302
|
- reference_month: string YYYY-MM — mês de referência (default: mês atual).
|
|
304
303
|
|
|
305
304
|
REGRAS DE NEGÓCIO:
|
|
306
|
-
-
|
|
305
|
+
- reference_month = mês dos GASTOS / mês de fechamento do ciclo (NÃO é o mês do vencimento). Ver fin_fatura_cartao para exemplos.
|
|
307
306
|
- Estornos aparecem com kind: 'refund' e signedAmount negativo.
|
|
308
307
|
- Valores em centavos.`,
|
|
309
308
|
inputSchema: {
|
|
310
309
|
type: "object",
|
|
311
310
|
properties: {
|
|
312
311
|
card_name: { type: "string", description: "Nome do cartão (obrigatório)" },
|
|
313
|
-
reference_month: { type: "string", description: "YYYY-MM (default: mês atual)" },
|
|
312
|
+
reference_month: { type: "string", description: "YYYY-MM (mês dos gastos / fechamento; default: mês atual)" },
|
|
314
313
|
},
|
|
315
314
|
required: ["card_name"],
|
|
316
315
|
},
|
|
@@ -365,7 +364,7 @@ CAMPOS:
|
|
|
365
364
|
- tx_date: string YYYY-MM-DD — data (default: hoje, timezone America/Sao_Paulo).
|
|
366
365
|
- essential: boolean — se é despesa essencial.
|
|
367
366
|
- installments: number — número de parcelas (2-48). Gera N transações separadas automaticamente.
|
|
368
|
-
- current_installment: number — parcela inicial (default: 1).
|
|
367
|
+
- current_installment: number — parcela inicial (default: 1). Passar 1 é equivalente ao default — o sistema cria todas as N parcelas começando da primeira. Use valores > 1 APENAS quando registrando uma compra parcelada que já está em andamento e você quer criar apenas as parcelas futuras (ex: installments=10, current_installment=3 cria 8 transações, da parcela 3 à 10).
|
|
369
368
|
- reversal_of_id: string UUID — ID da transação original para estorno.
|
|
370
369
|
- reversal_kind: string — 'full' ou 'partial' (obrigatório quando reversal_of_id é informado).
|
|
371
370
|
|
|
@@ -621,6 +620,92 @@ EXEMPLO — anular estorno que não abate (GitHub R$38,63):
|
|
|
621
620
|
required: ["card_name", "cycle_end", "amount_cents"],
|
|
622
621
|
},
|
|
623
622
|
},
|
|
623
|
+
// ── Câmbio USD/BRL e ajuste manual de saldo ─────────────────────
|
|
624
|
+
{
|
|
625
|
+
name: "fin_cambio",
|
|
626
|
+
description: `Registra uma operação de câmbio (compra ou venda de dólar) entre uma conta BRL e uma conta USD. Cria 2 transações vinculadas com a categoria "Câmbio".
|
|
627
|
+
|
|
628
|
+
QUANDO USAR:
|
|
629
|
+
- Vender dólar: from = conta USD, to = conta BRL. Ex: "vendi $100 por R$540".
|
|
630
|
+
- Comprar dólar: from = conta BRL, to = conta USD. Ex: "comprei $50 por R$280".
|
|
631
|
+
|
|
632
|
+
NÃO USAR QUANDO:
|
|
633
|
+
- Quiser apenas atualizar o saldo de uma conta sem registrar a operação (use fin_ajustar_saldo_conta).
|
|
634
|
+
- Quiser lançar despesa em USD (não suportado no v0 — só câmbio).
|
|
635
|
+
- Quiser transferir entre contas da mesma moeda (use fin_criar_transferencia).
|
|
636
|
+
|
|
637
|
+
CAMPOS:
|
|
638
|
+
- from_account_name: string — conta de origem (a que fica negativa). Match parcial.
|
|
639
|
+
- to_account_name: string — conta de destino (a que fica positiva). Match parcial.
|
|
640
|
+
- amount_from_cents: number — valor que SAI da from_account, em centavos da moeda da conta. Ex: $100 = 10000 (centavos USD).
|
|
641
|
+
- amount_to_cents: number — valor que ENTRA na to_account, em centavos da moeda da conta. Ex: R$540 = 54000 (centavos BRL).
|
|
642
|
+
- tx_date: string YYYY-MM-DD — data (default: hoje).
|
|
643
|
+
- description: string — descrição livre (opcional).
|
|
644
|
+
|
|
645
|
+
REGRAS DE NEGÓCIO:
|
|
646
|
+
- As contas DEVEM ter moedas diferentes (uma BRL, outra USD).
|
|
647
|
+
- Cria 2 transações: uma despesa na from_account, uma receita na to_account.
|
|
648
|
+
- Ambas transações ficam linkadas via exchange_pair_id.
|
|
649
|
+
- A categoria "Câmbio" é criada automaticamente no primeiro uso.
|
|
650
|
+
- A taxa de câmbio é INFORMADA por você — não usa cotação automática.
|
|
651
|
+
- Operação atômica: se uma transação falhar, a outra é desfeita.
|
|
652
|
+
|
|
653
|
+
EXEMPLO — vender $100 por R$540:
|
|
654
|
+
{ "from_account_name": "Wise USD", "to_account_name": "Itaú", "amount_from_cents": 10000, "amount_to_cents": 54000, "description": "Venda de dólar" }
|
|
655
|
+
|
|
656
|
+
EXEMPLO — comprar $50 por R$280:
|
|
657
|
+
{ "from_account_name": "Itaú", "to_account_name": "Wise USD", "amount_from_cents": 28000, "amount_to_cents": 5000 }`,
|
|
658
|
+
inputSchema: {
|
|
659
|
+
type: "object",
|
|
660
|
+
properties: {
|
|
661
|
+
from_account_name: { type: "string", description: "Nome da conta de origem" },
|
|
662
|
+
to_account_name: { type: "string", description: "Nome da conta de destino" },
|
|
663
|
+
amount_from_cents: { type: "number", description: "Valor que SAI da origem, em centavos da moeda da conta" },
|
|
664
|
+
amount_to_cents: { type: "number", description: "Valor que ENTRA no destino, em centavos da moeda da conta" },
|
|
665
|
+
tx_date: { type: "string", description: "YYYY-MM-DD (default: hoje)" },
|
|
666
|
+
description: { type: "string", description: "Descrição livre (opcional)" },
|
|
667
|
+
},
|
|
668
|
+
required: ["from_account_name", "to_account_name", "amount_from_cents", "amount_to_cents"],
|
|
669
|
+
},
|
|
670
|
+
},
|
|
671
|
+
{
|
|
672
|
+
name: "fin_ajustar_saldo_conta",
|
|
673
|
+
description: `Atualiza o saldo de uma conta cash (BRL ou USD) diretamente, sem criar transação. Útil para correções e contas em USD que mudam sem motivo categórico.
|
|
674
|
+
|
|
675
|
+
QUANDO USAR:
|
|
676
|
+
- Conta USD: registrar quanto dólar você tem agora (ex: "achei mais $50 na carteira", "agora tenho $537").
|
|
677
|
+
- Conta BRL: corrigir saldo inicial após verificar extrato bancário.
|
|
678
|
+
- Onboarding: definir saldo inicial de uma conta recém-criada.
|
|
679
|
+
|
|
680
|
+
NÃO USAR QUANDO:
|
|
681
|
+
- Quiser registrar uma despesa ou receita categorizada (use fin_criar_despesa / fin_criar_receita).
|
|
682
|
+
- Quiser registrar câmbio entre contas (use fin_cambio).
|
|
683
|
+
- For uma conta de cartão de crédito (não suportado — cartão tem fatura).
|
|
684
|
+
|
|
685
|
+
CAMPOS:
|
|
686
|
+
- account_name: string — nome da conta (match parcial).
|
|
687
|
+
- amount_cents: number — novo saldo ABSOLUTO, em centavos da moeda da conta. Ex: $487 = 48700 (centavos USD); R$1.234,00 = 123400 (centavos BRL).
|
|
688
|
+
|
|
689
|
+
REGRAS DE NEGÓCIO:
|
|
690
|
+
- O valor é o SALDO ABSOLUTO, não um delta. Se a conta tinha $400 e você quer somar $50, passe 45000 (não 5000).
|
|
691
|
+
- Funciona para qualquer conta cash (BRL ou USD).
|
|
692
|
+
- Não cria transação — atualiza diretamente o initial_balance da conta.
|
|
693
|
+
- Não suportado para cartão de crédito.
|
|
694
|
+
|
|
695
|
+
EXEMPLO — atualizar saldo USD pra $537:
|
|
696
|
+
{ "account_name": "Wise USD", "amount_cents": 53700 }
|
|
697
|
+
|
|
698
|
+
EXEMPLO — corrigir saldo BRL pra R$1.234,56:
|
|
699
|
+
{ "account_name": "Itaú", "amount_cents": 123456 }`,
|
|
700
|
+
inputSchema: {
|
|
701
|
+
type: "object",
|
|
702
|
+
properties: {
|
|
703
|
+
account_name: { type: "string", description: "Nome da conta (match parcial)" },
|
|
704
|
+
amount_cents: { type: "number", description: "Novo saldo absoluto em centavos da moeda da conta" },
|
|
705
|
+
},
|
|
706
|
+
required: ["account_name", "amount_cents"],
|
|
707
|
+
},
|
|
708
|
+
},
|
|
624
709
|
// ── Bills (Contas a Pagar) ──────────────────────────────────────
|
|
625
710
|
{
|
|
626
711
|
name: "fin_listar_bills",
|
|
@@ -786,7 +871,9 @@ CAMPOS:
|
|
|
786
871
|
- name: string — nome da conta (obrigatório, ex: "Nubank", "Inter", "Carteira").
|
|
787
872
|
- institution: string — nome da instituição financeira.
|
|
788
873
|
- type: string — 'cash' (corrente/carteira/poupança) ou 'credit' (cartão de crédito) (obrigatório).
|
|
789
|
-
- initial_balance_cents: number — saldo inicial em centavos (default: 0).
|
|
874
|
+
- initial_balance_cents: number — saldo inicial em centavos (default: 0). Para cartão credit, é o valor de uma fatura preexistente (use com initial_invoice_date).
|
|
875
|
+
- initial_invoice_date: string YYYY-MM-DD — data da fatura inicial (cutoff histórico). OMITIR é o comportamento recomendado para cartões novos — significa "sem cutoff", ou seja, transações com qualquer tx_date (inclusive anteriores à criação) contam no total da fatura.
|
|
876
|
+
- initial_invoice_amount_cents: number — alias de initial_balance_cents quando se refere a fatura inicial de cartão. Use junto com initial_invoice_date.
|
|
790
877
|
- closing_day: number — dia de fechamento da fatura, 1-28 (obrigatório para type 'credit').
|
|
791
878
|
- due_day: number — dia de vencimento da fatura, 1-28 (obrigatório para type 'credit').
|
|
792
879
|
- credit_limit_cents: number — limite de crédito em centavos (para type 'credit').
|
|
@@ -794,7 +881,14 @@ CAMPOS:
|
|
|
794
881
|
REGRAS DE NEGÓCIO:
|
|
795
882
|
- Cartão de crédito (type 'credit') EXIGE closing_day e due_day.
|
|
796
883
|
- closing_day e due_day devem estar entre 1 e 28.
|
|
797
|
-
- Valores em centavos
|
|
884
|
+
- Valores em centavos.
|
|
885
|
+
- **Para cartão de crédito**: por padrão (quando initial_invoice_date é omitido), o cartão é criado SEM cutoff histórico. Transações com qualquer tx_date contam no total da fatura. Use initial_invoice_date + initial_invoice_amount_cents apenas se o usuário tem um saldo de fatura preexistente vindo de outro sistema.
|
|
886
|
+
|
|
887
|
+
EXEMPLO — cartão novo (sem fatura preexistente):
|
|
888
|
+
{ "name": "Nubank", "type": "credit", "closing_day": 19, "due_day": 26, "credit_limit_cents": 500000 }
|
|
889
|
+
|
|
890
|
+
EXEMPLO — cartão migrado com fatura já aberta:
|
|
891
|
+
{ "name": "Itaú", "type": "credit", "closing_day": 1, "due_day": 9, "initial_invoice_date": "2026-03-15", "initial_invoice_amount_cents": 350000 }`,
|
|
798
892
|
inputSchema: {
|
|
799
893
|
type: "object",
|
|
800
894
|
properties: {
|
|
@@ -802,6 +896,8 @@ REGRAS DE NEGÓCIO:
|
|
|
802
896
|
institution: { type: "string", description: "Nome da instituição financeira" },
|
|
803
897
|
type: { type: "string", description: "'cash' ou 'credit'" },
|
|
804
898
|
initial_balance_cents: { type: "number", description: "Saldo inicial em centavos (default: 0)" },
|
|
899
|
+
initial_invoice_date: { type: "string", description: "YYYY-MM-DD — data da fatura inicial. Omitir para cartão sem cutoff histórico (recomendado)." },
|
|
900
|
+
initial_invoice_amount_cents: { type: "number", description: "Valor da fatura inicial em centavos. Use com initial_invoice_date." },
|
|
805
901
|
closing_day: { type: "number", description: "Dia de fechamento da fatura (1-28, obrigatório para credit)" },
|
|
806
902
|
due_day: { type: "number", description: "Dia de vencimento da fatura (1-28, obrigatório para credit)" },
|
|
807
903
|
credit_limit_cents: { type: "number", description: "Limite de crédito em centavos (para credit)" },
|
|
@@ -813,21 +909,27 @@ REGRAS DE NEGÓCIO:
|
|
|
813
909
|
name: "fin_editar_conta",
|
|
814
910
|
description: `Edita uma conta bancária existente. Campos omitidos permanecem inalterados.
|
|
815
911
|
|
|
816
|
-
QUANDO USAR: corrigir nome, instituição, limites
|
|
912
|
+
QUANDO USAR: corrigir nome, instituição, limites, dias de fechamento/vencimento, OU corrigir a data/valor da fatura inicial em cartões criados com cutoff errado.
|
|
817
913
|
|
|
818
914
|
CAMPOS:
|
|
819
915
|
- account_id: string UUID — ID da conta (obrigatório).
|
|
820
916
|
- name: string — novo nome.
|
|
821
917
|
- institution: string — nova instituição.
|
|
822
918
|
- type: string — 'cash' ou 'credit'.
|
|
823
|
-
- initial_balance_cents: number — novo saldo inicial em centavos.
|
|
919
|
+
- initial_balance_cents: number — novo saldo inicial / fatura inicial em centavos.
|
|
920
|
+
- initial_invoice_date: string YYYY-MM-DD ou null — data da fatura inicial (cutoff histórico). Passe null para remover o cutoff (transações antigas voltam a contar no total).
|
|
921
|
+
- initial_invoice_amount_cents: number — alias de initial_balance_cents quando se refere a fatura inicial de cartão.
|
|
824
922
|
- closing_day: number — novo dia de fechamento (1-28).
|
|
825
923
|
- due_day: number — novo dia de vencimento (1-28).
|
|
826
924
|
- credit_limit_cents: number — novo limite de crédito em centavos.
|
|
827
925
|
|
|
828
926
|
REGRAS DE NEGÓCIO:
|
|
829
927
|
- Valores em centavos.
|
|
830
|
-
- Campos omitidos não são alterados
|
|
928
|
+
- Campos omitidos não são alterados.
|
|
929
|
+
- Use initial_invoice_date: null para remover o cutoff histórico de um cartão (caso transações antigas estejam aparecendo fora da fatura no app).
|
|
930
|
+
|
|
931
|
+
EXEMPLO — remover cutoff de um cartão criado errado:
|
|
932
|
+
{ "account_id": "uuid-do-cartao", "initial_invoice_date": null, "initial_invoice_amount_cents": 0 }`,
|
|
831
933
|
inputSchema: {
|
|
832
934
|
type: "object",
|
|
833
935
|
properties: {
|
|
@@ -836,6 +938,8 @@ REGRAS DE NEGÓCIO:
|
|
|
836
938
|
institution: { type: "string", description: "Nova instituição" },
|
|
837
939
|
type: { type: "string", description: "'cash' ou 'credit'" },
|
|
838
940
|
initial_balance_cents: { type: "number", description: "Novo saldo inicial em centavos" },
|
|
941
|
+
initial_invoice_date: { type: "string", description: "YYYY-MM-DD ou null — data da fatura inicial (cutoff histórico)" },
|
|
942
|
+
initial_invoice_amount_cents: { type: "number", description: "Valor da fatura inicial em centavos" },
|
|
839
943
|
closing_day: { type: "number", description: "Novo dia de fechamento (1-28)" },
|
|
840
944
|
due_day: { type: "number", description: "Novo dia de vencimento (1-28)" },
|
|
841
945
|
credit_limit_cents: { type: "number", description: "Novo limite de crédito em centavos" },
|
|
@@ -1041,6 +1145,15 @@ async function handleTool(name, args) {
|
|
|
1041
1145
|
case "fin_ajuste_fatura": {
|
|
1042
1146
|
return ok(await api("POST", `/api/genius/card-invoice-adjustments`, args));
|
|
1043
1147
|
}
|
|
1148
|
+
case "fin_cambio": {
|
|
1149
|
+
return ok(await api("POST", `/api/genius/exchange`, args));
|
|
1150
|
+
}
|
|
1151
|
+
case "fin_ajustar_saldo_conta": {
|
|
1152
|
+
const { account_name, amount_cents } = args;
|
|
1153
|
+
return ok(
|
|
1154
|
+
await api("POST", `/api/genius/accounts/${encodeURIComponent(account_name)}/balance`, { amount_cents })
|
|
1155
|
+
);
|
|
1156
|
+
}
|
|
1044
1157
|
case "fin_listar_bills": {
|
|
1045
1158
|
return ok(await api("GET", `/api/genius/bills`));
|
|
1046
1159
|
}
|
|
@@ -1063,10 +1176,27 @@ async function handleTool(name, args) {
|
|
|
1063
1176
|
return ok(await api("GET", `/api/genius/accounts`));
|
|
1064
1177
|
}
|
|
1065
1178
|
case "fin_criar_conta": {
|
|
1066
|
-
|
|
1179
|
+
// Map user-friendly names to Genius API field names.
|
|
1180
|
+
// initial_invoice_date / initial_invoice_amount_cents → initial_balance_date / initial_balance_cents
|
|
1181
|
+
const { initial_invoice_date, initial_invoice_amount_cents, ...rest } = args;
|
|
1182
|
+
const mapped = { ...rest };
|
|
1183
|
+
if (initial_invoice_date !== undefined) {
|
|
1184
|
+
mapped.initial_balance_date = initial_invoice_date;
|
|
1185
|
+
}
|
|
1186
|
+
if (initial_invoice_amount_cents !== undefined) {
|
|
1187
|
+
mapped.initial_balance_cents = initial_invoice_amount_cents;
|
|
1188
|
+
}
|
|
1189
|
+
return ok(await api("POST", `/api/genius/accounts`, mapped));
|
|
1067
1190
|
}
|
|
1068
1191
|
case "fin_editar_conta": {
|
|
1069
|
-
const { account_id, ...
|
|
1192
|
+
const { account_id, initial_invoice_date, initial_invoice_amount_cents, ...rest } = args;
|
|
1193
|
+
const body = { ...rest };
|
|
1194
|
+
if (initial_invoice_date !== undefined) {
|
|
1195
|
+
body.initial_balance_date = initial_invoice_date;
|
|
1196
|
+
}
|
|
1197
|
+
if (initial_invoice_amount_cents !== undefined) {
|
|
1198
|
+
body.initial_balance_cents = initial_invoice_amount_cents;
|
|
1199
|
+
}
|
|
1070
1200
|
return ok(await api("PATCH", `/api/genius/accounts/${account_id}`, body));
|
|
1071
1201
|
}
|
|
1072
1202
|
case "fin_listar_categorias": {
|
|
@@ -1094,7 +1224,7 @@ async function handleTool(name, args) {
|
|
|
1094
1224
|
// ── Server ──────────────────────────────────────────────────────────
|
|
1095
1225
|
|
|
1096
1226
|
const server = new Server(
|
|
1097
|
-
{ name: "fin-app", version: "2.
|
|
1227
|
+
{ name: "fin-app", version: "2.3.0" },
|
|
1098
1228
|
{ capabilities: { tools: {}, resources: {} } }
|
|
1099
1229
|
);
|
|
1100
1230
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fin-app-mcp",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "MCP server para o FIN App — finanças pessoais. Expõe tools para agents LLM operarem contas, despesas, faturas de cartão, bills recorrentes e mais.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.mjs",
|