@fullqueso/mcp-bc-gastos 1.31.0 → 1.35.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.
Files changed (68) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/README.md +237 -68
  3. package/config/bank-gl-map.json +304 -40
  4. package/config/company-config.js +22 -1
  5. package/config/income-accounts.js +3 -2
  6. package/lib/bc-client.js +14 -0
  7. package/package.json +1 -1
  8. package/scripts/generate-tools-doc.mjs +129 -0
  9. package/server.js +17 -2
  10. package/tools/account-transactions.js +2 -2
  11. package/tools/anomaly-detection.js +2 -1
  12. package/tools/auditoria/bank-ledger-entries.js +2 -2
  13. package/tools/auditoria/bank-reconciliation-report.js +2 -2
  14. package/tools/auditoria/find-potential-matches.js +2 -2
  15. package/tools/auditoria/gl-account-entries.js +2 -2
  16. package/tools/auditoria/list-bank-accounts.js +2 -2
  17. package/tools/auditoria/pm-receipts.js +2 -2
  18. package/tools/auditoria/reconcile-pos-sales.js +2 -2
  19. package/tools/auditoria/reconciliation-status.js +2 -2
  20. package/tools/auditoria/suggest-journal-entries.js +2 -2
  21. package/tools/auditoria/unmatched-ledger-entries.js +2 -2
  22. package/tools/auditoria/unmatched-statement-lines.js +2 -2
  23. package/tools/cierre-mensual/generate-closing-journal.js +2 -1
  24. package/tools/cierre-mensual/get-match-results.js +2 -1
  25. package/tools/cierre-mensual/get-questionnaire.js +2 -1
  26. package/tools/cierre-mensual/reconcile-with-bc.js +2 -2
  27. package/tools/cierre-mensual/start-month-closing.js +2 -2
  28. package/tools/cierre-mensual/submit-answers.js +2 -1
  29. package/tools/cobranzas/collection-status.js +2 -2
  30. package/tools/cobranzas/customer-balances.js +2 -2
  31. package/tools/cobranzas/customer-ledger.js +2 -2
  32. package/tools/cobranzas/customer-list.js +2 -2
  33. package/tools/cobranzas/open-payables.js +2 -2
  34. package/tools/cobranzas/open-receivables.js +2 -2
  35. package/tools/cobranzas/vendor-ledger.js +2 -2
  36. package/tools/efficiency-ratios.js +2 -1
  37. package/tools/expense-analysis.js +2 -1
  38. package/tools/expense-details.js +2 -2
  39. package/tools/financials/cash-flow.js +2 -2
  40. package/tools/financials/income-statement.js +265 -0
  41. package/tools/financials/index.js +3 -1
  42. package/tools/get-exchange-rate.js +2 -2
  43. package/tools/inventario/inventory-by-location.js +2 -2
  44. package/tools/inventario/inventory-change.js +2 -2
  45. package/tools/inventario/inventory-levels.js +2 -2
  46. package/tools/inventario/item-card.js +2 -2
  47. package/tools/inventario/item-cost-trend.js +2 -2
  48. package/tools/inventario/item-ledger-entries.js +2 -2
  49. package/tools/inventario/item-value-entries.js +2 -2
  50. package/tools/list-vendors.js +2 -2
  51. package/tools/multi-payment/draft-payables.js +2 -2
  52. package/tools/multi-payment/draft-receivables.js +2 -2
  53. package/tools/multi-payment/draft-summary.js +2 -2
  54. package/tools/multi-payment/index.js +1 -0
  55. package/tools/multi-payment/unposted-invoices.js +224 -0
  56. package/tools/payroll/employees.js +2 -2
  57. package/tools/payroll/index.js +1 -0
  58. package/tools/payroll/payroll-documents.js +2 -2
  59. package/tools/payroll/payroll-lines.js +2 -2
  60. package/tools/payroll/payroll-payments.js +133 -0
  61. package/tools/reports/manager-report.js +2 -2
  62. package/tools/store-comparison.js +1 -1
  63. package/tools/trends.js +2 -1
  64. package/tools/vendor-transactions.js +2 -2
  65. package/tools/ventas/item-sales-detail.js +2 -2
  66. package/tools/ventas/product-performance.js +2 -1
  67. package/tools/ventas/sales-analysis.js +2 -1
  68. package/tools/ventas/sales-store-comparison.js +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,86 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## [1.35.0] — 2026-09-03
4
+
5
+ Release de publicación: npm estaba en 1.33.0 mientras el repo ya tenía 1.34.0 + FQYK.
6
+ Esta versión sube a npm todo lo pendiente (incluye lo que 1.34.0 nunca documentó acá).
7
+
8
+ ### Added — `get_payroll_payments` (venía de 1.34.0, sin entrada en el CHANGELOG)
9
+ Documentos y líneas de pago de nómina para diagnóstico de residuales. `tools/payroll/`.
10
+
11
+ ### Added — FQYK City Market operativa en los 59 tools
12
+ - `config/company-config.js`: nueva compañía **FQYK** (City Market, Sabana Grande; alta en
13
+ producción 2026-08-29) y `ALL_STORE_CODES` como **fuente única** del universo de tiendas.
14
+ Los enum `store` de todos los tools la importan en vez de hardcodear la lista — agregar una
15
+ tienda ya no requiere tocar 50 archivos.
16
+ - `companyName` = `ALIMENTOS%20YELLOW%20KING%2C%20C.A`: al PATCHear `companyInformation`, BC
17
+ renombra la compañía a su `displayName`. Las URLs OData usan **ese** nombre; con el anterior
18
+ devuelven `company does not exist`.
19
+ - Si falta `BC_COMPANY_FQYK` en el entorno, `resolveStores()` avisa una vez por stderr: los
20
+ tools OData (por nombre) siguen funcionando, los REST (por GUID) fallan con 404.
21
+
22
+ ### Changed — README
23
+ - El bloque de ejemplo de `claude_desktop_config.json` ahora incluye `BC_COMPANY_FQYK`.
24
+ - Notas de instalación en macOS: rutas absolutas de Node (Claude Desktop no hereda el `PATH`
25
+ del shell) y setup de `~/mcp-venv` con `openpyxl` para los tools que exportan Excel.
26
+ - Conteo de tools corregido: 59 en 10 dominios (decía 22 en 4) y sección de tools regenerada.
27
+
28
+ ## [1.33.0] — 2026-07-11
29
+
30
+ ### Added — `get_income_statement`: estado de resultados en formato Power BI (Level 1)
31
+ Nuevo tool en `tools/financials/income-statement.js`. READ-ONLY.
32
+
33
+ - **Qué expone:** el reporte "Income Statement by Month" de Power BI (G/L Account **Level 1**)
34
+ para una tienda y un mes, agregando los General Ledger entries por cuenta level-1 con la
35
+ convención de signos de Power BI (`amount = debitAmount − creditAmount` → ingresos negativos,
36
+ costos/gastos positivos, Total negativo = ganancia). Devuelve las 3 secciones (40001/50001/60001),
37
+ cuentas level-1, totales, Total general y un **`accounts_map`** listo para el generador Excel
38
+ del skill-fq-resultados-mensual (`data.json`). Con `level=2` incluye las cuentas de posteo
39
+ hijas con su nombre real de BC.
40
+ - **Por qué:** resuelve las fronteras que `get_financial_statements` (agrega por categoría) no
41
+ separa: nómina **71000** vs impuestos **74000**, y otros **74000** (80xxx) vs **90000** (9xxxx).
42
+ Trabaja desde los entries por cuenta, así que cuadra 1:1 con Power BI.
43
+ - **Estructura level-1** embebida (`COA_PBI`) — fuente: screenshots Power BI FQ28, CoA compartido
44
+ FQ01/FQ28/FQ88. Espejo de `skill-fq-resultados-mensual/references/income_statement_coa.json`.
45
+ - **Nuevo en bc-client:** `getChartOfAccountNames(companyId)` (entidad BC `accounts`, cache por
46
+ companyId) para etiquetar las cuentas hijas en level 2.
47
+ - **Test:** `tests/test-income-statement.js` (agregación pura con GL entries mock, sin BC):
48
+ valida signos, mapeo por rangos, fronteras 71000/74000 y 74000/90000, totales y level 2.
49
+ - La columna **Ajustado** (drafts como posteados) y la reclasificación de dividendos las agrega
50
+ el skill sobre el `posted` — el MCP entrega solo el posted objetivo del GL.
51
+
52
+ ## [1.32.1] — 2026-07-04
53
+
54
+ ### Docs — README "Tools" regenerado desde el código (22 stale → 57 reales)
55
+ - **`scripts/generate-tools-doc.mjs`**: importa dinámicamente todos los `*Tool` de
56
+ `tools/**/*.js` (incluye definiciones en `index.js`, dedup por `name`), agrupa por
57
+ categoría y reescribe la sección `## Tools (N)` del README. Verificado 57/57 contra
58
+ el switch de `server.js`. Uso: `node scripts/generate-tools-doc.mjs --write`
59
+ (sin flag = dry-run a stdout). La sección queda marcada como autogenerada.
60
+
61
+ ## [1.32.0] — 2026-07-04
62
+
63
+ ### Added — `get_unposted_invoices`: facturas sin postear para Cierre Parcial
64
+ Nuevo tool en el cluster de draft visibility (`tools/multi-payment/unposted-invoices.js`).
65
+ Verificado contra BC real (mayo 2026, 4 empresas). READ-ONLY.
66
+
67
+ - **Qué expone:** facturas de compra y venta con `status` `Draft`/`In Review` en
68
+ `api/v2.0` `purchaseInvoices`/`salesInvoices` — documentos que NO están en el GL.
69
+ Complementa a `get_draft_payables`/`receivables`/`summary`, que son Multi-Payments
70
+ (settlement) sobre facturas ya posteadas y por tanto no sirven como ajuste P&L.
71
+ - **Para qué:** ajuste de CIERRE PARCIAL del P&L en `skill-fq-resultados-mensual`
72
+ (compras draft → +costo/gasto; ventas draft no-IC → +ingreso). Cada tienda incluye
73
+ `pl_adjustment_hint` con los montos listos.
74
+ - **Params:** `store` (incl. `all`), `type` (purchases|sales|both), `start_date`/`end_date`
75
+ (filtro por `postingDate`), `include_in_review` (default true), `summary_only`.
76
+ - **Multi-moneda correcto:** totales SIEMPRE por moneda (`by_currency`,
77
+ `non_ic_by_currency`, consolidado por moneda) — nunca se suman VES con USD.
78
+ `LCY` = USD; VES se convierte aguas arriba con `get_exchange_rate`.
79
+ - **Ventas IC:** separa clientes `IC-*` (`intercompany`) del total ajustable.
80
+ - **Smoke test:** `tests/test-unposted-invoices.js` (store y mes por CLI).
81
+ - Hallazgo del estreno (mayo 2026): FQ01 11 compras sin postear (Bs 1,838,737.54),
82
+ FQ28 4 (Bs 1,210,031.04), FQFR 2 ($7,116.50), FQ01 1 venta IC (Bs 165,456.04).
83
+
3
84
  ## [1.31.0] — 2026-07-01
4
85
 
5
86
  ### Added — KPIs de nómina operativa: tienda vs eventos, activos vs pagados
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # @fullqueso/mcp-bc-gastos
2
2
 
3
- MCP server for Microsoft Business Central — operational expenses, bank reconciliation, POS reconciliation, and accounts receivable/payable. Built for the Full Queso franchise (3 stores: FQ01 Chacao, FQ28 Marques, FQ88 Candelaria).
3
+ MCP server for Microsoft Business Central — operational expenses, bank reconciliation, POS reconciliation, and accounts receivable/payable. Built for the Full Queso franchise (4 stores: FQ01 Chacao, FQ28 Marques, FQ88 Candelaria, FQYK City Market — plus FQFR, the franchisor).
4
4
 
5
- **22 tools** across 4 domains, powered by 3 BC API integrations.
5
+ **59 tools** across 10 domains, powered by 4 BC API integrations.
6
6
 
7
7
  ## Features
8
8
 
@@ -34,6 +34,7 @@ Add to your `claude_desktop_config.json`:
34
34
  "BC_COMPANY_FQ01": "company-guid-fq01",
35
35
  "BC_COMPANY_FQ28": "company-guid-fq28",
36
36
  "BC_COMPANY_FQ88": "company-guid-fq88",
37
+ "BC_COMPANY_FQYK": "company-guid-fqyk",
37
38
  "BC_COMPANY_FQFR": "company-guid-franquicias"
38
39
  }
39
40
  }
@@ -41,6 +42,17 @@ Add to your `claude_desktop_config.json`:
41
42
  }
42
43
  ```
43
44
 
45
+ > **macOS — rutas absolutas.** Claude Desktop no hereda el `PATH` del shell: si Node vino de
46
+ > Homebrew o nvm, `"command": "npx"` falla con `spawn npx ENOENT`. Lo robusto es
47
+ > `npm install -g @fullqueso/mcp-bc-gastos` y luego apuntar el config al server con rutas
48
+ > absolutas — `"command"` = salida de `command -v node`, `"args"` = `["<npm root -g>/@fullqueso/mcp-bc-gastos/server.js"]`.
49
+
50
+ > **Exportación a Excel.** Los tools que generan `.xlsx` (`generate_cxp_report`,
51
+ > `get_bank_reconciliation_report` con `excel_output`, `get_cash_flow`, drafts, cierre mensual)
52
+ > usan `~/mcp-venv/bin/python3` con `openpyxl`. Setup:
53
+ > `python3 -m venv ~/mcp-venv && ~/mcp-venv/bin/pip install openpyxl`.
54
+ > El resto de los tools funciona sin esto.
55
+
44
56
  ### Local Development
45
57
 
46
58
  ```bash
@@ -52,111 +64,268 @@ cp .env.example .env
52
64
  npm start
53
65
  ```
54
66
 
55
- ## Tools (22)
67
+ ## Tools (59)
56
68
 
57
- ### Expense Analysis (5 tools)
69
+ _Sección generada por `scripts/generate-tools-doc.mjs` — no editar a mano._
70
+ _Regenerar con: `node scripts/generate-tools-doc.mjs --write`_
58
71
 
59
- #### get_expense_analysis
60
- Detailed expense analysis by category with account-level detail and benchmark comparisons.
61
- - Params: `stores`, `period`, `month`, `start_date`, `end_date`
62
-
63
- #### get_efficiency_ratios
64
- Financial ratios: expense-to-income, payroll, rent, utilities, marketing, operating margin.
65
- - Params: `stores`, `period`, `month`, `start_date`, `end_date`
72
+ ### Expense Analysis & Core (11 tools)
66
73
 
67
74
  #### compare_stores
68
- Compare all stores with efficiency rankings, variances, and savings opportunities.
75
+ Compara la eficiencia de gastos entre las tiendas de Full Queso (FQ01 Chacao, FQ28 Marqués, FQ88 Candelaria, FQYK City Market).
69
76
  - Params: `period`, `month`, `start_date`, `end_date`
70
77
 
71
78
  #### detect_anomalies
72
- Detect expense anomalies with severity levels, root causes, and recommended actions.
73
- - Params: `stores`, `period`, `month`, `start_date`, `end_date`
79
+ Detecta anomalías en los gastos operacionales de Full Queso: gastos por encima de benchmarks, incrementos inusuales vs periodo anterior, concentración excesiva en una cuenta, y alertas de margen.
80
+ - Params: `period`, `month`, `start_date`, `end_date`, `stores`, `sensitivity`
74
81
 
75
- #### get_trends
76
- Historical trend analysis (up to 6 months) with growth rates, seasonality, and ASCII charts.
77
- - Params: `store`, `months`
82
+ #### get_account_transactions
83
+ Listado completo de transacciones para una cuenta contable específica con balance running y nombre de proveedor.
84
+ - Params: `account_number`*, `store`*, `start_date`*, `end_date`*
85
+
86
+ #### get_crm_rate
87
+ Obtiene la tasa de cambio Bs/USD desde el CRM de Full Queso (hora Caracas).
88
+ - Params: `coin`*, `date`
89
+
90
+ #### get_efficiency_ratios
91
+ Calcula ratios de eficiencia financiera de Full Queso: gastos/ingresos, nómina/ingresos, alquiler/ingresos, servicios/ingresos, marketing/ingresos y margen operativo.
92
+ - Params: `period`, `month`, `start_date`, `end_date`, `stores`
93
+
94
+ #### get_exchange_rate
95
+ Obtiene la tasa de cambio USD → VES desde Business Central.
96
+ - Params: `store`*, `date`, `start_date`, `end_date`
78
97
 
79
- ### Drill-Down & Vendors (4 tools)
98
+ #### get_expense_analysis
99
+ Análisis detallado de gastos operacionales de Full Queso por categoría (nómina, alquiler, servicios, marketing, etc.) con números de cuenta específicos.
100
+ - Params: `period`, `month`, `start_date`, `end_date`, `stores`
80
101
 
81
102
  #### get_expense_details
82
- Transaction-level drill-down with vendor lookup, category/account filters, and pagination.
83
- - Params: `store` (req), `period`, `month`, `start_date`, `end_date`, `category`, `account_number`, `min_amount`, `vendor_search`, `limit`, `offset`
103
+ Drill-down de transacciones individuales de gastos operacionales.
104
+ - Params: `store`*, `period`, `month`, `start_date`, `end_date`, `category`, `account_number`, `min_amount`, `vendor_search`, `limit`, `offset`
84
105
 
85
- #### get_account_transactions
86
- Per-account ledger with running balance and vendor information.
87
- - Params: `account_number` (req), `store` (req), `start_date` (req), `end_date` (req)
106
+ #### get_trends
107
+ Análisis de tendencias históricas de gastos e ingresos de Full Queso.
108
+ - Params: `months`, `store`
88
109
 
89
110
  #### get_vendor_transactions
90
- All transactions for a vendor (partial name search) with account breakdown.
91
- - Params: `store` (req), `vendor_search` (req), `start_date` (req), `end_date` (req)
111
+ Todas las transacciones de gastos operacionales de un proveedor específico.
112
+ - Params: `store`*, `vendor_search`*, `start_date`*, `end_date`*
92
113
 
93
114
  #### list_vendors
94
- Directory of active vendors ordered by total amount paid.
95
- - Params: `store` (req), `start_date`, `end_date`
115
+ Lista todos los proveedores activos de una tienda en un periodo, con monto total pagado y número de transacciones.
116
+ - Params: `store`*, `start_date`, `end_date`
96
117
 
97
- ### Bank Reconciliation (7 tools)
118
+ ### Auditoría / POS Reconciliation (11 tools)
98
119
 
99
- > These tools use OData V4 Web Services. Amounts in VES. Read-only.
120
+ #### find_potential_matches
121
+ Para una línea no conciliada del banco, busca posibles correspondencias en las entradas contables de BC por monto, fecha y descripción.
122
+ - Params: `store`*, `bank_account`*, `statement_amount`*, `transaction_date`*, `description`, `date_tolerance_days`, `amount_tolerance_pct`
100
123
 
101
- #### list_bank_accounts
102
- List active bank accounts for a store.
103
- - Params: `store` (req)
124
+ #### get_bank_ledger_entries
125
+ Todos los movimientos del libro de banco (abiertos y cerrados) para una cuenta bancaria.
126
+ - Params: `store`*, `bank_account`*, `date_from`*, `date_to`*, `open_only`
127
+
128
+ #### get_bank_reconciliation_report
129
+ Reporte consolidado de reconciliación bancaria: progreso de todos los statements abiertos, líneas no conciliadas (débitos y créditos por separado), y sugerencias de asientos contables para débitos.
130
+ - Params: `store`*, `bank_account`*, `statement_no`, `month`, `min_amount`, `include_suggestions`, `save_to_file`, `excel_output`
131
+
132
+ #### get_gl_account_entries
133
+ Movimientos del libro mayor (G/L) para una cuenta específica.
134
+ - Params: `store`*, `gl_account`*, `date_from`*, `date_to`*
135
+
136
+ #### get_pm_receipts
137
+ Recibos de Pago Móvil (PM) registrados en BC para una cuenta bancaria.
138
+ - Params: `store`*, `bank_account`*, `date_from`*, `date_to`*
104
139
 
105
140
  #### get_reconciliation_status
106
- Open reconciliation summary: matched vs unmatched lines per bank account.
107
- - Params: `store` (req), `bank_account`
141
+ Resumen del estado de reconciliaciones bancarias abiertas: total líneas, conciliadas, pendientes y diferencia.
142
+ - Params: `store`*, `bank_account`
143
+
144
+ #### get_unmatched_ledger_entries
145
+ Entradas contables del banco en BC sin correspondencia en el estado de cuenta.
146
+ - Params: `store`*, `bank_account`*, `date_from`, `date_to`
108
147
 
109
148
  #### get_unmatched_statement_lines
110
- Bank statement lines not reconciled with BC, categorized by type (payments/deposits).
111
- - Params: `store` (req), `bank_account` (req), `statement_no`, `min_amount`, `type_filter`
149
+ Líneas del estado de cuenta bancario NO conciliadas con entradas en BC.
150
+ - Params: `store`*, `bank_account`*, `statement_no`, `min_amount`, `type_filter`
112
151
 
113
- #### get_unmatched_ledger_entries
114
- BC ledger entries not cleared at the bank, with stale entry detection (>30 days).
115
- - Params: `store` (req), `bank_account` (req), `date_from`, `date_to`
152
+ #### list_bank_accounts
153
+ Lista las cuentas bancarias de una tienda Full Queso.
154
+ - Params: `store`*
116
155
 
117
- #### find_potential_matches
118
- Scoring-based match finder (0-100) for unmatched bank lines against BC entries.
119
- - Params: `store` (req), `bank_account` (req), `statement_amount` (req), `transaction_date` (req), `description`, `date_tolerance_days`, `amount_tolerance_pct`
156
+ #### reconcile_pos_sales
157
+ Conciliación automática de ventas POS: cruza montos bancarios de BC (BankAccountLedgerEntries) con liquidaciones bancarias por número de lote, agrupa por liquidación bancaria (settlement batches), calcula comisiones reales.
158
+ - Params: `store`*, `start_date`*, `end_date`*, `bank_account`
120
159
 
121
160
  #### suggest_journal_entries
122
- Suggest GL journal entries for unreconciled bank payments using keyword matching and historical patterns.
123
- - Params: `store` (req), `bank_account` (req), `statement_no`, `auto_categorize`
161
+ Para pagos del banco sin correspondencia en BC, sugiere asientos contables basándose en la descripción y patrones históricos.
162
+ - Params: `store`*, `bank_account`*, `statement_no`, `auto_categorize`
124
163
 
125
- #### reconcile_pos_sales
126
- Multi-bank POS sales reconciliation. Matches bank deposits against BC lot records with commission tracking.
127
- - **Banesco**: lot-based matching, commission netted in deposit
128
- - **Bancrecer**: lot-based with separate commission/ISLR lines
129
- - **BDV**: aggregate matching by period totals (no lot numbers)
130
- - **UBII**: cross-account matching (BC virtual account → Bancrecer/BDV deposits)
131
- - Params: `store` (req), `start_date` (req), `end_date` (req), `bank_account`
164
+ ### Cierre Mensual Bancario (6 tools)
165
+
166
+ #### generate_closing_journal
167
+ Genera el EXCEL del CIERRE MENSUAL bancario (mes completo, multi-banco).
168
+ - Params: `store`*, `month`*, `output_dir`, `allow_partial`, `strict`
132
169
 
133
- ### Accounts Receivable & Payable (6 tools)
170
+ #### get_closing_match_results
171
+ CIERRE MENSUAL bancario: vista paginada de las 4 listas con auto-clasificación.
172
+ - Params: `store`*, `month`*, `list`, `bank_account`, `category`, `source`, `confidence`, `min_abs_amount_ves`, `sort`, `limit`, `offset`
134
173
 
135
- > These tools use the Finance Reports Beta API. Amounts in VES and USD. Read-only.
174
+ #### get_closing_questionnaire
175
+ CIERRE MENSUAL bancario: vista paginada/filtrada de las entradas del cuestionario del MES.
176
+ - Params: `store`*, `month`*, `bucket`, `counterparty_no`, `bank_account`, `status_filter`, `min_abs_amount_ves`, `min_abs_amount_usd`, `limit`, `offset`, `sort`, `pair_by_amount`, `pair_tolerance_pct`, `pair_max_days`, `description_regex`
177
+
178
+ #### reconcile_closing_with_bc
179
+ CIERRE MENSUAL bancario: refresca el estado contra BC para detectar drift desde la última corrida.
180
+ - Params: `store`*, `month`*
181
+
182
+ #### start_month_closing
183
+ CIERRE MENSUAL bancario (mes completo, multi-banco) en Business Central.
184
+ - Params: `store`*, `month`, `force_refresh`
185
+
186
+ #### submit_closing_answers
187
+ CIERRE MENSUAL bancario: registra respuestas/aprobaciones al cuestionario del MES.
188
+ - Params: `store`*, `month`*, `user`, `answers`*
189
+
190
+ ### Cobranzas (AR / AP) (7 tools)
191
+
192
+ #### get_collection_status
193
+ Verificación rápida del estado de cobranza de un período específico.
194
+ - Params: `store`*, `start_date`*, `end_date`*
136
195
 
137
196
  #### get_customer_balances
138
- Customers with outstanding balances.
139
- - Params: `store` (req), `only_with_balance`, `customer_number`
197
+ Lista clientes con saldos pendientes, montos vencidos y estado de cobranza.
198
+ - Params: `store`*, `only_with_balance`, `customer_number`
140
199
 
141
200
  #### get_customer_ledger
142
- Customer transaction history: invoices, payments, credit memos with collection rate.
143
- - Params: `store` (req), `start_date` (req), `end_date` (req), `customer_number`, `document_type`, `open_only`
201
+ Movimientos del libro mayor de clientes: facturas emitidas, pagos recibidos, notas de crédito.
202
+ - Params: `store`*, `start_date`*, `end_date`*, `customer_number`, `document_type`, `open_only`
144
203
 
145
- #### get_open_receivables
146
- Open accounts receivable by customer with aging buckets (0-30, 31-60, 61-90, 90+).
147
- - Params: `store` (req), `as_of_date`, `customer_number`, `min_amount`
204
+ #### get_customer_list
205
+ Lista de clientes con número, nombre y RIF (taxRegistrationNumber).
206
+ - Params: `store`*, `customer_number`
148
207
 
149
- #### get_collection_status
150
- Period collection completeness: "Were all December invoices collected?"
151
- - Params: `store` (req), `start_date` (req), `end_date` (req)
208
+ #### get_open_payables
209
+ Resumen de todas las cuentas por pagar abiertas.
210
+ - Params: `store`*, `as_of_date`, `vendor_number`, `min_amount`
211
+
212
+ #### get_open_receivables
213
+ Resumen rápido de todas las cuentas por cobrar abiertas.
214
+ - Params: `store`*, `as_of_date`, `customer_number`, `min_amount`
152
215
 
153
216
  #### get_vendor_ledger
154
- Vendor transaction history: bills received, payments made.
155
- - Params: `store` (req), `start_date` (req), `end_date` (req), `vendor_number`, `document_type`, `open_only`
217
+ Movimientos del libro mayor de proveedores: facturas recibidas, pagos realizados, notas de crédito.
218
+ - Params: `store`*, `start_date`*, `end_date`*, `vendor_number`, `document_type`, `open_only`
156
219
 
157
- #### get_open_payables
158
- Open accounts payable by vendor with aging buckets (0-30, 31-60, 61-90, 90+).
159
- - Params: `store` (req), `as_of_date`, `vendor_number`, `min_amount`
220
+ ### Financial Statements & Cash Flow (3 tools)
221
+
222
+ #### get_cash_flow
223
+ Free Cash Flow (FCF) por método indirecto para una o más tiendas Full Queso (FQ01, FQ28, FQ88).
224
+ - Params: `stores`, `period`, `month`, `start_date`, `end_date`, `compare_previous`, `include_cash_position`, `render_html`, `output_path`, `open_browser`, `inline_html`
225
+
226
+ #### get_financial_statements
227
+ Estado financiero completo (P&L / Profit & Loss) para una o más tiendas Full Queso (FQ01, FQ28, FQ88, FQFR) en un período.
228
+ - Params: `stores`, `period`, `month`, `start_date`, `end_date`, `render_html`, `compare_previous`, `output_path`, `open_browser`, `inline_html`
229
+
230
+ #### get_income_statement
231
+ Estado de resultados (Income Statement) en el formato EXACTO del reporte Power BI "Income Statement by Month" (G/L Account Level 1) para una tienda Full Queso (FQ01, FQ28, FQ88) y un mes.
232
+ - Params: `store`, `stores`, `period`, `month`, `start_date`, `end_date`, `level`
233
+
234
+ ### Inventario (7 tools)
235
+
236
+ #### get_inventory_by_location
237
+ Inventario desglosado por ubicación (Location Code) dentro de una tienda.
238
+ - Params: `store`*, `location_code`, `item_category`, `classification`, `as_of_date`
239
+
240
+ #### get_inventory_change
241
+ Cambio de inventario WoW (semana) o MoM (mes).
242
+ - Params: `store`*, `period`*, `periods_back`, `item_category`, `classification`
243
+
244
+ #### get_inventory_levels
245
+ Niveles de inventario agrupados por itemCategoryCode y/o inventoryPostingGroupCode (congelados, importado, local).
246
+ - Params: `store`*, `item_category`, `classification`, `as_of_date`
247
+
248
+ #### get_item_card
249
+ Datos maestros de ítems de inventario: unitCost (BC), calculated_unit_cost (real desde últimas entradas), inventory qty, unitPrice, categoría.
250
+ - Params: `store`*, `item_number`, `item_search`, `item_category`
251
+
252
+ #### get_item_cost_analysis
253
+ Análisis de costo de un ítem — calcula costo promedio ponderado de entradas recientes (compras, ensamblaje, ajustes positivos), compara con el unitCost actual de BC, y muestra el historial de costos por mes.
254
+ - Params: `store`*, `item_number`*, `months`
255
+
256
+ #### get_item_cost_trend
257
+ Tendencia de costo de ítems: compara weighted avg inbound cost de últimas 2 semanas vs últimas 4 semanas.
258
+ - Params: `store`*, `item_number`, `item_category`, `period_days`
259
+
260
+ #### get_item_ledger_entries
261
+ Entradas del libro de artículos (Item Ledger Entries) — historial de movimientos de inventario con costo real por entrada.
262
+ - Params: `store`*, `item_number`*, `entry_type`, `start_date`, `end_date`, `top`
263
+
264
+ ### Draft Visibility (Multi-Payments + facturas sin postear) (4 tools)
265
+
266
+ #### get_draft_payables
267
+ Muestra facturas de compra abiertas clasificadas en tres niveles: totalmente pendientes (sin documento de pago), con Purch.
268
+ - Params: `store`*, `status_filter`, `vendor_number`, `include_lines`, `report`, `summary_only`, `save_to_file`, `excel_output`
269
+
270
+ #### get_draft_receivables
271
+ Muestra facturas de venta abiertas clasificadas en tres niveles: totalmente pendientes (sin documento de cobro), con Multi-Payment en borrador (Open o Transferred), y el monto neto realmente sin cubrir.
272
+ - Params: `store`*, `status_filter`, `customer_number`, `include_lines`, `report`, `summary_only`, `save_to_file`, `excel_output`
273
+
274
+ #### get_draft_summary
275
+ Resumen ejecutivo consolidado de todos los Multi-Payments en borrador (Open y Transferred) para una o todas las tiendas.
276
+ - Params: `store`*
277
+
278
+ #### get_unposted_invoices
279
+ Facturas de compra y/o venta SIN POSTEAR en Business Central (status Draft o In Review).
280
+ - Params: `store`*, `type`, `start_date`, `end_date`, `include_in_review`, `summary_only`
281
+
282
+ ### Nómina (4 tools)
283
+
284
+ #### get_employees
285
+ Lista empleados de una tienda con datos de nomina: tipo, status, salarios base, bonos predeterminados, fechas.
286
+ - Params: `store`*, `status`, `payroll_type`, `exclude_managerial`, `employee_search`, `employee_code`
287
+
288
+ #### get_payroll_documents
289
+ Lista documentos de nomina (headers) con filtros por periodo, tipo, status.
290
+ - Params: `store`*, `period_code`, `payroll_type`, `exclude_managerial`, `status`, `start_date`, `end_date`, `include_employee_count`, `summary_only`
291
+
292
+ #### get_payroll_lines
293
+ Detalle de nomina por empleado para un documento.
294
+ - Params: `store`*, `document_no`*, `employee_code`, `employee_search`
295
+
296
+ #### get_payroll_payments
297
+ Documentos de PAGO de nómina (tabla separada de la obligación) con sus líneas por empleado.
298
+ - Params: `store`*, `payroll_document_no`, `payment_no`, `status`, `include_lines`
299
+
300
+ ### Reports (2 tools)
301
+
302
+ #### generate_cxp_report
303
+ Genera reporte Excel de Cuentas por Pagar con 3 hojas: Sin Draft, Draft No Posteado, Pago Parcial + hoja Resumen con desglose por proveedor.
304
+ - Params: `store`*, `output_path`
305
+
306
+ #### generate_manager_report
307
+ Genera el Reporte Gerente HTML completo para una tienda FQ.
308
+ - Params: `store`*, `date`, `output_path`, `open_browser`, `payroll_days`
309
+
310
+ ### Ventas (4 tools)
311
+
312
+ #### compare_sales_by_store
313
+ Comparación de rendimiento de VENTAS entre las tiendas de Full Queso (FQ01 Chacao, FQ28 Marqués, FQ88 Candelaria, FQYK City Market).
314
+ - Params: `period`, `month`, `start_date`, `end_date`, `metrics`
315
+
316
+ #### get_item_sales_detail
317
+ Detalle de ventas por ítem específico (1–50 SKUs) con granularidad día/semana/mes/total y desglose por tienda.
318
+ - Params: `items`*, `start_date`*, `end_date`*, `stores`, `granularity`, `include_zero_days`
319
+
320
+ #### get_product_performance
321
+ Análisis detallado de rendimiento de productos de Full Queso.
322
+ - Params: `period`, `month`, `start_date`, `end_date`, `stores`, `sort_by`, `top_n`
323
+
324
+ #### get_sales_analysis
325
+ Análisis multidimensional de ventas de Full Queso.
326
+ - Params: `period`, `month`, `start_date`, `end_date`, `stores`, `dimensions`, `metrics`
327
+
328
+ _Los params marcados con `*` son requeridos. Detalle completo en `docs/tool_*.md`._
160
329
 
161
330
  ## API Integrations
162
331