@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,136 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { RentIncreaseUI } from '../ui';
4
+
5
+ const slug = 'rent-increase-calculator';
6
+ const title = '西班牙租金上涨计算器 IPC 3% 上限';
7
+ const description = '根据西班牙《住房法》,使用消费者物价指数 (IPC) 或 3% 的法定上限计算您的租金更新。';
8
+
9
+ const faqData = [
10
+ {
11
+ question: '2024 年和 2025 年允许的最大租金涨幅是多少?',
12
+ answer: '根据第 12/2023 号《住房权法》,在 2024 年和 2025 年期间,常住住房租赁合同的租金每年最高涨幅被法律限制为 3%。',
13
+ },
14
+ {
15
+ question: '每年必须根据 IPC 涨房租吗?',
16
+ answer: '并非法律强制。房租如果要涨,租赁合同中必须包含明确提到年度更新的条款。如果合同中没有该条款,则在合同有效期内必须维持最初约定的价格。',
17
+ },
18
+ {
19
+ question: '房东必须提前多久通知房租上涨?',
20
+ answer: '房东必须至少提前一个月(30 天)以书面形式通知租客,告知新租金开始适用的日期。',
21
+ },
22
+ {
23
+ question: '如果 IPC 高于 3% 的法定上限会怎样?',
24
+ answer: '即使国家统计局公布的实际 IPC 为 5% 或 6%,在 2024 年和 2025 年期间,常住住房的房东依法也不得要求超过 3% 的涨幅。',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ {
30
+ name: '输入您当前的租金',
31
+ text: '输入您目前每月实际支付的租金金额。',
32
+ },
33
+ {
34
+ name: '选择计算模式',
35
+ text: '选择 3% 的法定上限(推荐)或根据需要手动输入百分比。',
36
+ },
37
+ {
38
+ name: '查看结果',
39
+ text: '您将立即获得预计的新租金、每月增加额以及每年的额外支出。',
40
+ },
41
+ {
42
+ name: '复制摘要',
43
+ text: '生成一份快速报告,发送给房东或保存在您的笔记中。',
44
+ },
45
+ ];
46
+
47
+ const bibliographyData = [
48
+ {
49
+ name: '第 12/2023 号西班牙住房权法 (BOE.es)',
50
+ url: 'https://www.boe.es/',
51
+ },
52
+ {
53
+ name: '国家统计局 (INE) IPC 计算器',
54
+ url: 'https://www.ine.es/',
55
+ },
56
+ {
57
+ name: '城市租赁法 (LAU)',
58
+ url: 'https://www.boe.es/',
59
+ },
60
+ ];
61
+
62
+ const seoData = [
63
+ {
64
+ type: 'title',
65
+ text: '2026 年西班牙租金上涨计算器 3% 上限指南',
66
+ level: 2,
67
+ },
68
+ {
69
+ type: 'paragraph',
70
+ html: '在西班牙,<strong>消费者物价指数 (IPC)</strong> 传统上是用于调整房租价格的指标。然而,随着第 <strong>12/2023 号《住房权法》</strong>的实施,引入了每个租客和房东都必须了解的限制。',
71
+ },
72
+ ];
73
+
74
+ const faqSchema: WithContext<FAQPage> = {
75
+ '@context': 'https://schema.org',
76
+ '@type': 'FAQPage',
77
+ mainEntity: faqData.map((item) => ({
78
+ '@type': 'Question',
79
+ name: item.question,
80
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
81
+ })),
82
+ };
83
+
84
+ const howToSchema: WithContext<HowTo> = {
85
+ '@context': 'https://schema.org',
86
+ '@type': 'HowTo',
87
+ name: title,
88
+ description,
89
+ step: howToData.map((step, i) => ({
90
+ '@type': 'HowToStep',
91
+ position: i + 1,
92
+ name: step.name,
93
+ text: step.text,
94
+ })),
95
+ };
96
+
97
+ const appSchema: WithContext<SoftwareApplication> = {
98
+ '@context': 'https://schema.org',
99
+ '@type': 'SoftwareApplication',
100
+ name: title,
101
+ description,
102
+ applicationCategory: 'FinanceApplication',
103
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
104
+ };
105
+
106
+ export const content: ToolLocaleContent<RentIncreaseUI> = {
107
+ slug,
108
+ title,
109
+ description,
110
+ faqTitle: '常见问题',
111
+ bibliographyTitle: '来源与参考资料',
112
+ ui: {
113
+ labelTitle: '租金上涨计算器',
114
+ labelDescription: '根据 IPC 调整您的租金,或安全地应用 3% 的法定上限。',
115
+ labelCurrentRent: '当前租金',
116
+ labelCurrentRentPlaceholder: '例如 800',
117
+ labelIncrementType: '更新模式',
118
+ labelLegalLimit: '住房法上限 (3%)',
119
+ labelManualIncrement: '手动增加 (%)',
120
+ labelManualPercentagePlaceholder: '例如 2.5',
121
+ labelNewRentEstimate: '预计薪租金',
122
+ labelMonthlyIncrease: '每月增加额',
123
+ labelYearlyExtra: '每年额外支出',
124
+ labelLegalBadge: '根据 12/2023 号法律限制为 3%',
125
+ labelCopyButton: '复制发送给房东',
126
+ labelCopySuccess: '已复制!',
127
+ currencySymbol: '€',
128
+ currencyCode: 'EUR',
129
+ currencyLocale: 'zh-CN',
130
+ },
131
+ faq: faqData,
132
+ howTo: howToData,
133
+ bibliography: bibliographyData,
134
+ seo: seoData,
135
+ schemas: [faqSchema, howToSchema, appSchema],
136
+ };
@@ -6,20 +6,28 @@ import type { RentIncreaseUI } from './ui';
6
6
 
7
7
  export type RentIncreaseLocaleContent = ToolLocaleContent<RentIncreaseUI>;
8
8
 
9
- import { content as es } from './i18n/es';
10
- import { content as en } from './i18n/en';
11
- import { content as fr } from './i18n/fr';
12
-
13
9
  export const rentIncrease: FinanceToolEntry<RentIncreaseUI> = {
14
10
  id: 'calculadora-subida-alquiler-ipc',
15
11
  icons: {
16
- bg: 'mdi:home-outline',
17
- fg: 'mdi:percent',
12
+ bg: 'mdi:home-city',
13
+ fg: 'mdi:chart-bell-curve-cumulative',
18
14
  },
19
15
  i18n: {
20
- es: async () => es,
21
- en: async () => en,
22
- fr: async () => fr,
16
+ de: () => import('./i18n/de').then((m) => m.content),
17
+ en: () => import('./i18n/en').then((m) => m.content),
18
+ es: () => import('./i18n/es').then((m) => m.content),
19
+ fr: () => import('./i18n/fr').then((m) => m.content),
20
+ id: () => import('./i18n/id').then((m) => m.content),
21
+ it: () => import('./i18n/it').then((m) => m.content),
22
+ ja: () => import('./i18n/ja').then((m) => m.content),
23
+ ko: () => import('./i18n/ko').then((m) => m.content),
24
+ nl: () => import('./i18n/nl').then((m) => m.content),
25
+ pl: () => import('./i18n/pl').then((m) => m.content),
26
+ pt: () => import('./i18n/pt').then((m) => m.content),
27
+ ru: () => import('./i18n/ru').then((m) => m.content),
28
+ sv: () => import('./i18n/sv').then((m) => m.content),
29
+ tr: () => import('./i18n/tr').then((m) => m.content),
30
+ zh: () => import('./i18n/zh').then((m) => m.content),
23
31
  },
24
32
  };
25
33
 
package/src/types.ts CHANGED
@@ -5,7 +5,7 @@ export type { SEOSection };
5
5
 
6
6
  export type KnownLocale =
7
7
  | 'ar' | 'da' | 'de' | 'en' | 'es' | 'fi'
8
- | 'fr' | 'it' | 'ja' | 'ko' | 'nb' | 'nl'
8
+ | 'fr' | 'id' | 'it' | 'ja' | 'ko' | 'nb' | 'nl'
9
9
  | 'pl' | 'pt' | 'ru' | 'sv' | 'tr' | 'zh';
10
10
 
11
11
  export interface FAQItem {