noxctl 0.7.4 → 0.8.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 +39 -2
- package/dist/auth.d.ts +17 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +122 -15
- package/dist/auth.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +45 -28
- package/dist/cli.js.map +1 -1
- package/dist/credentials-store.d.ts +3 -0
- package/dist/credentials-store.d.ts.map +1 -1
- package/dist/credentials-store.js +54 -10
- package/dist/credentials-store.js.map +1 -1
- package/dist/embedded.d.ts +15 -0
- package/dist/embedded.d.ts.map +1 -0
- package/dist/embedded.js +11 -0
- package/dist/embedded.js.map +1 -0
- package/dist/fortnox-client.d.ts +34 -25
- package/dist/fortnox-client.d.ts.map +1 -1
- package/dist/fortnox-client.js +130 -50
- package/dist/fortnox-client.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +50 -35
- package/dist/index.js.map +1 -1
- package/dist/keychain-target.d.ts +3 -0
- package/dist/keychain-target.d.ts.map +1 -1
- package/dist/keychain-target.js +28 -7
- package/dist/keychain-target.js.map +1 -1
- package/dist/operations/absencetransactions.d.ts +9 -6
- package/dist/operations/absencetransactions.d.ts.map +1 -1
- package/dist/operations/absencetransactions.js +42 -33
- package/dist/operations/absencetransactions.js.map +1 -1
- package/dist/operations/accounts.d.ts +6 -3
- package/dist/operations/accounts.d.ts.map +1 -1
- package/dist/operations/accounts.js +28 -24
- package/dist/operations/accounts.js.map +1 -1
- package/dist/operations/analytics.d.ts +35 -0
- package/dist/operations/analytics.d.ts.map +1 -1
- package/dist/operations/analytics.js +59 -35
- package/dist/operations/analytics.js.map +1 -1
- package/dist/operations/articles.d.ts +9 -6
- package/dist/operations/articles.d.ts.map +1 -1
- package/dist/operations/articles.js +36 -32
- package/dist/operations/articles.js.map +1 -1
- package/dist/operations/attendancetransactions.d.ts +9 -6
- package/dist/operations/attendancetransactions.d.ts.map +1 -1
- package/dist/operations/attendancetransactions.js +45 -36
- package/dist/operations/attendancetransactions.js.map +1 -1
- package/dist/operations/company.d.ts +5 -1
- package/dist/operations/company.d.ts.map +1 -1
- package/dist/operations/company.js +8 -4
- package/dist/operations/company.js.map +1 -1
- package/dist/operations/contracts.d.ts +12 -9
- package/dist/operations/contracts.d.ts.map +1 -1
- package/dist/operations/contracts.js +59 -47
- package/dist/operations/contracts.js.map +1 -1
- package/dist/operations/costcenters.d.ts +10 -7
- package/dist/operations/costcenters.d.ts.map +1 -1
- package/dist/operations/costcenters.js +39 -35
- package/dist/operations/costcenters.js.map +1 -1
- package/dist/operations/customers.d.ts +9 -6
- package/dist/operations/customers.d.ts.map +1 -1
- package/dist/operations/customers.js +46 -42
- package/dist/operations/customers.js.map +1 -1
- package/dist/operations/employees.d.ts +9 -6
- package/dist/operations/employees.d.ts.map +1 -1
- package/dist/operations/employees.js +35 -31
- package/dist/operations/employees.js.map +1 -1
- package/dist/operations/financial-reports.d.ts +7 -2
- package/dist/operations/financial-reports.d.ts.map +1 -1
- package/dist/operations/financial-reports.js +169 -165
- package/dist/operations/financial-reports.js.map +1 -1
- package/dist/operations/financial-years.d.ts +8 -5
- package/dist/operations/financial-years.d.ts.map +1 -1
- package/dist/operations/financial-years.js +33 -29
- package/dist/operations/financial-years.js.map +1 -1
- package/dist/operations/index.d.ts +301 -0
- package/dist/operations/index.d.ts.map +1 -0
- package/dist/operations/index.js +64 -0
- package/dist/operations/index.js.map +1 -0
- package/dist/operations/invoice-payments.d.ts +10 -7
- package/dist/operations/invoice-payments.d.ts.map +1 -1
- package/dist/operations/invoice-payments.js +45 -35
- package/dist/operations/invoice-payments.js.map +1 -1
- package/dist/operations/invoices.d.ts +14 -30
- package/dist/operations/invoices.d.ts.map +1 -1
- package/dist/operations/invoices.js +131 -113
- package/dist/operations/invoices.js.map +1 -1
- package/dist/operations/offers.d.ts +11 -8
- package/dist/operations/offers.d.ts.map +1 -1
- package/dist/operations/offers.js +54 -43
- package/dist/operations/offers.js.map +1 -1
- package/dist/operations/orders.d.ts +10 -7
- package/dist/operations/orders.d.ts.map +1 -1
- package/dist/operations/orders.js +43 -39
- package/dist/operations/orders.js.map +1 -1
- package/dist/operations/pricelists.d.ts +16 -10
- package/dist/operations/pricelists.d.ts.map +1 -1
- package/dist/operations/pricelists.js +56 -48
- package/dist/operations/pricelists.js.map +1 -1
- package/dist/operations/projects.d.ts +9 -6
- package/dist/operations/projects.d.ts.map +1 -1
- package/dist/operations/projects.js +34 -30
- package/dist/operations/projects.js.map +1 -1
- package/dist/operations/recurrings.d.ts +14 -10
- package/dist/operations/recurrings.d.ts.map +1 -1
- package/dist/operations/recurrings.js +74 -59
- package/dist/operations/recurrings.js.map +1 -1
- package/dist/operations/salarytransactions.d.ts +9 -6
- package/dist/operations/salarytransactions.d.ts.map +1 -1
- package/dist/operations/salarytransactions.js +41 -32
- package/dist/operations/salarytransactions.js.map +1 -1
- package/dist/operations/scheduletimes.d.ts +7 -3
- package/dist/operations/scheduletimes.d.ts.map +1 -1
- package/dist/operations/scheduletimes.js +26 -22
- package/dist/operations/scheduletimes.js.map +1 -1
- package/dist/operations/supplier-invoice-payments.d.ts +9 -6
- package/dist/operations/supplier-invoice-payments.d.ts.map +1 -1
- package/dist/operations/supplier-invoice-payments.js +38 -29
- package/dist/operations/supplier-invoice-payments.js.map +1 -1
- package/dist/operations/supplier-invoices.d.ts +9 -6
- package/dist/operations/supplier-invoices.d.ts.map +1 -1
- package/dist/operations/supplier-invoices.js +41 -32
- package/dist/operations/supplier-invoices.js.map +1 -1
- package/dist/operations/suppliers.d.ts +9 -6
- package/dist/operations/suppliers.d.ts.map +1 -1
- package/dist/operations/suppliers.js +36 -32
- package/dist/operations/suppliers.js.map +1 -1
- package/dist/operations/tax.d.ts +5 -1
- package/dist/operations/tax.d.ts.map +1 -1
- package/dist/operations/tax.js +43 -39
- package/dist/operations/tax.js.map +1 -1
- package/dist/operations/taxreductions.d.ts +8 -5
- package/dist/operations/taxreductions.d.ts.map +1 -1
- package/dist/operations/taxreductions.js +28 -24
- package/dist/operations/taxreductions.js.map +1 -1
- package/dist/operations/vouchers.d.ts +11 -8
- package/dist/operations/vouchers.d.ts.map +1 -1
- package/dist/operations/vouchers.js +137 -122
- package/dist/operations/vouchers.js.map +1 -1
- package/dist/schema-audit-mappings.d.ts +9 -0
- package/dist/schema-audit-mappings.d.ts.map +1 -0
- package/dist/schema-audit-mappings.js +45 -0
- package/dist/schema-audit-mappings.js.map +1 -0
- package/dist/schema-audit.d.ts +45 -0
- package/dist/schema-audit.d.ts.map +1 -0
- package/dist/schema-audit.js +132 -0
- package/dist/schema-audit.js.map +1 -0
- package/dist/strict-mcp-server.d.ts +17 -0
- package/dist/strict-mcp-server.d.ts.map +1 -0
- package/dist/strict-mcp-server.js +35 -0
- package/dist/strict-mcp-server.js.map +1 -0
- package/dist/tools/absencetransactions.d.ts +2 -1
- package/dist/tools/absencetransactions.d.ts.map +1 -1
- package/dist/tools/absencetransactions.js +3 -2
- package/dist/tools/absencetransactions.js.map +1 -1
- package/dist/tools/analytics.d.ts +2 -1
- package/dist/tools/analytics.d.ts.map +1 -1
- package/dist/tools/analytics.js +3 -2
- package/dist/tools/analytics.js.map +1 -1
- package/dist/tools/articles.d.ts +2 -1
- package/dist/tools/articles.d.ts.map +1 -1
- package/dist/tools/articles.js +3 -2
- package/dist/tools/articles.js.map +1 -1
- package/dist/tools/attendancetransactions.d.ts +2 -1
- package/dist/tools/attendancetransactions.d.ts.map +1 -1
- package/dist/tools/attendancetransactions.js +3 -2
- package/dist/tools/attendancetransactions.js.map +1 -1
- package/dist/tools/bookkeeping.d.ts +2 -1
- package/dist/tools/bookkeeping.d.ts.map +1 -1
- package/dist/tools/bookkeeping.js +4 -4
- package/dist/tools/bookkeeping.js.map +1 -1
- package/dist/tools/company.d.ts +2 -1
- package/dist/tools/company.d.ts.map +1 -1
- package/dist/tools/company.js +3 -2
- package/dist/tools/company.js.map +1 -1
- package/dist/tools/contracts.d.ts +2 -1
- package/dist/tools/contracts.d.ts.map +1 -1
- package/dist/tools/contracts.js +3 -2
- package/dist/tools/contracts.js.map +1 -1
- package/dist/tools/costcenters.d.ts +2 -1
- package/dist/tools/costcenters.d.ts.map +1 -1
- package/dist/tools/costcenters.js +3 -2
- package/dist/tools/costcenters.js.map +1 -1
- package/dist/tools/customers.d.ts +2 -1
- package/dist/tools/customers.d.ts.map +1 -1
- package/dist/tools/customers.js +3 -2
- package/dist/tools/customers.js.map +1 -1
- package/dist/tools/employees.d.ts +2 -1
- package/dist/tools/employees.d.ts.map +1 -1
- package/dist/tools/employees.js +3 -2
- package/dist/tools/employees.js.map +1 -1
- package/dist/tools/financial-reports.d.ts +2 -1
- package/dist/tools/financial-reports.d.ts.map +1 -1
- package/dist/tools/financial-reports.js +3 -2
- package/dist/tools/financial-reports.js.map +1 -1
- package/dist/tools/financial-years.d.ts +2 -1
- package/dist/tools/financial-years.d.ts.map +1 -1
- package/dist/tools/financial-years.js +3 -2
- package/dist/tools/financial-years.js.map +1 -1
- package/dist/tools/invoice-payments.d.ts +2 -1
- package/dist/tools/invoice-payments.d.ts.map +1 -1
- package/dist/tools/invoice-payments.js +3 -2
- package/dist/tools/invoice-payments.js.map +1 -1
- package/dist/tools/invoices.d.ts +2 -1
- package/dist/tools/invoices.d.ts.map +1 -1
- package/dist/tools/invoices.js +58 -19
- package/dist/tools/invoices.js.map +1 -1
- package/dist/tools/offers.d.ts +2 -1
- package/dist/tools/offers.d.ts.map +1 -1
- package/dist/tools/offers.js +50 -19
- package/dist/tools/offers.js.map +1 -1
- package/dist/tools/orders.d.ts +2 -1
- package/dist/tools/orders.d.ts.map +1 -1
- package/dist/tools/orders.js +58 -18
- package/dist/tools/orders.js.map +1 -1
- package/dist/tools/pricelists.d.ts +2 -1
- package/dist/tools/pricelists.d.ts.map +1 -1
- package/dist/tools/pricelists.js +3 -2
- package/dist/tools/pricelists.js.map +1 -1
- package/dist/tools/projects.d.ts +2 -1
- package/dist/tools/projects.d.ts.map +1 -1
- package/dist/tools/projects.js +3 -2
- package/dist/tools/projects.js.map +1 -1
- package/dist/tools/recurrings.d.ts +2 -1
- package/dist/tools/recurrings.d.ts.map +1 -1
- package/dist/tools/recurrings.js +3 -2
- package/dist/tools/recurrings.js.map +1 -1
- package/dist/tools/salarytransactions.d.ts +2 -1
- package/dist/tools/salarytransactions.d.ts.map +1 -1
- package/dist/tools/salarytransactions.js +3 -2
- package/dist/tools/salarytransactions.js.map +1 -1
- package/dist/tools/scheduletimes.d.ts +2 -1
- package/dist/tools/scheduletimes.d.ts.map +1 -1
- package/dist/tools/scheduletimes.js +3 -2
- package/dist/tools/scheduletimes.js.map +1 -1
- package/dist/tools/status.d.ts.map +1 -1
- package/dist/tools/status.js +5 -4
- package/dist/tools/status.js.map +1 -1
- package/dist/tools/supplier-invoice-payments.d.ts +2 -1
- package/dist/tools/supplier-invoice-payments.d.ts.map +1 -1
- package/dist/tools/supplier-invoice-payments.js +3 -2
- package/dist/tools/supplier-invoice-payments.js.map +1 -1
- package/dist/tools/supplier-invoices.d.ts +2 -1
- package/dist/tools/supplier-invoices.d.ts.map +1 -1
- package/dist/tools/supplier-invoices.js +47 -6
- package/dist/tools/supplier-invoices.js.map +1 -1
- package/dist/tools/suppliers.d.ts +2 -1
- package/dist/tools/suppliers.d.ts.map +1 -1
- package/dist/tools/suppliers.js +3 -2
- package/dist/tools/suppliers.js.map +1 -1
- package/dist/tools/tax.d.ts +2 -1
- package/dist/tools/tax.d.ts.map +1 -1
- package/dist/tools/tax.js +3 -2
- package/dist/tools/tax.js.map +1 -1
- package/dist/tools/taxreductions.d.ts +2 -1
- package/dist/tools/taxreductions.d.ts.map +1 -1
- package/dist/tools/taxreductions.js +3 -2
- package/dist/tools/taxreductions.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/docs/embedded.md +60 -0
- package/package.json +23 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { defaultFortnoxTransport } from '../fortnox-client.js';
|
|
2
2
|
const VOUCHER_DETAIL_CONCURRENCY = 5;
|
|
3
3
|
// BAS account plan groupings
|
|
4
4
|
const INCOME_STATEMENT_GROUPS = [
|
|
@@ -35,180 +35,184 @@ const BALANCE_SHEET_LIABILITY_GROUPS = [
|
|
|
35
35
|
{ range: [2900, 2999], label: 'Upplupna kostnader (Accrued expenses)' },
|
|
36
36
|
];
|
|
37
37
|
/** Fetch all pages of accounts for a financial year. */
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
all.push(...data.Accounts);
|
|
47
|
-
totalPages = data.MetaInformation?.['@TotalPages'] ?? 1;
|
|
48
|
-
page++;
|
|
49
|
-
} while (page <= totalPages);
|
|
50
|
-
return all;
|
|
51
|
-
}
|
|
52
|
-
/** Fetch all vouchers (list + individual details) and sum debit/credit per account. */
|
|
53
|
-
async function fetchVoucherSums(financialYear, fromDate, toDate) {
|
|
54
|
-
const sums = new Map();
|
|
55
|
-
// Step 1: List all vouchers to get series/number identifiers
|
|
56
|
-
const vouchers = [];
|
|
57
|
-
let page = 1;
|
|
58
|
-
let totalPages = 1;
|
|
59
|
-
do {
|
|
60
|
-
const data = await fortnoxRequest('vouchers', {
|
|
61
|
-
params: {
|
|
62
|
-
financialyear: financialYear,
|
|
63
|
-
fromdate: fromDate,
|
|
64
|
-
todate: toDate,
|
|
65
|
-
page,
|
|
66
|
-
limit: 100,
|
|
67
|
-
},
|
|
68
|
-
});
|
|
69
|
-
for (const v of data.Vouchers ?? []) {
|
|
70
|
-
vouchers.push({
|
|
71
|
-
series: v.VoucherSeries,
|
|
72
|
-
number: v.VoucherNumber,
|
|
38
|
+
export function createFinancialReportOperations(transport) {
|
|
39
|
+
async function fetchAllAccounts(financialYear) {
|
|
40
|
+
const all = [];
|
|
41
|
+
let page = 1;
|
|
42
|
+
let totalPages = 1;
|
|
43
|
+
do {
|
|
44
|
+
const data = await transport.request('accounts', {
|
|
45
|
+
params: { financialyear: financialYear, page },
|
|
73
46
|
});
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
47
|
+
all.push(...data.Accounts);
|
|
48
|
+
totalPages = data.MetaInformation?.['@TotalPages'] ?? 1;
|
|
49
|
+
page++;
|
|
50
|
+
} while (page <= totalPages);
|
|
51
|
+
return all;
|
|
52
|
+
}
|
|
53
|
+
/** Fetch all vouchers (list + individual details) and sum debit/credit per account. */
|
|
54
|
+
async function fetchVoucherSums(financialYear, fromDate, toDate) {
|
|
55
|
+
const sums = new Map();
|
|
56
|
+
// Step 1: List all vouchers to get series/number identifiers
|
|
57
|
+
const vouchers = [];
|
|
58
|
+
let page = 1;
|
|
59
|
+
let totalPages = 1;
|
|
60
|
+
do {
|
|
61
|
+
const data = await transport.request('vouchers', {
|
|
62
|
+
params: {
|
|
63
|
+
financialyear: financialYear,
|
|
64
|
+
fromdate: fromDate,
|
|
65
|
+
todate: toDate,
|
|
66
|
+
page,
|
|
67
|
+
limit: 100,
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
for (const v of data.Vouchers ?? []) {
|
|
71
|
+
vouchers.push({
|
|
72
|
+
series: v.VoucherSeries,
|
|
73
|
+
number: v.VoucherNumber,
|
|
74
|
+
});
|
|
99
75
|
}
|
|
100
|
-
|
|
101
|
-
|
|
76
|
+
totalPages = data.MetaInformation?.['@TotalPages'] ?? 1;
|
|
77
|
+
page++;
|
|
78
|
+
} while (page <= totalPages);
|
|
79
|
+
// Step 2: Fetch voucher details concurrently. The shared client still owns
|
|
80
|
+
// rate limiting; this pool only keeps network latency from serialising reads.
|
|
81
|
+
const yearParam = financialYear ? `?financialyear=${financialYear}` : '';
|
|
82
|
+
let nextVoucherIndex = 0;
|
|
83
|
+
let failure;
|
|
84
|
+
async function worker() {
|
|
85
|
+
while (failure === undefined) {
|
|
86
|
+
const voucherIndex = nextVoucherIndex++;
|
|
87
|
+
if (voucherIndex >= vouchers.length)
|
|
88
|
+
return;
|
|
89
|
+
const voucher = vouchers[voucherIndex];
|
|
90
|
+
try {
|
|
91
|
+
const detail = await transport.request(`vouchers/${encodeURIComponent(voucher.series)}/${voucher.number}${yearParam}`);
|
|
92
|
+
for (const row of detail.Voucher.VoucherRows ?? []) {
|
|
93
|
+
if (row.Removed === true)
|
|
94
|
+
continue;
|
|
95
|
+
const existing = sums.get(row.Account) ?? { debit: 0, credit: 0 };
|
|
96
|
+
existing.debit += row.Debit || 0;
|
|
97
|
+
existing.credit += row.Credit || 0;
|
|
98
|
+
sums.set(row.Account, existing);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
failure = error;
|
|
103
|
+
}
|
|
102
104
|
}
|
|
103
105
|
}
|
|
106
|
+
const workerCount = Math.min(VOUCHER_DETAIL_CONCURRENCY, vouchers.length);
|
|
107
|
+
await Promise.all(Array.from({ length: workerCount }, () => worker()));
|
|
108
|
+
if (failure !== undefined)
|
|
109
|
+
throw failure;
|
|
110
|
+
return sums;
|
|
104
111
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
112
|
+
/** Compute closing balances: BalanceBroughtForward + debit - credit for each account. */
|
|
113
|
+
async function computeBalances(financialYear, fromDate, toDate) {
|
|
114
|
+
const [accounts, voucherSums] = await Promise.all([
|
|
115
|
+
fetchAllAccounts(financialYear),
|
|
116
|
+
fetchVoucherSums(financialYear, fromDate, toDate),
|
|
117
|
+
]);
|
|
118
|
+
return accounts
|
|
119
|
+
.map((a) => {
|
|
120
|
+
const movement = voucherSums.get(a.Number);
|
|
121
|
+
const debit = movement?.debit ?? 0;
|
|
122
|
+
const credit = movement?.credit ?? 0;
|
|
123
|
+
// For period-scoped income statements (fromDate set), skip BBF
|
|
124
|
+
// since we only want the period's movements for P&L accounts.
|
|
125
|
+
// For balance sheets, always include BBF.
|
|
126
|
+
const bbf = fromDate ? 0 : a.BalanceBroughtForward;
|
|
127
|
+
const closingBalance = bbf + debit - credit;
|
|
128
|
+
return {
|
|
129
|
+
number: a.Number,
|
|
130
|
+
description: a.Description,
|
|
131
|
+
closingBalance,
|
|
132
|
+
};
|
|
133
|
+
})
|
|
134
|
+
.filter((a) => a.closingBalance !== 0);
|
|
135
|
+
}
|
|
136
|
+
/** Compute balance sheet balances: always includes BBF + movements up to toDate. */
|
|
137
|
+
async function computeBalanceSheetBalances(financialYear, toDate) {
|
|
138
|
+
const [accounts, voucherSums] = await Promise.all([
|
|
139
|
+
fetchAllAccounts(financialYear),
|
|
140
|
+
fetchVoucherSums(financialYear, undefined, toDate),
|
|
141
|
+
]);
|
|
142
|
+
return accounts
|
|
143
|
+
.map((a) => {
|
|
144
|
+
const movement = voucherSums.get(a.Number);
|
|
145
|
+
const debit = movement?.debit ?? 0;
|
|
146
|
+
const credit = movement?.credit ?? 0;
|
|
147
|
+
const closingBalance = a.BalanceBroughtForward + debit - credit;
|
|
148
|
+
return {
|
|
149
|
+
number: a.Number,
|
|
150
|
+
description: a.Description,
|
|
151
|
+
closingBalance,
|
|
152
|
+
};
|
|
153
|
+
})
|
|
154
|
+
.filter((a) => a.closingBalance !== 0);
|
|
155
|
+
}
|
|
156
|
+
function buildSection(balances, range, label) {
|
|
157
|
+
const lines = balances
|
|
158
|
+
.filter((a) => a.number >= range[0] && a.number <= range[1])
|
|
159
|
+
.map((a) => ({
|
|
160
|
+
account: a.number,
|
|
161
|
+
description: a.description,
|
|
162
|
+
balance: a.closingBalance,
|
|
163
|
+
}));
|
|
164
|
+
if (lines.length === 0)
|
|
165
|
+
return null;
|
|
127
166
|
return {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
167
|
+
label,
|
|
168
|
+
lines,
|
|
169
|
+
total: lines.reduce((sum, l) => sum + l.balance, 0),
|
|
131
170
|
};
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
.map((a) => {
|
|
143
|
-
const movement = voucherSums.get(a.Number);
|
|
144
|
-
const debit = movement?.debit ?? 0;
|
|
145
|
-
const credit = movement?.credit ?? 0;
|
|
146
|
-
const closingBalance = a.BalanceBroughtForward + debit - credit;
|
|
171
|
+
}
|
|
172
|
+
async function getIncomeStatement(params = {}) {
|
|
173
|
+
const balances = await computeBalances(params.financialYear, params.fromDate, params.toDate);
|
|
174
|
+
const sections = [];
|
|
175
|
+
for (const group of INCOME_STATEMENT_GROUPS) {
|
|
176
|
+
const section = buildSection(balances, group.range, group.label);
|
|
177
|
+
if (section)
|
|
178
|
+
sections.push(section);
|
|
179
|
+
}
|
|
180
|
+
const netResult = sections.reduce((sum, s) => sum + s.total, 0);
|
|
147
181
|
return {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
182
|
+
type: 'income-statement',
|
|
183
|
+
financialYear: params.financialYear,
|
|
184
|
+
period: params.fromDate || params.toDate
|
|
185
|
+
? { from: params.fromDate ?? '', to: params.toDate ?? '' }
|
|
186
|
+
: undefined,
|
|
187
|
+
sections,
|
|
188
|
+
netResult,
|
|
151
189
|
};
|
|
152
|
-
})
|
|
153
|
-
.filter((a) => a.closingBalance !== 0);
|
|
154
|
-
}
|
|
155
|
-
function buildSection(balances, range, label) {
|
|
156
|
-
const lines = balances
|
|
157
|
-
.filter((a) => a.number >= range[0] && a.number <= range[1])
|
|
158
|
-
.map((a) => ({
|
|
159
|
-
account: a.number,
|
|
160
|
-
description: a.description,
|
|
161
|
-
balance: a.closingBalance,
|
|
162
|
-
}));
|
|
163
|
-
if (lines.length === 0)
|
|
164
|
-
return null;
|
|
165
|
-
return {
|
|
166
|
-
label,
|
|
167
|
-
lines,
|
|
168
|
-
total: lines.reduce((sum, l) => sum + l.balance, 0),
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
export async function getIncomeStatement(params = {}) {
|
|
172
|
-
const balances = await computeBalances(params.financialYear, params.fromDate, params.toDate);
|
|
173
|
-
const sections = [];
|
|
174
|
-
for (const group of INCOME_STATEMENT_GROUPS) {
|
|
175
|
-
const section = buildSection(balances, group.range, group.label);
|
|
176
|
-
if (section)
|
|
177
|
-
sections.push(section);
|
|
178
|
-
}
|
|
179
|
-
const netResult = sections.reduce((sum, s) => sum + s.total, 0);
|
|
180
|
-
return {
|
|
181
|
-
type: 'income-statement',
|
|
182
|
-
financialYear: params.financialYear,
|
|
183
|
-
period: params.fromDate || params.toDate
|
|
184
|
-
? { from: params.fromDate ?? '', to: params.toDate ?? '' }
|
|
185
|
-
: undefined,
|
|
186
|
-
sections,
|
|
187
|
-
netResult,
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
export async function getBalanceSheet(params = {}) {
|
|
191
|
-
const balances = await computeBalanceSheetBalances(params.financialYear, params.toDate);
|
|
192
|
-
const assets = [];
|
|
193
|
-
for (const group of BALANCE_SHEET_ASSET_GROUPS) {
|
|
194
|
-
const section = buildSection(balances, group.range, group.label);
|
|
195
|
-
if (section)
|
|
196
|
-
assets.push(section);
|
|
197
190
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
const
|
|
201
|
-
|
|
202
|
-
|
|
191
|
+
async function getBalanceSheet(params = {}) {
|
|
192
|
+
const balances = await computeBalanceSheetBalances(params.financialYear, params.toDate);
|
|
193
|
+
const assets = [];
|
|
194
|
+
for (const group of BALANCE_SHEET_ASSET_GROUPS) {
|
|
195
|
+
const section = buildSection(balances, group.range, group.label);
|
|
196
|
+
if (section)
|
|
197
|
+
assets.push(section);
|
|
198
|
+
}
|
|
199
|
+
const liabilitiesAndEquity = [];
|
|
200
|
+
for (const group of BALANCE_SHEET_LIABILITY_GROUPS) {
|
|
201
|
+
const section = buildSection(balances, group.range, group.label);
|
|
202
|
+
if (section)
|
|
203
|
+
liabilitiesAndEquity.push(section);
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
type: 'balance-sheet',
|
|
207
|
+
financialYear: params.financialYear,
|
|
208
|
+
asOfDate: params.toDate,
|
|
209
|
+
assets,
|
|
210
|
+
totalAssets: assets.reduce((sum, s) => sum + s.total, 0),
|
|
211
|
+
liabilitiesAndEquity,
|
|
212
|
+
totalLiabilitiesAndEquity: liabilitiesAndEquity.reduce((sum, s) => sum + s.total, 0),
|
|
213
|
+
};
|
|
203
214
|
}
|
|
204
|
-
return {
|
|
205
|
-
type: 'balance-sheet',
|
|
206
|
-
financialYear: params.financialYear,
|
|
207
|
-
asOfDate: params.toDate,
|
|
208
|
-
assets,
|
|
209
|
-
totalAssets: assets.reduce((sum, s) => sum + s.total, 0),
|
|
210
|
-
liabilitiesAndEquity,
|
|
211
|
-
totalLiabilitiesAndEquity: liabilitiesAndEquity.reduce((sum, s) => sum + s.total, 0),
|
|
212
|
-
};
|
|
215
|
+
return { getIncomeStatement, getBalanceSheet };
|
|
213
216
|
}
|
|
217
|
+
export const { getIncomeStatement, getBalanceSheet } = createFinancialReportOperations(defaultFortnoxTransport);
|
|
214
218
|
//# sourceMappingURL=financial-reports.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"financial-reports.js","sourceRoot":"","sources":["../../src/operations/financial-reports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"financial-reports.js","sourceRoot":"","sources":["../../src/operations/financial-reports.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import { type FortnoxTransport } from '../fortnox-client.js';
|
|
2
|
+
export interface FinancialYearsResponse {
|
|
2
3
|
FinancialYears: Record<string, unknown>[];
|
|
3
4
|
MetaInformation?: {
|
|
4
5
|
'@TotalResources': number;
|
|
@@ -9,8 +10,10 @@ interface FinancialYearsResponse {
|
|
|
9
10
|
export interface ListFinancialYearsParams {
|
|
10
11
|
date?: string;
|
|
11
12
|
}
|
|
12
|
-
export declare function
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
export declare function createFinancialYearOperations(transport: FortnoxTransport): {
|
|
14
|
+
listFinancialYears: (params?: ListFinancialYearsParams) => Promise<FinancialYearsResponse>;
|
|
15
|
+
getFinancialYear: (id: number) => Promise<Record<string, unknown>>;
|
|
16
|
+
getLockedPeriod: () => Promise<Record<string, unknown>>;
|
|
17
|
+
};
|
|
18
|
+
export declare const listFinancialYears: (params?: ListFinancialYearsParams) => Promise<FinancialYearsResponse>, getFinancialYear: (id: number) => Promise<Record<string, unknown>>, getLockedPeriod: () => Promise<Record<string, unknown>>;
|
|
16
19
|
//# sourceMappingURL=financial-years.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"financial-years.d.ts","sourceRoot":"","sources":["../../src/operations/financial-years.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"financial-years.d.ts","sourceRoot":"","sources":["../../src/operations/financial-years.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAMtF,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC1C,eAAe,CAAC,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;CAChG;AAMD,MAAM,WAAW,wBAAwB;IAEvC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,gBAAgB;kCAE7D,wBAAwB,KAC/B,OAAO,CAAC,sBAAsB,CAAC;2BAgBE,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;2BAW3C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;EAMnE;AAED,eAAO,MAAQ,kBAAkB,YApCrB,wBAAwB,KAC/B,OAAO,CAAC,sBAAsB,CAAC,EAmCD,gBAAgB,OAnBb,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAmB1B,eAAe,QARhC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASX,CAAC"}
|
|
@@ -1,32 +1,36 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
export async function getFinancialYear(id) {
|
|
19
|
-
if (!Number.isInteger(id) || id < 0) {
|
|
20
|
-
throw new Error(`Invalid financial year id: ${id}`);
|
|
1
|
+
import { defaultFortnoxTransport } from '../fortnox-client.js';
|
|
2
|
+
export function createFinancialYearOperations(transport) {
|
|
3
|
+
async function listFinancialYears(params = {}) {
|
|
4
|
+
// Fortnox's /3/financialyears does NOT support a date query filter — passing
|
|
5
|
+
// ?Date=... returns 400 "Ogiltig parameter" (error 2000588). So fetch all
|
|
6
|
+
// years and, when a date is given, filter locally to the year whose
|
|
7
|
+
// From/To-date range brackets it (YYYY-MM-DD compares lexicographically).
|
|
8
|
+
const data = await transport.request('financialyears');
|
|
9
|
+
if (!params.date)
|
|
10
|
+
return data;
|
|
11
|
+
const d = params.date;
|
|
12
|
+
const matching = (data.FinancialYears ?? []).filter((fy) => {
|
|
13
|
+
const from = String(fy.FromDate ?? '');
|
|
14
|
+
const to = String(fy.ToDate ?? '');
|
|
15
|
+
return from !== '' && to !== '' && from <= d && d <= to;
|
|
16
|
+
});
|
|
17
|
+
return { ...data, FinancialYears: matching };
|
|
21
18
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
19
|
+
async function getFinancialYear(id) {
|
|
20
|
+
if (!Number.isInteger(id) || id < 0) {
|
|
21
|
+
throw new Error(`Invalid financial year id: ${id}`);
|
|
22
|
+
}
|
|
23
|
+
const data = await transport.request(`financialyears/${id}`);
|
|
24
|
+
return data.FinancialYear;
|
|
25
|
+
}
|
|
26
|
+
// The locked period (bokföring låst t.o.m.). An empty object means no period
|
|
27
|
+
// is locked. Useful as context before voucher/invoice writes to avoid
|
|
28
|
+
// "period is locked" API errors.
|
|
29
|
+
async function getLockedPeriod() {
|
|
30
|
+
const data = await transport.request('settings/lockedperiod');
|
|
31
|
+
return data.LockedPeriod ?? {};
|
|
32
|
+
}
|
|
33
|
+
return { listFinancialYears, getFinancialYear, getLockedPeriod };
|
|
31
34
|
}
|
|
35
|
+
export const { listFinancialYears, getFinancialYear, getLockedPeriod } = createFinancialYearOperations(defaultFortnoxTransport);
|
|
32
36
|
//# sourceMappingURL=financial-years.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"financial-years.js","sourceRoot":"","sources":["../../src/operations/financial-years.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"financial-years.js","sourceRoot":"","sources":["../../src/operations/financial-years.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAyB,MAAM,sBAAsB,CAAC;AAoBtF,MAAM,UAAU,6BAA6B,CAAC,SAA2B;IACvE,KAAK,UAAU,kBAAkB,CAC/B,SAAmC,EAAE;QAErC,6EAA6E;QAC7E,0EAA0E;QAC1E,oEAAoE;QACpE,0EAA0E;QAC1E,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,CAAyB,gBAAgB,CAAC,CAAC;QAC/E,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;QACtB,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;YACzD,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;YACvC,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YACnC,OAAO,IAAI,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;IAC/C,CAAC;IAED,KAAK,UAAU,gBAAgB,CAAC,EAAU;QACxC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,CAAwB,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACpF,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,6EAA6E;IAC7E,sEAAsE;IACtE,iCAAiC;IACjC,KAAK,UAAU,eAAe;QAC5B,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,CAAuB,uBAAuB,CAAC,CAAC;QACpF,OAAO,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,eAAe,EAAE,GACpE,6BAA6B,CAAC,uBAAuB,CAAC,CAAC"}
|