@jjlmoya/utils-finance 1.46.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.
- package/package.json +1 -1
- package/src/category/index.ts +2 -1
- package/src/entries.ts +4 -1
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/loanAprScenarioCalculator/bibliography.astro +11 -0
- package/src/tool/loanAprScenarioCalculator/bibliography.ts +29 -0
- package/src/tool/loanAprScenarioCalculator/component.astro +62 -0
- package/src/tool/loanAprScenarioCalculator/controller.ts +205 -0
- package/src/tool/loanAprScenarioCalculator/currency-dom.ts +107 -0
- package/src/tool/loanAprScenarioCalculator/currency.test.ts +57 -0
- package/src/tool/loanAprScenarioCalculator/currency.ts +105 -0
- package/src/tool/loanAprScenarioCalculator/dom-views.ts +190 -0
- package/src/tool/loanAprScenarioCalculator/entry.ts +28 -0
- package/src/tool/loanAprScenarioCalculator/evaluator.ts +21 -0
- package/src/tool/loanAprScenarioCalculator/i18n/de.ts +194 -0
- package/src/tool/loanAprScenarioCalculator/i18n/en.ts +194 -0
- package/src/tool/loanAprScenarioCalculator/i18n/es.ts +195 -0
- package/src/tool/loanAprScenarioCalculator/i18n/fr.ts +195 -0
- package/src/tool/loanAprScenarioCalculator/i18n/id.ts +193 -0
- package/src/tool/loanAprScenarioCalculator/i18n/it.ts +193 -0
- package/src/tool/loanAprScenarioCalculator/i18n/ja.ts +186 -0
- package/src/tool/loanAprScenarioCalculator/i18n/ko.ts +186 -0
- package/src/tool/loanAprScenarioCalculator/i18n/nl.ts +194 -0
- package/src/tool/loanAprScenarioCalculator/i18n/pl.ts +194 -0
- package/src/tool/loanAprScenarioCalculator/i18n/pt.ts +194 -0
- package/src/tool/loanAprScenarioCalculator/i18n/ru.ts +193 -0
- package/src/tool/loanAprScenarioCalculator/i18n/sv.ts +189 -0
- package/src/tool/loanAprScenarioCalculator/i18n/tr.ts +193 -0
- package/src/tool/loanAprScenarioCalculator/i18n/zh.ts +181 -0
- package/src/tool/loanAprScenarioCalculator/index.ts +11 -0
- package/src/tool/loanAprScenarioCalculator/loan-apr-scenario-calculator.css +699 -0
- package/src/tool/loanAprScenarioCalculator/logic.test.ts +65 -0
- package/src/tool/loanAprScenarioCalculator/logic.ts +259 -0
- package/src/tool/loanAprScenarioCalculator/presets.ts +51 -0
- package/src/tool/loanAprScenarioCalculator/scenario-dom.ts +101 -0
- package/src/tool/loanAprScenarioCalculator/seo.astro +11 -0
- package/src/tool/loanAprScenarioCalculator/storage.ts +60 -0
- package/src/tool/loanAprScenarioCalculator/ui.ts +55 -0
- package/src/tool/loanAprScenarioCalculator/validation.ts +24 -0
- package/src/tools.ts +2 -1
|
@@ -0,0 +1,195 @@
|
|
|
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: "Nombre de la oferta",
|
|
9
|
+
labelCurrency: "Moneda",
|
|
10
|
+
labelApproximateRates:
|
|
11
|
+
"Factores aproximados para planificar, no tipos de cambio en tiempo real.",
|
|
12
|
+
labelPrincipal: "Importe prestado",
|
|
13
|
+
labelTerm: "Plazo de devolución",
|
|
14
|
+
labelMonths: "meses",
|
|
15
|
+
labelInputBasis: "¿Qué dato conoces?",
|
|
16
|
+
labelAnnualRate: "Tipo nominal anual",
|
|
17
|
+
labelMonthlyPayment: "Cuota mensual conocida",
|
|
18
|
+
labelUpfrontFees: "Comisiones iniciales",
|
|
19
|
+
labelMonthlyFees: "Comisiones mensuales",
|
|
20
|
+
labelFinalFees: "Comisión final",
|
|
21
|
+
labelOfferNameA: "Oferta A",
|
|
22
|
+
labelOfferNameB: "Oferta B",
|
|
23
|
+
labelRateMode: "Conozco el tipo",
|
|
24
|
+
labelPaymentMode: "Conozco la cuota",
|
|
25
|
+
labelPreset: "Empieza una comparativa",
|
|
26
|
+
labelPresetBalanced: "Ofertas equilibradas",
|
|
27
|
+
labelPresetLowFee: "Tipo bajo con comisiones",
|
|
28
|
+
labelPresetLongTerm: "Plazo más largo",
|
|
29
|
+
labelReset: "Restablecer valores",
|
|
30
|
+
labelCopy: "Copiar comparativa",
|
|
31
|
+
labelCopied: "Comparativa copiada",
|
|
32
|
+
labelEffectiveApr: "Coste anual efectivo",
|
|
33
|
+
labelNominalRate: "Tipo nominal",
|
|
34
|
+
labelMonthlyPaymentResult: "Cuota mensual",
|
|
35
|
+
labelTotalPaid: "Total pagado",
|
|
36
|
+
labelTotalFees: "Comisiones del escenario",
|
|
37
|
+
labelFinanceCost: "Coste sobre el principal",
|
|
38
|
+
labelNetCashReceived: "Efectivo recibido tras comisiones iniciales",
|
|
39
|
+
labelWinner: "¿Qué oferta cuesta menos?",
|
|
40
|
+
labelLowerCost: "Menor coste efectivo",
|
|
41
|
+
labelHigherCost: "Mayor coste efectivo",
|
|
42
|
+
labelTie: "Casi iguales",
|
|
43
|
+
labelNeedValidInputs: "Necesita datos válidos",
|
|
44
|
+
labelInvalidPrincipal:
|
|
45
|
+
"El importe prestado debe ser mayor que cero y superar las comisiones iniciales.",
|
|
46
|
+
labelInvalidTerm: "Usa un plazo entero de 1 a 600 meses.",
|
|
47
|
+
labelInvalidFees: "Las comisiones no pueden ser negativas.",
|
|
48
|
+
labelInvalidPayment:
|
|
49
|
+
"Introduce una cuota mensual positiva que pueda devolver el efectivo recibido.",
|
|
50
|
+
labelInvalidRate: "Usa un tipo nominal anual entre el 0 % y el 100 %.",
|
|
51
|
+
labelNoComparison: "Completa las dos ofertas para compararlas.",
|
|
52
|
+
labelTimeline: "Calendario de pagos",
|
|
53
|
+
labelStart: "Inicio",
|
|
54
|
+
labelMonthly: "Cada mes",
|
|
55
|
+
labelEnd: "Último mes",
|
|
56
|
+
labelFormula: "Cómo funciona la comparativa",
|
|
57
|
+
labelFormulaText:
|
|
58
|
+
"El coste anual efectivo es el tipo mensual anualizado que iguala el efectivo recibido con los pagos y las comisiones descontados.",
|
|
59
|
+
labelApproximation:
|
|
60
|
+
"La estimación supone cuotas mensuales iguales, sin carencia y solo las comisiones que introduzcas. No sustituye al TAE oficial del prestamista.",
|
|
61
|
+
labelScenarioSummary: "Resumen del escenario",
|
|
62
|
+
currencyCode: "EUR",
|
|
63
|
+
currencyLocale: "es-ES",
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const faq = [
|
|
67
|
+
{
|
|
68
|
+
question:
|
|
69
|
+
"¿Cuál es la diferencia entre el tipo de interés y el coste anual efectivo?",
|
|
70
|
+
answer:
|
|
71
|
+
"El tipo nominal describe el interés aplicado al saldo. El coste anual efectivo también refleja el momento y el importe de las comisiones iniciales, mensuales y finales que introduzcas.",
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
question:
|
|
75
|
+
"¿Puedo introducir una cuota mensual en vez de un tipo de interés?",
|
|
76
|
+
answer:
|
|
77
|
+
"Sí. Elige la opción de cuota mensual conocida para esa oferta. La calculadora deduce el tipo mensual que encaja con el efectivo recibido, los pagos y las comisiones del escenario.",
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
question: "¿Qué oferta es más barata?",
|
|
81
|
+
answer:
|
|
82
|
+
"Compara primero el coste anual efectivo y revisa después el total pagado y el efectivo recibido. Un porcentaje menor puede tener un coste total mayor si cambia el plazo o el importe.",
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
question: "¿Es el TAE oficial del prestamista?",
|
|
86
|
+
answer:
|
|
87
|
+
"No. Es una estimación transparente basada en tus datos. Cada entidad y jurisdicción puede incluir costes, fechas de pago, impuestos, seguros o supuestos distintos.",
|
|
88
|
+
},
|
|
89
|
+
];
|
|
90
|
+
|
|
91
|
+
const howTo = [
|
|
92
|
+
{
|
|
93
|
+
name: "Introduce importe y plazo",
|
|
94
|
+
text: "Añade el dinero que recibirías y el número de cuotas mensuales de cada oferta.",
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: "Elige el dato conocido",
|
|
98
|
+
text: "Introduce el tipo nominal anual o la cuota mensual, según lo que indique la oferta.",
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: "Añade todas las comisiones",
|
|
102
|
+
text: "Incluye las comisiones iniciales, mensuales y finales para representar el flujo de dinero completo.",
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: "Lee la comparativa",
|
|
106
|
+
text: "Usa el coste anual efectivo y comprueba después el total pagado y el efectivo recibido antes de decidir.",
|
|
107
|
+
},
|
|
108
|
+
];
|
|
109
|
+
|
|
110
|
+
const schemas = [
|
|
111
|
+
{
|
|
112
|
+
"@context": "https://schema.org",
|
|
113
|
+
"@type": "SoftwareApplication",
|
|
114
|
+
name: "Calculadora de escenarios TAE de préstamos",
|
|
115
|
+
description:
|
|
116
|
+
"Compara dos escenarios de préstamo con tipos, cuotas y comisiones.",
|
|
117
|
+
applicationCategory: "FinanceApplication",
|
|
118
|
+
operatingSystem: "All",
|
|
119
|
+
offers: { "@type": "Offer", price: "0", priceCurrency: "EUR" },
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"@context": "https://schema.org",
|
|
123
|
+
"@type": "FAQPage",
|
|
124
|
+
mainEntity: faq.map((item) => ({
|
|
125
|
+
"@type": "Question",
|
|
126
|
+
name: item.question,
|
|
127
|
+
acceptedAnswer: { "@type": "Answer", text: item.answer },
|
|
128
|
+
})),
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"@context": "https://schema.org",
|
|
132
|
+
"@type": "HowTo",
|
|
133
|
+
name: "Comparar dos ofertas de préstamo",
|
|
134
|
+
description:
|
|
135
|
+
"Modela los flujos de dos préstamos y compara su coste anual efectivo.",
|
|
136
|
+
step: howTo.map((step, index) => ({
|
|
137
|
+
"@type": "HowToStep",
|
|
138
|
+
position: index + 1,
|
|
139
|
+
name: step.name,
|
|
140
|
+
text: step.text,
|
|
141
|
+
})),
|
|
142
|
+
},
|
|
143
|
+
];
|
|
144
|
+
|
|
145
|
+
export const content: ToolLocaleContent<LoanAprScenarioCalculatorUI> = {
|
|
146
|
+
slug: "calculadora-escenarios-tae-prestamo",
|
|
147
|
+
title: "Calculadora de escenarios TAE de préstamos",
|
|
148
|
+
description:
|
|
149
|
+
"Compara dos ofertas de préstamo con sus intereses, cuotas y comisiones para estimar el coste anual efectivo antes de decidir.",
|
|
150
|
+
ui,
|
|
151
|
+
faq,
|
|
152
|
+
bibliography,
|
|
153
|
+
howTo,
|
|
154
|
+
schemas,
|
|
155
|
+
seo: [
|
|
156
|
+
{
|
|
157
|
+
type: "title",
|
|
158
|
+
text: "Compara préstamos por su coste anual efectivo",
|
|
159
|
+
level: 2,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: "paragraph",
|
|
163
|
+
html: "<p>Un tipo de interés publicitado bajo puede ocultar una comisión de apertura, un cargo mensual o un coste final. Esta calculadora convierte los datos de dos ofertas en flujos de caja comparables para mostrar cuánto cuesta realmente el dinero que recibes.</p>",
|
|
164
|
+
},
|
|
165
|
+
{ type: "title", text: "Qué incluye la estimación", level: 3 },
|
|
166
|
+
{
|
|
167
|
+
type: "paragraph",
|
|
168
|
+
html: "<p>Para cada oferta introduce el importe, el plazo, el tipo nominal o la cuota mensual conocida y las comisiones cobradas en cada momento. La calculadora encuentra el tipo mensual que equilibra el efectivo recibido con los pagos y comisiones descontados, y después lo anualiza.</p>",
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
type: "paragraph",
|
|
172
|
+
html: "<p>Así la comparación considera más que el tipo de interés. El resultado se presenta como una estimación porque el TAE oficial puede seguir reglas del país e incluir costes que no estén en tu escenario.</p>",
|
|
173
|
+
},
|
|
174
|
+
{ type: "title", text: "Cómo interpretar el resultado", level: 3 },
|
|
175
|
+
{
|
|
176
|
+
type: "list",
|
|
177
|
+
items: [
|
|
178
|
+
"Compara el coste anual efectivo cuando importe y plazo sean parecidos.",
|
|
179
|
+
"Revisa el total pagado para entender el impacto en euros.",
|
|
180
|
+
"Comprueba el efectivo recibido después de las comisiones iniciales.",
|
|
181
|
+
"Usa el calendario para ver cuándo entra cada coste.",
|
|
182
|
+
],
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
type: "tip",
|
|
186
|
+
title: "Usa el contrato del prestamista como referencia final",
|
|
187
|
+
html: "<p>Si comparas un contrato real, contrasta su TAE con los mismos supuestos. Pregunta por seguros, impuestos, tipos variables, penalizaciones por amortización anticipada y cargos que no hayas podido introducir.</p>",
|
|
188
|
+
},
|
|
189
|
+
{ type: "title", text: "Límites de una estimación de escenario", level: 3 },
|
|
190
|
+
{
|
|
191
|
+
type: "paragraph",
|
|
192
|
+
html: "<p>La herramienta supone cuotas mensuales iguales, sin periodo de carencia y comisiones al inicio, durante el plazo o en el último mes. No certifica la asequibilidad, la aprobación, la legalidad ni el TAE oficial de un producto.</p>",
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
};
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import type { ToolLocaleContent } from "../../../types";
|
|
2
|
+
import { bibliography } from "../bibliography";
|
|
3
|
+
import type { LoanAprScenarioCalculatorUI } from "../ui";
|
|
4
|
+
|
|
5
|
+
const ui: LoanAprScenarioCalculatorUI = {
|
|
6
|
+
labelScenarioA: "Offre A",
|
|
7
|
+
labelScenarioB: "Offre B",
|
|
8
|
+
labelScenarioName: "Nom de l'offre",
|
|
9
|
+
labelCurrency: "Devise",
|
|
10
|
+
labelApproximateRates:
|
|
11
|
+
"Facteurs indicatifs pour la planification, pas des taux de change en direct.",
|
|
12
|
+
labelPrincipal: "Montant emprunté",
|
|
13
|
+
labelTerm: "Durée de remboursement",
|
|
14
|
+
labelMonths: "mois",
|
|
15
|
+
labelInputBasis: "Quelle donnée connaissez-vous ?",
|
|
16
|
+
labelAnnualRate: "Taux annuel nominal",
|
|
17
|
+
labelMonthlyPayment: "Mensualité connue",
|
|
18
|
+
labelUpfrontFees: "Frais initiaux",
|
|
19
|
+
labelMonthlyFees: "Frais mensuels",
|
|
20
|
+
labelFinalFees: "Frais finaux",
|
|
21
|
+
labelOfferNameA: "Offre A",
|
|
22
|
+
labelOfferNameB: "Offre B",
|
|
23
|
+
labelRateMode: "Je connais le taux",
|
|
24
|
+
labelPaymentMode: "Je connais la mensualité",
|
|
25
|
+
labelPreset: "Commencer une comparaison",
|
|
26
|
+
labelPresetBalanced: "Offres équilibrées",
|
|
27
|
+
labelPresetLowFee: "Taux bas avec frais",
|
|
28
|
+
labelPresetLongTerm: "Durée plus longue",
|
|
29
|
+
labelReset: "Réinitialiser les valeurs",
|
|
30
|
+
labelCopy: "Copier la comparaison",
|
|
31
|
+
labelCopied: "Comparaison copiée",
|
|
32
|
+
labelEffectiveApr: "Coût annuel effectif",
|
|
33
|
+
labelNominalRate: "Taux nominal",
|
|
34
|
+
labelMonthlyPaymentResult: "Mensualité",
|
|
35
|
+
labelTotalPaid: "Total versé",
|
|
36
|
+
labelTotalFees: "Frais du scénario",
|
|
37
|
+
labelFinanceCost: "Coût au-dessus du principal",
|
|
38
|
+
labelNetCashReceived: "Somme reçue après les frais initiaux",
|
|
39
|
+
labelWinner: "Quelle offre coûte le moins ?",
|
|
40
|
+
labelLowerCost: "Coût effectif inférieur",
|
|
41
|
+
labelHigherCost: "Coût effectif supérieur",
|
|
42
|
+
labelTie: "Presque identiques",
|
|
43
|
+
labelNeedValidInputs: "Données valides nécessaires",
|
|
44
|
+
labelInvalidPrincipal:
|
|
45
|
+
"Le montant emprunté doit être supérieur à zéro et aux frais initiaux.",
|
|
46
|
+
labelInvalidTerm: "Utilisez une durée entière de 1 à 600 mois.",
|
|
47
|
+
labelInvalidFees: "Les frais ne peuvent pas être négatifs.",
|
|
48
|
+
labelInvalidPayment:
|
|
49
|
+
"Saisissez une mensualité positive qui rembourse la somme reçue.",
|
|
50
|
+
labelInvalidRate:
|
|
51
|
+
"Utilisez un taux annuel nominal compris entre 0 % et 100 %.",
|
|
52
|
+
labelNoComparison: "Complétez les deux offres pour les comparer.",
|
|
53
|
+
labelTimeline: "Calendrier des paiements",
|
|
54
|
+
labelStart: "Début",
|
|
55
|
+
labelMonthly: "Chaque mois",
|
|
56
|
+
labelEnd: "Dernier mois",
|
|
57
|
+
labelFormula: "Fonctionnement de la comparaison",
|
|
58
|
+
labelFormulaText:
|
|
59
|
+
"Le coût annuel effectif est le taux mensuel annualisé qui égalise la somme reçue et les paiements et frais actualisés.",
|
|
60
|
+
labelApproximation:
|
|
61
|
+
"L'estimation suppose des mensualités égales, aucune période de différé et uniquement les frais saisis. Elle ne remplace pas le TAEG officiel du prêteur.",
|
|
62
|
+
labelScenarioSummary: "Résumé du scénario",
|
|
63
|
+
currencyCode: "EUR",
|
|
64
|
+
currencyLocale: "fr-FR",
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const faq = [
|
|
68
|
+
{
|
|
69
|
+
question:
|
|
70
|
+
"Quelle est la différence entre le taux d'intérêt et le coût annuel effectif ?",
|
|
71
|
+
answer:
|
|
72
|
+
"Le taux nominal décrit les intérêts appliqués au solde. Le coût annuel effectif tient aussi compte du montant et du moment des frais initiaux, mensuels et finaux saisis.",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
question: "Puis-je saisir une mensualité plutôt qu'un taux d'intérêt ?",
|
|
76
|
+
answer:
|
|
77
|
+
"Oui. Choisissez la mensualité connue pour l'offre. Le calculateur déduit le taux mensuel correspondant à la somme reçue, aux paiements et aux frais du scénario.",
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
question: "Quelle offre est la moins chère ?",
|
|
81
|
+
answer:
|
|
82
|
+
"Comparez d'abord le coût annuel effectif, puis le total versé et la somme reçue. Un pourcentage plus bas peut entraîner un coût total plus élevé si le montant ou la durée diffère.",
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
question: "Est-ce le TAEG officiel du prêteur ?",
|
|
86
|
+
answer:
|
|
87
|
+
"Non. Il s'agit d'une estimation transparente basée sur vos données. Les prêteurs et les juridictions peuvent traiter différemment les taxes, assurances, dates de paiement et autres frais.",
|
|
88
|
+
},
|
|
89
|
+
];
|
|
90
|
+
|
|
91
|
+
const howTo = [
|
|
92
|
+
{
|
|
93
|
+
name: "Saisir le montant et la durée",
|
|
94
|
+
text: "Ajoutez la somme reçue et le nombre de mensualités pour chaque offre.",
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: "Choisir la donnée connue",
|
|
98
|
+
text: "Saisissez le taux annuel nominal ou la mensualité selon les informations de l'offre.",
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: "Ajouter tous les frais",
|
|
102
|
+
text: "Indiquez les frais initiaux, mensuels et finaux afin de représenter le flux complet.",
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: "Lire la comparaison",
|
|
106
|
+
text: "Utilisez le coût annuel effectif, puis vérifiez le total versé et la somme reçue avant de décider.",
|
|
107
|
+
},
|
|
108
|
+
];
|
|
109
|
+
|
|
110
|
+
const schemas = [
|
|
111
|
+
{
|
|
112
|
+
"@context": "https://schema.org",
|
|
113
|
+
"@type": "SoftwareApplication",
|
|
114
|
+
name: "Calculateur de scénarios de TAEG de prêt",
|
|
115
|
+
description:
|
|
116
|
+
"Compare deux scénarios de prêt avec taux, mensualités et frais.",
|
|
117
|
+
applicationCategory: "FinanceApplication",
|
|
118
|
+
operatingSystem: "All",
|
|
119
|
+
offers: { "@type": "Offer", price: "0", priceCurrency: "EUR" },
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"@context": "https://schema.org",
|
|
123
|
+
"@type": "FAQPage",
|
|
124
|
+
mainEntity: faq.map((item) => ({
|
|
125
|
+
"@type": "Question",
|
|
126
|
+
name: item.question,
|
|
127
|
+
acceptedAnswer: { "@type": "Answer", text: item.answer },
|
|
128
|
+
})),
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"@context": "https://schema.org",
|
|
132
|
+
"@type": "HowTo",
|
|
133
|
+
name: "Comparer deux offres de prêt",
|
|
134
|
+
description:
|
|
135
|
+
"Modélisez les flux de deux prêts et comparez leur coût annuel effectif.",
|
|
136
|
+
step: howTo.map((step, index) => ({
|
|
137
|
+
"@type": "HowToStep",
|
|
138
|
+
position: index + 1,
|
|
139
|
+
name: step.name,
|
|
140
|
+
text: step.text,
|
|
141
|
+
})),
|
|
142
|
+
},
|
|
143
|
+
];
|
|
144
|
+
|
|
145
|
+
export const content: ToolLocaleContent<LoanAprScenarioCalculatorUI> = {
|
|
146
|
+
slug: "calculateur-scenarios-taeg-pret",
|
|
147
|
+
title: "Calculateur de scénarios de TAEG de prêt",
|
|
148
|
+
description:
|
|
149
|
+
"Comparez deux offres de prêt avec leurs intérêts, échéances et frais pour estimer le coût annuel effectif.",
|
|
150
|
+
ui,
|
|
151
|
+
faq,
|
|
152
|
+
bibliography,
|
|
153
|
+
howTo,
|
|
154
|
+
schemas,
|
|
155
|
+
seo: [
|
|
156
|
+
{
|
|
157
|
+
type: "title",
|
|
158
|
+
text: "Comparer les prêts par leur coût annuel effectif",
|
|
159
|
+
level: 2,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: "paragraph",
|
|
163
|
+
html: "<p>Un taux publicitaire bas peut cacher des frais de dossier, des frais mensuels ou un coût final. Ce calculateur transforme les informations de deux offres en flux de trésorerie comparables afin d'évaluer le coût de la somme réellement reçue.</p>",
|
|
164
|
+
},
|
|
165
|
+
{ type: "title", text: "Ce que comprend l'estimation", level: 3 },
|
|
166
|
+
{
|
|
167
|
+
type: "paragraph",
|
|
168
|
+
html: "<p>Pour chaque offre, saisissez le montant, la durée, le taux nominal ou la mensualité connue et les frais à chaque étape. Le calculateur recherche le taux mensuel qui équilibre la somme reçue avec les paiements et frais actualisés, puis l'annualise.</p>",
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
type: "paragraph",
|
|
172
|
+
html: "<p>Le prix du crédit est ainsi plus large que le taux d'intérêt seul. Le résultat reste une estimation, car le TAEG officiel peut suivre des règles nationales et intégrer d'autres hypothèses.</p>",
|
|
173
|
+
},
|
|
174
|
+
{ type: "title", text: "Lire le résultat", level: 3 },
|
|
175
|
+
{
|
|
176
|
+
type: "list",
|
|
177
|
+
items: [
|
|
178
|
+
"Comparez le coût annuel effectif lorsque montant et durée sont similaires.",
|
|
179
|
+
"Vérifiez le total versé pour mesurer l'impact en euros.",
|
|
180
|
+
"Regardez la somme reçue après les frais initiaux.",
|
|
181
|
+
"Utilisez le calendrier pour voir quand chaque coût intervient.",
|
|
182
|
+
],
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
type: "tip",
|
|
186
|
+
title: "Le document du prêteur reste la référence",
|
|
187
|
+
html: "<p>Pour un contrat réel, rapprochez le TAEG officiel des mêmes hypothèses. Demandez les informations sur assurances, taxes, taux variables et pénalités de remboursement anticipé.</p>",
|
|
188
|
+
},
|
|
189
|
+
{ type: "title", text: "Limites d'un scénario", level: 3 },
|
|
190
|
+
{
|
|
191
|
+
type: "paragraph",
|
|
192
|
+
html: "<p>L'outil suppose des mensualités égales, aucune période de différé et des frais au début, pendant la durée ou au dernier mois. Il ne certifie ni l'accessibilité financière, ni l'accord, ni le TAEG officiel.</p>",
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
};
|
|
@@ -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: "Penawaran A",
|
|
7
|
+
labelScenarioB: "Penawaran B",
|
|
8
|
+
labelScenarioName: "Nama penawaran",
|
|
9
|
+
labelCurrency: "Mata uang",
|
|
10
|
+
labelApproximateRates:
|
|
11
|
+
"Faktor perkiraan untuk perencanaan, bukan nilai tukar langsung.",
|
|
12
|
+
labelPrincipal: "Jumlah pinjaman",
|
|
13
|
+
labelTerm: "Jangka waktu pembayaran",
|
|
14
|
+
labelMonths: "bulan",
|
|
15
|
+
labelInputBasis: "Data apa yang Anda ketahui?",
|
|
16
|
+
labelAnnualRate: "Suku bunga tahunan nominal",
|
|
17
|
+
labelMonthlyPayment: "Cicilan bulanan yang diketahui",
|
|
18
|
+
labelUpfrontFees: "Biaya awal",
|
|
19
|
+
labelMonthlyFees: "Biaya bulanan",
|
|
20
|
+
labelFinalFees: "Biaya akhir",
|
|
21
|
+
labelOfferNameA: "Penawaran A",
|
|
22
|
+
labelOfferNameB: "Penawaran B",
|
|
23
|
+
labelRateMode: "Saya tahu bunganya",
|
|
24
|
+
labelPaymentMode: "Saya tahu cicilannya",
|
|
25
|
+
labelPreset: "Mulai perbandingan",
|
|
26
|
+
labelPresetBalanced: "Penawaran seimbang",
|
|
27
|
+
labelPresetLowFee: "Bunga rendah dengan biaya",
|
|
28
|
+
labelPresetLongTerm: "Jangka waktu lebih panjang",
|
|
29
|
+
labelReset: "Atur ulang nilai",
|
|
30
|
+
labelCopy: "Salin perbandingan",
|
|
31
|
+
labelCopied: "Perbandingan disalin",
|
|
32
|
+
labelEffectiveApr: "Biaya tahunan efektif",
|
|
33
|
+
labelNominalRate: "Suku bunga nominal",
|
|
34
|
+
labelMonthlyPaymentResult: "Cicilan bulanan",
|
|
35
|
+
labelTotalPaid: "Total dibayar",
|
|
36
|
+
labelTotalFees: "Biaya dalam skenario",
|
|
37
|
+
labelFinanceCost: "Biaya di atas pokok",
|
|
38
|
+
labelNetCashReceived: "Dana diterima setelah biaya awal",
|
|
39
|
+
labelWinner: "Penawaran mana yang lebih murah?",
|
|
40
|
+
labelLowerCost: "Biaya efektif lebih rendah",
|
|
41
|
+
labelHigherCost: "Biaya efektif lebih tinggi",
|
|
42
|
+
labelTie: "Hampir sama",
|
|
43
|
+
labelNeedValidInputs: "Perlu data yang valid",
|
|
44
|
+
labelInvalidPrincipal:
|
|
45
|
+
"Jumlah pinjaman harus lebih dari nol dan lebih besar daripada biaya awal.",
|
|
46
|
+
labelInvalidTerm: "Gunakan jangka waktu bulat dari 1 sampai 600 bulan.",
|
|
47
|
+
labelInvalidFees: "Biaya tidak boleh negatif.",
|
|
48
|
+
labelInvalidPayment:
|
|
49
|
+
"Masukkan cicilan bulanan positif yang dapat melunasi dana bersih yang diterima.",
|
|
50
|
+
labelInvalidRate: "Gunakan suku bunga tahunan nominal dari 0% sampai 100%.",
|
|
51
|
+
labelNoComparison: "Lengkapi kedua penawaran untuk membandingkannya.",
|
|
52
|
+
labelTimeline: "Jadwal pembayaran",
|
|
53
|
+
labelStart: "Mulai",
|
|
54
|
+
labelMonthly: "Setiap bulan",
|
|
55
|
+
labelEnd: "Bulan terakhir",
|
|
56
|
+
labelFormula: "Cara kerja perbandingan",
|
|
57
|
+
labelFormulaText:
|
|
58
|
+
"Biaya tahunan efektif adalah suku bunga bulanan yang disetahunkan dan menyamakan dana diterima dengan pembayaran serta biaya yang didiskontokan.",
|
|
59
|
+
labelApproximation:
|
|
60
|
+
"Perkiraan mengasumsikan cicilan bulanan sama, tanpa masa tenggang, dan hanya biaya yang Anda masukkan. Ini bukan pengganti APR resmi pemberi pinjaman.",
|
|
61
|
+
labelScenarioSummary: "Ringkasan skenario",
|
|
62
|
+
currencyCode: "IDR",
|
|
63
|
+
currencyLocale: "id-ID",
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const faq = [
|
|
67
|
+
{
|
|
68
|
+
question: "Apa perbedaan suku bunga dan biaya tahunan efektif?",
|
|
69
|
+
answer:
|
|
70
|
+
"Suku bunga nominal menjelaskan bunga atas saldo. Biaya tahunan efektif juga memperhitungkan jumlah dan waktu biaya awal, bulanan, serta biaya akhir yang Anda masukkan.",
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
question: "Bisakah saya memasukkan cicilan bulanan, bukan suku bunga?",
|
|
74
|
+
answer:
|
|
75
|
+
"Bisa. Pilih cicilan bulanan yang diketahui untuk penawaran tersebut. Kalkulator memperkirakan suku bunga bulanan yang sesuai dengan dana diterima, arus pembayaran, dan biaya skenario.",
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
question: "Penawaran mana yang lebih murah?",
|
|
79
|
+
answer:
|
|
80
|
+
"Bandingkan biaya tahunan efektif terlebih dahulu, lalu periksa total pembayaran dan dana bersih yang diterima. Persentase lebih rendah tetap dapat menghasilkan total biaya lebih tinggi jika jangka waktu atau jumlahnya berbeda.",
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
question: "Apakah ini APR resmi dari pemberi pinjaman?",
|
|
84
|
+
answer:
|
|
85
|
+
"Bukan. Ini adalah perkiraan transparan berdasarkan masukan Anda. Pemberi pinjaman dan aturan setempat dapat memperlakukan pajak, asuransi, tanggal pembayaran, dan biaya lain secara berbeda.",
|
|
86
|
+
},
|
|
87
|
+
];
|
|
88
|
+
|
|
89
|
+
const howTo = [
|
|
90
|
+
{
|
|
91
|
+
name: "Masukkan jumlah dan jangka waktu",
|
|
92
|
+
text: "Tambahkan dana yang akan diterima dan jumlah cicilan bulanan untuk setiap penawaran.",
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
name: "Pilih data yang diketahui",
|
|
96
|
+
text: "Masukkan suku bunga tahunan nominal atau cicilan bulanan sesuai informasi penawaran.",
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: "Tambahkan semua biaya",
|
|
100
|
+
text: "Masukkan biaya awal, bulanan, dan akhir agar arus kas yang diuji lengkap.",
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: "Baca perbandingan",
|
|
104
|
+
text: "Gunakan biaya tahunan efektif, lalu periksa total pembayaran dan dana bersih sebelum memutuskan.",
|
|
105
|
+
},
|
|
106
|
+
];
|
|
107
|
+
|
|
108
|
+
const schemas = [
|
|
109
|
+
{
|
|
110
|
+
"@context": "https://schema.org",
|
|
111
|
+
"@type": "SoftwareApplication",
|
|
112
|
+
name: "Kalkulator skenario APR pinjaman",
|
|
113
|
+
description:
|
|
114
|
+
"Bandingkan dua skenario pinjaman dengan bunga, cicilan, dan biaya.",
|
|
115
|
+
applicationCategory: "FinanceApplication",
|
|
116
|
+
operatingSystem: "All",
|
|
117
|
+
offers: { "@type": "Offer", price: "0", priceCurrency: "IDR" },
|
|
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: "Membandingkan dua penawaran pinjaman",
|
|
132
|
+
description:
|
|
133
|
+
"Modelkan arus kas dua pinjaman dan bandingkan biaya tahunan efektifnya.",
|
|
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: "kalkulator-skenario-apr-pinjaman",
|
|
145
|
+
title: "Kalkulator skenario APR pinjaman",
|
|
146
|
+
description:
|
|
147
|
+
"Bandingkan dua penawaran pinjaman dengan bunga, jadwal pembayaran, dan biaya untuk memperkirakan biaya tahunan efektif.",
|
|
148
|
+
ui,
|
|
149
|
+
faq,
|
|
150
|
+
bibliography,
|
|
151
|
+
howTo,
|
|
152
|
+
schemas,
|
|
153
|
+
seo: [
|
|
154
|
+
{
|
|
155
|
+
type: "title",
|
|
156
|
+
text: "Bandingkan pinjaman berdasarkan biaya tahunan efektif",
|
|
157
|
+
level: 2,
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
type: "paragraph",
|
|
161
|
+
html: "<p>Suku bunga iklan yang rendah dapat menyembunyikan biaya administrasi, biaya layanan bulanan, atau biaya akhir. Kalkulator ini mengubah detail dua penawaran menjadi skenario arus kas yang sebanding agar Anda dapat melihat biaya dana yang benar-benar diterima.</p>",
|
|
162
|
+
},
|
|
163
|
+
{ type: "title", text: "Isi perkiraan", level: 3 },
|
|
164
|
+
{
|
|
165
|
+
type: "paragraph",
|
|
166
|
+
html: "<p>Untuk setiap penawaran, masukkan jumlah pinjaman, jangka waktu, suku bunga nominal atau cicilan bulanan, serta biaya pada waktu yang berbeda. Kalkulator mencari suku bunga bulanan yang menyeimbangkan dana bersih dengan pembayaran dan biaya yang didiskontokan, lalu menyetahunkannya.</p>",
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
type: "paragraph",
|
|
170
|
+
html: "<p>Dengan begitu, harga kredit tidak hanya dilihat dari bunganya. Hasilnya tetap merupakan perkiraan karena APR resmi dapat mengikuti aturan wilayah dan memasukkan asumsi yang tidak ada dalam skenario Anda.</p>",
|
|
171
|
+
},
|
|
172
|
+
{ type: "title", text: "Cara membaca hasil", level: 3 },
|
|
173
|
+
{
|
|
174
|
+
type: "list",
|
|
175
|
+
items: [
|
|
176
|
+
"Bandingkan biaya tahunan efektif saat jumlah dan jangka waktu serupa.",
|
|
177
|
+
"Periksa total pembayaran untuk memahami dampak uang sebenarnya.",
|
|
178
|
+
"Perhatikan dana yang diterima setelah biaya awal.",
|
|
179
|
+
"Gunakan jadwal untuk melihat kapan setiap biaya masuk.",
|
|
180
|
+
],
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
type: "tip",
|
|
184
|
+
title: "Gunakan dokumen pemberi pinjaman sebagai acuan akhir",
|
|
185
|
+
html: "<p>Untuk kontrak nyata, cocokkan APR resmi dengan asumsi yang sama. Tanyakan tentang asuransi, pajak, bunga variabel, biaya pelunasan lebih awal, dan biaya yang tidak tercakup.</p>",
|
|
186
|
+
},
|
|
187
|
+
{ type: "title", text: "Batasan perkiraan skenario", level: 3 },
|
|
188
|
+
{
|
|
189
|
+
type: "paragraph",
|
|
190
|
+
html: "<p>Tool ini mengasumsikan cicilan bulanan sama, tanpa masa tenggang, dan biaya pada awal, selama jangka waktu, atau bulan terakhir. Tool ini tidak memastikan kemampuan membayar, persetujuan, legalitas, atau APR resmi.</p>",
|
|
191
|
+
},
|
|
192
|
+
],
|
|
193
|
+
};
|