@jjlmoya/utils-finance 1.4.0 → 1.7.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.
Files changed (179) hide show
  1. package/package.json +2 -1
  2. package/src/category/i18n/de.ts +158 -0
  3. package/src/category/i18n/id.ts +158 -0
  4. package/src/category/i18n/it.ts +158 -0
  5. package/src/category/i18n/ja.ts +158 -0
  6. package/src/category/i18n/ko.ts +158 -0
  7. package/src/category/i18n/nl.ts +158 -0
  8. package/src/category/i18n/pl.ts +158 -0
  9. package/src/category/i18n/pt.ts +158 -0
  10. package/src/category/i18n/ru.ts +158 -0
  11. package/src/category/i18n/sv.ts +158 -0
  12. package/src/category/i18n/tr.ts +158 -0
  13. package/src/category/i18n/zh.ts +158 -0
  14. package/src/category/index.ts +13 -1
  15. package/src/tests/category_validation.test.ts +73 -0
  16. package/src/tests/faq_count.test.ts +1 -1
  17. package/src/tests/i18n_coverage.test.ts +36 -0
  18. package/src/tests/locale_completeness.test.ts +3 -0
  19. package/src/tests/slug_language_code_format.test.ts +23 -0
  20. package/src/tests/slug_uniqueness.test.ts +81 -0
  21. package/src/tests/title_quality.test.ts +1 -1
  22. package/src/tool/compoundInterest/i18n/de.ts +208 -0
  23. package/src/tool/compoundInterest/i18n/id.ts +208 -0
  24. package/src/tool/compoundInterest/i18n/it.ts +208 -0
  25. package/src/tool/compoundInterest/i18n/ja.ts +207 -0
  26. package/src/tool/compoundInterest/i18n/ko.ts +207 -0
  27. package/src/tool/compoundInterest/i18n/nl.ts +208 -0
  28. package/src/tool/compoundInterest/i18n/pl.ts +208 -0
  29. package/src/tool/compoundInterest/i18n/pt.ts +208 -0
  30. package/src/tool/compoundInterest/i18n/ru.ts +208 -0
  31. package/src/tool/compoundInterest/i18n/sv.ts +208 -0
  32. package/src/tool/compoundInterest/i18n/tr.ts +208 -0
  33. package/src/tool/compoundInterest/i18n/zh.ts +202 -0
  34. package/src/tool/compoundInterest/index.ts +15 -7
  35. package/src/tool/courtFeeCalculator/i18n/de.ts +152 -0
  36. package/src/tool/courtFeeCalculator/i18n/fr.ts +1 -1
  37. package/src/tool/courtFeeCalculator/i18n/id.ts +152 -0
  38. package/src/tool/courtFeeCalculator/i18n/it.ts +152 -0
  39. package/src/tool/courtFeeCalculator/i18n/ja.ts +152 -0
  40. package/src/tool/courtFeeCalculator/i18n/ko.ts +152 -0
  41. package/src/tool/courtFeeCalculator/i18n/nl.ts +152 -0
  42. package/src/tool/courtFeeCalculator/i18n/pl.ts +152 -0
  43. package/src/tool/courtFeeCalculator/i18n/pt.ts +152 -0
  44. package/src/tool/courtFeeCalculator/i18n/ru.ts +152 -0
  45. package/src/tool/courtFeeCalculator/i18n/sv.ts +152 -0
  46. package/src/tool/courtFeeCalculator/i18n/tr.ts +152 -0
  47. package/src/tool/courtFeeCalculator/i18n/zh.ts +152 -0
  48. package/src/tool/courtFeeCalculator/index.ts +16 -8
  49. package/src/tool/debtSnowball/i18n/de.ts +160 -0
  50. package/src/tool/debtSnowball/i18n/id.ts +160 -0
  51. package/src/tool/debtSnowball/i18n/it.ts +160 -0
  52. package/src/tool/debtSnowball/i18n/ja.ts +157 -0
  53. package/src/tool/debtSnowball/i18n/ko.ts +160 -0
  54. package/src/tool/debtSnowball/i18n/nl.ts +160 -0
  55. package/src/tool/debtSnowball/i18n/pl.ts +160 -0
  56. package/src/tool/debtSnowball/i18n/pt.ts +160 -0
  57. package/src/tool/debtSnowball/i18n/ru.ts +160 -0
  58. package/src/tool/debtSnowball/i18n/sv.ts +160 -0
  59. package/src/tool/debtSnowball/i18n/tr.ts +160 -0
  60. package/src/tool/debtSnowball/i18n/zh.ts +160 -0
  61. package/src/tool/debtSnowball/index.ts +17 -9
  62. package/src/tool/fireCalculator/i18n/de.ts +261 -0
  63. package/src/tool/fireCalculator/i18n/id.ts +261 -0
  64. package/src/tool/fireCalculator/i18n/it.ts +261 -0
  65. package/src/tool/fireCalculator/i18n/ja.ts +261 -0
  66. package/src/tool/fireCalculator/i18n/ko.ts +261 -0
  67. package/src/tool/fireCalculator/i18n/nl.ts +261 -0
  68. package/src/tool/fireCalculator/i18n/pl.ts +261 -0
  69. package/src/tool/fireCalculator/i18n/pt.ts +261 -0
  70. package/src/tool/fireCalculator/i18n/ru.ts +261 -0
  71. package/src/tool/fireCalculator/i18n/sv.ts +261 -0
  72. package/src/tool/fireCalculator/i18n/tr.ts +261 -0
  73. package/src/tool/fireCalculator/i18n/zh.ts +261 -0
  74. package/src/tool/fireCalculator/index.ts +15 -7
  75. package/src/tool/ibanBicSwiftConverter/i18n/de.ts +128 -0
  76. package/src/tool/ibanBicSwiftConverter/i18n/id.ts +128 -0
  77. package/src/tool/ibanBicSwiftConverter/i18n/it.ts +128 -0
  78. package/src/tool/ibanBicSwiftConverter/i18n/ja.ts +128 -0
  79. package/src/tool/ibanBicSwiftConverter/i18n/ko.ts +128 -0
  80. package/src/tool/ibanBicSwiftConverter/i18n/nl.ts +128 -0
  81. package/src/tool/ibanBicSwiftConverter/i18n/pl.ts +128 -0
  82. package/src/tool/ibanBicSwiftConverter/i18n/pt.ts +128 -0
  83. package/src/tool/ibanBicSwiftConverter/i18n/ru.ts +128 -0
  84. package/src/tool/ibanBicSwiftConverter/i18n/sv.ts +128 -0
  85. package/src/tool/ibanBicSwiftConverter/i18n/tr.ts +128 -0
  86. package/src/tool/ibanBicSwiftConverter/i18n/zh.ts +128 -0
  87. package/src/tool/ibanBicSwiftConverter/index.ts +15 -7
  88. package/src/tool/inflation/i18n/de.ts +297 -0
  89. package/src/tool/inflation/i18n/id.ts +297 -0
  90. package/src/tool/inflation/i18n/it.ts +297 -0
  91. package/src/tool/inflation/i18n/ja.ts +297 -0
  92. package/src/tool/inflation/i18n/ko.ts +297 -0
  93. package/src/tool/inflation/i18n/nl.ts +297 -0
  94. package/src/tool/inflation/i18n/pl.ts +297 -0
  95. package/src/tool/inflation/i18n/pt.ts +297 -0
  96. package/src/tool/inflation/i18n/ru.ts +297 -0
  97. package/src/tool/inflation/i18n/sv.ts +297 -0
  98. package/src/tool/inflation/i18n/tr.ts +297 -0
  99. package/src/tool/inflation/i18n/zh.ts +297 -0
  100. package/src/tool/inflation/index.ts +17 -9
  101. package/src/tool/lateInterest/i18n/de.ts +224 -0
  102. package/src/tool/lateInterest/i18n/id.ts +224 -0
  103. package/src/tool/lateInterest/i18n/it.ts +224 -0
  104. package/src/tool/lateInterest/i18n/ja.ts +224 -0
  105. package/src/tool/lateInterest/i18n/ko.ts +224 -0
  106. package/src/tool/lateInterest/i18n/nl.ts +224 -0
  107. package/src/tool/lateInterest/i18n/pl.ts +224 -0
  108. package/src/tool/lateInterest/i18n/pt.ts +224 -0
  109. package/src/tool/lateInterest/i18n/ru.ts +224 -0
  110. package/src/tool/lateInterest/i18n/sv.ts +224 -0
  111. package/src/tool/lateInterest/i18n/tr.ts +224 -0
  112. package/src/tool/lateInterest/i18n/zh.ts +224 -0
  113. package/src/tool/lateInterest/index.ts +17 -9
  114. package/src/tool/legalInterestRate/i18n/de.ts +143 -0
  115. package/src/tool/legalInterestRate/i18n/id.ts +143 -0
  116. package/src/tool/legalInterestRate/i18n/it.ts +143 -0
  117. package/src/tool/legalInterestRate/i18n/ja.ts +143 -0
  118. package/src/tool/legalInterestRate/i18n/ko.ts +143 -0
  119. package/src/tool/legalInterestRate/i18n/nl.ts +143 -0
  120. package/src/tool/legalInterestRate/i18n/pl.ts +143 -0
  121. package/src/tool/legalInterestRate/i18n/pt.ts +143 -0
  122. package/src/tool/legalInterestRate/i18n/ru.ts +143 -0
  123. package/src/tool/legalInterestRate/i18n/sv.ts +143 -0
  124. package/src/tool/legalInterestRate/i18n/tr.ts +143 -0
  125. package/src/tool/legalInterestRate/i18n/zh.ts +143 -0
  126. package/src/tool/legalInterestRate/index.ts +17 -9
  127. package/src/tool/lotteryOptimizer/i18n/de.ts +177 -0
  128. package/src/tool/lotteryOptimizer/i18n/id.ts +177 -0
  129. package/src/tool/lotteryOptimizer/i18n/it.ts +177 -0
  130. package/src/tool/lotteryOptimizer/i18n/ja.ts +177 -0
  131. package/src/tool/lotteryOptimizer/i18n/ko.ts +177 -0
  132. package/src/tool/lotteryOptimizer/i18n/nl.ts +177 -0
  133. package/src/tool/lotteryOptimizer/i18n/pl.ts +177 -0
  134. package/src/tool/lotteryOptimizer/i18n/pt.ts +177 -0
  135. package/src/tool/lotteryOptimizer/i18n/ru.ts +177 -0
  136. package/src/tool/lotteryOptimizer/i18n/sv.ts +177 -0
  137. package/src/tool/lotteryOptimizer/i18n/tr.ts +177 -0
  138. package/src/tool/lotteryOptimizer/i18n/zh.ts +177 -0
  139. package/src/tool/lotteryOptimizer/index.ts +17 -9
  140. package/src/tool/mortgage/i18n/de.ts +223 -0
  141. package/src/tool/mortgage/i18n/id.ts +219 -0
  142. package/src/tool/mortgage/i18n/it.ts +223 -0
  143. package/src/tool/mortgage/i18n/ja.ts +219 -0
  144. package/src/tool/mortgage/i18n/ko.ts +219 -0
  145. package/src/tool/mortgage/i18n/nl.ts +219 -0
  146. package/src/tool/mortgage/i18n/pl.ts +219 -0
  147. package/src/tool/mortgage/i18n/pt.ts +219 -0
  148. package/src/tool/mortgage/i18n/ru.ts +219 -0
  149. package/src/tool/mortgage/i18n/sv.ts +219 -0
  150. package/src/tool/mortgage/i18n/tr.ts +219 -0
  151. package/src/tool/mortgage/i18n/zh.ts +219 -0
  152. package/src/tool/mortgage/index.ts +15 -7
  153. package/src/tool/percentageCalculator/i18n/de.ts +229 -0
  154. package/src/tool/percentageCalculator/i18n/id.ts +229 -0
  155. package/src/tool/percentageCalculator/i18n/it.ts +229 -0
  156. package/src/tool/percentageCalculator/i18n/ja.ts +229 -0
  157. package/src/tool/percentageCalculator/i18n/ko.ts +229 -0
  158. package/src/tool/percentageCalculator/i18n/nl.ts +229 -0
  159. package/src/tool/percentageCalculator/i18n/pl.ts +229 -0
  160. package/src/tool/percentageCalculator/i18n/pt.ts +229 -0
  161. package/src/tool/percentageCalculator/i18n/ru.ts +229 -0
  162. package/src/tool/percentageCalculator/i18n/sv.ts +229 -0
  163. package/src/tool/percentageCalculator/i18n/tr.ts +229 -0
  164. package/src/tool/percentageCalculator/i18n/zh.ts +229 -0
  165. package/src/tool/percentageCalculator/index.ts +15 -7
  166. package/src/tool/rentIncreaseCalculator/i18n/de.ts +136 -0
  167. package/src/tool/rentIncreaseCalculator/i18n/id.ts +136 -0
  168. package/src/tool/rentIncreaseCalculator/i18n/it.ts +136 -0
  169. package/src/tool/rentIncreaseCalculator/i18n/ja.ts +136 -0
  170. package/src/tool/rentIncreaseCalculator/i18n/ko.ts +136 -0
  171. package/src/tool/rentIncreaseCalculator/i18n/nl.ts +136 -0
  172. package/src/tool/rentIncreaseCalculator/i18n/pl.ts +136 -0
  173. package/src/tool/rentIncreaseCalculator/i18n/pt.ts +136 -0
  174. package/src/tool/rentIncreaseCalculator/i18n/ru.ts +136 -0
  175. package/src/tool/rentIncreaseCalculator/i18n/sv.ts +136 -0
  176. package/src/tool/rentIncreaseCalculator/i18n/tr.ts +136 -0
  177. package/src/tool/rentIncreaseCalculator/i18n/zh.ts +136 -0
  178. package/src/tool/rentIncreaseCalculator/index.ts +17 -9
  179. package/src/types.ts +1 -1
@@ -0,0 +1,229 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { PercentageCalculatorUI } from '../ui';
4
+
5
+ const slug = 'kalykulyator-protsentov';
6
+ const title = 'Калькулятор процентов 4 в 1: скидки, надбавки и уценки';
7
+ const description =
8
+ 'Легко рассчитывайте проценты онлайн бесплатно. 4 инструмента в 1: найти X% от Y, процентная разница, прибавить или вычесть НДС, скидки и автоматические чаевые.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Как работает калькулятор?',
13
+ answer:
14
+ 'Просто введите значения в поля соответствующего вашему случаю блока, и наш калькулятор обработает формулу без необходимости нажимать кнопку «Рассчитать».',
15
+ },
16
+ {
17
+ question: 'Подходит ли он для расчета НДС или налогов?',
18
+ answer:
19
+ 'Да, блок 4 («Прибавить или вычесть процент») разработан именно для таких случаев, как применение НДС 20% к базовой цене или расчет налоговых вычетов.',
20
+ },
21
+ {
22
+ question: 'Работает ли он с десятичными и отрицательными числами?',
23
+ answer:
24
+ 'Конечно. Вы можете вводить десятичные числа (через точку), и он также будет работать с отрицательными значениями, если вам нужно проанализировать убытки в бухгалтерском балансе.',
25
+ },
26
+ {
27
+ question: 'Могу ли я скопировать результаты?',
28
+ answer:
29
+ 'Да, в каждом блоке есть кнопка в поле результата, которая мгновенно копирует число в буфер обмена вашего устройства, чтобы вы могли вставить его в другое приложение или документ.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Определите вашу математическую задачу',
36
+ text: 'Прочитайте заголовки 4 блоков и выберите тот, который соответствует вашему запросу (например, «Сколько будет 20% от 50?» -> Блок 1).',
37
+ },
38
+ {
39
+ name: 'Введите числа',
40
+ text: 'Заполните поля «X» и «Y». Не беспокойтесь о порядке — текст в каждом блоке визуально подскажет вам, что делать.',
41
+ },
42
+ {
43
+ name: 'Скопируйте мгновенный результат',
44
+ text: 'Число появится в реальном времени внизу по мере ввода. Нажмите на иконку копирования, если хотите использовать его в другом месте.',
45
+ },
46
+ ];
47
+
48
+ const faqSchema: WithContext<FAQPage> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'FAQPage',
51
+ mainEntity: faqData.map((item) => ({
52
+ '@type': 'Question',
53
+ name: item.question,
54
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
55
+ })),
56
+ };
57
+
58
+ const howToSchema: WithContext<HowTo> = {
59
+ '@context': 'https://schema.org',
60
+ '@type': 'HowTo',
61
+ name: title,
62
+ description,
63
+ step: howToData.map((step, i) => ({
64
+ '@type': 'HowToStep',
65
+ position: i + 1,
66
+ name: step.name,
67
+ text: step.text,
68
+ })),
69
+ };
70
+
71
+ const appSchema: WithContext<SoftwareApplication> = {
72
+ '@context': 'https://schema.org',
73
+ '@type': 'SoftwareApplication',
74
+ name: title,
75
+ description,
76
+ applicationCategory: 'FinanceApplication',
77
+ operatingSystem: 'All',
78
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'RUB' },
79
+ inLanguage: 'ru',
80
+ };
81
+
82
+ export const content: ToolLocaleContent<PercentageCalculatorUI> = {
83
+ slug,
84
+ title,
85
+ description,
86
+ faqTitle: 'Часто задаваемые вопросы',
87
+ faq: faqData,
88
+ bibliographyTitle: 'Источники и ссылки',
89
+ bibliography: [
90
+ {
91
+ name: 'Расчет процентов — Википедия',
92
+ url: 'https://ru.wikipedia.org/wiki/Процент',
93
+ },
94
+ {
95
+ name: 'Основные математические понятия — Khan Academy',
96
+ url: 'https://ru.khanacademy.org/math/pre-algebra/pre-algebra-ratios-rates/pre-algebra-percents/v/describing-the-meaning-of-percent',
97
+ },
98
+ ],
99
+ howTo: howToData,
100
+ schemas: [faqSchema, howToSchema, appSchema],
101
+ seo: [
102
+ {
103
+ type: 'title',
104
+ text: 'Калькулятор процентов 4 в 1: освойте быстрые расчеты',
105
+ level: 2,
106
+ },
107
+ {
108
+ type: 'title',
109
+ text: 'Для чего нужен универсальный калькулятор процентов?',
110
+ level: 3,
111
+ },
112
+ {
113
+ type: 'paragraph',
114
+ html: 'Вычисление процентов — одна из самых частых математических операций в нашей повседневной жизни. От расчета скидки на распродаже и определения суммы чаевых в ресторане до вычисления маржи прибыли в бизнесе или процентов по кредиту. Несмотря на то что это повседневные задачи, не всегда легко выполнить их в уме или вспомнить точную формулу.',
115
+ },
116
+ {
117
+ type: 'paragraph',
118
+ html: 'Наш калькулятор процентов 4 в 1 объединяет самые востребованные сценарии. Вам больше не нужно искать в Google «как найти 20 процентов» или «формула расчета процентов». У вас есть четыре основные операции в одном месте, в интерактивном формате и с мгновенными результатами.',
119
+ },
120
+ {
121
+ type: 'title',
122
+ text: 'Разбор 4 самых популярных случаев использования',
123
+ level: 3,
124
+ },
125
+ {
126
+ type: 'paragraph',
127
+ html: 'Чтобы облегчить вам жизнь, мы разделили инструмент на четыре наглядных блока, которые решают реальные проблемы, с которыми мы сталкиваемся каждый день:',
128
+ },
129
+ {
130
+ type: 'card',
131
+ icon: 'mdi:percent',
132
+ title: '1. Сколько будет X% от Y?',
133
+ html: '<p><strong>Классический случай.</strong> Полезен для расчета скидок или чаевых. Если вы хотите узнать, сколько составит 15% от 1200₽, этот инструмент для вас. Формула просто делит процент на 100 и умножает на общее значение.</p>',
134
+ },
135
+ {
136
+ type: 'card',
137
+ icon: 'mdi:division',
138
+ title: '2. Какой процент составляет X от Y?',
139
+ html: '<p><strong>Идеально для пропорций.</strong> Если вы набрали 45 баллов из 60 на экзамене, какой это процент? Эта функция делит часть на целое и умножает на сто, давая вам точный относительный вес.</p>',
140
+ },
141
+ {
142
+ type: 'card',
143
+ icon: 'mdi:chart-line-variant',
144
+ title: '3. Процентное увеличение или уменьшение',
145
+ html: '<p><strong>Идеально для финансов и аналитики.</strong> На сколько выросла арендная плата по сравнению с прошлым годом? Если раньше вы платили 50 000₽, а теперь 52 500₽, эта функция скажет вам, что рост составил 5%. Измеряет рост или убыль между двумя числами.</p>',
146
+ },
147
+ {
148
+ type: 'card',
149
+ icon: 'mdi:calculator',
150
+ title: '4. Прибавить или вычесть процент из значения',
151
+ html: '<p><strong>Суперполезно для НДС.</strong> Если у вас есть базовая цена (например, 1000₽) и вам нужно добавить 20% НДС, этот калькулятор сразу выдаст итоговые 1200₽ без промежуточных действий. Аналогично он служит для применения прямой скидки (например, вычесть 20%).</p>',
152
+ },
153
+ {
154
+ type: 'title',
155
+ text: 'Распространенные мифы о расчете процентов',
156
+ level: 3,
157
+ },
158
+ {
159
+ type: 'paragraph',
160
+ html: 'Часто мы пасуем перед большими процентами или десятичными дробями, но есть математические «хитрости», которые могут упростить жизнь. Самая известная — <strong>обратимость процентов</strong>.',
161
+ },
162
+ {
163
+ type: 'tip',
164
+ title: 'Трюк с обратимостью',
165
+ html: '<p>Знаете ли вы, что X% от Y в точности равно Y% от X? Например, если вас попросят посчитать 18% от 50 в уме, это может показаться сложным. Но если перевернуть, то 50% от 18 — это очень просто: 9! Это применимо абсолютно к любому числу и является отличной выручалочкой в повседневной жизни.</p>',
166
+ },
167
+ {
168
+ type: 'title',
169
+ text: 'Почему мы ошибаемся при расчете роста',
170
+ level: 3,
171
+ },
172
+ {
173
+ type: 'paragraph',
174
+ html: 'Одна из самых частых ошибок случается в 3-м случае: процентное увеличение или уменьшение. Представим, что акция на бирже стоит 100₽, падает на 50%, а на следующий день растет на 50%. Интуиция говорит нам, что она снова стоит 100₽, но это неверно.',
175
+ },
176
+ {
177
+ type: 'paragraph',
178
+ html: 'Если она падает на 50% от 100₽, ее новая стоимость — 50₽. Если от этих 50₽ она растет на 50%, прирост составит половину от 50 (25₽). Таким образом, итоговая цена будет 75₽. Это классический пример того, почему процентные взлеты и падения несимметричны и почему динамические калькуляторы, подобные этому, предотвращают серьезные финансовые ошибки.',
179
+ },
180
+ {
181
+ type: 'title',
182
+ text: 'Профессиональное и академическое использование',
183
+ level: 3,
184
+ },
185
+ {
186
+ type: 'paragraph',
187
+ html: 'Наш интерфейс не содержит отвлекающих факторов и спроектирован для <strong>быстрой работы</strong>. Вы можете держать его в закрепленной вкладке браузера, быстро переключаться между полями и, благодаря кнопке копирования рядом с результатом, переносить точные данные в Excel или Google Sheets без риска опечаток.',
188
+ },
189
+ {
190
+ type: 'list',
191
+ items: [
192
+ 'Электронная коммерция и физические магазины: быстрый расчет розничной цены с применением торговой наценки и добавлением НДС.',
193
+ 'Управление персоналом: определение разрыва в оплате труда, налоговых удержаний и прибавок к зарплате относительно индекса потребительских цен.',
194
+ 'Университетское образование: преподаватели, выравнивающие оценки, или студенты научных специальностей, анализирующие отклонения в своих экспериментах.',
195
+ 'Цифровой маркетинг: измерение CTR (Click Through Rate), ROAS (окупаемость расходов на рекламу) или коэффициента конверсии в eCommerce.',
196
+ ],
197
+ },
198
+ ],
199
+ ui: {
200
+ labelTitle: 'Калькулятор процентов',
201
+ labelCase1Title: 'Случай 1',
202
+ labelCase1Question: 'Сколько будет X% от Y?',
203
+ labelCase1Placeholder1: 'X',
204
+ labelCase1Placeholder2: 'Y',
205
+ labelCase1Formula: 'Формула: (X / 100) × Y',
206
+ labelCase2Title: 'Случай 2',
207
+ labelCase2Question: 'Какой процент составляет X от Y?',
208
+ labelCase2Placeholder1: 'X',
209
+ labelCase2Placeholder2: 'Y',
210
+ labelCase2Formula: 'Формула: (X / Y) × 100',
211
+ labelCase3Title: 'Случай 3',
212
+ labelCase3Question: 'Процентная разница между двумя значениями',
213
+ labelCase3Placeholder1: 'Значение 1',
214
+ labelCase3Placeholder2: 'Значение 2',
215
+ labelCase3Formula: 'Формула: ((Значение 2 - Значение 1) / |Значение 1|) × 100',
216
+ labelCase4Title: 'Случай 4',
217
+ labelCase4Question: 'Прибавить или вычесть процент из значения',
218
+ labelCase4Placeholder1: 'Значение',
219
+ labelCase4Placeholder2: '%',
220
+ labelCase4Formula: 'Формула: Значение ± (Значение × (% / 100))',
221
+ labelCase4AddLabel: 'Сумма (Значение + %)',
222
+ labelCase4SubtractLabel: 'Разность (Значение - %)',
223
+ labelResult: 'Результат',
224
+ labelDifference: 'Разница',
225
+ labelCopyTooltip: 'Копировать результат',
226
+ labelFormula: 'Формула',
227
+ percentSymbol: '%',
228
+ },
229
+ };
@@ -0,0 +1,229 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { PercentageCalculatorUI } from '../ui';
4
+
5
+ const slug = 'procentraknare';
6
+ const title = '4 i 1 Procenträknare: Rabatter, Höjningar och Sänkningar';
7
+ const description =
8
+ 'Beräkna enkelt procent online gratis. 4 verktyg i 1 för att få ut X % av Y, procentuell skillnad, lägga till eller dra ifrån moms, reor och dricks automatiskt.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Hur fungerar kalkylatorn?',
13
+ answer:
14
+ 'Skriv helt enkelt in värdena i rutorna för det användningsfall som motsvarar ditt problem, så bearbetar vår kalkylator formeln utan att du behöver trycka på någon beräkna-knapp.',
15
+ },
16
+ {
17
+ question: 'Är den giltig för att beräkna moms eller skatt?',
18
+ answer:
19
+ 'Ja, block 4 ("Lägg till eller dra ifrån procent") är utformat precis för fall som att applicera en moms på 25 % på ett grundpris eller beräkna ett negativt skatteavdrag.',
20
+ },
21
+ {
22
+ question: 'Hanterar den decimaler och negativa tal?',
23
+ answer:
24
+ 'Självklart. Du kan ange decimaler (med punkt) och den fungerar även med negativa värden om du behöver analysera bokföringsbalanser med förlust.',
25
+ },
26
+ {
27
+ question: 'Kan jag kopiera resultaten?',
28
+ answer:
29
+ 'Ja, varje block har en knapp i resultatrutan som omedelbart kopierar siffran till din enhets urklipp så att du kan klistra in den i en annan app eller ett dokument.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Identifiera ditt matematiska problem',
36
+ text: 'Läs titlarna på de 4 blocken och välj det som stämmer överens med det du vill veta (T.ex. Hur mycket är 20 % av 50? -> Block 1).',
37
+ },
38
+ {
39
+ name: 'Ange siffrorna',
40
+ text: 'Fyll i fälten "X" och "Y". Oroa dig inte för ordningen, texten i varje block vägleder dig visuellt.',
41
+ },
42
+ {
43
+ name: 'Kopiera det omedelbara resultatet',
44
+ text: 'Siffran visas i realtid längst ner medan du skriver. Tryck på kopieringsikonen om du vill ta med den någon annanstans.',
45
+ },
46
+ ];
47
+
48
+ const faqSchema: WithContext<FAQPage> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'FAQPage',
51
+ mainEntity: faqData.map((item) => ({
52
+ '@type': 'Question',
53
+ name: item.question,
54
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
55
+ })),
56
+ };
57
+
58
+ const howToSchema: WithContext<HowTo> = {
59
+ '@context': 'https://schema.org',
60
+ '@type': 'HowTo',
61
+ name: title,
62
+ description,
63
+ step: howToData.map((step, i) => ({
64
+ '@type': 'HowToStep',
65
+ position: i + 1,
66
+ name: step.name,
67
+ text: step.text,
68
+ })),
69
+ };
70
+
71
+ const appSchema: WithContext<SoftwareApplication> = {
72
+ '@context': 'https://schema.org',
73
+ '@type': 'SoftwareApplication',
74
+ name: title,
75
+ description,
76
+ applicationCategory: 'FinanceApplication',
77
+ operatingSystem: 'All',
78
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'SEK' },
79
+ inLanguage: 'sv',
80
+ };
81
+
82
+ export const content: ToolLocaleContent<PercentageCalculatorUI> = {
83
+ slug,
84
+ title,
85
+ description,
86
+ faqTitle: 'Vanliga frågor',
87
+ faq: faqData,
88
+ bibliographyTitle: 'Källor och referenser',
89
+ bibliography: [
90
+ {
91
+ name: 'Beräkning av Procent - Wikipedia',
92
+ url: 'https://sv.wikipedia.org/wiki/Procent',
93
+ },
94
+ {
95
+ name: 'Grundläggande matematiska begrepp - Khan Academy',
96
+ url: 'https://sv.khanacademy.org/math/pre-algebra/pre-algebra-ratios-rates/pre-algebra-percents/v/describing-the-meaning-of-percent',
97
+ },
98
+ ],
99
+ howTo: howToData,
100
+ schemas: [faqSchema, howToSchema, appSchema],
101
+ seo: [
102
+ {
103
+ type: 'title',
104
+ text: '4 i 1 Procenträknare: Bemästra snabba beräkningar',
105
+ level: 2,
106
+ },
107
+ {
108
+ type: 'title',
109
+ text: 'Vad tjänar en multipel procenträknare till?',
110
+ level: 3,
111
+ },
112
+ {
113
+ type: 'paragraph',
114
+ html: 'Att beräkna procent är en av de vanligaste matematiska operationerna i vår vardag. Från att beräkna rabatten på en rea, veta lämplig dricks på en restaurang, till att fastställa vinstmarginalen i ett företag eller räntan på ett lån. Trots att det är vardagliga operationer är det inte alltid lätt att utföra dem i huvudet eller komma ihåg den exakta formeln.',
115
+ },
116
+ {
117
+ type: 'paragraph',
118
+ html: 'Vår 4-i-1 procenträknare grupperar de mest efterfrågade scenarierna. Du behöver inte längre leta på Google efter "hur man får ut 20 procent" eller "formel för procentberäkning". Du har de fyra nödvändiga operationerna på ett ställe, interaktivt och med omedelbara resultat.',
119
+ },
120
+ {
121
+ type: 'title',
122
+ text: 'Genomsgång av de 4 vanligaste användningsfallen',
123
+ level: 3,
124
+ },
125
+ {
126
+ type: 'paragraph',
127
+ html: 'För att underlätta för dig har vi delat upp verktyget i fyra tydliga visuella block som löser de verkliga problem vi möter dagligen:',
128
+ },
129
+ {
130
+ type: 'card',
131
+ icon: 'mdi:percent',
132
+ title: '1. Hur mycket är X % av Y?',
133
+ html: '<p><strong>Det klassiska fallet.</strong> Användbart för att beräkna rabatter eller dricks. Om du vill veta hur mycket 15 % av 120 kr är, är detta ditt verktyg. Den underliggande formeln delar helt enkelt procenten med 100 och multiplicerar den med totalvärdet.</p>',
134
+ },
135
+ {
136
+ type: 'card',
137
+ icon: 'mdi:division',
138
+ title: '2. Vilken procentsats är X av Y?',
139
+ html: '<p><strong>Idealiskt för proportioner.</strong> Om du har fått 45 poäng på ett prov med 60, vilket betyg har du på 100? Denna funktion delar delen med helheten och multiplicerar det med hundra, vilket ger dig den exakta relativa vikten.</p>',
140
+ },
141
+ {
142
+ type: 'card',
143
+ icon: 'mdi:chart-line-variant',
144
+ title: '3. Procentuell ökning eller minskning',
145
+ html: '<p><strong>Perfekt för finans och analys.</strong> Hur mycket har hyran ökat sedan förra året? Om du tidigare betalade 8 000 kr och nu 8 400 kr, kommer denna funktion att berätta att du har fått en ökning på 5 %. Den mäter tillväxt eller minskning mellan två siffror.</p>',
146
+ },
147
+ {
148
+ type: 'card',
149
+ icon: 'mdi:calculator',
150
+ title: '4. Lägg till eller dra ifrån procent på ett värde',
151
+ html: '<p><strong>Superanvändbart för moms.</strong> Om du har ett grundpris (t.ex. 1 000 kr) och behöver lägga till 25 % moms, kommer denna räknare direkt att ge dig de slutgiltiga 1 250 kr utan att behöva göra mellanoperationer. På samma sätt tjänar den till att tillämpa en direkt rabatt (t.ex. dra ifrån 20 %).</p>',
152
+ },
153
+ {
154
+ type: 'title',
155
+ text: 'Vanliga myter om procentberäkning',
156
+ level: 3,
157
+ },
158
+ {
159
+ type: 'paragraph',
160
+ html: 'Ofta låser vi oss när vi ser stora procentsatser eller decimaler, men det finns några matematiska "knep" som kan underlätta ditt liv. Det mest kända är <strong>procentens reversibilitet</strong>.',
161
+ },
162
+ {
163
+ type: 'tip',
164
+ title: 'Knepet med reversibilitet',
165
+ html: '<p>Visste du att X % av Y är exakt detsamma som Y % av X? Till exempel, om man ber dig beräkna 18 % av 50 i huvudet kan det låta komplicerat. Men om du vänder på det är 50 % av 18 väldigt enkelt: det är 9! Detta gäller för absolut vilket tal som helst och är en fantastisk livräddare i vardagen.</p>',
166
+ },
167
+ {
168
+ type: 'title',
169
+ text: 'Varför vi misslyckas med att beräkna tillväxt',
170
+ level: 3,
171
+ },
172
+ {
173
+ type: 'paragraph',
174
+ html: 'Ett av de vanligaste felen sker i fall 3: den procentuella ökningen eller minskningen. Tänk dig att en aktie på börsen kostar 100 kr, sjunker med 50 % och nästa dag stiger med 50 %. Intuitionen säger oss att den är värd 100 kr igen, men det är felaktigt.',
175
+ },
176
+ {
177
+ type: 'paragraph',
178
+ html: 'Om den sjunker med 50 % från 100 kr är dess nya värde 50 kr. Om den från dessa 50 kr stiger med 50 % är ökningen hälften av 50 (25 kr). Därför skulle det slutgiltiga priset vara 75 kr. Detta är ett klassiskt exempel på varför procentuella uppgångar och nedgångar inte är asymmetriska och varför dynamiska kalkylatorer som denna förebygger allvarliga finansiella fel.',
179
+ },
180
+ {
181
+ type: 'title',
182
+ text: 'Professionell och akademisk användning',
183
+ level: 3,
184
+ },
185
+ {
186
+ type: 'paragraph',
187
+ html: 'Vårt gränssnitt är fritt från distraktioner och utformat för att <strong>arbeta snabbt</strong>. Du kan ha det i en fäst flik i webbläsaren, tabba smidigt mellan de olika fälten och, tack vare kopieringsknappen bredvid resultatet, föra över den exakta siffran till ditt Excel eller Google Sheets utan risk för skrivfel.',
188
+ },
189
+ {
190
+ type: 'list',
191
+ items: [
192
+ 'E-handel och fysiska butiker: Snabb beräkning av försäljningspris genom att tillämpa handelsmarginaler och lägga till moms.',
193
+ 'Personaladministration: Fastställande av lönegap, skatteavdrag och löneökningar refererade till KPI.',
194
+ 'Universitetsutbildning: Lärare som jämnar ut betyg eller studenter inom naturvetenskap som analyserar avvikelser i sina experiment.',
195
+ 'Digital marknadsföring: Mätning av CTR (Click Through Rate), ROAS (Return on Ad Spend) eller konverteringsgrad i e-handel.',
196
+ ],
197
+ },
198
+ ],
199
+ ui: {
200
+ labelTitle: 'Procenträknare',
201
+ labelCase1Title: 'Fall 1',
202
+ labelCase1Question: 'Hur mycket är X % av Y?',
203
+ labelCase1Placeholder1: 'X',
204
+ labelCase1Placeholder2: 'Y',
205
+ labelCase1Formula: 'Formel: (X / 100) × Y',
206
+ labelCase2Title: 'Fall 2',
207
+ labelCase2Question: 'Vilken procentsats är X av Y?',
208
+ labelCase2Placeholder1: 'X',
209
+ labelCase2Placeholder2: 'Y',
210
+ labelCase2Formula: 'Formel: (X / Y) × 100',
211
+ labelCase3Title: 'Fall 3',
212
+ labelCase3Question: 'Procentuell skillnad mellan två värden',
213
+ labelCase3Placeholder1: 'Värde 1',
214
+ labelCase3Placeholder2: 'Värde 2',
215
+ labelCase3Formula: 'Formel: ((Värde 2 - Värde 1) / |Värde 1|) × 100',
216
+ labelCase4Title: 'Fall 4',
217
+ labelCase4Question: 'Lägg till eller dra ifrån procent på ett värde',
218
+ labelCase4Placeholder1: 'Värde',
219
+ labelCase4Placeholder2: '%',
220
+ labelCase4Formula: 'Formel: Värde ± (Värde × (% / 100))',
221
+ labelCase4AddLabel: 'Summa (Värde + %)',
222
+ labelCase4SubtractLabel: 'Skillnad (Värde - %)',
223
+ labelResult: 'Resultat',
224
+ labelDifference: 'Skillnad',
225
+ labelCopyTooltip: 'Kopiera resultat',
226
+ labelFormula: 'Formel',
227
+ percentSymbol: '%',
228
+ },
229
+ };