@jjlmoya/utils-finance 1.22.0 → 1.24.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 (37) hide show
  1. package/package.json +2 -2
  2. package/src/category/index.ts +2 -1
  3. package/src/entries.ts +4 -1
  4. package/src/index.ts +1 -0
  5. package/src/tests/locale_completeness.test.ts +2 -2
  6. package/src/tests/tool_validation.test.ts +2 -2
  7. package/src/tool/revolvingCardCalculator/bibliography.astro +14 -0
  8. package/src/tool/revolvingCardCalculator/bibliography.ts +24 -0
  9. package/src/tool/revolvingCardCalculator/component.astro +315 -0
  10. package/src/tool/revolvingCardCalculator/components/AmortizationTable.astro +57 -0
  11. package/src/tool/revolvingCardCalculator/components/CalculatorInputs.astro +117 -0
  12. package/src/tool/revolvingCardCalculator/components/ChartDisplay.astro +35 -0
  13. package/src/tool/revolvingCardCalculator/components/UsuryChecker.astro +32 -0
  14. package/src/tool/revolvingCardCalculator/constants.ts +36 -0
  15. package/src/tool/revolvingCardCalculator/entry.ts +31 -0
  16. package/src/tool/revolvingCardCalculator/i18n/de.ts +84 -0
  17. package/src/tool/revolvingCardCalculator/i18n/en.ts +322 -0
  18. package/src/tool/revolvingCardCalculator/i18n/es.ts +153 -0
  19. package/src/tool/revolvingCardCalculator/i18n/fr.ts +84 -0
  20. package/src/tool/revolvingCardCalculator/i18n/id.ts +84 -0
  21. package/src/tool/revolvingCardCalculator/i18n/it.ts +84 -0
  22. package/src/tool/revolvingCardCalculator/i18n/ja.ts +84 -0
  23. package/src/tool/revolvingCardCalculator/i18n/ko.ts +84 -0
  24. package/src/tool/revolvingCardCalculator/i18n/nl.ts +84 -0
  25. package/src/tool/revolvingCardCalculator/i18n/pl.ts +84 -0
  26. package/src/tool/revolvingCardCalculator/i18n/pt.ts +84 -0
  27. package/src/tool/revolvingCardCalculator/i18n/ru.ts +84 -0
  28. package/src/tool/revolvingCardCalculator/i18n/sv.ts +84 -0
  29. package/src/tool/revolvingCardCalculator/i18n/tr.ts +84 -0
  30. package/src/tool/revolvingCardCalculator/i18n/zh.ts +84 -0
  31. package/src/tool/revolvingCardCalculator/index.ts +10 -0
  32. package/src/tool/revolvingCardCalculator/logic.ts +237 -0
  33. package/src/tool/revolvingCardCalculator/revolving-card-calculator.css +564 -0
  34. package/src/tool/revolvingCardCalculator/seo.astro +15 -0
  35. package/src/tool/revolvingCardCalculator/types.ts +54 -0
  36. package/src/tool/revolvingCardCalculator/ui.ts +58 -0
  37. package/src/tools.ts +2 -1
@@ -0,0 +1,32 @@
1
+ ---
2
+ import type { RevolvingCardCalculatorUI } from '../ui';
3
+
4
+ interface Props {
5
+ ui: RevolvingCardCalculatorUI;
6
+ }
7
+
8
+ const { ui } = Astro.props;
9
+ ---
10
+
11
+ <div class="rev-usury-card">
12
+ <h3 class="rev-usury-title">{ui.usuryTitle}</h3>
13
+
14
+ <div class="rev-usury-status-container" id="rev-usury-status-badge">
15
+ <div class="rev-status-icon-box" id="rev-status-icon"></div>
16
+ <div>
17
+ <h4 class="rev-status-text" id="rev-usury-status-text">Safe</h4>
18
+ <p class="rev-status-description" id="rev-usury-status-desc"></p>
19
+ </div>
20
+ </div>
21
+
22
+ <div class="rev-usury-stats">
23
+ <div class="rev-usury-stat-item">
24
+ <span class="rev-usury-stat-label">{ui.usuryReferenceLabel}</span>
25
+ <span class="rev-usury-stat-value" id="rev-usury-ref-val">0.00%</span>
26
+ </div>
27
+ <div class="rev-usury-stat-item">
28
+ <span class="rev-usury-stat-label">{ui.usuryThresholdLabel}</span>
29
+ <span class="rev-usury-stat-value" id="rev-usury-threshold-val">0.00%</span>
30
+ </div>
31
+ </div>
32
+ </div>
@@ -0,0 +1,36 @@
1
+ export const CURRENCY_SYMBOLS: Record<string, string> = {
2
+ EUR: '\u20ac',
3
+ USD: '$',
4
+ GBP: '\u00a3',
5
+ JPY: '\u00a5',
6
+ KRW: '\u20a9',
7
+ CNY: '\u00a5',
8
+ BRL: 'R$',
9
+ MXN: '$',
10
+ PLN: 'z\u0142',
11
+ IDR: 'Rp',
12
+ TRY: '\u20ba',
13
+ RUB: '\u20bd',
14
+ SEK: 'kr',
15
+ AUD: 'A$',
16
+ CAD: 'C$',
17
+ };
18
+
19
+ export const MARKET_CURRENCY_MAP: Record<string, string> = {
20
+ es: 'EUR',
21
+ eu: 'EUR',
22
+ us: 'USD',
23
+ uk: 'GBP',
24
+ jp: 'JPY',
25
+ kr: 'KRW',
26
+ cn: 'CNY',
27
+ br: 'BRL',
28
+ mx: 'MXN',
29
+ pl: 'PLN',
30
+ id: 'IDR',
31
+ tr: 'TRY',
32
+ ru: 'RUB',
33
+ se: 'SEK',
34
+ au: 'AUD',
35
+ ca: 'CAD',
36
+ };
@@ -0,0 +1,31 @@
1
+ import type { FinanceToolEntry, ToolLocaleContent } from '../../types';
2
+ import type { RevolvingCardCalculatorUI } from './ui';
3
+
4
+ export type RevolvingCardCalculatorLocaleContent = ToolLocaleContent<RevolvingCardCalculatorUI>;
5
+
6
+ export const revolvingCardCalculator: FinanceToolEntry<RevolvingCardCalculatorUI> = {
7
+ id: 'calculadora-tarjeta-revolving',
8
+ icons: {
9
+ bg: 'mdi:credit-card-off-outline',
10
+ fg: 'mdi:alert-decagram-outline',
11
+ },
12
+ i18n: {
13
+ de: () => import('./i18n/de').then((m) => m.content),
14
+ en: () => import('./i18n/en').then((m) => m.content),
15
+ es: () => import('./i18n/es').then((m) => m.content),
16
+ fr: () => import('./i18n/fr').then((m) => m.content),
17
+ id: () => import('./i18n/id').then((m) => m.content),
18
+ it: () => import('./i18n/it').then((m) => m.content),
19
+ ja: () => import('./i18n/ja').then((m) => m.content),
20
+ ko: () => import('./i18n/ko').then((m) => m.content),
21
+ nl: () => import('./i18n/nl').then((m) => m.content),
22
+ pl: () => import('./i18n/pl').then((m) => m.content),
23
+ pt: () => import('./i18n/pt').then((m) => m.content),
24
+ ru: () => import('./i18n/ru').then((m) => m.content),
25
+ sv: () => import('./i18n/sv').then((m) => m.content),
26
+ tr: () => import('./i18n/tr').then((m) => m.content),
27
+ zh: () => import('./i18n/zh').then((m) => m.content),
28
+ },
29
+ };
30
+
31
+ export { bibliography } from './bibliography';
@@ -0,0 +1,84 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { ToolLocaleContent } from '../../../types';
4
+ import type { RevolvingCardCalculatorUI } from '../ui';
5
+
6
+ const slug = 'revolverkarten-rechner';
7
+ const title = 'Revolverkarten und Wucherrechner';
8
+ const description = 'Berechnen Sie Tilgungszeit und Zinskosten Ihrer Revolving-Kreditkarte. Prüfen Sie die Effektivzinsen auf Wucher-Grenzwerte.';
9
+
10
+ const faqData = [{ question: 'Was ist eine Revolving-Kreditkarte?', answer: 'Eine Revolving-Kreditkarte ermöglicht die flexible Rückzahlung in monatlichen Teilbeträgen.' }];
11
+ const howToData = [{ name: 'Markt wählen', text: 'Wählen Sie Ihr Land oder einen benutzerdefinierten Grenzwert.' }];
12
+
13
+ const faqSchema: WithContext<FAQPage> = { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: [] };
14
+ const howToSchema: WithContext<HowTo> = { '@context': 'https://schema.org', '@type': 'HowTo', name: title, step: [] };
15
+ const softwareSchema: WithContext<SoftwareApplication> = { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, applicationCategory: 'FinanceApplication', operatingSystem: 'All' };
16
+
17
+ export const content: ToolLocaleContent<RevolvingCardCalculatorUI> = {
18
+ slug,
19
+ title,
20
+ description,
21
+ faq: faqData,
22
+ howTo: howToData,
23
+ bibliography,
24
+ schemas: [faqSchema, howToSchema, softwareSchema],
25
+ seo: [{ type: 'title', text: 'Funktionsweise von Revolving-Kreditkarten' }, { type: 'paragraph', html: 'Eine Revolving-Kreditkarte ermöglicht die flexible Rückzahlung.' }],
26
+ ui: {
27
+ title: 'Revolving Kreditkarten & Wucherrechner',
28
+ balanceLabel: 'Offener Saldo',
29
+ creditLimitLabel: 'Kreditrahmen',
30
+ aprLabel: 'Effektiver Jahreszins (APR / TAE)',
31
+ paymentTypeLabel: 'Zahlungsart',
32
+ paymentTypeFixed: 'Feste monatliche Rate',
33
+ paymentTypePercentage: 'Prozentualer Saldo-Anteil',
34
+ paymentValueLabel: 'Ratenhöhe (Betrag oder %)',
35
+ minPaymentValueLabel: 'Mindestbetrag',
36
+ currencyLabel: 'Währung',
37
+ marketLabel: 'Regulierungsmarkt / Land',
38
+ marketES: 'Spanien (Banco de España + 6% Regel)',
39
+ marketUS: 'USA (CFPB-Referenz)',
40
+ marketUK: 'Großbritannien (FCA)',
41
+ marketEU: 'Europäische Union (EZB-Referenz)',
42
+ marketJP: 'Japan (FSA)',
43
+ marketKR: 'Südkorea (FSC)',
44
+ marketCN: 'China (PBOC)',
45
+ marketBR: 'Brasilien (Banco Central)',
46
+ marketMX: 'Mexiko (Banco de México)',
47
+ marketPL: 'Polen (KNF)',
48
+ marketID: 'Indonesien (OJK)',
49
+ marketTR: 'Türkei (BRSA)',
50
+ marketRU: 'Russland (Zentralbank)',
51
+ marketSE: 'Schweden (Finansinspektionen)',
52
+ marketAU: 'Australien (ASIC)',
53
+ marketCA: 'Kanada (FCAC)',
54
+ marketCustom: 'Benutzerdefinierter Grenzwert',
55
+ customThresholdLabel: 'Benutzerdefinierter Wuchergrenzwert (APR %)',
56
+
57
+ resultsTitle: 'Tilgungsergebnisse',
58
+ totalInterestLabel: 'Gesamtzinsen',
59
+ totalPaidLabel: 'Gesamtrückzahlung',
60
+ monthsToPayLabel: 'Tilgungsdauer',
61
+ infiniteDebtWarning: 'Ewige Schulden! Die Monatsrate deckt nicht die monatlichen Zinsen.',
62
+ payoffYearsLabel: 'Zeitplan der Tilgung',
63
+
64
+ usuryTitle: 'Wucher- & Konformitätsanalyse',
65
+ usurySafeStatus: 'Marktüblich (Niedriges Risiko)',
66
+ usuryWarningStatus: 'Hoher Zinssatz (Mittleres Risiko)',
67
+ usuryUsuriousStatus: 'Potenzieller Wucher (Hohes Risiko)',
68
+ usuryReferenceLabel: 'Durchschnittlicher Markt-APR',
69
+ usuryThresholdLabel: 'Wucher-Warnschwelle',
70
+
71
+ tableTitle: 'Monatlicher Tilgungsplan',
72
+ tableHeaderMonth: 'Monat',
73
+ tableHeaderInitial: 'Anfangssaldo',
74
+ tableHeaderInterest: 'Zinsen',
75
+ tableHeaderPrincipal: 'Tilgung',
76
+ tableHeaderPayment: 'Rate',
77
+ tableHeaderFinal: 'Endsaldo',
78
+
79
+ copyTooltip: 'Bericht in Zwischenablage kopieren',
80
+ copiedLabel: 'Bericht kopiert!',
81
+ currencySymbol: '€',
82
+ percentSymbol: '%',
83
+ },
84
+ };
@@ -0,0 +1,322 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { ToolLocaleContent } from '../../../types';
4
+ import type { RevolvingCardCalculatorUI } from '../ui';
5
+
6
+ const slug = 'revolving-card-calculator';
7
+ const title = 'Revolving Card and Usury Simulator: Calculate Payoff and Legality';
8
+ const description =
9
+ 'Simulate how revolving credit cards compound interest, calculate payoff timelines, and compare interest rates against usury thresholds in Spain, UK, US, and custom markets.';
10
+
11
+ const faqData = [
12
+ {
13
+ question: 'What is a revolving credit card?',
14
+ answer: 'A revolving credit card is a type of credit where you can borrow up to a certain credit limit, make purchases, and pay back a portion of the balance monthly. The remaining balance rolls over (revolves) to the next month, incurring high compound interest.',
15
+ },
16
+ {
17
+ question: 'How does the revolving effect make debt endless?',
18
+ answer: 'Because monthly payments are often set as a very low percentage of the outstanding balance (e.g., 2% or 3%), most of the payment goes toward paying off the monthly interest rather than the principal. This leads to extremely slow amortization, meaning the debt can take decades to clear.',
19
+ },
20
+ {
21
+ question: 'What is considered usury for revolving cards?',
22
+ answer: 'In Spain, the Supreme Court rules that a revolving card rate is usurious if its APR (TAE) is 6 percentage points or more above the average revolving credit rate published by the Banco de España at the time of contract. In other countries, usury thresholds vary or are regulated by state caps.',
23
+ },
24
+ {
25
+ question: 'Can I claim refund for a revolving card with usurious interest?',
26
+ answer: 'Yes, if a court declares the revolving contract null due to usury, the lender is typically required to return all amount paid in excess of the original principal borrowed. Check local legal guidelines or consult a consumer rights lawyer.',
27
+ },
28
+ ];
29
+
30
+ const howToData = [
31
+ {
32
+ name: 'Select your country or regulatory market',
33
+ text: 'Choose Spain, United States, United Kingdom, or Custom to apply specific usury threshold checks.',
34
+ },
35
+ {
36
+ name: 'Input your card parameters',
37
+ text: 'Enter your outstanding balance, credit limit, and APR (TAE).',
38
+ },
39
+ {
40
+ name: 'Define your payment strategy',
41
+ text: 'Select between a fixed monthly payment or a percentage of the outstanding balance with an absolute minimum fee.',
42
+ },
43
+ {
44
+ name: 'Analyze your payoff timeline and legality',
45
+ text: 'Examine the simulated monthly amortization table, look at the visual payoff timeline, and read the usury compliance status.',
46
+ },
47
+ ];
48
+
49
+ const faqSchema: WithContext<FAQPage> = {
50
+ '@context': 'https://schema.org',
51
+ '@type': 'FAQPage',
52
+ mainEntity: faqData.map((item) => ({
53
+ '@type': 'Question',
54
+ name: item.question,
55
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
56
+ })),
57
+ };
58
+
59
+ const howToSchema: WithContext<HowTo> = {
60
+ '@context': 'https://schema.org',
61
+ '@type': 'HowTo',
62
+ name: title,
63
+ description,
64
+ step: howToData.map((step, i) => ({
65
+ '@type': 'HowToStep',
66
+ position: i + 1,
67
+ name: step.name,
68
+ text: step.text,
69
+ })),
70
+ };
71
+
72
+ const appSchema: WithContext<SoftwareApplication> = {
73
+ '@context': 'https://schema.org',
74
+ '@type': 'SoftwareApplication',
75
+ name: title,
76
+ description,
77
+ applicationCategory: 'FinanceApplication',
78
+ operatingSystem: 'All',
79
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
80
+ inLanguage: 'en',
81
+ };
82
+
83
+ export const content: ToolLocaleContent<RevolvingCardCalculatorUI> = {
84
+ slug,
85
+ title,
86
+ description,
87
+ faq: faqData,
88
+ bibliography,
89
+ howTo: howToData,
90
+ schemas: [faqSchema, howToSchema, appSchema],
91
+ seo: [
92
+ {
93
+ type: 'title',
94
+ text: 'Revolving Credit Cards: The Anatomy of Compound Interest Debt',
95
+ level: 2,
96
+ },
97
+ {
98
+ type: 'paragraph',
99
+ html: 'A <strong>revolving credit card</strong> is one of the most common yet financially dangerous consumer debt vehicles in existence. Unlike a standard installment loan where you pay a fixed amount to extinguish the debt over a fixed timeframe, revolving lines of credit allow you to continuously borrow up to a predefined limit. While this offers high flexibility, it introduces a severe financial trap when users opt to pay only the minimum monthly amount requested by the bank.',
100
+ },
101
+ {
102
+ type: 'paragraph',
103
+ html: 'When a credit card statement balance is carried over to the next billing cycle, the interest rate is applied not to the original purchase, but to the remaining unpaid balance. Over time, interest charges themselves are capitalized, generating <strong>interest on top of interest</strong>. This phenomenon, known as compound interest, works in reverse for consumers, multiplying their liabilities instead of their assets.',
104
+ },
105
+ {
106
+ type: 'glossary',
107
+ items: [
108
+ {
109
+ term: 'Revolving Line of Credit',
110
+ definition: 'An open-ended credit facility that allows borrowers to draw down, repay, and redraw funds up to a set limit as long as payments are kept current.',
111
+ },
112
+ {
113
+ term: 'Negative Amortization',
114
+ definition: 'A situation where the monthly payment is smaller than the interest accrued during the same period, causing the total outstanding debt to grow rather than decrease.',
115
+ },
116
+ {
117
+ term: 'TAE (Tasa Anual Equivalente)',
118
+ definition: 'The Spanish equivalent of APR, representing the total cost of credit including interest, fees, commissions, and annual charges expressed as an annual percentage.',
119
+ },
120
+ {
121
+ term: 'Usury / Predatory Lending',
122
+ definition: 'The practice of lending money at unreasonably high rates of interest, often exceeding legal caps set by regional regulators or court precedents.',
123
+ },
124
+ ],
125
+ },
126
+ {
127
+ type: 'list',
128
+ items: [
129
+ '<strong>The minimum payment trap:</strong> Banks typically require a minimum payment of 2% to 5% of the total balance. If your balance is $5,000 and the APR is 25%, the first month interest alone is over $100. A minimum payment of $120 means only $20 goes to reducing the principal.',
130
+ '<strong>Continuous capitalization:</strong> Unpaid interest gets added to the principal balance at the end of every statement cycle. The next month, interest is calculated on this new, larger sum.',
131
+ '<strong>Unregulated rates:</strong> In many international jurisdictions, credit card interest rates are exempted from state usury caps, leading to APRs that exceed 30% or 40% for subprime borrowers.',
132
+ ],
133
+ },
134
+ {
135
+ type: 'title',
136
+ text: 'The Revolving Effect: Why Debt Feels Never-Ending',
137
+ level: 2,
138
+ },
139
+ {
140
+ type: 'paragraph',
141
+ html: 'To visualize the revolving card effect, consider how credit card debt amortizes. Because the minimum payment is set as a percentage of the outstanding balance, the absolute amount you pay drops every month as the balance gets smaller. While this might seem convenient, it slows down the payoff speed dramatically. In fact, if you only pay the minimum percentage, the payoff curve looks like an asymptotic line that never quite reaches zero.',
142
+ },
143
+ {
144
+ type: 'stats',
145
+ columns: 3,
146
+ items: [
147
+ {
148
+ value: '22.4%',
149
+ label: 'Average US Credit Card APR',
150
+ },
151
+ {
152
+ value: '24.0%',
153
+ label: 'Spanish Supreme Court Usury Threshold',
154
+ },
155
+ {
156
+ value: '30+ Years',
157
+ label: 'Payoff Time with Minimum Payments',
158
+ },
159
+ ],
160
+ },
161
+ {
162
+ type: 'tip',
163
+ title: 'Breaking the Revolving Loop',
164
+ html: '<p>The most effective strategy to escape revolving debt is to switch from a percentage-based minimum payment to a <strong>fixed monthly payment</strong> that is significantly higher than the minimum interest charge. For example, paying a flat $150/month instead of a shifting 2.5% minimum can reduce your payoff time from 28 years to under 4 years, saving thousands in interest charges.</p>',
165
+ },
166
+ {
167
+ type: 'card',
168
+ title: 'Case Study: The Math of a $3,000 Card Balance',
169
+ html: '<p>Let us analyze what happens to a $3,000 card balance with a 24% APR if you pay a minimum of 2.5% of the balance (minimum $30):</p><ul><li><strong>Initial Interest Charge:</strong> $60 in the first month.</li><li><strong>Total Interest Paid:</strong> Over $4,200 by the time the card is paid off.</li><li><strong>Total Time:</strong> 184 months (more than 15 years) of continuous monthly bills.</li><li><strong>Total Paid:</strong> $7,200 to clear a $3,000 purchase.</li></ul>',
170
+ },
171
+ {
172
+ type: 'title',
173
+ text: 'Usury Regulations and Interest Caps: Spain, US, UK, and Beyond',
174
+ level: 2,
175
+ },
176
+ {
177
+ type: 'paragraph',
178
+ html: 'Lending limits vary extensively by country. Understanding your regional rights is crucial to determining if you have been subjected to predatory lending or usurious conditions. Below is a comparative overview of how different jurisdictions regulate credit card APRs.',
179
+ },
180
+ {
181
+ type: 'table',
182
+ headers: ['Country/Market', 'Regulatory Body', 'Average Credit Card Rate', 'Usury Threshold Rule'],
183
+ rows: [
184
+ ['Spain', 'Banco de España', '18.0% - 19.5%', 'Usurious if APR exceeds the average rate by > 6 percentage points.'],
185
+ ['United States', 'CFPB / State Regulators', '21.0% - 22.5%', 'No federal cap. State caps apply, but national banks export deregulation rules.'],
186
+ ['United Kingdom', 'FCA (Financial Conduct Authority)', '21.5% - 23.0%', 'No hard cap on credit card APRs, but subject to strict affordability tests.'],
187
+ ['General Global', 'Central Banks', 'Varies by currency', 'Generally unregulated for credit cards, leaving users exposed to high rates.'],
188
+ ],
189
+ },
190
+ {
191
+ type: 'comparative',
192
+ columns: 2,
193
+ items: [
194
+ {
195
+ title: 'Spanish Usury Criterium',
196
+ description: 'Established by the Supreme Court (Sentencia 258/2023).',
197
+ points: [
198
+ 'Based on the official Banco de España statistical average table.',
199
+ 'A contract is null if interest is 6% above the average revolving rate.',
200
+ 'If null, the borrower only pays back the net principal borrowed.',
201
+ 'High level of consumer protection and legal recourse.',
202
+ ],
203
+ },
204
+ {
205
+ title: 'US/UK Deregulated Markets',
206
+ description: 'Regulated primarily by disclosures and competition.',
207
+ points: [
208
+ 'Very high rates permitted (often 29.99% or higher).',
209
+ 'No absolute legal cap based on market averages.',
210
+ 'Focuses on transparent disclosure of terms (Schumer Box).',
211
+ 'Relies on refinancing or consumer bankruptcy for relief.',
212
+ ],
213
+ },
214
+ ],
215
+ },
216
+ {
217
+ type: 'diagnostic',
218
+ variant: 'warning',
219
+ title: 'Is Your Credit Card Potentially Usurious?',
220
+ html: '<p>If your card APR (TAE) is <strong>24% or higher</strong> in Spain, there is a very high probability that the contract is null due to usury. In such cases, you can initiate a legal claim against the financial institution to demand a refund of all commissions, interest, and insurance fees paid throughout the life of the card.</p>',
221
+ },
222
+ {
223
+ type: 'title',
224
+ text: 'Pros and Cons of Revolving Credit Options',
225
+ level: 2,
226
+ },
227
+ {
228
+ type: 'paragraph',
229
+ html: 'While revolving credit is generally expensive, it can serve a purpose if managed with discipline. Understanding its pros and cons allows consumers to make better financing decisions.',
230
+ },
231
+ {
232
+ type: 'proscons',
233
+ items: [
234
+ {
235
+ pro: 'High liquidity and instant access to emergency funds without applying for separate loans.',
236
+ con: 'Extremely high interest rates compared to personal loans or mortgages.',
237
+ },
238
+ {
239
+ pro: 'Helps build credit score if statements are paid in full every single month.',
240
+ con: 'Encourages overspending due to low friction of transaction and small minimum payments.',
241
+ },
242
+ {
243
+ pro: 'Rewards programs, cash back, and purchase protection benefits.',
244
+ con: 'Risk of getting stuck in a cycle of debt that consumes monthly disposable income.',
245
+ },
246
+ ],
247
+ },
248
+ {
249
+ type: 'summary',
250
+ title: 'Key Takeaways for Managing Card Debt',
251
+ items: [
252
+ 'Always check the APR/TAE of any card before signing the agreement.',
253
+ 'Never pay only the minimum percentage. Set a fixed, aggressive monthly repayment.',
254
+ 'If your card interest rate is abnormally high, check if it violates usury guidelines or seek legal advice to claim a refund.',
255
+ 'Consider consolidating credit card debt into a lower-interest personal loan.',
256
+ ],
257
+ },
258
+ {
259
+ type: 'message',
260
+ title: 'Important Financial Notice',
261
+ html: '<p>This simulator is for educational and informational purposes only. It does not constitute formal legal or financial advice. If you suspect your credit agreement contains abusive clauses or usurious rates, we recommend consulting a legal professional specializing in consumer protection laws in your jurisdiction.</p>',
262
+ },
263
+ ],
264
+ ui: {
265
+ title: 'Revolving Card & Usury Calculator',
266
+ balanceLabel: 'Outstanding Balance',
267
+ creditLimitLabel: 'Credit Limit',
268
+ aprLabel: 'Interest Rate (APR / TAE)',
269
+ paymentTypeLabel: 'Payment Method',
270
+ paymentTypeFixed: 'Fixed Monthly Payment',
271
+ paymentTypePercentage: 'Percentage of Balance',
272
+ paymentValueLabel: 'Payment Value (Amount or %)',
273
+ minPaymentValueLabel: 'Minimum Monthly Payment',
274
+ currencyLabel: 'Currency',
275
+ marketLabel: 'Country / Regulatory Market',
276
+ marketES: 'Spain (Banco de España + 6% Rule)',
277
+ marketUS: 'United States (CFPB Reference)',
278
+ marketUK: 'United Kingdom (FCA)',
279
+ marketEU: 'European Union (ECB Reference)',
280
+ marketJP: 'Japan (FSA / Money Lending Act)',
281
+ marketKR: 'South Korea (FSC / Interest Limitation Act)',
282
+ marketCN: "China (People's Bank of China)",
283
+ marketBR: 'Brazil (Banco Central + Law 14.905/2024)',
284
+ marketMX: 'Mexico (Banco de México)',
285
+ marketPL: 'Poland (KNF / Civil Code)',
286
+ marketID: 'Indonesia (OJK)',
287
+ marketTR: 'Turkey (BRSA / BDDK)',
288
+ marketRU: 'Russia (Bank of Russia / FZ-353)',
289
+ marketSE: 'Sweden (Finansinspektionen)',
290
+ marketAU: 'Australia (ASIC / NCCP)',
291
+ marketCA: 'Canada (FCAC / Criminal Code)',
292
+ marketCustom: 'Custom Usury Limit',
293
+ customThresholdLabel: 'Custom Usury Limit (APR %)',
294
+
295
+ resultsTitle: 'Payoff Simulation Results',
296
+ totalInterestLabel: 'Total Interest Paid',
297
+ totalPaidLabel: 'Total Repayment',
298
+ monthsToPayLabel: 'Time to Pay Off',
299
+ infiniteDebtWarning: 'Debt is infinite! Payments are too low to cover monthly interest. You will never pay off this balance.',
300
+ payoffYearsLabel: 'Payoff Timeline',
301
+
302
+ usuryTitle: 'Usury & Compliance Analysis',
303
+ usurySafeStatus: 'Legally Standard (Low Risk)',
304
+ usuryWarningStatus: 'High Rate Warning (Medium Risk)',
305
+ usuryUsuriousStatus: 'Potentially Usurious (High Risk)',
306
+ usuryReferenceLabel: 'Market Average APR',
307
+ usuryThresholdLabel: 'Usury Warning Threshold',
308
+
309
+ tableTitle: 'Monthly Amortization Schedule',
310
+ tableHeaderMonth: 'Month',
311
+ tableHeaderInitial: 'Starting Balance',
312
+ tableHeaderInterest: 'Interest Charged',
313
+ tableHeaderPrincipal: 'Principal Repaid',
314
+ tableHeaderPayment: 'Payment Made',
315
+ tableHeaderFinal: 'Ending Balance',
316
+
317
+ copyTooltip: 'Copy Report to Clipboard',
318
+ copiedLabel: 'Report Copied!',
319
+ currencySymbol: '€',
320
+ percentSymbol: '%',
321
+ },
322
+ };
@@ -0,0 +1,153 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { ToolLocaleContent } from '../../../types';
4
+ import type { RevolvingCardCalculatorUI } from '../ui';
5
+
6
+ const slug = 'calculadora-tarjeta-revolving';
7
+ const title = 'Calculadora de Tarjetas Revolving y Comprobador de Usura';
8
+ const description =
9
+ 'Simula el tiempo y coste real de saldar tu deuda de tarjeta revolving. Analiza la TAE aplicada frente a los criterios jurisprudenciales sobre intereses usurarios.';
10
+
11
+ const faqData = [
12
+ {
13
+ question: '¿Qué es una tarjeta revolving?',
14
+ answer: 'Una tarjeta revolving es un crédito de pago aplazado en el que el cliente elige abonar una cuota mensual reducida. Los intereses devengados se capitalizan mes a mes.',
15
+ },
16
+ {
17
+ question: '¿Por qué la deuda de una revolving se vuelve infinita?',
18
+ answer: 'Al fijar cuotas mínimas muy bajas (ej. 2% del saldo), la mayor parte del pago cubre solo intereses y no amortiza capital.',
19
+ },
20
+ {
21
+ question: '¿Cuándo se considera usura una tarjeta revolving en España?',
22
+ answer: 'Según el Tribunal Supremo (STS 258/2023), es usuraria si la TAE supera el tipo medio de las tarjetas de crédito publicado por el Banco de España en más de 6 puntos porcentuales (~24%).',
23
+ },
24
+ ];
25
+
26
+ const howToData = [
27
+ {
28
+ name: 'Selecciona tu mercado o país',
29
+ text: 'Elige España, EE.UU., Reino Unido o Límite Personalizado.',
30
+ },
31
+ {
32
+ name: 'Introduce los datos de tu tarjeta',
33
+ text: 'Ingresa la deuda pendiente, el límite de crédito y la TAE.',
34
+ },
35
+ ];
36
+
37
+ const faqSchema: WithContext<FAQPage> = {
38
+ '@context': 'https://schema.org',
39
+ '@type': 'FAQPage',
40
+ mainEntity: faqData.map((item) => ({
41
+ '@type': 'Question',
42
+ name: item.question,
43
+ acceptedAnswer: {
44
+ '@type': 'Answer',
45
+ text: item.answer,
46
+ },
47
+ })),
48
+ };
49
+
50
+ const howToSchema: WithContext<HowTo> = {
51
+ '@context': 'https://schema.org',
52
+ '@type': 'HowTo',
53
+ name: title,
54
+ description,
55
+ step: howToData.map((item, index) => ({
56
+ '@type': 'HowToStep',
57
+ position: index + 1,
58
+ name: item.name,
59
+ text: item.text,
60
+ })),
61
+ };
62
+
63
+ const softwareSchema: WithContext<SoftwareApplication> = {
64
+ '@context': 'https://schema.org',
65
+ '@type': 'SoftwareApplication',
66
+ name: title,
67
+ description,
68
+ applicationCategory: 'FinanceApplication',
69
+ operatingSystem: 'All',
70
+ offers: {
71
+ '@type': 'Offer',
72
+ price: '0',
73
+ priceCurrency: 'EUR',
74
+ },
75
+ };
76
+
77
+ export const content: ToolLocaleContent<RevolvingCardCalculatorUI> = {
78
+ slug,
79
+ title,
80
+ description,
81
+ faq: faqData,
82
+ howTo: howToData,
83
+ bibliography,
84
+ schemas: [faqSchema, howToSchema, softwareSchema],
85
+ seo: [
86
+ {
87
+ type: 'title',
88
+ text: '¿Cómo funciona la trampa de las tarjetas revolving?',
89
+ },
90
+ {
91
+ type: 'paragraph',
92
+ html: 'Una tarjeta revolving es un crédito de pago aplazado en el que el cliente elige abonar una cuota mensual reducida (fija o porcentual). A diferencia de una tarjeta de crédito convencional, los intereses devengados se recapitalizan mes a mes.',
93
+ },
94
+ ],
95
+ ui: {
96
+ title: 'Simulador Revolving y Comprobador de Usura',
97
+ balanceLabel: 'Deuda Pendiente',
98
+ creditLimitLabel: 'Límite de Crédito',
99
+ aprLabel: 'Tipo de Interés (TIN / TAE)',
100
+ paymentTypeLabel: 'Modalidad de Pago',
101
+ paymentTypeFixed: 'Cuota Fija Mensual',
102
+ paymentTypePercentage: 'Porcentaje sobre Saldo',
103
+ paymentValueLabel: 'Valor del Pago (Importe o %)',
104
+ minPaymentValueLabel: 'Pago Mínimo Permitido',
105
+ currencyLabel: 'Moneda',
106
+ marketLabel: 'Mercado Regulatorio / País',
107
+ marketES: 'España (Banco de España + Regla del 6%)',
108
+ marketUS: 'Estados Unidos (Referencia CFPB)',
109
+ marketUK: 'Reino Unido (FCA)',
110
+ marketEU: 'Unión Europea (Referencia BCE)',
111
+ marketJP: 'Japón (FSA / Ley de Préstamos)',
112
+ marketKR: 'Corea del Sur (FSC / Limitación de Interés)',
113
+ marketCN: 'China (Banco Popular de China)',
114
+ marketBR: 'Brasil (Banco Central + Ley 14.905/2024)',
115
+ marketMX: 'México (Banco de México)',
116
+ marketPL: 'Polonia (KNF / Código Civil)',
117
+ marketID: 'Indonesia (OJK)',
118
+ marketTR: 'Turquía (BRSA / BDDK)',
119
+ marketRU: 'Rusia (Banco de Rusia / FZ-353)',
120
+ marketSE: 'Suecia (Finansinspektionen)',
121
+ marketAU: 'Australia (ASIC / NCCP)',
122
+ marketCA: 'Canadá (FCAC / Código Penal)',
123
+ marketCustom: 'Límite Personalizado',
124
+ customThresholdLabel: 'Límite de Usura Personalizado (TAE %)',
125
+
126
+ resultsTitle: 'Resultados de Amortización',
127
+ totalInterestLabel: 'Intereses Totales Pagados',
128
+ totalPaidLabel: 'Total a Reembolsar',
129
+ monthsToPayLabel: 'Plazo para Saldar',
130
+ infiniteDebtWarning: '¡Deuda perpetua! El pago no cubre los intereses mensuales. No saldarás esta deuda jamás con esta cuota.',
131
+ payoffYearsLabel: 'Línea Temporal de Pago',
132
+
133
+ usuryTitle: 'Análisis de Usura y Legalidad',
134
+ usurySafeStatus: 'Rango Estándar (Riesgo Bajo)',
135
+ usuryWarningStatus: 'Interés Elevado (Riesgo Medio)',
136
+ usuryUsuriousStatus: 'Potencialmente Usurario (Riesgo Alto)',
137
+ usuryReferenceLabel: 'TAE Media del Mercado',
138
+ usuryThresholdLabel: 'Umbral Alerta de Usura',
139
+
140
+ tableTitle: 'Tabla de Amortización Mensual',
141
+ tableHeaderMonth: 'Mes',
142
+ tableHeaderInitial: 'Saldo Inicial',
143
+ tableHeaderInterest: 'Intereses',
144
+ tableHeaderPrincipal: 'Capital Amortizado',
145
+ tableHeaderPayment: 'Cuota Pagada',
146
+ tableHeaderFinal: 'Saldo Final',
147
+
148
+ copyTooltip: 'Copiar Informe al Portapapeles',
149
+ copiedLabel: '¡Informe Copiado!',
150
+ currencySymbol: '€',
151
+ percentSymbol: '%',
152
+ },
153
+ };