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 +6 -0
- package/dist/client.js +27 -12
- package/package.json +1 -1
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
|
-
"
|
|
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
|
-
|
|
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
|
|
464
|
-
plano_de_contas:
|
|
465
|
-
centro_de_custo:
|
|
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.
|
|
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",
|