noxctl 0.1.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/LICENSE +21 -0
- package/README.md +326 -0
- package/dist/auth.d.ts +29 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +267 -0
- package/dist/auth.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1012 -0
- package/dist/cli.js.map +1 -0
- package/dist/credentials-store.d.ts +4 -0
- package/dist/credentials-store.d.ts.map +1 -0
- package/dist/credentials-store.js +223 -0
- package/dist/credentials-store.js.map +1 -0
- package/dist/formatter.d.ts +62 -0
- package/dist/formatter.d.ts.map +1 -0
- package/dist/formatter.js +200 -0
- package/dist/formatter.js.map +1 -0
- package/dist/fortnox-client.d.ts +27 -0
- package/dist/fortnox-client.d.ts.map +1 -0
- package/dist/fortnox-client.js +178 -0
- package/dist/fortnox-client.js.map +1 -0
- package/dist/identifiers.d.ts +4 -0
- package/dist/identifiers.d.ts.map +1 -0
- package/dist/identifiers.js +16 -0
- package/dist/identifiers.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/operations/accounts.d.ts +18 -0
- package/dist/operations/accounts.d.ts.map +1 -0
- package/dist/operations/accounts.js +28 -0
- package/dist/operations/accounts.js.map +1 -0
- package/dist/operations/articles.d.ts +20 -0
- package/dist/operations/articles.d.ts.map +1 -0
- package/dist/operations/articles.js +36 -0
- package/dist/operations/articles.js.map +1 -0
- package/dist/operations/company.d.ts +2 -0
- package/dist/operations/company.d.ts.map +1 -0
- package/dist/operations/company.js +6 -0
- package/dist/operations/company.js.map +1 -0
- package/dist/operations/customers.d.ts +20 -0
- package/dist/operations/customers.d.ts.map +1 -0
- package/dist/operations/customers.js +37 -0
- package/dist/operations/customers.js.map +1 -0
- package/dist/operations/financial-reports.d.ts +37 -0
- package/dist/operations/financial-reports.d.ts.map +1 -0
- package/dist/operations/financial-reports.js +193 -0
- package/dist/operations/financial-reports.js.map +1 -0
- package/dist/operations/invoices.d.ts +32 -0
- package/dist/operations/invoices.d.ts.map +1 -0
- package/dist/operations/invoices.js +74 -0
- package/dist/operations/invoices.js.map +1 -0
- package/dist/operations/supplier-invoices.d.ts +23 -0
- package/dist/operations/supplier-invoices.d.ts.map +1 -0
- package/dist/operations/supplier-invoices.js +36 -0
- package/dist/operations/supplier-invoices.js.map +1 -0
- package/dist/operations/suppliers.d.ts +20 -0
- package/dist/operations/suppliers.d.ts.map +1 -0
- package/dist/operations/suppliers.js +36 -0
- package/dist/operations/suppliers.js.map +1 -0
- package/dist/operations/tax.d.ts +26 -0
- package/dist/operations/tax.d.ts.map +1 -0
- package/dist/operations/tax.js +47 -0
- package/dist/operations/tax.js.map +1 -0
- package/dist/operations/vouchers.d.ts +22 -0
- package/dist/operations/vouchers.d.ts.map +1 -0
- package/dist/operations/vouchers.js +41 -0
- package/dist/operations/vouchers.js.map +1 -0
- package/dist/tool-output.d.ts +16 -0
- package/dist/tool-output.d.ts.map +1 -0
- package/dist/tool-output.js +48 -0
- package/dist/tool-output.js.map +1 -0
- package/dist/tools/articles.d.ts +3 -0
- package/dist/tools/articles.d.ts.map +1 -0
- package/dist/tools/articles.js +75 -0
- package/dist/tools/articles.js.map +1 -0
- package/dist/tools/bookkeeping.d.ts +3 -0
- package/dist/tools/bookkeeping.d.ts.map +1 -0
- package/dist/tools/bookkeeping.js +82 -0
- package/dist/tools/bookkeeping.js.map +1 -0
- package/dist/tools/company.d.ts +3 -0
- package/dist/tools/company.d.ts.map +1 -0
- package/dist/tools/company.js +13 -0
- package/dist/tools/company.js.map +1 -0
- package/dist/tools/customers.d.ts +3 -0
- package/dist/tools/customers.d.ts.map +1 -0
- package/dist/tools/customers.js +75 -0
- package/dist/tools/customers.js.map +1 -0
- package/dist/tools/financial-reports.d.ts +3 -0
- package/dist/tools/financial-reports.d.ts.map +1 -0
- package/dist/tools/financial-reports.js +35 -0
- package/dist/tools/financial-reports.js.map +1 -0
- package/dist/tools/invoices.d.ts +3 -0
- package/dist/tools/invoices.d.ts.map +1 -0
- package/dist/tools/invoices.js +160 -0
- package/dist/tools/invoices.js.map +1 -0
- package/dist/tools/status.d.ts +3 -0
- package/dist/tools/status.d.ts.map +1 -0
- package/dist/tools/status.js +109 -0
- package/dist/tools/status.js.map +1 -0
- package/dist/tools/supplier-invoices.d.ts +3 -0
- package/dist/tools/supplier-invoices.d.ts.map +1 -0
- package/dist/tools/supplier-invoices.js +88 -0
- package/dist/tools/supplier-invoices.js.map +1 -0
- package/dist/tools/suppliers.d.ts +3 -0
- package/dist/tools/suppliers.d.ts.map +1 -0
- package/dist/tools/suppliers.js +77 -0
- package/dist/tools/suppliers.js.map +1 -0
- package/dist/tools/tax.d.ts +3 -0
- package/dist/tools/tax.d.ts.map +1 -0
- package/dist/tools/tax.js +18 -0
- package/dist/tools/tax.js.map +1 -0
- package/dist/views.d.ts +19 -0
- package/dist/views.d.ts.map +1 -0
- package/dist/views.js +165 -0
- package/dist/views.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { fortnoxRequest } from '../fortnox-client.js';
|
|
2
|
+
// BAS account plan groupings
|
|
3
|
+
const INCOME_STATEMENT_GROUPS = [
|
|
4
|
+
{ range: [3000, 3999], label: 'Nettoomsättning (Revenue)' },
|
|
5
|
+
{ range: [4000, 4999], label: 'Varuinköp/direkta kostnader (COGS)' },
|
|
6
|
+
{ range: [5000, 6999], label: 'Övriga externa kostnader (Other external costs)' },
|
|
7
|
+
{ range: [7000, 7699], label: 'Personalkostnader (Personnel costs)' },
|
|
8
|
+
{ range: [7700, 7899], label: 'Nedskrivningar/avskrivningar (Depreciation)' },
|
|
9
|
+
{ range: [7900, 7999], label: 'Övriga rörelsekostnader (Other operating costs)' },
|
|
10
|
+
{ range: [8000, 8399], label: 'Finansiella intäkter (Financial income)' },
|
|
11
|
+
{ range: [8400, 8799], label: 'Finansiella kostnader (Financial costs)' },
|
|
12
|
+
{ range: [8800, 8899], label: 'Bokslutsdispositioner (Year-end appropriations)' },
|
|
13
|
+
{ range: [8900, 8999], label: 'Skatt (Tax)' },
|
|
14
|
+
];
|
|
15
|
+
const BALANCE_SHEET_ASSET_GROUPS = [
|
|
16
|
+
{ range: [1000, 1399], label: 'Immateriella anläggningstillgångar (Intangible assets)' },
|
|
17
|
+
{ range: [1400, 1499], label: 'Materiella anläggningstillgångar (Tangible assets)' },
|
|
18
|
+
{ range: [1500, 1599], label: 'Finansiella anläggningstillgångar (Financial assets)' },
|
|
19
|
+
{ range: [1600, 1699], label: 'Kundfordringar (Accounts receivable)' },
|
|
20
|
+
{ range: [1700, 1799], label: 'Övriga fordringar (Other receivables)' },
|
|
21
|
+
{ range: [1800, 1899], label: 'Kortfristiga placeringar (Short-term investments)' },
|
|
22
|
+
{ range: [1900, 1999], label: 'Kassa och bank (Cash and bank)' },
|
|
23
|
+
];
|
|
24
|
+
const BALANCE_SHEET_LIABILITY_GROUPS = [
|
|
25
|
+
{ range: [2000, 2099], label: 'Eget kapital (Equity)' },
|
|
26
|
+
{ range: [2100, 2199], label: 'Obeskattade reserver (Untaxed reserves)' },
|
|
27
|
+
{ range: [2200, 2299], label: 'Avsättningar (Provisions)' },
|
|
28
|
+
{ range: [2300, 2399], label: 'Långfristiga skulder (Long-term liabilities)' },
|
|
29
|
+
{ range: [2400, 2499], label: 'Leverantörsskulder (Accounts payable)' },
|
|
30
|
+
{ range: [2500, 2599], label: 'Skatteskulder (Tax liabilities)' },
|
|
31
|
+
{ range: [2600, 2699], label: 'Momsskulder (VAT liabilities)' },
|
|
32
|
+
{ range: [2700, 2799], label: 'Personalens skatter/avgifter (Payroll liabilities)' },
|
|
33
|
+
{ range: [2800, 2899], label: 'Övriga kortfristiga skulder (Other current liabilities)' },
|
|
34
|
+
{ range: [2900, 2999], label: 'Upplupna kostnader (Accrued expenses)' },
|
|
35
|
+
];
|
|
36
|
+
/** Fetch all pages of accounts for a financial year. */
|
|
37
|
+
async function fetchAllAccounts(financialYear) {
|
|
38
|
+
const all = [];
|
|
39
|
+
let page = 1;
|
|
40
|
+
let totalPages = 1;
|
|
41
|
+
do {
|
|
42
|
+
const data = await fortnoxRequest('accounts', {
|
|
43
|
+
params: { financialyear: financialYear, page },
|
|
44
|
+
});
|
|
45
|
+
all.push(...data.Accounts);
|
|
46
|
+
totalPages = data.MetaInformation?.['@TotalPages'] ?? 1;
|
|
47
|
+
page++;
|
|
48
|
+
} while (page <= totalPages);
|
|
49
|
+
return all;
|
|
50
|
+
}
|
|
51
|
+
/** Fetch all vouchers (list + individual details) and sum debit/credit per account. */
|
|
52
|
+
async function fetchVoucherSums(financialYear, fromDate, toDate) {
|
|
53
|
+
const sums = new Map();
|
|
54
|
+
// Step 1: List all vouchers to get series/number identifiers
|
|
55
|
+
const vouchers = [];
|
|
56
|
+
let page = 1;
|
|
57
|
+
let totalPages = 1;
|
|
58
|
+
do {
|
|
59
|
+
const data = await fortnoxRequest('vouchers', {
|
|
60
|
+
params: {
|
|
61
|
+
financialyear: financialYear,
|
|
62
|
+
fromdate: fromDate,
|
|
63
|
+
todate: toDate,
|
|
64
|
+
page,
|
|
65
|
+
limit: 100,
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
for (const v of data.Vouchers ?? []) {
|
|
69
|
+
vouchers.push({
|
|
70
|
+
series: v.VoucherSeries,
|
|
71
|
+
number: v.VoucherNumber,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
totalPages = data.MetaInformation?.['@TotalPages'] ?? 1;
|
|
75
|
+
page++;
|
|
76
|
+
} while (page <= totalPages);
|
|
77
|
+
// Step 2: Fetch each voucher individually to get VoucherRows
|
|
78
|
+
const yearParam = financialYear ? `?financialyear=${financialYear}` : '';
|
|
79
|
+
for (const v of vouchers) {
|
|
80
|
+
const detail = await fortnoxRequest(`vouchers/${encodeURIComponent(v.series)}/${v.number}${yearParam}`);
|
|
81
|
+
for (const row of detail.Voucher.VoucherRows ?? []) {
|
|
82
|
+
const existing = sums.get(row.Account) ?? { debit: 0, credit: 0 };
|
|
83
|
+
existing.debit += row.Debit || 0;
|
|
84
|
+
existing.credit += row.Credit || 0;
|
|
85
|
+
sums.set(row.Account, existing);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return sums;
|
|
89
|
+
}
|
|
90
|
+
/** Compute closing balances: BalanceBroughtForward + debit - credit for each account. */
|
|
91
|
+
async function computeBalances(financialYear, fromDate, toDate) {
|
|
92
|
+
const [accounts, voucherSums] = await Promise.all([
|
|
93
|
+
fetchAllAccounts(financialYear),
|
|
94
|
+
fetchVoucherSums(financialYear, fromDate, toDate),
|
|
95
|
+
]);
|
|
96
|
+
return accounts
|
|
97
|
+
.map((a) => {
|
|
98
|
+
const movement = voucherSums.get(a.Number);
|
|
99
|
+
const debit = movement?.debit ?? 0;
|
|
100
|
+
const credit = movement?.credit ?? 0;
|
|
101
|
+
// For period-scoped income statements (fromDate set), skip BBF
|
|
102
|
+
// since we only want the period's movements for P&L accounts.
|
|
103
|
+
// For balance sheets, always include BBF.
|
|
104
|
+
const bbf = fromDate ? 0 : a.BalanceBroughtForward;
|
|
105
|
+
const closingBalance = bbf + debit - credit;
|
|
106
|
+
return {
|
|
107
|
+
number: a.Number,
|
|
108
|
+
description: a.Description,
|
|
109
|
+
closingBalance,
|
|
110
|
+
};
|
|
111
|
+
})
|
|
112
|
+
.filter((a) => a.closingBalance !== 0);
|
|
113
|
+
}
|
|
114
|
+
/** Compute balance sheet balances: always includes BBF + movements up to toDate. */
|
|
115
|
+
async function computeBalanceSheetBalances(financialYear, toDate) {
|
|
116
|
+
const [accounts, voucherSums] = await Promise.all([
|
|
117
|
+
fetchAllAccounts(financialYear),
|
|
118
|
+
fetchVoucherSums(financialYear, undefined, toDate),
|
|
119
|
+
]);
|
|
120
|
+
return accounts
|
|
121
|
+
.map((a) => {
|
|
122
|
+
const movement = voucherSums.get(a.Number);
|
|
123
|
+
const debit = movement?.debit ?? 0;
|
|
124
|
+
const credit = movement?.credit ?? 0;
|
|
125
|
+
const closingBalance = a.BalanceBroughtForward + debit - credit;
|
|
126
|
+
return {
|
|
127
|
+
number: a.Number,
|
|
128
|
+
description: a.Description,
|
|
129
|
+
closingBalance,
|
|
130
|
+
};
|
|
131
|
+
})
|
|
132
|
+
.filter((a) => a.closingBalance !== 0);
|
|
133
|
+
}
|
|
134
|
+
function buildSection(balances, range, label) {
|
|
135
|
+
const lines = balances
|
|
136
|
+
.filter((a) => a.number >= range[0] && a.number <= range[1])
|
|
137
|
+
.map((a) => ({
|
|
138
|
+
account: a.number,
|
|
139
|
+
description: a.description,
|
|
140
|
+
balance: a.closingBalance,
|
|
141
|
+
}));
|
|
142
|
+
if (lines.length === 0)
|
|
143
|
+
return null;
|
|
144
|
+
return {
|
|
145
|
+
label,
|
|
146
|
+
lines,
|
|
147
|
+
total: lines.reduce((sum, l) => sum + l.balance, 0),
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
export async function getIncomeStatement(params = {}) {
|
|
151
|
+
const balances = await computeBalances(params.financialYear, params.fromDate, params.toDate);
|
|
152
|
+
const sections = [];
|
|
153
|
+
for (const group of INCOME_STATEMENT_GROUPS) {
|
|
154
|
+
const section = buildSection(balances, group.range, group.label);
|
|
155
|
+
if (section)
|
|
156
|
+
sections.push(section);
|
|
157
|
+
}
|
|
158
|
+
const netResult = sections.reduce((sum, s) => sum + s.total, 0);
|
|
159
|
+
return {
|
|
160
|
+
type: 'income-statement',
|
|
161
|
+
financialYear: params.financialYear,
|
|
162
|
+
period: params.fromDate || params.toDate
|
|
163
|
+
? { from: params.fromDate ?? '', to: params.toDate ?? '' }
|
|
164
|
+
: undefined,
|
|
165
|
+
sections,
|
|
166
|
+
netResult,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
export async function getBalanceSheet(params = {}) {
|
|
170
|
+
const balances = await computeBalanceSheetBalances(params.financialYear, params.toDate);
|
|
171
|
+
const assets = [];
|
|
172
|
+
for (const group of BALANCE_SHEET_ASSET_GROUPS) {
|
|
173
|
+
const section = buildSection(balances, group.range, group.label);
|
|
174
|
+
if (section)
|
|
175
|
+
assets.push(section);
|
|
176
|
+
}
|
|
177
|
+
const liabilitiesAndEquity = [];
|
|
178
|
+
for (const group of BALANCE_SHEET_LIABILITY_GROUPS) {
|
|
179
|
+
const section = buildSection(balances, group.range, group.label);
|
|
180
|
+
if (section)
|
|
181
|
+
liabilitiesAndEquity.push(section);
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
type: 'balance-sheet',
|
|
185
|
+
financialYear: params.financialYear,
|
|
186
|
+
asOfDate: params.toDate,
|
|
187
|
+
assets,
|
|
188
|
+
totalAssets: assets.reduce((sum, s) => sum + s.total, 0),
|
|
189
|
+
liabilitiesAndEquity,
|
|
190
|
+
totalLiabilitiesAndEquity: liabilitiesAndEquity.reduce((sum, s) => sum + s.total, 0),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=financial-reports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"financial-reports.js","sourceRoot":"","sources":["../../src/operations/financial-reports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
interface InvoicesResponse {
|
|
2
|
+
Invoices: Record<string, unknown>[];
|
|
3
|
+
MetaInformation?: {
|
|
4
|
+
'@TotalResources': number;
|
|
5
|
+
'@TotalPages': number;
|
|
6
|
+
'@CurrentPage': number;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export interface ListInvoicesParams {
|
|
10
|
+
filter?: string;
|
|
11
|
+
customerNumber?: string;
|
|
12
|
+
fromDate?: string;
|
|
13
|
+
toDate?: string;
|
|
14
|
+
page?: number;
|
|
15
|
+
limit?: number;
|
|
16
|
+
all?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function listInvoices(params?: ListInvoicesParams): Promise<InvoicesResponse>;
|
|
19
|
+
export declare function getInvoice(documentNumber: string): Promise<Record<string, unknown>>;
|
|
20
|
+
export declare function createInvoice(params: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
21
|
+
export declare function updateInvoice(documentNumber: string, fields: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
22
|
+
export type SendMethod = 'email' | 'print' | 'einvoice';
|
|
23
|
+
export interface SendEmailOptions {
|
|
24
|
+
subject?: string;
|
|
25
|
+
body?: string;
|
|
26
|
+
bcc?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function sendInvoice(documentNumber: string, method?: SendMethod, emailOptions?: SendEmailOptions): Promise<Record<string, unknown>>;
|
|
29
|
+
export declare function bookkeepInvoice(documentNumber: string): Promise<Record<string, unknown>>;
|
|
30
|
+
export declare function creditInvoice(documentNumber: string): Promise<Record<string, unknown>>;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=invoices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoices.d.ts","sourceRoot":"","sources":["../../src/operations/invoices.ts"],"names":[],"mappings":"AAOA,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,eAAe,CAAC,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;CAChG;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,YAAY,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuB7F;AAED,wBAAsB,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAGzF;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAMlC;AAED,wBAAsB,aAAa,CACjC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAUlC;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,WAAW,CAC/B,cAAc,EAAE,MAAM,EACtB,MAAM,GAAE,UAAoB,EAC5B,YAAY,CAAC,EAAE,gBAAgB,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAqBlC;AAED,wBAAsB,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAQ9F;AAED,wBAAsB,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAQ5F"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { fortnoxRequest, fetchAllPages } from '../fortnox-client.js';
|
|
2
|
+
import { documentSegment } from '../identifiers.js';
|
|
3
|
+
export async function listInvoices(params = {}) {
|
|
4
|
+
const queryParams = {
|
|
5
|
+
filter: params.filter,
|
|
6
|
+
customernumber: params.customerNumber,
|
|
7
|
+
fromdate: params.fromDate,
|
|
8
|
+
todate: params.toDate,
|
|
9
|
+
};
|
|
10
|
+
if (params.all) {
|
|
11
|
+
const { items, totalResources } = await fetchAllPages('invoices', 'Invoices', queryParams);
|
|
12
|
+
return {
|
|
13
|
+
Invoices: items,
|
|
14
|
+
MetaInformation: { '@TotalResources': totalResources, '@TotalPages': 1, '@CurrentPage': 1 },
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
return fortnoxRequest('invoices', {
|
|
18
|
+
params: { ...queryParams, page: params.page || 1, limit: params.limit || 100 },
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
export async function getInvoice(documentNumber) {
|
|
22
|
+
const data = await fortnoxRequest(`invoices/${documentSegment(documentNumber)}`);
|
|
23
|
+
return data.Invoice;
|
|
24
|
+
}
|
|
25
|
+
export async function createInvoice(params) {
|
|
26
|
+
const data = await fortnoxRequest('invoices', {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
body: { Invoice: params },
|
|
29
|
+
});
|
|
30
|
+
return data.Invoice;
|
|
31
|
+
}
|
|
32
|
+
export async function updateInvoice(documentNumber, fields) {
|
|
33
|
+
const { documentNumber: _, ...body } = fields;
|
|
34
|
+
const data = await fortnoxRequest(`invoices/${documentSegment(documentNumber)}`, {
|
|
35
|
+
method: 'PUT',
|
|
36
|
+
body: { Invoice: body },
|
|
37
|
+
});
|
|
38
|
+
return data.Invoice;
|
|
39
|
+
}
|
|
40
|
+
export async function sendInvoice(documentNumber, method = 'email', emailOptions) {
|
|
41
|
+
const documentId = documentSegment(documentNumber);
|
|
42
|
+
// Update EmailInformation before sending if any email options are provided
|
|
43
|
+
if (emailOptions && (emailOptions.subject || emailOptions.body || emailOptions.bcc)) {
|
|
44
|
+
const current = await fortnoxRequest(`invoices/${documentId}`);
|
|
45
|
+
const existing = current.Invoice?.EmailInformation || {};
|
|
46
|
+
const emailInfo = { ...existing };
|
|
47
|
+
if (emailOptions.subject)
|
|
48
|
+
emailInfo.EmailSubject = emailOptions.subject;
|
|
49
|
+
if (emailOptions.body)
|
|
50
|
+
emailInfo.EmailBody = emailOptions.body;
|
|
51
|
+
if (emailOptions.bcc)
|
|
52
|
+
emailInfo.EmailAddressBCC = emailOptions.bcc;
|
|
53
|
+
await fortnoxRequest(`invoices/${documentId}`, {
|
|
54
|
+
method: 'PUT',
|
|
55
|
+
body: { Invoice: { EmailInformation: emailInfo } },
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
const endpointSuffix = method === 'email' ? 'email' : method === 'einvoice' ? 'einvoice' : 'print';
|
|
59
|
+
const data = await fortnoxRequest(`invoices/${documentId}/${endpointSuffix}`);
|
|
60
|
+
return data?.Invoice || {};
|
|
61
|
+
}
|
|
62
|
+
export async function bookkeepInvoice(documentNumber) {
|
|
63
|
+
const data = await fortnoxRequest(`invoices/${documentSegment(documentNumber)}/bookkeep`, {
|
|
64
|
+
method: 'PUT',
|
|
65
|
+
});
|
|
66
|
+
return data?.Invoice || {};
|
|
67
|
+
}
|
|
68
|
+
export async function creditInvoice(documentNumber) {
|
|
69
|
+
const data = await fortnoxRequest(`invoices/${documentSegment(documentNumber)}/credit`, {
|
|
70
|
+
method: 'PUT',
|
|
71
|
+
});
|
|
72
|
+
return data?.Invoice || {};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=invoices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoices.js","sourceRoot":"","sources":["../../src/operations/invoices.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
interface SupplierInvoicesResponse {
|
|
2
|
+
SupplierInvoices: Record<string, unknown>[];
|
|
3
|
+
MetaInformation?: {
|
|
4
|
+
'@TotalResources': number;
|
|
5
|
+
'@TotalPages': number;
|
|
6
|
+
'@CurrentPage': number;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export interface ListSupplierInvoicesParams {
|
|
10
|
+
filter?: string;
|
|
11
|
+
supplierNumber?: string;
|
|
12
|
+
fromDate?: string;
|
|
13
|
+
toDate?: string;
|
|
14
|
+
page?: number;
|
|
15
|
+
limit?: number;
|
|
16
|
+
all?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function listSupplierInvoices(params?: ListSupplierInvoicesParams): Promise<SupplierInvoicesResponse>;
|
|
19
|
+
export declare function getSupplierInvoice(givenNumber: string): Promise<Record<string, unknown>>;
|
|
20
|
+
export declare function createSupplierInvoice(params: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
21
|
+
export declare function bookkeepSupplierInvoice(givenNumber: string): Promise<Record<string, unknown>>;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=supplier-invoices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supplier-invoices.d.ts","sourceRoot":"","sources":["../../src/operations/supplier-invoices.ts"],"names":[],"mappings":"AAMA,UAAU,wBAAwB;IAChC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC5C,eAAe,CAAC,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;CAChG;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,oBAAoB,CACxC,MAAM,GAAE,0BAA+B,GACtC,OAAO,CAAC,wBAAwB,CAAC,CAwBnC;AAED,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAK9F;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAMlC;AAED,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAMlC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { fortnoxRequest, fetchAllPages } from '../fortnox-client.js';
|
|
2
|
+
export async function listSupplierInvoices(params = {}) {
|
|
3
|
+
const subpath = params.filter ? `?filter=${encodeURIComponent(params.filter)}` : '';
|
|
4
|
+
const endpoint = `supplierinvoices${subpath}`;
|
|
5
|
+
const queryParams = {
|
|
6
|
+
...(params.supplierNumber ? { suppliernumber: params.supplierNumber } : {}),
|
|
7
|
+
...(params.fromDate ? { fromdate: params.fromDate } : {}),
|
|
8
|
+
...(params.toDate ? { todate: params.toDate } : {}),
|
|
9
|
+
};
|
|
10
|
+
if (params.all) {
|
|
11
|
+
const { items, totalResources } = await fetchAllPages(endpoint, 'SupplierInvoices', queryParams);
|
|
12
|
+
return {
|
|
13
|
+
SupplierInvoices: items,
|
|
14
|
+
MetaInformation: { '@TotalResources': totalResources, '@TotalPages': 1, '@CurrentPage': 1 },
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
return fortnoxRequest(endpoint, {
|
|
18
|
+
params: { ...queryParams, page: params.page || 1, limit: params.limit || 100 },
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
export async function getSupplierInvoice(givenNumber) {
|
|
22
|
+
const data = await fortnoxRequest(`supplierinvoices/${encodeURIComponent(givenNumber)}`);
|
|
23
|
+
return data.SupplierInvoice;
|
|
24
|
+
}
|
|
25
|
+
export async function createSupplierInvoice(params) {
|
|
26
|
+
const data = await fortnoxRequest('supplierinvoices', {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
body: { SupplierInvoice: params },
|
|
29
|
+
});
|
|
30
|
+
return data.SupplierInvoice;
|
|
31
|
+
}
|
|
32
|
+
export async function bookkeepSupplierInvoice(givenNumber) {
|
|
33
|
+
const data = await fortnoxRequest(`supplierinvoices/${encodeURIComponent(givenNumber)}/bookkeep`, { method: 'PUT' });
|
|
34
|
+
return data.SupplierInvoice;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=supplier-invoices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supplier-invoices.js","sourceRoot":"","sources":["../../src/operations/supplier-invoices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAqBrE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,SAAqC,EAAE;IAEvC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,MAAM,QAAQ,GAAG,mBAAmB,OAAO,EAAE,CAAC;IAC9C,MAAM,WAAW,GAAgD;QAC/D,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,CAAC;IAEF,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,aAAa,CACnD,QAAQ,EACR,kBAAkB,EAClB,WAAW,CACZ,CAAC;QACF,OAAO;YACL,gBAAgB,EAAE,KAAK;YACvB,eAAe,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE;SAC5F,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CAA2B,QAAQ,EAAE;QACxD,MAAM,EAAE,EAAE,GAAG,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE;KAC/E,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,WAAmB;IAC1D,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,oBAAoB,kBAAkB,CAAC,WAAW,CAAC,EAAE,CACtD,CAAC;IACF,OAAO,IAAI,CAAC,eAAe,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAA+B;IAE/B,MAAM,IAAI,GAAG,MAAM,cAAc,CAA0B,kBAAkB,EAAE;QAC7E,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE;KAClC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,eAAe,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,WAAmB;IAEnB,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,oBAAoB,kBAAkB,CAAC,WAAW,CAAC,WAAW,EAC9D,EAAE,MAAM,EAAE,KAAK,EAAE,CAClB,CAAC;IACF,OAAO,IAAI,CAAC,eAAe,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
interface SuppliersResponse {
|
|
2
|
+
Suppliers: Record<string, unknown>[];
|
|
3
|
+
MetaInformation?: {
|
|
4
|
+
'@TotalResources': number;
|
|
5
|
+
'@TotalPages': number;
|
|
6
|
+
'@CurrentPage': number;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export interface ListSuppliersParams {
|
|
10
|
+
search?: string;
|
|
11
|
+
page?: number;
|
|
12
|
+
limit?: number;
|
|
13
|
+
all?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function listSuppliers(params?: ListSuppliersParams): Promise<SuppliersResponse>;
|
|
16
|
+
export declare function getSupplier(supplierNumber: string): Promise<Record<string, unknown>>;
|
|
17
|
+
export declare function createSupplier(params: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
18
|
+
export declare function updateSupplier(supplierNumber: string, fields: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=suppliers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suppliers.d.ts","sourceRoot":"","sources":["../../src/operations/suppliers.ts"],"names":[],"mappings":"AAMA,UAAU,iBAAiB;IACzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACrC,eAAe,CAAC,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;CAChG;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,aAAa,CAAC,MAAM,GAAE,mBAAwB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoBhG;AAED,wBAAsB,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAK1F;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAMlC;AAED,wBAAsB,cAAc,CAClC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAUlC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { fortnoxRequest, fetchAllPages } from '../fortnox-client.js';
|
|
2
|
+
export async function listSuppliers(params = {}) {
|
|
3
|
+
const queryParams = {
|
|
4
|
+
...(params.search ? { name: params.search } : {}),
|
|
5
|
+
};
|
|
6
|
+
if (params.all) {
|
|
7
|
+
const { items, totalResources } = await fetchAllPages('suppliers', 'Suppliers', queryParams);
|
|
8
|
+
return {
|
|
9
|
+
Suppliers: items,
|
|
10
|
+
MetaInformation: { '@TotalResources': totalResources, '@TotalPages': 1, '@CurrentPage': 1 },
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
return fortnoxRequest('suppliers', {
|
|
14
|
+
params: { ...queryParams, page: params.page || 1, limit: params.limit || 100 },
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
export async function getSupplier(supplierNumber) {
|
|
18
|
+
const data = await fortnoxRequest(`suppliers/${encodeURIComponent(supplierNumber)}`);
|
|
19
|
+
return data.Supplier;
|
|
20
|
+
}
|
|
21
|
+
export async function createSupplier(params) {
|
|
22
|
+
const data = await fortnoxRequest('suppliers', {
|
|
23
|
+
method: 'POST',
|
|
24
|
+
body: { Supplier: params },
|
|
25
|
+
});
|
|
26
|
+
return data.Supplier;
|
|
27
|
+
}
|
|
28
|
+
export async function updateSupplier(supplierNumber, fields) {
|
|
29
|
+
const { SupplierNumber: _, ...body } = fields;
|
|
30
|
+
const data = await fortnoxRequest(`suppliers/${encodeURIComponent(supplierNumber)}`, {
|
|
31
|
+
method: 'PUT',
|
|
32
|
+
body: { Supplier: body },
|
|
33
|
+
});
|
|
34
|
+
return data.Supplier;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=suppliers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suppliers.js","sourceRoot":"","sources":["../../src/operations/suppliers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAkBrE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAA8B,EAAE;IAClE,MAAM,WAAW,GAAgD;QAC/D,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAC;IAEF,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,aAAa,CACnD,WAAW,EACX,WAAW,EACX,WAAW,CACZ,CAAC;QACF,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,eAAe,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE;SAC5F,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CAAoB,WAAW,EAAE;QACpD,MAAM,EAAE,EAAE,GAAG,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE;KAC/E,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,cAAsB;IACtD,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,aAAa,kBAAkB,CAAC,cAAc,CAAC,EAAE,CAClD,CAAC;IACF,OAAO,IAAI,CAAC,QAAQ,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAA+B;IAE/B,MAAM,IAAI,GAAG,MAAM,cAAc,CAAmB,WAAW,EAAE;QAC/D,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;KAC3B,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,QAAQ,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,cAAsB,EACtB,MAA+B;IAE/B,MAAM,EAAE,cAAc,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAC9C,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,aAAa,kBAAkB,CAAC,cAAc,CAAC,EAAE,EACjD;QACE,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;KACzB,CACF,CAAC;IACF,OAAO,IAAI,CAAC,QAAQ,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface GenerateTaxReportParams {
|
|
2
|
+
fromDate: string;
|
|
3
|
+
toDate: string;
|
|
4
|
+
financialYear?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface TaxReport {
|
|
7
|
+
period: {
|
|
8
|
+
from: string;
|
|
9
|
+
to: string;
|
|
10
|
+
};
|
|
11
|
+
vatAccounts: Record<number, {
|
|
12
|
+
debit: number;
|
|
13
|
+
credit: number;
|
|
14
|
+
description: string;
|
|
15
|
+
}>;
|
|
16
|
+
accountBalances: {
|
|
17
|
+
account: number;
|
|
18
|
+
description: string;
|
|
19
|
+
balance: number;
|
|
20
|
+
}[];
|
|
21
|
+
summary: {
|
|
22
|
+
note: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export declare function generateTaxReport(params: GenerateTaxReportParams): Promise<TaxReport>;
|
|
26
|
+
//# sourceMappingURL=tax.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tax.d.ts","sourceRoot":"","sources":["../../src/operations/tax.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpF,eAAe,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7E,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3B;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,SAAS,CAAC,CAgD3F"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { fortnoxRequest } from '../fortnox-client.js';
|
|
2
|
+
const VAT_ACCOUNT_NUMBERS = [2610, 2620, 2630, 2640, 2641, 2645, 2650];
|
|
3
|
+
export async function generateTaxReport(params) {
|
|
4
|
+
const data = await fortnoxRequest('accounts', {
|
|
5
|
+
params: {
|
|
6
|
+
financialyear: params.financialYear,
|
|
7
|
+
},
|
|
8
|
+
});
|
|
9
|
+
const vatAccounts = data.Accounts.filter((a) => VAT_ACCOUNT_NUMBERS.includes(a.Number));
|
|
10
|
+
const voucherData = await fortnoxRequest('vouchers', {
|
|
11
|
+
params: {
|
|
12
|
+
fromdate: params.fromDate,
|
|
13
|
+
todate: params.toDate,
|
|
14
|
+
financialyear: params.financialYear,
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
const vatSummary = {};
|
|
18
|
+
for (const voucher of voucherData.Vouchers || []) {
|
|
19
|
+
for (const row of voucher.VoucherRows || []) {
|
|
20
|
+
if (VAT_ACCOUNT_NUMBERS.includes(row.Account)) {
|
|
21
|
+
if (!vatSummary[row.Account]) {
|
|
22
|
+
vatSummary[row.Account] = { debit: 0, credit: 0, description: '' };
|
|
23
|
+
}
|
|
24
|
+
vatSummary[row.Account].debit += row.Debit || 0;
|
|
25
|
+
vatSummary[row.Account].credit += row.Credit || 0;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
for (const account of vatAccounts) {
|
|
30
|
+
if (vatSummary[account.Number]) {
|
|
31
|
+
vatSummary[account.Number].description = account.Description;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
period: { from: params.fromDate, to: params.toDate },
|
|
36
|
+
vatAccounts: vatSummary,
|
|
37
|
+
accountBalances: vatAccounts.map((a) => ({
|
|
38
|
+
account: a.Number,
|
|
39
|
+
description: a.Description,
|
|
40
|
+
balance: a.BalanceCarriedForward,
|
|
41
|
+
})),
|
|
42
|
+
summary: {
|
|
43
|
+
note: 'Informativ sammanstallning. Kontrollera beloppen mot Fortnox momsrapport och bokforingen innan deklaration.',
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=tax.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tax.js","sourceRoot":"","sources":["../../src/operations/tax.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAyBtD,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAevE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAA+B;IACrE,MAAM,IAAI,GAAG,MAAM,cAAc,CAAmB,UAAU,EAAE;QAC9D,MAAM,EAAE;YACN,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC;KACF,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAExF,MAAM,WAAW,GAAG,MAAM,cAAc,CAAmB,UAAU,EAAE;QACrE,MAAM,EAAE;YACN,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC;KACF,CAAC,CAAC;IAEH,MAAM,UAAU,GAA2E,EAAE,CAAC;IAC9F,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACjD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;YAC5C,IAAI,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC7B,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;gBACrE,CAAC;gBACD,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;gBAChD,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QAClC,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE;QACpD,WAAW,EAAE,UAAU;QACvB,eAAe,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvC,OAAO,EAAE,CAAC,CAAC,MAAM;YACjB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,OAAO,EAAE,CAAC,CAAC,qBAAqB;SACjC,CAAC,CAAC;QACH,OAAO,EAAE;YACP,IAAI,EAAE,6GAA6G;SACpH;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
interface VouchersResponse {
|
|
2
|
+
Vouchers: Record<string, unknown>[];
|
|
3
|
+
MetaInformation?: {
|
|
4
|
+
'@TotalResources': number;
|
|
5
|
+
'@TotalPages': number;
|
|
6
|
+
'@CurrentPage': number;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export interface ListVouchersParams {
|
|
10
|
+
financialYear?: number;
|
|
11
|
+
series?: string;
|
|
12
|
+
fromDate?: string;
|
|
13
|
+
toDate?: string;
|
|
14
|
+
page?: number;
|
|
15
|
+
limit?: number;
|
|
16
|
+
all?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function listVouchers(params?: ListVouchersParams): Promise<VouchersResponse>;
|
|
19
|
+
export declare function getVoucher(series: string, voucherNumber: string, financialYear?: number): Promise<Record<string, unknown>>;
|
|
20
|
+
export declare function createVoucher(params: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=vouchers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vouchers.d.ts","sourceRoot":"","sources":["../../src/operations/vouchers.ts"],"names":[],"mappings":"AAOA,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,eAAe,CAAC,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;CAChG;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,YAAY,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwB7F;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAQlC;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAWlC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { fortnoxRequest, fetchAllPages } from '../fortnox-client.js';
|
|
2
|
+
import { voucherSeriesSegment } from '../identifiers.js';
|
|
3
|
+
export async function listVouchers(params = {}) {
|
|
4
|
+
const subpath = params.series ? `sublist/${voucherSeriesSegment(params.series)}` : '';
|
|
5
|
+
const endpoint = `vouchers/${subpath}`;
|
|
6
|
+
const queryParams = {
|
|
7
|
+
financialyear: params.financialYear,
|
|
8
|
+
fromdate: params.fromDate,
|
|
9
|
+
todate: params.toDate,
|
|
10
|
+
};
|
|
11
|
+
if (params.all) {
|
|
12
|
+
const { items, totalResources } = await fetchAllPages(endpoint, 'Vouchers', queryParams);
|
|
13
|
+
return {
|
|
14
|
+
Vouchers: items,
|
|
15
|
+
MetaInformation: { '@TotalResources': totalResources, '@TotalPages': 1, '@CurrentPage': 1 },
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
return fortnoxRequest(endpoint, {
|
|
19
|
+
params: { ...queryParams, page: params.page || 1, limit: params.limit || 100 },
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
export async function getVoucher(series, voucherNumber, financialYear) {
|
|
23
|
+
const params = {};
|
|
24
|
+
if (financialYear)
|
|
25
|
+
params.financialyear = financialYear;
|
|
26
|
+
const data = await fortnoxRequest(`vouchers/${voucherSeriesSegment(series)}/${encodeURIComponent(voucherNumber)}`, { params });
|
|
27
|
+
return data.Voucher;
|
|
28
|
+
}
|
|
29
|
+
export async function createVoucher(params) {
|
|
30
|
+
const data = await fortnoxRequest('vouchers', {
|
|
31
|
+
method: 'POST',
|
|
32
|
+
body: {
|
|
33
|
+
Voucher: {
|
|
34
|
+
...params,
|
|
35
|
+
VoucherSeries: params.VoucherSeries || 'A',
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
return data.Voucher;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=vouchers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vouchers.js","sourceRoot":"","sources":["../../src/operations/vouchers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAqBzD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAA6B,EAAE;IAChE,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,MAAM,QAAQ,GAAG,YAAY,OAAO,EAAE,CAAC;IACvC,MAAM,WAAW,GAAgD;QAC/D,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;IAEF,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,aAAa,CACnD,QAAQ,EACR,UAAU,EACV,WAAW,CACZ,CAAC;QACF,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,eAAe,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE;SAC5F,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CAAmB,QAAQ,EAAE;QAChD,MAAM,EAAE,EAAE,GAAG,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE;KAC/E,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,aAAqB,EACrB,aAAsB;IAEtB,MAAM,MAAM,GAAgD,EAAE,CAAC;IAC/D,IAAI,aAAa;QAAE,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC;IACxD,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,YAAY,oBAAoB,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,aAAa,CAAC,EAAE,EAC/E,EAAE,MAAM,EAAE,CACX,CAAC;IACF,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAA+B;IAE/B,MAAM,IAAI,GAAG,MAAM,cAAc,CAAkB,UAAU,EAAE;QAC7D,MAAM,EAAE,MAAM;QACd,IAAI,EAAE;YACJ,OAAO,EAAE;gBACP,GAAG,MAAM;gBACT,aAAa,EAAG,MAAM,CAAC,aAAwB,IAAI,GAAG;aACvD;SACF;KACF,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,CAAC"}
|