@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,177 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { LotteryOptimizerUI } from '../ui';
4
+
5
+ const slug = 'spain-lottery-optimizer';
6
+ const title = '宝くじ最適化・確率計算機';
7
+ const description = 'スペインのクリスマス宝くじ、ユーロミリオンズ、ボノロトなどの当選確率を分析します。最適な購入枚数や期待値を計算しましょう。';
8
+
9
+ const faqData = [
10
+ {
11
+ question: '宝くじにおける期待値(数学的期待値)とは何ですか?',
12
+ answer: '1ユーロを賭けるごとに、平均してどれくらいの払い戻しが期待できるかを示す数値です。ほとんどすべての宝くじにおいて期待値はマイナス(通常、1ユーロにつき0.50ユーロの損失)であり、長期的には運営側が必ず勝つ仕組みになっています。',
13
+ },
14
+ {
15
+ question: '多くの異なる番号を買うのと、同じ番号を大量に買うのとではどちらが良いですか?',
16
+ answer: '「何か」を当てたいのであれば、番号を分散させることで末等の当選確率が上がります。1等(ジャックポット)を狙うのであれば、1つの番号を買い続けても確率は同じですが、当たった時の配当は大きくなります。',
17
+ },
18
+ {
19
+ question: 'スペインのクリスマス宝くじ(El Gordo)は本当に「お得」ですか?',
20
+ answer: '純粋に数学的な観点からは、答えは「いいえ」です。売上の70%しか還元されません。しかし、1等の当選確率(10万分の1)は、ユーロミリオンズ(約1億4千万分の1)などと比較すると格段に高く設定されています。',
21
+ },
22
+ {
23
+ question: '統計を使って当選確率を上げることはできますか?',
24
+ answer: 'いいえ。宝くじの抽選はそれぞれ独立したランダムなプロセスです。昨日ある番号が出たからといって、今日その番号が出やすくなったり出にくくなったりすることは一切ありません。',
25
+ },
26
+ {
27
+ question: '比較表の「難易度」とは何を意味しますか?',
28
+ answer: '1等を引き当てるのがどれだけ難しいかを示す相対的な指標です。狙いやすい(20万分の1未満)、難しい(2000万分の1未満)、極めて困難(2000万分の1以上)。',
29
+ },
30
+ ];
31
+
32
+ const howToData = [
33
+ {
34
+ name: '抽選の種類を選択する',
35
+ text: 'クリスマス宝くじ、プリミティバ、ユーロミリオンズ、ボノロトなど、分析したい宝くじを選択します。',
36
+ },
37
+ {
38
+ name: '投資額を決定する',
39
+ text: '購入予定の枚数や口数を入力します。',
40
+ },
41
+ {
42
+ name: '重要な確率を分析する',
43
+ text: '1等の当選確率、小額当選の確率、元本回収(リイントゥエグロ)の確率をリアルに把握します。',
44
+ },
45
+ {
46
+ name: 'リスクとリターンの評価',
47
+ text: '期待値を確認し、投資した1ユーロにつき統計的にいくら「失っている」のかを理解します。',
48
+ },
49
+ ];
50
+
51
+ const bibliographyData = [
52
+ {
53
+ name: 'スペイン国立宝くじ・賭博公社 (SELAE) - 透明性ポータル',
54
+ url: 'https://www.selae.es/',
55
+ },
56
+ {
57
+ name: 'クリスマス宝くじの数学 - スペイン王立数学会 (RSME)',
58
+ url: 'https://rsme.es/',
59
+ },
60
+ {
61
+ name: 'ケリー基準とリスク管理 - Investopedia',
62
+ url: 'https://www.investopedia.com/',
63
+ },
64
+ ];
65
+
66
+ const seoData = [
67
+ {
68
+ type: 'title',
69
+ text: '「希望」の数学',
70
+ level: 2,
71
+ },
72
+ {
73
+ type: 'paragraph',
74
+ html: '多くの人にとって宝くじを買うことは、わずかな金額で「夢」を買う行為です。しかし、抽選箱やクリスタルボールの裏側には、数学の最も魅力的な分野の一つである「極端な確率の統計学」が潜んでいます。',
75
+ },
76
+ ];
77
+
78
+ const gameTranslations = {
79
+ gordo: {
80
+ name: 'クリスマス宝くじ (El Gordo)',
81
+ description: '世界最大の賞金総額を誇る宝くじ。何か当たる確率が高い。',
82
+ },
83
+ nino: {
84
+ name: '子供の宝くじ (El Niño)',
85
+ description: 'クリスマスと比較して、元本回収(リイントゥエグロ)の確率が3倍。',
86
+ },
87
+ euromillones: {
88
+ name: 'ユーロミリオンズ',
89
+ description: '天文学的な賞金額だが、当選確率はほぼ不可能に近い。',
90
+ },
91
+ primitiva: {
92
+ name: 'ラ・プリミティバ',
93
+ description: 'スペイン最古の宝くじ。難しいが一口の価格が安い。',
94
+ },
95
+ bonoloto: {
96
+ name: 'ボノロト',
97
+ description: '最も安価。少額の予算で毎日楽しむのに最適。',
98
+ },
99
+ };
100
+
101
+ const faqSchema: WithContext<FAQPage> = {
102
+ '@context': 'https://schema.org',
103
+ '@type': 'FAQPage',
104
+ mainEntity: faqData.map((item) => ({
105
+ '@type': 'Question',
106
+ name: item.question,
107
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
108
+ })),
109
+ };
110
+
111
+ const howToSchema: WithContext<HowTo> = {
112
+ '@context': 'https://schema.org',
113
+ '@type': 'HowTo',
114
+ name: title,
115
+ description,
116
+ step: howToData.map((step, i) => ({
117
+ '@type': 'HowToStep',
118
+ position: i + 1,
119
+ name: step.name,
120
+ text: step.text,
121
+ })),
122
+ };
123
+
124
+ const appSchema: WithContext<SoftwareApplication> = {
125
+ '@context': 'https://schema.org',
126
+ '@type': 'SoftwareApplication',
127
+ name: title,
128
+ description,
129
+ applicationCategory: 'FinanceApplication',
130
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
131
+ };
132
+
133
+ export const content: ToolLocaleContent<LotteryOptimizerUI> = {
134
+ slug,
135
+ title,
136
+ description,
137
+ faqTitle: 'よくある質問',
138
+ bibliographyTitle: '情報源とリファレンス',
139
+ ui: {
140
+ gameTranslations,
141
+ labelTitle: '宝くじ最適化ツール',
142
+ labelDescription: '抽選の種類を比較し、期待値を計算して、論理的に宝くじを楽しみましょう。',
143
+ labelSelectGame: '宝くじを選択',
144
+ labelConfigurePlay: 'プレイ設定',
145
+ labelAdjustQuantity: '購入枚数を調整して、リアルな当選確率を確認します。',
146
+ labelTotalInvestment: '投資総額',
147
+ labelTickets: '購入枚数 / 口数',
148
+ labelUnits: '個',
149
+ labelExposureAnalysis: '露出(リスク)分析',
150
+ labelSelectLottery: 'リスク分析を表示するには宝くじを選択してください。',
151
+ labelOptimalCutoff: '推奨されるカットオフポイント',
152
+ labelProbabilitySuccess: '成功確率',
153
+ labelExpectedValue: '期待値 (EV)',
154
+ labelReturnTheoretical: '1プレイあたりの理論上の払い戻し額。',
155
+ labelSocialReturnIndex: '社会的還元指数',
156
+ labelLow: '低',
157
+ labelMedium: '中',
158
+ labelHigh: '高',
159
+ labelComparison: '当選賞金比較',
160
+ labelLottery: '宝くじ',
161
+ labelCost: 'コスト',
162
+ labelTypicalPrize: '一般的な当選金',
163
+ labelDifficulty: '難易度',
164
+ labelAccessible: '狙いやすい',
165
+ labelDifficult: '難しい',
166
+ labelExtreme: '極めて困難',
167
+ labelNote: '注:クリスマス宝くじとエル・ニーニョの賞金は、デシモ(20ユーロ分)あたりの金額です。ユーロミリオンズなどは、1等賞金の一般的な推定額です。',
168
+ currencySymbol: '€',
169
+ currencyCode: 'EUR',
170
+ currencyLocale: 'ja-JP',
171
+ },
172
+ faq: faqData,
173
+ howTo: howToData,
174
+ bibliography: bibliographyData,
175
+ seo: seoData,
176
+ schemas: [faqSchema, howToSchema, appSchema],
177
+ };
@@ -0,0 +1,177 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { LotteryOptimizerUI } from '../ui';
4
+
5
+ const slug = 'spain-lottery-optimizer';
6
+ const title = '복권 최적화 및 확률 계산기';
7
+ const description = '스페인 크리스마스 복권, 유로밀리언즈, 보놀로토의 당첨 확률을 분석합니다. 최적의 구매 수량과 베팅의 기대 가치를 계산해 보세요.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: '복권에서 말하는 수학적 기대치란 무엇인가요?',
12
+ answer: '베팅한 1유로당 평균적으로 돌려받을 것으로 예상되는 금액입니다. 거의 모든 복권에서 수학적 기대치는 음수(보통 1유로당 0.50유로 손실)이며, 이는 장기적으로 운영 주체가 항상 승리함을 의미합니다.',
13
+ },
14
+ {
15
+ question: '여러 번호를 사는 것과 같은 번호의 복권을 여러 장 사는 것 중 무엇이 더 좋나요?',
16
+ answer: '「무엇이든」 당첨되기를 원한다면 번호를 다양화하는 것이 소액 당첨 확률을 높입니다. 1등 당첨(잭팟)을 목표로 한다면 한 번호만 사는 것과 확률은 같지만, 당첨 시 수령액은 더 커집니다.',
17
+ },
18
+ {
19
+ question: '스페인 크리스마스 복권(El Gordo)은 정말 할 만한가요?',
20
+ answer: '순수하게 수학적인 관점에서는 아닙니다. 총 수입의 70%만 당첨금으로 환원됩니다. 하지만 1등 당첨 확률(10만분의 1)은 유로밀리언즈(1억 4천만분의 1)보다 훨씬 높습니다.',
21
+ },
22
+ {
23
+ question: '통계를 통해 당첨 확률을 높일 수 있나요?',
24
+ answer: '아니요. 복권 추첨은 각각 독립적인 무작위 프로세스입니다. 어제 특정 번호가 나왔다고 해서 오늘 그 번호가 나올 확률에 조금이라도 영향을 주지 않습니다.',
25
+ },
26
+ {
27
+ question: '비교표의 「난이도」는 무엇을 의미하나요?',
28
+ answer: '1등 당첨이 얼마나 어려운지를 보여주는 상대적 척도입니다. 접근 가능(20만분의 1 미만), 어려움(2000만분의 1 미만), 매우 어려움(2000만분의 1 이상).',
29
+ },
30
+ ];
31
+
32
+ const howToData = [
33
+ {
34
+ name: '추첨 유형 선택',
35
+ text: '크리스마스 복권, 프리미티바, 유로밀리언즈 또는 보놀로토 중 분석할 복권을 선택합니다.',
36
+ },
37
+ {
38
+ name: '투자금 정의',
39
+ text: '구매하려는 복권 수량이나 베팅 횟수를 입력합니다.',
40
+ },
41
+ {
42
+ name: '핵심 확률 분석',
43
+ text: '1등 당첨 확률을 소액 당첨 또는 원금 회수 확률과 비교하여 확인합니다.',
44
+ },
45
+ {
46
+ name: '위험/수익 평가',
47
+ text: '수학적 기대치를 검토하여 투자한 1유로당 통계적으로 얼마를 「기부」하고 있는지 이해합니다.',
48
+ },
49
+ ];
50
+
51
+ const bibliographyData = [
52
+ {
53
+ name: '스페인 국립 복권 위원회 (SELAE) - 투명성 포털',
54
+ url: 'https://www.selae.es/',
55
+ },
56
+ {
57
+ name: '크리스마스 복권의 수학 - 스페인 왕립 수학회 (RSME)',
58
+ url: 'https://rsme.es/',
59
+ },
60
+ {
61
+ name: '켈리 기준과 리스크 관리 - Investopedia',
62
+ url: 'https://www.investopedia.com/',
63
+ },
64
+ ];
65
+
66
+ const seoData = [
67
+ {
68
+ type: 'title',
69
+ text: '희망의 수학',
70
+ level: 2,
71
+ },
72
+ {
73
+ type: 'paragraph',
74
+ html: '많은 사람에게 복권을 사는 것은 몇 유로로 「희망」을 사는 행위입니다. 하지만 추첨기와 크리스털 공 뒤에는 수학의 가장 매혹적인 분야 중 하나인 「극단적 확률의 통계학」이 자리 잡고 있습니다.',
75
+ },
76
+ ];
77
+
78
+ const gameTranslations = {
79
+ gordo: {
80
+ name: '크리스마스 복권 (El Gordo)',
81
+ description: '세계 최대 규모의 상금 분배. 무언가 당첨될 확률이 높음.',
82
+ },
83
+ nino: {
84
+ name: '어린이 복권 (El Niño)',
85
+ description: '크리스마스 복권 대비 원금 회수 확률이 3배 높음.',
86
+ },
87
+ euromillones: {
88
+ name: '유로밀리언즈',
89
+ description: '천문학적인 상금이지만 당첨 확률은 거의 불가능에 가까움.',
90
+ },
91
+ primitiva: {
92
+ name: '라 프리미티바',
93
+ description: '스페인에서 가장 오래된 복권. 어렵지만 가격이 저렴함.',
94
+ },
95
+ bonoloto: {
96
+ name: '보놀로토',
97
+ description: '가장 경제적인 복권. 소액 예산으로 매일 즐기기에 적합함.',
98
+ },
99
+ };
100
+
101
+ const faqSchema: WithContext<FAQPage> = {
102
+ '@context': 'https://schema.org',
103
+ '@type': 'FAQPage',
104
+ mainEntity: faqData.map((item) => ({
105
+ '@type': 'Question',
106
+ name: item.question,
107
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
108
+ })),
109
+ };
110
+
111
+ const howToSchema: WithContext<HowTo> = {
112
+ '@context': 'https://schema.org',
113
+ '@type': 'HowTo',
114
+ name: title,
115
+ description,
116
+ step: howToData.map((step, i) => ({
117
+ '@type': 'HowToStep',
118
+ position: i + 1,
119
+ name: step.name,
120
+ text: step.text,
121
+ })),
122
+ };
123
+
124
+ const appSchema: WithContext<SoftwareApplication> = {
125
+ '@context': 'https://schema.org',
126
+ '@type': 'SoftwareApplication',
127
+ name: title,
128
+ description,
129
+ applicationCategory: 'FinanceApplication',
130
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
131
+ };
132
+
133
+ export const content: ToolLocaleContent<LotteryOptimizerUI> = {
134
+ slug,
135
+ title,
136
+ description,
137
+ faqTitle: '자주 묻는 질문',
138
+ bibliographyTitle: '출처 및 참고 자료',
139
+ ui: {
140
+ gameTranslations,
141
+ labelTitle: '복권 최적화 도구',
142
+ labelDescription: '추첨 유형을 비교하고 수학적 기대치를 계산하여 논리적으로 복권을 즐기세요.',
143
+ labelSelectGame: '복권 선택',
144
+ labelConfigurePlay: '게임 설정',
145
+ labelAdjustQuantity: '구매 수량을 조정하여 실제 당첨 확률을 확인하세요.',
146
+ labelTotalInvestment: '총 투자금',
147
+ labelTickets: '복권 수량 / 베팅 횟수',
148
+ labelUnits: '개',
149
+ labelExposureAnalysis: '리스크 분석',
150
+ labelSelectLottery: '리스크 분석을 보려면 복권을 선택하세요.',
151
+ labelOptimalCutoff: '추천 컷오프 지점',
152
+ labelProbabilitySuccess: '성공 확률',
153
+ labelExpectedValue: '기대 가치 (EV)',
154
+ labelReturnTheoretical: '베팅 1회당 이론적 환급액.',
155
+ labelSocialReturnIndex: '사회적 환원 지수',
156
+ labelLow: '낮음',
157
+ labelMedium: '보통',
158
+ labelHigh: '높음',
159
+ labelComparison: '당첨금 비교',
160
+ labelLottery: '복권',
161
+ labelCost: '비용',
162
+ labelTypicalPrize: '일반적 당첨금',
163
+ labelDifficulty: '난이도',
164
+ labelAccessible: '접근 가능',
165
+ labelDifficult: '어려움',
166
+ labelExtreme: '매우 어려움',
167
+ labelNote: '참고: 크리스마스 복권 및 엘 니뇨 상금은 1장(20유로) 기준입니다. 유로밀리언즈 등은 일반적인 잭팟 금액입니다.',
168
+ currencySymbol: '€',
169
+ currencyCode: 'EUR',
170
+ currencyLocale: 'ko-KR',
171
+ },
172
+ faq: faqData,
173
+ howTo: howToData,
174
+ bibliography: bibliographyData,
175
+ seo: seoData,
176
+ schemas: [faqSchema, howToSchema, appSchema],
177
+ };
@@ -0,0 +1,177 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { LotteryOptimizerUI } from '../ui';
4
+
5
+ const slug = 'loterij-optimizer-kansberekenaar';
6
+ const title = 'Loterij Optimizer en Kansberekenaar';
7
+ const description = 'Analyseer uw kansen in de Kerstloterij, EuroMillions en meer. Bereken het optimale aantal loten en de verwachte waarde van uw inzet.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Wat is de wiskundige verwachting bij de loterij?',
12
+ answer: 'Het is de gemiddelde waarde die u verwacht te winnen voor elke ingezette euro. Bij bijna alle loterijen is de wiskundige verwachting negatief (u verliest meestal €0,50 per elke ingezette €1), wat betekent dat op de lange termijn het huis altijd wint.',
13
+ },
14
+ {
15
+ question: 'Is het beter om veel verschillende nummers te spelen of veel loten van hetzelfde nummer?',
16
+ answer: 'Als u "iets" wilt winnen, verhoogt het diversifiëren van nummers uw kans op kleinere prijzen. Als u voor de jackpot gaat, geeft het spelen van één enkel nummer u dezelfde kans, maar een grotere prijs als u wint.',
17
+ },
18
+ {
19
+ question: 'Is het echt de moeite waard om mee te doen aan de Spaanse Kerstloterij?',
20
+ answer: 'Vanuit een puur wiskundig oogpunt, nee. Er wordt slechts 70% van de inleg uitgekeerd. Het heeft echter een veel hogere kans op de hoofdprijs (1 op 100.000) dan EuroMillions (1 op 140 miljoen).',
21
+ },
22
+ {
23
+ question: 'Kan ik mijn kansen verbeteren met statistieken?',
24
+ answer: 'Nee. Loterijtrekkingen zijn onafhankelijke willekeurige processen. Dat een nummer gisteren is gevallen, heeft geen enkele invloed op de trekking van vandaag.',
25
+ },
26
+ {
27
+ question: 'Wat betekent "moeilijkheidsgraad" in de vergelijkingstabel?',
28
+ answer: 'Het is een relatieve maatstaf voor hoe moeilijk het is om de hoofdprijs te winnen. Toegankelijk (minder dan 200k), Moeilijk (minder dan 20M), Extreem (meer dan 20M).',
29
+ },
30
+ ];
31
+
32
+ const howToData = [
33
+ {
34
+ name: 'Selecteer het type trekking',
35
+ text: 'Kies tussen de Kerstloterij, Primitiva, EuroMillions of Bonoloto om de specifieke regels te analyseren.',
36
+ },
37
+ {
38
+ name: 'Bepaal uw investering',
39
+ text: 'Geef aan hoeveel loten of weddenschappen u van plan bent te kopen.',
40
+ },
41
+ {
42
+ name: 'Analyseer kritieke kansen',
43
+ text: 'Bekijk de reële kansen op het winnen van de hoofdprijs versus kleinere prijzen of de inlegteruggaaf.',
44
+ },
45
+ {
46
+ name: 'Evalueer risico/opbrengst',
47
+ text: 'Controleer de wiskundige verwachting om te begrijpen hoeveel geld u statistisch gezien "weggeeft" per geïnvesteerde euro.',
48
+ },
49
+ ];
50
+
51
+ const bibliographyData = [
52
+ {
53
+ name: 'Loterías y Apuestas del Estado (SELAE) - Transparantieportaal',
54
+ url: 'https://www.selae.es/',
55
+ },
56
+ {
57
+ name: 'Wiskunde van de Kerstloterij - RSME',
58
+ url: 'https://rsme.es/',
59
+ },
60
+ {
61
+ name: 'Het Kelly Criterium en Risicomanagement',
62
+ url: 'https://www.investopedia.com/',
63
+ },
64
+ ];
65
+
66
+ const seoData = [
67
+ {
68
+ type: 'title',
69
+ text: 'De Wiskunde van de Hoop',
70
+ level: 2,
71
+ },
72
+ {
73
+ type: 'paragraph',
74
+ html: 'Loten kopen is voor velen het kopen van een illusie voor een paar euro. Achter de schermen schuilt echter een van de meest fascinerende takken van de wiskunde: de statistiek van extreme kansen.',
75
+ },
76
+ ];
77
+
78
+ const gameTranslations = {
79
+ gordo: {
80
+ name: 'Kerstloterij (El Gordo)',
81
+ description: 'De grootste prijzenpot ter wereld. Hoge kans om iets te winnen.',
82
+ },
83
+ nino: {
84
+ name: 'Loterij van het Kind (El Niño)',
85
+ description: 'Drie keer meer kans op inlegteruggaaf vergeleken met de Kerstloterij.',
86
+ },
87
+ euromillones: {
88
+ name: 'EuroMillions',
89
+ description: 'Astronomische prijzen, bijna onmogelijke kansen.',
90
+ },
91
+ primitiva: {
92
+ name: 'La Primitiva',
93
+ description: 'De oudste loterij van Spanje. Moeilijk maar goedkoper.',
94
+ },
95
+ bonoloto: {
96
+ name: 'Bonoloto',
97
+ description: 'De meest voordelige. Ideaal om dagelijks te spelen met een klein budget.',
98
+ },
99
+ };
100
+
101
+ const faqSchema: WithContext<FAQPage> = {
102
+ '@context': 'https://schema.org',
103
+ '@type': 'FAQPage',
104
+ mainEntity: faqData.map((item) => ({
105
+ '@type': 'Question',
106
+ name: item.question,
107
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
108
+ })),
109
+ };
110
+
111
+ const howToSchema: WithContext<HowTo> = {
112
+ '@context': 'https://schema.org',
113
+ '@type': 'HowTo',
114
+ name: title,
115
+ description,
116
+ step: howToData.map((step, i) => ({
117
+ '@type': 'HowToStep',
118
+ position: i + 1,
119
+ name: step.name,
120
+ text: step.text,
121
+ })),
122
+ };
123
+
124
+ const appSchema: WithContext<SoftwareApplication> = {
125
+ '@context': 'https://schema.org',
126
+ '@type': 'SoftwareApplication',
127
+ name: title,
128
+ description,
129
+ applicationCategory: 'FinanceApplication',
130
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
131
+ };
132
+
133
+ export const content: ToolLocaleContent<LotteryOptimizerUI> = {
134
+ slug,
135
+ title,
136
+ description,
137
+ faqTitle: 'Veelgestelde Vragen',
138
+ bibliographyTitle: 'Bronnen en Referenties',
139
+ ui: {
140
+ gameTranslations,
141
+ labelTitle: 'Loterij Optimizer',
142
+ labelDescription: 'Vergelijk trekkingen, bereken uw wiskundige verwachting en speel met verstand.',
143
+ labelSelectGame: 'Selecteer een loterij',
144
+ labelConfigurePlay: 'Stel uw inzet samen',
145
+ labelAdjustQuantity: 'Pas het aantal loten aan om uw reële kans te zien.',
146
+ labelTotalInvestment: 'Totale Investering',
147
+ labelTickets: 'Aantal Loten / Weddenschappen',
148
+ labelUnits: 'stuks',
149
+ labelExposureAnalysis: 'Blootstellingsanalyse',
150
+ labelSelectLottery: 'Selecteer een loterij om de risicoanalyse te zien.',
151
+ labelOptimalCutoff: 'Aanbevolen Grenswaarde',
152
+ labelProbabilitySuccess: 'Slagingskans',
153
+ labelExpectedValue: 'Verwachte Waarde (EV)',
154
+ labelReturnTheoretical: 'Theoretische terugbetaling per gespeelde inzet.',
155
+ labelSocialReturnIndex: 'Sociale Rendementsindex',
156
+ labelLow: 'Laag',
157
+ labelMedium: 'Gemiddeld',
158
+ labelHigh: 'Hoog',
159
+ labelComparison: 'Prijsvergelijking',
160
+ labelLottery: 'Loterij',
161
+ labelCost: 'Kosten',
162
+ labelTypicalPrize: 'Typische Prijs',
163
+ labelDifficulty: 'Moeilijkheidsgraad',
164
+ labelAccessible: 'Toegankelijk',
165
+ labelDifficult: 'Moeilijk',
166
+ labelExtreme: 'Extreem',
167
+ labelNote: 'Opmerking: De prijzen van Kerst en El Niño zijn per lot (20€). EuroMillions enz. zijn typische jackpots.',
168
+ currencySymbol: '€',
169
+ currencyCode: 'EUR',
170
+ currencyLocale: 'nl-NL',
171
+ },
172
+ faq: faqData,
173
+ howTo: howToData,
174
+ bibliography: bibliographyData,
175
+ seo: seoData,
176
+ schemas: [faqSchema, howToSchema, appSchema],
177
+ };