@fullqueso/mcp-bc-gastos 1.27.0 → 1.28.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/.env.example +1 -0
- package/CHANGELOG.md +15 -0
- package/README.md +3 -1
- package/config/company-config.js +8 -1
- package/package.json +1 -1
- package/tools/account-transactions.js +1 -1
- package/tools/anomaly-detection.js +1 -1
- package/tools/auditoria/bank-ledger-entries.js +1 -1
- package/tools/auditoria/bank-reconciliation-report.js +1 -1
- package/tools/auditoria/find-potential-matches.js +1 -1
- package/tools/auditoria/gl-account-entries.js +1 -1
- package/tools/auditoria/list-bank-accounts.js +1 -1
- package/tools/auditoria/pm-receipts.js +1 -1
- package/tools/auditoria/reconcile-pos-sales.js +1 -1
- package/tools/auditoria/reconciliation-status.js +1 -1
- package/tools/auditoria/suggest-journal-entries.js +1 -1
- package/tools/auditoria/unmatched-ledger-entries.js +1 -1
- package/tools/auditoria/unmatched-statement-lines.js +1 -1
- package/tools/cierre-mensual/generate-closing-journal.js +1 -1
- package/tools/cierre-mensual/get-match-results.js +1 -1
- package/tools/cierre-mensual/get-questionnaire.js +1 -1
- package/tools/cierre-mensual/reconcile-with-bc.js +1 -1
- package/tools/cierre-mensual/start-month-closing.js +1 -1
- package/tools/cierre-mensual/submit-answers.js +1 -1
- package/tools/cobranzas/collection-status.js +1 -1
- package/tools/cobranzas/customer-balances.js +1 -1
- package/tools/cobranzas/customer-ledger.js +1 -1
- package/tools/cobranzas/customer-list.js +1 -1
- package/tools/cobranzas/open-payables.js +1 -1
- package/tools/cobranzas/open-receivables.js +1 -1
- package/tools/cobranzas/vendor-ledger.js +1 -1
- package/tools/efficiency-ratios.js +1 -1
- package/tools/expense-analysis.js +1 -1
- package/tools/expense-details.js +1 -1
- package/tools/financials/cash-flow.js +1 -1
- package/tools/financials/index.js +3 -3
- package/tools/get-exchange-rate.js +1 -1
- package/tools/inventario/inventory-by-location.js +1 -1
- package/tools/inventario/inventory-change.js +1 -1
- package/tools/inventario/inventory-levels.js +1 -1
- package/tools/inventario/item-card.js +1 -1
- package/tools/inventario/item-cost-trend.js +1 -1
- package/tools/inventario/item-ledger-entries.js +1 -1
- package/tools/inventario/item-value-entries.js +1 -1
- package/tools/list-vendors.js +1 -1
- package/tools/multi-payment/draft-payables.js +1 -1
- package/tools/multi-payment/draft-receivables.js +1 -1
- package/tools/multi-payment/draft-summary.js +1 -1
- package/tools/payroll/employees.js +1 -1
- package/tools/payroll/payroll-documents.js +1 -1
- package/tools/payroll/payroll-lines.js +1 -1
- package/tools/reports/manager-report.js +1 -1
- package/tools/trends.js +1 -1
- package/tools/vendor-transactions.js +1 -1
- package/tools/ventas/item-sales-detail.js +1 -1
- package/tools/ventas/product-performance.js +1 -1
- package/tools/ventas/sales-analysis.js +1 -1
package/.env.example
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## [1.28.0] — 2026-06-12
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- **Cuarta compañía: `FQFR` — Full Queso Franquicias, C.A.** El MCP solo exponía FQ01/FQ28/FQ88; ahora la compañía de Franquicias está disponible en todas las herramientas.
|
|
7
|
+
- **Datos BC** (descubiertos del endpoint `/companies`): `companyId` (GUID) = `30e63c27-6336-f011-9a4a-000d3afe29c3`; `name` OData V4 = `Full Queso Franquicias` (→ `companyName: 'Full%20Queso%20Franquicias'`).
|
|
8
|
+
- Nueva entrada `FQFR` en `config/company-config.js` (`getStores()`) y agregada a `ALL_STORE_CODES` → `"all"` ahora incluye Franquicias en consolidados/comparativas.
|
|
9
|
+
- Nueva env var **`BC_COMPANY_FQFR`** (opcional, como FQ28/FQ88) en `.env`, `.env.example` y README. La validación de `server.js` no cambia (solo FQ01 es obligatoria).
|
|
10
|
+
- **52 herramientas** tenían el `enum` de tiendas hardcodeado (`['FQ01','FQ28','FQ88'(,'all')]`) — esto rechazaba `FQFR` en la validación del schema MCP. Se agregó `'FQFR'` a los 52 enums (39 sin `'all'`, 13 con `'all'`).
|
|
11
|
+
- **Verificado contra BC real:** token OK; API v2.0 (GUID) → 200; OData V4 (nombre) → 200; `getGLEntries` ingresos 2025 de FQFR → 116 asientos; `resolveStores(['all'])` → `FQ01,FQ28,FQ88,FQFR`. `node --check` OK en todos los .js.
|
|
12
|
+
|
|
13
|
+
### Nota operativa
|
|
14
|
+
- **Reiniciar Claude Desktop** tras el publish para que los tools recarguen con FQFR (G-002).
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
3
18
|
## [1.27.0] — 2026-06-05
|
|
4
19
|
|
|
5
20
|
### Changed
|
package/README.md
CHANGED
|
@@ -33,7 +33,8 @@ Add to your `claude_desktop_config.json`:
|
|
|
33
33
|
"BC_ENVIRONMENT": "production",
|
|
34
34
|
"BC_COMPANY_FQ01": "company-guid-fq01",
|
|
35
35
|
"BC_COMPANY_FQ28": "company-guid-fq28",
|
|
36
|
-
"BC_COMPANY_FQ88": "company-guid-fq88"
|
|
36
|
+
"BC_COMPANY_FQ88": "company-guid-fq88",
|
|
37
|
+
"BC_COMPANY_FQFR": "company-guid-franquicias"
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
40
|
}
|
|
@@ -181,6 +182,7 @@ All APIs share the same OAuth 2.0 credentials (Azure AD client credentials flow)
|
|
|
181
182
|
| `BC_COMPANY_FQ01` | Yes | Company GUID for store FQ01 |
|
|
182
183
|
| `BC_COMPANY_FQ28` | No | Company GUID for store FQ28 |
|
|
183
184
|
| `BC_COMPANY_FQ88` | No | Company GUID for store FQ88 |
|
|
185
|
+
| `BC_COMPANY_FQFR` | No | Company GUID for Franquicias (FQFR) |
|
|
184
186
|
| `LOG_LEVEL` | No | `debug`, `info`, `warn`, `error` (default: `info`) |
|
|
185
187
|
|
|
186
188
|
## Chart of Accounts
|
package/config/company-config.js
CHANGED
|
@@ -24,10 +24,17 @@ function getStores() {
|
|
|
24
24
|
shortName: 'Candelaria',
|
|
25
25
|
location: 'La Candelaria, Caracas',
|
|
26
26
|
},
|
|
27
|
+
FQFR: {
|
|
28
|
+
companyId: process.env.BC_COMPANY_FQFR,
|
|
29
|
+
companyName: 'Full%20Queso%20Franquicias',
|
|
30
|
+
name: 'FQFR Franquicias',
|
|
31
|
+
shortName: 'Franquicias',
|
|
32
|
+
location: 'Franquicias',
|
|
33
|
+
},
|
|
27
34
|
};
|
|
28
35
|
}
|
|
29
36
|
|
|
30
|
-
export const ALL_STORE_CODES = ['FQ01', 'FQ28', 'FQ88'];
|
|
37
|
+
export const ALL_STORE_CODES = ['FQ01', 'FQ28', 'FQ88', 'FQFR'];
|
|
31
38
|
|
|
32
39
|
export function resolveStores(storeCodes) {
|
|
33
40
|
const stores = getStores();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fullqueso/mcp-bc-gastos",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.28.0",
|
|
4
4
|
"description": "MCP server for Business Central operational expense analysis, bank reconciliation, POS reconciliation, accounts receivable/payable, multi-payment draft visibility, payroll, inventory cost analysis, and manager reports - Full Queso franchise stores",
|
|
5
5
|
"main": "server.js",
|
|
6
6
|
"bin": {
|
|
@@ -28,7 +28,7 @@ export const anomalyDetectionTool = {
|
|
|
28
28
|
},
|
|
29
29
|
stores: {
|
|
30
30
|
type: 'array',
|
|
31
|
-
items: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'all'] },
|
|
31
|
+
items: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'FQFR', 'all'] },
|
|
32
32
|
description: 'Tiendas a analizar.',
|
|
33
33
|
default: ['all'],
|
|
34
34
|
},
|
|
@@ -19,7 +19,7 @@ export const generateClosingJournalTool = {
|
|
|
19
19
|
inputSchema: {
|
|
20
20
|
type: 'object',
|
|
21
21
|
properties: {
|
|
22
|
-
store: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88'] },
|
|
22
|
+
store: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'FQFR'] },
|
|
23
23
|
month: { type: 'string', description: 'YYYY-MM' },
|
|
24
24
|
output_dir: { type: 'string', description: 'Directorio de salida (default: /tmp).' },
|
|
25
25
|
allow_partial: {
|
|
@@ -23,7 +23,7 @@ export const getClosingMatchResultsTool = {
|
|
|
23
23
|
inputSchema: {
|
|
24
24
|
type: 'object',
|
|
25
25
|
properties: {
|
|
26
|
-
store: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88'] },
|
|
26
|
+
store: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'FQFR'] },
|
|
27
27
|
month: { type: 'string', description: 'YYYY-MM' },
|
|
28
28
|
list: {
|
|
29
29
|
type: 'string',
|
|
@@ -13,7 +13,7 @@ export const getClosingQuestionnaireTool = {
|
|
|
13
13
|
inputSchema: {
|
|
14
14
|
type: 'object',
|
|
15
15
|
properties: {
|
|
16
|
-
store: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88'] },
|
|
16
|
+
store: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'FQFR'] },
|
|
17
17
|
month: { type: 'string', description: 'YYYY-MM' },
|
|
18
18
|
bucket: {
|
|
19
19
|
type: 'string',
|
|
@@ -15,7 +15,7 @@ export const reconcileWithBcTool = {
|
|
|
15
15
|
inputSchema: {
|
|
16
16
|
type: 'object',
|
|
17
17
|
properties: {
|
|
18
|
-
store: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88'] },
|
|
18
|
+
store: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'FQFR'] },
|
|
19
19
|
month: { type: 'string', description: 'YYYY-MM' },
|
|
20
20
|
},
|
|
21
21
|
required: ['store', 'month'],
|
|
@@ -19,7 +19,7 @@ export const startMonthClosingTool = {
|
|
|
19
19
|
inputSchema: {
|
|
20
20
|
type: 'object',
|
|
21
21
|
properties: {
|
|
22
|
-
store: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88'] },
|
|
22
|
+
store: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'FQFR'] },
|
|
23
23
|
month: {
|
|
24
24
|
type: 'string',
|
|
25
25
|
description: 'Mes YYYY-MM (opcional). Si no se especifica, usa el mes más antiguo con statements abiertos.',
|
|
@@ -10,7 +10,7 @@ export const submitClosingAnswersTool = {
|
|
|
10
10
|
inputSchema: {
|
|
11
11
|
type: 'object',
|
|
12
12
|
properties: {
|
|
13
|
-
store: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88'] },
|
|
13
|
+
store: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'FQFR'] },
|
|
14
14
|
month: { type: 'string', description: 'YYYY-MM' },
|
|
15
15
|
user: {
|
|
16
16
|
type: 'string',
|
|
@@ -28,7 +28,7 @@ export const efficiencyRatiosTool = {
|
|
|
28
28
|
},
|
|
29
29
|
stores: {
|
|
30
30
|
type: 'array',
|
|
31
|
-
items: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'all'] },
|
|
31
|
+
items: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'FQFR', 'all'] },
|
|
32
32
|
description: 'Tiendas a analizar.',
|
|
33
33
|
default: ['all'],
|
|
34
34
|
},
|
|
@@ -29,7 +29,7 @@ export const expenseAnalysisTool = {
|
|
|
29
29
|
},
|
|
30
30
|
stores: {
|
|
31
31
|
type: 'array',
|
|
32
|
-
items: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'all'] },
|
|
32
|
+
items: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'FQFR', 'all'] },
|
|
33
33
|
description: 'Tiendas a analizar. Use ["all"] para todas.',
|
|
34
34
|
default: ['all'],
|
|
35
35
|
},
|
package/tools/expense-details.js
CHANGED
|
@@ -66,7 +66,7 @@ export const cashFlowTool = {
|
|
|
66
66
|
properties: {
|
|
67
67
|
stores: {
|
|
68
68
|
type: 'array',
|
|
69
|
-
items: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'all'] },
|
|
69
|
+
items: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'FQFR', 'all'] },
|
|
70
70
|
description: 'Tiendas a analizar. Default: ["all"] (FQ01 + FQ28 + FQ88 + consolidado).',
|
|
71
71
|
default: ['all'],
|
|
72
72
|
},
|
|
@@ -12,7 +12,7 @@ export { cashFlowTool, handleCashFlow } from './cash-flow.js';
|
|
|
12
12
|
export const financialStatementsTool = {
|
|
13
13
|
name: 'get_financial_statements',
|
|
14
14
|
description:
|
|
15
|
-
'Estado financiero completo (P&L / Profit & Loss) para una o más tiendas Full Queso (FQ01, FQ28, FQ88) en un período. ' +
|
|
15
|
+
'Estado financiero completo (P&L / Profit & Loss) para una o más tiendas Full Queso (FQ01, FQ28, FQ88, FQFR) en un período. ' +
|
|
16
16
|
'Ejecuta las queries de Business Central en paralelo (ingresos 40000-49999, COGS 50000-59999, gastos 60000-99999) y ' +
|
|
17
17
|
'devuelve JSON estructurado: ingresos por cuenta, COGS, margen bruto, gastos por categoría con benchmarks, margen ' +
|
|
18
18
|
'operativo, ratios clave, score 0-100 e insights accionables. Multi-tienda calcula también el consolidado. ' +
|
|
@@ -24,8 +24,8 @@ export const financialStatementsTool = {
|
|
|
24
24
|
properties: {
|
|
25
25
|
stores: {
|
|
26
26
|
type: 'array',
|
|
27
|
-
items: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'all'] },
|
|
28
|
-
description: 'Tiendas a analizar. Default: ["all"] (FQ01 + FQ28 + FQ88 + consolidado).',
|
|
27
|
+
items: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'FQFR', 'all'] },
|
|
28
|
+
description: 'Tiendas a analizar. Default: ["all"] (FQ01 + FQ28 + FQ88 + FQFR + consolidado).',
|
|
29
29
|
default: ['all'],
|
|
30
30
|
},
|
|
31
31
|
period: {
|
package/tools/list-vendors.js
CHANGED
package/tools/trends.js
CHANGED
|
@@ -27,7 +27,7 @@ export const itemSalesDetailTool = {
|
|
|
27
27
|
},
|
|
28
28
|
stores: {
|
|
29
29
|
type: 'array',
|
|
30
|
-
items: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'all'] },
|
|
30
|
+
items: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'FQFR', 'all'] },
|
|
31
31
|
description: 'Tiendas. Use ["all"] para todas.',
|
|
32
32
|
default: ['all'],
|
|
33
33
|
},
|
|
@@ -30,7 +30,7 @@ export const productPerformanceTool = {
|
|
|
30
30
|
},
|
|
31
31
|
stores: {
|
|
32
32
|
type: 'array',
|
|
33
|
-
items: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'all'] },
|
|
33
|
+
items: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'FQFR', 'all'] },
|
|
34
34
|
description: 'Tiendas a analizar',
|
|
35
35
|
default: ['all'],
|
|
36
36
|
},
|
|
@@ -30,7 +30,7 @@ export const salesAnalysisTool = {
|
|
|
30
30
|
},
|
|
31
31
|
stores: {
|
|
32
32
|
type: 'array',
|
|
33
|
-
items: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'all'] },
|
|
33
|
+
items: { type: 'string', enum: ['FQ01', 'FQ28', 'FQ88', 'FQFR', 'all'] },
|
|
34
34
|
description: 'Tiendas a analizar. Use ["all"] para todas.',
|
|
35
35
|
default: ['all'],
|
|
36
36
|
},
|