noxctl 0.8.0 → 0.10.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 +70 -3
- package/dist/api-coverage.d.ts +48 -0
- package/dist/api-coverage.d.ts.map +1 -0
- package/dist/api-coverage.js +175 -0
- package/dist/api-coverage.js.map +1 -0
- package/dist/auth.d.ts +1 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +7 -0
- package/dist/auth.js.map +1 -1
- package/dist/cli-validators.d.ts +3 -0
- package/dist/cli-validators.d.ts.map +1 -0
- package/dist/cli-validators.js +10 -0
- package/dist/cli-validators.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1114 -18
- package/dist/cli.js.map +1 -1
- package/dist/fortnox-client.d.ts +6 -0
- package/dist/fortnox-client.d.ts.map +1 -1
- package/dist/fortnox-client.js +36 -1
- package/dist/fortnox-client.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/operations/absencetransactions.d.ts +3 -1
- package/dist/operations/absencetransactions.d.ts.map +1 -1
- package/dist/operations/absencetransactions.js +11 -1
- package/dist/operations/absencetransactions.js.map +1 -1
- package/dist/operations/accounts.d.ts +5 -1
- package/dist/operations/accounts.d.ts.map +1 -1
- package/dist/operations/accounts.js +24 -2
- package/dist/operations/accounts.js.map +1 -1
- package/dist/operations/accruals.d.ts +65 -0
- package/dist/operations/accruals.d.ts.map +1 -0
- package/dist/operations/accruals.js +81 -0
- package/dist/operations/accruals.js.map +1 -0
- package/dist/operations/articles.d.ts +2 -1
- package/dist/operations/articles.d.ts.map +1 -1
- package/dist/operations/articles.js +7 -2
- package/dist/operations/articles.js.map +1 -1
- package/dist/operations/attendancetransactions.d.ts +3 -1
- package/dist/operations/attendancetransactions.d.ts.map +1 -1
- package/dist/operations/attendancetransactions.js +11 -1
- package/dist/operations/attendancetransactions.js.map +1 -1
- package/dist/operations/customers.d.ts +2 -1
- package/dist/operations/customers.d.ts.map +1 -1
- package/dist/operations/customers.js +7 -2
- package/dist/operations/customers.js.map +1 -1
- package/dist/operations/files.d.ts +85 -0
- package/dist/operations/files.d.ts.map +1 -0
- package/dist/operations/files.js +88 -0
- package/dist/operations/files.js.map +1 -0
- package/dist/operations/financial-years.d.ts +2 -1
- package/dist/operations/financial-years.d.ts.map +1 -1
- package/dist/operations/financial-years.js +9 -2
- package/dist/operations/financial-years.js.map +1 -1
- package/dist/operations/general-ledger.d.ts +24 -0
- package/dist/operations/general-ledger.d.ts.map +1 -0
- package/dist/operations/general-ledger.js +66 -0
- package/dist/operations/general-ledger.js.map +1 -0
- package/dist/operations/index.d.ts +386 -0
- package/dist/operations/index.d.ts.map +1 -1
- package/dist/operations/index.js +8 -0
- package/dist/operations/index.js.map +1 -1
- package/dist/operations/invoice-payments.d.ts +2 -1
- package/dist/operations/invoice-payments.d.ts.map +1 -1
- package/dist/operations/invoice-payments.js +6 -1
- package/dist/operations/invoice-payments.js.map +1 -1
- package/dist/operations/invoices.d.ts +32 -1
- package/dist/operations/invoices.d.ts.map +1 -1
- package/dist/operations/invoices.js +140 -1
- package/dist/operations/invoices.js.map +1 -1
- package/dist/operations/offers.d.ts +5 -1
- package/dist/operations/offers.d.ts.map +1 -1
- package/dist/operations/offers.js +19 -1
- package/dist/operations/offers.js.map +1 -1
- package/dist/operations/orders.d.ts +5 -1
- package/dist/operations/orders.d.ts.map +1 -1
- package/dist/operations/orders.js +26 -2
- package/dist/operations/orders.js.map +1 -1
- package/dist/operations/pricelists.d.ts +4 -2
- package/dist/operations/pricelists.d.ts.map +1 -1
- package/dist/operations/pricelists.js +23 -9
- package/dist/operations/pricelists.js.map +1 -1
- package/dist/operations/projects.d.ts +2 -1
- package/dist/operations/projects.d.ts.map +1 -1
- package/dist/operations/projects.js +5 -2
- package/dist/operations/projects.js.map +1 -1
- package/dist/operations/reference-data.d.ts +243 -0
- package/dist/operations/reference-data.d.ts.map +1 -0
- package/dist/operations/reference-data.js +113 -0
- package/dist/operations/reference-data.js.map +1 -0
- package/dist/operations/salarytransactions.d.ts +2 -1
- package/dist/operations/salarytransactions.d.ts.map +1 -1
- package/dist/operations/salarytransactions.js +6 -1
- package/dist/operations/salarytransactions.js.map +1 -1
- package/dist/operations/supplier-invoice-payments.d.ts +3 -1
- package/dist/operations/supplier-invoice-payments.d.ts.map +1 -1
- package/dist/operations/supplier-invoice-payments.js +11 -1
- package/dist/operations/supplier-invoice-payments.js.map +1 -1
- package/dist/operations/supplier-invoices.d.ts +21 -1
- package/dist/operations/supplier-invoices.d.ts.map +1 -1
- package/dist/operations/supplier-invoices.js +68 -1
- package/dist/operations/supplier-invoices.js.map +1 -1
- package/dist/operations/taxreductions.d.ts +3 -1
- package/dist/operations/taxreductions.d.ts.map +1 -1
- package/dist/operations/taxreductions.js +18 -2
- package/dist/operations/taxreductions.js.map +1 -1
- package/dist/operations/vouchers.d.ts +18 -1
- package/dist/operations/vouchers.d.ts.map +1 -1
- package/dist/operations/vouchers.js +49 -1
- package/dist/operations/vouchers.js.map +1 -1
- package/dist/safe-file-output.d.ts +4 -0
- package/dist/safe-file-output.d.ts.map +1 -0
- package/dist/safe-file-output.js +48 -0
- package/dist/safe-file-output.js.map +1 -0
- package/dist/schema-audit-mappings.d.ts +6 -5
- package/dist/schema-audit-mappings.d.ts.map +1 -1
- package/dist/schema-audit-mappings.js +159 -10
- package/dist/schema-audit-mappings.js.map +1 -1
- package/dist/schema-audit.d.ts +30 -1
- package/dist/schema-audit.d.ts.map +1 -1
- package/dist/schema-audit.js +288 -14
- package/dist/schema-audit.js.map +1 -1
- package/dist/scope-probes.d.ts.map +1 -1
- package/dist/scope-probes.js +1 -0
- package/dist/scope-probes.js.map +1 -1
- package/dist/sie.d.ts +51 -0
- package/dist/sie.d.ts.map +1 -0
- package/dist/sie.js +355 -0
- package/dist/sie.js.map +1 -0
- package/dist/tools/absencetransactions.d.ts.map +1 -1
- package/dist/tools/absencetransactions.js +30 -3
- package/dist/tools/absencetransactions.js.map +1 -1
- package/dist/tools/accruals.d.ts +18 -0
- package/dist/tools/accruals.d.ts.map +1 -0
- package/dist/tools/accruals.js +169 -0
- package/dist/tools/accruals.js.map +1 -0
- package/dist/tools/articles.d.ts.map +1 -1
- package/dist/tools/articles.js +17 -2
- package/dist/tools/articles.js.map +1 -1
- package/dist/tools/attendancetransactions.d.ts.map +1 -1
- package/dist/tools/attendancetransactions.js +30 -3
- package/dist/tools/attendancetransactions.js.map +1 -1
- package/dist/tools/bookkeeping.d.ts.map +1 -1
- package/dist/tools/bookkeeping.js +121 -2
- package/dist/tools/bookkeeping.js.map +1 -1
- package/dist/tools/contracts.js +1 -1
- package/dist/tools/contracts.js.map +1 -1
- package/dist/tools/customers.d.ts.map +1 -1
- package/dist/tools/customers.js +111 -20
- package/dist/tools/customers.js.map +1 -1
- package/dist/tools/files.d.ts +4 -0
- package/dist/tools/files.d.ts.map +1 -0
- package/dist/tools/files.js +120 -0
- package/dist/tools/files.js.map +1 -0
- package/dist/tools/financial-years.d.ts.map +1 -1
- package/dist/tools/financial-years.js +18 -2
- package/dist/tools/financial-years.js.map +1 -1
- package/dist/tools/general-ledger.d.ts +4 -0
- package/dist/tools/general-ledger.d.ts.map +1 -0
- package/dist/tools/general-ledger.js +61 -0
- package/dist/tools/general-ledger.js.map +1 -0
- package/dist/tools/invoice-payments.d.ts.map +1 -1
- package/dist/tools/invoice-payments.js +34 -1
- package/dist/tools/invoice-payments.js.map +1 -1
- package/dist/tools/invoices.d.ts.map +1 -1
- package/dist/tools/invoices.js +187 -57
- package/dist/tools/invoices.js.map +1 -1
- package/dist/tools/offers.d.ts.map +1 -1
- package/dist/tools/offers.js +68 -1
- package/dist/tools/offers.js.map +1 -1
- package/dist/tools/orders.d.ts.map +1 -1
- package/dist/tools/orders.js +68 -1
- package/dist/tools/orders.js.map +1 -1
- package/dist/tools/pricelists.d.ts.map +1 -1
- package/dist/tools/pricelists.js +35 -3
- package/dist/tools/pricelists.js.map +1 -1
- package/dist/tools/projects.d.ts.map +1 -1
- package/dist/tools/projects.js +14 -2
- package/dist/tools/projects.js.map +1 -1
- package/dist/tools/recurrings.js +1 -1
- package/dist/tools/recurrings.js.map +1 -1
- package/dist/tools/reference-data.d.ts +17 -0
- package/dist/tools/reference-data.d.ts.map +1 -0
- package/dist/tools/reference-data.js +124 -0
- package/dist/tools/reference-data.js.map +1 -0
- package/dist/tools/salarytransactions.d.ts.map +1 -1
- package/dist/tools/salarytransactions.js +27 -1
- package/dist/tools/salarytransactions.js.map +1 -1
- package/dist/tools/supplier-invoice-payments.d.ts.map +1 -1
- package/dist/tools/supplier-invoice-payments.js +34 -1
- package/dist/tools/supplier-invoice-payments.js.map +1 -1
- package/dist/tools/supplier-invoices.d.ts.map +1 -1
- package/dist/tools/supplier-invoices.js +147 -5
- package/dist/tools/supplier-invoices.js.map +1 -1
- package/dist/tools/taxreductions.d.ts.map +1 -1
- package/dist/tools/taxreductions.js +33 -2
- package/dist/tools/taxreductions.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/views.d.ts +5 -0
- package/dist/views.d.ts.map +1 -1
- package/dist/views.js +40 -1
- package/dist/views.js.map +1 -1
- package/package.json +8 -5
package/dist/tools/customers.js
CHANGED
|
@@ -1,12 +1,106 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { defaultFortnoxOperations } from '../operations/index.js';
|
|
3
3
|
import { customerListColumns, customerDetailColumns } from '../views.js';
|
|
4
|
-
import { detailResponse, dryRunResponse, listResponse, requireConfirmation, } from '../tool-output.js';
|
|
4
|
+
import { detailResponse, dryRunResponse, listResponse, requireConfirmation, textResponse, } from '../tool-output.js';
|
|
5
5
|
const CustomerNumberSchema = z
|
|
6
6
|
.string()
|
|
7
7
|
.regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,49}$/, 'Customer number must be alphanumeric');
|
|
8
|
+
const CustomerDeliveryTypeSchema = z.enum(['PRINT', 'EMAIL', 'PRINTSERVICE']);
|
|
9
|
+
// The full writable Customer field set (Fortnox `CustomerSinglePayloadItem`).
|
|
10
|
+
// The MCP SDK silently strips any argument the schema does not declare, so a
|
|
11
|
+
// field missing here never reaches Fortnox and never raises an error — it just
|
|
12
|
+
// vanishes (#96, same class of bug as the Supplier field gap). The operations
|
|
13
|
+
// layer forwards whatever it is given.
|
|
14
|
+
//
|
|
15
|
+
// Country / DeliveryCountry / VisitingCountry are deliberately NOT declared
|
|
16
|
+
// here: Fortnox rejects them on write ("Fältet Country är endast läsbart") —
|
|
17
|
+
// they're server-derived from the matching *CountryCode field, which is the
|
|
18
|
+
// real writable source and is exposed below. operations/customers.ts strips
|
|
19
|
+
// the *Country fields defensively too, so a `get` response fed straight back
|
|
20
|
+
// into create/update still works, but the tool schema should not offer a
|
|
21
|
+
// field that would then be silently dropped a second time.
|
|
22
|
+
const customerWritableFields = {
|
|
23
|
+
CustomerNumber: CustomerNumberSchema.optional().describe('Kundnummer'),
|
|
24
|
+
Name: z.string().optional().describe('Kundnamn'),
|
|
25
|
+
Type: z.enum(['PRIVATE', 'COMPANY']).optional().describe('Kundtyp: privatperson eller företag'),
|
|
26
|
+
DefaultDeliveryTypes: z
|
|
27
|
+
.strictObject({
|
|
28
|
+
Invoice: CustomerDeliveryTypeSchema.optional().describe('Leveranssätt för fakturor'),
|
|
29
|
+
Offer: CustomerDeliveryTypeSchema.optional().describe('Leveranssätt för offerter'),
|
|
30
|
+
Order: CustomerDeliveryTypeSchema.optional().describe('Leveranssätt för ordrar'),
|
|
31
|
+
})
|
|
32
|
+
.optional()
|
|
33
|
+
.describe('Förvalda leveranssätt för fakturor, offerter och ordrar'),
|
|
34
|
+
DefaultTemplates: z
|
|
35
|
+
.strictObject({
|
|
36
|
+
CashInvoice: z.string().optional().describe('Mall för kontantfakturor'),
|
|
37
|
+
Invoice: z.string().optional().describe('Mall för fakturor'),
|
|
38
|
+
Offer: z.string().optional().describe('Mall för offerter'),
|
|
39
|
+
Order: z.string().optional().describe('Mall för ordrar'),
|
|
40
|
+
})
|
|
41
|
+
.optional()
|
|
42
|
+
.describe('Förvalda dokumentmallar'),
|
|
43
|
+
OrganisationNumber: z.string().optional().describe('Organisations- eller personnummer'),
|
|
44
|
+
Email: z.string().optional().describe('E-postadress'),
|
|
45
|
+
Phone1: z.string().optional().describe('Telefonnummer'),
|
|
46
|
+
Phone2: z.string().optional().describe('Alternativt telefonnummer'),
|
|
47
|
+
Fax: z.string().optional().describe('Faxnummer'),
|
|
48
|
+
WWW: z.string().optional().describe('Webbplats'),
|
|
49
|
+
Address1: z.string().optional().describe('Adressrad 1'),
|
|
50
|
+
Address2: z.string().optional().describe('Adressrad 2'),
|
|
51
|
+
ZipCode: z.string().optional().describe('Postnummer'),
|
|
52
|
+
City: z.string().optional().describe('Ort'),
|
|
53
|
+
CountryCode: z.string().optional().describe('Landskod (t.ex. "SE") — det skrivbara landfältet'),
|
|
54
|
+
DeliveryName: z.string().optional().describe('Leveransadress namn'),
|
|
55
|
+
DeliveryAddress1: z.string().optional().describe('Leveransadress rad 1'),
|
|
56
|
+
DeliveryAddress2: z.string().optional().describe('Leveransadress rad 2'),
|
|
57
|
+
DeliveryZipCode: z.string().optional().describe('Leveransadress postnummer'),
|
|
58
|
+
DeliveryCity: z.string().optional().describe('Leveransadress ort'),
|
|
59
|
+
DeliveryCountryCode: z.string().optional().describe('Leveransadress landskod'),
|
|
60
|
+
DeliveryFax: z.string().optional().describe('Leveransadress fax'),
|
|
61
|
+
DeliveryPhone1: z.string().optional().describe('Leveransadress telefon'),
|
|
62
|
+
DeliveryPhone2: z.string().optional().describe('Leveransadress alternativt telefon'),
|
|
63
|
+
VisitingAddress: z.string().optional().describe('Besöksadress'),
|
|
64
|
+
VisitingZipCode: z.string().optional().describe('Besöksadress postnummer'),
|
|
65
|
+
VisitingCity: z.string().optional().describe('Besöksadress ort'),
|
|
66
|
+
VisitingCountryCode: z.string().optional().describe('Besöksadress landskod'),
|
|
67
|
+
GLN: z.string().optional().describe('GLN-nummer (13 tecken)'),
|
|
68
|
+
GLNDelivery: z.string().optional().describe('GLN-nummer för leverans (13 tecken)'),
|
|
69
|
+
ExternalReference: z.string().optional().describe('Externt referens-id'),
|
|
70
|
+
OurReference: z.string().optional().describe('Vår referens'),
|
|
71
|
+
YourReference: z.string().optional().describe('Er referens'),
|
|
72
|
+
Comments: z.string().optional().describe('Kommentarer'),
|
|
73
|
+
Currency: z.string().optional().describe('Valuta (t.ex. "SEK")'),
|
|
74
|
+
CostCenter: z.string().optional().describe('Kostnadsställe'),
|
|
75
|
+
Project: z.string().optional().describe('Projektnummer'),
|
|
76
|
+
PriceList: z.string().optional().describe('Prislista'),
|
|
77
|
+
TermsOfDelivery: z.string().optional().describe('Leveransvillkor (kod)'),
|
|
78
|
+
TermsOfPayment: z.string().optional().describe('Betalningsvillkor (kod)'),
|
|
79
|
+
WayOfDelivery: z.string().optional().describe('Leveranssätt (kod)'),
|
|
80
|
+
VATNumber: z.string().optional().describe('Momsregistreringsnummer'),
|
|
81
|
+
VATType: z
|
|
82
|
+
.enum(['SEVAT', 'SEREVERSEDVAT', 'EUREVERSEDVAT', 'EUVAT', 'EXPORT'])
|
|
83
|
+
.optional()
|
|
84
|
+
.describe('Momstyp'),
|
|
85
|
+
SalesAccount: z.string().optional().describe('Försäljningskonto (4 siffror)'),
|
|
86
|
+
InvoiceAdministrationFee: z.string().optional().describe('Faktureringsavgift'),
|
|
87
|
+
InvoiceDiscount: z.number().optional().describe('Fakturarabatt i procent'),
|
|
88
|
+
InvoiceFreight: z.string().optional().describe('Fraktavgift'),
|
|
89
|
+
InvoiceRemark: z.string().optional().describe('Fakturaanmärkning'),
|
|
90
|
+
ShowPriceVATIncluded: z.boolean().optional().describe('Visa priser inklusive moms'),
|
|
91
|
+
EmailInvoice: z.string().optional().describe('E-post för fakturor'),
|
|
92
|
+
EmailInvoiceCC: z.string().optional().describe('Kopia (CC) för fakturamejl'),
|
|
93
|
+
EmailInvoiceBCC: z.string().optional().describe('Hemlig kopia (BCC) för fakturamejl'),
|
|
94
|
+
EmailOffer: z.string().optional().describe('E-post för offerter'),
|
|
95
|
+
EmailOfferCC: z.string().optional().describe('Kopia (CC) för offertmejl'),
|
|
96
|
+
EmailOfferBCC: z.string().optional().describe('Hemlig kopia (BCC) för offertmejl'),
|
|
97
|
+
EmailOrder: z.string().optional().describe('E-post för ordrar'),
|
|
98
|
+
EmailOrderCC: z.string().optional().describe('Kopia (CC) för ordermejl'),
|
|
99
|
+
EmailOrderBCC: z.string().optional().describe('Hemlig kopia (BCC) för ordermejl'),
|
|
100
|
+
Active: z.boolean().optional().describe('Aktiv kund'),
|
|
101
|
+
};
|
|
8
102
|
export function registerCustomerTools(server, operations = defaultFortnoxOperations) {
|
|
9
|
-
const { listCustomers, getCustomer, createCustomer, updateCustomer } = operations;
|
|
103
|
+
const { listCustomers, getCustomer, createCustomer, updateCustomer, deleteCustomer } = operations;
|
|
10
104
|
server.tool('fortnox_list_customers', 'Lista/sök kunder i Fortnox. Returnerar: CustomerNumber, Name, OrganisationNumber, City, Email.', {
|
|
11
105
|
search: z.string().optional().describe('Sökterm (namn, kundnummer, orgnummer)'),
|
|
12
106
|
page: z.number().optional().describe('Sidnummer (default 1)'),
|
|
@@ -17,7 +111,7 @@ export function registerCustomerTools(server, operations = defaultFortnoxOperati
|
|
|
17
111
|
const data = await listCustomers({ search, page, limit, all });
|
|
18
112
|
return listResponse(data.Customers ?? [], customerListColumns, data, data.MetaInformation, includeRaw);
|
|
19
113
|
});
|
|
20
|
-
server.tool('fortnox_get_customer', 'Hämta en enskild kund från Fortnox. Returnerar: CustomerNumber, Name, OrganisationNumber, Email,
|
|
114
|
+
server.tool('fortnox_get_customer', 'Hämta en enskild kund från Fortnox. Returnerar: CustomerNumber, Name, Type, OrganisationNumber, Email, Phone1, Address1, ZipCode, City, Country, VATNumber.', {
|
|
21
115
|
customerNumber: CustomerNumberSchema.describe('Kundnummer'),
|
|
22
116
|
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
23
117
|
}, async ({ customerNumber, includeRaw }) => {
|
|
@@ -25,15 +119,8 @@ export function registerCustomerTools(server, operations = defaultFortnoxOperati
|
|
|
25
119
|
return detailResponse(data, customerDetailColumns, data, includeRaw);
|
|
26
120
|
});
|
|
27
121
|
server.tool('fortnox_create_customer', 'Skapa en ny kund i Fortnox', {
|
|
122
|
+
...customerWritableFields,
|
|
28
123
|
Name: z.string().describe('Kundnamn'),
|
|
29
|
-
OrganisationNumber: z.string().optional().describe('Organisationsnummer'),
|
|
30
|
-
Email: z.string().optional().describe('E-postadress'),
|
|
31
|
-
Phone: z.string().optional().describe('Telefonnummer'),
|
|
32
|
-
Address1: z.string().optional().describe('Adressrad 1'),
|
|
33
|
-
Address2: z.string().optional().describe('Adressrad 2'),
|
|
34
|
-
ZipCode: z.string().optional().describe('Postnummer'),
|
|
35
|
-
City: z.string().optional().describe('Ort'),
|
|
36
|
-
VATNumber: z.string().optional().describe('Momsregistreringsnummer'),
|
|
37
124
|
confirm: z.boolean().optional().describe('Bekräfta att kunden ska skapas'),
|
|
38
125
|
dryRun: z.boolean().optional().describe('Visa vad som skulle skickas utan att skapa kunden'),
|
|
39
126
|
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
@@ -48,15 +135,7 @@ export function registerCustomerTools(server, operations = defaultFortnoxOperati
|
|
|
48
135
|
});
|
|
49
136
|
server.tool('fortnox_update_customer', 'Uppdatera en befintlig kund i Fortnox', {
|
|
50
137
|
customerNumber: CustomerNumberSchema.describe('Kundnummer att uppdatera'),
|
|
51
|
-
|
|
52
|
-
OrganisationNumber: z.string().optional().describe('Organisationsnummer'),
|
|
53
|
-
Email: z.string().optional().describe('E-postadress'),
|
|
54
|
-
Phone: z.string().optional().describe('Telefonnummer'),
|
|
55
|
-
Address1: z.string().optional().describe('Adressrad 1'),
|
|
56
|
-
Address2: z.string().optional().describe('Adressrad 2'),
|
|
57
|
-
ZipCode: z.string().optional().describe('Postnummer'),
|
|
58
|
-
City: z.string().optional().describe('Ort'),
|
|
59
|
-
VATNumber: z.string().optional().describe('Momsregistreringsnummer'),
|
|
138
|
+
...customerWritableFields,
|
|
60
139
|
confirm: z.boolean().optional().describe('Bekräfta att kunden ska uppdateras'),
|
|
61
140
|
dryRun: z
|
|
62
141
|
.boolean()
|
|
@@ -72,5 +151,17 @@ export function registerCustomerTools(server, operations = defaultFortnoxOperati
|
|
|
72
151
|
const data = await updateCustomer(customerNumber, fields);
|
|
73
152
|
return detailResponse(data, customerDetailColumns, data, includeRaw);
|
|
74
153
|
});
|
|
154
|
+
server.tool('fortnox_delete_customer', 'Ta bort en kund i Fortnox', {
|
|
155
|
+
customerNumber: CustomerNumberSchema.describe('Kundnummer att ta bort'),
|
|
156
|
+
confirm: z.boolean().optional().describe('Bekräfta att kunden ska tas bort'),
|
|
157
|
+
dryRun: z.boolean().optional().describe('Visa vad som skulle göras utan att ta bort kunden'),
|
|
158
|
+
}, async ({ customerNumber, confirm, dryRun }) => {
|
|
159
|
+
if (dryRun)
|
|
160
|
+
return dryRunResponse(`delete customer ${customerNumber}`);
|
|
161
|
+
if (!confirm)
|
|
162
|
+
requireConfirmation(`delete customer ${customerNumber}`);
|
|
163
|
+
await deleteCustomer(customerNumber);
|
|
164
|
+
return textResponse(`Customer ${customerNumber} deleted.`);
|
|
165
|
+
});
|
|
75
166
|
}
|
|
76
167
|
//# sourceMappingURL=customers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customers.js","sourceRoot":"","sources":["../../src/tools/customers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAA0B,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EACL,cAAc,EACd,cAAc,EACd,YAAY,EACZ,mBAAmB,
|
|
1
|
+
{"version":3,"file":"customers.js","sourceRoot":"","sources":["../../src/tools/customers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { type FortnoxOperations } from '../operations/index.js';
|
|
3
|
+
export declare function registerFileTools(server: McpServer, operations?: FortnoxOperations): void;
|
|
4
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAmB1F,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,UAAU,GAAE,iBAA4C,GACvD,IAAI,CAkLN"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { defaultFortnoxOperations } from '../operations/index.js';
|
|
3
|
+
import { privateOutputPath, writeBinaryFile } from '../safe-file-output.js';
|
|
4
|
+
import { detailResponse, dryRunResponse, listResponse, requireConfirmation, textResponse, } from '../tool-output.js';
|
|
5
|
+
import { referenceDataColumns } from '../views.js';
|
|
6
|
+
function folderItems(raw) {
|
|
7
|
+
const folder = (raw.Folder ?? {});
|
|
8
|
+
return [
|
|
9
|
+
...(folder.Folders ?? []),
|
|
10
|
+
...(folder.Files ?? []),
|
|
11
|
+
];
|
|
12
|
+
}
|
|
13
|
+
export function registerFileTools(server, operations = defaultFortnoxOperations) {
|
|
14
|
+
const { listArchive, getArchiveEntry, uploadArchiveFile, deleteArchivePath, deleteArchiveEntry, listInbox, uploadInboxEntry, getInboxFile, deleteInboxEntry, } = operations;
|
|
15
|
+
server.tool('fortnox_list_archive', 'Lista mappar och filer i Fortnox arkiv', {
|
|
16
|
+
path: z.string().optional().describe('Arkivsökväg'),
|
|
17
|
+
fileId: z.string().optional().describe('Valfritt fil-ID'),
|
|
18
|
+
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
19
|
+
}, async ({ path, fileId, includeRaw }) => {
|
|
20
|
+
const raw = await listArchive({ path, fileId });
|
|
21
|
+
return listResponse(folderItems(raw), referenceDataColumns, raw, undefined, includeRaw);
|
|
22
|
+
});
|
|
23
|
+
server.tool('fortnox_get_archive_entry', 'Ladda ner en fil från Fortnox arkiv till en säker lokal sökväg', {
|
|
24
|
+
id: z.string().describe('Arkivpostens ID'),
|
|
25
|
+
path: z.string().optional().describe('Arkivsökväg'),
|
|
26
|
+
fileId: z.string().optional().describe('Valfritt fil-ID'),
|
|
27
|
+
outputPath: z.string().optional().describe('Målsökväg; utelämna för privat tempkatalog'),
|
|
28
|
+
overwrite: z.boolean().optional().describe('Tillåt överskrivning av vanlig fil'),
|
|
29
|
+
}, async ({ id, path, fileId, outputPath, overwrite }) => {
|
|
30
|
+
const file = await getArchiveEntry(id, { path, fileId });
|
|
31
|
+
const target = writeBinaryFile(outputPath ?? privateOutputPath('noxctl-', `archive-${id}`), file.buffer, overwrite);
|
|
32
|
+
return textResponse(`Archive file ${id} saved to ${target} (${file.buffer.length} bytes).`);
|
|
33
|
+
});
|
|
34
|
+
server.tool('fortnox_upload_archive_file', 'Ladda upp en lokal fil till Fortnox arkiv', {
|
|
35
|
+
filePath: z.string().describe('Lokal filsökväg'),
|
|
36
|
+
folderId: z.string().optional().describe('Målmappens ID'),
|
|
37
|
+
path: z.string().optional().describe('Målsökväg i arkivet'),
|
|
38
|
+
confirm: z.boolean().optional().describe('Bekräfta uppladdningen'),
|
|
39
|
+
dryRun: z.boolean().optional().describe('Visa åtgärden utan att läsa eller ladda upp filen'),
|
|
40
|
+
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
41
|
+
}, async ({ filePath, folderId, path, confirm, dryRun, includeRaw }) => {
|
|
42
|
+
const target = `upload ${filePath} to archive`;
|
|
43
|
+
if (dryRun)
|
|
44
|
+
return dryRunResponse(target, { folderId, path });
|
|
45
|
+
if (!confirm)
|
|
46
|
+
requireConfirmation(target);
|
|
47
|
+
const raw = await uploadArchiveFile(filePath, { folderId, path });
|
|
48
|
+
return detailResponse((raw.File ?? raw), referenceDataColumns, raw, includeRaw);
|
|
49
|
+
});
|
|
50
|
+
server.tool('fortnox_delete_archive_path', 'Ta bort en sökväg i Fortnox arkiv', {
|
|
51
|
+
path: z.string().min(1).describe('Exakt arkivsökväg att ta bort'),
|
|
52
|
+
confirm: z.boolean().optional().describe('Bekräfta borttagningen'),
|
|
53
|
+
dryRun: z.boolean().optional().describe('Visa åtgärden utan att ta bort'),
|
|
54
|
+
}, async ({ path, confirm, dryRun }) => {
|
|
55
|
+
const target = `delete archive path ${JSON.stringify(path)}`;
|
|
56
|
+
if (dryRun)
|
|
57
|
+
return dryRunResponse(target);
|
|
58
|
+
if (!confirm)
|
|
59
|
+
requireConfirmation(target);
|
|
60
|
+
await deleteArchivePath(path);
|
|
61
|
+
return textResponse(`Archive path ${JSON.stringify(path)} deleted.`);
|
|
62
|
+
});
|
|
63
|
+
server.tool('fortnox_delete_archive_entry', 'Ta bort en post i Fortnox arkiv', {
|
|
64
|
+
id: z.string().describe('Arkivpostens ID'),
|
|
65
|
+
path: z.string().optional().describe('Arkivsökväg'),
|
|
66
|
+
confirm: z.boolean().optional().describe('Bekräfta borttagningen'),
|
|
67
|
+
dryRun: z.boolean().optional().describe('Visa åtgärden utan att ta bort'),
|
|
68
|
+
}, async ({ id, path, confirm, dryRun }) => {
|
|
69
|
+
const target = `delete archive entry ${id}`;
|
|
70
|
+
if (dryRun)
|
|
71
|
+
return dryRunResponse(target, { path });
|
|
72
|
+
if (!confirm)
|
|
73
|
+
requireConfirmation(target);
|
|
74
|
+
await deleteArchiveEntry(id, path);
|
|
75
|
+
return textResponse(`Archive entry ${id} deleted.`);
|
|
76
|
+
});
|
|
77
|
+
server.tool('fortnox_list_inbox', 'Lista mappar och filer i Fortnox inkorg', { includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox') }, async ({ includeRaw }) => {
|
|
78
|
+
const raw = await listInbox();
|
|
79
|
+
return listResponse(folderItems(raw), referenceDataColumns, raw, undefined, includeRaw);
|
|
80
|
+
});
|
|
81
|
+
server.tool('fortnox_upload_inbox_file', 'Ladda upp en lokal fil till Fortnox inkorg', {
|
|
82
|
+
filePath: z.string().describe('Lokal filsökväg'),
|
|
83
|
+
folderId: z.string().optional().describe('Målmappens ID'),
|
|
84
|
+
path: z.string().optional().describe('Målsökväg i inkorgen'),
|
|
85
|
+
confirm: z.boolean().optional().describe('Bekräfta uppladdningen'),
|
|
86
|
+
dryRun: z.boolean().optional().describe('Visa åtgärden utan att läsa eller ladda upp filen'),
|
|
87
|
+
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
88
|
+
}, async ({ filePath, folderId, path, confirm, dryRun, includeRaw }) => {
|
|
89
|
+
const target = `upload ${filePath} to inbox`;
|
|
90
|
+
if (dryRun)
|
|
91
|
+
return dryRunResponse(target, { folderId, path });
|
|
92
|
+
if (!confirm)
|
|
93
|
+
requireConfirmation(target);
|
|
94
|
+
const raw = await uploadInboxEntry(filePath, { folderId, path });
|
|
95
|
+
return detailResponse((raw.File ?? raw), referenceDataColumns, raw, includeRaw);
|
|
96
|
+
});
|
|
97
|
+
server.tool('fortnox_get_inbox_file', 'Ladda ner en fil från Fortnox inkorg till en säker lokal sökväg', {
|
|
98
|
+
id: z.string().describe('Fil-ID'),
|
|
99
|
+
outputPath: z.string().optional().describe('Målsökväg; utelämna för privat tempkatalog'),
|
|
100
|
+
overwrite: z.boolean().optional().describe('Tillåt överskrivning av vanlig fil'),
|
|
101
|
+
}, async ({ id, outputPath, overwrite }) => {
|
|
102
|
+
const file = await getInboxFile(id);
|
|
103
|
+
const target = writeBinaryFile(outputPath ?? privateOutputPath('noxctl-', `inbox-${id}`), file.buffer, overwrite);
|
|
104
|
+
return textResponse(`Inbox file ${id} saved to ${target} (${file.buffer.length} bytes).`);
|
|
105
|
+
});
|
|
106
|
+
server.tool('fortnox_delete_inbox_entry', 'Ta bort en fil eller post från Fortnox inkorg', {
|
|
107
|
+
id: z.string().describe('Postens ID'),
|
|
108
|
+
confirm: z.boolean().optional().describe('Bekräfta borttagningen'),
|
|
109
|
+
dryRun: z.boolean().optional().describe('Visa åtgärden utan att ta bort'),
|
|
110
|
+
}, async ({ id, confirm, dryRun }) => {
|
|
111
|
+
const target = `delete inbox entry ${id}`;
|
|
112
|
+
if (dryRun)
|
|
113
|
+
return dryRunResponse(target);
|
|
114
|
+
if (!confirm)
|
|
115
|
+
requireConfirmation(target);
|
|
116
|
+
await deleteInboxEntry(id);
|
|
117
|
+
return textResponse(`Inbox entry ${id} deleted.`);
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"financial-years.d.ts","sourceRoot":"","sources":["../../src/tools/financial-years.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"financial-years.d.ts","sourceRoot":"","sources":["../../src/tools/financial-years.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAc1F,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,SAAS,EACjB,UAAU,GAAE,iBAA4C,GACvD,IAAI,CAuEN"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { defaultFortnoxOperations } from '../operations/index.js';
|
|
3
3
|
import { financialYearListColumns, financialYearDetailColumns, lockedPeriodDetailColumns, } from '../views.js';
|
|
4
|
-
import { detailResponse, listResponse, textResponse } from '../tool-output.js';
|
|
4
|
+
import { detailResponse, dryRunResponse, listResponse, requireConfirmation, textResponse, } from '../tool-output.js';
|
|
5
5
|
export function registerFinancialYearTools(server, operations = defaultFortnoxOperations) {
|
|
6
|
-
const { listFinancialYears, getFinancialYear, getLockedPeriod } = operations;
|
|
6
|
+
const { listFinancialYears, getFinancialYear, createFinancialYear, getLockedPeriod } = operations;
|
|
7
7
|
server.tool('fortnox_list_financialyears', 'Lista räkenskapsår i Fortnox. Returnerar: Id, FromDate, ToDate, AccountingMethod, AccountChartType. Kan filtreras till det räkenskapsår som innehåller ett visst datum.', {
|
|
8
8
|
date: z
|
|
9
9
|
.string()
|
|
@@ -21,6 +21,22 @@ export function registerFinancialYearTools(server, operations = defaultFortnoxOp
|
|
|
21
21
|
const data = await getFinancialYear(id);
|
|
22
22
|
return detailResponse(data, financialYearDetailColumns, data, includeRaw);
|
|
23
23
|
});
|
|
24
|
+
server.tool('fortnox_create_financialyear', 'Skapa ett räkenskapsår i Fortnox', {
|
|
25
|
+
FromDate: z.string().describe('Startdatum (YYYY-MM-DD)'),
|
|
26
|
+
ToDate: z.string().describe('Slutdatum (YYYY-MM-DD)'),
|
|
27
|
+
AccountingMethod: z.enum(['ACCRUAL', 'CASH']).optional().describe('Bokföringsmetod'),
|
|
28
|
+
AccountChartType: z.string().optional().describe('Kontoplanstyp'),
|
|
29
|
+
confirm: z.boolean().optional().describe('Bekräfta att räkenskapsåret ska skapas'),
|
|
30
|
+
dryRun: z.boolean().optional().describe('Visa payload utan att skapa'),
|
|
31
|
+
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
32
|
+
}, async ({ confirm, dryRun, includeRaw, ...fields }) => {
|
|
33
|
+
if (dryRun)
|
|
34
|
+
return dryRunResponse('create financial year', { FinancialYear: fields });
|
|
35
|
+
if (!confirm)
|
|
36
|
+
requireConfirmation('create financial year');
|
|
37
|
+
const year = await createFinancialYear(fields);
|
|
38
|
+
return detailResponse(year, financialYearDetailColumns, year, includeRaw);
|
|
39
|
+
});
|
|
24
40
|
server.tool('fortnox_get_lockedperiod', 'Hämta låst period från Fortnox (bokföringen är låst t.o.m. detta datum). Tomt svar betyder att ingen period är låst. Användbart innan verifikat/fakturor bokförs för att undvika fel om låst period.', {
|
|
25
41
|
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
26
42
|
}, async ({ includeRaw }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"financial-years.js","sourceRoot":"","sources":["../../src/tools/financial-years.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAA0B,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,
|
|
1
|
+
{"version":3,"file":"financial-years.js","sourceRoot":"","sources":["../../src/tools/financial-years.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { type FortnoxOperations } from '../operations/index.js';
|
|
3
|
+
export declare function registerGeneralLedgerTools(server: McpServer, operations?: FortnoxOperations): void;
|
|
4
|
+
//# sourceMappingURL=general-ledger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"general-ledger.d.ts","sourceRoot":"","sources":["../../src/tools/general-ledger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAc1F,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,SAAS,EACjB,UAAU,GAAE,iBAA4C,GACvD,IAAI,CA2DN"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { defaultFortnoxOperations } from '../operations/index.js';
|
|
3
|
+
import { generalLedgerColumns } from '../views.js';
|
|
4
|
+
import { listResponse } from '../tool-output.js';
|
|
5
|
+
// A 20,000-posting fixture (a real full year for a high-volume company —
|
|
6
|
+
// exactly the scenario this tool exists for) formats to ~1.78 MB of table
|
|
7
|
+
// text, which can exceed MCP/client/model limits and hands back more ledger
|
|
8
|
+
// data than a caller can realistically consume in one response. Cap it the
|
|
9
|
+
// same way every other list tool in this codebase already reports paging
|
|
10
|
+
// (`@TotalResources`/`@TotalPages`/`@CurrentPage`), so a caller who needs the
|
|
11
|
+
// rest can page through it explicitly instead of it arriving unbounded.
|
|
12
|
+
const DEFAULT_LIMIT = 500;
|
|
13
|
+
const MAX_LIMIT = 2000;
|
|
14
|
+
export function registerGeneralLedgerTools(server, operations = defaultFortnoxOperations) {
|
|
15
|
+
const { getGeneralLedger } = operations;
|
|
16
|
+
server.tool('fortnox_general_ledger', 'Hämta bokförda transaktioner (huvudbok) för en period — en rad per kontorad, med datum, konto, text, debet och kredit. Bygger på Fortnox SIE-export och hämtar hela perioden i ett anrop, till skillnad från fortnox_list_vouchers som inte inkluderar belopp. Användbart för avstämning, periodjämförelser och att slå upp enskilda bokföringar/fakturor över tid. Resultatet är sidindelat — se sidfoten för totalt antal rader.', {
|
|
17
|
+
fromDate: z.string().describe('Från datum (YYYY-MM-DD)'),
|
|
18
|
+
toDate: z.string().describe('Till datum (YYYY-MM-DD)'),
|
|
19
|
+
financialYear: z
|
|
20
|
+
.number()
|
|
21
|
+
.int()
|
|
22
|
+
.positive()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe('Räkenskapsår-ID (från fortnox_list_financialyears) — löses annars upp automatiskt från fromDate'),
|
|
25
|
+
account: z.string().optional().describe('Filtrera på ett specifikt kontonummer'),
|
|
26
|
+
series: z
|
|
27
|
+
.string()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe('Filtrera på en specifik verifikationsserie (t.ex. "A")'),
|
|
30
|
+
page: z.number().int().min(1).optional().describe('Sidnummer (default 1)'),
|
|
31
|
+
limit: z
|
|
32
|
+
.number()
|
|
33
|
+
.int()
|
|
34
|
+
.min(1)
|
|
35
|
+
.max(MAX_LIMIT)
|
|
36
|
+
.optional()
|
|
37
|
+
.describe(`Antal rader per sida (default ${DEFAULT_LIMIT}, max ${MAX_LIMIT})`),
|
|
38
|
+
}, async ({ fromDate, toDate, financialYear, account, series, page, limit }) => {
|
|
39
|
+
let rows = await getGeneralLedger({ fromDate, toDate, financialYear });
|
|
40
|
+
if (account)
|
|
41
|
+
rows = rows.filter((r) => r.account === account);
|
|
42
|
+
if (series)
|
|
43
|
+
rows = rows.filter((r) => r.series === series);
|
|
44
|
+
const totalResources = rows.length;
|
|
45
|
+
const pageSize = Math.min(limit ?? DEFAULT_LIMIT, MAX_LIMIT);
|
|
46
|
+
const currentPage = page ?? 1;
|
|
47
|
+
const start = (currentPage - 1) * pageSize;
|
|
48
|
+
const pageRows = rows.slice(start, start + pageSize);
|
|
49
|
+
const totalPages = Math.max(1, Math.ceil(totalResources / pageSize));
|
|
50
|
+
// No `includeRaw`: this data comes from a parsed SIE text export, not a
|
|
51
|
+
// Fortnox JSON response, so there is no separate "raw" representation
|
|
52
|
+
// to hand back — offering one would just relabel these same rows as
|
|
53
|
+
// something they are not.
|
|
54
|
+
return listResponse(pageRows, generalLedgerColumns, undefined, {
|
|
55
|
+
'@TotalResources': totalResources,
|
|
56
|
+
'@TotalPages': totalPages,
|
|
57
|
+
'@CurrentPage': currentPage,
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=general-ledger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"general-ledger.js","sourceRoot":"","sources":["../../src/tools/general-ledger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoice-payments.d.ts","sourceRoot":"","sources":["../../src/tools/invoice-payments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAY1F,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,SAAS,EACjB,UAAU,GAAE,iBAA4C,GACvD,IAAI,
|
|
1
|
+
{"version":3,"file":"invoice-payments.d.ts","sourceRoot":"","sources":["../../src/tools/invoice-payments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAY1F,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,SAAS,EACjB,UAAU,GAAE,iBAA4C,GACvD,IAAI,CAoIN"}
|
|
@@ -4,7 +4,7 @@ import { invoicePaymentListColumns, invoicePaymentDetailColumns } from '../views
|
|
|
4
4
|
import { confirmationResponse, detailResponse, dryRunResponse, listResponse, requireConfirmation, } from '../tool-output.js';
|
|
5
5
|
const PaymentNumberSchema = z.string().regex(/^\d+$/, 'Payment number must be numeric');
|
|
6
6
|
export function registerInvoicePaymentTools(server, operations = defaultFortnoxOperations) {
|
|
7
|
-
const { listInvoicePayments, getInvoicePayment, createInvoicePayment, deleteInvoicePayment } = operations;
|
|
7
|
+
const { listInvoicePayments, getInvoicePayment, createInvoicePayment, updateInvoicePayment, deleteInvoicePayment, bookkeepInvoicePayment, } = operations;
|
|
8
8
|
server.tool('fortnox_list_invoice_payments', 'Lista inbetalningar (kundfakturor) i Fortnox. Returnerar: Number, InvoiceNumber, PaymentDate, Amount.', {
|
|
9
9
|
invoiceNumber: z.string().optional().describe('Filtrera på fakturanummer'),
|
|
10
10
|
page: z.number().optional().describe('Sidnummer'),
|
|
@@ -57,5 +57,38 @@ export function registerInvoicePaymentTools(server, operations = defaultFortnoxO
|
|
|
57
57
|
await deleteInvoicePayment(paymentNumber);
|
|
58
58
|
return confirmationResponse(`Inbetalning ${paymentNumber} borttagen.`, {});
|
|
59
59
|
});
|
|
60
|
+
server.tool('fortnox_update_invoice_payment', 'Uppdatera en inbetalning i Fortnox', {
|
|
61
|
+
paymentNumber: PaymentNumberSchema.describe('Betalningsnummer'),
|
|
62
|
+
InvoiceNumber: z.number().optional().describe('Fakturanummer'),
|
|
63
|
+
Amount: z.number().optional().describe('Belopp'),
|
|
64
|
+
PaymentDate: z.string().optional().describe('Betalningsdatum (YYYY-MM-DD)'),
|
|
65
|
+
Source: z.string().optional().describe('Betalningskälla'),
|
|
66
|
+
confirm: z.boolean().optional().describe('Bekräfta uppdateringen'),
|
|
67
|
+
dryRun: z.boolean().optional().describe('Visa payload utan att uppdatera'),
|
|
68
|
+
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
69
|
+
}, async ({ paymentNumber, confirm, dryRun, includeRaw, ...fields }) => {
|
|
70
|
+
if (dryRun) {
|
|
71
|
+
return dryRunResponse(`update invoice payment ${paymentNumber}`, {
|
|
72
|
+
InvoicePayment: fields,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
if (!confirm)
|
|
76
|
+
requireConfirmation(`update invoice payment ${paymentNumber}`);
|
|
77
|
+
const payment = await updateInvoicePayment(paymentNumber, fields);
|
|
78
|
+
return detailResponse(payment, invoicePaymentDetailColumns, payment, includeRaw);
|
|
79
|
+
});
|
|
80
|
+
server.tool('fortnox_bookkeep_invoice_payment', 'Bokför en inbetalning i Fortnox', {
|
|
81
|
+
paymentNumber: PaymentNumberSchema.describe('Betalningsnummer'),
|
|
82
|
+
confirm: z.boolean().optional().describe('Bekräfta bokföringen'),
|
|
83
|
+
dryRun: z.boolean().optional().describe('Visa åtgärden utan att bokföra'),
|
|
84
|
+
includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
|
|
85
|
+
}, async ({ paymentNumber, confirm, dryRun, includeRaw }) => {
|
|
86
|
+
if (dryRun)
|
|
87
|
+
return dryRunResponse(`bookkeep invoice payment ${paymentNumber}`);
|
|
88
|
+
if (!confirm)
|
|
89
|
+
requireConfirmation(`bookkeep invoice payment ${paymentNumber}`);
|
|
90
|
+
const payment = await bookkeepInvoicePayment(paymentNumber);
|
|
91
|
+
return detailResponse(payment, invoicePaymentDetailColumns, payment, includeRaw);
|
|
92
|
+
});
|
|
60
93
|
}
|
|
61
94
|
//# sourceMappingURL=invoice-payments.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoice-payments.js","sourceRoot":"","sources":["../../src/tools/invoice-payments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAA0B,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,gCAAgC,CAAC,CAAC;AAExF,MAAM,UAAU,2BAA2B,CACzC,MAAiB,EACjB,aAAgC,wBAAwB;IAExD,MAAM,
|
|
1
|
+
{"version":3,"file":"invoice-payments.js","sourceRoot":"","sources":["../../src/tools/invoice-payments.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoices.d.ts","sourceRoot":"","sources":["../../src/tools/invoices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"invoices.d.ts","sourceRoot":"","sources":["../../src/tools/invoices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AA6E1F,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,UAAU,GAAE,iBAA4C,GACvD,IAAI,CAylBN"}
|