@raytio/mcp-server 7.0.0 → 9.2.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/README.md +2 -0
- package/dist/authorization.d.ts.map +1 -1
- package/dist/authorization.js +4 -0
- package/dist/authorization.js.map +1 -1
- package/dist/fgl/filters.d.ts +74 -0
- package/dist/fgl/filters.d.ts.map +1 -0
- package/dist/fgl/filters.js +105 -0
- package/dist/fgl/filters.js.map +1 -0
- package/dist/fgl/projection.d.ts +21 -0
- package/dist/fgl/projection.d.ts.map +1 -0
- package/dist/fgl/projection.js +66 -0
- package/dist/fgl/projection.js.map +1 -0
- package/dist/fgl/types.d.ts +129 -0
- package/dist/fgl/types.d.ts.map +1 -0
- package/dist/fgl/types.js +2 -0
- package/dist/fgl/types.js.map +1 -0
- package/dist/generated-reads/guardrails.d.ts.map +1 -1
- package/dist/generated-reads/guardrails.js +9 -0
- package/dist/generated-reads/guardrails.js.map +1 -1
- package/dist/tools/_shared/side-effect.d.ts +4 -3
- package/dist/tools/_shared/side-effect.d.ts.map +1 -1
- package/dist/tools/_shared/side-effect.js +6 -5
- package/dist/tools/_shared/side-effect.js.map +1 -1
- package/dist/tools/_shared/soft-deactivate.d.ts +43 -0
- package/dist/tools/_shared/soft-deactivate.d.ts.map +1 -0
- package/dist/tools/_shared/soft-deactivate.js +53 -0
- package/dist/tools/_shared/soft-deactivate.js.map +1 -0
- package/dist/tools/cmm/cmm-bank-account-deactivate.d.ts +14 -0
- package/dist/tools/cmm/cmm-bank-account-deactivate.d.ts.map +1 -0
- package/dist/tools/cmm/cmm-bank-account-deactivate.js +50 -0
- package/dist/tools/cmm/cmm-bank-account-deactivate.js.map +1 -0
- package/dist/tools/cmm/cmm-bank-account-register.d.ts +15 -0
- package/dist/tools/cmm/cmm-bank-account-register.d.ts.map +1 -0
- package/dist/tools/cmm/cmm-bank-account-register.js +104 -0
- package/dist/tools/cmm/cmm-bank-account-register.js.map +1 -0
- package/dist/tools/cmm/cmm-bank-account-use-register.d.ts +13 -0
- package/dist/tools/cmm/cmm-bank-account-use-register.d.ts.map +1 -0
- package/dist/tools/cmm/cmm-bank-account-use-register.js +72 -0
- package/dist/tools/cmm/cmm-bank-account-use-register.js.map +1 -0
- package/dist/tools/cmm/generated-reads.d.ts +5 -0
- package/dist/tools/cmm/generated-reads.d.ts.map +1 -0
- package/dist/tools/cmm/generated-reads.js +26 -0
- package/dist/tools/cmm/generated-reads.js.map +1 -0
- package/dist/tools/cmm/index.d.ts +5 -0
- package/dist/tools/cmm/index.d.ts.map +1 -0
- package/dist/tools/cmm/index.js +13 -0
- package/dist/tools/cmm/index.js.map +1 -0
- package/dist/tools/domains.d.ts.map +1 -1
- package/dist/tools/domains.js +31 -0
- package/dist/tools/domains.js.map +1 -1
- package/dist/tools/fgl/combination-get.d.ts +3 -0
- package/dist/tools/fgl/combination-get.d.ts.map +1 -0
- package/dist/tools/fgl/combination-get.js +24 -0
- package/dist/tools/fgl/combination-get.js.map +1 -0
- package/dist/tools/fgl/combination-list.d.ts +3 -0
- package/dist/tools/fgl/combination-list.d.ts.map +1 -0
- package/dist/tools/fgl/combination-list.js +49 -0
- package/dist/tools/fgl/combination-list.js.map +1 -0
- package/dist/tools/fgl/combination-validate.d.ts +3 -0
- package/dist/tools/fgl/combination-validate.d.ts.map +1 -0
- package/dist/tools/fgl/combination-validate.js +40 -0
- package/dist/tools/fgl/combination-validate.js.map +1 -0
- package/dist/tools/fgl/daily-rate-get.d.ts +3 -0
- package/dist/tools/fgl/daily-rate-get.d.ts.map +1 -0
- package/dist/tools/fgl/daily-rate-get.js +36 -0
- package/dist/tools/fgl/daily-rate-get.js.map +1 -0
- package/dist/tools/fgl/index.d.ts +4 -0
- package/dist/tools/fgl/index.d.ts.map +1 -0
- package/dist/tools/fgl/index.js +45 -0
- package/dist/tools/fgl/index.js.map +1 -0
- package/dist/tools/fgl/journal-batch-create.d.ts +3 -0
- package/dist/tools/fgl/journal-batch-create.d.ts.map +1 -0
- package/dist/tools/fgl/journal-batch-create.js +198 -0
- package/dist/tools/fgl/journal-batch-create.js.map +1 -0
- package/dist/tools/fgl/journal-batch-get.d.ts +3 -0
- package/dist/tools/fgl/journal-batch-get.d.ts.map +1 -0
- package/dist/tools/fgl/journal-batch-get.js +28 -0
- package/dist/tools/fgl/journal-batch-get.js.map +1 -0
- package/dist/tools/fgl/journal-batch-list.d.ts +3 -0
- package/dist/tools/fgl/journal-batch-list.d.ts.map +1 -0
- package/dist/tools/fgl/journal-batch-list.js +35 -0
- package/dist/tools/fgl/journal-batch-list.js.map +1 -0
- package/dist/tools/fgl/journal-batch-post.d.ts +3 -0
- package/dist/tools/fgl/journal-batch-post.d.ts.map +1 -0
- package/dist/tools/fgl/journal-batch-post.js +38 -0
- package/dist/tools/fgl/journal-batch-post.js.map +1 -0
- package/dist/tools/fgl/journal-header-list.d.ts +3 -0
- package/dist/tools/fgl/journal-header-list.d.ts.map +1 -0
- package/dist/tools/fgl/journal-header-list.js +39 -0
- package/dist/tools/fgl/journal-header-list.js.map +1 -0
- package/dist/tools/fgl/journal-header-reverse.d.ts +3 -0
- package/dist/tools/fgl/journal-header-reverse.d.ts.map +1 -0
- package/dist/tools/fgl/journal-header-reverse.js +44 -0
- package/dist/tools/fgl/journal-header-reverse.js.map +1 -0
- package/dist/tools/fgl/ledger-get.d.ts +3 -0
- package/dist/tools/fgl/ledger-get.d.ts.map +1 -0
- package/dist/tools/fgl/ledger-get.js +24 -0
- package/dist/tools/fgl/ledger-get.js.map +1 -0
- package/dist/tools/fgl/ledger-list.d.ts +3 -0
- package/dist/tools/fgl/ledger-list.d.ts.map +1 -0
- package/dist/tools/fgl/ledger-list.js +34 -0
- package/dist/tools/fgl/ledger-list.js.map +1 -0
- package/dist/tools/fgl/period-close-status.d.ts +3 -0
- package/dist/tools/fgl/period-close-status.d.ts.map +1 -0
- package/dist/tools/fgl/period-close-status.js +22 -0
- package/dist/tools/fgl/period-close-status.js.map +1 -0
- package/dist/tools/fgl/period-close.d.ts +3 -0
- package/dist/tools/fgl/period-close.d.ts.map +1 -0
- package/dist/tools/fgl/period-close.js +40 -0
- package/dist/tools/fgl/period-close.js.map +1 -0
- package/dist/tools/fgl/period-list.d.ts +3 -0
- package/dist/tools/fgl/period-list.d.ts.map +1 -0
- package/dist/tools/fgl/period-list.js +40 -0
- package/dist/tools/fgl/period-list.js.map +1 -0
- package/dist/tools/fgl/period-open.d.ts +3 -0
- package/dist/tools/fgl/period-open.d.ts.map +1 -0
- package/dist/tools/fgl/period-open.js +41 -0
- package/dist/tools/fgl/period-open.js.map +1 -0
- package/dist/tools/fgl/tax-rate-list.d.ts +3 -0
- package/dist/tools/fgl/tax-rate-list.d.ts.map +1 -0
- package/dist/tools/fgl/tax-rate-list.js +36 -0
- package/dist/tools/fgl/tax-rate-list.js.map +1 -0
- package/dist/tools/fgl/trial-balance-get.d.ts +3 -0
- package/dist/tools/fgl/trial-balance-get.d.ts.map +1 -0
- package/dist/tools/fgl/trial-balance-get.js +56 -0
- package/dist/tools/fgl/trial-balance-get.js.map +1 -0
- package/dist/tools/fgl/trial-balance-template-list.d.ts +3 -0
- package/dist/tools/fgl/trial-balance-template-list.d.ts.map +1 -0
- package/dist/tools/fgl/trial-balance-template-list.js +43 -0
- package/dist/tools/fgl/trial-balance-template-list.js.map +1 -0
- package/dist/tools/fxm/fxm-funds-account-consent-grant.d.ts +16 -0
- package/dist/tools/fxm/fxm-funds-account-consent-grant.d.ts.map +1 -0
- package/dist/tools/fxm/fxm-funds-account-consent-grant.js +88 -0
- package/dist/tools/fxm/fxm-funds-account-consent-grant.js.map +1 -0
- package/dist/tools/fxm/fxm-funds-account-consent-revoke.d.ts +13 -0
- package/dist/tools/fxm/fxm-funds-account-consent-revoke.d.ts.map +1 -0
- package/dist/tools/fxm/fxm-funds-account-consent-revoke.js +60 -0
- package/dist/tools/fxm/fxm-funds-account-consent-revoke.js.map +1 -0
- package/dist/tools/fxm/fxm-payment-method-deactivate.d.ts +13 -0
- package/dist/tools/fxm/fxm-payment-method-deactivate.d.ts.map +1 -0
- package/dist/tools/fxm/fxm-payment-method-deactivate.js +52 -0
- package/dist/tools/fxm/fxm-payment-method-deactivate.js.map +1 -0
- package/dist/tools/fxm/fxm-payment-method-register.d.ts +18 -0
- package/dist/tools/fxm/fxm-payment-method-register.d.ts.map +1 -0
- package/dist/tools/fxm/fxm-payment-method-register.js +102 -0
- package/dist/tools/fxm/fxm-payment-method-register.js.map +1 -0
- package/dist/tools/fxm/generated-reads.d.ts +5 -0
- package/dist/tools/fxm/generated-reads.d.ts.map +1 -0
- package/dist/tools/fxm/generated-reads.js +27 -0
- package/dist/tools/fxm/generated-reads.js.map +1 -0
- package/dist/tools/fxm/index.d.ts +5 -0
- package/dist/tools/fxm/index.d.ts.map +1 -0
- package/dist/tools/fxm/index.js +15 -0
- package/dist/tools/fxm/index.js.map +1 -0
- package/dist/tools/role-mapping.d.ts.map +1 -1
- package/dist/tools/role-mapping.js +17 -0
- package/dist/tools/role-mapping.js.map +1 -1
- package/dist/tools/types.d.ts +2 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-cost-summary.js +2 -2
- package/dist/tools/wrm/wrm-agent-run-cost-summary.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-create.js +2 -2
- package/dist/tools/wrm/wrm-agent-run-create.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-list.js +3 -3
- package/dist/tools/wrm/wrm-agent-run-list.js.map +1 -1
- package/dist/wrm/projection.js +1 -1
- package/dist/wrm/projection.js.map +1 -1
- package/dist/wrm/types.d.ts +1 -1
- package/dist/wrm/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { successResponse, errorResponse, API_ERROR } from '../types.js';
|
|
3
|
+
import { FGL_JOURNAL_HEADER_SELECT } from '../../fgl/projection.js';
|
|
4
|
+
import { buildJournalHeaderQuery } from '../../fgl/filters.js';
|
|
5
|
+
export const journalHeaderListTool = {
|
|
6
|
+
name: 'fgl_journal_header_list',
|
|
7
|
+
description: 'List/filter GL journal headers across batches, e.g. the UNPOSTED headers in a period that ' +
|
|
8
|
+
'block fgl_period_close, or POSTED headers to pass to fgl_journal_header_reverse.',
|
|
9
|
+
inputSchema: z.object({
|
|
10
|
+
ledger_id: z.string().optional().describe('Filter by ledger UUID'),
|
|
11
|
+
batch_id: z.string().optional().describe('Filter by journal batch UUID'),
|
|
12
|
+
period_id: z.string().optional().describe('Filter by GL period UUID'),
|
|
13
|
+
status: z.union([z.string(), z.array(z.string())]).optional()
|
|
14
|
+
.describe('Filter by header status (single or array, e.g. UNPOSTED, POSTED, ERROR)'),
|
|
15
|
+
reversal_flag: z.boolean().optional().describe('true for reversing entries only, false to exclude them'),
|
|
16
|
+
search: z.string().optional().describe('Search across journal_name (case-insensitive)'),
|
|
17
|
+
active: z.boolean().optional().describe('Filter by active flag (default true)'),
|
|
18
|
+
limit: z.number().optional().describe('Max results (default 50, max 200)'),
|
|
19
|
+
offset: z.number().optional().describe('Offset for pagination'),
|
|
20
|
+
order_by: z.string().optional().describe('PostgREST order clause (default: journal_date.desc)'),
|
|
21
|
+
}),
|
|
22
|
+
handler: async (args, ctx) => {
|
|
23
|
+
const input = args;
|
|
24
|
+
try {
|
|
25
|
+
const { query, limit } = buildJournalHeaderQuery(input);
|
|
26
|
+
const items = await ctx.apiClient.get(`${ctx.apiClient.dbBasePath}/fgl_journal_headers?select=${FGL_JOURNAL_HEADER_SELECT}&${query}`);
|
|
27
|
+
const offset = input.offset ?? 0;
|
|
28
|
+
return successResponse({
|
|
29
|
+
items,
|
|
30
|
+
count: items.length,
|
|
31
|
+
next_offset: items.length === limit ? offset + limit : null,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
return errorResponse(API_ERROR, `Failed to list GL journal headers: ${error.message}`);
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=journal-header-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-header-list.js","sourceRoot":"","sources":["../../../src/tools/fgl/journal-header-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAG/D,MAAM,CAAC,MAAM,qBAAqB,GAAS;IACzC,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EACT,4FAA4F;QAC5F,kFAAkF;IACpF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAClE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACxE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACrE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;aAC1D,QAAQ,CAAC,yEAAyE,CAAC;QACtF,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;QACxG,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QACvF,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QAC/E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC1E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC/D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;KAChG,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAA2B,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;YACxD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,GAAG,CACnC,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,+BAA+B,yBAAyB,IAAI,KAAK,EAAE,CAC/F,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;YACjC,OAAO,eAAe,CAAC;gBACrB,KAAK;gBACL,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,WAAW,EAAE,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI;aAC5D,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,aAAa,CAAC,SAAS,EAAE,sCAAsC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-header-reverse.d.ts","sourceRoot":"","sources":["../../../src/tools/fgl/journal-header-reverse.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAMtC,eAAO,MAAM,wBAAwB,EAAE,IA4CtC,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { successResponse, errorResponse, API_ERROR } from '../types.js';
|
|
3
|
+
import { confirmFlagSchema } from '../_shared/side-effect.js';
|
|
4
|
+
import { FGL_JOURNAL_HEADER_SELECT } from '../../fgl/projection.js';
|
|
5
|
+
export const journalHeaderReverseTool = {
|
|
6
|
+
name: 'fgl_journal_header_reverse',
|
|
7
|
+
description: 'Reverse a posted GL journal header. Calls the fgl_reverse_header RPC, which creates a new ' +
|
|
8
|
+
'batch and a reversing header (debits and credits swapped) in the target period and posts it. ' +
|
|
9
|
+
'Returns the reversing header; if it could not be posted (for example the target period is ' +
|
|
10
|
+
'not open) it is left in ERROR status and reported as an error. Requires confirm=true.',
|
|
11
|
+
sideEffect: 'command',
|
|
12
|
+
confirmation: 'caller_confirms',
|
|
13
|
+
idempotency: 'natural_key',
|
|
14
|
+
inputSchema: z.object({
|
|
15
|
+
journal_header_id: z.string()
|
|
16
|
+
.describe('UUID of the posted journal header to reverse (from fgl_journal_batch_get or fgl_journal_header_list)'),
|
|
17
|
+
reversal_period_id: z.string().describe('UUID of the (open) period for the reversing entry'),
|
|
18
|
+
confirm: confirmFlagSchema,
|
|
19
|
+
}),
|
|
20
|
+
handler: async (args, ctx) => {
|
|
21
|
+
const input = args;
|
|
22
|
+
const db = ctx.apiClient.dbBasePath;
|
|
23
|
+
try {
|
|
24
|
+
const newHeaderId = await ctx.apiClient.post(`${db}/rpc/fgl_reverse_header`, {
|
|
25
|
+
p_header_id: input.journal_header_id,
|
|
26
|
+
p_target_period_id: input.reversal_period_id,
|
|
27
|
+
});
|
|
28
|
+
const headers = await ctx.apiClient.get(`${db}/fgl_journal_headers?id=eq.${newHeaderId}&select=${FGL_JOURNAL_HEADER_SELECT}`);
|
|
29
|
+
const reversal = headers?.[0] ?? null;
|
|
30
|
+
if (reversal?.status === 'ERROR') {
|
|
31
|
+
return errorResponse(API_ERROR, `Reversing header ${newHeaderId} was created but not posted: ${reversal.error_text ?? 'unknown error'}`, { reversal_header: reversal });
|
|
32
|
+
}
|
|
33
|
+
return successResponse({
|
|
34
|
+
reversal_header_id: newHeaderId,
|
|
35
|
+
reversed_header_id: input.journal_header_id,
|
|
36
|
+
reversal_header: reversal,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
return errorResponse(API_ERROR, `Failed to reverse GL journal header: ${error.message}`);
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=journal-header-reverse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-header-reverse.js","sourceRoot":"","sources":["../../../src/tools/fgl/journal-header-reverse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAGpE,MAAM,CAAC,MAAM,wBAAwB,GAAS;IAC5C,IAAI,EAAE,4BAA4B;IAClC,WAAW,EACT,4FAA4F;QAC5F,+FAA+F;QAC/F,4FAA4F;QAC5F,uFAAuF;IACzF,UAAU,EAAE,SAAS;IACrB,YAAY,EAAE,iBAAiB;IAC/B,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;aAC1B,QAAQ,CAAC,sGAAsG,CAAC;QACnH,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QAC5F,OAAO,EAAE,iBAAiB;KAC3B,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAAgF,CAAC;QAC/F,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAS,GAAG,EAAE,yBAAyB,EAAE;gBACnF,WAAW,EAAE,KAAK,CAAC,iBAAiB;gBACpC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;aAC7C,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,GAAG,CACrC,GAAG,EAAE,8BAA8B,WAAW,WAAW,yBAAyB,EAAE,CACrF,CAAC;YACF,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YACtC,IAAI,QAAQ,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;gBACjC,OAAO,aAAa,CAClB,SAAS,EACT,oBAAoB,WAAW,gCAAgC,QAAQ,CAAC,UAAU,IAAI,eAAe,EAAE,EACvG,EAAE,eAAe,EAAE,QAAQ,EAAE,CAC9B,CAAC;YACJ,CAAC;YACD,OAAO,eAAe,CAAC;gBACrB,kBAAkB,EAAE,WAAW;gBAC/B,kBAAkB,EAAE,KAAK,CAAC,iBAAiB;gBAC3C,eAAe,EAAE,QAAQ;aAC1B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,aAAa,CAAC,SAAS,EAAE,wCAAwC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger-get.d.ts","sourceRoot":"","sources":["../../../src/tools/fgl/ledger-get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAKtC,eAAO,MAAM,aAAa,EAAE,IAoB3B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { successResponse, errorResponse, FGL_NOT_FOUND, API_ERROR } from '../types.js';
|
|
3
|
+
import { FGL_LEDGER_SELECT } from '../../fgl/projection.js';
|
|
4
|
+
export const ledgerGetTool = {
|
|
5
|
+
name: 'fgl_ledger_get',
|
|
6
|
+
description: 'Get a single GL ledger by ID (UUID)',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
id: z.string().describe('UUID of the ledger'),
|
|
9
|
+
}),
|
|
10
|
+
handler: async (args, ctx) => {
|
|
11
|
+
const { id } = args;
|
|
12
|
+
try {
|
|
13
|
+
const items = await ctx.apiClient.get(`${ctx.apiClient.dbBasePath}/fgl_ledgers?id=eq.${id}&select=${FGL_LEDGER_SELECT}`);
|
|
14
|
+
if (!items || items.length === 0) {
|
|
15
|
+
return errorResponse(FGL_NOT_FOUND, `Ledger ${id} not found`);
|
|
16
|
+
}
|
|
17
|
+
return successResponse(items[0]);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
return errorResponse(API_ERROR, `Failed to get GL ledger: ${error.message}`);
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=ledger-get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger-get.js","sourceRoot":"","sources":["../../../src/tools/fgl/ledger-get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D,MAAM,CAAC,MAAM,aAAa,GAAS;IACjC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,qCAAqC;IAClD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;KAC9C,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,EAAE,EAAE,EAAE,GAAG,IAAsB,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,GAAG,CACnC,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,sBAAsB,EAAE,WAAW,iBAAiB,EAAE,CAClF,CAAC;YACF,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,OAAO,aAAa,CAAC,aAAa,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;YAChE,CAAC;YACD,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,aAAa,CAAC,SAAS,EAAE,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger-list.d.ts","sourceRoot":"","sources":["../../../src/tools/fgl/ledger-list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAMtC,eAAO,MAAM,cAAc,EAAE,IA8B5B,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { successResponse, errorResponse, API_ERROR } from '../types.js';
|
|
3
|
+
import { FGL_LEDGER_SELECT } from '../../fgl/projection.js';
|
|
4
|
+
import { buildLedgerQuery } from '../../fgl/filters.js';
|
|
5
|
+
export const ledgerListTool = {
|
|
6
|
+
name: 'fgl_ledger_list',
|
|
7
|
+
description: 'List/filter GL ledgers',
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
ledger_type: z.string().optional().describe('Filter by ledger type'),
|
|
10
|
+
currency_code: z.string().optional().describe('Filter by functional currency code (ISO)'),
|
|
11
|
+
search: z.string().optional().describe('Search across name and code (case-insensitive)'),
|
|
12
|
+
active: z.boolean().optional().describe('Filter by active flag (default true)'),
|
|
13
|
+
limit: z.number().optional().describe('Max results (default 50, max 200)'),
|
|
14
|
+
offset: z.number().optional().describe('Offset for pagination'),
|
|
15
|
+
order_by: z.string().optional().describe('PostgREST order clause (default: name.asc)'),
|
|
16
|
+
}),
|
|
17
|
+
handler: async (args, ctx) => {
|
|
18
|
+
const input = args;
|
|
19
|
+
try {
|
|
20
|
+
const { query, limit } = buildLedgerQuery(input);
|
|
21
|
+
const items = await ctx.apiClient.get(`${ctx.apiClient.dbBasePath}/fgl_ledgers?select=${FGL_LEDGER_SELECT}&${query}`, { headers: { Prefer: 'count=exact' } });
|
|
22
|
+
const offset = input.offset ?? 0;
|
|
23
|
+
return successResponse({
|
|
24
|
+
items,
|
|
25
|
+
count: items.length,
|
|
26
|
+
next_offset: items.length === limit ? offset + limit : null,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
return errorResponse(API_ERROR, `Failed to list GL ledgers: ${error.message}`);
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=ledger-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger-list.js","sourceRoot":"","sources":["../../../src/tools/fgl/ledger-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,MAAM,CAAC,MAAM,cAAc,GAAS;IAClC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,wBAAwB;IACrC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACpE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACzF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACxF,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QAC/E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC1E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC/D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;KACvF,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAA2B,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,GAAG,CACnC,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,uBAAuB,iBAAiB,IAAI,KAAK,EAAE,EAC9E,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,CACvC,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;YACjC,OAAO,eAAe,CAAC;gBACrB,KAAK;gBACL,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,WAAW,EAAE,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI;aAC5D,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,aAAa,CAAC,SAAS,EAAE,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"period-close-status.d.ts","sourceRoot":"","sources":["../../../src/tools/fgl/period-close-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAGtC,eAAO,MAAM,qBAAqB,EAAE,IAoBnC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { successResponse, errorResponse, API_ERROR } from '../types.js';
|
|
3
|
+
export const periodCloseStatusTool = {
|
|
4
|
+
name: 'fgl_period_close_status',
|
|
5
|
+
description: 'Get the status of a period close job started by fgl_period_close. Calls the fgl-period-close ' +
|
|
6
|
+
'Lambda and returns the job phase and status, and on failure the pre-close check that stopped ' +
|
|
7
|
+
'it (completion_text).',
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
job_id: z.string().uuid().describe('Job id returned by fgl_period_close'),
|
|
10
|
+
}),
|
|
11
|
+
handler: async (args, ctx) => {
|
|
12
|
+
const { job_id } = args;
|
|
13
|
+
try {
|
|
14
|
+
const result = await ctx.apiClient.get(`${ctx.apiClient.lambdaBasePath}/fgl/period/close/${job_id}`);
|
|
15
|
+
return successResponse(result);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
return errorResponse(API_ERROR, `Failed to get GL period close status: ${error.message}`);
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=period-close-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"period-close-status.js","sourceRoot":"","sources":["../../../src/tools/fgl/period-close-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExE,MAAM,CAAC,MAAM,qBAAqB,GAAS;IACzC,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EACT,+FAA+F;QAC/F,+FAA+F;QAC/F,uBAAuB;IACzB,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAC1E,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,IAA0B,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,GAAG,CACpC,GAAG,GAAG,CAAC,SAAS,CAAC,cAAc,qBAAqB,MAAM,EAAE,CAC7D,CAAC;YACF,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,aAAa,CAAC,SAAS,EAAE,yCAAyC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"period-close.d.ts","sourceRoot":"","sources":["../../../src/tools/fgl/period-close.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAItC,eAAO,MAAM,eAAe,EAAE,IA0C7B,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { successResponse, errorResponse, API_ERROR } from '../types.js';
|
|
3
|
+
import { confirmFlagSchema } from '../_shared/side-effect.js';
|
|
4
|
+
export const periodCloseTool = {
|
|
5
|
+
name: 'fgl_period_close',
|
|
6
|
+
description: 'Start closing a period on a ledger. Calls the fgl-period-close Lambda, which enqueues a ' +
|
|
7
|
+
'close job for the given applications in order (default AR, AP, GL) and returns the job ' +
|
|
8
|
+
'id; the close itself runs asynchronously and can fail pre-close checks. Check the outcome with ' +
|
|
9
|
+
'fgl_period_close_status. Requires confirm=true.',
|
|
10
|
+
sideEffect: 'state_change',
|
|
11
|
+
confirmation: 'caller_confirms',
|
|
12
|
+
idempotency: 'natural_key',
|
|
13
|
+
inputSchema: z.object({
|
|
14
|
+
ledger_id: z.string().uuid().describe('UUID of the ledger'),
|
|
15
|
+
period_id: z.string().uuid().describe('UUID of the period to close'),
|
|
16
|
+
applications: z
|
|
17
|
+
.array(z.enum(['AR', 'AP', 'GL']))
|
|
18
|
+
.min(1)
|
|
19
|
+
.optional()
|
|
20
|
+
.describe('Applications to close, in order (default AR, AP, GL)'),
|
|
21
|
+
confirm: confirmFlagSchema,
|
|
22
|
+
}),
|
|
23
|
+
handler: async (args, ctx) => {
|
|
24
|
+
const input = args;
|
|
25
|
+
const body = {
|
|
26
|
+
ledger_id: input.ledger_id,
|
|
27
|
+
period_id: input.period_id,
|
|
28
|
+
};
|
|
29
|
+
if (input.applications !== undefined)
|
|
30
|
+
body.applications = input.applications;
|
|
31
|
+
try {
|
|
32
|
+
const result = await ctx.apiClient.postLambda('/fgl/period/close', body);
|
|
33
|
+
return successResponse(result);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
return errorResponse(API_ERROR, `Failed to close GL period: ${error.message}`);
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=period-close.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"period-close.js","sourceRoot":"","sources":["../../../src/tools/fgl/period-close.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,0FAA0F;QAC1F,yFAAyF;QACzF,iGAAiG;QACjG,iDAAiD;IACnD,UAAU,EAAE,cAAc;IAC1B,YAAY,EAAE,iBAAiB;IAC/B,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC3D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACpE,YAAY,EAAE,CAAC;aACZ,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;aACjC,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CAAC,sDAAsD,CAAC;QACnE,OAAO,EAAE,iBAAiB;KAC3B,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAKb,CAAC;QACF,MAAM,IAAI,GAA4B;YACpC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC;QACF,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;YAAE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAC7E,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,UAAU,CAC3C,mBAAmB,EACnB,IAAI,CACL,CAAC;YACF,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,aAAa,CAAC,SAAS,EAAE,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"period-list.d.ts","sourceRoot":"","sources":["../../../src/tools/fgl/period-list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAMtC,eAAO,MAAM,cAAc,EAAE,IAqC5B,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { successResponse, errorResponse, API_ERROR } from '../types.js';
|
|
3
|
+
import { FGL_PERIOD_STATUS_SELECT } from '../../fgl/projection.js';
|
|
4
|
+
import { buildPeriodStatusQuery } from '../../fgl/filters.js';
|
|
5
|
+
export const periodListTool = {
|
|
6
|
+
name: 'fgl_period_list',
|
|
7
|
+
description: 'List GL period statuses. Period status is held per ledger, application (AR, AP, GL) ' +
|
|
8
|
+
'and period in fgl_period_statuses; each item embeds the calendar period it refers to.',
|
|
9
|
+
inputSchema: z.object({
|
|
10
|
+
ledger_id: z.string().optional().describe('Filter by ledger UUID'),
|
|
11
|
+
application_code: z.enum(['AR', 'AP', 'GL']).optional()
|
|
12
|
+
.describe('Application whose period status to list (default GL)'),
|
|
13
|
+
status: z.union([z.string(), z.array(z.string())]).optional()
|
|
14
|
+
.describe('Filter by period status (single or array, e.g. OPEN, CLOSED)'),
|
|
15
|
+
period_year: z.number().optional().describe('Filter by period year'),
|
|
16
|
+
adjustment: z.boolean().optional().describe('Filter by adjustment period flag'),
|
|
17
|
+
active: z.boolean().optional().describe('Filter by active flag (default true)'),
|
|
18
|
+
limit: z.number().optional().describe('Max results (default 50, max 200)'),
|
|
19
|
+
offset: z.number().optional().describe('Offset for pagination'),
|
|
20
|
+
order_by: z.string().optional()
|
|
21
|
+
.describe('PostgREST order clause on period status columns (default: period_id.asc)'),
|
|
22
|
+
}),
|
|
23
|
+
handler: async (args, ctx) => {
|
|
24
|
+
const input = args;
|
|
25
|
+
try {
|
|
26
|
+
const { query, limit } = buildPeriodStatusQuery(input);
|
|
27
|
+
const items = await ctx.apiClient.get(`${ctx.apiClient.dbBasePath}/fgl_period_statuses?select=${FGL_PERIOD_STATUS_SELECT}&${query}`, { headers: { Prefer: 'count=exact' } });
|
|
28
|
+
const offset = input.offset ?? 0;
|
|
29
|
+
return successResponse({
|
|
30
|
+
items,
|
|
31
|
+
count: items.length,
|
|
32
|
+
next_offset: items.length === limit ? offset + limit : null,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
return errorResponse(API_ERROR, `Failed to list GL periods: ${error.message}`);
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=period-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"period-list.js","sourceRoot":"","sources":["../../../src/tools/fgl/period-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,MAAM,CAAC,MAAM,cAAc,GAAS;IAClC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACT,sFAAsF;QACtF,uFAAuF;IACzF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAClE,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;aACpD,QAAQ,CAAC,sDAAsD,CAAC;QACnE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;aAC1D,QAAQ,CAAC,8DAA8D,CAAC;QAC3E,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACpE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAC/E,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QAC/E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC1E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC/D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC5B,QAAQ,CAAC,0EAA0E,CAAC;KACxF,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAA2B,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,GAAG,CACnC,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,+BAA+B,wBAAwB,IAAI,KAAK,EAAE,EAC7F,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,CACvC,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;YACjC,OAAO,eAAe,CAAC;gBACrB,KAAK;gBACL,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,WAAW,EAAE,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI;aAC5D,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,aAAa,CAAC,SAAS,EAAE,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"period-open.d.ts","sourceRoot":"","sources":["../../../src/tools/fgl/period-open.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAItC,eAAO,MAAM,cAAc,EAAE,IAyC5B,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { successResponse, errorResponse, API_ERROR } from '../types.js';
|
|
3
|
+
import { confirmFlagSchema } from '../_shared/side-effect.js';
|
|
4
|
+
export const periodOpenTool = {
|
|
5
|
+
name: 'fgl_period_open',
|
|
6
|
+
description: 'Open a period for one application (AR, AP or GL) on a ledger. Calls the fgl_open_period ' +
|
|
7
|
+
'RPC, which requires FGL period-status UPDATE permission. Requires confirm=true.',
|
|
8
|
+
sideEffect: 'state_change',
|
|
9
|
+
confirmation: 'caller_confirms',
|
|
10
|
+
idempotency: 'natural_key',
|
|
11
|
+
inputSchema: z.object({
|
|
12
|
+
ledger_id: z.string().uuid().describe('UUID of the ledger'),
|
|
13
|
+
period_id: z.string().uuid().describe('UUID of the period to open'),
|
|
14
|
+
application_code: z
|
|
15
|
+
.enum(['AR', 'AP', 'GL'])
|
|
16
|
+
.default('GL')
|
|
17
|
+
.describe('Application whose period status to open (default GL)'),
|
|
18
|
+
confirm: confirmFlagSchema,
|
|
19
|
+
}),
|
|
20
|
+
handler: async (args, ctx) => {
|
|
21
|
+
const input = args;
|
|
22
|
+
const applicationCode = input.application_code ?? 'GL';
|
|
23
|
+
try {
|
|
24
|
+
await ctx.apiClient.post(`${ctx.apiClient.dbBasePath}/rpc/fgl_open_period`, {
|
|
25
|
+
p_ledger_id: input.ledger_id,
|
|
26
|
+
p_application_code: applicationCode,
|
|
27
|
+
p_period_id: input.period_id,
|
|
28
|
+
});
|
|
29
|
+
return successResponse({
|
|
30
|
+
ledger_id: input.ledger_id,
|
|
31
|
+
period_id: input.period_id,
|
|
32
|
+
application_code: applicationCode,
|
|
33
|
+
status: 'OPEN',
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
return errorResponse(API_ERROR, `Failed to open GL period: ${error.message}`);
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=period-open.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"period-open.js","sourceRoot":"","sources":["../../../src/tools/fgl/period-open.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,CAAC,MAAM,cAAc,GAAS;IAClC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACT,0FAA0F;QAC1F,iFAAiF;IACnF,UAAU,EAAE,cAAc;IAC1B,YAAY,EAAE,iBAAiB;IAC/B,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC3D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACnE,gBAAgB,EAAE,CAAC;aAChB,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;aACxB,OAAO,CAAC,IAAI,CAAC;aACb,QAAQ,CAAC,sDAAsD,CAAC;QACnE,OAAO,EAAE,iBAAiB;KAC3B,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAKb,CAAC;QACF,MAAM,eAAe,GAAG,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,sBAAsB,EAAE;gBAC1E,WAAW,EAAE,KAAK,CAAC,SAAS;gBAC5B,kBAAkB,EAAE,eAAe;gBACnC,WAAW,EAAE,KAAK,CAAC,SAAS;aAC7B,CAAC,CAAC;YACH,OAAO,eAAe,CAAC;gBACrB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,gBAAgB,EAAE,eAAe;gBACjC,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,aAAa,CAAC,SAAS,EAAE,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tax-rate-list.d.ts","sourceRoot":"","sources":["../../../src/tools/fgl/tax-rate-list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAMtC,eAAO,MAAM,eAAe,EAAE,IAgC7B,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { successResponse, errorResponse, API_ERROR } from '../types.js';
|
|
3
|
+
import { FGL_TAX_RATE_SELECT } from '../../fgl/projection.js';
|
|
4
|
+
import { buildTaxRateQuery } from '../../fgl/filters.js';
|
|
5
|
+
export const taxRateListTool = {
|
|
6
|
+
name: 'fgl_tax_rate_list',
|
|
7
|
+
description: 'List/filter tax rates (ftx_rates, each with its parent ftx_taxes tax)',
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
tax_code: z.string().optional().describe('Filter by tax code (from ftx_taxes)'),
|
|
10
|
+
tax_classification_code: z.string().optional().describe('Filter by tax classification code'),
|
|
11
|
+
effective_on: z.string().optional()
|
|
12
|
+
.describe('Only rates effective on this date (ISO 8601 date)'),
|
|
13
|
+
active: z.boolean().optional().describe('Filter by active flag (default true)'),
|
|
14
|
+
limit: z.number().optional().describe('Max results (default 50, max 200)'),
|
|
15
|
+
offset: z.number().optional().describe('Offset for pagination'),
|
|
16
|
+
order_by: z.string().optional()
|
|
17
|
+
.describe('PostgREST order clause (default: tax_classification_code.asc)'),
|
|
18
|
+
}),
|
|
19
|
+
handler: async (args, ctx) => {
|
|
20
|
+
const input = args;
|
|
21
|
+
try {
|
|
22
|
+
const { query, limit } = buildTaxRateQuery(input);
|
|
23
|
+
const items = await ctx.apiClient.get(`${ctx.apiClient.dbBasePath}/ftx_rates?select=${FGL_TAX_RATE_SELECT}&${query}`, { headers: { Prefer: 'count=exact' } });
|
|
24
|
+
const offset = input.offset ?? 0;
|
|
25
|
+
return successResponse({
|
|
26
|
+
items,
|
|
27
|
+
count: items.length,
|
|
28
|
+
next_offset: items.length === limit ? offset + limit : null,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
return errorResponse(API_ERROR, `Failed to list tax rates: ${error.message}`);
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=tax-rate-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tax-rate-list.js","sourceRoot":"","sources":["../../../src/tools/fgl/tax-rate-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,uEAAuE;IACpF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QAC/E,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC5F,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAChC,QAAQ,CAAC,mDAAmD,CAAC;QAChE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QAC/E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC1E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC/D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC5B,QAAQ,CAAC,+DAA+D,CAAC;KAC7E,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAA2B,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,GAAG,CACnC,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,qBAAqB,mBAAmB,IAAI,KAAK,EAAE,EAC9E,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,CACvC,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;YACjC,OAAO,eAAe,CAAC;gBACrB,KAAK;gBACL,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,WAAW,EAAE,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI;aAC5D,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,aAAa,CAAC,SAAS,EAAE,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trial-balance-get.d.ts","sourceRoot":"","sources":["../../../src/tools/fgl/trial-balance-get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAmBtC,eAAO,MAAM,mBAAmB,EAAE,IAsDjC,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { successResponse, errorResponse, API_ERROR } from '../types.js';
|
|
3
|
+
const trialBalanceMeasureSchema = z.enum([
|
|
4
|
+
'OPENING_DEBIT',
|
|
5
|
+
'OPENING_CREDIT',
|
|
6
|
+
'MOVEMENT_DEBIT',
|
|
7
|
+
'MOVEMENT_CREDIT',
|
|
8
|
+
'CLOSING_DEBIT',
|
|
9
|
+
'CLOSING_CREDIT',
|
|
10
|
+
]);
|
|
11
|
+
const trialBalanceColumnSchema = z.object({
|
|
12
|
+
id: z.string().min(1).describe('Stable column identifier'),
|
|
13
|
+
measure: trialBalanceMeasureSchema,
|
|
14
|
+
dateSelector: z.literal('SELECTED_RANGE'),
|
|
15
|
+
});
|
|
16
|
+
export const trialBalanceGetTool = {
|
|
17
|
+
name: 'fgl_trial_balance_get',
|
|
18
|
+
description: 'Run an authorised trial-balance financial report from an accessible version-2 report ' +
|
|
19
|
+
'template. Uses the shared FGL_TRIAL_BALANCE provider so MCP results have the same filters, ' +
|
|
20
|
+
'decimal-string values, hierarchy, reconciliation, and complete-ledger scope checks as ' +
|
|
21
|
+
'browser reports.',
|
|
22
|
+
inputSchema: z.object({
|
|
23
|
+
template_id: z.string().uuid().describe('UUID of an accessible version-2 template using the FGL_TRIAL_BALANCE provider (see fgl_trial_balance_template_list)'),
|
|
24
|
+
ledger_id: z.string().uuid().describe('UUID of the single ledger to report'),
|
|
25
|
+
date_from: z.string().date().describe('Inclusive report start date (YYYY-MM-DD)'),
|
|
26
|
+
date_to: z.string().date().describe('Inclusive report end date (YYYY-MM-DD)'),
|
|
27
|
+
filters: z.record(z.unknown()).optional().default({}).describe('Provider-supported dimension filters; unsupported filters are rejected by the provider'),
|
|
28
|
+
columns: z.array(trialBalanceColumnSchema).min(1).max(24).optional().describe('Optional semantic trial-balance columns overriding the template defaults'),
|
|
29
|
+
}),
|
|
30
|
+
handler: async (args, ctx) => {
|
|
31
|
+
const input = args;
|
|
32
|
+
try {
|
|
33
|
+
const parameters = {
|
|
34
|
+
ledger_id: input.ledger_id,
|
|
35
|
+
date_from: input.date_from,
|
|
36
|
+
date_to: input.date_to,
|
|
37
|
+
filters: input.filters ?? {},
|
|
38
|
+
};
|
|
39
|
+
if (input.columns !== undefined) {
|
|
40
|
+
parameters.columns = input.columns;
|
|
41
|
+
}
|
|
42
|
+
const report = await ctx.apiClient.post(`${ctx.apiClient.dbBasePath}/rpc/fnd_financial_report`, {
|
|
43
|
+
p_template_id: input.template_id,
|
|
44
|
+
p_parameters: parameters,
|
|
45
|
+
});
|
|
46
|
+
if (report.reportResult.providerCode !== 'FGL_TRIAL_BALANCE') {
|
|
47
|
+
return errorResponse(API_ERROR, 'The selected template is not an FGL_TRIAL_BALANCE financial report template');
|
|
48
|
+
}
|
|
49
|
+
return successResponse(report);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
return errorResponse(API_ERROR, `Failed to get GL trial balance: ${error.message}`);
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=trial-balance-get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trial-balance-get.js","sourceRoot":"","sources":["../../../src/tools/fgl/trial-balance-get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxE,MAAM,yBAAyB,GAAG,CAAC,CAAC,IAAI,CAAC;IACvC,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,iBAAiB;IACjB,eAAe;IACf,gBAAgB;CACjB,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC1D,OAAO,EAAE,yBAAyB;IAClC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;CAC1C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAS;IACvC,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EACT,uFAAuF;QACvF,6FAA6F;QAC7F,wFAAwF;QACxF,kBAAkB;IACpB,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CACrC,qHAAqH,CACtH;QACD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QAC5E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACjF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;QAC7E,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAC5D,wFAAwF,CACzF;QACD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC3E,0EAA0E,CAC3E;KACF,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAA2B,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,UAAU,GAA4B;gBAC1C,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;aAC7B,CAAC;YACF,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAChC,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YACrC,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CACrC,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,2BAA2B,EACtD;gBACE,aAAa,EAAE,KAAK,CAAC,WAAW;gBAChC,YAAY,EAAE,UAAU;aACzB,CACF,CAAC;YAEF,IAAI,MAAM,CAAC,YAAY,CAAC,YAAY,KAAK,mBAAmB,EAAE,CAAC;gBAC7D,OAAO,aAAa,CAClB,SAAS,EACT,6EAA6E,CAC9E,CAAC;YACJ,CAAC;YAED,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,aAAa,CAAC,SAAS,EAAE,mCAAmC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trial-balance-template-list.d.ts","sourceRoot":"","sources":["../../../src/tools/fgl/trial-balance-template-list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAItC,eAAO,MAAM,4BAA4B,EAAE,IAsC1C,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { successResponse, errorResponse, API_ERROR } from '../types.js';
|
|
3
|
+
import { FGL_REPORT_TEMPLATE_SELECT } from '../../fgl/projection.js';
|
|
4
|
+
export const trialBalanceTemplateListTool = {
|
|
5
|
+
name: 'fgl_trial_balance_template_list',
|
|
6
|
+
description: 'List the version-2 FGL_TRIAL_BALANCE report templates accessible to the caller, defaults ' +
|
|
7
|
+
'first. Use the returned id as template_id on fgl_trial_balance_get.',
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
search: z.string().optional().describe('Search across template_name (case-insensitive)'),
|
|
10
|
+
limit: z.number().optional().describe('Max results (default 50, max 200)'),
|
|
11
|
+
offset: z.number().optional().describe('Offset for pagination'),
|
|
12
|
+
}),
|
|
13
|
+
handler: async (args, ctx) => {
|
|
14
|
+
const input = args;
|
|
15
|
+
const limit = Math.min(input.limit ?? 50, 200);
|
|
16
|
+
const offset = input.offset ?? 0;
|
|
17
|
+
const parts = [
|
|
18
|
+
`select=${FGL_REPORT_TEMPLATE_SELECT}`,
|
|
19
|
+
'schema_name=eq.ts_fgl_trial_balance',
|
|
20
|
+
'template_config->>version=eq.2',
|
|
21
|
+
'template_config->report->>providerCode=eq.FGL_TRIAL_BALANCE',
|
|
22
|
+
'active=eq.true',
|
|
23
|
+
];
|
|
24
|
+
if (input.search)
|
|
25
|
+
parts.push(`template_name=ilike.*${input.search}*`);
|
|
26
|
+
parts.push(`limit=${limit}`);
|
|
27
|
+
if (offset)
|
|
28
|
+
parts.push(`offset=${offset}`);
|
|
29
|
+
parts.push('order=is_default.desc,template_name.asc');
|
|
30
|
+
try {
|
|
31
|
+
const items = await ctx.apiClient.get(`${ctx.apiClient.dbBasePath}/fnd_report_templates?${parts.join('&')}`);
|
|
32
|
+
return successResponse({
|
|
33
|
+
items,
|
|
34
|
+
count: items.length,
|
|
35
|
+
next_offset: items.length === limit ? offset + limit : null,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
return errorResponse(API_ERROR, `Failed to list trial balance templates: ${error.message}`);
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=trial-balance-template-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trial-balance-template-list.js","sourceRoot":"","sources":["../../../src/tools/fgl/trial-balance-template-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAErE,MAAM,CAAC,MAAM,4BAA4B,GAAS;IAChD,IAAI,EAAE,iCAAiC;IACvC,WAAW,EACT,2FAA2F;QAC3F,qEAAqE;IACvE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACxF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC1E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KAChE,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAA4D,CAAC;QAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG;YACZ,UAAU,0BAA0B,EAAE;YACtC,qCAAqC;YACrC,gCAAgC;YAChC,6DAA6D;YAC7D,gBAAgB;SACjB,CAAC;QACF,IAAI,KAAK,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,wBAAwB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACtE,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;QAC7B,IAAI,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,GAAG,CACnC,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,yBAAyB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACtE,CAAC;YACF,OAAO,eAAe,CAAC;gBACrB,KAAK;gBACL,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,WAAW,EAAE,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI;aAC5D,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,aAAa,CAAC,SAAS,EAAE,2CAA2C,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Tool } from '../registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* Grant a funds-account access consent
|
|
4
|
+
* (`fxm_funds_accounts_access_consents`).
|
|
5
|
+
*
|
|
6
|
+
* Provisioning: authorises a servicing party to read a funds account's
|
|
7
|
+
* balances / transactions on the owner's behalf. This is the AISP
|
|
8
|
+
* consent record, so it MUST require an explicit `confirm: true`. Persist
|
|
9
|
+
* does not deduplicate consents yet (it ignores the `Idempotency-Key`
|
|
10
|
+
* header; WI-0008817), so a retry can create a second consent.
|
|
11
|
+
* The consent scope is expressed via `consent_permissions` (JSON object)
|
|
12
|
+
* — the caller declares exactly what is granted; the server does not
|
|
13
|
+
* expand a shorthand.
|
|
14
|
+
*/
|
|
15
|
+
export declare const fxmFundsAccountConsentGrantTool: Tool;
|
|
16
|
+
//# sourceMappingURL=fxm-funds-account-consent-grant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fxm-funds-account-consent-grant.d.ts","sourceRoot":"","sources":["../../../src/tools/fxm/fxm-funds-account-consent-grant.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAStC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,+BAA+B,EAAE,IAmF7C,CAAC"}
|