@tasenor/common-plugins 1.9.16

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.
Files changed (114) hide show
  1. package/.eslintrc.js +4 -0
  2. package/.turbo/turbo-fix.log +4 -0
  3. package/.turbo/turbo-lint.log +4 -0
  4. package/.turbo/turbo-version.log +5 -0
  5. package/LICENSE +21 -0
  6. package/README.md +15 -0
  7. package/data/FinnishBalanceSheetReport.mjs +9 -0
  8. package/data/FinnishBalanceSheetReportInvestment.mjs +11 -0
  9. package/data/FinnishBalanceSheetReportLite.mjs +9 -0
  10. package/data/FinnishIncomeStatementReport.mjs +9 -0
  11. package/data/FinnishIncomeStatementReportInvestment.mjs +11 -0
  12. package/data/FinnishIncomeStatementReportLite.mjs +9 -0
  13. package/data/FinnishInvestmentCompany.mjs +5 -0
  14. package/data/FinnishLimitedCompanyComplete.mjs +5 -0
  15. package/data/FinnishLimitedCompanyLite.mjs +9 -0
  16. package/data/IncomeAndExpenses.mjs +64 -0
  17. package/data/README.md +8 -0
  18. package/data/VATFinland.mjs +22 -0
  19. package/data/bin/build_all +11 -0
  20. package/data/lib/utils.mjs +314 -0
  21. package/data/src/Assets Tree - Definitions.tsv +101 -0
  22. package/data/src/Expense Tree - Definitions.tsv +99 -0
  23. package/data/src/Finland VAT - Definitions.tsv +22 -0
  24. package/data/src/FinnishBalanceSheetReport - balance-sheet-detailed-fi.tsv +215 -0
  25. package/data/src/FinnishBalanceSheetReport - balance-sheet-fi.tsv +93 -0
  26. package/data/src/FinnishBalanceSheetReportInvestment - balance-sheet-detailed-fi.tsv +100 -0
  27. package/data/src/FinnishBalanceSheetReportInvestment - balance-sheet-fi.tsv +52 -0
  28. package/data/src/FinnishBalanceSheetReportLite - balance-sheet-en.tsv +21 -0
  29. package/data/src/FinnishBalanceSheetReportLite - balance-sheet-fi.tsv +21 -0
  30. package/data/src/FinnishBalanceSheetReportLite - balance-sheet-lite-en.tsv +21 -0
  31. package/data/src/FinnishBalanceSheetReportLite - balance-sheet-lite-fi.tsv +21 -0
  32. package/data/src/FinnishIncomeStatementReport - income-statement-detailed-fi.tsv +118 -0
  33. package/data/src/FinnishIncomeStatementReport - income-statement-fi.tsv +45 -0
  34. package/data/src/FinnishIncomeStatementReportInvestment - income-statement-detailed-fi.tsv +96 -0
  35. package/data/src/FinnishIncomeStatementReportInvestment - income-statement-fi.tsv +39 -0
  36. package/data/src/FinnishIncomeStatementReportLite - income-statement-lite-en.tsv +23 -0
  37. package/data/src/FinnishIncomeStatementReportLite - income-statement-lite-fi.tsv +23 -0
  38. package/data/src/FinnishInvestmentCompany - fi-EUR.tsv +722 -0
  39. package/data/src/FinnishLimitedCompanyComplete - fi-EUR.tsv +1086 -0
  40. package/data/src/FinnishLimitedCompanyLite - en-EUR.tsv +97 -0
  41. package/data/src/FinnishLimitedCompanyLite - fi-EUR.tsv +99 -0
  42. package/data/src/Income Tree - Definitions.tsv +60 -0
  43. package/data/src/Tax Types - Definitions.tsv +11 -0
  44. package/package.json +51 -0
  45. package/src/CoinAPI/backend/index.ts +102 -0
  46. package/src/CoinbaseImport/backend/CoinbaseHandler.ts +35 -0
  47. package/src/CoinbaseImport/backend/index.ts +24 -0
  48. package/src/CoinbaseImport/backend/rules.json +64 -0
  49. package/src/DocumentCleaner/ui/index.tsx +165 -0
  50. package/src/Euro/ui/index.tsx +27 -0
  51. package/src/Finnish/ui/finnish.json +341 -0
  52. package/src/Finnish/ui/index.tsx +54 -0
  53. package/src/FinnishBalanceSheetReport/backend/balance-sheet-detailed-fi.tsv +215 -0
  54. package/src/FinnishBalanceSheetReport/backend/balance-sheet-fi.tsv +93 -0
  55. package/src/FinnishBalanceSheetReport/backend/index.ts +107 -0
  56. package/src/FinnishBalanceSheetReportInvestment/backend/balance-sheet-investment-detailed-fi.tsv +100 -0
  57. package/src/FinnishBalanceSheetReportInvestment/backend/balance-sheet-investment-fi.tsv +52 -0
  58. package/src/FinnishBalanceSheetReportInvestment/backend/index.ts +107 -0
  59. package/src/FinnishBalanceSheetReportLite/backend/balance-sheet-lite-en.tsv +21 -0
  60. package/src/FinnishBalanceSheetReportLite/backend/balance-sheet-lite-fi.tsv +21 -0
  61. package/src/FinnishBalanceSheetReportLite/backend/index.ts +121 -0
  62. package/src/FinnishIncomeStatementReport/backend/income-statement-detailed-fi.tsv +118 -0
  63. package/src/FinnishIncomeStatementReport/backend/income-statement-fi.tsv +45 -0
  64. package/src/FinnishIncomeStatementReport/backend/index.ts +212 -0
  65. package/src/FinnishIncomeStatementReportInvestment/backend/income-statement-detailed-fi.tsv +118 -0
  66. package/src/FinnishIncomeStatementReportInvestment/backend/income-statement-fi.tsv +45 -0
  67. package/src/FinnishIncomeStatementReportInvestment/backend/income-statement-investment-detailed-fi.tsv +96 -0
  68. package/src/FinnishIncomeStatementReportInvestment/backend/income-statement-investment-fi.tsv +39 -0
  69. package/src/FinnishIncomeStatementReportInvestment/backend/index.ts +212 -0
  70. package/src/FinnishIncomeStatementReportLite/backend/income-statement-lite-en.tsv +23 -0
  71. package/src/FinnishIncomeStatementReportLite/backend/income-statement-lite-fi.tsv +23 -0
  72. package/src/FinnishIncomeStatementReportLite/backend/index.ts +210 -0
  73. package/src/FinnishInvestmentCompany/backend/fi-EUR.tsv +722 -0
  74. package/src/FinnishInvestmentCompany/backend/index.ts +46 -0
  75. package/src/FinnishInvestmentCompany/ui/index.tsx +26 -0
  76. package/src/FinnishLimitedCompanyComplete/backend/fi-EUR.tsv +1086 -0
  77. package/src/FinnishLimitedCompanyComplete/backend/index.ts +46 -0
  78. package/src/FinnishLimitedCompanyComplete/ui/index.tsx +26 -0
  79. package/src/FinnishLimitedCompanyLite/backend/en-EUR.tsv +97 -0
  80. package/src/FinnishLimitedCompanyLite/backend/fi-EUR.tsv +99 -0
  81. package/src/FinnishLimitedCompanyLite/backend/index.ts +53 -0
  82. package/src/FinnishLimitedCompanyLite/ui/index.tsx +28 -0
  83. package/src/GitBackup/backend/index.ts +109 -0
  84. package/src/GitBackup/ui/index.tsx +127 -0
  85. package/src/IncomeAndExpenses/backend/assetCodes.json +126 -0
  86. package/src/IncomeAndExpenses/backend/expense.json +190 -0
  87. package/src/IncomeAndExpenses/backend/income.json +120 -0
  88. package/src/IncomeAndExpenses/backend/index.ts +354 -0
  89. package/src/IncomeAndExpenses/backend/taxTypes.json +12 -0
  90. package/src/JournalReport/backend/index.ts +157 -0
  91. package/src/KrakenImport/backend/KrakenHandler.ts +88 -0
  92. package/src/KrakenImport/backend/index.ts +24 -0
  93. package/src/KrakenImport/backend/rules.json +52 -0
  94. package/src/LedgerReport/backend/index.ts +161 -0
  95. package/src/LynxImport/backend/LynxHandler.ts +389 -0
  96. package/src/LynxImport/backend/index.ts +24 -0
  97. package/src/LynxImport/backend/rules.json +412 -0
  98. package/src/NordeaImport/backend/NordeaHandler.ts +44 -0
  99. package/src/NordeaImport/backend/index.ts +24 -0
  100. package/src/NordeaImport/backend/rules.json +4 -0
  101. package/src/NordnetImport/backend/NordnetHandler.ts +78 -0
  102. package/src/NordnetImport/backend/index.ts +24 -0
  103. package/src/NordnetImport/backend/rules.json +271 -0
  104. package/src/Rand/ui/index.tsx +27 -0
  105. package/src/RapidAPI/backend/index.ts +133 -0
  106. package/src/TITOImport/backend/TITOHandler.ts +268 -0
  107. package/src/TITOImport/backend/index.ts +24 -0
  108. package/src/TITOImport/backend/rules.json +4 -0
  109. package/src/TagEditor/ui/index.tsx +510 -0
  110. package/src/USDollar/ui/index.tsx +27 -0
  111. package/src/VAT/ui/index.tsx +572 -0
  112. package/src/VATFinland/backend/index.ts +22 -0
  113. package/src/VATFinland/backend/vat.json +23 -0
  114. package/tsconfig.json +13 -0
@@ -0,0 +1,21 @@
1
+ # accounts title flags
2
+ 1000-2000 ASSETS HIDE_TOTAL REQUIRED BOLD
3
+ 1500-2000 _CURRENT ASSETS HIDE_TOTAL REQUIRED BOLD
4
+ 1600-1860 __Receivables HIDE_TOTAL
5
+ 1600-1630 1700-1730 ___Trade Receivables
6
+ 1660-1670 1760-1780 ___Other Receivables
7
+ 1680-1690 1800-1850 ___Accrued Income
8
+ 1600-1860 __Total Receivables BOLD
9
+ 1900-2000 __Disposable Assets
10
+ 1500-2000 _Total Variable Assets BOLD
11
+ 1000-2000 Total Assets REQUIRED BOLD
12
+ NEW_PAGE
13
+ 2000-9999 CAPITAL, RESERVES & LIABILITIES HIDE_TOTAL REQUIRED BOLD
14
+ 2000-2400 _CAPITAL & RESERVES HIDE_TOTAL REQUIRED BOLD
15
+ 2250-2330 __Retained Profits (Loss)
16
+ 3000-9999 __Profit (Loss) for the financial year
17
+ 2000-2400 3000-9999 _Total Equity BOLD
18
+ 2600-3000 _CREDITORS HIDE_TOTAL REQUIRED BOLD
19
+ 2670-2690 2870-2890 __Trade Creditors
20
+ 2600-3000 _Total Liabilities BOLD
21
+ 2000-9999 Total Liabilities REQUIRED BOLD
@@ -0,0 +1,21 @@
1
+ # accounts title flags
2
+ 1000-2000 VASTAAVAA HIDE_TOTAL REQUIRED BOLD
3
+ 1500-2000 _VAIHTUVAT VASTAAVAT HIDE_TOTAL REQUIRED BOLD
4
+ 1600-1860 __Saamiset HIDE_TOTAL
5
+ 1600-1630 1700-1730 ___Myyntisaamiset
6
+ 1660-1670 1760-1780 ___Muut saamiset
7
+ 1680-1690 1800-1850 ___Siirtosaamiset
8
+ 1600-1860 __Saamiset yhteensä BOLD
9
+ 1900-2000 __Rahat ja pankkisaamiset
10
+ 1500-2000 _Vaihtuvat vastaavat yhteensä BOLD
11
+ 1000-2000 Vastaavaa yhteensä REQUIRED BOLD
12
+ NEW_PAGE
13
+ 2000-9999 VASTATTAVAA HIDE_TOTAL REQUIRED BOLD
14
+ 2000-2400 _OMA PÄÄOMA HIDE_TOTAL REQUIRED BOLD
15
+ 2250-2330 __Edellisten tilikausien voitto (tappio)
16
+ 3000-9999 __Tilikauden voitto (tappio)
17
+ 2000-2400 3000-9999 _Oma pääoma yhteensä BOLD
18
+ 2600-3000 _VIERAS PÄÄOMA HIDE_TOTAL REQUIRED BOLD
19
+ 2670-2690 2870-2890 __Ostovelat
20
+ 2600-3000 _Vieras pääoma yhteensä BOLD
21
+ 2000-9999 Vastattavaa yhteensä REQUIRED BOLD
@@ -0,0 +1,121 @@
1
+ import { AccountNumber, Language, PluginCode, ReportID, ReportOptions, Version } from '@dataplug/tasenor-common'
2
+ import { ReportPlugin } from '@dataplug/tasenor-common-node'
3
+ import dayjs from 'dayjs'
4
+ import quarterOfYear from 'dayjs/plugin/quarterOfYear'
5
+ dayjs.extend(quarterOfYear)
6
+
7
+ class FinnishBalanceSheetReportLite extends ReportPlugin {
8
+ constructor() {
9
+ super('balance-sheet-lite' as ReportID)
10
+
11
+ this.schemes = new Set(['FinnishLimitedCompanyLite'])
12
+
13
+ this.code = 'FinnishBalanceSheetReportLite' as PluginCode
14
+ this.title = 'Balance Sheet Report (Finnish - Lite)'
15
+ this.version = '1.0.13' as Version
16
+ this.icon = '<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><g><path d="M0,0h24v24H0V0z" fill="none"/></g><g><g><path d="M14,5H5v14h14v-9h-5V5z M8,17c-0.55,0-1-0.45-1-1s0.45-1,1-1s1,0.45,1,1S8.55,17,8,17z M8,13 c-0.55,0-1-0.45-1-1s0.45-1,1-1s1,0.45,1,1S8.55,13,8,13z M8,9C7.45,9,7,8.55,7,8s0.45-1,1-1s1,0.45,1,1S8.55,9,8,9z" opacity=".3"/><circle cx="8" cy="8" r="1"/><path d="M15,3H5C3.9,3,3.01,3.9,3.01,5L3,19c0,1.1,0.89,2,1.99,2H19c1.1,0,2-0.9,2-2V9L15,3z M19,19H5V5h9v5h5V19z"/><circle cx="8" cy="12" r="1"/><circle cx="8" cy="16" r="1"/></g></g></svg>'
17
+ this.releaseDate = '2023-03-14'
18
+ this.use = 'backend'
19
+ this.type = 'report'
20
+ this.description = 'Compact version of balance sheet report translated in Finnish.'
21
+
22
+ this.languages = {
23
+ en: {
24
+ 'report-balance-sheet-lite': 'Balance sheet'
25
+ },
26
+ fi: {
27
+ 'report-balance-sheet-lite': 'Tase'
28
+ }
29
+ }
30
+ }
31
+
32
+ forceOptions() {
33
+ return {
34
+ negateAssetAndProfit: true,
35
+ addPreviousPeriod: true
36
+ }
37
+ }
38
+
39
+ getLanguages(): Language[] {
40
+ return ['fi', 'en']
41
+ }
42
+
43
+ getReportOptions(): ReportOptions {
44
+ return {
45
+ quarter1: 'radio:1',
46
+ quarter2: 'radio:1',
47
+ quarter3: 'radio:1',
48
+ full: 'radio:1:default'
49
+ }
50
+ }
51
+
52
+ columnTitle(id, period, options) {
53
+ if (options.quarter1) {
54
+ const year = dayjs(period.start_date).year()
55
+ return `{${dayjs(`${year}-04-01`).subtract(1, 'day').format('YYYY-MM-DD')}}`
56
+ } else if (options.quarter2) {
57
+ const year = dayjs(period.start_date).year()
58
+ return `{${dayjs(`${year}-07-01`).subtract(1, 'day').format('YYYY-MM-DD')}}`
59
+ } else if (options.quarter3) {
60
+ const year = dayjs(period.start_date).year()
61
+ return `{${dayjs(`${year}-10-01`).subtract(1, 'day').format('YYYY-MM-DD')}}`
62
+ } else {
63
+ return `{${this.time2str(period.end_date)}}`
64
+ }
65
+ }
66
+
67
+ async getColumns(id, entries, options) {
68
+ const columns = options.periods.map((period) => {
69
+ return {
70
+ type: 'numeric',
71
+ name: 'period' + period.id,
72
+ title: this.columnTitle(id, period, options)
73
+ }
74
+ })
75
+ columns.unshift({
76
+ name: 'title',
77
+ title: '',
78
+ type: 'name'
79
+ })
80
+ return columns
81
+ }
82
+
83
+ preProcess(id, entries, options, settings, columns) {
84
+ const columnNames = columns.map((col) => col.name)
85
+
86
+ // Summarize all totals from the entries.
87
+ const totals = {}
88
+ columnNames.forEach((column) => (totals[column] = {}))
89
+ const accountNames = {}
90
+ const accountNumbers = new Set<AccountNumber>()
91
+ entries.forEach((entry) => {
92
+ const column = 'period' + entry.periodId
93
+ totals[column][entry.number] = totals[column][entry.number] || 0
94
+ totals[column][entry.number] += entry.amount
95
+ accountNames[entry.number] = entry.name
96
+ accountNumbers.add(entry.number)
97
+ })
98
+
99
+ return this.parseAndCombineReport([...accountNumbers], accountNames, columns, options.format, totals)
100
+ }
101
+
102
+ /**
103
+ * Mark mismatching Vastaavaa and Vastattavaa with red.
104
+ */
105
+ postProcess(id, data) {
106
+ const liabilities = data.find(line => line.name === 'Vastattavaa yhteensä')
107
+ const assets = data.find(line => line.name === 'Vastaavaa yhteensä')
108
+ if (liabilities && assets) {
109
+ Object.values(liabilities.amounts).forEach((value, idx) => {
110
+ if (Object.values(assets.amounts)[idx] !== value) {
111
+ assets.error = true
112
+ liabilities.error = true
113
+ }
114
+ })
115
+ }
116
+
117
+ return data
118
+ }
119
+ }
120
+
121
+ export default FinnishBalanceSheetReportLite
@@ -0,0 +1,118 @@
1
+ # accounts title flags
2
+ 3000-3600 LIIKEVAIHTO DETAILS
3
+ BREAK
4
+ 3000-3600 LIIKEVAIHTO REQUIRED BOLD
5
+ BREAK
6
+ 3600-3630 Valmiiden ja keskeneräisten tuotteiden varastojen muutos HIDE_TOTAL BOLD
7
+ 3600-3630 _Valmiiden ja keskeneräisten tuotteiden varastojen muutos DETAILS
8
+ 3600-3630 Tuotteiden varastojen muutos yhteensä BOLD
9
+ BREAK
10
+ 3630-3650 Valmistus omaan käyttöön HIDE_TOTAL BOLD
11
+ 3630-3650 _Valmistus omaan käyttöön DETAILS
12
+ 3630-3650 Valmistus omaan käyttöön yhteensä BOLD
13
+ BREAK
14
+ 3650-4000 Liiketoiminnan muut tuotot HIDE_TOTAL BOLD
15
+ 3650-4000 _Liiketoiminnan muut tuotot DETAILS
16
+ 3650-4000 Liiketoiminnan muut tuotot yhteensä BOLD
17
+ BREAK
18
+ 4000-5000 Materiaalit ja palvelut HIDE_TOTAL BOLD
19
+ 4000-4450 _Aineet, tarvikkeet ja tavarat HIDE_TOTAL BOLD
20
+ 4000-4400 __Ostot tilikauden aikana HIDE_TOTAL BOLD
21
+ 4000-4400 ___Ostot tilikauden aikana DETAILS
22
+ 4000-4400 __Ostot tilikauden aikana yhteensä BOLD
23
+ 4400-4450 __Varastojen muutos HIDE_TOTAL BOLD
24
+ 4400-4450 ___Varastojen muutos DETAILS
25
+ 4400-4450 __Varastojen muutos yhteensä BOLD
26
+ 4000-4450 _Aineet, tarvikkeet ja tavarat yhteensä BOLD
27
+ 4450-5000 _Ulkopuoliset palvelut HIDE_TOTAL BOLD
28
+ 4450-5000 __Ulkopuoliset palvelut DETAILS
29
+ 4450-5000 _Ulkopuoliset palvelut yhteensä BOLD
30
+ 4000-5000 Materiaalit ja palvelut yhteensä BOLD
31
+ BREAK
32
+ 5000-6800 Henkilöstökulut HIDE_TOTAL BOLD
33
+ 5000-6000 _Palkat ja palkkiot HIDE_TOTAL BOLD
34
+ 5000-6000 __Palkat ja palkkiot DETAILS
35
+ 5000-6000 _Palkat ja palkkiot yhteensä BOLD
36
+ 6000-6800 _Henkilösivukulut HIDE_TOTAL BOLD
37
+ 6000-6300 __Eläkekulut HIDE_TOTAL BOLD
38
+ 6000-6300 ___Eläkekulut DETAILS
39
+ 6000-6300 __Eläkekulut yhteensä BOLD
40
+ 6300-6800 __Muut henkilösivukulut HIDE_TOTAL BOLD
41
+ 6300-6800 ___Muut henkilösivukulut DETAILS
42
+ 6300-6800 __Muut henkilösivukulut yhteensä BOLD
43
+ 6000-6800 _Henkilösivukulut yhteensä BOLD
44
+ 5000-6800 Henkilöstökulut yhteensä BOLD
45
+ BREAK
46
+ 6800-7000 Poistot ja arvonalentumiset HIDE_TOTAL BOLD
47
+ 6800-6900 _Suunnitelman mukaiset poistot HIDE_TOTAL BOLD
48
+ 6800-6900 __Suunnitelman mukaiset poistot DETAILS
49
+ 6800-6900 _Suunnitelman mukaiset poistot yhteensä BOLD
50
+ 6900-6990 _Arvonalentumiset pysyvien vastaavien hyödykkeistä HIDE_TOTAL BOLD
51
+ 6900-6990 __Arvonalentumiset pysyvien vastaavien hyödykkeistä DETAILS
52
+ 6900-6990 _Arvonalentumiset pysyvien vastaavien hyödykkeistä yht. BOLD
53
+ 6990-7000 _Vaihtuvien vastaavien poikkeukselliset arvonalentumiset HIDE_TOTAL BOLD
54
+ 6990-7000 __Vaihtuvien vastaavien poikkeukselliset arvonalentumiset DETAILS
55
+ 6990-7000 _Vaihtuvien vastaavien poik. arvonalentumiset yht. BOLD
56
+ 6800-7000 Poistot ja arvonalentumiset yhteensä BOLD
57
+ BREAK
58
+ 7000-8990 Liiketoiminnan muut kulut HIDE_TOTAL BOLD
59
+ 7000-8990 _Liiketoiminnan muut kulut DETAILS
60
+ 7000-8990 Liiketoiminnan muut kulut yhteensä BOLD
61
+ BREAK
62
+ 3000-9000 LIIKEVOITTO (-TAPPIO) REQUIRED BOLD
63
+ BREAK
64
+ 9000-9700 Rahoitustuotot ja -kulut HIDE_TOTAL BOLD
65
+ 9000-9040 _Tuotot osuuksista saman konsernin yrityksissä HIDE_TOTAL BOLD
66
+ 9000-9040 __Tuotot osuuksista saman konsernin yrityksissä DETAILS
67
+ 9000-9040 _Tuotot osuuksista saman konsernin yrityksissä yht. BOLD
68
+ 9040-9070 _Tuotot osuuksista omistusyhteysyrityksissä HIDE_TOTAL BOLD
69
+ 9040-9070 __Tuotot osuuksista omistusyhteysyrityksissä DETAILS
70
+ 9040-9070 _Tuotot osuuksista omistusyhteysyrityksissä yhteensä BOLD
71
+ 9080-9150 _Tuotot muista pysyvien vastaavien sijoituksista HIDE_TOTAL BOLD
72
+ 9080-9150 __Tuotot muista pysyvien vastaavien sijoituksista DETAILS
73
+ 9080-9150 _Tuotot muista pysyvien vastaavien sijoituksista yht. BOLD
74
+ 9150-9300 _Muut korko- ja rahoitustuotot HIDE_TOTAL BOLD
75
+ 9150-9300 __Muut korko- ja rahoitustuotot DETAILS
76
+ 9150-9300 _Muut korko- ja rahoitustuotot yhteensä BOLD
77
+ 9300-9370 _Arvonalentumiset pysyvien vastaavien sijoituksista HIDE_TOTAL BOLD
78
+ 9300-9370 __Arvonalentumiset pysyvien vastaavien sijoituksista DETAILS
79
+ 9300-9370 _Arvonalentumiset pys. vastaavien sijoituksista yht. BOLD
80
+ 9370-9420 _Arvonalentumiset vaihtuvien vastaavien rahoitusarvopapereista HIDE_TOTAL BOLD
81
+ 9370-9420 __Arvonalentumiset vaihtuvien vastaavien rahoitusarvopapereista DETAILS
82
+ 9370-9420 _Arvonalentumiset vaiht. vast. rahoitusarvopap. yht. BOLD
83
+ 9420-9700 _Korkokulut ja muut rahoituskulut HIDE_TOTAL BOLD
84
+ 9420-9700 __Korkokulut ja muut rahoituskulut DETAILS
85
+ 9420-9700 _Korkokulut ja muut rahoituskulut yhteensä BOLD
86
+ 9000-9700 Rahoitustuotot ja -kulut yhteensä BOLD
87
+ BREAK
88
+ 3000-9700 VOITTO (TAPPIO) ENNEN SATUNNAISIA ERIÄ REQUIRED BOLD
89
+ BREAK
90
+ 9700-9800 Satunnaiset erät HIDE_TOTAL BOLD
91
+ 9700-9740 _Satunnaiset tuotot HIDE_TOTAL BOLD
92
+ 9700-9740 __Satunnaiset tuotot DETAILS
93
+ 9700-9740 _Satunnaiset tuotot yhteensä BOLD
94
+ 9740-9780 _Satunnaiset kulut HIDE_TOTAL BOLD
95
+ 9740-9780 __Satunnaiset kulut DETAILS
96
+ 9740-9780 _Satunnaiset kulut yhteensä BOLD
97
+ 9700-9800 Satunnaiset erät yhteensä BOLD
98
+ BREAK
99
+ 3000-9800 VOITTO (TAPPIO) ENNEN TILINPÄÄTÖSSIIRTOJA JA VEROJA REQUIRED BOLD
100
+ BREAK
101
+ 9800-9900 Tilinpäätössiirrot HIDE_TOTAL BOLD
102
+ 9800-9840 _Poistoeron muutos HIDE_TOTAL BOLD
103
+ 9800-9840 __Poistoeron muutos DETAILS
104
+ 9800-9840 _Poistoeron muutos yhteensä BOLD
105
+ 9840-9900 _Vapaaehtoisten varausten muutos HIDE_TOTAL BOLD
106
+ 9840-9900 __Vapaaehtoisten varausten muutos DETAILS
107
+ 9840-9900 _Vapaaehtoisten varausten muutos yhteensä BOLD
108
+ 9800-9900 Tilinpäätössiirrot BOLD
109
+ BREAK
110
+ 9900-9980 Tuloverot HIDE_TOTAL BOLD
111
+ 9900-9980 _Tuloverot DETAILS
112
+ 9900-9980 Tuloverot yhteensä BOLD
113
+ BREAK
114
+ 9980-9990 Muut välittömät verot HIDE_TOTAL BOLD
115
+ 9980-9990 _Muut välittömät verot DETAILS
116
+ 9980-9990 Muut välittömät verot yhteensä BOLD
117
+ BREAK
118
+ 3000-9999 TILIKAUDEN VOITTO (TAPPIO) REQUIRED BOLD
@@ -0,0 +1,45 @@
1
+ # accounts title flags
2
+ 3000-3600 LIIKEVAIHTO REQUIRED BOLD
3
+ 3600-3630 Valmiiden ja keskeneräisten tuotteiden varastojen muutos
4
+ 3630-3650 Valmistus omaan käyttöön
5
+ 3650-4000 Liiketoiminnan muut tuotot
6
+ 4000-5000 Materiaalit ja palvelut HIDE_TOTAL
7
+ 4000-4450 _Aineet, tarvikkeet ja tavarat HIDE_TOTAL
8
+ 4000-4400 __Ostot tilikauden aikana
9
+ 4400-4450 __Varastojen muutos
10
+ 4450-5000 _Ulkopuoliset palvelut
11
+ 4000-5000 Materiaalit ja palvelut yhteensä
12
+ 5000-6800 Henkilöstökulut HIDE_TOTAL
13
+ 5000-6000 _Palkat ja palkkiot
14
+ 6000-6800 _Henkilösivukulut HIDE_TOTAL
15
+ 6000-6300 __Eläkekulut
16
+ 6300-6800 __Muut henkilösivukulut
17
+ 5000-6800 Henkilöstökulut yhteensä
18
+ 6800-7000 Poistot ja arvonalentumiset HIDE_TOTAL
19
+ 6800-6900 _Suunnitelman mukaiset poistot
20
+ 6900-6990 _Arvonalentumiset pysyvien vastaavien hyödykkeistä
21
+ 6990-7000 _Vaihtuvien vastaavien poikkeukselliset arvonalentumiset
22
+ 6800-7000 Poistot ja arvonalentumiset yhteensä
23
+ 7000-8990 Liiketoiminnan muut kulut
24
+ 3000-9000 LIIKEVOITTO (-TAPPIO) REQUIRED BOLD
25
+ 9000-9700 Rahoitustuotot ja -kulut HIDE_TOTAL
26
+ 9000-9040 _Tuotot osuuksista saman konsernin yrityksissä
27
+ 9040-9070 _Tuotot osuuksista omistusyhteysyrityksissä
28
+ 9080-9150 _Tuotot muista pysyvien vastaavien sijoituksista
29
+ 9150-9300 _Muut korko- ja rahoitustuotot
30
+ 9300-9370 _Arvonalentumiset pysyvien vastaavien sijoituksista
31
+ 9370-9420 _Arvonalentumiset vaihtuvien vastaavien rahoitusarvopapereista
32
+ 9420-9700 _Korkokulut ja muut rahoituskulut
33
+ 9000-9700 Rahoitustuotot ja -kulut yhteensä
34
+ 3000-9700 VOITTO (TAPPIO) ENNEN SATUNNAISIA ERIÄ REQUIRED BOLD
35
+ 9700-9800 Satunnaiset erät HIDE_TOTAL
36
+ 9700-9740 _Satunnaiset tuotot
37
+ 9740-9780 _Satunnaiset kulut
38
+ 9700-9800 Satunnaiset erät yhteensä
39
+ 3000-9800 VOITTO (TAPPIO) ENNEN TILINPÄÄTÖSSIIRTOJA JA VEROJA REQUIRED BOLD
40
+ 9800-9900 Tilinpäätössiirrot
41
+ 9800-9840 _Poistoeron muutos
42
+ 9840-9900 _Vapaaehtoisten varausten muutos
43
+ 9900-9980 Tuloverot
44
+ 9980-9990 Muut välittömät verot
45
+ 3000-9999 TILIKAUDEN VOITTO (TAPPIO) REQUIRED BOLD
@@ -0,0 +1,212 @@
1
+ import { AccountNumber, Language, PluginCode, ReportID, ReportOptions, Version } from '@dataplug/tasenor-common'
2
+ import { ReportPlugin } from '@dataplug/tasenor-common-node'
3
+ import dayjs from 'dayjs'
4
+ import quarterOfYear from 'dayjs/plugin/quarterOfYear'
5
+ dayjs.extend(quarterOfYear)
6
+
7
+ class FinnishIncomeStatementReport extends ReportPlugin {
8
+
9
+ constructor() {
10
+ super('income-statement-detailed' as ReportID, 'income-statement' as ReportID)
11
+
12
+ this.schemes = new Set(['FinnishLimitedCompanyComplete', 'FinnishLimitedCompanyLite'])
13
+
14
+ this.code = 'FinnishIncomeStatementReport' as PluginCode
15
+ this.title = 'Income Statement Report (Finnish)'
16
+ this.version = '1.0.18' as Version
17
+ this.icon = '<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><g><path d="M0,0h24v24H0V0z" fill="none"/></g><g><g><path d="M14,5H5v14h14v-9h-5V5z M8,17c-0.55,0-1-0.45-1-1s0.45-1,1-1s1,0.45,1,1S8.55,17,8,17z M8,13 c-0.55,0-1-0.45-1-1s0.45-1,1-1s1,0.45,1,1S8.55,13,8,13z M8,9C7.45,9,7,8.55,7,8s0.45-1,1-1s1,0.45,1,1S8.55,9,8,9z" opacity=".3"/><circle cx="8" cy="8" r="1"/><path d="M15,3H5C3.9,3,3.01,3.9,3.01,5L3,19c0,1.1,0.89,2,1.99,2H19c1.1,0,2-0.9,2-2V9L15,3z M19,19H5V5h9v5h5V19z"/><circle cx="8" cy="12" r="1"/><circle cx="8" cy="16" r="1"/></g></g></svg>'
18
+ this.releaseDate = '2023-03-14'
19
+ this.use = 'backend'
20
+ this.type = 'report'
21
+ this.description = 'Income statement report translated in Finnish.'
22
+
23
+ this.languages = {
24
+ en: {
25
+ 'report-income-statement-detailed': 'Detailed income statement',
26
+ 'report-income-statement': 'Income statement'
27
+ },
28
+ fi: {
29
+ 'report-income-statement-detailed': 'Tuloslaskelma tilierittelyin',
30
+ 'report-income-statement': 'Tuloslaskelma'
31
+ }
32
+ }
33
+ }
34
+
35
+ forceOptions(options) {
36
+ return {
37
+ negateAssetAndProfit: true,
38
+ addPreviousPeriod: !options.byTags
39
+ }
40
+ }
41
+
42
+ getLanguages(): Language[] {
43
+ return ['fi']
44
+ }
45
+
46
+ getReportOptions(): ReportOptions {
47
+ return {
48
+ quarter1: 'radio:1',
49
+ quarter2: 'radio:1',
50
+ quarter3: 'radio:1',
51
+ full: 'radio:1:default',
52
+ byTags: 'boolean'
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Construct column title for period.
58
+ * @param formatName
59
+ * @param period
60
+ * @param settings
61
+ */
62
+ columnTitle(id, period, options) {
63
+ const start = this.time2str(period.start_date)
64
+ let end
65
+ if (options.quarter1) {
66
+ const year = dayjs(period.start_date).year()
67
+ end = dayjs(`${year}-04-01`).subtract(1, 'day').format('YYYY-MM-DD')
68
+ } else if (options.quarter2) {
69
+ const year = dayjs(period.start_date).year()
70
+ end = dayjs(`${year}-07-01`).subtract(1, 'day').format('YYYY-MM-DD')
71
+ } else if (options.quarter3) {
72
+ const year = dayjs(period.start_date).year()
73
+ end = dayjs(`${year}-10-01`).subtract(1, 'day').format('YYYY-MM-DD')
74
+ } else {
75
+ end = this.time2str(period.end_date)
76
+ }
77
+
78
+ return '{' + start + '} - {' + end + '}'
79
+ }
80
+
81
+ async getColumns(id, entries, options, settings) {
82
+ // Construct columns for each tag and extra column for non-tagged.
83
+ if (options.byTags) {
84
+ const columns = settings.tags.map((tag) => ({
85
+ type: 'numeric',
86
+ name: `tag-${tag.tag}`,
87
+ title: tag.name
88
+ }))
89
+ columns.push({
90
+ type: 'numeric',
91
+ name: 'other',
92
+ title: '{Other}'
93
+ })
94
+ columns.unshift({
95
+ name: 'title',
96
+ title: '',
97
+ type: 'name'
98
+ })
99
+ return columns
100
+ }
101
+
102
+ return super.getColumns(id, entries, options, settings)
103
+ }
104
+
105
+ preProcessByTags(id, entries, options, settings, columns) {
106
+ // Prepapre.
107
+ const columnNames = columns.map((col) => col.name)
108
+ const tagSet = new Set(settings.tags.map(t => t.tag))
109
+
110
+ // Summarize all totals from the entries.
111
+ const totals: Record<string, Record<string, number>> = {}
112
+ columnNames.forEach((column) => (totals[column] = {}))
113
+ const accountNames = {}
114
+ const accountNumbers = new Set<AccountNumber>()
115
+ const regex = /^((\[\w+\])+)/
116
+ entries.forEach((entry) => {
117
+ let shares: string[] = []
118
+ const r = regex.exec(entry.description)
119
+ if (r) {
120
+ shares = r[1].substr(1, r[1].length - 2).split('][').filter(t => tagSet.has(t))
121
+ }
122
+ let amount = entry.amount
123
+ if (shares.length) {
124
+ // Share the amount so that rounding errors are split.
125
+ const piece = amount < 0 ? Math.ceil(amount / shares.length) : Math.floor(amount / shares.length)
126
+ shares.forEach((tag) => {
127
+ const column = `tag-${tag}`
128
+ totals[column][entry.number] = totals[column][entry.number] || 0
129
+ totals[column][entry.number] += piece
130
+ amount -= piece
131
+ })
132
+ if (amount) {
133
+ // Make semi-random starting point and distribute cents.
134
+ let i = (entry.periodId) % shares.length
135
+ const delta = amount < 0 ? -1 : 1
136
+ for (let count = Math.abs(amount); count > 0; count--) {
137
+ const column = `tag-${shares[i]}`
138
+ totals[column][entry.number] += delta
139
+ amount -= delta
140
+ i = (i + 1) % shares.length
141
+ }
142
+ }
143
+ }
144
+
145
+ if (amount) {
146
+ totals.other[entry.number] = totals.other[entry.number] || 0
147
+ totals.other[entry.number] += amount
148
+ }
149
+
150
+ accountNames[entry.number] = entry.name
151
+ accountNumbers.add(entry.number)
152
+ })
153
+
154
+ return this.parseAndCombineReport([...accountNumbers], accountNames, columns, options.format, totals)
155
+ }
156
+
157
+ preProcess(id, entries, options, settings, columns) {
158
+ if (options.byTags) {
159
+ return this.preProcessByTags(id, entries, options, settings, columns)
160
+ }
161
+
162
+ const columnNames = columns.map((col) => col.name)
163
+
164
+ // Summarize all totals from the entries.
165
+ const totals = {}
166
+ columnNames.forEach((column) => (totals[column] = {}))
167
+ const accountNames = {}
168
+ const accountNumbers = new Set<AccountNumber>()
169
+ entries.forEach((entry) => {
170
+ const column = 'period' + entry.periodId
171
+ totals[column][entry.number] = totals[column][entry.number] || 0
172
+ totals[column][entry.number] += entry.amount
173
+ accountNames[entry.number] = entry.name
174
+ accountNumbers.add(entry.number)
175
+ })
176
+
177
+ return this.parseAndCombineReport([...accountNumbers], accountNames, columns, options.format, totals)
178
+ }
179
+
180
+ /**
181
+ * Remove empty columns if report made by tags.
182
+ */
183
+ postProcess(id, data, options, settings, columns) {
184
+ if (!options.byTags) {
185
+ return data
186
+ }
187
+
188
+ // Find empty columns.
189
+ const found = new Set()
190
+ for (const line of data) {
191
+ if (!line.amounts) {
192
+ continue
193
+ }
194
+ for (const [k, v] of Object.entries(line.amounts)) {
195
+ if (v !== null && !isNaN(v as number)) {
196
+ found.add(k)
197
+ }
198
+ }
199
+ }
200
+
201
+ // Remove empty columns.
202
+ for (let i = 0; i < columns.length; i++) {
203
+ if (columns[i].type === 'numeric' && !found.has(columns[i].name)) {
204
+ columns.splice(i, 1)
205
+ i--
206
+ }
207
+ }
208
+ return data
209
+ }
210
+ }
211
+
212
+ export default FinnishIncomeStatementReport
@@ -0,0 +1,118 @@
1
+ # accounts title flags
2
+ 3000-3600 LIIKEVAIHTO DETAILS
3
+ BREAK
4
+ 3000-3600 LIIKEVAIHTO REQUIRED BOLD
5
+ BREAK
6
+ 3600-3630 Valmiiden ja keskeneräisten tuotteiden varastojen muutos HIDE_TOTAL BOLD
7
+ 3600-3630 _Valmiiden ja keskeneräisten tuotteiden varastojen muutos DETAILS
8
+ 3600-3630 Tuotteiden varastojen muutos yhteensä BOLD
9
+ BREAK
10
+ 3630-3650 Valmistus omaan käyttöön HIDE_TOTAL BOLD
11
+ 3630-3650 _Valmistus omaan käyttöön DETAILS
12
+ 3630-3650 Valmistus omaan käyttöön yhteensä BOLD
13
+ BREAK
14
+ 3650-4000 Liiketoiminnan muut tuotot HIDE_TOTAL BOLD
15
+ 3650-4000 _Liiketoiminnan muut tuotot DETAILS
16
+ 3650-4000 Liiketoiminnan muut tuotot yhteensä BOLD
17
+ BREAK
18
+ 4000-5000 Materiaalit ja palvelut HIDE_TOTAL BOLD
19
+ 4000-4450 _Aineet, tarvikkeet ja tavarat HIDE_TOTAL BOLD
20
+ 4000-4400 __Ostot tilikauden aikana HIDE_TOTAL BOLD
21
+ 4000-4400 ___Ostot tilikauden aikana DETAILS
22
+ 4000-4400 __Ostot tilikauden aikana yhteensä BOLD
23
+ 4400-4450 __Varastojen muutos HIDE_TOTAL BOLD
24
+ 4400-4450 ___Varastojen muutos DETAILS
25
+ 4400-4450 __Varastojen muutos yhteensä BOLD
26
+ 4000-4450 _Aineet, tarvikkeet ja tavarat yhteensä BOLD
27
+ 4450-5000 _Ulkopuoliset palvelut HIDE_TOTAL BOLD
28
+ 4450-5000 __Ulkopuoliset palvelut DETAILS
29
+ 4450-5000 _Ulkopuoliset palvelut yhteensä BOLD
30
+ 4000-5000 Materiaalit ja palvelut yhteensä BOLD
31
+ BREAK
32
+ 5000-6800 Henkilöstökulut HIDE_TOTAL BOLD
33
+ 5000-6000 _Palkat ja palkkiot HIDE_TOTAL BOLD
34
+ 5000-6000 __Palkat ja palkkiot DETAILS
35
+ 5000-6000 _Palkat ja palkkiot yhteensä BOLD
36
+ 6000-6800 _Henkilösivukulut HIDE_TOTAL BOLD
37
+ 6000-6300 __Eläkekulut HIDE_TOTAL BOLD
38
+ 6000-6300 ___Eläkekulut DETAILS
39
+ 6000-6300 __Eläkekulut yhteensä BOLD
40
+ 6300-6800 __Muut henkilösivukulut HIDE_TOTAL BOLD
41
+ 6300-6800 ___Muut henkilösivukulut DETAILS
42
+ 6300-6800 __Muut henkilösivukulut yhteensä BOLD
43
+ 6000-6800 _Henkilösivukulut yhteensä BOLD
44
+ 5000-6800 Henkilöstökulut yhteensä BOLD
45
+ BREAK
46
+ 6800-7000 Poistot ja arvonalentumiset HIDE_TOTAL BOLD
47
+ 6800-6900 _Suunnitelman mukaiset poistot HIDE_TOTAL BOLD
48
+ 6800-6900 __Suunnitelman mukaiset poistot DETAILS
49
+ 6800-6900 _Suunnitelman mukaiset poistot yhteensä BOLD
50
+ 6900-6990 _Arvonalentumiset pysyvien vastaavien hyödykkeistä HIDE_TOTAL BOLD
51
+ 6900-6990 __Arvonalentumiset pysyvien vastaavien hyödykkeistä DETAILS
52
+ 6900-6990 _Arvonalentumiset pysyvien vastaavien hyödykkeistä yht. BOLD
53
+ 6990-7000 _Vaihtuvien vastaavien poikkeukselliset arvonalentumiset HIDE_TOTAL BOLD
54
+ 6990-7000 __Vaihtuvien vastaavien poikkeukselliset arvonalentumiset DETAILS
55
+ 6990-7000 _Vaihtuvien vastaavien poik. arvonalentumiset yht. BOLD
56
+ 6800-7000 Poistot ja arvonalentumiset yhteensä BOLD
57
+ BREAK
58
+ 7000-8990 Liiketoiminnan muut kulut HIDE_TOTAL BOLD
59
+ 7000-8990 _Liiketoiminnan muut kulut DETAILS
60
+ 7000-8990 Liiketoiminnan muut kulut yhteensä BOLD
61
+ BREAK
62
+ 3000-9000 LIIKEVOITTO (-TAPPIO) REQUIRED BOLD
63
+ BREAK
64
+ 9000-9700 Rahoitustuotot ja -kulut HIDE_TOTAL BOLD
65
+ 9000-9040 _Tuotot osuuksista saman konsernin yrityksissä HIDE_TOTAL BOLD
66
+ 9000-9040 __Tuotot osuuksista saman konsernin yrityksissä DETAILS
67
+ 9000-9040 _Tuotot osuuksista saman konsernin yrityksissä yht. BOLD
68
+ 9040-9070 _Tuotot osuuksista omistusyhteysyrityksissä HIDE_TOTAL BOLD
69
+ 9040-9070 __Tuotot osuuksista omistusyhteysyrityksissä DETAILS
70
+ 9040-9070 _Tuotot osuuksista omistusyhteysyrityksissä yhteensä BOLD
71
+ 9080-9150 _Tuotot muista pysyvien vastaavien sijoituksista HIDE_TOTAL BOLD
72
+ 9080-9150 __Tuotot muista pysyvien vastaavien sijoituksista DETAILS
73
+ 9080-9150 _Tuotot muista pysyvien vastaavien sijoituksista yht. BOLD
74
+ 9150-9300 _Muut korko- ja rahoitustuotot HIDE_TOTAL BOLD
75
+ 9150-9300 __Muut korko- ja rahoitustuotot DETAILS
76
+ 9150-9300 _Muut korko- ja rahoitustuotot yhteensä BOLD
77
+ 9300-9370 _Arvonalentumiset pysyvien vastaavien sijoituksista HIDE_TOTAL BOLD
78
+ 9300-9370 __Arvonalentumiset pysyvien vastaavien sijoituksista DETAILS
79
+ 9300-9370 _Arvonalentumiset pys. vastaavien sijoituksista yht. BOLD
80
+ 9370-9420 _Arvonalentumiset vaihtuvien vastaavien rahoitusarvopapereista HIDE_TOTAL BOLD
81
+ 9370-9420 __Arvonalentumiset vaihtuvien vastaavien rahoitusarvopapereista DETAILS
82
+ 9370-9420 _Arvonalentumiset vaiht. vast. rahoitusarvopap. yht. BOLD
83
+ 9420-9700 _Korkokulut ja muut rahoituskulut HIDE_TOTAL BOLD
84
+ 9420-9700 __Korkokulut ja muut rahoituskulut DETAILS
85
+ 9420-9700 _Korkokulut ja muut rahoituskulut yhteensä BOLD
86
+ 9000-9700 Rahoitustuotot ja -kulut yhteensä BOLD
87
+ BREAK
88
+ 3000-9700 VOITTO (TAPPIO) ENNEN SATUNNAISIA ERIÄ REQUIRED BOLD
89
+ BREAK
90
+ 9700-9800 Satunnaiset erät HIDE_TOTAL BOLD
91
+ 9700-9740 _Satunnaiset tuotot HIDE_TOTAL BOLD
92
+ 9700-9740 __Satunnaiset tuotot DETAILS
93
+ 9700-9740 _Satunnaiset tuotot yhteensä BOLD
94
+ 9740-9780 _Satunnaiset kulut HIDE_TOTAL BOLD
95
+ 9740-9780 __Satunnaiset kulut DETAILS
96
+ 9740-9780 _Satunnaiset kulut yhteensä BOLD
97
+ 9700-9800 Satunnaiset erät yhteensä BOLD
98
+ BREAK
99
+ 3000-9800 VOITTO (TAPPIO) ENNEN TILINPÄÄTÖSSIIRTOJA JA VEROJA REQUIRED BOLD
100
+ BREAK
101
+ 9800-9900 Tilinpäätössiirrot HIDE_TOTAL BOLD
102
+ 9800-9840 _Poistoeron muutos HIDE_TOTAL BOLD
103
+ 9800-9840 __Poistoeron muutos DETAILS
104
+ 9800-9840 _Poistoeron muutos yhteensä BOLD
105
+ 9840-9900 _Vapaaehtoisten varausten muutos HIDE_TOTAL BOLD
106
+ 9840-9900 __Vapaaehtoisten varausten muutos DETAILS
107
+ 9840-9900 _Vapaaehtoisten varausten muutos yhteensä BOLD
108
+ 9800-9900 Tilinpäätössiirrot BOLD
109
+ BREAK
110
+ 9900-9980 Tuloverot HIDE_TOTAL BOLD
111
+ 9900-9980 _Tuloverot DETAILS
112
+ 9900-9980 Tuloverot yhteensä BOLD
113
+ BREAK
114
+ 9980-9990 Muut välittömät verot HIDE_TOTAL BOLD
115
+ 9980-9990 _Muut välittömät verot DETAILS
116
+ 9980-9990 Muut välittömät verot yhteensä BOLD
117
+ BREAK
118
+ 3000-9999 TILIKAUDEN VOITTO (TAPPIO) REQUIRED BOLD