@fin.cx/opendata 4.0.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.smartconfig.json +7 -2
- package/dist_ts/00_commitinfo_data.js +3 -3
- package/dist_ts/baserate/baserate.d.ts +9 -0
- package/dist_ts/baserate/baserate.js +49 -0
- package/dist_ts/baserate/classes.baserateerror.d.ts +14 -0
- package/dist_ts/baserate/classes.baserateerror.js +10 -0
- package/dist_ts/baserate/data.baserate.d.ts +18 -0
- package/dist_ts/baserate/data.baserate.js +63 -0
- package/dist_ts/baserate/index.d.ts +4 -0
- package/dist_ts/baserate/index.js +7 -0
- package/dist_ts/baserate/interfaces.d.ts +19 -0
- package/dist_ts/baserate/interfaces.js +2 -0
- package/dist_ts/handelsregister/references.d.ts +6 -2
- package/dist_ts/handelsregister/references.js +90 -20
- package/dist_ts/holidays/calendar.d.ts +32 -0
- package/dist_ts/holidays/calendar.js +200 -0
- package/dist_ts/holidays/classes.holidaycalendarerror.d.ts +14 -0
- package/dist_ts/holidays/classes.holidaycalendarerror.js +10 -0
- package/dist_ts/holidays/data.holidays.d.ts +46 -0
- package/dist_ts/holidays/data.holidays.js +124 -0
- package/dist_ts/holidays/index.d.ts +4 -0
- package/dist_ts/holidays/index.js +7 -0
- package/dist_ts/holidays/interfaces.d.ts +42 -0
- package/dist_ts/holidays/interfaces.js +2 -0
- package/package.json +18 -5
- package/readme.md +121 -3
- package/ts/00_commitinfo_data.ts +2 -2
- package/ts/baserate/baserate.ts +57 -0
- package/ts/baserate/classes.baserateerror.ts +20 -0
- package/ts/baserate/data.baserate.ts +81 -0
- package/ts/baserate/index.ts +6 -0
- package/ts/baserate/interfaces.ts +21 -0
- package/ts/handelsregister/references.ts +94 -20
- package/ts/holidays/calendar.ts +261 -0
- package/ts/holidays/classes.holidaycalendarerror.ts +20 -0
- package/ts/holidays/data.holidays.ts +177 -0
- package/ts/holidays/index.ts +18 -0
- package/ts/holidays/interfaces.ts +87 -0
package/.smartconfig.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"githost": "gitlab.com",
|
|
6
6
|
"gitscope": "fin.cx",
|
|
7
7
|
"gitrepo": "opendata",
|
|
8
|
-
"description": "Open business and financial data for TypeScript: register lookups on the German register portal (handelsregister.de) without storage, and stock and crypto prices and fundamentals from several providers.",
|
|
8
|
+
"description": "Open business and financial data for TypeScript: register lookups on the German register portal (handelsregister.de) without storage, the statutory public holidays of the German federal states, the base rate of § 247 BGB, and stock and crypto prices and fundamentals from several providers.",
|
|
9
9
|
"npmPackagename": "@fin.cx/opendata",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"projectDomain": "fin.cx",
|
|
@@ -22,7 +22,12 @@
|
|
|
22
22
|
"data retrieval",
|
|
23
23
|
"stock prices",
|
|
24
24
|
"cryptocurrency",
|
|
25
|
-
"fundamentals"
|
|
25
|
+
"fundamentals",
|
|
26
|
+
"public holidays",
|
|
27
|
+
"Feiertage",
|
|
28
|
+
"working days",
|
|
29
|
+
"Basiszinssatz",
|
|
30
|
+
"base rate"
|
|
26
31
|
]
|
|
27
32
|
},
|
|
28
33
|
"release": {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@fin.cx/opendata',
|
|
6
|
-
version: '4.
|
|
7
|
-
description: 'Open business and financial data for TypeScript: register lookups on the German register portal (handelsregister.de) without storage, and stock and crypto prices and fundamentals from several providers.'
|
|
6
|
+
version: '4.2.0',
|
|
7
|
+
description: 'Open business and financial data for TypeScript: register lookups on the German register portal (handelsregister.de) without storage, the statutory public holidays of the German federal states, the base rate of § 247 BGB, and stock and crypto prices and fundamentals from several providers.'
|
|
8
8
|
};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLG9TQUFvUztDQUNsVCxDQUFBIn0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IBaseRatePeriod, IBaseRateSpan, TIsoDate } from './interfaces.js';
|
|
2
|
+
/** The base rate in force on a day: the published period that contains it. */
|
|
3
|
+
export declare const getBaseRate: (dateArg: TIsoDate) => IBaseRatePeriod;
|
|
4
|
+
/**
|
|
5
|
+
* A span of days, both inclusive, split where the base rate changes: one piece per published
|
|
6
|
+
* period it touches, oldest first. Interest under § 288 BGB is computed per piece, since the rate
|
|
7
|
+
* of each half-year applies to the days in it.
|
|
8
|
+
*/
|
|
9
|
+
export declare const splitByBaseRate: (fromArg: TIsoDate, toArg: TIsoDate) => IBaseRateSpan[];
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { BaseRateError } from './classes.baserateerror.js';
|
|
2
|
+
import { baseRateFirstDay, baseRatePeriods, baseRatesReadOn } from './data.baserate.js';
|
|
3
|
+
const ISO_DATE = /^(\d{4})-(\d{2})-(\d{2})$/;
|
|
4
|
+
const checkDate = (dateArg) => {
|
|
5
|
+
const match = typeof dateArg === 'string' ? ISO_DATE.exec(dateArg) : null;
|
|
6
|
+
const utc = match ? new Date(Date.UTC(Number(match[1]), Number(match[2]) - 1, Number(match[3]))) : null;
|
|
7
|
+
if (!match || !utc || utc.toISOString().slice(0, 10) !== dateArg) {
|
|
8
|
+
throw new BaseRateError('invalid_date', `${JSON.stringify(dateArg)} is not a calendar date written YYYY-MM-DD.`);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
const addDay = (dateArg) => {
|
|
12
|
+
const utc = new Date(`${dateArg}T00:00:00Z`);
|
|
13
|
+
utc.setUTCDate(utc.getUTCDate() + 1);
|
|
14
|
+
return utc.toISOString().slice(0, 10);
|
|
15
|
+
};
|
|
16
|
+
/** The base rate in force on a day: the published period that contains it. */
|
|
17
|
+
export const getBaseRate = (dateArg) => {
|
|
18
|
+
checkDate(dateArg);
|
|
19
|
+
if (dateArg < baseRateFirstDay) {
|
|
20
|
+
throw new BaseRateError('before_first_period', `${dateArg} lies before ${baseRateFirstDay}, the first day of the Bundesbank's table.`);
|
|
21
|
+
}
|
|
22
|
+
const period = baseRatePeriods.find((periodArg) => periodArg.validFrom <= dateArg && dateArg <= periodArg.validTo);
|
|
23
|
+
if (!period) {
|
|
24
|
+
throw new BaseRateError('not_published', `${dateArg} lies after ${baseRatePeriods[baseRatePeriods.length - 1].validTo}; the base rate of its half-year was not published when the table was read on ${baseRatesReadOn}.`);
|
|
25
|
+
}
|
|
26
|
+
return period;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* A span of days, both inclusive, split where the base rate changes: one piece per published
|
|
30
|
+
* period it touches, oldest first. Interest under § 288 BGB is computed per piece, since the rate
|
|
31
|
+
* of each half-year applies to the days in it.
|
|
32
|
+
*/
|
|
33
|
+
export const splitByBaseRate = (fromArg, toArg) => {
|
|
34
|
+
checkDate(fromArg);
|
|
35
|
+
checkDate(toArg);
|
|
36
|
+
if (toArg < fromArg) {
|
|
37
|
+
throw new BaseRateError('invalid_range', `${toArg} lies before ${fromArg}.`);
|
|
38
|
+
}
|
|
39
|
+
const spans = [];
|
|
40
|
+
let day = fromArg;
|
|
41
|
+
while (day <= toArg) {
|
|
42
|
+
const period = getBaseRate(day);
|
|
43
|
+
const to = period.validTo < toArg ? period.validTo : toArg;
|
|
44
|
+
spans.push({ from: day, to, ratePercent: period.ratePercent });
|
|
45
|
+
day = addDay(to);
|
|
46
|
+
}
|
|
47
|
+
return spans;
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZXJhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9iYXNlcmF0ZS9iYXNlcmF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUd4RixNQUFNLFFBQVEsR0FBRywyQkFBMkIsQ0FBQztBQUU3QyxNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQWlCLEVBQVEsRUFBRTtJQUM1QyxNQUFNLEtBQUssR0FBRyxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMxRSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3hHLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDakUsTUFBTSxJQUFJLGFBQWEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0lBQ25ILENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLE1BQU0sR0FBRyxDQUFDLE9BQWlCLEVBQVksRUFBRTtJQUM3QyxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLE9BQU8sWUFBWSxDQUFDLENBQUM7SUFDN0MsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckMsT0FBTyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUM7QUFFRiw4RUFBOEU7QUFDOUUsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsT0FBaUIsRUFBbUIsRUFBRTtJQUNoRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkIsSUFBSSxPQUFPLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUMvQixNQUFNLElBQUksYUFBYSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsT0FBTyxnQkFBZ0IsZ0JBQWdCLDRDQUE0QyxDQUFDLENBQUM7SUFDekksQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUksT0FBTyxJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkgsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxJQUFJLGFBQWEsQ0FDckIsZUFBZSxFQUNmLEdBQUcsT0FBTyxlQUFlLGVBQWUsQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8saUZBQWlGLGVBQWUsR0FBRyxDQUNoTCxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxPQUFpQixFQUFFLEtBQWUsRUFBbUIsRUFBRTtJQUNyRixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkIsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pCLElBQUksS0FBSyxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxhQUFhLENBQUMsZUFBZSxFQUFFLEdBQUcsS0FBSyxnQkFBZ0IsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQW9CLEVBQUUsQ0FBQztJQUNsQyxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUM7SUFDbEIsT0FBTyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDcEIsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDM0QsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMvRCxHQUFHLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Why a question to the base-rate table was refused:
|
|
3
|
+
* - `invalid_date`: the value is not a calendar date written `YYYY-MM-DD`;
|
|
4
|
+
* - `invalid_range`: a span ends before it begins;
|
|
5
|
+
* - `before_first_period`: the day lies before the first period the table holds (1 July 2002);
|
|
6
|
+
* - `not_published`: the day lies after the half-year of the last period the table holds, whose
|
|
7
|
+
* rate the Bundesbank had not published when the table was read (`baseRatesReadOn`).
|
|
8
|
+
*/
|
|
9
|
+
export type TBaseRateErrorCode = 'invalid_date' | 'invalid_range' | 'before_first_period' | 'not_published';
|
|
10
|
+
/** The typed error of the base-rate table. */
|
|
11
|
+
export declare class BaseRateError extends Error {
|
|
12
|
+
readonly code: TBaseRateErrorCode;
|
|
13
|
+
constructor(code: TBaseRateErrorCode, message: string);
|
|
14
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** The typed error of the base-rate table. */
|
|
2
|
+
export class BaseRateError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
constructor(code, message) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = 'BaseRateError';
|
|
7
|
+
this.code = code;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5iYXNlcmF0ZWVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvYmFzZXJhdGUvY2xhc3Nlcy5iYXNlcmF0ZWVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBLDhDQUE4QztBQUM5QyxNQUFNLE9BQU8sYUFBYyxTQUFRLEtBQUs7SUFDdEIsSUFBSSxDQUFxQjtJQUV6QyxZQUFZLElBQXdCLEVBQUUsT0FBZTtRQUNuRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The base rate (Basiszinssatz) of § 247 BGB, as the Deutsche Bundesbank publishes it: "Gemäß
|
|
3
|
+
* § 247 Abs. 2 BGB ist die Deutsche Bundesbank verpflichtet, den aktuellen Stand des
|
|
4
|
+
* Basiszinssatzes im Bundesanzeiger zu veröffentlichen." It changes on 1 January and 1 July
|
|
5
|
+
* (§ 247 Abs. 1 Satz 2 BGB). The table below is the Bundesbank's table "Basiszinssatz nach § 247
|
|
6
|
+
* BGB" (https://www.bundesbank.de/de/bundesbank/organisation/agb-und-regelungen/basiszinssatz-607820),
|
|
7
|
+
* read on 2026-09-27, unaltered: every row from 1 July 2002, the first one it lists, to the
|
|
8
|
+
* current one. A later half-year needs a new release.
|
|
9
|
+
*/
|
|
10
|
+
import type { IBaseRatePeriod } from './interfaces.js';
|
|
11
|
+
/** the first day the table answers for */
|
|
12
|
+
export declare const baseRateFirstDay = "2002-07-01";
|
|
13
|
+
/** the day the Bundesbank's table was read; later half-years need a new release */
|
|
14
|
+
export declare const baseRatesReadOn = "2026-09-27";
|
|
15
|
+
/** the page the table was read from */
|
|
16
|
+
export declare const baseRateSource = "https://www.bundesbank.de/de/bundesbank/organisation/agb-und-regelungen/basiszinssatz-607820";
|
|
17
|
+
/** every published period, oldest first */
|
|
18
|
+
export declare const baseRatePeriods: readonly IBaseRatePeriod[];
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/** the first day the table answers for */
|
|
2
|
+
export const baseRateFirstDay = '2002-07-01';
|
|
3
|
+
/** the day the Bundesbank's table was read; later half-years need a new release */
|
|
4
|
+
export const baseRatesReadOn = '2026-09-27';
|
|
5
|
+
/** the page the table was read from */
|
|
6
|
+
export const baseRateSource = 'https://www.bundesbank.de/de/bundesbank/organisation/agb-und-regelungen/basiszinssatz-607820';
|
|
7
|
+
const rows = [
|
|
8
|
+
// gültig ab, Basiszinssatz in Prozent, as the table of the Deutsche Bundesbank states them
|
|
9
|
+
['2002-07-01', 2.47],
|
|
10
|
+
['2003-01-01', 1.97],
|
|
11
|
+
['2003-07-01', 1.22],
|
|
12
|
+
['2004-01-01', 1.14],
|
|
13
|
+
['2004-07-01', 1.13],
|
|
14
|
+
['2005-01-01', 1.21],
|
|
15
|
+
['2005-07-01', 1.17],
|
|
16
|
+
['2006-01-01', 1.37],
|
|
17
|
+
['2006-07-01', 1.95],
|
|
18
|
+
['2007-01-01', 2.70],
|
|
19
|
+
['2007-07-01', 3.19],
|
|
20
|
+
['2008-01-01', 3.32],
|
|
21
|
+
['2008-07-01', 3.19],
|
|
22
|
+
['2009-01-01', 1.62],
|
|
23
|
+
['2009-07-01', 0.12],
|
|
24
|
+
['2010-01-01', 0.12],
|
|
25
|
+
['2010-07-01', 0.12],
|
|
26
|
+
['2011-01-01', 0.12],
|
|
27
|
+
['2011-07-01', 0.37],
|
|
28
|
+
['2012-01-01', 0.12],
|
|
29
|
+
['2012-07-01', 0.12],
|
|
30
|
+
['2013-01-01', -0.13],
|
|
31
|
+
['2013-07-01', -0.38],
|
|
32
|
+
['2014-01-01', -0.63],
|
|
33
|
+
['2014-07-01', -0.73],
|
|
34
|
+
['2015-01-01', -0.83],
|
|
35
|
+
['2015-07-01', -0.83],
|
|
36
|
+
['2016-01-01', -0.83],
|
|
37
|
+
['2016-07-01', -0.88],
|
|
38
|
+
['2017-01-01', -0.88],
|
|
39
|
+
['2017-07-01', -0.88],
|
|
40
|
+
['2018-01-01', -0.88],
|
|
41
|
+
['2018-07-01', -0.88],
|
|
42
|
+
['2019-01-01', -0.88],
|
|
43
|
+
['2019-07-01', -0.88],
|
|
44
|
+
['2020-01-01', -0.88],
|
|
45
|
+
['2020-07-01', -0.88],
|
|
46
|
+
['2021-01-01', -0.88],
|
|
47
|
+
['2021-07-01', -0.88],
|
|
48
|
+
['2022-01-01', -0.88],
|
|
49
|
+
['2022-07-01', -0.88],
|
|
50
|
+
['2023-01-01', 1.62],
|
|
51
|
+
['2023-07-01', 3.12],
|
|
52
|
+
['2024-01-01', 3.62],
|
|
53
|
+
['2024-07-01', 3.37],
|
|
54
|
+
['2025-01-01', 2.27],
|
|
55
|
+
['2025-07-01', 1.27],
|
|
56
|
+
['2026-01-01', 1.27],
|
|
57
|
+
['2026-07-01', 1.52],
|
|
58
|
+
];
|
|
59
|
+
/** the last day of the half-year a period begins in */
|
|
60
|
+
const halfYearEndOf = (validFromArg) => `${validFromArg.slice(0, 4)}-${validFromArg.slice(5, 7) === '01' ? '06-30' : '12-31'}`;
|
|
61
|
+
/** every published period, oldest first */
|
|
62
|
+
export const baseRatePeriods = Object.freeze(rows.map(([validFrom, ratePercent]) => Object.freeze({ validFrom, validTo: halfYearEndOf(validFrom), ratePercent })));
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS5iYXNlcmF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2Jhc2VyYXRlL2RhdGEuYmFzZXJhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsMENBQTBDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQztBQUU3QyxtRkFBbUY7QUFDbkYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQztBQUU1Qyx1Q0FBdUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLDhGQUE4RixDQUFDO0FBRTdILE1BQU0sSUFBSSxHQUE2QztJQUNyRCwyRkFBMkY7SUFDM0YsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO0lBQ3BCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztJQUNwQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7SUFDcEIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO0lBQ3BCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztJQUNwQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7SUFDcEIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO0lBQ3BCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztJQUNwQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7SUFDcEIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO0lBQ3BCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztJQUNwQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7SUFDcEIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO0lBQ3BCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztJQUNwQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7SUFDcEIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO0lBQ3BCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztJQUNwQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7SUFDcEIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO0lBQ3BCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztJQUNwQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7SUFDcEIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO0lBQ3BCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztJQUNwQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7SUFDcEIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO0lBQ3BCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztJQUNwQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7SUFDcEIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO0lBQ3BCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztDQUNyQixDQUFDO0FBRUYsdURBQXVEO0FBQ3ZELE1BQU0sYUFBYSxHQUFHLENBQUMsWUFBb0IsRUFBVSxFQUFFLENBQ3JELEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBRXpGLDJDQUEyQztBQUMzQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQStCLE1BQU0sQ0FBQyxNQUFNLENBQ3RFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FDckgsQ0FBQyJ9
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './interfaces.js';
|
|
2
|
+
export { BaseRateError, type TBaseRateErrorCode } from './classes.baserateerror.js';
|
|
3
|
+
export { baseRateFirstDay, baseRatePeriods, baseRateSource, baseRatesReadOn } from './data.baserate.js';
|
|
4
|
+
export { getBaseRate, splitByBaseRate } from './baserate.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// This entry point stands alone: it imports nothing from the rest of the package, has no
|
|
2
|
+
// dependencies and needs no storage or network.
|
|
3
|
+
export * from './interfaces.js';
|
|
4
|
+
export { BaseRateError } from './classes.baserateerror.js';
|
|
5
|
+
export { baseRateFirstDay, baseRatePeriods, baseRateSource, baseRatesReadOn } from './data.baserate.js';
|
|
6
|
+
export { getBaseRate, splitByBaseRate } from './baserate.js';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9iYXNlcmF0ZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5RkFBeUY7QUFDekYsZ0RBQWdEO0FBQ2hELGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBMkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RyxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQyJ9
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** A plain calendar date, `YYYY-MM-DD`. */
|
|
2
|
+
export type TIsoDate = string;
|
|
3
|
+
/**
|
|
4
|
+
* One half-year's base rate (Basiszinssatz, § 247 BGB) as the Deutsche
|
|
5
|
+
* Bundesbank publishes it: valid from 1 January or 1 July to the last day of
|
|
6
|
+
* that half-year, both inclusive.
|
|
7
|
+
*/
|
|
8
|
+
export interface IBaseRatePeriod {
|
|
9
|
+
validFrom: TIsoDate;
|
|
10
|
+
validTo: TIsoDate;
|
|
11
|
+
/** percent a year; it can be negative (2013 to 2022) */
|
|
12
|
+
ratePercent: number;
|
|
13
|
+
}
|
|
14
|
+
/** A span of days within one base-rate period, both days inclusive. */
|
|
15
|
+
export interface IBaseRateSpan {
|
|
16
|
+
from: TIsoDate;
|
|
17
|
+
to: TIsoDate;
|
|
18
|
+
ratePercent: number;
|
|
19
|
+
}
|
|
@@ -15,8 +15,12 @@ export interface IParsedRegisterReferenceText {
|
|
|
15
15
|
number: string;
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
* Finds a register court by its code or its name: `H1101`,
|
|
19
|
-
* `
|
|
18
|
+
* Finds a register court by its code or by its name as the portal or a business prints it: `H1101`,
|
|
19
|
+
* `Bremen`, `AG Bremen`, `Amtsgericht Bremen – Registergericht`, `Registergericht Bremen`,
|
|
20
|
+
* `Handelsregister B des Amtsgerichts Bremen`, `Amtsgericht Frankfurt a. M.`, `Frankfurt (Oder)`,
|
|
21
|
+
* `Kempten (Allgäu)` or `Kempten`, `Freiburg i. Br.`, `AG Berlin` or `Charlottenburg`. Umlauts may
|
|
22
|
+
* be spelled out (`Muenchen`). Returns undefined unless exactly one court fits: a place the list
|
|
23
|
+
* does not know, and `Frankfurt` alone, name no court.
|
|
20
24
|
*/
|
|
21
25
|
export declare const findRegisterCourt: (codeOrNameArg: string, courtsArg?: readonly IRegisterCourt[]) => IRegisterCourt | undefined;
|
|
22
26
|
/** returns the canonical register type for `hrb`, `HRB`, `gnr` …, or undefined */
|
|
@@ -1,19 +1,94 @@
|
|
|
1
1
|
import { registerTypes } from './constants.js';
|
|
2
2
|
import { registerCourts } from './data.codelists.js';
|
|
3
3
|
const collapse = (textArg) => textArg.replace(/\s+/g, ' ').trim();
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
/** German letters as a text without them spells them: `Muenchen` is `München` */
|
|
5
|
+
const spelledOut = { 'ä': 'ae', 'ö': 'oe', 'ü': 'ue', 'ß': 'ss' };
|
|
6
|
+
/** words that name a court or a register rather than its place */
|
|
7
|
+
const courtWords = new Set([
|
|
8
|
+
'amtsgericht',
|
|
9
|
+
'amtsgerichts',
|
|
10
|
+
'ag',
|
|
11
|
+
'registergericht',
|
|
12
|
+
'registergerichts',
|
|
13
|
+
'handelsregister',
|
|
14
|
+
'genossenschaftsregister',
|
|
15
|
+
'partnerschaftsregister',
|
|
16
|
+
'vereinsregister',
|
|
17
|
+
'gesellschaftsregister',
|
|
18
|
+
'abteilung',
|
|
19
|
+
'beim',
|
|
20
|
+
'bei',
|
|
21
|
+
'des',
|
|
22
|
+
]);
|
|
23
|
+
/**
|
|
24
|
+
* The place a printed court name names, as courts are compared: lower case, German letters spelled
|
|
25
|
+
* out, punctuation as spaces, and without the words that name a court or a register or the
|
|
26
|
+
* division of the commercial register. `Handelsregister B des Amtsgerichts Frankfurt a. M.` is
|
|
27
|
+
* `frankfurt a m`.
|
|
28
|
+
*/
|
|
29
|
+
const placeKey = (textArg) => {
|
|
30
|
+
const words = textArg
|
|
31
|
+
.normalize('NFC')
|
|
32
|
+
.toLocaleLowerCase('de-DE')
|
|
33
|
+
.replace(/[äöüß]/g, (letterArg) => spelledOut[letterArg] ?? letterArg)
|
|
34
|
+
.split(/[^\p{L}\p{N}]+/u)
|
|
35
|
+
.filter((wordArg) => wordArg !== '');
|
|
36
|
+
return words
|
|
37
|
+
.filter((wordArg, indexArg) => {
|
|
38
|
+
const previous = words[indexArg - 1];
|
|
39
|
+
const division = (previous === 'handelsregister' || previous === 'abteilung') && (wordArg === 'a' || wordArg === 'b');
|
|
40
|
+
return !courtWords.has(wordArg) && !division;
|
|
41
|
+
})
|
|
42
|
+
.join(' ');
|
|
11
43
|
};
|
|
12
44
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
45
|
+
* Other names under which the register courts are printed, for courts whose name in the official
|
|
46
|
+
* list carries a qualifier that prints leave out, abbreviate or spell out. Each name here is a name
|
|
47
|
+
* of that court alone. `Frankfurt` without `am Main` or `(Oder)` is a name of neither of the two.
|
|
48
|
+
*/
|
|
49
|
+
const printedCourtNames = {
|
|
50
|
+
'Bad Homburg v.d.H.': ['Bad Homburg', 'Bad Homburg vor der Höhe', 'Bad Homburg v. d. Höhe'],
|
|
51
|
+
'Berlin (Charlottenburg)': ['Berlin', 'Charlottenburg', 'Charlottenburg (Berlin)'],
|
|
52
|
+
'Frankfurt am Main': ['Frankfurt a. M.', 'Frankfurt a. Main', 'Frankfurt/M.', 'Frankfurt/Main', 'Frankfurt (Main)'],
|
|
53
|
+
'Frankfurt (Oder)': ['Frankfurt/O.', 'Frankfurt a. d. O.', 'Frankfurt an der Oder', 'Frankfurt a. d. Oder'],
|
|
54
|
+
'Freiburg': ['Freiburg im Breisgau', 'Freiburg i. Br.', 'Freiburg/Breisgau', 'Freiburg (Breisgau)'],
|
|
55
|
+
'Kempten (Allgäu)': ['Kempten'],
|
|
56
|
+
'Königstein': ['Königstein im Taunus', 'Königstein i. Ts.'],
|
|
57
|
+
'Landau': ['Landau in der Pfalz', 'Landau i. d. Pfalz', 'Landau/Pfalz'],
|
|
58
|
+
'Limburg': ['Limburg an der Lahn', 'Limburg a. d. Lahn'],
|
|
59
|
+
'Ludwigshafen a.Rhein (Ludwigshafen)': ['Ludwigshafen', 'Ludwigshafen am Rhein'],
|
|
60
|
+
'Offenbach am Main': ['Offenbach', 'Offenbach a. M.'],
|
|
61
|
+
'Oldenburg (Oldenburg)': ['Oldenburg', 'Oldenburg (Oldb.)', 'Oldenburg i. O.'],
|
|
62
|
+
'St. Ingbert (St Ingbert)': ['St. Ingbert', 'Sankt Ingbert'],
|
|
63
|
+
'St. Wendel (St Wendel)': ['St. Wendel', 'Sankt Wendel'],
|
|
64
|
+
'Weiden i. d. OPf.': ['Weiden', 'Weiden in der Oberpfalz'],
|
|
65
|
+
};
|
|
66
|
+
/** every place key of a list of courts with the courts it names */
|
|
67
|
+
const courtsByPlaceKey = (courtsArg) => {
|
|
68
|
+
const byKey = new Map();
|
|
69
|
+
for (const court of courtsArg) {
|
|
70
|
+
const keys = new Set([court.name, ...(printedCourtNames[court.name] ?? [])].map(placeKey));
|
|
71
|
+
for (const key of keys) {
|
|
72
|
+
if (key !== '') {
|
|
73
|
+
byKey.set(key, [...(byKey.get(key) ?? []), court]);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return byKey;
|
|
78
|
+
};
|
|
79
|
+
let officialCourtKeys;
|
|
80
|
+
/**
|
|
81
|
+
* Finds a register court by its code or by its name as the portal or a business prints it: `H1101`,
|
|
82
|
+
* `Bremen`, `AG Bremen`, `Amtsgericht Bremen – Registergericht`, `Registergericht Bremen`,
|
|
83
|
+
* `Handelsregister B des Amtsgerichts Bremen`, `Amtsgericht Frankfurt a. M.`, `Frankfurt (Oder)`,
|
|
84
|
+
* `Kempten (Allgäu)` or `Kempten`, `Freiburg i. Br.`, `AG Berlin` or `Charlottenburg`. Umlauts may
|
|
85
|
+
* be spelled out (`Muenchen`). Returns undefined unless exactly one court fits: a place the list
|
|
86
|
+
* does not know, and `Frankfurt` alone, name no court.
|
|
15
87
|
*/
|
|
16
88
|
export const findRegisterCourt = (codeOrNameArg, courtsArg = registerCourts) => {
|
|
89
|
+
if (typeof codeOrNameArg !== 'string') {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
17
92
|
const text = collapse(codeOrNameArg);
|
|
18
93
|
if (!text) {
|
|
19
94
|
return undefined;
|
|
@@ -22,16 +97,11 @@ export const findRegisterCourt = (codeOrNameArg, courtsArg = registerCourts) =>
|
|
|
22
97
|
if (byCode) {
|
|
23
98
|
return byCode;
|
|
24
99
|
}
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
if (byName.length > 1) {
|
|
31
|
-
return undefined;
|
|
32
|
-
}
|
|
33
|
-
const byAlias = courtsArg.filter((courtArg) => courtAliasKey(courtArg.name) === key);
|
|
34
|
-
return byAlias.length === 1 ? byAlias[0] : undefined;
|
|
100
|
+
const keys = courtsArg === registerCourts
|
|
101
|
+
? (officialCourtKeys ??= courtsByPlaceKey(registerCourts))
|
|
102
|
+
: courtsByPlaceKey(courtsArg);
|
|
103
|
+
const courts = keys.get(placeKey(text)) ?? [];
|
|
104
|
+
return courts.length === 1 ? courts[0] : undefined;
|
|
35
105
|
};
|
|
36
106
|
/** returns the canonical register type for `hrb`, `HRB`, `gnr` …, or undefined */
|
|
37
107
|
export const toRegisterType = (textArg) => registerTypes.find((typeArg) => typeArg.toLowerCase() === collapse(textArg).toLowerCase());
|
|
@@ -73,4 +143,4 @@ export const parseRegisterReferenceText = (textArg, courtsArg = registerCourts)
|
|
|
73
143
|
};
|
|
74
144
|
/** `Amtsgericht Bremen HRB 35230 HB` */
|
|
75
145
|
export const formatRegisterReference = (referenceArg) => `Amtsgericht ${referenceArg.court.name} ${referenceArg.type} ${referenceArg.number}`;
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2hhbmRlbHNyZWdpc3Rlci9yZWZlcmVuY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFvQnJELE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBZSxFQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUVsRixpRkFBaUY7QUFDakYsTUFBTSxVQUFVLEdBQXFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0FBRXBHLGtFQUFrRTtBQUNsRSxNQUFNLFVBQVUsR0FBd0IsSUFBSSxHQUFHLENBQUM7SUFDOUMsYUFBYTtJQUNiLGNBQWM7SUFDZCxJQUFJO0lBQ0osaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixpQkFBaUI7SUFDakIseUJBQXlCO0lBQ3pCLHdCQUF3QjtJQUN4QixpQkFBaUI7SUFDakIsdUJBQXVCO0lBQ3ZCLFdBQVc7SUFDWCxNQUFNO0lBQ04sS0FBSztJQUNMLEtBQUs7Q0FDTixDQUFDLENBQUM7QUFFSDs7Ozs7R0FLRztBQUNILE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBZSxFQUFVLEVBQUU7SUFDM0MsTUFBTSxLQUFLLEdBQUcsT0FBTztTQUNsQixTQUFTLENBQUMsS0FBSyxDQUFDO1NBQ2hCLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztTQUMxQixPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDO1NBQ3JFLEtB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
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { IGermanState, IPublicHoliday, IWorkingDayOptions, TGermanStateCode, TIsoDate } from './interfaces.js';
|
|
2
|
+
/**
|
|
3
|
+
* Easter Sunday of a year of the Gregorian calendar, by the algorithm of Meeus, Jones and
|
|
4
|
+
* Butcher. The Easter-based holidays follow from it.
|
|
5
|
+
*/
|
|
6
|
+
export declare const easterSunday: (yearArg: number) => TIsoDate;
|
|
7
|
+
/**
|
|
8
|
+
* The statutory public holidays of a state in a year, in the order of their dates. Regional
|
|
9
|
+
* holidays are included with `scope: 'regional'` and the part of the state they apply to.
|
|
10
|
+
*/
|
|
11
|
+
export declare const getPublicHolidays: (yearArg: number, stateArg: TGermanStateCode) => IPublicHoliday[];
|
|
12
|
+
/** The statutory public holidays of a state on a date, regional ones included. */
|
|
13
|
+
export declare const getPublicHolidaysOn: (dateArg: TIsoDate, stateArg: TGermanStateCode) => IPublicHoliday[];
|
|
14
|
+
/** Whether a date is a statutory public holiday in a state. */
|
|
15
|
+
export declare const isPublicHoliday: (dateArg: TIsoDate, stateArg: TGermanStateCode, optionsArg: IWorkingDayOptions) => boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Whether a date is a working day in a state in the sense of § 193 BGB: neither a Saturday, nor a
|
|
18
|
+
* Sunday, nor a statutory public holiday.
|
|
19
|
+
*/
|
|
20
|
+
export declare const isWorkingDay: (dateArg: TIsoDate, stateArg: TGermanStateCode, optionsArg: IWorkingDayOptions) => boolean;
|
|
21
|
+
/** The first working day after a date (§ 193 BGB: not a Saturday, Sunday or public holiday). */
|
|
22
|
+
export declare const nextWorkingDay: (dateArg: TIsoDate, stateArg: TGermanStateCode, optionsArg: IWorkingDayOptions) => TIsoDate;
|
|
23
|
+
/**
|
|
24
|
+
* The date itself when it is a working day, otherwise the next working day: the day that takes the
|
|
25
|
+
* place of a fixed day or of the last day of a period under § 193 BGB.
|
|
26
|
+
*/
|
|
27
|
+
export declare const workingDayOnOrAfter: (dateArg: TIsoDate, stateArg: TGermanStateCode, optionsArg: IWorkingDayOptions) => TIsoDate;
|
|
28
|
+
/**
|
|
29
|
+
* The federal state for a code or a name: `DE-BY`, `BY` or `Bayern`, compared without regard to
|
|
30
|
+
* case and surrounding whitespace.
|
|
31
|
+
*/
|
|
32
|
+
export declare const findGermanState: (valueArg: string) => IGermanState | undefined;
|