next-finance-mcp 0.5.9 → 0.6.2

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/dist/client.d.ts CHANGED
@@ -108,6 +108,11 @@ export interface ResultadoLancamentos {
108
108
  saldo: number;
109
109
  };
110
110
  }
111
+ export interface DivisaoSlim {
112
+ valor: number;
113
+ plano_de_contas: string;
114
+ centro_de_custo: string;
115
+ }
111
116
  export interface LancamentoSlim {
112
117
  data: string;
113
118
  valor: number;
@@ -115,6 +120,7 @@ export interface LancamentoSlim {
115
120
  conta: string;
116
121
  plano_de_contas: string;
117
122
  centro_de_custo: string;
123
+ divisoes?: DivisaoSlim[];
118
124
  despesa: boolean;
119
125
  receita: boolean;
120
126
  previsao: boolean;
package/dist/client.js CHANGED
@@ -252,10 +252,10 @@ export async function selecionarCarteira(nomeCarteira) {
252
252
  const nomeExibir = String(encontrada["NomeCarteira"] ?? nomeCarteira);
253
253
  return { sucesso: ok, mensagem: ok ? `Carteira "${nomeExibir}" selecionada.` : `Falha ao selecionar carteira (${resp.status}).` };
254
254
  }
255
- // Campos a exibir de conta — sem IDs internos
255
+ // Campos a exibir de conta — sem IDs internos, sem Ativo (todas exibidas são ativas)
256
256
  const CAMPOS_EXIBIR_CONTA = new Set([
257
257
  "Nome", "Descricao", "NomeConta", "NomeTipoConta",
258
- "Ativo", "Status", "Saldo", "Banco", "Agencia", "Numero", "Moeda",
258
+ "Saldo", "Banco", "Agencia", "Numero", "Moeda",
259
259
  ]);
260
260
  /** Slim para exibição — sem IDs. Preserva Id internamente via _id para uso do buscarLancamentos. */
261
261
  function slimConta(c) {
@@ -320,7 +320,9 @@ async function fetchContas() {
320
320
  }
321
321
  export async function listarContas(filtro = {}) {
322
322
  const { contas: raw, fonte } = await fetchContas();
323
- let contas = raw.map(slimConta);
323
+ // Apenas contas ativas (Ativo === true no cadastro)
324
+ const ativas = raw.filter(c => c["Ativo"] !== false);
325
+ let contas = ativas.map(slimConta);
324
326
  // Filtro por nome (busca em Nome, Descricao, NomeConta)
325
327
  if (filtro.busca?.trim()) {
326
328
  const termo = filtro.busca.trim().toLowerCase();
@@ -456,19 +458,31 @@ export async function listarTiposConta() {
456
458
  return { tipos };
457
459
  }
458
460
  function slimLancamento(l) {
461
+ const divs = l["ListaLancamentoDivisao"] ?? [];
462
+ // Divisões: cada uma tem seu próprio valor (+/-), plano de contas e centro de custo
463
+ const divisoes = divs.map(d => ({
464
+ valor: Number(d["Valor"] ?? 0),
465
+ plano_de_contas: String(d["NomePlanoDeContas"] ?? "").trim(),
466
+ centro_de_custo: String(d["NomeCentroDeCustos"] ?? "").trim(),
467
+ }));
468
+ // Raiz: plano e centro só existem quando não há divisões
469
+ const plano = String(l["NomePlanoDeContas"] ?? "").trim();
470
+ const centro = String(l["NomeCentroDeCustos"] ?? "").trim();
471
+ const conta = String(l["NomeConta"] ?? l["NomeContaFinanceira"] ?? l["Conta"] ?? "").trim();
459
472
  return {
460
- data: String(l["Data"] ?? "").slice(0, 10),
473
+ data: String(l["Data"] ?? l["DataLancamento"] ?? "").slice(0, 10),
461
474
  valor: Number(l["Valor"] ?? 0),
462
- descricao: String(l["Descricao"] ?? ""),
463
- conta: String(l["NomeConta"] ?? ""),
464
- plano_de_contas: String(l["NomePlanoDeContas"] ?? ""),
465
- centro_de_custo: String(l["NomeCentroDeCustos"] ?? ""),
475
+ descricao: String(l["Descricao"] ?? l["Historico"] ?? "").trim(),
476
+ conta,
477
+ plano_de_contas: plano,
478
+ centro_de_custo: centro,
479
+ divisoes: divisoes.length > 0 ? divisoes : undefined,
466
480
  despesa: Boolean(l["Despesa"]),
467
481
  receita: Boolean(l["Receita"]),
468
482
  previsao: Boolean(l["Previsao"]),
469
483
  transferencia: !!l["IdLancamentoTransferencia"],
470
- observacoes: l["Observacoes"] ? String(l["Observacoes"]) : undefined,
471
- numero_documento: l["NumeroDocumento"] ? String(l["NumeroDocumento"]) : undefined,
484
+ observacoes: l["Observacoes"] ? String(l["Observacoes"]).trim() : undefined,
485
+ numero_documento: l["NumeroDocumento"] ? String(l["NumeroDocumento"]).trim() : undefined,
472
486
  };
473
487
  }
474
488
  export async function buscarLancamentos(opts) {
@@ -484,10 +498,11 @@ export async function buscarLancamentos(opts) {
484
498
  const termo = opts.nomeConta.trim().toLowerCase();
485
499
  const encontrada = contas
486
500
  .map(c => c)
501
+ .filter(c => c["Ativo"] !== false) // apenas contas ativas
487
502
  .find(c => String(c["Nome"] ?? c["NomeConta"] ?? "").toLowerCase().includes(termo));
488
503
  if (!encontrada)
489
- throw new Error(`Conta "${opts.nomeConta}" não encontrada. Use listar_contas para ver as contas disponíveis.`);
490
- idContaResolvido = String(encontrada["Id"] ?? "");
504
+ throw new Error(`Conta "${opts.nomeConta}" não encontrada entre as contas ativas. Use listar_contas para ver as contas disponíveis.`);
505
+ idContaResolvido = String(encontrada["Id"] ?? encontrada["IdConta"] ?? "");
491
506
  }
492
507
  let lancamentos;
493
508
  // Tenta API REST primeiro; cai no endpoint legado se falhar
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "next-finance-mcp",
3
- "version": "0.5.9",
3
+ "version": "0.6.2",
4
4
  "mcpName": "io.github.paivapiovesan/next-finance",
5
5
  "description": "MCP Server para o NEXT Finance (finance.net.br) — login via browser, listagem de carteiras, contas e lançamentos",
6
6
  "type": "module",