@jjlmoya/utils-finance 1.30.0 → 1.31.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 (211) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/fr.ts +159 -159
  3. package/src/category/i18n/ru.ts +158 -158
  4. package/src/category/index.ts +39 -38
  5. package/src/category/seo.astro +1 -1
  6. package/src/components/PreviewNavSidebar.astro +1 -1
  7. package/src/components/PreviewToolbar.astro +1 -1
  8. package/src/data.ts +1 -1
  9. package/src/entries.ts +4 -1
  10. package/src/env.d.ts +1 -1
  11. package/src/index.ts +1 -0
  12. package/src/layouts/PreviewLayout.astro +113 -113
  13. package/src/pages/index.astro +1 -1
  14. package/src/tests/bibliography_wellformed_export.test.ts +46 -0
  15. package/src/tests/faq_count.test.ts +1 -1
  16. package/src/tests/locale_completeness.test.ts +2 -2
  17. package/src/tests/mocks/astro_mock.js +1 -1
  18. package/src/tests/no_h1_in_components.test.ts +1 -1
  19. package/src/tests/script_density.test.ts +94 -94
  20. package/src/tests/seo_length.test.ts +23 -23
  21. package/src/tests/seo_translation_completeness.test.ts +69 -0
  22. package/src/tests/seo_wellformed_export.test.ts +65 -0
  23. package/src/tests/tool_validation.test.ts +17 -17
  24. package/src/tool/compoundInterest/compound-interest-calculator.css +236 -236
  25. package/src/tool/compoundInterest/entry.ts +32 -32
  26. package/src/tool/compoundInterest/i18n/de.ts +195 -195
  27. package/src/tool/compoundInterest/i18n/fr.ts +195 -195
  28. package/src/tool/compoundInterest/i18n/it.ts +195 -195
  29. package/src/tool/compoundInterest/i18n/pl.ts +194 -194
  30. package/src/tool/compoundInterest/i18n/ru.ts +195 -195
  31. package/src/tool/compoundInterest/i18n/tr.ts +195 -195
  32. package/src/tool/compoundInterest/i18n/zh.ts +189 -189
  33. package/src/tool/compoundInterest/seo.astro +15 -15
  34. package/src/tool/courtFeeCalculator/i18n/it.ts +158 -158
  35. package/src/tool/courtFeeCalculator/i18n/ru.ts +158 -158
  36. package/src/tool/courtFeeCalculator/i18n/tr.ts +158 -158
  37. package/src/tool/courtFeeCalculator/seo.astro +15 -15
  38. package/src/tool/courtFeeCalculator/spanish-court-fees-calculator.css +197 -197
  39. package/src/tool/debtSnowball/bibliography.ts +12 -12
  40. package/src/tool/debtSnowball/i18n/de.ts +16 -16
  41. package/src/tool/debtSnowball/i18n/id.ts +16 -16
  42. package/src/tool/debtSnowball/i18n/it.ts +168 -168
  43. package/src/tool/debtSnowball/i18n/nl.ts +16 -16
  44. package/src/tool/debtSnowball/i18n/pl.ts +168 -168
  45. package/src/tool/debtSnowball/i18n/pt.ts +1 -1
  46. package/src/tool/debtSnowball/i18n/ru.ts +1 -1
  47. package/src/tool/debtSnowball/i18n/sv.ts +22 -29
  48. package/src/tool/debtSnowball/i18n/tr.ts +168 -168
  49. package/src/tool/debtSnowball/i18n/zh.ts +168 -168
  50. package/src/tool/debtSnowball/seo.astro +15 -15
  51. package/src/tool/dividendYield/bibliography.astro +14 -0
  52. package/src/tool/dividendYield/bibliography.ts +12 -0
  53. package/src/tool/dividendYield/component.astro +83 -0
  54. package/src/tool/dividendYield/controller.ts +85 -0
  55. package/src/tool/dividendYield/dividend-yield-calculator.css +352 -0
  56. package/src/tool/dividendYield/dom-views.ts +58 -0
  57. package/src/tool/dividendYield/entry.ts +29 -0
  58. package/src/tool/dividendYield/evaluator.ts +16 -0
  59. package/src/tool/dividendYield/i18n/de.ts +53 -0
  60. package/src/tool/dividendYield/i18n/en.ts +138 -0
  61. package/src/tool/dividendYield/i18n/es.ts +49 -0
  62. package/src/tool/dividendYield/i18n/fr.ts +49 -0
  63. package/src/tool/dividendYield/i18n/id.ts +49 -0
  64. package/src/tool/dividendYield/i18n/it.ts +49 -0
  65. package/src/tool/dividendYield/i18n/ja.ts +49 -0
  66. package/src/tool/dividendYield/i18n/ko.ts +25 -0
  67. package/src/tool/dividendYield/i18n/nl.ts +25 -0
  68. package/src/tool/dividendYield/i18n/pl.ts +25 -0
  69. package/src/tool/dividendYield/i18n/pt.ts +25 -0
  70. package/src/tool/dividendYield/i18n/ru.ts +25 -0
  71. package/src/tool/dividendYield/i18n/sv.ts +25 -0
  72. package/src/tool/dividendYield/i18n/tr.ts +25 -0
  73. package/src/tool/dividendYield/i18n/zh.ts +25 -0
  74. package/src/tool/dividendYield/index.ts +11 -0
  75. package/src/tool/dividendYield/logic.test.ts +73 -0
  76. package/src/tool/dividendYield/logic.ts +55 -0
  77. package/src/tool/dividendYield/seo.astro +14 -0
  78. package/src/tool/dividendYield/storage.ts +24 -0
  79. package/src/tool/dividendYield/ui.ts +33 -0
  80. package/src/tool/financialFreedom/financial-freedom-calculator.css +311 -311
  81. package/src/tool/financialFreedom/i18n/en.ts +182 -182
  82. package/src/tool/financialFreedom/i18n/fr.ts +128 -128
  83. package/src/tool/financialFreedom/i18n/id.ts +24 -7
  84. package/src/tool/financialFreedom/i18n/it.ts +24 -7
  85. package/src/tool/financialFreedom/i18n/ja.ts +1 -1
  86. package/src/tool/financialFreedom/i18n/nl.ts +24 -7
  87. package/src/tool/financialFreedom/i18n/pl.ts +24 -7
  88. package/src/tool/financialFreedom/i18n/pt.ts +24 -7
  89. package/src/tool/financialFreedom/i18n/ru.ts +128 -128
  90. package/src/tool/financialFreedom/i18n/sv.ts +1 -1
  91. package/src/tool/financialFreedom/i18n/tr.ts +2 -2
  92. package/src/tool/financialFreedom/i18n/zh.ts +128 -128
  93. package/src/tool/fireCalculator/i18n/it.ts +241 -241
  94. package/src/tool/fireCalculator/i18n/ru.ts +241 -241
  95. package/src/tool/fireCalculator/i18n/tr.ts +241 -241
  96. package/src/tool/fireCalculator/i18n/zh.ts +241 -241
  97. package/src/tool/fireCalculator/seo.astro +15 -15
  98. package/src/tool/ibanBicSwiftConverter/i18n/fr.ts +151 -151
  99. package/src/tool/ibanBicSwiftConverter/i18n/it.ts +118 -118
  100. package/src/tool/ibanBicSwiftConverter/i18n/ru.ts +118 -118
  101. package/src/tool/ibanBicSwiftConverter/i18n/tr.ts +118 -118
  102. package/src/tool/ibanBicSwiftConverter/iban-to-bic-swift-converter.css +366 -366
  103. package/src/tool/ibanBicSwiftConverter/seo.astro +15 -15
  104. package/src/tool/inflation/bibliography.ts +20 -20
  105. package/src/tool/inflation/entry.ts +32 -32
  106. package/src/tool/inflation/i18n/de.ts +284 -284
  107. package/src/tool/inflation/i18n/fr.ts +284 -284
  108. package/src/tool/inflation/i18n/it.ts +284 -284
  109. package/src/tool/inflation/i18n/nl.ts +284 -284
  110. package/src/tool/inflation/i18n/pl.ts +284 -284
  111. package/src/tool/inflation/i18n/pt.ts +284 -284
  112. package/src/tool/inflation/i18n/ru.ts +284 -284
  113. package/src/tool/inflation/i18n/sv.ts +284 -284
  114. package/src/tool/inflation/i18n/tr.ts +284 -284
  115. package/src/tool/inflation/i18n/zh.ts +284 -284
  116. package/src/tool/inflation/seo.astro +15 -15
  117. package/src/tool/lateInterest/bibliography.ts +16 -16
  118. package/src/tool/lateInterest/entry.ts +32 -32
  119. package/src/tool/lateInterest/i18n/de.ts +213 -213
  120. package/src/tool/lateInterest/i18n/es.ts +213 -213
  121. package/src/tool/lateInterest/i18n/it.ts +213 -213
  122. package/src/tool/lateInterest/i18n/nl.ts +213 -213
  123. package/src/tool/lateInterest/i18n/pl.ts +213 -213
  124. package/src/tool/lateInterest/i18n/pt.ts +213 -213
  125. package/src/tool/lateInterest/i18n/ru.ts +213 -213
  126. package/src/tool/lateInterest/i18n/sv.ts +213 -213
  127. package/src/tool/lateInterest/i18n/tr.ts +213 -213
  128. package/src/tool/lateInterest/i18n/zh.ts +213 -213
  129. package/src/tool/lateInterest/seo.astro +15 -15
  130. package/src/tool/legalInterestRate/i18n/it.ts +129 -129
  131. package/src/tool/legalInterestRate/i18n/ru.ts +129 -129
  132. package/src/tool/legalInterestRate/i18n/tr.ts +128 -121
  133. package/src/tool/legalInterestRate/i18n/zh.ts +11 -4
  134. package/src/tool/legalInterestRate/seo.astro +15 -15
  135. package/src/tool/lotteryOptimizer/i18n/it.ts +163 -163
  136. package/src/tool/lotteryOptimizer/i18n/pl.ts +163 -163
  137. package/src/tool/lotteryOptimizer/i18n/ru.ts +163 -163
  138. package/src/tool/lotteryOptimizer/i18n/tr.ts +163 -163
  139. package/src/tool/lotteryOptimizer/i18n/zh.ts +162 -155
  140. package/src/tool/lotteryOptimizer/seo.astro +15 -15
  141. package/src/tool/mortgage/bibliography.ts +20 -20
  142. package/src/tool/mortgage/entry.ts +32 -32
  143. package/src/tool/mortgage/i18n/de.ts +210 -210
  144. package/src/tool/mortgage/i18n/es.ts +210 -210
  145. package/src/tool/mortgage/i18n/fr.ts +210 -210
  146. package/src/tool/mortgage/i18n/id.ts +210 -210
  147. package/src/tool/mortgage/i18n/it.ts +210 -210
  148. package/src/tool/mortgage/i18n/nl.ts +210 -210
  149. package/src/tool/mortgage/i18n/pl.ts +210 -210
  150. package/src/tool/mortgage/i18n/ru.ts +210 -210
  151. package/src/tool/mortgage/i18n/tr.ts +210 -210
  152. package/src/tool/mortgage/i18n/zh.ts +210 -210
  153. package/src/tool/mortgage/mortgage-calculator.css +595 -595
  154. package/src/tool/mortgage/seo.astro +15 -15
  155. package/src/tool/percentageCalculator/bibliography.ts +16 -16
  156. package/src/tool/percentageCalculator/entry.ts +32 -32
  157. package/src/tool/percentageCalculator/i18n/de.ts +220 -220
  158. package/src/tool/percentageCalculator/i18n/en.ts +220 -220
  159. package/src/tool/percentageCalculator/i18n/es.ts +220 -220
  160. package/src/tool/percentageCalculator/i18n/fr.ts +220 -220
  161. package/src/tool/percentageCalculator/i18n/it.ts +220 -220
  162. package/src/tool/percentageCalculator/i18n/pl.ts +220 -220
  163. package/src/tool/percentageCalculator/i18n/ru.ts +220 -220
  164. package/src/tool/percentageCalculator/i18n/tr.ts +220 -220
  165. package/src/tool/percentageCalculator/i18n/zh.ts +220 -220
  166. package/src/tool/percentageCalculator/seo.astro +15 -15
  167. package/src/tool/profitability/i18n/de.ts +24 -7
  168. package/src/tool/profitability/i18n/fr.ts +121 -104
  169. package/src/tool/profitability/i18n/id.ts +2 -2
  170. package/src/tool/profitability/i18n/it.ts +24 -7
  171. package/src/tool/profitability/i18n/ja.ts +1 -1
  172. package/src/tool/profitability/i18n/nl.ts +24 -7
  173. package/src/tool/profitability/i18n/pl.ts +1 -1
  174. package/src/tool/profitability/i18n/pt.ts +24 -7
  175. package/src/tool/profitability/i18n/ru.ts +118 -118
  176. package/src/tool/profitability/i18n/sv.ts +1 -1
  177. package/src/tool/profitability/i18n/tr.ts +1 -1
  178. package/src/tool/profitability/i18n/zh.ts +118 -118
  179. package/src/tool/profitability/profitability-calculator.css +229 -229
  180. package/src/tool/rentIncreaseCalculator/i18n/it.ts +125 -125
  181. package/src/tool/rentIncreaseCalculator/i18n/tr.ts +125 -125
  182. package/src/tool/rentIncreaseCalculator/rent-increase-calculator.css +326 -326
  183. package/src/tool/rentIncreaseCalculator/seo.astro +15 -15
  184. package/src/tool/revolvingCardCalculator/i18n/de.ts +38 -20
  185. package/src/tool/revolvingCardCalculator/i18n/es.ts +19 -18
  186. package/src/tool/revolvingCardCalculator/i18n/fr.ts +32 -28
  187. package/src/tool/revolvingCardCalculator/i18n/id.ts +18 -18
  188. package/src/tool/revolvingCardCalculator/i18n/it.ts +18 -18
  189. package/src/tool/revolvingCardCalculator/i18n/ja.ts +2 -2
  190. package/src/tool/revolvingCardCalculator/i18n/ko.ts +2 -2
  191. package/src/tool/revolvingCardCalculator/i18n/nl.ts +22 -19
  192. package/src/tool/revolvingCardCalculator/i18n/pl.ts +2 -2
  193. package/src/tool/revolvingCardCalculator/i18n/pt.ts +2 -2
  194. package/src/tool/revolvingCardCalculator/i18n/ru.ts +2 -2
  195. package/src/tool/revolvingCardCalculator/i18n/sv.ts +2 -2
  196. package/src/tool/revolvingCardCalculator/i18n/tr.ts +2 -2
  197. package/src/tool/revolvingCardCalculator/i18n/zh.ts +6 -6
  198. package/src/tool/salaryEmployerCost/i18n/de.ts +10 -10
  199. package/src/tool/salaryEmployerCost/i18n/fr.ts +9 -9
  200. package/src/tool/salaryEmployerCost/i18n/id.ts +9 -9
  201. package/src/tool/salaryEmployerCost/i18n/it.ts +9 -9
  202. package/src/tool/salaryEmployerCost/i18n/ja.ts +1 -1
  203. package/src/tool/salaryEmployerCost/i18n/ko.ts +1 -1
  204. package/src/tool/salaryEmployerCost/i18n/nl.ts +2 -2
  205. package/src/tool/salaryEmployerCost/i18n/pl.ts +2 -2
  206. package/src/tool/salaryEmployerCost/i18n/pt.ts +2 -2
  207. package/src/tool/salaryEmployerCost/i18n/ru.ts +2 -2
  208. package/src/tool/salaryEmployerCost/i18n/sv.ts +2 -2
  209. package/src/tool/salaryEmployerCost/i18n/tr.ts +2 -2
  210. package/src/tool/salaryEmployerCost/i18n/zh.ts +2 -2
  211. package/src/tools.ts +2 -1
@@ -1,210 +1,210 @@
1
- import { bibliography } from '../bibliography'
2
- import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
- import type { ToolLocaleContent } from '../../../types';
4
- import type { MortgageUI } from '../ui';
5
-
6
- const slug = 'kalkulator-hipotek';
7
- const title = 'Simulator Hipotek dan Tabel Amortisasi Prancis';
8
- const description =
9
- 'Hitung angsuran hipotek bulanan Anda, cari tahu berapa besar bunga yang akan Anda bayar, dan visualisasikan jadwal amortisasi lengkap Anda secara instan.';
10
-
11
- const faqData = [
12
- {
13
- question: 'Apa itu sistem amortisasi Prancis?',
14
- answer:
15
- 'Ini adalah sistem yang paling banyak digunakan. Angsuran bulanan selalu sama, tetapi pada awalnya Anda membayar hampir seluruhnya untuk bunga dan sangat sedikit pokok. Pada akhirnya, yang terjadi adalah sebaliknya. Itulah mengapa melakukan pelunasan dipercepat lebih menguntungkan di tahun-tahun awal.',
16
- },
17
- {
18
- question: 'Bunga tetap atau mengambang di tahun 2026?',
19
- answer:
20
- 'Bunga tetap: Anda membayar lebih banyak sekarang tetapi tidur nyenyak selama 30 tahun. Bunga mengambang: bisa lebih murah hari ini, tetapi jika suku bunga naik, angsuran Anda dapat melonjak drastis. Ini tergantung pada toleransi risiko Anda.',
21
- },
22
- {
23
- question: 'Berapa banyak yang saya hemat jika saya melunasi 10 juta rupiah dipercepat?',
24
- answer:
25
- 'Tergantung pada waktunya. Jika dilakukan pada tahun ke-1 dari hipotek 200 juta rupiah dengan bunga 3%, Anda bisa menghemat lebih dari 15 juta rupiah bunga. Jika dilakukan pada tahun ke-20, penghematannya hanya sekitar 2 juta rupiah. Pengaturan waktu sangat penting.',
26
- },
27
- {
28
- question: 'Berapa persentase gaji saya yang harus dialokasikan untuk hipotek?',
29
- answer:
30
- 'Rekomendasi umumnya adalah tidak melebihi 30-35% dari pendapatan bersih bulanan Anda (termasuk hutang lainnya). Melampaui ambang batas ini secara signifikan meningkatkan risiko gagal bayar jika terjadi hal yang tidak terduga.',
31
- },
32
- ];
33
-
34
- const howToData = [
35
- {
36
- name: 'Masukkan jumlah pinjaman',
37
- text: 'Tuliskan jumlah total yang perlu Anda ajukan ke bank (setelah dikurangi uang muka Anda).',
38
- },
39
- {
40
- name: 'Sesuaikan suku bunga',
41
- text: 'Masukkan bunga tahunan yang ditawarkan oleh bank. Anda dapat membandingkan antara bunga tetap atau mengambang.',
42
- },
43
- {
44
- name: 'Pilih jangka waktu amortisasi',
45
- text: 'Tentukan berapa tahun Anda ingin melunasi pinjaman. Semakin lama jangka waktunya, angsuran semakin rendah tetapi Anda akan membayar total bunga yang lebih besar.',
46
- },
47
- {
48
- name: 'Analisis tabel amortisasi',
49
- text: 'Tinjau bulan demi bulan bagaimana perkembangan utang Anda dan bagian mana dari angsuran Anda yang digunakan untuk bunga vs pokok.',
50
- },
51
- ];
52
-
53
- const faqSchema: WithContext<FAQPage> = {
54
- '@context': 'https://schema.org',
55
- '@type': 'FAQPage',
56
- mainEntity: faqData.map((item) => ({
57
- '@type': 'Question',
58
- name: item.question,
59
- acceptedAnswer: { '@type': 'Answer', text: item.answer },
60
- })),
61
- };
62
-
63
- const howToSchema: WithContext<HowTo> = {
64
- '@context': 'https://schema.org',
65
- '@type': 'HowTo',
66
- name: title,
67
- description,
68
- step: howToData.map((step, i) => ({
69
- '@type': 'HowToStep',
70
- position: i + 1,
71
- name: step.name,
72
- text: step.text,
73
- })),
74
- };
75
-
76
- const appSchema: WithContext<SoftwareApplication> = {
77
- '@context': 'https://schema.org',
78
- '@type': 'SoftwareApplication',
79
- name: title,
80
- description,
81
- applicationCategory: 'FinanceApplication',
82
- operatingSystem: 'All',
83
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'IDR' },
84
- inLanguage: 'id',
85
- };
86
-
87
- export const content: ToolLocaleContent<MortgageUI> = {
88
- slug,
89
- title,
90
- description,
91
- faq: faqData,
92
- bibliography,
93
-
94
- howTo: howToData,
95
- schemas: [faqSchema, howToSchema, appSchema],
96
- seo: [
97
- {
98
- type: 'title',
99
- text: 'Panduan Lengkap Hipotek: Sistem Prancis dan Amortisasi',
100
- level: 2,
101
- },
102
- {
103
- type: 'paragraph',
104
- html: 'Hipotek kemungkinan besar merupakan utang terbesar yang akan Anda ambil dalam hidup Anda. Memahami cara kerja sistem amortisasi Prancis sangat penting untuk mengambil keputusan cerdas yang dapat menghemat puluhan juta rupiah bagi Anda.',
105
- },
106
- {
107
- type: 'title',
108
- text: '"Jebakan" Sistem Prancis: Memahami Komposisi Angsuran Anda',
109
- level: 3,
110
- },
111
- {
112
- type: 'paragraph',
113
- html: 'Sebagian besar hipotek menggunakan <strong>Sistem Amortisasi Prancis</strong>. Ciri utamanya adalah angsuran bulanan selalu sama (jika bunga tetap), tetapi komposisinya berubah drastis seiring waktu.',
114
- },
115
- {
116
- type: 'tip',
117
- title: 'Bagaimana Angsuran Anda Berkembang',
118
- html: '<p><strong>Pada awal (Tahun 1-10):</strong> Anda membayar hampir semuanya UNTUK BUNGA dan sangat sedikit mengembalikan uang yang dipinjam. Pada hipotek 250 juta rupiah dengan bunga 3%, pembayaran pertama Anda bisa terdiri dari 80% bunga.</p><p><strong>Di tengah (Tahun 11-25):</strong> Proporsinya berangsur-angsur seimbang.</p><p><strong>Di akhir (Tahun 26-30):</strong> Anda membayar hampir seluruhnya UNTUK POKOK dan sangat sedikit bunga.</p>',
119
- },
120
- {
121
- type: 'paragraph',
122
- html: 'Oleh karena itu, jika Anda akan melakukan <strong>amortisasi hipotek</strong> (pembayaran dipercepat), jauh lebih menguntungkan untuk melakukannya di tahun-tahun awal pinjaman. Melunasi 10 juta rupiah di tahun ke-1 dapat menghemat lebih dari 15 juta rupiah bunga. Pembayaran dipercepat yang sama di tahun ke-20 hampir tidak menghemat Anda 2 juta rupiah.',
123
- },
124
- {
125
- type: 'title',
126
- text: 'Berapa Banyak Uang yang Harus Saya Alokasikan untuk Hipotek?',
127
- level: 3,
128
- },
129
- {
130
- type: 'paragraph',
131
- html: 'Rekomendasi umum adalah agar hipotek Anda <strong>tidak melebihi 30-35% dari pendapatan bersih bulanan Anda</strong>. Jika Anda melampaui ambang batas ini, Anda secara signifikan meningkatkan risiko gagal bayar jika terjadi hal yang tidak terduga (kehilangan pekerjaan, sakit, dll.).',
132
- },
133
- {
134
- type: 'title',
135
- text: 'Konteks 2026: Bunga Tetap vs Mengambang',
136
- level: 3,
137
- },
138
- {
139
- type: 'paragraph',
140
- html: 'Dengan suku bunga yang fluktuatif, memilih antara <strong>Bunga Tetap</strong> atau <strong>Bunga Mengambang</strong> adalah keputusan strategis yang dapat menghabiskan jutaan rupiah per tahun.',
141
- },
142
- {
143
- type: 'comparative',
144
- columns: 2,
145
- items: [
146
- {
147
- title: 'Bunga Tetap',
148
- description: 'Anda membayar sedikit lebih banyak sekarang, tetapi tidur tenang mengetahui angsuran Anda tidak akan pernah naik.',
149
- points: [
150
- 'Angsuran terprediksi selama 30 tahun',
151
- 'Perlindungan terhadap kenaikan suku bunga',
152
- 'Ketenangan pikiran dalam ekonomi yang tidak pasti',
153
- 'Ideal untuk anggaran ketat',
154
- ],
155
- },
156
- {
157
- title: 'Bunga Mengambang',
158
- description: 'Bisa lebih murah hari ini, tetapi mengekspos ekonomi Anda pada volatilitas.',
159
- highlight: true,
160
- points: [
161
- 'Angsuran awal lebih rendah',
162
- 'Risiko kenaikan suku bunga pasar',
163
- 'Potensi dampak serius pada anggaran',
164
- 'Hanya untuk mereka yang mentoleransi risiko tinggi',
165
- ],
166
- },
167
- ],
168
- },
169
- {
170
- type: 'tip',
171
- title: 'Keputusan Tetap vs Mengambang Tergantung pada Profil Anda',
172
- html: '<p><strong>Pilih Bunga Tetap jika:</strong> Anggaran Anda ketat, Anda mencari kepastian, dan tidak mentoleransi kejutan bulanan yang tidak menyenangkan.</p><p><strong>Pilih Bunga Mengambang jika:</strong> Anda memiliki penyangga finansial, Anda yakin suku bunga akan turun, atau hipotek Anda berjumlah kecil atau jangka pendek.</p>',
173
- },
174
- ],
175
- ui: {
176
- labelTitle: 'Kalkulator Hipotek',
177
- labelLoanAmount: 'Jumlah Pinjaman',
178
- labelInterestRate: 'Bunga Tahunan',
179
- labelYears: 'Jangka Waktu (Tahun)',
180
- labelMonthlyExtra: 'Tambah Tabungan Bulanan',
181
- labelMonthlyPayment: 'Angsuran Bulanan',
182
- labelMonthCount: 'bulan',
183
- labelSavingsCard: 'Potensi Penghematan Anda',
184
- labelSavingsInterest: 'Bunga',
185
- labelSavingsTime: 'Waktu',
186
- labelTimelineComparison: 'Perbandingan Waktu',
187
- labelTimelineOriginal: 'Durasi Asli',
188
- labelTimelineOptimized: 'Durasi dengan Amortisasi',
189
- labelCostBreakdown: 'Rincian Biaya Total',
190
- labelBorrowed: 'Dipinjam',
191
- labelTotalBorrowed: 'Total Pinjaman',
192
- labelTotalInterest: 'Total Bunga',
193
- labelAmortizationTable: 'Tabel Amortisasi',
194
- labelTableHeader: 'Lihat tabel lengkap',
195
- labelViewAll: 'Lihat semua',
196
- labelPaid: 'Hipotek Lunas',
197
- labelTableMonth: 'Bulan',
198
- labelTableInterest: 'Bunga',
199
- labelTablePrincipal: 'Pokok',
200
- labelTableExtra: 'Ekstra',
201
- labelTableBalance: 'Sisa Utang',
202
- labelMoreMonths: 'bulan lagi',
203
- labelMonth: 'Bulan',
204
- currencySymbol: 'Rp',
205
- currencyCode: 'IDR',
206
- currencyLocale: 'id-ID',
207
- monthPlural: 'bulan',
208
- yearPlural: 'tahun',
209
- },
210
- };
1
+ import { bibliography } from '../bibliography'
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { ToolLocaleContent } from '../../../types';
4
+ import type { MortgageUI } from '../ui';
5
+
6
+ const slug = 'kalkulator-hipotek';
7
+ const title = 'Simulator Hipotek dan Tabel Amortisasi Prancis';
8
+ const description =
9
+ 'Hitung angsuran hipotek bulanan Anda, cari tahu berapa besar bunga yang akan Anda bayar, dan visualisasikan jadwal amortisasi lengkap Anda secara instan.';
10
+
11
+ const faqData = [
12
+ {
13
+ question: 'Apa itu sistem amortisasi Prancis?',
14
+ answer:
15
+ 'Ini adalah sistem yang paling banyak digunakan. Angsuran bulanan selalu sama, tetapi pada awalnya Anda membayar hampir seluruhnya untuk bunga dan sangat sedikit pokok. Pada akhirnya, yang terjadi adalah sebaliknya. Itulah mengapa melakukan pelunasan dipercepat lebih menguntungkan di tahun-tahun awal.',
16
+ },
17
+ {
18
+ question: 'Bunga tetap atau mengambang di tahun 2026?',
19
+ answer:
20
+ 'Bunga tetap: Anda membayar lebih banyak sekarang tetapi tidur nyenyak selama 30 tahun. Bunga mengambang: bisa lebih murah hari ini, tetapi jika suku bunga naik, angsuran Anda dapat melonjak drastis. Ini tergantung pada toleransi risiko Anda.',
21
+ },
22
+ {
23
+ question: 'Berapa banyak yang saya hemat jika saya melunasi 10 juta rupiah dipercepat?',
24
+ answer:
25
+ 'Tergantung pada waktunya. Jika dilakukan pada tahun ke-1 dari hipotek 200 juta rupiah dengan bunga 3%, Anda bisa menghemat lebih dari 15 juta rupiah bunga. Jika dilakukan pada tahun ke-20, penghematannya hanya sekitar 2 juta rupiah. Pengaturan waktu sangat penting.',
26
+ },
27
+ {
28
+ question: 'Berapa persentase gaji saya yang harus dialokasikan untuk hipotek?',
29
+ answer:
30
+ 'Rekomendasi umumnya adalah tidak melebihi 30-35% dari pendapatan bersih bulanan Anda (termasuk hutang lainnya). Melampaui ambang batas ini secara signifikan meningkatkan risiko gagal bayar jika terjadi hal yang tidak terduga.',
31
+ },
32
+ ];
33
+
34
+ const howToData = [
35
+ {
36
+ name: 'Masukkan jumlah pinjaman',
37
+ text: 'Tuliskan jumlah total yang perlu Anda ajukan ke bank (setelah dikurangi uang muka Anda).',
38
+ },
39
+ {
40
+ name: 'Sesuaikan suku bunga',
41
+ text: 'Masukkan bunga tahunan yang ditawarkan oleh bank. Anda dapat membandingkan antara bunga tetap atau mengambang.',
42
+ },
43
+ {
44
+ name: 'Pilih jangka waktu amortisasi',
45
+ text: 'Tentukan berapa tahun Anda ingin melunasi pinjaman. Semakin lama jangka waktunya, angsuran semakin rendah tetapi Anda akan membayar total bunga yang lebih besar.',
46
+ },
47
+ {
48
+ name: 'Analisis tabel amortisasi',
49
+ text: 'Tinjau bulan demi bulan bagaimana perkembangan utang Anda dan bagian mana dari angsuran Anda yang digunakan untuk bunga vs pokok.',
50
+ },
51
+ ];
52
+
53
+ const faqSchema: WithContext<FAQPage> = {
54
+ '@context': 'https://schema.org',
55
+ '@type': 'FAQPage',
56
+ mainEntity: faqData.map((item) => ({
57
+ '@type': 'Question',
58
+ name: item.question,
59
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
60
+ })),
61
+ };
62
+
63
+ const howToSchema: WithContext<HowTo> = {
64
+ '@context': 'https://schema.org',
65
+ '@type': 'HowTo',
66
+ name: title,
67
+ description,
68
+ step: howToData.map((step, i) => ({
69
+ '@type': 'HowToStep',
70
+ position: i + 1,
71
+ name: step.name,
72
+ text: step.text,
73
+ })),
74
+ };
75
+
76
+ const appSchema: WithContext<SoftwareApplication> = {
77
+ '@context': 'https://schema.org',
78
+ '@type': 'SoftwareApplication',
79
+ name: title,
80
+ description,
81
+ applicationCategory: 'FinanceApplication',
82
+ operatingSystem: 'All',
83
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'IDR' },
84
+ inLanguage: 'id',
85
+ };
86
+
87
+ export const content: ToolLocaleContent<MortgageUI> = {
88
+ slug,
89
+ title,
90
+ description,
91
+ faq: faqData,
92
+ bibliography,
93
+
94
+ howTo: howToData,
95
+ schemas: [faqSchema, howToSchema, appSchema],
96
+ seo: [
97
+ {
98
+ type: 'title',
99
+ text: 'Panduan Lengkap Hipotek: Sistem Prancis dan Amortisasi',
100
+ level: 2,
101
+ },
102
+ {
103
+ type: 'paragraph',
104
+ html: 'Hipotek kemungkinan besar merupakan utang terbesar yang akan Anda ambil dalam hidup Anda. Memahami cara kerja sistem amortisasi Prancis sangat penting untuk mengambil keputusan cerdas yang dapat menghemat puluhan juta rupiah bagi Anda.',
105
+ },
106
+ {
107
+ type: 'title',
108
+ text: '"Jebakan" Sistem Prancis: Memahami Komposisi Angsuran Anda',
109
+ level: 3,
110
+ },
111
+ {
112
+ type: 'paragraph',
113
+ html: 'Sebagian besar hipotek menggunakan <strong>Sistem Amortisasi Prancis</strong>. Ciri utamanya adalah angsuran bulanan selalu sama (jika bunga tetap), tetapi komposisinya berubah drastis seiring waktu.',
114
+ },
115
+ {
116
+ type: 'tip',
117
+ title: 'Bagaimana Angsuran Anda Berkembang',
118
+ html: '<p><strong>Pada awal (Tahun 1-10):</strong> Anda membayar hampir semuanya UNTUK BUNGA dan sangat sedikit mengembalikan uang yang dipinjam. Pada hipotek 250 juta rupiah dengan bunga 3%, pembayaran pertama Anda bisa terdiri dari 80% bunga.</p><p><strong>Di tengah (Tahun 11-25):</strong> Proporsinya berangsur-angsur seimbang.</p><p><strong>Di akhir (Tahun 26-30):</strong> Anda membayar hampir seluruhnya UNTUK POKOK dan sangat sedikit bunga.</p>',
119
+ },
120
+ {
121
+ type: 'paragraph',
122
+ html: 'Oleh karena itu, jika Anda akan melakukan <strong>amortisasi hipotek</strong> (pembayaran dipercepat), jauh lebih menguntungkan untuk melakukannya di tahun-tahun awal pinjaman. Melunasi 10 juta rupiah di tahun ke-1 dapat menghemat lebih dari 15 juta rupiah bunga. Pembayaran dipercepat yang sama di tahun ke-20 hampir tidak menghemat Anda 2 juta rupiah.',
123
+ },
124
+ {
125
+ type: 'title',
126
+ text: 'Berapa Banyak Uang yang Harus Saya Alokasikan untuk Hipotek?',
127
+ level: 3,
128
+ },
129
+ {
130
+ type: 'paragraph',
131
+ html: 'Rekomendasi umum adalah agar hipotek Anda <strong>tidak melebihi 30-35% dari pendapatan bersih bulanan Anda</strong>. Jika Anda melampaui ambang batas ini, Anda secara signifikan meningkatkan risiko gagal bayar jika terjadi hal yang tidak terduga (kehilangan pekerjaan, sakit, dll.).',
132
+ },
133
+ {
134
+ type: 'title',
135
+ text: 'Konteks 2026: Bunga Tetap vs Mengambang',
136
+ level: 3,
137
+ },
138
+ {
139
+ type: 'paragraph',
140
+ html: 'Dengan suku bunga yang fluktuatif, memilih antara <strong>Bunga Tetap</strong> atau <strong>Bunga Mengambang</strong> adalah keputusan strategis yang dapat menghabiskan jutaan rupiah per tahun.',
141
+ },
142
+ {
143
+ type: 'comparative',
144
+ columns: 2,
145
+ items: [
146
+ {
147
+ title: 'Bunga Tetap',
148
+ description: 'Anda membayar sedikit lebih banyak sekarang, tetapi tidur tenang mengetahui angsuran Anda tidak akan pernah naik.',
149
+ points: [
150
+ 'Angsuran terprediksi selama 30 tahun',
151
+ 'Perlindungan terhadap kenaikan suku bunga',
152
+ 'Ketenangan pikiran dalam ekonomi yang tidak pasti',
153
+ 'Ideal untuk anggaran ketat',
154
+ ],
155
+ },
156
+ {
157
+ title: 'Bunga Mengambang',
158
+ description: 'Bisa lebih murah hari ini, tetapi mengekspos ekonomi Anda pada volatilitas.',
159
+ highlight: true,
160
+ points: [
161
+ 'Angsuran awal lebih rendah',
162
+ 'Risiko kenaikan suku bunga pasar',
163
+ 'Potensi dampak serius pada anggaran',
164
+ 'Hanya untuk mereka yang mentoleransi risiko tinggi',
165
+ ],
166
+ },
167
+ ],
168
+ },
169
+ {
170
+ type: 'tip',
171
+ title: 'Keputusan Tetap vs Mengambang Tergantung pada Profil Anda',
172
+ html: '<p><strong>Pilih Bunga Tetap jika:</strong> Anggaran Anda ketat, Anda mencari kepastian, dan tidak mentoleransi kejutan bulanan yang tidak menyenangkan.</p><p><strong>Pilih Bunga Mengambang jika:</strong> Anda memiliki penyangga finansial, Anda yakin suku bunga akan turun, atau hipotek Anda berjumlah kecil atau jangka pendek.</p>',
173
+ },
174
+ ],
175
+ ui: {
176
+ labelTitle: 'Kalkulator Hipotek',
177
+ labelLoanAmount: 'Jumlah Pinjaman',
178
+ labelInterestRate: 'Bunga Tahunan',
179
+ labelYears: 'Jangka Waktu (Tahun)',
180
+ labelMonthlyExtra: 'Tambah Tabungan Bulanan',
181
+ labelMonthlyPayment: 'Angsuran Bulanan',
182
+ labelMonthCount: 'bulan',
183
+ labelSavingsCard: 'Potensi Penghematan Anda',
184
+ labelSavingsInterest: 'Bunga',
185
+ labelSavingsTime: 'Waktu',
186
+ labelTimelineComparison: 'Perbandingan Waktu',
187
+ labelTimelineOriginal: 'Durasi Asli',
188
+ labelTimelineOptimized: 'Durasi dengan Amortisasi',
189
+ labelCostBreakdown: 'Rincian Biaya Total',
190
+ labelBorrowed: 'Dipinjam',
191
+ labelTotalBorrowed: 'Total Pinjaman',
192
+ labelTotalInterest: 'Total Bunga',
193
+ labelAmortizationTable: 'Tabel Amortisasi',
194
+ labelTableHeader: 'Lihat tabel lengkap',
195
+ labelViewAll: 'Lihat semua',
196
+ labelPaid: 'Hipotek Lunas',
197
+ labelTableMonth: 'Bulan',
198
+ labelTableInterest: 'Bunga',
199
+ labelTablePrincipal: 'Pokok',
200
+ labelTableExtra: 'Ekstra',
201
+ labelTableBalance: 'Sisa Utang',
202
+ labelMoreMonths: 'bulan lagi',
203
+ labelMonth: 'Bulan',
204
+ currencySymbol: 'Rp',
205
+ currencyCode: 'IDR',
206
+ currencyLocale: 'id-ID',
207
+ monthPlural: 'bulan',
208
+ yearPlural: 'tahun',
209
+ },
210
+ };