@jjlmoya/utils-finance 1.4.0 → 1.6.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 (164) hide show
  1. package/package.json +2 -1
  2. package/src/tests/faq_count.test.ts +1 -1
  3. package/src/tests/i18n_coverage.test.ts +36 -0
  4. package/src/tests/locale_completeness.test.ts +3 -0
  5. package/src/tests/slug_uniqueness.test.ts +81 -0
  6. package/src/tests/title_quality.test.ts +1 -1
  7. package/src/tool/compoundInterest/i18n/de.ts +208 -0
  8. package/src/tool/compoundInterest/i18n/id.ts +208 -0
  9. package/src/tool/compoundInterest/i18n/it.ts +208 -0
  10. package/src/tool/compoundInterest/i18n/ja.ts +207 -0
  11. package/src/tool/compoundInterest/i18n/ko.ts +207 -0
  12. package/src/tool/compoundInterest/i18n/nl.ts +208 -0
  13. package/src/tool/compoundInterest/i18n/pl.ts +208 -0
  14. package/src/tool/compoundInterest/i18n/pt.ts +208 -0
  15. package/src/tool/compoundInterest/i18n/ru.ts +208 -0
  16. package/src/tool/compoundInterest/i18n/sv.ts +208 -0
  17. package/src/tool/compoundInterest/i18n/tr.ts +208 -0
  18. package/src/tool/compoundInterest/i18n/zh.ts +202 -0
  19. package/src/tool/compoundInterest/index.ts +15 -7
  20. package/src/tool/courtFeeCalculator/i18n/de.ts +152 -0
  21. package/src/tool/courtFeeCalculator/i18n/fr.ts +1 -1
  22. package/src/tool/courtFeeCalculator/i18n/id.ts +152 -0
  23. package/src/tool/courtFeeCalculator/i18n/it.ts +152 -0
  24. package/src/tool/courtFeeCalculator/i18n/ja.ts +152 -0
  25. package/src/tool/courtFeeCalculator/i18n/ko.ts +152 -0
  26. package/src/tool/courtFeeCalculator/i18n/nl.ts +152 -0
  27. package/src/tool/courtFeeCalculator/i18n/pl.ts +152 -0
  28. package/src/tool/courtFeeCalculator/i18n/pt.ts +152 -0
  29. package/src/tool/courtFeeCalculator/i18n/ru.ts +152 -0
  30. package/src/tool/courtFeeCalculator/i18n/sv.ts +152 -0
  31. package/src/tool/courtFeeCalculator/i18n/tr.ts +152 -0
  32. package/src/tool/courtFeeCalculator/i18n/zh.ts +152 -0
  33. package/src/tool/courtFeeCalculator/index.ts +16 -8
  34. package/src/tool/debtSnowball/i18n/de.ts +160 -0
  35. package/src/tool/debtSnowball/i18n/id.ts +160 -0
  36. package/src/tool/debtSnowball/i18n/it.ts +160 -0
  37. package/src/tool/debtSnowball/i18n/ja.ts +157 -0
  38. package/src/tool/debtSnowball/i18n/ko.ts +160 -0
  39. package/src/tool/debtSnowball/i18n/nl.ts +160 -0
  40. package/src/tool/debtSnowball/i18n/pl.ts +160 -0
  41. package/src/tool/debtSnowball/i18n/pt.ts +160 -0
  42. package/src/tool/debtSnowball/i18n/ru.ts +160 -0
  43. package/src/tool/debtSnowball/i18n/sv.ts +160 -0
  44. package/src/tool/debtSnowball/i18n/tr.ts +160 -0
  45. package/src/tool/debtSnowball/i18n/zh.ts +160 -0
  46. package/src/tool/debtSnowball/index.ts +17 -9
  47. package/src/tool/fireCalculator/i18n/de.ts +261 -0
  48. package/src/tool/fireCalculator/i18n/id.ts +261 -0
  49. package/src/tool/fireCalculator/i18n/it.ts +261 -0
  50. package/src/tool/fireCalculator/i18n/ja.ts +261 -0
  51. package/src/tool/fireCalculator/i18n/ko.ts +261 -0
  52. package/src/tool/fireCalculator/i18n/nl.ts +261 -0
  53. package/src/tool/fireCalculator/i18n/pl.ts +261 -0
  54. package/src/tool/fireCalculator/i18n/pt.ts +261 -0
  55. package/src/tool/fireCalculator/i18n/ru.ts +261 -0
  56. package/src/tool/fireCalculator/i18n/sv.ts +261 -0
  57. package/src/tool/fireCalculator/i18n/tr.ts +261 -0
  58. package/src/tool/fireCalculator/i18n/zh.ts +261 -0
  59. package/src/tool/fireCalculator/index.ts +15 -7
  60. package/src/tool/ibanBicSwiftConverter/i18n/de.ts +128 -0
  61. package/src/tool/ibanBicSwiftConverter/i18n/id.ts +128 -0
  62. package/src/tool/ibanBicSwiftConverter/i18n/it.ts +128 -0
  63. package/src/tool/ibanBicSwiftConverter/i18n/ja.ts +128 -0
  64. package/src/tool/ibanBicSwiftConverter/i18n/ko.ts +128 -0
  65. package/src/tool/ibanBicSwiftConverter/i18n/nl.ts +128 -0
  66. package/src/tool/ibanBicSwiftConverter/i18n/pl.ts +128 -0
  67. package/src/tool/ibanBicSwiftConverter/i18n/pt.ts +128 -0
  68. package/src/tool/ibanBicSwiftConverter/i18n/ru.ts +128 -0
  69. package/src/tool/ibanBicSwiftConverter/i18n/sv.ts +128 -0
  70. package/src/tool/ibanBicSwiftConverter/i18n/tr.ts +128 -0
  71. package/src/tool/ibanBicSwiftConverter/i18n/zh.ts +128 -0
  72. package/src/tool/ibanBicSwiftConverter/index.ts +15 -7
  73. package/src/tool/inflation/i18n/de.ts +297 -0
  74. package/src/tool/inflation/i18n/id.ts +297 -0
  75. package/src/tool/inflation/i18n/it.ts +297 -0
  76. package/src/tool/inflation/i18n/ja.ts +297 -0
  77. package/src/tool/inflation/i18n/ko.ts +297 -0
  78. package/src/tool/inflation/i18n/nl.ts +297 -0
  79. package/src/tool/inflation/i18n/pl.ts +297 -0
  80. package/src/tool/inflation/i18n/pt.ts +297 -0
  81. package/src/tool/inflation/i18n/ru.ts +297 -0
  82. package/src/tool/inflation/i18n/sv.ts +297 -0
  83. package/src/tool/inflation/i18n/tr.ts +297 -0
  84. package/src/tool/inflation/i18n/zh.ts +297 -0
  85. package/src/tool/inflation/index.ts +17 -9
  86. package/src/tool/lateInterest/i18n/de.ts +224 -0
  87. package/src/tool/lateInterest/i18n/id.ts +224 -0
  88. package/src/tool/lateInterest/i18n/it.ts +224 -0
  89. package/src/tool/lateInterest/i18n/ja.ts +224 -0
  90. package/src/tool/lateInterest/i18n/ko.ts +224 -0
  91. package/src/tool/lateInterest/i18n/nl.ts +224 -0
  92. package/src/tool/lateInterest/i18n/pl.ts +224 -0
  93. package/src/tool/lateInterest/i18n/pt.ts +224 -0
  94. package/src/tool/lateInterest/i18n/ru.ts +224 -0
  95. package/src/tool/lateInterest/i18n/sv.ts +224 -0
  96. package/src/tool/lateInterest/i18n/tr.ts +224 -0
  97. package/src/tool/lateInterest/i18n/zh.ts +224 -0
  98. package/src/tool/lateInterest/index.ts +17 -9
  99. package/src/tool/legalInterestRate/i18n/de.ts +143 -0
  100. package/src/tool/legalInterestRate/i18n/id.ts +143 -0
  101. package/src/tool/legalInterestRate/i18n/it.ts +143 -0
  102. package/src/tool/legalInterestRate/i18n/ja.ts +143 -0
  103. package/src/tool/legalInterestRate/i18n/ko.ts +143 -0
  104. package/src/tool/legalInterestRate/i18n/nl.ts +143 -0
  105. package/src/tool/legalInterestRate/i18n/pl.ts +143 -0
  106. package/src/tool/legalInterestRate/i18n/pt.ts +143 -0
  107. package/src/tool/legalInterestRate/i18n/ru.ts +143 -0
  108. package/src/tool/legalInterestRate/i18n/sv.ts +143 -0
  109. package/src/tool/legalInterestRate/i18n/tr.ts +143 -0
  110. package/src/tool/legalInterestRate/i18n/zh.ts +143 -0
  111. package/src/tool/legalInterestRate/index.ts +17 -9
  112. package/src/tool/lotteryOptimizer/i18n/de.ts +177 -0
  113. package/src/tool/lotteryOptimizer/i18n/id.ts +177 -0
  114. package/src/tool/lotteryOptimizer/i18n/it.ts +177 -0
  115. package/src/tool/lotteryOptimizer/i18n/ja.ts +177 -0
  116. package/src/tool/lotteryOptimizer/i18n/ko.ts +177 -0
  117. package/src/tool/lotteryOptimizer/i18n/nl.ts +177 -0
  118. package/src/tool/lotteryOptimizer/i18n/pl.ts +177 -0
  119. package/src/tool/lotteryOptimizer/i18n/pt.ts +177 -0
  120. package/src/tool/lotteryOptimizer/i18n/ru.ts +177 -0
  121. package/src/tool/lotteryOptimizer/i18n/sv.ts +177 -0
  122. package/src/tool/lotteryOptimizer/i18n/tr.ts +177 -0
  123. package/src/tool/lotteryOptimizer/i18n/zh.ts +177 -0
  124. package/src/tool/lotteryOptimizer/index.ts +17 -9
  125. package/src/tool/mortgage/i18n/de.ts +223 -0
  126. package/src/tool/mortgage/i18n/id.ts +219 -0
  127. package/src/tool/mortgage/i18n/it.ts +223 -0
  128. package/src/tool/mortgage/i18n/ja.ts +219 -0
  129. package/src/tool/mortgage/i18n/ko.ts +219 -0
  130. package/src/tool/mortgage/i18n/nl.ts +219 -0
  131. package/src/tool/mortgage/i18n/pl.ts +219 -0
  132. package/src/tool/mortgage/i18n/pt.ts +219 -0
  133. package/src/tool/mortgage/i18n/ru.ts +219 -0
  134. package/src/tool/mortgage/i18n/sv.ts +219 -0
  135. package/src/tool/mortgage/i18n/tr.ts +219 -0
  136. package/src/tool/mortgage/i18n/zh.ts +219 -0
  137. package/src/tool/mortgage/index.ts +15 -7
  138. package/src/tool/percentageCalculator/i18n/de.ts +229 -0
  139. package/src/tool/percentageCalculator/i18n/id.ts +229 -0
  140. package/src/tool/percentageCalculator/i18n/it.ts +229 -0
  141. package/src/tool/percentageCalculator/i18n/ja.ts +229 -0
  142. package/src/tool/percentageCalculator/i18n/ko.ts +229 -0
  143. package/src/tool/percentageCalculator/i18n/nl.ts +229 -0
  144. package/src/tool/percentageCalculator/i18n/pl.ts +229 -0
  145. package/src/tool/percentageCalculator/i18n/pt.ts +229 -0
  146. package/src/tool/percentageCalculator/i18n/ru.ts +229 -0
  147. package/src/tool/percentageCalculator/i18n/sv.ts +229 -0
  148. package/src/tool/percentageCalculator/i18n/tr.ts +229 -0
  149. package/src/tool/percentageCalculator/i18n/zh.ts +229 -0
  150. package/src/tool/percentageCalculator/index.ts +15 -7
  151. package/src/tool/rentIncreaseCalculator/i18n/de.ts +136 -0
  152. package/src/tool/rentIncreaseCalculator/i18n/id.ts +136 -0
  153. package/src/tool/rentIncreaseCalculator/i18n/it.ts +136 -0
  154. package/src/tool/rentIncreaseCalculator/i18n/ja.ts +136 -0
  155. package/src/tool/rentIncreaseCalculator/i18n/ko.ts +136 -0
  156. package/src/tool/rentIncreaseCalculator/i18n/nl.ts +136 -0
  157. package/src/tool/rentIncreaseCalculator/i18n/pl.ts +136 -0
  158. package/src/tool/rentIncreaseCalculator/i18n/pt.ts +136 -0
  159. package/src/tool/rentIncreaseCalculator/i18n/ru.ts +136 -0
  160. package/src/tool/rentIncreaseCalculator/i18n/sv.ts +136 -0
  161. package/src/tool/rentIncreaseCalculator/i18n/tr.ts +136 -0
  162. package/src/tool/rentIncreaseCalculator/i18n/zh.ts +136 -0
  163. package/src/tool/rentIncreaseCalculator/index.ts +17 -9
  164. package/src/types.ts +1 -1
@@ -0,0 +1,219 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { MortgageUI } from '../ui';
4
+
5
+ const slug = 'mortgage-calculator';
6
+ const title = '住宅ローンシミュレーションと元利均等返済表';
7
+ const description =
8
+ '毎月の住宅ローン返済額を計算し、支払う利息の総額を確認できます。完全な返済スケジュールを即座に表示します。';
9
+
10
+ const faqData = [
11
+ {
12
+ question: '元利均等返済とは何ですか?',
13
+ answer:
14
+ '最も一般的な返済方法です。毎月の返済額は一定ですが、初期の頃は支払額のほとんどが利息に充てられ、元金の返済はごくわずかです。後半になるとその比率が逆転します。そのため、繰り上げ返済は初期に行うほど効果的です。',
15
+ },
16
+ {
17
+ question: '2026年は固定金利と変動金利のどちらが良いですか?',
18
+ answer:
19
+ '固定金利:現在は変動より高めですが、30年間安心して過ごせます。変動金利:現在は低金利で有利ですが、将来金利が上昇すると返済額が急増するリスクがあります。自身のリスク許容度に合わせて選ぶ必要があります。',
20
+ },
21
+ {
22
+ question: '100万円を繰り上げ返済すると、どれくらい節約できますか?',
23
+ answer:
24
+ '返済のタイミングによります。3,000万円のローン(金利1%)の1年目に100万円を繰り上げ返済すると、将来の利息を大幅に削減できます。返済期間が残り少なくなってから行うよりも、初期に行う方が節約効果は極めて高いです。',
25
+ },
26
+ {
27
+ question: '年収の何パーセントをローン返済に充てるべきですか?',
28
+ answer:
29
+ '一般的には、年間の返済額が手取り年収の25〜30%を超えないようにすることが推奨されます。この基準を超えると、急な支出や収入減の際に対応できなくなるリスクが高まります。',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: '借入金額を入力する',
36
+ text: '銀行から借りたい合計金額を入力します(自己資金を除いた額)。',
37
+ },
38
+ {
39
+ name: '金利を設定する',
40
+ text: '銀行から提示された年利を入力します。固定か変動か、複数のパターンで比較することをお勧めします。',
41
+ },
42
+ {
43
+ name: '返済期間(年)を選択する',
44
+ text: 'ローンを何年で返済するかを決めます。期間が長いほど月々の負担は減りますが、支払う利息の総額は増えます。',
45
+ },
46
+ {
47
+ name: '返済計画表を確認する',
48
+ text: '月ごとの残高の推移や、支払額のうちいくらが利息でいくらが元金に充てられているかを確認します。',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowTo> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step, i) => ({
68
+ '@type': 'HowToStep',
69
+ position: i + 1,
70
+ name: step.name,
71
+ text: step.text,
72
+ })),
73
+ };
74
+
75
+ const appSchema: WithContext<SoftwareApplication> = {
76
+ '@context': 'https://schema.org',
77
+ '@type': 'SoftwareApplication',
78
+ name: title,
79
+ description,
80
+ applicationCategory: 'FinanceApplication',
81
+ operatingSystem: 'All',
82
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'JPY' },
83
+ inLanguage: 'ja',
84
+ };
85
+
86
+ export const content: ToolLocaleContent<MortgageUI> = {
87
+ slug,
88
+ title,
89
+ description,
90
+ faqTitle: 'よくある質問',
91
+ faq: faqData,
92
+ bibliographyTitle: '情報源とリファレンス',
93
+ bibliography: [
94
+ {
95
+ name: '金融庁:住宅ローンについて',
96
+ url: 'https://www.fsa.go.jp/',
97
+ },
98
+ {
99
+ name: '住宅金融支援機構(フラット35)',
100
+ url: 'https://www.jhf.go.jp/',
101
+ },
102
+ ],
103
+ howTo: howToData,
104
+ schemas: [faqSchema, howToSchema, appSchema],
105
+ seo: [
106
+ {
107
+ type: 'title',
108
+ text: '住宅ローン完全ガイド:返済の仕組みと繰り上げ返済の効果',
109
+ level: 2,
110
+ },
111
+ {
112
+ type: 'paragraph',
113
+ html: '住宅ローンは一生で最大の借金となる可能性が高いです。元利均等返済の仕組みを理解することは、将来的に数百万円単位の節約につながる賢い決断を下すために極めて重要です。',
114
+ },
115
+ {
116
+ type: 'title',
117
+ text: '返済の内訳:毎月の支払額の中で何が起きているか',
118
+ level: 3,
119
+ },
120
+ {
121
+ type: 'paragraph',
122
+ html: '日本の多くの住宅ローンでは<strong>元利均等返済</strong>が採用されています。最大の特徴は(固定金利の場合)毎月の支払額が一定であることですが、その中身(元金と利息の割合)は時間とともに大きく変化します。',
123
+ },
124
+ {
125
+ type: 'tip',
126
+ title: '返済額の推移',
127
+ html: '<p><strong>初期(1〜10年目):</strong>支払額の多くが「利息」に充てられ、借りたお金(元金)はなかなか減りません。借入額が多く金利が高い場合、初期の支払いの大部分が利息になることもあります。</p><p><strong>中期(11〜25年目):</strong>徐々に元金部分の返済割合が増えていきます。</p><p><strong>終盤(26〜35年目):</strong>支払額のほとんどが「元金」の返済に充てられ、利息はわずかになります。</p>',
128
+ },
129
+ {
130
+ type: 'paragraph',
131
+ html: 'したがって、もし<strong>繰り上げ返済</strong>を計画しているのであれば、ローンの初期段階で行うのが圧倒的に有利です。1年目に100万円を返済することで削減できる将来の利息は、20年目に行う場合よりもはるかに大きくなります。',
132
+ },
133
+ {
134
+ type: 'title',
135
+ text: '無理のない返済計画を立てるために',
136
+ level: 3,
137
+ },
138
+ {
139
+ type: 'paragraph',
140
+ html: '専門家は、住宅ローンの年間返済額が<strong>現在の可処分所得(手取り年収)の25〜30%を超えないこと</strong>を推奨しています。これを超えると、教育費や老後資金の積み立てが困難になったり、不測の事態に対応できなくなったりするリスクが高まります。',
141
+ },
142
+ {
143
+ type: 'title',
144
+ text: '固定金利 vs 変動金利',
145
+ level: 3,
146
+ },
147
+ {
148
+ type: 'paragraph',
149
+ html: '金利の動向を見据えながら、<strong>固定金利</strong>か<strong>変動金利</strong>かを選択することは、生涯の住居費を左右する重要な戦略的判断です。',
150
+ },
151
+ {
152
+ type: 'comparative',
153
+ columns: 2,
154
+ items: [
155
+ {
156
+ title: '固定金利',
157
+ description: '返済額が最後まで変わらず、将来の金利上昇リスクを完全に避けられます。',
158
+ points: [
159
+ '35年先まで返済額が確定',
160
+ '教育費などの資金計画が立てやすい',
161
+ '金利上昇の不安がない「安心料」',
162
+ '家計管理をシンプルにしたい方向け',
163
+ ],
164
+ },
165
+ {
166
+ title: '変動金利',
167
+ description: '現在は非常に低い金利が適用されますが、将来の金利上昇により返済額が増えるリスクがあります。',
168
+ highlight: true,
169
+ points: [
170
+ '現在の返済負担を最小限に抑えられる',
171
+ '金利が上がった際の「5年ルール・125%ルール」がある場合も',
172
+ '金利上昇に対処できる貯蓄がある方向け',
173
+ 'リスクを取ってでも総返済額を抑えたい方向け',
174
+ ],
175
+ },
176
+ ],
177
+ },
178
+ {
179
+ type: 'tip',
180
+ title: '選択のポイント',
181
+ html: '<p><strong>固定金利が向いている人:</strong>家計に余裕が少ない、将来の不確実性を避けたい、金利のニュースを気にしたくない。</p><p><strong>変動金利が向いている人:</strong>将来の収入増が見込める、繰り上げ返済用の予備資金がある、ローン残高がそれほど多くない。</p>',
182
+ },
183
+ ],
184
+ ui: {
185
+ labelTitle: '住宅ローン計算機',
186
+ labelLoanAmount: '借入金額',
187
+ labelInterestRate: '年利 (年率)',
188
+ labelYears: '返済期間 (年)',
189
+ labelMonthlyExtra: '毎月の追加返済額',
190
+ labelMonthlyPayment: '毎月の返済額',
191
+ labelMonthCount: 'ヶ月',
192
+ labelSavingsCard: '削減できる利息の概算',
193
+ labelSavingsInterest: '利息削減',
194
+ labelSavingsTime: '期間短縮',
195
+ labelTimelineComparison: '返済期間の比較',
196
+ labelTimelineOriginal: '当初の返済期間',
197
+ labelTimelineOptimized: '追加返済後の期間',
198
+ labelCostBreakdown: '支払い総額の内訳',
199
+ labelBorrowed: '元金',
200
+ labelTotalBorrowed: '借入合計',
201
+ labelTotalInterest: '利息合計',
202
+ labelAmortizationTable: '返済スケジュール表',
203
+ labelTableHeader: '詳細な返済表を表示',
204
+ labelViewAll: 'すべて表示',
205
+ labelPaid: 'ローン完済',
206
+ labelTableMonth: '回目',
207
+ labelTableInterest: '利息分',
208
+ labelTablePrincipal: '元金分',
209
+ labelTableExtra: '繰上',
210
+ labelTableBalance: '残り残高',
211
+ labelMoreMonths: 'ヶ月以降',
212
+ labelMonth: '月',
213
+ currencySymbol: '¥',
214
+ currencyCode: 'JPY',
215
+ currencyLocale: 'ja-JP',
216
+ monthPlural: 'ヶ月',
217
+ yearPlural: '年',
218
+ },
219
+ };
@@ -0,0 +1,219 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { MortgageUI } from '../ui';
4
+
5
+ const slug = 'mortgage-calculator';
6
+ const title = '주택담보대출 계산기 및 원리금 균등 상환표';
7
+ const description =
8
+ '매월 납부할 대출 상환액을 계산하고, 총 이자 비용을 확인해 보세요. 전체 상환 일정을 즉시 시각화하여 보여드립니다.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: '원리금 균등 상환 방식이란 무엇인가요?',
13
+ answer:
14
+ '가장 일반적으로 사용되는 상환 방식입니다. 매달 내는 원금과 이자의 합계가 일정하지만, 초기에는 이자 비중이 높고 후기로 갈수록 원금 비중이 높아집니다. 따라서 중도 상환은 대출 초기일수록 이자 절감 효과가 큽니다.',
15
+ },
16
+ {
17
+ question: '2026년, 고정금리와 변동금리 중 무엇이 유리할까요?',
18
+ answer:
19
+ '고정금리: 당장은 금리가 높을 수 있지만 30년 동안 금리 상승 걱정 없이 안심할 수 있습니다. 변동금리: 현재 금리는 낮을 수 있지만 추후 금리가 오를 경우 상환액이 늘어날 위험이 있습니다. 개인의 리스크 감수 성향에 따라 달라집니다.',
20
+ },
21
+ {
22
+ question: '1,000만 원 중도 상환 시 얼마나 아낄 수 있나요?',
23
+ answer:
24
+ '시점에 따라 다릅니다. 2억 원 대출(금리 3%) 1년 차에 1,000만 원을 상환하면 1,500만 원 이상의 이자를 절약할 수 있지만, 20년 차에 상환하면 절약액은 200만 원 수준에 불과합니다. 타이밍이 가장 중요합니다.',
25
+ },
26
+ {
27
+ question: '소득의 어느 정도를 대출 상환에 써야 하나요?',
28
+ answer:
29
+ '일반적으로 월 순소득의 30~35%를 넘지 않는 것을 권장합니다 (기타 부채 포함). 이 범위를 넘어서면 예상치 못한 상황 발생 시 채무 불이행 위험이 커집니다.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: '대출 금액 입력하기',
36
+ text: '은행에서 빌리고자 하는 총 금액을 입력합니다 (본인 부담금을 제외한 순수 대출금).',
37
+ },
38
+ {
39
+ name: '금리 설정하기',
40
+ text: '은행에서 제시한 연이율(TIN)을 입력합니다. 고정금리와 변동금리를 비교해 보세요.',
41
+ },
42
+ {
43
+ name: '상환 기간 선택하기',
44
+ text: '대출금을 갚을 기간(년)을 정합니다. 기간이 길수록 월 납부액은 줄어들지만 총 이자액은 늘어납니다.',
45
+ },
46
+ {
47
+ name: '상환표 분석하기',
48
+ text: '매달 대출 잔액이 어떻게 줄어드는지, 매월 납부액 중 이자와 원금 비중이 어떻게 변하는지 확인합니다.',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowTo> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step, i) => ({
68
+ '@type': 'HowToStep',
69
+ position: i + 1,
70
+ name: step.name,
71
+ text: step.text,
72
+ })),
73
+ };
74
+
75
+ const appSchema: WithContext<SoftwareApplication> = {
76
+ '@context': 'https://schema.org',
77
+ '@type': 'SoftwareApplication',
78
+ name: title,
79
+ description,
80
+ applicationCategory: 'FinanceApplication',
81
+ operatingSystem: 'All',
82
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'KRW' },
83
+ inLanguage: 'ko',
84
+ };
85
+
86
+ export const content: ToolLocaleContent<MortgageUI> = {
87
+ slug,
88
+ title,
89
+ description,
90
+ faqTitle: '자주 묻는 질문',
91
+ faq: faqData,
92
+ bibliographyTitle: '출처 및 참고 자료',
93
+ bibliography: [
94
+ {
95
+ name: '금융감독원: 주택담보대출 안내',
96
+ url: 'https://www.fss.or.kr/',
97
+ },
98
+ {
99
+ name: '한국주택금융공사: 대출 상품 정보',
100
+ url: 'https://www.hf.go.kr/',
101
+ },
102
+ ],
103
+ howTo: howToData,
104
+ schemas: [faqSchema, howToSchema, appSchema],
105
+ seo: [
106
+ {
107
+ type: 'title',
108
+ text: '주택담보대출 완벽 가이드: 원리금 균등 방식과 중도 상환',
109
+ level: 2,
110
+ },
111
+ {
112
+ type: 'paragraph',
113
+ html: '주택담보대출은 일생에서 가장 큰 규모의 부채가 될 가능성이 높습니다. 상환 방식의 원리를 이해하는 것은 수천만 원의 이자를 아낄 수 있는 현명한 결정을 내리는 데 필수적입니다.',
114
+ },
115
+ {
116
+ type: 'title',
117
+ text: '원리금 균등 방식의 특징: 월 납부액의 구성 변화 이해하기',
118
+ level: 3,
119
+ },
120
+ {
121
+ type: 'paragraph',
122
+ html: '국내 대부분의 대출은 <strong>원리금 균등 상환 방식</strong>을 사용합니다. 특징은 매달 내는 금액이 일정하지만(고정금리 시), 시간이 지남에 따라 그 안의 원금과 이자 비중이 급격히 변한다는 점입니다.',
123
+ },
124
+ {
125
+ type: 'tip',
126
+ title: '상환액 비중의 변화',
127
+ html: '<p><strong>초기 (1~10년 차):</strong> 납부액의 대부분이 이자이며 원금은 거의 줄어들지 않습니다. 예를 들어 초기에는 납부액의 80%가 이자일 수도 있습니다.</p><p><strong>중기 (11~25년 차):</strong> 원금과 이자 비중이 서서히 균형을 이룹니다.</p><p><strong>후기 (26~30년 차):</strong> 거의 모든 금액이 원금 상환에 쓰이며 이자는 매우 적어집니다.</p>',
128
+ },
129
+ {
130
+ type: 'paragraph',
131
+ html: '따라서 <strong>중도 상환</strong>(미리 갚기)을 계획하고 있다면, 대출 초기 단계에 실행하는 것이 이자 절감 측면에서 압도적으로 유리합니다. 대출 초기에 1,000만 원을 갚는 것이 대출 후기에 갚는 것보다 훨씬 많은 이자를 아껴줍니다.',
132
+ },
133
+ {
134
+ type: 'title',
135
+ text: '소득 대비 대출 비중은 어느 정도가 적당한가요?',
136
+ level: 3,
137
+ },
138
+ {
139
+ type: 'paragraph',
140
+ html: '일반적으로 <strong>월 총소득의 30-35%를 넘기지 않는 것</strong>이 권장됩니다. 이 선을 넘기면 실직, 질병 등 예상치 못한 변수 발생 시 대출금을 갚지 못하게 될 위험이 커지기 때문입니다.',
141
+ },
142
+ {
143
+ type: 'title',
144
+ text: '2026년 금리 전망: 고정금리 vs 변동금리',
145
+ level: 3,
146
+ },
147
+ {
148
+ type: 'paragraph',
149
+ html: '금리 변동성이 큰 시기에 <strong>고정금리</strong>와 <strong>변동금리</strong> 사이의 선택은 연간 수백만 원의 차이를 만들 수 있는 전략적 결정입니다.',
150
+ },
151
+ {
152
+ type: 'comparative',
153
+ columns: 2,
154
+ items: [
155
+ {
156
+ title: '고정금리',
157
+ description: '당장 부담은 조금 더 클 수 있지만, 금리 상승 걱정 없이 계획적인 가계 운영이 가능합니다.',
158
+ points: [
159
+ '30년 동안 예측 가능한 상환액',
160
+ '금리 상승기 리스크 방어',
161
+ '불확실한 경제 상황에서의 안정성',
162
+ '예산이 빠듯한 가구에 적합',
163
+ ],
164
+ },
165
+ {
166
+ title: '변동금리',
167
+ description: '초기 금리는 낮을 수 있지만, 금리 변동 리스크에 직접적으로 노출됩니다.',
168
+ highlight: true,
169
+ points: [
170
+ '초기 상환 부담 감소',
171
+ '금리 상승 시 상환액 급증 위험',
172
+ '가계 예산에 심각한 타격 가능성',
173
+ '높은 위험을 감수할 수 있는 경우',
174
+ ],
175
+ },
176
+ ],
177
+ },
178
+ {
179
+ type: 'tip',
180
+ title: '본인의 성향에 따른 선택',
181
+ html: '<p><strong>고정금리 추천:</strong> 정해진 수입 내에서 계획적으로 살고 싶고, 예상치 못한 지출 증가는 피하고 싶은 경우.</p><p><strong>변동금리 추천:</strong> 여유 자금이 충분하여 금리 상승 시 대응이 가능하거나, 대출 기간이 짧고 금액이 작은 경우.</p>',
182
+ },
183
+ ],
184
+ ui: {
185
+ labelTitle: '대출 계산기',
186
+ labelLoanAmount: '대출 금액',
187
+ labelInterestRate: '금리 (연이율)',
188
+ labelYears: '기간 (년)',
189
+ labelMonthlyExtra: '월 추가 상환액',
190
+ labelMonthlyPayment: '월 상환액',
191
+ labelMonthCount: '개월',
192
+ labelSavingsCard: '이자 절감 예상액',
193
+ labelSavingsInterest: '이자 절감',
194
+ labelSavingsTime: '기간 단축',
195
+ labelTimelineComparison: '상환 기간 비교',
196
+ labelTimelineOriginal: '기존 기간',
197
+ labelTimelineOptimized: '단축된 기간',
198
+ labelCostBreakdown: '총 비용 상세',
199
+ labelBorrowed: '원금',
200
+ labelTotalBorrowed: '총 대출 원금',
201
+ labelTotalInterest: '총 이자 비용',
202
+ labelAmortizationTable: '상환 스케줄표',
203
+ labelTableHeader: '전체 상환표 보기',
204
+ labelViewAll: '모두 보기',
205
+ labelPaid: '대출 상환 완료',
206
+ labelTableMonth: '회차',
207
+ labelTableInterest: '이자',
208
+ labelTablePrincipal: '원금',
209
+ labelTableExtra: '추가',
210
+ labelTableBalance: '대출 잔액',
211
+ labelMoreMonths: '개월 더 보기',
212
+ labelMonth: '개월',
213
+ currencySymbol: '₩',
214
+ currencyCode: 'KRW',
215
+ currencyLocale: 'ko-KR',
216
+ monthPlural: '개월',
217
+ yearPlural: '년',
218
+ },
219
+ };
@@ -0,0 +1,219 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { MortgageUI } from '../ui';
4
+
5
+ const slug = 'hypotheek-berekenen';
6
+ const title = 'Hypotheek Simulator en Franse Amortisatietabel';
7
+ const description =
8
+ 'Bereken uw maandelijkse hypotheeklasten, ontdek hoeveel u aan rente zult betalen en visualiseer direct uw volledige aflossingsschema.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Wat is het Franse amortisatiesysteem?',
13
+ answer:
14
+ 'Dit is het meest gebruikte systeem voor hypotheken. Het maandbedrag blijft gedurende de rentevaste periode gelijk, maar in het begin bestaat dit bedrag voor het grootste deel uit rente en lost u weinig af. Aan het einde is dit andersom. Daarom is extra aflossen in de eerste jaren het meest voordelig.',
15
+ },
16
+ {
17
+ question: 'Vaste of variabele rente in 2026?',
18
+ answer:
19
+ 'Vaste rente: u betaalt nu misschien iets meer, maar u heeft 30 jaar lang zekerheid. Variabele rente: kan vandaag goedkoper zijn, maar als de rente stijgt, kunnen uw maandlasten flink oplopen. Dit hangt af van uw risicobereidheid.',
20
+ },
21
+ {
22
+ question: 'Hoeveel bespaar ik als ik €10.000 extra aflos?',
23
+ answer:
24
+ 'Dat hangt af van het moment. Als u in het eerste jaar van een hypotheek van €200.000 tegen 3% extra aflost, kunt u meer dan €15.000 aan rente besparen. Doet u dit in het 20e jaar, dan bespaart u nauwelijks €2.000. Timing is essentieel.',
25
+ },
26
+ {
27
+ question: 'Welk percentage van mijn salaris mag naar de hypotheek gaan?',
28
+ answer:
29
+ 'De algemene aanbeveling is om niet meer dan 30-35% van uw netto maandinkomen aan woonlasten (inclusief andere schulden) uit te geven. Daarboven neemt het risico op betalingsproblemen bij tegenslag aanzienlijk toe.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Leenbedrag invoeren',
36
+ text: 'Voer het totale bedrag in dat u bij de bank wilt lenen (na aftrek van uw eigen inleg).',
37
+ },
38
+ {
39
+ name: 'Rentevoet aanpassen',
40
+ text: 'Voer de rentevoet in die de bank aanbiedt. U kunt vergelijken tussen een vaste of variabele rente.',
41
+ },
42
+ {
43
+ name: 'Looptijd kiezen',
44
+ text: 'Bepaal in hoeveel jaar u de lening wilt terugbetalen. Een langere looptijd betekent lagere maandlasten, maar u betaalt meer rente in totaal.',
45
+ },
46
+ {
47
+ name: 'Aflossingsschema analyseren',
48
+ text: 'Bekijk maand na maand hoe uw schuld afneemt en welk deel van uw maandlast naar rente versus aflossing gaat.',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowTo> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step, i) => ({
68
+ '@type': 'HowToStep',
69
+ position: i + 1,
70
+ name: step.name,
71
+ text: step.text,
72
+ })),
73
+ };
74
+
75
+ const appSchema: WithContext<SoftwareApplication> = {
76
+ '@context': 'https://schema.org',
77
+ '@type': 'SoftwareApplication',
78
+ name: title,
79
+ description,
80
+ applicationCategory: 'FinanceApplication',
81
+ operatingSystem: 'All',
82
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
83
+ inLanguage: 'nl',
84
+ };
85
+
86
+ export const content: ToolLocaleContent<MortgageUI> = {
87
+ slug,
88
+ title,
89
+ description,
90
+ faqTitle: 'Veelgestelde Vragen',
91
+ faq: faqData,
92
+ bibliographyTitle: 'Bronnen en Referenties',
93
+ bibliography: [
94
+ {
95
+ name: 'De Nederlandsche Bank: Informatie over hypotheken',
96
+ url: 'https://www.dnb.nl/',
97
+ },
98
+ {
99
+ name: 'Vereniging Eigen Huis: Hypotheek aflossen',
100
+ url: 'https://www.eigenhuis.nl/hypotheken/aflossen',
101
+ },
102
+ ],
103
+ howTo: howToData,
104
+ schemas: [faqSchema, howToSchema, appSchema],
105
+ seo: [
106
+ {
107
+ type: 'title',
108
+ text: 'Complete Gids voor Hypotheken: Het Annunïteitensysteem',
109
+ level: 2,
110
+ },
111
+ {
112
+ type: 'paragraph',
113
+ html: 'Een hypotheek is waarschijnlijk de grootste financiële verplichting die u in uw leven aangaat. Begrijpen hoe het aflossingssysteem werkt is cruciaal om slimme beslissingen te nemen die u tienduizenden euro’s kunnen besparen.',
114
+ },
115
+ {
116
+ type: 'title',
117
+ text: 'De "Valkuils" van het Franse Systeem: De Opbouw van uw Maandlast',
118
+ level: 3,
119
+ },
120
+ {
121
+ type: 'paragraph',
122
+ html: 'De meeste annuïteitenhypotheken werken volgens het <strong>Franse Amortisatiesysteem</strong>. Het belangrijkste kenmerk is dat het maandbedrag gelijk blijft (bij een vaste rente), maar de verhouding tussen rente en aflossing verandert gedurende de tijd.',
123
+ },
124
+ {
125
+ type: 'tip',
126
+ title: 'Het Verloop van uw Lasten',
127
+ html: '<p><strong>In het begin (Jaar 1-10):</strong> U betaalt bijna alleen maar RENTE en lost heel weinig af. Bij een hypotheek van €250.000 tegen 3% kan uw eerste betaling voor 80% uit rente bestaan.</p><p><strong>In het midden (Jaar 11-25):</strong> De verhouding komt geleidelijk meer in balans.</p><p><strong>Aan het einde (Jaar 26-30):</strong> U betaalt bijna alleen nog maar AFLOSSING en heel weinig rente.</p>',
128
+ },
129
+ {
130
+ type: 'paragraph',
131
+ html: 'Daarom is het veel rendabeler om in de eerste jaren van de hypotheek <strong>extra af te lossen</strong>. €10.000 extra aflossen in jaar 1 kan u meer dan €15.000 aan toekomstige rente besparen. Dezelfde aflossing in jaar 20 bespaart u nauwelijks €2.000.',
132
+ },
133
+ {
134
+ type: 'title',
135
+ text: 'Hoeveel Mag ik Uitgeven aan een Hypotheek?',
136
+ level: 3,
137
+ },
138
+ {
139
+ type: 'paragraph',
140
+ html: 'Financiële planners adviseren dat uw hypotheeklasten <strong>niet meer dan 30-35% van uw netto maandinkomen</strong> mogen bedragen. Als u hieroverheen gaat, neemt het risico toe dat u bij tegenslag (werkloosheid, ziekte) de lasten niet meer kunt dragen.',
141
+ },
142
+ {
143
+ type: 'title',
144
+ text: 'Context 2026: Vaste vs Variabele Rente',
145
+ level: 3,
146
+ },
147
+ {
148
+ type: 'paragraph',
149
+ html: 'Met een schommelende rente is de keuze tussen <strong>Vaste Rente</strong> of <strong>Variabele Rente</strong> een strategische beslissing die elk jaar duizenden euro’s kan schelen.',
150
+ },
151
+ {
152
+ type: 'comparative',
153
+ columns: 2,
154
+ items: [
155
+ {
156
+ title: 'Vaste Rente',
157
+ description: 'U betaalt nu iets meer, maar u slaapt rustig omdat uw lasten nooit zullen stijgen.',
158
+ points: [
159
+ 'Voorspelbare lasten voor de hele periode',
160
+ 'Bescherming tegen rentestijgingen',
161
+ 'Gemoedsrust in onzekere tijden',
162
+ 'Ideaal voor een strak budget',
163
+ ],
164
+ },
165
+ {
166
+ title: 'Variabele Rente',
167
+ description: 'Vandaag vaak goedkoper, maar het stelt u bloot aan onzekerheid.',
168
+ highlight: true,
169
+ points: [
170
+ 'Lagere startlasten',
171
+ 'Risico op flinke rentestijgingen',
172
+ 'Mogelijke grote impact op uw maandbudget',
173
+ 'Alleen voor wie risico kan dragen',
174
+ ],
175
+ },
176
+ ],
177
+ },
178
+ {
179
+ type: 'tip',
180
+ title: 'De Keuze Hangt Af van Uw Profiel',
181
+ html: '<p><strong>Kies Vaste Rente als:</strong> Uw budget krap is, u zekerheid zoekt en geen onaangename maandelijkse verrassingen wilt.</p><p><strong>Kies Variabele Rente als:</strong> U een financiële buffer heeft, verwacht dat de rente gaat dalen of een kleine/kortlopende hypotheek heeft.</p>',
182
+ },
183
+ ],
184
+ ui: {
185
+ labelTitle: 'Hypotheek Calculator',
186
+ labelLoanAmount: 'Leenbedrag',
187
+ labelInterestRate: 'Rente (Jaar)',
188
+ labelYears: 'Looptijd (Jaren)',
189
+ labelMonthlyExtra: 'Maandelijkse Extra Aflossing',
190
+ labelMonthlyPayment: 'Maandlast',
191
+ labelMonthCount: 'maanden',
192
+ labelSavingsCard: 'Uw Potentiële Besparing',
193
+ labelSavingsInterest: 'Rente',
194
+ labelSavingsTime: 'Tijd',
195
+ labelTimelineComparison: 'Tijdsvergelijking',
196
+ labelTimelineOriginal: 'Originele Duur',
197
+ labelTimelineOptimized: 'Duur met Extra Aflossing',
198
+ labelCostBreakdown: 'Overzicht Totale Kosten',
199
+ labelBorrowed: 'Geleend',
200
+ labelTotalBorrowed: 'Totaal Geleend',
201
+ labelTotalInterest: 'Totale Rente',
202
+ labelAmortizationTable: 'Aflossingsschema',
203
+ labelTableHeader: 'Bekijk volledige tabel',
204
+ labelViewAll: 'Bekijk alles',
205
+ labelPaid: 'Hypotheek Afgelost',
206
+ labelTableMonth: 'Maand',
207
+ labelTableInterest: 'Rente',
208
+ labelTablePrincipal: 'Aflossing',
209
+ labelTableExtra: 'Extra',
210
+ labelTableBalance: 'Restsaldo',
211
+ labelMoreMonths: 'meer maanden',
212
+ labelMonth: 'Maand',
213
+ currencySymbol: '€',
214
+ currencyCode: 'EUR',
215
+ currencyLocale: 'nl-NL',
216
+ monthPlural: 'maanden',
217
+ yearPlural: 'jaren',
218
+ },
219
+ };