64 lines
2.0 KiB
JavaScript
64 lines
2.0 KiB
JavaScript
import { getPool } from '../../db/mssqlClient.js';
|
|
import { LOAD_STEUERSATZ, LOAD_STEUERKLASSEN } from '../../db/mssql/steuer.js';
|
|
import env from '../../config/env.js';
|
|
|
|
let steuersatzCache;
|
|
let steuerklassenCache;
|
|
|
|
/**
|
|
* Loads VAT rates per tax class for the configured steuer zone (`tSteuersatz` only).
|
|
* Results are cached for the process lifetime.
|
|
* @returns {Promise<Array<{ kSteuerklasse: number, fSteuersatz: number }>>}
|
|
*/
|
|
export async function loadSteuersatz() {
|
|
if (steuersatzCache) {
|
|
return steuersatzCache;
|
|
}
|
|
|
|
const pool = await getPool();
|
|
const result = await pool.request()
|
|
.input('steuerZone', env.steuerZone)
|
|
.query(LOAD_STEUERSATZ);
|
|
steuersatzCache = result.recordset.map((row) => ({
|
|
kSteuerklasse: row.kSteuerklasse,
|
|
fSteuersatz: row.fSteuersatz,
|
|
}));
|
|
return steuersatzCache;
|
|
}
|
|
|
|
/**
|
|
* Loads tax classes with display metadata for the configured steuer zone.
|
|
* Results are cached for the process lifetime.
|
|
* @returns {Promise<Array<{ kSteuerklasse: number, cName: string, nStandard: number, fSteuersatz: number }>>}
|
|
*/
|
|
export async function loadSteuerklassen() {
|
|
if (steuerklassenCache) {
|
|
return steuerklassenCache;
|
|
}
|
|
|
|
const pool = await getPool();
|
|
const result = await pool.request()
|
|
.input('steuerZone', env.steuerZone)
|
|
.query(LOAD_STEUERKLASSEN);
|
|
steuerklassenCache = result.recordset.map((row) => ({
|
|
kSteuerklasse: row.kSteuerklasse,
|
|
cName: row.cName,
|
|
nStandard: row.nStandard,
|
|
fSteuersatz: row.fSteuersatz,
|
|
}));
|
|
return steuerklassenCache;
|
|
}
|
|
|
|
export function bruttoFromNetto(netto, kSteuerklasse, steuersaetze) {
|
|
const row = steuersaetze.find((item) => item.kSteuerklasse === kSteuerklasse);
|
|
if (row == null || netto == null) {
|
|
return null;
|
|
}
|
|
return netto * (1 + row.fSteuersatz / 100);
|
|
}
|
|
|
|
export async function getSteuer() {
|
|
const steuerklassen = await loadSteuerklassen();
|
|
return { steuerklassen };
|
|
}
|