@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: "Offer A",
7
+ labelScenarioB: "Offer B",
8
+ labelScenarioName: "Offer name",
9
+ labelCurrency: "Currency",
10
+ labelApproximateRates:
11
+ "Uses approximate planning factors, not live exchange rates.",
12
+ labelPrincipal: "Amount borrowed",
13
+ labelTerm: "Repayment term",
14
+ labelMonths: "months",
15
+ labelInputBasis: "What do you know?",
16
+ labelAnnualRate: "Nominal annual rate",
17
+ labelMonthlyPayment: "Known monthly payment",
18
+ labelUpfrontFees: "Upfront fees",
19
+ labelMonthlyFees: "Monthly fees",
20
+ labelFinalFees: "Final fee",
21
+ labelOfferNameA: "Offer A",
22
+ labelOfferNameB: "Offer B",
23
+ labelRateMode: "I know the rate",
24
+ labelPaymentMode: "I know the payment",
25
+ labelPreset: "Start with a comparison",
26
+ labelPresetBalanced: "Balanced offers",
27
+ labelPresetLowFee: "Low rate with fees",
28
+ labelPresetLongTerm: "Longer term",
29
+ labelReset: "Reset values",
30
+ labelCopy: "Copy comparison",
31
+ labelCopied: "Comparison copied",
32
+ labelEffectiveApr: "Effective annual cost",
33
+ labelNominalRate: "Nominal rate",
34
+ labelMonthlyPaymentResult: "Monthly payment",
35
+ labelTotalPaid: "Total paid",
36
+ labelTotalFees: "Fees in the scenario",
37
+ labelFinanceCost: "Cost above principal",
38
+ labelNetCashReceived: "Cash received after upfront fees",
39
+ labelWinner: "Which offer costs less?",
40
+ labelLowerCost: "Lower effective cost",
41
+ labelHigherCost: "Higher effective cost",
42
+ labelTie: "Nearly tied",
43
+ labelNeedValidInputs: "Needs valid inputs",
44
+ labelInvalidPrincipal:
45
+ "The amount borrowed must be greater than the upfront fees and above zero.",
46
+ labelInvalidTerm: "Use a whole repayment term from 1 to 600 months.",
47
+ labelInvalidFees: "Fees cannot be negative.",
48
+ labelInvalidPayment:
49
+ "Enter a positive monthly payment that can repay the net cash received.",
50
+ labelInvalidRate: "Use a nominal annual rate from 0% to 100%.",
51
+ labelNoComparison: "Complete both offers to compare them.",
52
+ labelTimeline: "Payment timeline",
53
+ labelStart: "Start",
54
+ labelMonthly: "Each month",
55
+ labelEnd: "Final month",
56
+ labelFormula: "How the comparison works",
57
+ labelFormulaText:
58
+ "The effective annual cost is the annualised monthly rate that makes the cash received equal to the discounted payments and fees.",
59
+ labelApproximation:
60
+ "Estimate assumes equal monthly payments, no grace period and only the fees you enter. It does not replace the APR or TAE in a lender disclosure.",
61
+ labelScenarioSummary: "Scenario summary",
62
+ currencyCode: "USD",
63
+ currencyLocale: "en-US",
64
+ };
65
+
66
+ const faq = [
67
+ {
68
+ question:
69
+ "What is the difference between the interest rate and the effective annual cost?",
70
+ answer:
71
+ "The nominal interest rate describes the interest charged on the balance. The effective annual cost in this calculator also reflects the timing and amount of the upfront, monthly and final fees you enter.",
72
+ },
73
+ {
74
+ question: "Can I enter a monthly payment instead of an interest rate?",
75
+ answer:
76
+ "Yes. Choose the known monthly payment option for that offer. The calculator infers the monthly rate that matches the amount received, the payment stream and the fees in the scenario.",
77
+ },
78
+ {
79
+ question: "Which offer is cheaper?",
80
+ answer:
81
+ "Compare the effective annual cost first, then review total paid and cash received. A lower percentage can still have a higher total cost when the term or amount differs, so the decision should use all three signals.",
82
+ },
83
+ {
84
+ question: "Is this the official APR or TAE from a lender?",
85
+ answer:
86
+ "No. It is a transparent scenario estimate based on your inputs. Lenders and jurisdictions may include or exclude costs differently and may use different payment dates, taxes, insurance or variable-rate assumptions.",
87
+ },
88
+ ];
89
+
90
+ const howTo = [
91
+ {
92
+ name: "Enter the amount and term",
93
+ text: "Add the amount you would receive and the number of monthly repayments for each offer.",
94
+ },
95
+ {
96
+ name: "Choose the known offer detail",
97
+ text: "Enter either the nominal annual rate or the monthly payment, depending on what the offer gives you.",
98
+ },
99
+ {
100
+ name: "Add every relevant fee",
101
+ text: "Enter fees paid at the start, each month or at the end so the comparison reflects the cash flow you want to test.",
102
+ },
103
+ {
104
+ name: "Read the cost scanner",
105
+ text: "Use effective annual cost to compare pricing, then check total paid and net cash received before deciding which offer fits your question.",
106
+ },
107
+ ];
108
+
109
+ const schemas = [
110
+ {
111
+ "@context": "https://schema.org",
112
+ "@type": "SoftwareApplication",
113
+ name: "Loan APR scenario calculator",
114
+ description:
115
+ "Compare two loan scenarios with rates, payments and fees using a transparent effective annual cost estimate.",
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: "Compare two loan offers with rates and fees",
133
+ description:
134
+ "Use the calculator to model two loan cash flows and compare their effective annual cost.",
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: "loan-apr-scenario-calculator",
146
+ title: "Loan APR scenario calculator",
147
+ description:
148
+ "Compare two loan offers with their interest, payment schedule and fees to estimate the effective annual cost before you decide.",
149
+ ui,
150
+ faq,
151
+ bibliography,
152
+ howTo,
153
+ schemas,
154
+ seo: [
155
+ {
156
+ type: "title",
157
+ text: "Compare loan offers by effective annual cost",
158
+ level: 2,
159
+ },
160
+ {
161
+ type: "paragraph",
162
+ html: "<p>A low advertised interest rate can hide an arrangement fee, a monthly service charge or a final cost. This loan APR scenario calculator turns the details you have into two comparable cash flow scenarios, so you can see the cost of the money you actually receive.</p>",
163
+ },
164
+ { type: "title", text: "What the estimate includes", level: 3 },
165
+ {
166
+ type: "paragraph",
167
+ html: "<p>For each offer, enter the amount borrowed, the repayment term, either the nominal annual rate or the known monthly payment, and the fees charged at different points in the loan. The calculator finds the monthly rate that balances the net cash received against the discounted payments and fees, then annualises it.</p>",
168
+ },
169
+ {
170
+ type: "paragraph",
171
+ html: "<p>This mirrors the useful comparison principle behind APR and TAE: the price of credit is broader than the interest rate alone. The result is deliberately labelled an estimate because official disclosures may follow jurisdiction-specific rules and include assumptions that are not present in your scenario.</p>",
172
+ },
173
+ { type: "title", text: "How to read the result", level: 3 },
174
+ {
175
+ type: "list",
176
+ items: [
177
+ "Compare effective annual cost when the amount and term are alike.",
178
+ "Check total paid to understand the absolute cash impact.",
179
+ "Check cash received after upfront fees so a fee is not mistaken for borrowed money.",
180
+ "Use the timeline to see when each cost enters the scenario.",
181
+ ],
182
+ },
183
+ {
184
+ type: "tip",
185
+ title: "Use the lender disclosure as the final reference",
186
+ html: "<p>If you are comparing a real contract, match the lender's APR or TAE against the same assumptions. Ask about insurance, taxes, variable rates, early repayment charges and any fee that is not represented by your inputs.</p>",
187
+ },
188
+ { type: "title", text: "Limits of a scenario estimate", level: 3 },
189
+ {
190
+ type: "paragraph",
191
+ html: "<p>This tool assumes equal monthly payments, no grace period and fees that you can place at the start, during the term or in the final month. It does not certify affordability, approval, legality or the official APR of a product. Use it to make a better comparison from the information you have, then verify the offer documents.</p>",
192
+ },
193
+ ],
194
+ };
@@ -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
+ };