Skip to content

Commit 2778bbe

Browse files
committed
Räkna ut soliditet automatiskt vid SIE-import
1 parent 2987f9f commit 2778bbe

File tree

3 files changed

+109
-10
lines changed

3 files changed

+109
-10
lines changed

src/model/arsredovisning/Belopprad.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,13 @@ export function createBelopprad<T extends TaxonomyItemType>(
6060
}
6161
}
6262

63-
export function createBeloppradInList(
63+
export function createBeloppradInList<T extends TaxonomyItemType>(
6464
taxonomyManager: TaxonomyManager,
6565
list: Belopprad[],
66-
taxonomyItem: TaxonomyItem,
66+
taxonomyItem: TaxonomyItem<T>,
6767
excludedSumRows: string[] = [],
6868
sort: boolean = true,
69-
): Belopprad | undefined {
69+
): Belopprad<T> | undefined {
7070
if (isTaxonomyItemInBeloppradList(list, taxonomyItem)) {
7171
// Finns redan
7272
return;
@@ -117,19 +117,19 @@ export function createBeloppradInList(
117117
);
118118
}
119119

120-
return belopprad;
120+
return belopprad as Belopprad<T>;
121121
}
122122

123-
export function getOrCreateBeloppradInList(
123+
export function getOrCreateBeloppradInList<T extends TaxonomyItemType>(
124124
taxonomyManager: TaxonomyManager,
125125
list: Belopprad[],
126-
taxonomyItem: TaxonomyItem,
127-
): Belopprad {
126+
taxonomyItem: TaxonomyItem<T>,
127+
): Belopprad<T> {
128128
const existingBelopprad = list.find((belopprad) =>
129129
isBeloppradCorrespondsToTaxonomyItem(belopprad, taxonomyItem),
130130
);
131131
if (existingBelopprad) {
132-
return existingBelopprad;
132+
return existingBelopprad as Belopprad<T>;
133133
} else {
134134
const createdBelopprad = createBeloppradInList(
135135
taxonomyManager,

src/util/autofillUtils.ts

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
import { getTaxonomyManager, TaxonomyRootName } from "@/util/TaxonomyManager.ts";
2+
import { getOrCreateBeloppradInList } from "@/model/arsredovisning/Belopprad.ts";
3+
import { isBeloppradComparable } from "@/model/arsredovisning/beloppradtyper/BaseBeloppradComparable.ts";
4+
import Decimal from "decimal.js";
5+
import type { Arsredovisning, Verksamhetsar } from "@/model/arsredovisning/Arsredovisning.ts";
6+
7+
/**
8+
* Fyller automatiskt i soliditet i flerårsöversikten för de senaste två
9+
* räkenskapsåren. Funkar endast med
10+
*
11+
* @param arsredovisning - Årsredovisningen som ska få soliditeten ifylld
12+
*/
13+
export async function autofillSoliditet(arsredovisning: Arsredovisning) {
14+
const egetKapitalBelopprad = arsredovisning.balansrakning.find(
15+
(belopprad) => belopprad.taxonomyItemName === "se-gen-base:EgetKapital",
16+
);
17+
const obeskattadeReserverBelopprad = arsredovisning.balansrakning.find(
18+
(belopprad) =>
19+
belopprad.taxonomyItemName === "se-gen-base:ObeskattadeReserver",
20+
);
21+
const balansomslutningBelopprad = arsredovisning.balansrakning.find(
22+
(belopprad) =>
23+
belopprad.taxonomyItemName === "se-gen-base:EgetKapitalSkulder",
24+
);
25+
if (egetKapitalBelopprad != null && balansomslutningBelopprad != null) {
26+
const taxonomyManager = await getTaxonomyManager(
27+
TaxonomyRootName.FORVALTNINGSBERATTELSE,
28+
);
29+
const soliditetBelopprad = getOrCreateBeloppradInList(
30+
taxonomyManager,
31+
arsredovisning.forvaltningsberattelse,
32+
taxonomyManager.getItemByCompleteInfo(
33+
"se-gen-base:Soliditet",
34+
undefined,
35+
"se-gen-base:Flerarsoversikt",
36+
),
37+
);
38+
if (
39+
isBeloppradComparable(egetKapitalBelopprad) &&
40+
isBeloppradComparable(balansomslutningBelopprad) &&
41+
isBeloppradComparable(soliditetBelopprad)
42+
) {
43+
function soliditet(
44+
egetKapital: string,
45+
obeskattadeReserver: string,
46+
balansomslutning: string,
47+
verksamhetsar: Verksamhetsar,
48+
): string {
49+
const bolagsskatt =
50+
BOLAGSSKATT_PER_AR[verksamhetsar.startdatum.substring(0, 4)];
51+
if (bolagsskatt == null) {
52+
return "";
53+
}
54+
55+
return Decimal(egetKapital)
56+
.plus(
57+
Decimal("1")
58+
.minus(Decimal(bolagsskatt))
59+
.mul(Decimal(obeskattadeReserver)),
60+
)
61+
.div(Decimal(balansomslutning))
62+
.mul(100)
63+
.round()
64+
.toString();
65+
}
66+
67+
soliditetBelopprad.beloppNuvarandeAr = soliditet(
68+
egetKapitalBelopprad.beloppNuvarandeAr,
69+
obeskattadeReserverBelopprad != null &&
70+
isBeloppradComparable(obeskattadeReserverBelopprad)
71+
? obeskattadeReserverBelopprad.beloppNuvarandeAr
72+
: "0",
73+
balansomslutningBelopprad.beloppNuvarandeAr,
74+
arsredovisning.verksamhetsarNuvarande,
75+
).toString();
76+
77+
soliditetBelopprad.beloppTidigareAr[0] = soliditet(
78+
egetKapitalBelopprad.beloppTidigareAr[0],
79+
obeskattadeReserverBelopprad != null &&
80+
isBeloppradComparable(obeskattadeReserverBelopprad)
81+
? obeskattadeReserverBelopprad.beloppTidigareAr[0]
82+
: "0",
83+
balansomslutningBelopprad.beloppTidigareAr[0],
84+
arsredovisning.verksamhetsarTidigare[0],
85+
).toString();
86+
}
87+
}
88+
}
89+
90+
// Bolagsskatt per år (räkenskapsår som inleds 2021, 2022, osv)
91+
const BOLAGSSKATT_PER_AR: { [ar: string]: string } = {
92+
"2021": "20.6",
93+
"2022": "20.6",
94+
"2023": "20.6",
95+
"2024": "20.6",
96+
"2025": "20.6",
97+
};

src/util/sieUtils.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
} from "@/model/arsredovisning/Belopprad.ts";
1515
import { isBeloppradComparable } from "@/model/arsredovisning/beloppradtyper/BaseBeloppradComparable.ts";
1616
import { SIE_MAPPINGS } from "@/data/sie/SIE_MAPPINGS.ts";
17+
import { autofillSoliditet } from "@/util/autofillUtils.ts";
1718

1819
export interface SieMapping {
1920
basAccounts: { start: number; end: number }[];
@@ -159,7 +160,7 @@ export async function mapSieFileIntoArsredovisning(
159160
!belopprad.beloppNuvarandeAr &&
160161
!belopprad.beloppTidigareAr.some((b) => b)
161162
) {
162-
deleteBelopprad(
163+
await deleteBelopprad(
163164
taxonomyManagersForBelopprad.get(belopprad)!,
164165
belopprad,
165166
beloppradListsForBelopprad.get(belopprad)!,
@@ -169,7 +170,8 @@ export async function mapSieFileIntoArsredovisning(
169170
}
170171
}
171172

172-
// TODO: Räkna ut soliditet
173+
// Räkna ut soliditet
174+
await autofillSoliditet(arsredovisning);
173175
}
174176

175177
/**

0 commit comments

Comments
 (0)