@jjlmoya/utils-finance 1.30.0 → 1.32.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 (215) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/en.ts +1 -1
  3. package/src/category/i18n/es.ts +4 -4
  4. package/src/category/i18n/fr.ts +159 -159
  5. package/src/category/i18n/pl.ts +1 -1
  6. package/src/category/i18n/ru.ts +158 -158
  7. package/src/category/index.ts +39 -38
  8. package/src/category/seo.astro +1 -1
  9. package/src/components/PreviewNavSidebar.astro +1 -1
  10. package/src/components/PreviewToolbar.astro +1 -1
  11. package/src/data.ts +1 -1
  12. package/src/entries.ts +4 -1
  13. package/src/env.d.ts +1 -1
  14. package/src/index.ts +1 -0
  15. package/src/layouts/PreviewLayout.astro +113 -113
  16. package/src/pages/index.astro +1 -1
  17. package/src/tests/bibliography_wellformed_export.test.ts +46 -0
  18. package/src/tests/category_seo_quality.test.ts +76 -0
  19. package/src/tests/faq_count.test.ts +1 -1
  20. package/src/tests/locale_completeness.test.ts +2 -2
  21. package/src/tests/mocks/astro_mock.js +1 -1
  22. package/src/tests/no_h1_in_components.test.ts +1 -1
  23. package/src/tests/script_density.test.ts +94 -94
  24. package/src/tests/seo_length.test.ts +23 -23
  25. package/src/tests/seo_translation_completeness.test.ts +69 -0
  26. package/src/tests/seo_wellformed_export.test.ts +65 -0
  27. package/src/tests/tool_validation.test.ts +17 -17
  28. package/src/tool/compoundInterest/compound-interest-calculator.css +236 -236
  29. package/src/tool/compoundInterest/entry.ts +32 -32
  30. package/src/tool/compoundInterest/i18n/de.ts +195 -195
  31. package/src/tool/compoundInterest/i18n/fr.ts +195 -195
  32. package/src/tool/compoundInterest/i18n/it.ts +195 -195
  33. package/src/tool/compoundInterest/i18n/pl.ts +194 -194
  34. package/src/tool/compoundInterest/i18n/ru.ts +195 -195
  35. package/src/tool/compoundInterest/i18n/tr.ts +195 -195
  36. package/src/tool/compoundInterest/i18n/zh.ts +189 -189
  37. package/src/tool/compoundInterest/seo.astro +15 -15
  38. package/src/tool/courtFeeCalculator/i18n/it.ts +158 -158
  39. package/src/tool/courtFeeCalculator/i18n/ru.ts +158 -158
  40. package/src/tool/courtFeeCalculator/i18n/tr.ts +158 -158
  41. package/src/tool/courtFeeCalculator/seo.astro +15 -15
  42. package/src/tool/courtFeeCalculator/spanish-court-fees-calculator.css +197 -197
  43. package/src/tool/debtSnowball/bibliography.ts +12 -12
  44. package/src/tool/debtSnowball/i18n/de.ts +16 -16
  45. package/src/tool/debtSnowball/i18n/id.ts +16 -16
  46. package/src/tool/debtSnowball/i18n/it.ts +168 -168
  47. package/src/tool/debtSnowball/i18n/nl.ts +16 -16
  48. package/src/tool/debtSnowball/i18n/pl.ts +168 -168
  49. package/src/tool/debtSnowball/i18n/pt.ts +1 -1
  50. package/src/tool/debtSnowball/i18n/ru.ts +1 -1
  51. package/src/tool/debtSnowball/i18n/sv.ts +22 -29
  52. package/src/tool/debtSnowball/i18n/tr.ts +168 -168
  53. package/src/tool/debtSnowball/i18n/zh.ts +168 -168
  54. package/src/tool/debtSnowball/seo.astro +15 -15
  55. package/src/tool/dividendYield/bibliography.astro +14 -0
  56. package/src/tool/dividendYield/bibliography.ts +12 -0
  57. package/src/tool/dividendYield/component.astro +83 -0
  58. package/src/tool/dividendYield/controller.ts +85 -0
  59. package/src/tool/dividendYield/dividend-yield-calculator.css +352 -0
  60. package/src/tool/dividendYield/dom-views.ts +58 -0
  61. package/src/tool/dividendYield/entry.ts +29 -0
  62. package/src/tool/dividendYield/evaluator.ts +16 -0
  63. package/src/tool/dividendYield/i18n/de.ts +53 -0
  64. package/src/tool/dividendYield/i18n/en.ts +138 -0
  65. package/src/tool/dividendYield/i18n/es.ts +49 -0
  66. package/src/tool/dividendYield/i18n/fr.ts +49 -0
  67. package/src/tool/dividendYield/i18n/id.ts +49 -0
  68. package/src/tool/dividendYield/i18n/it.ts +49 -0
  69. package/src/tool/dividendYield/i18n/ja.ts +49 -0
  70. package/src/tool/dividendYield/i18n/ko.ts +25 -0
  71. package/src/tool/dividendYield/i18n/nl.ts +25 -0
  72. package/src/tool/dividendYield/i18n/pl.ts +25 -0
  73. package/src/tool/dividendYield/i18n/pt.ts +25 -0
  74. package/src/tool/dividendYield/i18n/ru.ts +25 -0
  75. package/src/tool/dividendYield/i18n/sv.ts +25 -0
  76. package/src/tool/dividendYield/i18n/tr.ts +25 -0
  77. package/src/tool/dividendYield/i18n/zh.ts +25 -0
  78. package/src/tool/dividendYield/index.ts +11 -0
  79. package/src/tool/dividendYield/logic.test.ts +73 -0
  80. package/src/tool/dividendYield/logic.ts +55 -0
  81. package/src/tool/dividendYield/seo.astro +14 -0
  82. package/src/tool/dividendYield/storage.ts +24 -0
  83. package/src/tool/dividendYield/ui.ts +33 -0
  84. package/src/tool/financialFreedom/financial-freedom-calculator.css +311 -311
  85. package/src/tool/financialFreedom/i18n/en.ts +182 -182
  86. package/src/tool/financialFreedom/i18n/fr.ts +128 -128
  87. package/src/tool/financialFreedom/i18n/id.ts +24 -7
  88. package/src/tool/financialFreedom/i18n/it.ts +24 -7
  89. package/src/tool/financialFreedom/i18n/ja.ts +1 -1
  90. package/src/tool/financialFreedom/i18n/nl.ts +24 -7
  91. package/src/tool/financialFreedom/i18n/pl.ts +24 -7
  92. package/src/tool/financialFreedom/i18n/pt.ts +24 -7
  93. package/src/tool/financialFreedom/i18n/ru.ts +128 -128
  94. package/src/tool/financialFreedom/i18n/sv.ts +1 -1
  95. package/src/tool/financialFreedom/i18n/tr.ts +2 -2
  96. package/src/tool/financialFreedom/i18n/zh.ts +128 -128
  97. package/src/tool/fireCalculator/i18n/it.ts +241 -241
  98. package/src/tool/fireCalculator/i18n/ru.ts +241 -241
  99. package/src/tool/fireCalculator/i18n/tr.ts +241 -241
  100. package/src/tool/fireCalculator/i18n/zh.ts +241 -241
  101. package/src/tool/fireCalculator/seo.astro +15 -15
  102. package/src/tool/ibanBicSwiftConverter/i18n/fr.ts +151 -151
  103. package/src/tool/ibanBicSwiftConverter/i18n/it.ts +118 -118
  104. package/src/tool/ibanBicSwiftConverter/i18n/ru.ts +118 -118
  105. package/src/tool/ibanBicSwiftConverter/i18n/tr.ts +118 -118
  106. package/src/tool/ibanBicSwiftConverter/iban-to-bic-swift-converter.css +366 -366
  107. package/src/tool/ibanBicSwiftConverter/seo.astro +15 -15
  108. package/src/tool/inflation/bibliography.ts +20 -20
  109. package/src/tool/inflation/entry.ts +32 -32
  110. package/src/tool/inflation/i18n/de.ts +284 -284
  111. package/src/tool/inflation/i18n/fr.ts +284 -284
  112. package/src/tool/inflation/i18n/it.ts +284 -284
  113. package/src/tool/inflation/i18n/nl.ts +284 -284
  114. package/src/tool/inflation/i18n/pl.ts +284 -284
  115. package/src/tool/inflation/i18n/pt.ts +284 -284
  116. package/src/tool/inflation/i18n/ru.ts +284 -284
  117. package/src/tool/inflation/i18n/sv.ts +284 -284
  118. package/src/tool/inflation/i18n/tr.ts +284 -284
  119. package/src/tool/inflation/i18n/zh.ts +284 -284
  120. package/src/tool/inflation/seo.astro +15 -15
  121. package/src/tool/lateInterest/bibliography.ts +16 -16
  122. package/src/tool/lateInterest/entry.ts +32 -32
  123. package/src/tool/lateInterest/i18n/de.ts +213 -213
  124. package/src/tool/lateInterest/i18n/es.ts +213 -213
  125. package/src/tool/lateInterest/i18n/it.ts +213 -213
  126. package/src/tool/lateInterest/i18n/nl.ts +213 -213
  127. package/src/tool/lateInterest/i18n/pl.ts +213 -213
  128. package/src/tool/lateInterest/i18n/pt.ts +213 -213
  129. package/src/tool/lateInterest/i18n/ru.ts +213 -213
  130. package/src/tool/lateInterest/i18n/sv.ts +213 -213
  131. package/src/tool/lateInterest/i18n/tr.ts +213 -213
  132. package/src/tool/lateInterest/i18n/zh.ts +213 -213
  133. package/src/tool/lateInterest/seo.astro +15 -15
  134. package/src/tool/legalInterestRate/i18n/it.ts +129 -129
  135. package/src/tool/legalInterestRate/i18n/ru.ts +129 -129
  136. package/src/tool/legalInterestRate/i18n/tr.ts +128 -121
  137. package/src/tool/legalInterestRate/i18n/zh.ts +11 -4
  138. package/src/tool/legalInterestRate/seo.astro +15 -15
  139. package/src/tool/lotteryOptimizer/i18n/it.ts +163 -163
  140. package/src/tool/lotteryOptimizer/i18n/pl.ts +163 -163
  141. package/src/tool/lotteryOptimizer/i18n/ru.ts +163 -163
  142. package/src/tool/lotteryOptimizer/i18n/tr.ts +163 -163
  143. package/src/tool/lotteryOptimizer/i18n/zh.ts +162 -155
  144. package/src/tool/lotteryOptimizer/seo.astro +15 -15
  145. package/src/tool/mortgage/bibliography.ts +20 -20
  146. package/src/tool/mortgage/entry.ts +32 -32
  147. package/src/tool/mortgage/i18n/de.ts +210 -210
  148. package/src/tool/mortgage/i18n/es.ts +210 -210
  149. package/src/tool/mortgage/i18n/fr.ts +210 -210
  150. package/src/tool/mortgage/i18n/id.ts +210 -210
  151. package/src/tool/mortgage/i18n/it.ts +210 -210
  152. package/src/tool/mortgage/i18n/nl.ts +210 -210
  153. package/src/tool/mortgage/i18n/pl.ts +210 -210
  154. package/src/tool/mortgage/i18n/ru.ts +210 -210
  155. package/src/tool/mortgage/i18n/tr.ts +210 -210
  156. package/src/tool/mortgage/i18n/zh.ts +210 -210
  157. package/src/tool/mortgage/mortgage-calculator.css +595 -595
  158. package/src/tool/mortgage/seo.astro +15 -15
  159. package/src/tool/percentageCalculator/bibliography.ts +16 -16
  160. package/src/tool/percentageCalculator/entry.ts +32 -32
  161. package/src/tool/percentageCalculator/i18n/de.ts +220 -220
  162. package/src/tool/percentageCalculator/i18n/en.ts +220 -220
  163. package/src/tool/percentageCalculator/i18n/es.ts +220 -220
  164. package/src/tool/percentageCalculator/i18n/fr.ts +220 -220
  165. package/src/tool/percentageCalculator/i18n/it.ts +220 -220
  166. package/src/tool/percentageCalculator/i18n/pl.ts +220 -220
  167. package/src/tool/percentageCalculator/i18n/ru.ts +220 -220
  168. package/src/tool/percentageCalculator/i18n/tr.ts +220 -220
  169. package/src/tool/percentageCalculator/i18n/zh.ts +220 -220
  170. package/src/tool/percentageCalculator/seo.astro +15 -15
  171. package/src/tool/profitability/i18n/de.ts +24 -7
  172. package/src/tool/profitability/i18n/fr.ts +121 -104
  173. package/src/tool/profitability/i18n/id.ts +2 -2
  174. package/src/tool/profitability/i18n/it.ts +24 -7
  175. package/src/tool/profitability/i18n/ja.ts +1 -1
  176. package/src/tool/profitability/i18n/nl.ts +24 -7
  177. package/src/tool/profitability/i18n/pl.ts +1 -1
  178. package/src/tool/profitability/i18n/pt.ts +24 -7
  179. package/src/tool/profitability/i18n/ru.ts +118 -118
  180. package/src/tool/profitability/i18n/sv.ts +1 -1
  181. package/src/tool/profitability/i18n/tr.ts +1 -1
  182. package/src/tool/profitability/i18n/zh.ts +118 -118
  183. package/src/tool/profitability/profitability-calculator.css +229 -229
  184. package/src/tool/rentIncreaseCalculator/i18n/it.ts +125 -125
  185. package/src/tool/rentIncreaseCalculator/i18n/tr.ts +125 -125
  186. package/src/tool/rentIncreaseCalculator/rent-increase-calculator.css +326 -326
  187. package/src/tool/rentIncreaseCalculator/seo.astro +15 -15
  188. package/src/tool/revolvingCardCalculator/i18n/de.ts +38 -20
  189. package/src/tool/revolvingCardCalculator/i18n/es.ts +19 -18
  190. package/src/tool/revolvingCardCalculator/i18n/fr.ts +32 -28
  191. package/src/tool/revolvingCardCalculator/i18n/id.ts +18 -18
  192. package/src/tool/revolvingCardCalculator/i18n/it.ts +18 -18
  193. package/src/tool/revolvingCardCalculator/i18n/ja.ts +2 -2
  194. package/src/tool/revolvingCardCalculator/i18n/ko.ts +2 -2
  195. package/src/tool/revolvingCardCalculator/i18n/nl.ts +22 -19
  196. package/src/tool/revolvingCardCalculator/i18n/pl.ts +2 -2
  197. package/src/tool/revolvingCardCalculator/i18n/pt.ts +2 -2
  198. package/src/tool/revolvingCardCalculator/i18n/ru.ts +2 -2
  199. package/src/tool/revolvingCardCalculator/i18n/sv.ts +2 -2
  200. package/src/tool/revolvingCardCalculator/i18n/tr.ts +2 -2
  201. package/src/tool/revolvingCardCalculator/i18n/zh.ts +6 -6
  202. package/src/tool/salaryEmployerCost/i18n/de.ts +10 -10
  203. package/src/tool/salaryEmployerCost/i18n/fr.ts +9 -9
  204. package/src/tool/salaryEmployerCost/i18n/id.ts +9 -9
  205. package/src/tool/salaryEmployerCost/i18n/it.ts +9 -9
  206. package/src/tool/salaryEmployerCost/i18n/ja.ts +1 -1
  207. package/src/tool/salaryEmployerCost/i18n/ko.ts +1 -1
  208. package/src/tool/salaryEmployerCost/i18n/nl.ts +2 -2
  209. package/src/tool/salaryEmployerCost/i18n/pl.ts +2 -2
  210. package/src/tool/salaryEmployerCost/i18n/pt.ts +2 -2
  211. package/src/tool/salaryEmployerCost/i18n/ru.ts +2 -2
  212. package/src/tool/salaryEmployerCost/i18n/sv.ts +2 -2
  213. package/src/tool/salaryEmployerCost/i18n/tr.ts +2 -2
  214. package/src/tool/salaryEmployerCost/i18n/zh.ts +2 -2
  215. 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
+ };