noxctl 0.3.0 → 0.4.1
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 +56 -6
- package/dist/auth.d.ts +6 -2
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +61 -21
- package/dist/auth.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +391 -6
- package/dist/cli.js.map +1 -1
- package/dist/credentials-store.d.ts +1 -1
- package/dist/credentials-store.d.ts.map +1 -1
- package/dist/credentials-store.js +12 -11
- package/dist/credentials-store.js.map +1 -1
- package/dist/fortnox-client.d.ts +6 -1
- package/dist/fortnox-client.d.ts.map +1 -1
- package/dist/fortnox-client.js +150 -62
- package/dist/fortnox-client.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/operations/absencetransactions.d.ts +21 -0
- package/dist/operations/absencetransactions.d.ts.map +1 -0
- package/dist/operations/absencetransactions.js +36 -0
- package/dist/operations/absencetransactions.js.map +1 -0
- package/dist/operations/attendancetransactions.d.ts +21 -0
- package/dist/operations/attendancetransactions.d.ts.map +1 -0
- package/dist/operations/attendancetransactions.js +40 -0
- package/dist/operations/attendancetransactions.js.map +1 -0
- package/dist/operations/employees.d.ts +19 -0
- package/dist/operations/employees.d.ts.map +1 -0
- package/dist/operations/employees.js +34 -0
- package/dist/operations/employees.js.map +1 -0
- package/dist/operations/salarytransactions.d.ts +21 -0
- package/dist/operations/salarytransactions.d.ts.map +1 -0
- package/dist/operations/salarytransactions.js +35 -0
- package/dist/operations/salarytransactions.js.map +1 -0
- package/dist/operations/scheduletimes.d.ts +4 -0
- package/dist/operations/scheduletimes.d.ts.map +1 -0
- package/dist/operations/scheduletimes.js +24 -0
- package/dist/operations/scheduletimes.js.map +1 -0
- package/dist/tools/absencetransactions.d.ts +3 -0
- package/dist/tools/absencetransactions.d.ts.map +1 -0
- package/dist/tools/absencetransactions.js +66 -0
- package/dist/tools/absencetransactions.js.map +1 -0
- package/dist/tools/attendancetransactions.d.ts +3 -0
- package/dist/tools/attendancetransactions.d.ts.map +1 -0
- package/dist/tools/attendancetransactions.js +63 -0
- package/dist/tools/attendancetransactions.js.map +1 -0
- package/dist/tools/employees.d.ts +3 -0
- package/dist/tools/employees.d.ts.map +1 -0
- package/dist/tools/employees.js +119 -0
- package/dist/tools/employees.js.map +1 -0
- package/dist/tools/salarytransactions.d.ts +3 -0
- package/dist/tools/salarytransactions.d.ts.map +1 -0
- package/dist/tools/salarytransactions.js +70 -0
- package/dist/tools/salarytransactions.js.map +1 -0
- package/dist/tools/scheduletimes.d.ts +3 -0
- package/dist/tools/scheduletimes.d.ts.map +1 -0
- package/dist/tools/scheduletimes.js +62 -0
- package/dist/tools/scheduletimes.js.map +1 -0
- package/dist/tools/status.d.ts.map +1 -1
- package/dist/tools/status.js +4 -2
- package/dist/tools/status.js.map +1 -1
- package/dist/views.d.ts +9 -0
- package/dist/views.d.ts.map +1 -1
- package/dist/views.js +115 -0
- package/dist/views.js.map +1 -1
- package/package.json +6 -2
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
interface SalaryTransactionsResponse {
|
|
2
|
+
SalaryTransactions: Record<string, unknown>[];
|
|
3
|
+
MetaInformation?: {
|
|
4
|
+
'@TotalResources': number;
|
|
5
|
+
'@TotalPages': number;
|
|
6
|
+
'@CurrentPage': number;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export interface ListSalaryTransactionsParams {
|
|
10
|
+
employeeId?: string;
|
|
11
|
+
date?: string;
|
|
12
|
+
page?: number;
|
|
13
|
+
limit?: number;
|
|
14
|
+
all?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function listSalaryTransactions(params?: ListSalaryTransactionsParams): Promise<SalaryTransactionsResponse>;
|
|
17
|
+
export declare function getSalaryTransaction(salaryRow: string): Promise<Record<string, unknown>>;
|
|
18
|
+
export declare function createSalaryTransaction(params: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
19
|
+
export declare function deleteSalaryTransaction(salaryRow: string): Promise<void>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=salarytransactions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"salarytransactions.d.ts","sourceRoot":"","sources":["../../src/operations/salarytransactions.ts"],"names":[],"mappings":"AAMA,UAAU,0BAA0B;IAClC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC9C,eAAe,CAAC,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;CAChG;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,GAAE,4BAAiC,GACxC,OAAO,CAAC,0BAA0B,CAAC,CAoBrC;AAED,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAK9F;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAMlC;AAED,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9E"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { fortnoxRequest, fetchAllPages } from '../fortnox-client.js';
|
|
2
|
+
export async function listSalaryTransactions(params = {}) {
|
|
3
|
+
const filters = {};
|
|
4
|
+
if (params.employeeId !== undefined)
|
|
5
|
+
filters.employeeId = params.employeeId;
|
|
6
|
+
if (params.date !== undefined)
|
|
7
|
+
filters.date = params.date;
|
|
8
|
+
if (params.all) {
|
|
9
|
+
const { items, totalResources } = await fetchAllPages('salarytransactions', 'SalaryTransactions', filters);
|
|
10
|
+
return {
|
|
11
|
+
SalaryTransactions: items,
|
|
12
|
+
MetaInformation: { '@TotalResources': totalResources, '@TotalPages': 1, '@CurrentPage': 1 },
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
return fortnoxRequest('salarytransactions', {
|
|
16
|
+
params: { page: params.page || 1, limit: params.limit || 100, ...filters },
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export async function getSalaryTransaction(salaryRow) {
|
|
20
|
+
const data = await fortnoxRequest(`salarytransactions/${encodeURIComponent(String(salaryRow))}`);
|
|
21
|
+
return data.SalaryTransaction;
|
|
22
|
+
}
|
|
23
|
+
export async function createSalaryTransaction(params) {
|
|
24
|
+
const data = await fortnoxRequest('salarytransactions', {
|
|
25
|
+
method: 'POST',
|
|
26
|
+
body: { SalaryTransaction: params },
|
|
27
|
+
});
|
|
28
|
+
return data.SalaryTransaction;
|
|
29
|
+
}
|
|
30
|
+
export async function deleteSalaryTransaction(salaryRow) {
|
|
31
|
+
await fortnoxRequest(`salarytransactions/${encodeURIComponent(String(salaryRow))}`, {
|
|
32
|
+
method: 'DELETE',
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=salarytransactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"salarytransactions.js","sourceRoot":"","sources":["../../src/operations/salarytransactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAmBrE,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,SAAuC,EAAE;IAEzC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;QAAE,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC5E,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAE1D,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,aAAa,CACnD,oBAAoB,EACpB,oBAAoB,EACpB,OAAO,CACR,CAAC;QACF,OAAO;YACL,kBAAkB,EAAE,KAAK;YACzB,eAAe,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE;SAC5F,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CAA6B,oBAAoB,EAAE;QACtE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE,GAAG,OAAO,EAAE;KAC3E,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,SAAiB;IAC1D,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,sBAAsB,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAC9D,CAAC;IACF,OAAO,IAAI,CAAC,iBAAiB,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAA+B;IAE/B,MAAM,IAAI,GAAG,MAAM,cAAc,CAA4B,oBAAoB,EAAE;QACjF,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE;KACpC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,iBAAiB,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,SAAiB;IAC7D,MAAM,cAAc,CAAC,sBAAsB,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE;QAClF,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function getScheduleTime(employeeId: string, date: string): Promise<Record<string, unknown>>;
|
|
2
|
+
export declare function updateScheduleTime(employeeId: string, date: string, fields: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
3
|
+
export declare function resetScheduleTimeDay(employeeId: string, date: string, fields: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
4
|
+
//# sourceMappingURL=scheduletimes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduletimes.d.ts","sourceRoot":"","sources":["../../src/operations/scheduletimes.ts"],"names":[],"mappings":"AAMA,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAKlC;AAED,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAWlC;AAED,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAWlC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { fortnoxRequest } from '../fortnox-client.js';
|
|
2
|
+
export async function getScheduleTime(employeeId, date) {
|
|
3
|
+
const data = await fortnoxRequest(`scheduletimes/${encodeURIComponent(employeeId)}/${encodeURIComponent(date)}`);
|
|
4
|
+
return data.ScheduleTime;
|
|
5
|
+
}
|
|
6
|
+
export async function updateScheduleTime(employeeId, date, fields) {
|
|
7
|
+
// EmployeeId and Date are the path keys — never send them in the PUT body.
|
|
8
|
+
const { EmployeeId: _employeeId, Date: _date, ...body } = fields;
|
|
9
|
+
const data = await fortnoxRequest(`scheduletimes/${encodeURIComponent(employeeId)}/${encodeURIComponent(date)}`, {
|
|
10
|
+
method: 'PUT',
|
|
11
|
+
body: { ScheduleTime: body },
|
|
12
|
+
});
|
|
13
|
+
return data.ScheduleTime;
|
|
14
|
+
}
|
|
15
|
+
export async function resetScheduleTimeDay(employeeId, date, fields) {
|
|
16
|
+
// EmployeeId and Date are the path keys — never send them in the PUT body.
|
|
17
|
+
const { EmployeeId: _employeeId, Date: _date, ...body } = fields;
|
|
18
|
+
const data = await fortnoxRequest(`scheduletimes/${encodeURIComponent(employeeId)}/${encodeURIComponent(date)}/resetday`, {
|
|
19
|
+
method: 'PUT',
|
|
20
|
+
body: { ScheduleTime: body },
|
|
21
|
+
});
|
|
22
|
+
return data.ScheduleTime;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=scheduletimes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduletimes.js","sourceRoot":"","sources":["../../src/operations/scheduletimes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAMtD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,IAAY;IAEZ,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAC9E,CAAC;IACF,OAAO,IAAI,CAAC,YAAY,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAkB,EAClB,IAAY,EACZ,MAA+B;IAE/B,2EAA2E;IAC3E,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IACjE,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAC7E;QACE,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KAC7B,CACF,CAAC;IACF,OAAO,IAAI,CAAC,YAAY,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAAkB,EAClB,IAAY,EACZ,MAA+B;IAE/B,2EAA2E;IAC3E,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IACjE,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,WAAW,EACtF;QACE,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KAC7B,CACF,CAAC;IACF,OAAO,IAAI,CAAC,YAAY,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"absencetransactions.d.ts","sourceRoot":"","sources":["../../src/tools/absencetransactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBpE,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4FvE"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { listAbsenceTransactions, getAbsenceTransaction, createAbsenceTransaction, deleteAbsenceTransaction, } from '../operations/absencetransactions.js';
|
|
3
|
+
import { absenceTransactionListColumns, absenceTransactionDetailColumns } from '../views.js';
|
|
4
|
+
import { detailResponse, dryRunResponse, listResponse, requireConfirmation, textResponse, } from '../tool-output.js';
|
|
5
|
+
export function registerAbsenceTransactionTools(server) {
|
|
6
|
+
server.tool('fortnox_list_absencetransactions', 'Lista frånvarotransaktioner i Fortnox (kräver Lön-behörigheten). Returnerar: id, EmployeeId, CauseCode, Date, Hours.', {
|
|
7
|
+
employeeId: z.string().optional().describe('Filtrera på EmployeeId'),
|
|
8
|
+
date: z.string().optional().describe('Filtrera på datum (YYYY-MM-DD)'),
|
|
9
|
+
page: z.number().optional().describe('Sidnummer (default 1)'),
|
|
10
|
+
limit: z.number().optional().describe('Antal per sida (default 100)'),
|
|
11
|
+
all: z.boolean().optional().describe('Hämta alla sidor (ignorerar page/limit)'),
|
|
12
|
+
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
13
|
+
}, async ({ employeeId, date, page, limit, all, includeRaw }) => {
|
|
14
|
+
const data = await listAbsenceTransactions({ employeeId, date, page, limit, all });
|
|
15
|
+
return listResponse(data.AbsenceTransactions ?? [], absenceTransactionListColumns, data, data.MetaInformation, includeRaw);
|
|
16
|
+
});
|
|
17
|
+
server.tool('fortnox_get_absencetransaction', 'Hämta en enskild frånvarotransaktion från Fortnox (kräver Lön-behörigheten).', {
|
|
18
|
+
id: z.string().describe('id (UUID) för frånvarotransaktionen'),
|
|
19
|
+
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
20
|
+
}, async ({ id, includeRaw }) => {
|
|
21
|
+
const data = await getAbsenceTransaction(id);
|
|
22
|
+
return detailResponse(data, absenceTransactionDetailColumns, data, includeRaw);
|
|
23
|
+
});
|
|
24
|
+
server.tool('fortnox_create_absencetransaction', 'Skapa en ny frånvarotransaktion i Fortnox (kräver Lön-behörigheten). EmployeeId, CauseCode och Date krävs.', {
|
|
25
|
+
EmployeeId: z.string().describe('EmployeeId för den anställde'),
|
|
26
|
+
CauseCode: z
|
|
27
|
+
.string()
|
|
28
|
+
.describe('Frånvarokod. Giltiga koder: ASK, FPE, FRA, HAV, KOM, MIL, NAR, OS1, OS2, OS3, OS4, OS5, PAP, PEM, PER, SEM, SJK, SMB, SVE, TJL, UTB, VAB'),
|
|
29
|
+
Date: z.string().describe('Datum (YYYY-MM-DD)'),
|
|
30
|
+
Hours: z.number().optional().describe('Antal timmar (tal, t.ex. 8)'),
|
|
31
|
+
Extent: z.number().optional().describe('Omfattning i procent (tal, t.ex. 50)'),
|
|
32
|
+
HolidayEntitling: z.boolean().optional().describe('Semestergrundande'),
|
|
33
|
+
CostCenter: z.string().optional().describe('Kostnadsställe'),
|
|
34
|
+
Project: z.string().optional().describe('Projekt'),
|
|
35
|
+
confirm: z.boolean().optional().describe('Bekräfta att frånvarotransaktionen ska skapas'),
|
|
36
|
+
dryRun: z.boolean().optional().describe('Visa vad som skulle skickas utan att skapa'),
|
|
37
|
+
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
38
|
+
}, async ({ confirm, dryRun, includeRaw, ...params }) => {
|
|
39
|
+
if (dryRun) {
|
|
40
|
+
return dryRunResponse(`create absence transaction for employee ${params.EmployeeId}`, {
|
|
41
|
+
AbsenceTransaction: params,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
if (!confirm)
|
|
45
|
+
requireConfirmation(`create absence transaction for employee ${params.EmployeeId}`);
|
|
46
|
+
const data = await createAbsenceTransaction(params);
|
|
47
|
+
return detailResponse(data, absenceTransactionDetailColumns, data, includeRaw);
|
|
48
|
+
});
|
|
49
|
+
server.tool('fortnox_delete_absencetransaction', 'Ta bort en frånvarotransaktion från Fortnox (kräver Lön-behörigheten).', {
|
|
50
|
+
id: z.string().describe('id (UUID) för frånvarotransaktionen att ta bort'),
|
|
51
|
+
confirm: z.boolean().optional().describe('Bekräfta att frånvarotransaktionen ska tas bort'),
|
|
52
|
+
dryRun: z
|
|
53
|
+
.boolean()
|
|
54
|
+
.optional()
|
|
55
|
+
.describe('Visa vad som skulle göras utan att ta bort frånvarotransaktionen'),
|
|
56
|
+
}, async ({ id, confirm, dryRun }) => {
|
|
57
|
+
if (dryRun) {
|
|
58
|
+
return dryRunResponse(`delete absence transaction ${id}`);
|
|
59
|
+
}
|
|
60
|
+
if (!confirm)
|
|
61
|
+
requireConfirmation(`delete absence transaction ${id}`);
|
|
62
|
+
await deleteAbsenceTransaction(id);
|
|
63
|
+
return textResponse(`Absence transaction ${id} deleted.`);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=absencetransactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"absencetransactions.js","sourceRoot":"","sources":["../../src/tools/absencetransactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attendancetransactions.d.ts","sourceRoot":"","sources":["../../src/tools/attendancetransactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBpE,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8F1E"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { listAttendanceTransactions, getAttendanceTransaction, createAttendanceTransaction, deleteAttendanceTransaction, } from '../operations/attendancetransactions.js';
|
|
3
|
+
import { attendanceTransactionListColumns, attendanceTransactionDetailColumns } from '../views.js';
|
|
4
|
+
import { detailResponse, dryRunResponse, listResponse, requireConfirmation, textResponse, } from '../tool-output.js';
|
|
5
|
+
export function registerAttendanceTransactionTools(server) {
|
|
6
|
+
server.tool('fortnox_list_attendancetransactions', 'Lista närvarotransaktioner i Fortnox (kräver Lön-behörigheten). Returnerar: id, EmployeeId, CauseCode, Date, Hours.', {
|
|
7
|
+
employeeId: z.string().optional().describe('Filtrera på EmployeeId'),
|
|
8
|
+
date: z.string().optional().describe('Filtrera på datum (YYYY-MM-DD)'),
|
|
9
|
+
page: z.number().optional().describe('Sidnummer (default 1)'),
|
|
10
|
+
limit: z.number().optional().describe('Antal per sida (default 100)'),
|
|
11
|
+
all: z.boolean().optional().describe('Hämta alla sidor (ignorerar page/limit)'),
|
|
12
|
+
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
13
|
+
}, async ({ employeeId, date, page, limit, all, includeRaw }) => {
|
|
14
|
+
const data = await listAttendanceTransactions({ employeeId, date, page, limit, all });
|
|
15
|
+
return listResponse(data.AttendanceTransactions ?? [], attendanceTransactionListColumns, data, data.MetaInformation, includeRaw);
|
|
16
|
+
});
|
|
17
|
+
server.tool('fortnox_get_attendancetransaction', 'Hämta en enskild närvarotransaktion från Fortnox (kräver Lön-behörigheten).', {
|
|
18
|
+
id: z.string().describe('id (UUID) för närvarotransaktionen'),
|
|
19
|
+
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
20
|
+
}, async ({ id, includeRaw }) => {
|
|
21
|
+
const data = await getAttendanceTransaction(id);
|
|
22
|
+
return detailResponse(data, attendanceTransactionDetailColumns, data, includeRaw);
|
|
23
|
+
});
|
|
24
|
+
server.tool('fortnox_create_attendancetransaction', 'Skapa en ny närvarotransaktion i Fortnox (kräver Lön-behörigheten). EmployeeId, CauseCode och Date krävs.', {
|
|
25
|
+
EmployeeId: z.string().describe('EmployeeId för den anställde'),
|
|
26
|
+
CauseCode: z
|
|
27
|
+
.string()
|
|
28
|
+
.describe('Orsakskod. Giltiga koder: ARB, BE2, BER, FLX, HLG, JO2, JOR, MER, OB1, OB2, OB3, OB4, OB5, OK0, OK1, OK2, OK3, OK4, OK5, OT1, OT2, OT3, OT4, OT5, RES, TID'),
|
|
29
|
+
Date: z.string().describe('Datum (YYYY-MM-DD)'),
|
|
30
|
+
Hours: z.string().optional().describe('Antal timmar'),
|
|
31
|
+
CostCenter: z.string().optional().describe('Kostnadsställe'),
|
|
32
|
+
Project: z.string().optional().describe('Projekt'),
|
|
33
|
+
confirm: z.boolean().optional().describe('Bekräfta att närvarotransaktionen ska skapas'),
|
|
34
|
+
dryRun: z.boolean().optional().describe('Visa vad som skulle skickas utan att skapa'),
|
|
35
|
+
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
36
|
+
}, async ({ confirm, dryRun, includeRaw, ...params }) => {
|
|
37
|
+
if (dryRun) {
|
|
38
|
+
return dryRunResponse(`create attendance transaction for employee ${params.EmployeeId} (${params.CauseCode} ${params.Date})`, { AttendanceTransaction: params });
|
|
39
|
+
}
|
|
40
|
+
if (!confirm) {
|
|
41
|
+
requireConfirmation(`create attendance transaction for employee ${params.EmployeeId} (${params.CauseCode} ${params.Date})`);
|
|
42
|
+
}
|
|
43
|
+
const data = await createAttendanceTransaction(params);
|
|
44
|
+
return detailResponse(data, attendanceTransactionDetailColumns, data, includeRaw);
|
|
45
|
+
});
|
|
46
|
+
server.tool('fortnox_delete_attendancetransaction', 'Ta bort en närvarotransaktion från Fortnox (kräver Lön-behörigheten).', {
|
|
47
|
+
id: z.string().describe('id (UUID) för närvarotransaktionen att ta bort'),
|
|
48
|
+
confirm: z.boolean().optional().describe('Bekräfta att närvarotransaktionen ska tas bort'),
|
|
49
|
+
dryRun: z
|
|
50
|
+
.boolean()
|
|
51
|
+
.optional()
|
|
52
|
+
.describe('Visa vad som skulle göras utan att ta bort närvarotransaktionen'),
|
|
53
|
+
}, async ({ id, confirm, dryRun }) => {
|
|
54
|
+
if (dryRun) {
|
|
55
|
+
return dryRunResponse(`delete attendance transaction ${id}`);
|
|
56
|
+
}
|
|
57
|
+
if (!confirm)
|
|
58
|
+
requireConfirmation(`delete attendance transaction ${id}`);
|
|
59
|
+
await deleteAttendanceTransaction(id);
|
|
60
|
+
return textResponse(`Attendance transaction ${id} deleted.`);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=attendancetransactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attendancetransactions.js","sourceRoot":"","sources":["../../src/tools/attendancetransactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"employees.d.ts","sourceRoot":"","sources":["../../src/tools/employees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4DpE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmG7D"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { listEmployees, getEmployee, createEmployee, updateEmployee, } from '../operations/employees.js';
|
|
3
|
+
import { employeeListColumns, employeeDetailColumns } from '../views.js';
|
|
4
|
+
import { detailResponse, dryRunResponse, listResponse, requireConfirmation, } from '../tool-output.js';
|
|
5
|
+
// Writable Employee fields exposed to the MCP tool. The Fortnox Employee
|
|
6
|
+
// resource has ~100 fields, most of them read-only (vacation balances, computed
|
|
7
|
+
// totals). These are the ones a caller realistically sets; power users can set
|
|
8
|
+
// any field via the CLI `--input` JSON.
|
|
9
|
+
const employeeWritableFields = {
|
|
10
|
+
PersonalIdentityNumber: z.string().optional().describe('Personnummer (ÅÅMMDD-XXXX)'),
|
|
11
|
+
Address1: z.string().optional().describe('Adressrad 1'),
|
|
12
|
+
Address2: z.string().optional().describe('Adressrad 2'),
|
|
13
|
+
PostCode: z.string().optional().describe('Postnummer'),
|
|
14
|
+
City: z.string().optional().describe('Ort'),
|
|
15
|
+
Country: z.string().optional().describe('Land'),
|
|
16
|
+
Phone1: z.string().optional().describe('Telefon 1'),
|
|
17
|
+
Phone2: z.string().optional().describe('Telefon 2'),
|
|
18
|
+
JobTitle: z.string().optional().describe('Befattning (max 30 tecken)'),
|
|
19
|
+
CostCenter: z.string().optional().describe('Kostnadsställe'),
|
|
20
|
+
Project: z.string().optional().describe('Projekt'),
|
|
21
|
+
EmploymentDate: z.string().optional().describe('Anställningsdatum (YYYY-MM-DD)'),
|
|
22
|
+
EmployedTo: z.string().optional().describe('Anställd t.o.m. (YYYY-MM-DD)'),
|
|
23
|
+
EmploymentForm: z
|
|
24
|
+
.string()
|
|
25
|
+
.optional()
|
|
26
|
+
.describe('Anställningsform: TV, PRO, TID, SVT, VIK, PRJ, PRA, FER, SES, NEJ'),
|
|
27
|
+
PersonelType: z
|
|
28
|
+
.string()
|
|
29
|
+
.optional()
|
|
30
|
+
.describe('Personalkategori: TJM (tjänsteman) eller ARB (arbetare)'),
|
|
31
|
+
SalaryForm: z.string().optional().describe('Löneform: MAN (månadslön) eller TIM (timlön)'),
|
|
32
|
+
ScheduleId: z.string().optional().describe('Schema-ID'),
|
|
33
|
+
MonthlySalary: z
|
|
34
|
+
.string()
|
|
35
|
+
.optional()
|
|
36
|
+
.describe('Månadslön (ange antingen MonthlySalary eller HourlyPay)'),
|
|
37
|
+
HourlyPay: z.string().optional().describe('Timlön (ange antingen MonthlySalary eller HourlyPay)'),
|
|
38
|
+
TaxTable: z.string().optional().describe('Skattetabell'),
|
|
39
|
+
TaxColumn: z.number().optional().describe('Skattekolumn (1-6)'),
|
|
40
|
+
TaxAllowance: z.string().optional().describe('Skattereduktion: HUV, EXT, TMP, STU, EJ'),
|
|
41
|
+
NonRecurringTax: z.string().optional().describe('Engångsskatt (procent)'),
|
|
42
|
+
AutoNonRecurringTax: z.boolean().optional().describe('Automatisk engångsskatt'),
|
|
43
|
+
Inactive: z.boolean().optional().describe('Om den anställde är inaktiv'),
|
|
44
|
+
BankAccountNo: z.string().optional().describe('Bankkontonummer'),
|
|
45
|
+
ClearingNo: z.string().optional().describe('Clearingnummer'),
|
|
46
|
+
PayslipType: z.string().optional().describe('Lönebeskedstyp: pdf, digital eller kivra'),
|
|
47
|
+
};
|
|
48
|
+
export function registerEmployeeTools(server) {
|
|
49
|
+
server.tool('fortnox_list_employees', 'Lista anställda i Fortnox (kräver Lön-behörigheten). Returnerar: EmployeeId, FullName, JobTitle, Inactive.', {
|
|
50
|
+
page: z.number().optional().describe('Sidnummer (default 1)'),
|
|
51
|
+
limit: z.number().optional().describe('Antal per sida (default 100)'),
|
|
52
|
+
all: z.boolean().optional().describe('Hämta alla sidor (ignorerar page/limit)'),
|
|
53
|
+
includeRaw: z
|
|
54
|
+
.boolean()
|
|
55
|
+
.optional()
|
|
56
|
+
.describe('Inkludera rå JSON; kan exponera personnummer, lön och bankuppgifter'),
|
|
57
|
+
}, async ({ page, limit, all, includeRaw }) => {
|
|
58
|
+
const data = await listEmployees({ page, limit, all });
|
|
59
|
+
return listResponse(data.Employees ?? [], employeeListColumns, data, data.MetaInformation, includeRaw);
|
|
60
|
+
});
|
|
61
|
+
server.tool('fortnox_get_employee', 'Hämta en enskild anställd från Fortnox (kräver Lön-behörigheten).', {
|
|
62
|
+
employeeId: z.string().describe('EmployeeId för den anställde'),
|
|
63
|
+
includeRaw: z
|
|
64
|
+
.boolean()
|
|
65
|
+
.optional()
|
|
66
|
+
.describe('Inkludera rå JSON; kan exponera personnummer, lön och bankuppgifter'),
|
|
67
|
+
}, async ({ employeeId, includeRaw }) => {
|
|
68
|
+
const data = await getEmployee(employeeId);
|
|
69
|
+
return detailResponse(data, employeeDetailColumns, data, includeRaw);
|
|
70
|
+
});
|
|
71
|
+
server.tool('fortnox_create_employee', 'Skapa en ny anställd i Fortnox (kräver Lön-behörigheten). FirstName, LastName och Email krävs. Tips: ange även EmploymentForm, PersonelType och SalaryForm — annars kan Fortnox inte tilldela ett företagsavtal (felet "ftgavtalid").', {
|
|
72
|
+
EmployeeId: z
|
|
73
|
+
.string()
|
|
74
|
+
.optional()
|
|
75
|
+
.describe('EmployeeId (genereras automatiskt om det utelämnas)'),
|
|
76
|
+
FirstName: z.string().describe('Förnamn'),
|
|
77
|
+
LastName: z.string().describe('Efternamn'),
|
|
78
|
+
Email: z.string().describe('E-postadress'),
|
|
79
|
+
...employeeWritableFields,
|
|
80
|
+
confirm: z.boolean().optional().describe('Bekräfta att den anställde ska skapas'),
|
|
81
|
+
dryRun: z.boolean().optional().describe('Visa vad som skulle skickas utan att skapa'),
|
|
82
|
+
includeRaw: z
|
|
83
|
+
.boolean()
|
|
84
|
+
.optional()
|
|
85
|
+
.describe('Inkludera rå JSON; kan exponera personnummer, lön och bankuppgifter'),
|
|
86
|
+
}, async ({ confirm, dryRun, includeRaw, ...params }) => {
|
|
87
|
+
if (dryRun) {
|
|
88
|
+
return dryRunResponse(`create employee "${params.FirstName} ${params.LastName}"`, {
|
|
89
|
+
Employee: params,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
if (!confirm)
|
|
93
|
+
requireConfirmation(`create employee "${params.FirstName} ${params.LastName}"`);
|
|
94
|
+
const data = await createEmployee(params);
|
|
95
|
+
return detailResponse(data, employeeDetailColumns, data, includeRaw);
|
|
96
|
+
});
|
|
97
|
+
server.tool('fortnox_update_employee', 'Uppdatera en befintlig anställd i Fortnox (kräver Lön-behörigheten).', {
|
|
98
|
+
employeeId: z.string().describe('EmployeeId för den anställde att uppdatera'),
|
|
99
|
+
FirstName: z.string().optional().describe('Förnamn'),
|
|
100
|
+
LastName: z.string().optional().describe('Efternamn'),
|
|
101
|
+
Email: z.string().optional().describe('E-postadress'),
|
|
102
|
+
...employeeWritableFields,
|
|
103
|
+
confirm: z.boolean().optional().describe('Bekräfta att den anställde ska uppdateras'),
|
|
104
|
+
dryRun: z.boolean().optional().describe('Visa vad som skulle skickas utan att uppdatera'),
|
|
105
|
+
includeRaw: z
|
|
106
|
+
.boolean()
|
|
107
|
+
.optional()
|
|
108
|
+
.describe('Inkludera rå JSON; kan exponera personnummer, lön och bankuppgifter'),
|
|
109
|
+
}, async ({ employeeId, confirm, dryRun, includeRaw, ...fields }) => {
|
|
110
|
+
if (dryRun) {
|
|
111
|
+
return dryRunResponse(`update employee ${employeeId}`, { Employee: fields });
|
|
112
|
+
}
|
|
113
|
+
if (!confirm)
|
|
114
|
+
requireConfirmation(`update employee ${employeeId}`);
|
|
115
|
+
const data = await updateEmployee(employeeId, fields);
|
|
116
|
+
return detailResponse(data, employeeDetailColumns, data, includeRaw);
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=employees.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"employees.js","sourceRoot":"","sources":["../../src/tools/employees.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"salarytransactions.d.ts","sourceRoot":"","sources":["../../src/tools/salarytransactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBpE,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8FtE"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { listSalaryTransactions, getSalaryTransaction, createSalaryTransaction, deleteSalaryTransaction, } from '../operations/salarytransactions.js';
|
|
3
|
+
import { salaryTransactionListColumns, salaryTransactionDetailColumns } from '../views.js';
|
|
4
|
+
import { detailResponse, dryRunResponse, listResponse, requireConfirmation, textResponse, } from '../tool-output.js';
|
|
5
|
+
export function registerSalaryTransactionTools(server) {
|
|
6
|
+
server.tool('fortnox_list_salarytransactions', 'Lista lönetransaktioner i Fortnox (kräver Lön-behörigheten). Returnerar: SalaryRow, EmployeeId, SalaryCode, Date, Amount.', {
|
|
7
|
+
employeeId: z.string().optional().describe('Filtrera på EmployeeId'),
|
|
8
|
+
date: z.string().optional().describe('Filtrera på datum (YYYY-MM-DD)'),
|
|
9
|
+
page: z.number().optional().describe('Sidnummer (default 1)'),
|
|
10
|
+
limit: z.number().optional().describe('Antal per sida (default 100)'),
|
|
11
|
+
all: z.boolean().optional().describe('Hämta alla sidor (ignorerar page/limit)'),
|
|
12
|
+
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
13
|
+
}, async ({ employeeId, date, page, limit, all, includeRaw }) => {
|
|
14
|
+
const data = await listSalaryTransactions({ employeeId, date, page, limit, all });
|
|
15
|
+
return listResponse(data.SalaryTransactions ?? [], salaryTransactionListColumns, data, data.MetaInformation, includeRaw);
|
|
16
|
+
});
|
|
17
|
+
server.tool('fortnox_get_salarytransaction', 'Hämta en enskild lönetransaktion från Fortnox (kräver Lön-behörigheten).', {
|
|
18
|
+
salaryRow: z.string().describe('SalaryRow (radens ID)'),
|
|
19
|
+
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
20
|
+
}, async ({ salaryRow, includeRaw }) => {
|
|
21
|
+
const data = await getSalaryTransaction(salaryRow);
|
|
22
|
+
return detailResponse(data, salaryTransactionDetailColumns, data, includeRaw);
|
|
23
|
+
});
|
|
24
|
+
server.tool('fortnox_create_salarytransaction', 'Skapa en ny lönetransaktion i Fortnox (kräver Lön-behörigheten). EmployeeId, SalaryCode och Date krävs.', {
|
|
25
|
+
EmployeeId: z.string().describe('EmployeeId för den anställde'),
|
|
26
|
+
SalaryCode: z.string().describe('Lönekod'),
|
|
27
|
+
Date: z.string().describe('Datum (YYYY-MM-DD)'),
|
|
28
|
+
Amount: z.string().optional().describe('Antal/belopp'),
|
|
29
|
+
CostCenter: z.string().optional().describe('Kostnadsställe'),
|
|
30
|
+
Project: z.string().optional().describe('Projekt'),
|
|
31
|
+
Expense: z.string().optional().describe('Utlägg'),
|
|
32
|
+
Number: z.string().optional().describe('Nummer'),
|
|
33
|
+
TextRow: z.string().optional().describe('Textrad'),
|
|
34
|
+
Total: z.string().optional().describe('Summa'),
|
|
35
|
+
VAT: z.string().optional().describe('Moms'),
|
|
36
|
+
confirm: z.boolean().optional().describe('Bekräfta att lönetransaktionen ska skapas'),
|
|
37
|
+
dryRun: z
|
|
38
|
+
.boolean()
|
|
39
|
+
.optional()
|
|
40
|
+
.describe('Visa vad som skulle skickas utan att skapa lönetransaktionen'),
|
|
41
|
+
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
42
|
+
}, async ({ confirm, dryRun, includeRaw, ...params }) => {
|
|
43
|
+
if (dryRun) {
|
|
44
|
+
return dryRunResponse(`create salary transaction for employee ${params.EmployeeId}`, {
|
|
45
|
+
SalaryTransaction: params,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
if (!confirm)
|
|
49
|
+
requireConfirmation(`create salary transaction for employee ${params.EmployeeId}`);
|
|
50
|
+
const data = await createSalaryTransaction(params);
|
|
51
|
+
return detailResponse(data, salaryTransactionDetailColumns, data, includeRaw);
|
|
52
|
+
});
|
|
53
|
+
server.tool('fortnox_delete_salarytransaction', 'Ta bort en lönetransaktion från Fortnox (kräver Lön-behörigheten).', {
|
|
54
|
+
salaryRow: z.string().describe('SalaryRow (radens ID) att ta bort'),
|
|
55
|
+
confirm: z.boolean().optional().describe('Bekräfta att lönetransaktionen ska tas bort'),
|
|
56
|
+
dryRun: z
|
|
57
|
+
.boolean()
|
|
58
|
+
.optional()
|
|
59
|
+
.describe('Visa vad som skulle göras utan att ta bort lönetransaktionen'),
|
|
60
|
+
}, async ({ salaryRow, confirm, dryRun }) => {
|
|
61
|
+
if (dryRun) {
|
|
62
|
+
return dryRunResponse(`delete salary transaction ${salaryRow}`);
|
|
63
|
+
}
|
|
64
|
+
if (!confirm)
|
|
65
|
+
requireConfirmation(`delete salary transaction ${salaryRow}`);
|
|
66
|
+
await deleteSalaryTransaction(salaryRow);
|
|
67
|
+
return textResponse(`Salary transaction ${salaryRow} deleted.`);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=salarytransactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"salarytransactions.js","sourceRoot":"","sources":["../../src/tools/salarytransactions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,4BAA4B,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EACL,cAAc,EACd,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,MAAM,UAAU,8BAA8B,CAAC,MAAiB;IAC9D,MAAM,CAAC,IAAI,CACT,iCAAiC,EACjC,2HAA2H,EAC3H;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACpE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACtE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC7D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACrE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QAC/E,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAC9E,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE;QAC3D,MAAM,IAAI,GAAG,MAAM,sBAAsB,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAClF,OAAO,YAAY,CACjB,IAAI,CAAC,kBAAkB,IAAI,EAAE,EAC7B,4BAA4B,EAC5B,IAAI,EACJ,IAAI,CAAC,eAAe,EACpB,UAAU,CACX,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,+BAA+B,EAC/B,0EAA0E,EAC1E;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACvD,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAC9E,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACnD,OAAO,cAAc,CAAC,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAChF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kCAAkC,EAClC,yGAAyG,EACzG;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC/D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC/C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACtD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC5D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;QAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACjD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAChD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;QAClD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC9C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC3C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QACrF,MAAM,EAAE,CAAC;aACN,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,8DAA8D,CAAC;QAC3E,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAC9E,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE;QACnD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,cAAc,CAAC,0CAA0C,MAAM,CAAC,UAAU,EAAE,EAAE;gBACnF,iBAAiB,EAAE,MAAM;aAC1B,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,OAAO;YACV,mBAAmB,CAAC,0CAA0C,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAErF,MAAM,IAAI,GAAG,MAAM,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,cAAc,CAAC,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAChF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kCAAkC,EAClC,oEAAoE,EACpE;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACnE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QACvF,MAAM,EAAE,CAAC;aACN,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,8DAA8D,CAAC;KAC5E,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QACvC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,cAAc,CAAC,6BAA6B,SAAS,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,OAAO;YAAE,mBAAmB,CAAC,6BAA6B,SAAS,EAAE,CAAC,CAAC;QAE5E,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,YAAY,CAAC,sBAAsB,SAAS,WAAW,CAAC,CAAC;IAClE,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduletimes.d.ts","sourceRoot":"","sources":["../../src/tools/scheduletimes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsBpE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8DjE"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { getScheduleTime, updateScheduleTime, resetScheduleTimeDay, } from '../operations/scheduletimes.js';
|
|
3
|
+
import { scheduleTimeDetailColumns } from '../views.js';
|
|
4
|
+
import { detailResponse, dryRunResponse, requireConfirmation } from '../tool-output.js';
|
|
5
|
+
// Writable ScheduleTime fields exposed to the MCP tool. EmployeeId and Date are
|
|
6
|
+
// the composite path key and are never sent in the body.
|
|
7
|
+
const scheduleTimeWritableFields = {
|
|
8
|
+
Hours: z.string().optional().describe('Antal timmar'),
|
|
9
|
+
ScheduleId: z.string().optional().describe('Schema-ID'),
|
|
10
|
+
IWH1: z.string().optional().describe('OB-tid 1 (obekväm arbetstid)'),
|
|
11
|
+
IWH2: z.string().optional().describe('OB-tid 2 (obekväm arbetstid)'),
|
|
12
|
+
IWH3: z.string().optional().describe('OB-tid 3 (obekväm arbetstid)'),
|
|
13
|
+
IWH4: z.string().optional().describe('OB-tid 4 (obekväm arbetstid)'),
|
|
14
|
+
IWH5: z.string().optional().describe('OB-tid 5 (obekväm arbetstid)'),
|
|
15
|
+
};
|
|
16
|
+
export function registerScheduleTimeTools(server) {
|
|
17
|
+
server.tool('fortnox_get_scheduletime', 'Hämta en schematid för en anställd och ett datum från Fortnox (kräver Lön-behörigheten).', {
|
|
18
|
+
employeeId: z.string().describe('EmployeeId för den anställde'),
|
|
19
|
+
date: z.string().describe('Datum (YYYY-MM-DD)'),
|
|
20
|
+
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
21
|
+
}, async ({ employeeId, date, includeRaw }) => {
|
|
22
|
+
const data = await getScheduleTime(employeeId, date);
|
|
23
|
+
return detailResponse(data, scheduleTimeDetailColumns, data, includeRaw);
|
|
24
|
+
});
|
|
25
|
+
server.tool('fortnox_update_scheduletime', 'Uppdatera en schematid för en anställd och ett datum i Fortnox (kräver Lön-behörigheten).', {
|
|
26
|
+
employeeId: z.string().describe('EmployeeId för den anställde'),
|
|
27
|
+
date: z.string().describe('Datum (YYYY-MM-DD)'),
|
|
28
|
+
...scheduleTimeWritableFields,
|
|
29
|
+
confirm: z.boolean().optional().describe('Bekräfta att schematiden ska uppdateras'),
|
|
30
|
+
dryRun: z.boolean().optional().describe('Visa vad som skulle skickas utan att uppdatera'),
|
|
31
|
+
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
32
|
+
}, async ({ employeeId, date, confirm, dryRun, includeRaw, ...fields }) => {
|
|
33
|
+
if (dryRun) {
|
|
34
|
+
return dryRunResponse(`update schedule time ${employeeId} ${date}`, {
|
|
35
|
+
ScheduleTime: fields,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
if (!confirm)
|
|
39
|
+
requireConfirmation(`update schedule time ${employeeId} ${date}`);
|
|
40
|
+
const data = await updateScheduleTime(employeeId, date, fields);
|
|
41
|
+
return detailResponse(data, scheduleTimeDetailColumns, data, includeRaw);
|
|
42
|
+
});
|
|
43
|
+
server.tool('fortnox_reset_scheduletime_day', 'Uppdatera schematid och återställ dagen för en anställd och ett datum i Fortnox (kräver Lön-behörigheten).', {
|
|
44
|
+
employeeId: z.string().describe('EmployeeId för den anställde'),
|
|
45
|
+
date: z.string().describe('Datum (YYYY-MM-DD)'),
|
|
46
|
+
...scheduleTimeWritableFields,
|
|
47
|
+
confirm: z.boolean().optional().describe('Bekräfta att dagen ska återställas'),
|
|
48
|
+
dryRun: z.boolean().optional().describe('Visa vad som skulle skickas utan att återställa'),
|
|
49
|
+
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
50
|
+
}, async ({ employeeId, date, confirm, dryRun, includeRaw, ...fields }) => {
|
|
51
|
+
if (dryRun) {
|
|
52
|
+
return dryRunResponse(`reset schedule time day ${employeeId} ${date}`, {
|
|
53
|
+
ScheduleTime: fields,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (!confirm)
|
|
57
|
+
requireConfirmation(`reset schedule time day ${employeeId} ${date}`);
|
|
58
|
+
const data = await resetScheduleTimeDay(employeeId, date, fields);
|
|
59
|
+
return detailResponse(data, scheduleTimeDetailColumns, data, includeRaw);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=scheduletimes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduletimes.js","sourceRoot":"","sources":["../../src/tools/scheduletimes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/tools/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/tools/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgI3D"}
|