@jjlmoya/utils-finance 1.45.0 → 1.47.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 (73) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +2 -1
  3. package/src/entries.ts +5 -1
  4. package/src/tests/locale_completeness.test.ts +2 -2
  5. package/src/tests/mfe_assets_contract.test.ts +48 -0
  6. package/src/tests/tool_validation.test.ts +2 -2
  7. package/src/tool/loanAprScenarioCalculator/bibliography.astro +11 -0
  8. package/src/tool/loanAprScenarioCalculator/bibliography.ts +29 -0
  9. package/src/tool/loanAprScenarioCalculator/component.astro +62 -0
  10. package/src/tool/loanAprScenarioCalculator/controller.ts +205 -0
  11. package/src/tool/loanAprScenarioCalculator/currency-dom.ts +107 -0
  12. package/src/tool/loanAprScenarioCalculator/currency.test.ts +57 -0
  13. package/src/tool/loanAprScenarioCalculator/currency.ts +105 -0
  14. package/src/tool/loanAprScenarioCalculator/dom-views.ts +190 -0
  15. package/src/tool/loanAprScenarioCalculator/entry.ts +28 -0
  16. package/src/tool/loanAprScenarioCalculator/evaluator.ts +21 -0
  17. package/src/tool/loanAprScenarioCalculator/i18n/de.ts +194 -0
  18. package/src/tool/loanAprScenarioCalculator/i18n/en.ts +194 -0
  19. package/src/tool/loanAprScenarioCalculator/i18n/es.ts +195 -0
  20. package/src/tool/loanAprScenarioCalculator/i18n/fr.ts +195 -0
  21. package/src/tool/loanAprScenarioCalculator/i18n/id.ts +193 -0
  22. package/src/tool/loanAprScenarioCalculator/i18n/it.ts +193 -0
  23. package/src/tool/loanAprScenarioCalculator/i18n/ja.ts +186 -0
  24. package/src/tool/loanAprScenarioCalculator/i18n/ko.ts +186 -0
  25. package/src/tool/loanAprScenarioCalculator/i18n/nl.ts +194 -0
  26. package/src/tool/loanAprScenarioCalculator/i18n/pl.ts +194 -0
  27. package/src/tool/loanAprScenarioCalculator/i18n/pt.ts +194 -0
  28. package/src/tool/loanAprScenarioCalculator/i18n/ru.ts +193 -0
  29. package/src/tool/loanAprScenarioCalculator/i18n/sv.ts +189 -0
  30. package/src/tool/loanAprScenarioCalculator/i18n/tr.ts +193 -0
  31. package/src/tool/loanAprScenarioCalculator/i18n/zh.ts +181 -0
  32. package/src/tool/loanAprScenarioCalculator/index.ts +11 -0
  33. package/src/tool/loanAprScenarioCalculator/loan-apr-scenario-calculator.css +699 -0
  34. package/src/tool/loanAprScenarioCalculator/logic.test.ts +65 -0
  35. package/src/tool/loanAprScenarioCalculator/logic.ts +259 -0
  36. package/src/tool/loanAprScenarioCalculator/presets.ts +51 -0
  37. package/src/tool/loanAprScenarioCalculator/scenario-dom.ts +101 -0
  38. package/src/tool/loanAprScenarioCalculator/seo.astro +11 -0
  39. package/src/tool/loanAprScenarioCalculator/storage.ts +60 -0
  40. package/src/tool/loanAprScenarioCalculator/ui.ts +55 -0
  41. package/src/tool/loanAprScenarioCalculator/validation.ts +24 -0
  42. package/src/tool/renterInsuranceCoverageGapCalculator/bibliography.astro +11 -0
  43. package/src/tool/renterInsuranceCoverageGapCalculator/bibliography.ts +6 -0
  44. package/src/tool/renterInsuranceCoverageGapCalculator/component.astro +80 -0
  45. package/src/tool/renterInsuranceCoverageGapCalculator/controller.ts +102 -0
  46. package/src/tool/renterInsuranceCoverageGapCalculator/currency.test.ts +17 -0
  47. package/src/tool/renterInsuranceCoverageGapCalculator/currency.ts +69 -0
  48. package/src/tool/renterInsuranceCoverageGapCalculator/dom-views.ts +68 -0
  49. package/src/tool/renterInsuranceCoverageGapCalculator/entry.ts +28 -0
  50. package/src/tool/renterInsuranceCoverageGapCalculator/evaluator.ts +17 -0
  51. package/src/tool/renterInsuranceCoverageGapCalculator/i18n/de.ts +40 -0
  52. package/src/tool/renterInsuranceCoverageGapCalculator/i18n/en.ts +98 -0
  53. package/src/tool/renterInsuranceCoverageGapCalculator/i18n/es.ts +38 -0
  54. package/src/tool/renterInsuranceCoverageGapCalculator/i18n/fr.ts +38 -0
  55. package/src/tool/renterInsuranceCoverageGapCalculator/i18n/id.ts +38 -0
  56. package/src/tool/renterInsuranceCoverageGapCalculator/i18n/it.ts +38 -0
  57. package/src/tool/renterInsuranceCoverageGapCalculator/i18n/ja.ts +38 -0
  58. package/src/tool/renterInsuranceCoverageGapCalculator/i18n/ko.ts +38 -0
  59. package/src/tool/renterInsuranceCoverageGapCalculator/i18n/nl.ts +38 -0
  60. package/src/tool/renterInsuranceCoverageGapCalculator/i18n/pl.ts +38 -0
  61. package/src/tool/renterInsuranceCoverageGapCalculator/i18n/pt.ts +38 -0
  62. package/src/tool/renterInsuranceCoverageGapCalculator/i18n/ru.ts +38 -0
  63. package/src/tool/renterInsuranceCoverageGapCalculator/i18n/sv.ts +38 -0
  64. package/src/tool/renterInsuranceCoverageGapCalculator/i18n/tr.ts +38 -0
  65. package/src/tool/renterInsuranceCoverageGapCalculator/i18n/zh.ts +38 -0
  66. package/src/tool/renterInsuranceCoverageGapCalculator/index.ts +11 -0
  67. package/src/tool/renterInsuranceCoverageGapCalculator/logic.test.ts +52 -0
  68. package/src/tool/renterInsuranceCoverageGapCalculator/logic.ts +108 -0
  69. package/src/tool/renterInsuranceCoverageGapCalculator/renter-insurance-coverage-gap-calculator.css +462 -0
  70. package/src/tool/renterInsuranceCoverageGapCalculator/seo.astro +11 -0
  71. package/src/tool/renterInsuranceCoverageGapCalculator/storage.ts +23 -0
  72. package/src/tool/renterInsuranceCoverageGapCalculator/ui.ts +48 -0
  73. package/src/tools.ts +3 -1
@@ -0,0 +1,194 @@
1
+ import type { ToolLocaleContent } from "../../../types";
2
+ import { bibliography } from "../bibliography";
3
+ import type { LoanAprScenarioCalculatorUI } from "../ui";
4
+
5
+ const ui: LoanAprScenarioCalculatorUI = {
6
+ labelScenarioA: "Oferta A",
7
+ labelScenarioB: "Oferta B",
8
+ labelScenarioName: "Nome da oferta",
9
+ labelCurrency: "Moeda",
10
+ labelApproximateRates:
11
+ "Fatores aproximados para planeamento, não taxas de câmbio em tempo real.",
12
+ labelPrincipal: "Montante emprestado",
13
+ labelTerm: "Prazo de reembolso",
14
+ labelMonths: "meses",
15
+ labelInputBasis: "Que dado conhece?",
16
+ labelAnnualRate: "Taxa nominal anual",
17
+ labelMonthlyPayment: "Prestação mensal conhecida",
18
+ labelUpfrontFees: "Comissões iniciais",
19
+ labelMonthlyFees: "Comissões mensais",
20
+ labelFinalFees: "Comissão final",
21
+ labelOfferNameA: "Oferta A",
22
+ labelOfferNameB: "Oferta B",
23
+ labelRateMode: "Conheço a taxa",
24
+ labelPaymentMode: "Conheço a prestação",
25
+ labelPreset: "Começar uma comparação",
26
+ labelPresetBalanced: "Ofertas equilibradas",
27
+ labelPresetLowFee: "Taxa baixa com comissões",
28
+ labelPresetLongTerm: "Prazo mais longo",
29
+ labelReset: "Repor valores",
30
+ labelCopy: "Copiar comparação",
31
+ labelCopied: "Comparação copiada",
32
+ labelEffectiveApr: "Custo anual efetivo",
33
+ labelNominalRate: "Taxa nominal",
34
+ labelMonthlyPaymentResult: "Prestação mensal",
35
+ labelTotalPaid: "Total pago",
36
+ labelTotalFees: "Comissões do cenário",
37
+ labelFinanceCost: "Custo acima do capital",
38
+ labelNetCashReceived: "Valor recebido após comissões iniciais",
39
+ labelWinner: "Qual oferta custa menos?",
40
+ labelLowerCost: "Custo efetivo inferior",
41
+ labelHigherCost: "Custo efetivo superior",
42
+ labelTie: "Quase iguais",
43
+ labelNeedValidInputs: "São necessários dados válidos",
44
+ labelInvalidPrincipal:
45
+ "O montante deve ser superior a zero e às comissões iniciais.",
46
+ labelInvalidTerm: "Use um prazo inteiro entre 1 e 600 meses.",
47
+ labelInvalidFees: "As comissões não podem ser negativas.",
48
+ labelInvalidPayment:
49
+ "Introduza uma prestação mensal positiva que consiga reembolsar o valor líquido recebido.",
50
+ labelInvalidRate: "Use uma taxa nominal anual entre 0% e 100%.",
51
+ labelNoComparison: "Preencha as duas ofertas para as comparar.",
52
+ labelTimeline: "Calendário de pagamentos",
53
+ labelStart: "Início",
54
+ labelMonthly: "Cada mês",
55
+ labelEnd: "Último mês",
56
+ labelFormula: "Como funciona a comparação",
57
+ labelFormulaText:
58
+ "O custo anual efetivo é a taxa mensal anualizada que iguala o valor recebido aos pagamentos e comissões descontados.",
59
+ labelApproximation:
60
+ "A estimativa assume prestações mensais iguais, sem período de carência e apenas as comissões introduzidas. Não substitui a TAEG oficial do credor.",
61
+ labelScenarioSummary: "Resumo do cenário",
62
+ currencyCode: "EUR",
63
+ currencyLocale: "pt-PT",
64
+ };
65
+
66
+ const faq = [
67
+ {
68
+ question:
69
+ "Qual é a diferença entre a taxa de juro e o custo anual efetivo?",
70
+ answer:
71
+ "A taxa nominal descreve os juros sobre o saldo. O custo anual efetivo também considera o valor e o momento das comissões iniciais, mensais e finais introduzidas.",
72
+ },
73
+ {
74
+ question: "Posso introduzir uma prestação mensal em vez da taxa de juro?",
75
+ answer:
76
+ "Sim. Escolha a prestação mensal conhecida para essa oferta. A calculadora infere a taxa mensal compatível com o valor recebido, os pagamentos e as comissões.",
77
+ },
78
+ {
79
+ question: "Qual é a oferta mais barata?",
80
+ answer:
81
+ "Compare primeiro o custo anual efetivo e depois verifique o total pago e o valor recebido. Uma percentagem menor pode ter um custo total superior quando o prazo ou o montante diferem.",
82
+ },
83
+ {
84
+ question: "É a TAEG oficial do credor?",
85
+ answer:
86
+ "Não. É uma estimativa transparente baseada nos seus dados. Os credores e as jurisdições podem tratar de forma diferente impostos, seguros, datas de pagamento e outras despesas.",
87
+ },
88
+ ];
89
+
90
+ const howTo = [
91
+ {
92
+ name: "Introduza montante e prazo",
93
+ text: "Indique o valor que receberia e o número de prestações mensais de cada oferta.",
94
+ },
95
+ {
96
+ name: "Escolha o dado conhecido",
97
+ text: "Introduza a taxa nominal anual ou a prestação mensal, conforme os dados da oferta.",
98
+ },
99
+ {
100
+ name: "Adicione todas as comissões",
101
+ text: "Inclua comissões iniciais, mensais e finais para representar o fluxo completo.",
102
+ },
103
+ {
104
+ name: "Leia a comparação",
105
+ text: "Use o custo anual efetivo e verifique o total pago e o valor recebido antes de decidir.",
106
+ },
107
+ ];
108
+
109
+ const schemas = [
110
+ {
111
+ "@context": "https://schema.org",
112
+ "@type": "SoftwareApplication",
113
+ name: "Calculadora de cenários TAEG de empréstimo",
114
+ description:
115
+ "Compara dois cenários de empréstimo com taxas, prestações e comissões.",
116
+ applicationCategory: "FinanceApplication",
117
+ operatingSystem: "All",
118
+ offers: { "@type": "Offer", price: "0", priceCurrency: "EUR" },
119
+ },
120
+ {
121
+ "@context": "https://schema.org",
122
+ "@type": "FAQPage",
123
+ mainEntity: faq.map((item) => ({
124
+ "@type": "Question",
125
+ name: item.question,
126
+ acceptedAnswer: { "@type": "Answer", text: item.answer },
127
+ })),
128
+ },
129
+ {
130
+ "@context": "https://schema.org",
131
+ "@type": "HowTo",
132
+ name: "Comparar duas ofertas de empréstimo",
133
+ description:
134
+ "Modele os fluxos de dois empréstimos e compare o custo anual efetivo.",
135
+ step: howTo.map((step, index) => ({
136
+ "@type": "HowToStep",
137
+ position: index + 1,
138
+ name: step.name,
139
+ text: step.text,
140
+ })),
141
+ },
142
+ ];
143
+
144
+ export const content: ToolLocaleContent<LoanAprScenarioCalculatorUI> = {
145
+ slug: "calculadora-cenarios-taeg-emprestimo",
146
+ title: "Calculadora de cenários TAEG de empréstimo",
147
+ description:
148
+ "Compare duas ofertas de empréstimo com juros, calendário de pagamentos e comissões para estimar o custo anual efetivo.",
149
+ ui,
150
+ faq,
151
+ bibliography,
152
+ howTo,
153
+ schemas,
154
+ seo: [
155
+ {
156
+ type: "title",
157
+ text: "Compare empréstimos pelo custo anual efetivo",
158
+ level: 2,
159
+ },
160
+ {
161
+ type: "paragraph",
162
+ html: "<p>Uma taxa anunciada baixa pode esconder uma comissão de abertura, um encargo mensal ou um custo final. Esta calculadora transforma os dados de duas ofertas em cenários de fluxo de caixa comparáveis.</p>",
163
+ },
164
+ { type: "title", text: "O que inclui a estimativa", level: 3 },
165
+ {
166
+ type: "paragraph",
167
+ html: "<p>Para cada oferta, introduza o montante, o prazo, a taxa nominal ou a prestação mensal conhecida e as comissões cobradas em momentos diferentes. A calculadora encontra a taxa mensal que equilibra o valor recebido com os pagamentos e comissões descontados, e anualiza-a.</p>",
168
+ },
169
+ {
170
+ type: "paragraph",
171
+ html: "<p>O preço do crédito é mais amplo do que a taxa de juro. O resultado é uma estimativa porque a TAEG oficial pode seguir regras locais e incluir pressupostos ausentes do seu cenário.</p>",
172
+ },
173
+ { type: "title", text: "Como ler o resultado", level: 3 },
174
+ {
175
+ type: "list",
176
+ items: [
177
+ "Compare o custo anual efetivo quando montante e prazo são semelhantes.",
178
+ "Verifique o total pago para perceber o impacto absoluto.",
179
+ "Confirme o valor recebido depois das comissões iniciais.",
180
+ "Use o calendário para ver quando surge cada custo.",
181
+ ],
182
+ },
183
+ {
184
+ type: "tip",
185
+ title: "Use a documentação do credor como referência final",
186
+ html: "<p>Num contrato real, compare a TAEG oficial com os mesmos pressupostos. Pergunte por seguros, impostos, taxas variáveis, custos de amortização antecipada e encargos não representados.</p>",
187
+ },
188
+ { type: "title", text: "Limites de um cenário", level: 3 },
189
+ {
190
+ type: "paragraph",
191
+ html: "<p>A ferramenta assume prestações mensais iguais, sem período de carência e comissões no início, durante o prazo ou no último mês. Não certifica capacidade financeira, aprovação, legalidade ou TAEG oficial.</p>",
192
+ },
193
+ ],
194
+ };
@@ -0,0 +1,193 @@
1
+ import type { ToolLocaleContent } from "../../../types";
2
+ import { bibliography } from "../bibliography";
3
+ import type { LoanAprScenarioCalculatorUI } from "../ui";
4
+
5
+ const ui: LoanAprScenarioCalculatorUI = {
6
+ labelScenarioA: "Предложение A",
7
+ labelScenarioB: "Предложение B",
8
+ labelScenarioName: "Название предложения",
9
+ labelCurrency: "Валюта",
10
+ labelApproximateRates:
11
+ "Приблизительные коэффициенты для планирования, не текущие курсы обмена.",
12
+ labelPrincipal: "Сумма займа",
13
+ labelTerm: "Срок погашения",
14
+ labelMonths: "месяцев",
15
+ labelInputBasis: "Что вам известно?",
16
+ labelAnnualRate: "Номинальная годовая ставка",
17
+ labelMonthlyPayment: "Известный ежемесячный платёж",
18
+ labelUpfrontFees: "Первоначальные комиссии",
19
+ labelMonthlyFees: "Ежемесячные комиссии",
20
+ labelFinalFees: "Итоговая комиссия",
21
+ labelOfferNameA: "Предложение A",
22
+ labelOfferNameB: "Предложение B",
23
+ labelRateMode: "Я знаю ставку",
24
+ labelPaymentMode: "Я знаю платёж",
25
+ labelPreset: "Начать сравнение",
26
+ labelPresetBalanced: "Сбалансированные предложения",
27
+ labelPresetLowFee: "Низкая ставка с комиссиями",
28
+ labelPresetLongTerm: "Больший срок",
29
+ labelReset: "Сбросить значения",
30
+ labelCopy: "Скопировать сравнение",
31
+ labelCopied: "Сравнение скопировано",
32
+ labelEffectiveApr: "Эффективные годовые затраты",
33
+ labelNominalRate: "Номинальная ставка",
34
+ labelMonthlyPaymentResult: "Ежемесячный платёж",
35
+ labelTotalPaid: "Всего выплачено",
36
+ labelTotalFees: "Комиссии сценария",
37
+ labelFinanceCost: "Стоимость сверх основного долга",
38
+ labelNetCashReceived: "Получено после первоначальных комиссий",
39
+ labelWinner: "Какое предложение дешевле?",
40
+ labelLowerCost: "Ниже эффективная стоимость",
41
+ labelHigherCost: "Выше эффективная стоимость",
42
+ labelTie: "Почти одинаково",
43
+ labelNeedValidInputs: "Нужны корректные данные",
44
+ labelInvalidPrincipal:
45
+ "Сумма займа должна быть больше нуля и превышать первоначальные комиссии.",
46
+ labelInvalidTerm: "Укажите целый срок от 1 до 600 месяцев.",
47
+ labelInvalidFees: "Комиссии не могут быть отрицательными.",
48
+ labelInvalidPayment:
49
+ "Введите положительный платёж, который погасит полученную чистую сумму.",
50
+ labelInvalidRate: "Укажите номинальную годовую ставку от 0% до 100%.",
51
+ labelNoComparison: "Заполните оба предложения для сравнения.",
52
+ labelTimeline: "График платежей",
53
+ labelStart: "Начало",
54
+ labelMonthly: "Каждый месяц",
55
+ labelEnd: "Последний месяц",
56
+ labelFormula: "Как работает сравнение",
57
+ labelFormulaText:
58
+ "Эффективные годовые затраты - это приведённая к году месячная ставка, при которой полученная сумма равна дисконтированным платежам и комиссиям.",
59
+ labelApproximation:
60
+ "Оценка предполагает одинаковые ежемесячные платежи, отсутствие льготного периода и только введённые комиссии. Она не заменяет официальный APR кредитора.",
61
+ labelScenarioSummary: "Сводка сценария",
62
+ currencyCode: "RUB",
63
+ currencyLocale: "ru-RU",
64
+ };
65
+
66
+ const faq = [
67
+ {
68
+ question: "Чем процентная ставка отличается от эффективных годовых затрат?",
69
+ answer:
70
+ "Номинальная ставка описывает проценты на остаток долга. Эффективные годовые затраты также учитывают сумму и время первоначальных, ежемесячных и итоговых комиссий.",
71
+ },
72
+ {
73
+ question: "Можно ли ввести ежемесячный платёж вместо ставки?",
74
+ answer:
75
+ "Да. Выберите известный ежемесячный платёж для предложения. Калькулятор определит месячную ставку, соответствующую полученной сумме, платежам и комиссиям.",
76
+ },
77
+ {
78
+ question: "Какое предложение дешевле?",
79
+ answer:
80
+ "Сначала сравните эффективные годовые затраты, затем проверьте общую выплату и полученную сумму. При разном сроке или размере займа меньший процент всё равно может дать большую общую стоимость.",
81
+ },
82
+ {
83
+ question: "Это официальный APR кредитора?",
84
+ answer:
85
+ "Нет. Это прозрачная оценка по вашим данным. Кредиторы и правила разных стран могут по-разному учитывать налоги, страховку, даты платежей и другие расходы.",
86
+ },
87
+ ];
88
+
89
+ const howTo = [
90
+ {
91
+ name: "Введите сумму и срок",
92
+ text: "Укажите сумму, которую вы получите, и количество ежемесячных платежей для каждого предложения.",
93
+ },
94
+ {
95
+ name: "Выберите известные данные",
96
+ text: "Введите номинальную годовую ставку или ежемесячный платёж согласно предложению.",
97
+ },
98
+ {
99
+ name: "Добавьте все комиссии",
100
+ text: "Укажите первоначальные, ежемесячные и итоговые комиссии, чтобы отразить полный денежный поток.",
101
+ },
102
+ {
103
+ name: "Прочитайте сравнение",
104
+ text: "Используйте эффективные годовые затраты и перед решением проверьте общую выплату и полученную сумму.",
105
+ },
106
+ ];
107
+
108
+ const schemas = [
109
+ {
110
+ "@context": "https://schema.org",
111
+ "@type": "SoftwareApplication",
112
+ name: "Калькулятор сценариев APR кредита",
113
+ description:
114
+ "Сравнивает два кредитных сценария со ставками, платежами и комиссиями.",
115
+ applicationCategory: "FinanceApplication",
116
+ operatingSystem: "All",
117
+ offers: { "@type": "Offer", price: "0", priceCurrency: "RUB" },
118
+ },
119
+ {
120
+ "@context": "https://schema.org",
121
+ "@type": "FAQPage",
122
+ mainEntity: faq.map((item) => ({
123
+ "@type": "Question",
124
+ name: item.question,
125
+ acceptedAnswer: { "@type": "Answer", text: item.answer },
126
+ })),
127
+ },
128
+ {
129
+ "@context": "https://schema.org",
130
+ "@type": "HowTo",
131
+ name: "Сравнить два кредитных предложения",
132
+ description:
133
+ "Смоделируйте денежные потоки двух кредитов и сравните их эффективные годовые затраты.",
134
+ step: howTo.map((step, index) => ({
135
+ "@type": "HowToStep",
136
+ position: index + 1,
137
+ name: step.name,
138
+ text: step.text,
139
+ })),
140
+ },
141
+ ];
142
+
143
+ export const content: ToolLocaleContent<LoanAprScenarioCalculatorUI> = {
144
+ slug: "kalkulyator-scenariev-apr-kredita",
145
+ title: "Калькулятор сценариев APR кредита",
146
+ description:
147
+ "Сравните два кредитных предложения с процентами, графиком платежей и комиссиями, чтобы оценить эффективные годовые затраты.",
148
+ ui,
149
+ faq,
150
+ bibliography,
151
+ howTo,
152
+ schemas,
153
+ seo: [
154
+ {
155
+ type: "title",
156
+ text: "Сравнивайте кредиты по эффективным годовым затратам",
157
+ level: 2,
158
+ },
159
+ {
160
+ type: "paragraph",
161
+ html: "<p>Низкая рекламная ставка может скрывать комиссию за оформление, ежемесячный сбор или итоговую плату. Этот калькулятор превращает данные двух предложений в сопоставимые денежные потоки и показывает стоимость фактически полученных средств.</p>",
162
+ },
163
+ { type: "title", text: "Что входит в оценку", level: 3 },
164
+ {
165
+ type: "paragraph",
166
+ html: "<p>Для каждого предложения введите сумму, срок, номинальную ставку или известный ежемесячный платёж и комиссии в разные моменты. Калькулятор находит месячную ставку, уравнивающую чистую полученную сумму с дисконтированными платежами и комиссиями, а затем переводит её в годовую.</p>",
167
+ },
168
+ {
169
+ type: "paragraph",
170
+ html: "<p>Так стоимость кредита рассматривается шире, чем одна процентная ставка. Результат является оценкой, поскольку официальный APR может зависеть от местных правил и дополнительных условий.</p>",
171
+ },
172
+ { type: "title", text: "Как читать результат", level: 3 },
173
+ {
174
+ type: "list",
175
+ items: [
176
+ "Сравнивайте эффективные годовые затраты при похожих сумме и сроке.",
177
+ "Проверяйте общую выплату, чтобы понять денежную нагрузку.",
178
+ "Смотрите полученную сумму после первоначальных комиссий.",
179
+ "Используйте график, чтобы увидеть момент каждого расхода.",
180
+ ],
181
+ },
182
+ {
183
+ type: "tip",
184
+ title: "Окончательным источником остаются документы кредитора",
185
+ html: "<p>Для реального договора сопоставьте официальный APR с теми же предположениями. Уточните страховку, налоги, плавающую ставку, досрочное погашение и неучтённые комиссии.</p>",
186
+ },
187
+ { type: "title", text: "Ограничения сценарной оценки", level: 3 },
188
+ {
189
+ type: "paragraph",
190
+ html: "<p>Инструмент предполагает одинаковые ежемесячные платежи, отсутствие льготного периода и комиссии в начале, во время срока или в последний месяц. Он не подтверждает платёжеспособность, одобрение, законность или официальный APR.</p>",
191
+ },
192
+ ],
193
+ };
@@ -0,0 +1,189 @@
1
+ import type { ToolLocaleContent } from "../../../types";
2
+ import { bibliography } from "../bibliography";
3
+ import type { LoanAprScenarioCalculatorUI } from "../ui";
4
+
5
+ const ui: LoanAprScenarioCalculatorUI = {
6
+ labelScenarioA: "Erbjudande A",
7
+ labelScenarioB: "Erbjudande B",
8
+ labelScenarioName: "Erbjudandets namn",
9
+ labelCurrency: "Valuta",
10
+ labelApproximateRates:
11
+ "Ungefärliga planeringsfaktorer, inte aktuella växelkurser.",
12
+ labelPrincipal: "Lånebelopp",
13
+ labelTerm: "Återbetalningstid",
14
+ labelMonths: "månader",
15
+ labelInputBasis: "Vilken uppgift känner du till?",
16
+ labelAnnualRate: "Nominell årsränta",
17
+ labelMonthlyPayment: "Känd månadsbetalning",
18
+ labelUpfrontFees: "Startavgifter",
19
+ labelMonthlyFees: "Månadsavgifter",
20
+ labelFinalFees: "Slutavgift",
21
+ labelOfferNameA: "Erbjudande A",
22
+ labelOfferNameB: "Erbjudande B",
23
+ labelRateMode: "Jag känner till räntan",
24
+ labelPaymentMode: "Jag känner till betalningen",
25
+ labelPreset: "Börja jämföra",
26
+ labelPresetBalanced: "Balanserade erbjudanden",
27
+ labelPresetLowFee: "Låg ränta med avgifter",
28
+ labelPresetLongTerm: "Längre löptid",
29
+ labelReset: "Återställ värden",
30
+ labelCopy: "Kopiera jämförelse",
31
+ labelCopied: "Jämförelsen kopierades",
32
+ labelEffectiveApr: "Effektiv årskostnad",
33
+ labelNominalRate: "Nominell ränta",
34
+ labelMonthlyPaymentResult: "Månadsbetalning",
35
+ labelTotalPaid: "Totalt betalt",
36
+ labelTotalFees: "Avgifter i scenariot",
37
+ labelFinanceCost: "Kostnad över kapitalet",
38
+ labelNetCashReceived: "Mottaget efter startavgifter",
39
+ labelWinner: "Vilket erbjudande kostar minst?",
40
+ labelLowerCost: "Lägre effektiv kostnad",
41
+ labelHigherCost: "Högre effektiv kostnad",
42
+ labelTie: "Nästan lika",
43
+ labelNeedValidInputs: "Giltiga uppgifter krävs",
44
+ labelInvalidPrincipal:
45
+ "Lånebeloppet måste vara större än noll och högre än startavgifterna.",
46
+ labelInvalidTerm: "Använd en hel löptid från 1 till 600 månader.",
47
+ labelInvalidFees: "Avgifter får inte vara negativa.",
48
+ labelInvalidPayment:
49
+ "Ange en positiv månadsbetalning som kan återbetala det mottagna nettobeloppet.",
50
+ labelInvalidRate: "Använd en nominell årsränta från 0% till 100%.",
51
+ labelNoComparison: "Fyll i båda erbjudandena för att jämföra dem.",
52
+ labelTimeline: "Betalningsplan",
53
+ labelStart: "Start",
54
+ labelMonthly: "Varje månad",
55
+ labelEnd: "Sista månaden",
56
+ labelFormula: "Så fungerar jämförelsen",
57
+ labelFormulaText:
58
+ "Den effektiva årskostnaden är den annualiserade månadsränta som gör mottaget belopp lika med diskonterade betalningar och avgifter.",
59
+ labelApproximation:
60
+ "Uppskattningen antar lika månadsbetalningar, ingen amorteringsfri period och endast de avgifter du anger. Den ersätter inte långivarens officiella APR.",
61
+ labelScenarioSummary: "Scenariesammanfattning",
62
+ currencyCode: "SEK",
63
+ currencyLocale: "sv-SE",
64
+ };
65
+
66
+ const faq = [
67
+ {
68
+ question: "Vad är skillnaden mellan räntan och den effektiva årskostnaden?",
69
+ answer:
70
+ "Den nominella räntan beskriver räntan på skulden. Den effektiva årskostnaden tar också hänsyn till belopp och tidpunkt för start-, månads- och slutavgifter.",
71
+ },
72
+ {
73
+ question: "Kan jag ange månadsbetalningen i stället för räntan?",
74
+ answer:
75
+ "Ja. Välj känd månadsbetalning för erbjudandet. Kalkylatorn räknar fram den månadsränta som stämmer med mottaget belopp, betalningar och avgifter.",
76
+ },
77
+ {
78
+ question: "Vilket erbjudande är billigast?",
79
+ answer:
80
+ "Jämför först den effektiva årskostnaden och kontrollera sedan totalt betalt och mottaget belopp. En lägre procentsats kan ändå ge högre total kostnad om belopp eller löptid skiljer sig.",
81
+ },
82
+ {
83
+ question: "Är detta långivarens officiella APR?",
84
+ answer:
85
+ "Nej. Det är en transparent scenarieuppskattning utifrån dina uppgifter. Långivare och länder kan hantera skatt, försäkring, betalningsdatum och andra kostnader på olika sätt.",
86
+ },
87
+ ];
88
+
89
+ const howTo = [
90
+ {
91
+ name: "Ange belopp och löptid",
92
+ text: "Skriv in beloppet du skulle få och antalet månadsbetalningar för varje erbjudande.",
93
+ },
94
+ {
95
+ name: "Välj känd uppgift",
96
+ text: "Ange nominell årsränta eller månadsbetalning beroende på erbjudandets information.",
97
+ },
98
+ {
99
+ name: "Lägg till alla avgifter",
100
+ text: "Ta med start-, månads- och slutavgifter så att hela kassaflödet visas.",
101
+ },
102
+ {
103
+ name: "Läs jämförelsen",
104
+ text: "Använd effektiv årskostnad och kontrollera totalt betalt och mottaget belopp innan du bestämmer dig.",
105
+ },
106
+ ];
107
+
108
+ const schemas = [
109
+ {
110
+ "@context": "https://schema.org",
111
+ "@type": "SoftwareApplication",
112
+ name: "Kalkylator för låne-APR-scenarier",
113
+ description:
114
+ "Jämför två lånescenarier med räntor, betalningar och avgifter.",
115
+ applicationCategory: "FinanceApplication",
116
+ operatingSystem: "All",
117
+ offers: { "@type": "Offer", price: "0", priceCurrency: "SEK" },
118
+ },
119
+ {
120
+ "@context": "https://schema.org",
121
+ "@type": "FAQPage",
122
+ mainEntity: faq.map((item) => ({
123
+ "@type": "Question",
124
+ name: item.question,
125
+ acceptedAnswer: { "@type": "Answer", text: item.answer },
126
+ })),
127
+ },
128
+ {
129
+ "@context": "https://schema.org",
130
+ "@type": "HowTo",
131
+ name: "Jämför två låneerbjudanden",
132
+ description:
133
+ "Modellera två låneflöden och jämför deras effektiva årskostnad.",
134
+ step: howTo.map((step, index) => ({
135
+ "@type": "HowToStep",
136
+ position: index + 1,
137
+ name: step.name,
138
+ text: step.text,
139
+ })),
140
+ },
141
+ ];
142
+
143
+ export const content: ToolLocaleContent<LoanAprScenarioCalculatorUI> = {
144
+ slug: "lan-apr-scenariokalkylator",
145
+ title: "Kalkylator för scenarier med låne APR",
146
+ description:
147
+ "Jämför två låneerbjudanden med ränta, betalningsplan och avgifter för att uppskatta den effektiva årskostnaden.",
148
+ ui,
149
+ faq,
150
+ bibliography,
151
+ howTo,
152
+ schemas,
153
+ seo: [
154
+ { type: "title", text: "Jämför lån efter effektiv årskostnad", level: 2 },
155
+ {
156
+ type: "paragraph",
157
+ html: "<p>En låg annonserad ränta kan dölja uppläggningsavgift, månadsavgift eller en slutkostnad. Den här kalkylatorn gör två erbjudanden till jämförbara kassaflöden så att kostnaden för pengarna du faktiskt får blir tydlig.</p>",
158
+ },
159
+ { type: "title", text: "Vad uppskattningen innehåller", level: 3 },
160
+ {
161
+ type: "paragraph",
162
+ html: "<p>För varje erbjudande anger du belopp, löptid, nominell ränta eller känd månadsbetalning samt avgifter vid olika tidpunkter. Kalkylatorn hittar månadsräntan som balanserar mottaget belopp mot diskonterade betalningar och avgifter och räknar om den till årsränta.</p>",
163
+ },
164
+ {
165
+ type: "paragraph",
166
+ html: "<p>Kreditkostnaden blir därmed bredare än bara räntan. Resultatet är en uppskattning eftersom officiell APR kan följa nationella regler och innehålla andra antaganden.</p>",
167
+ },
168
+ { type: "title", text: "Så läser du resultatet", level: 3 },
169
+ {
170
+ type: "list",
171
+ items: [
172
+ "Jämför effektiv årskostnad när belopp och löptid liknar varandra.",
173
+ "Kontrollera totalt betalt för den faktiska pengapåverkan.",
174
+ "Kontrollera mottaget belopp efter startavgifter.",
175
+ "Använd betalningsplanen för att se när varje kostnad uppstår.",
176
+ ],
177
+ },
178
+ {
179
+ type: "tip",
180
+ title: "Långivarens dokument är den slutliga referensen",
181
+ html: "<p>Vid ett riktigt avtal ska du jämföra långivarens officiella APR med samma antaganden. Fråga om försäkring, skatt, rörlig ränta, kostnad för förtida återbetalning och avgifter som saknas.</p>",
182
+ },
183
+ { type: "title", text: "Begränsningar för ett scenario", level: 3 },
184
+ {
185
+ type: "paragraph",
186
+ html: "<p>Verktyget antar lika månadsbetalningar, ingen amorteringsfri period och avgifter i början, under löptiden eller den sista månaden. Det intygar inte betalningsförmåga, godkännande, laglighet eller officiell APR.</p>",
187
+ },
188
+ ],
189
+ };