@jjlmoya/utils-finance 1.30.0 → 1.31.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 (211) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/fr.ts +159 -159
  3. package/src/category/i18n/ru.ts +158 -158
  4. package/src/category/index.ts +39 -38
  5. package/src/category/seo.astro +1 -1
  6. package/src/components/PreviewNavSidebar.astro +1 -1
  7. package/src/components/PreviewToolbar.astro +1 -1
  8. package/src/data.ts +1 -1
  9. package/src/entries.ts +4 -1
  10. package/src/env.d.ts +1 -1
  11. package/src/index.ts +1 -0
  12. package/src/layouts/PreviewLayout.astro +113 -113
  13. package/src/pages/index.astro +1 -1
  14. package/src/tests/bibliography_wellformed_export.test.ts +46 -0
  15. package/src/tests/faq_count.test.ts +1 -1
  16. package/src/tests/locale_completeness.test.ts +2 -2
  17. package/src/tests/mocks/astro_mock.js +1 -1
  18. package/src/tests/no_h1_in_components.test.ts +1 -1
  19. package/src/tests/script_density.test.ts +94 -94
  20. package/src/tests/seo_length.test.ts +23 -23
  21. package/src/tests/seo_translation_completeness.test.ts +69 -0
  22. package/src/tests/seo_wellformed_export.test.ts +65 -0
  23. package/src/tests/tool_validation.test.ts +17 -17
  24. package/src/tool/compoundInterest/compound-interest-calculator.css +236 -236
  25. package/src/tool/compoundInterest/entry.ts +32 -32
  26. package/src/tool/compoundInterest/i18n/de.ts +195 -195
  27. package/src/tool/compoundInterest/i18n/fr.ts +195 -195
  28. package/src/tool/compoundInterest/i18n/it.ts +195 -195
  29. package/src/tool/compoundInterest/i18n/pl.ts +194 -194
  30. package/src/tool/compoundInterest/i18n/ru.ts +195 -195
  31. package/src/tool/compoundInterest/i18n/tr.ts +195 -195
  32. package/src/tool/compoundInterest/i18n/zh.ts +189 -189
  33. package/src/tool/compoundInterest/seo.astro +15 -15
  34. package/src/tool/courtFeeCalculator/i18n/it.ts +158 -158
  35. package/src/tool/courtFeeCalculator/i18n/ru.ts +158 -158
  36. package/src/tool/courtFeeCalculator/i18n/tr.ts +158 -158
  37. package/src/tool/courtFeeCalculator/seo.astro +15 -15
  38. package/src/tool/courtFeeCalculator/spanish-court-fees-calculator.css +197 -197
  39. package/src/tool/debtSnowball/bibliography.ts +12 -12
  40. package/src/tool/debtSnowball/i18n/de.ts +16 -16
  41. package/src/tool/debtSnowball/i18n/id.ts +16 -16
  42. package/src/tool/debtSnowball/i18n/it.ts +168 -168
  43. package/src/tool/debtSnowball/i18n/nl.ts +16 -16
  44. package/src/tool/debtSnowball/i18n/pl.ts +168 -168
  45. package/src/tool/debtSnowball/i18n/pt.ts +1 -1
  46. package/src/tool/debtSnowball/i18n/ru.ts +1 -1
  47. package/src/tool/debtSnowball/i18n/sv.ts +22 -29
  48. package/src/tool/debtSnowball/i18n/tr.ts +168 -168
  49. package/src/tool/debtSnowball/i18n/zh.ts +168 -168
  50. package/src/tool/debtSnowball/seo.astro +15 -15
  51. package/src/tool/dividendYield/bibliography.astro +14 -0
  52. package/src/tool/dividendYield/bibliography.ts +12 -0
  53. package/src/tool/dividendYield/component.astro +83 -0
  54. package/src/tool/dividendYield/controller.ts +85 -0
  55. package/src/tool/dividendYield/dividend-yield-calculator.css +352 -0
  56. package/src/tool/dividendYield/dom-views.ts +58 -0
  57. package/src/tool/dividendYield/entry.ts +29 -0
  58. package/src/tool/dividendYield/evaluator.ts +16 -0
  59. package/src/tool/dividendYield/i18n/de.ts +53 -0
  60. package/src/tool/dividendYield/i18n/en.ts +138 -0
  61. package/src/tool/dividendYield/i18n/es.ts +49 -0
  62. package/src/tool/dividendYield/i18n/fr.ts +49 -0
  63. package/src/tool/dividendYield/i18n/id.ts +49 -0
  64. package/src/tool/dividendYield/i18n/it.ts +49 -0
  65. package/src/tool/dividendYield/i18n/ja.ts +49 -0
  66. package/src/tool/dividendYield/i18n/ko.ts +25 -0
  67. package/src/tool/dividendYield/i18n/nl.ts +25 -0
  68. package/src/tool/dividendYield/i18n/pl.ts +25 -0
  69. package/src/tool/dividendYield/i18n/pt.ts +25 -0
  70. package/src/tool/dividendYield/i18n/ru.ts +25 -0
  71. package/src/tool/dividendYield/i18n/sv.ts +25 -0
  72. package/src/tool/dividendYield/i18n/tr.ts +25 -0
  73. package/src/tool/dividendYield/i18n/zh.ts +25 -0
  74. package/src/tool/dividendYield/index.ts +11 -0
  75. package/src/tool/dividendYield/logic.test.ts +73 -0
  76. package/src/tool/dividendYield/logic.ts +55 -0
  77. package/src/tool/dividendYield/seo.astro +14 -0
  78. package/src/tool/dividendYield/storage.ts +24 -0
  79. package/src/tool/dividendYield/ui.ts +33 -0
  80. package/src/tool/financialFreedom/financial-freedom-calculator.css +311 -311
  81. package/src/tool/financialFreedom/i18n/en.ts +182 -182
  82. package/src/tool/financialFreedom/i18n/fr.ts +128 -128
  83. package/src/tool/financialFreedom/i18n/id.ts +24 -7
  84. package/src/tool/financialFreedom/i18n/it.ts +24 -7
  85. package/src/tool/financialFreedom/i18n/ja.ts +1 -1
  86. package/src/tool/financialFreedom/i18n/nl.ts +24 -7
  87. package/src/tool/financialFreedom/i18n/pl.ts +24 -7
  88. package/src/tool/financialFreedom/i18n/pt.ts +24 -7
  89. package/src/tool/financialFreedom/i18n/ru.ts +128 -128
  90. package/src/tool/financialFreedom/i18n/sv.ts +1 -1
  91. package/src/tool/financialFreedom/i18n/tr.ts +2 -2
  92. package/src/tool/financialFreedom/i18n/zh.ts +128 -128
  93. package/src/tool/fireCalculator/i18n/it.ts +241 -241
  94. package/src/tool/fireCalculator/i18n/ru.ts +241 -241
  95. package/src/tool/fireCalculator/i18n/tr.ts +241 -241
  96. package/src/tool/fireCalculator/i18n/zh.ts +241 -241
  97. package/src/tool/fireCalculator/seo.astro +15 -15
  98. package/src/tool/ibanBicSwiftConverter/i18n/fr.ts +151 -151
  99. package/src/tool/ibanBicSwiftConverter/i18n/it.ts +118 -118
  100. package/src/tool/ibanBicSwiftConverter/i18n/ru.ts +118 -118
  101. package/src/tool/ibanBicSwiftConverter/i18n/tr.ts +118 -118
  102. package/src/tool/ibanBicSwiftConverter/iban-to-bic-swift-converter.css +366 -366
  103. package/src/tool/ibanBicSwiftConverter/seo.astro +15 -15
  104. package/src/tool/inflation/bibliography.ts +20 -20
  105. package/src/tool/inflation/entry.ts +32 -32
  106. package/src/tool/inflation/i18n/de.ts +284 -284
  107. package/src/tool/inflation/i18n/fr.ts +284 -284
  108. package/src/tool/inflation/i18n/it.ts +284 -284
  109. package/src/tool/inflation/i18n/nl.ts +284 -284
  110. package/src/tool/inflation/i18n/pl.ts +284 -284
  111. package/src/tool/inflation/i18n/pt.ts +284 -284
  112. package/src/tool/inflation/i18n/ru.ts +284 -284
  113. package/src/tool/inflation/i18n/sv.ts +284 -284
  114. package/src/tool/inflation/i18n/tr.ts +284 -284
  115. package/src/tool/inflation/i18n/zh.ts +284 -284
  116. package/src/tool/inflation/seo.astro +15 -15
  117. package/src/tool/lateInterest/bibliography.ts +16 -16
  118. package/src/tool/lateInterest/entry.ts +32 -32
  119. package/src/tool/lateInterest/i18n/de.ts +213 -213
  120. package/src/tool/lateInterest/i18n/es.ts +213 -213
  121. package/src/tool/lateInterest/i18n/it.ts +213 -213
  122. package/src/tool/lateInterest/i18n/nl.ts +213 -213
  123. package/src/tool/lateInterest/i18n/pl.ts +213 -213
  124. package/src/tool/lateInterest/i18n/pt.ts +213 -213
  125. package/src/tool/lateInterest/i18n/ru.ts +213 -213
  126. package/src/tool/lateInterest/i18n/sv.ts +213 -213
  127. package/src/tool/lateInterest/i18n/tr.ts +213 -213
  128. package/src/tool/lateInterest/i18n/zh.ts +213 -213
  129. package/src/tool/lateInterest/seo.astro +15 -15
  130. package/src/tool/legalInterestRate/i18n/it.ts +129 -129
  131. package/src/tool/legalInterestRate/i18n/ru.ts +129 -129
  132. package/src/tool/legalInterestRate/i18n/tr.ts +128 -121
  133. package/src/tool/legalInterestRate/i18n/zh.ts +11 -4
  134. package/src/tool/legalInterestRate/seo.astro +15 -15
  135. package/src/tool/lotteryOptimizer/i18n/it.ts +163 -163
  136. package/src/tool/lotteryOptimizer/i18n/pl.ts +163 -163
  137. package/src/tool/lotteryOptimizer/i18n/ru.ts +163 -163
  138. package/src/tool/lotteryOptimizer/i18n/tr.ts +163 -163
  139. package/src/tool/lotteryOptimizer/i18n/zh.ts +162 -155
  140. package/src/tool/lotteryOptimizer/seo.astro +15 -15
  141. package/src/tool/mortgage/bibliography.ts +20 -20
  142. package/src/tool/mortgage/entry.ts +32 -32
  143. package/src/tool/mortgage/i18n/de.ts +210 -210
  144. package/src/tool/mortgage/i18n/es.ts +210 -210
  145. package/src/tool/mortgage/i18n/fr.ts +210 -210
  146. package/src/tool/mortgage/i18n/id.ts +210 -210
  147. package/src/tool/mortgage/i18n/it.ts +210 -210
  148. package/src/tool/mortgage/i18n/nl.ts +210 -210
  149. package/src/tool/mortgage/i18n/pl.ts +210 -210
  150. package/src/tool/mortgage/i18n/ru.ts +210 -210
  151. package/src/tool/mortgage/i18n/tr.ts +210 -210
  152. package/src/tool/mortgage/i18n/zh.ts +210 -210
  153. package/src/tool/mortgage/mortgage-calculator.css +595 -595
  154. package/src/tool/mortgage/seo.astro +15 -15
  155. package/src/tool/percentageCalculator/bibliography.ts +16 -16
  156. package/src/tool/percentageCalculator/entry.ts +32 -32
  157. package/src/tool/percentageCalculator/i18n/de.ts +220 -220
  158. package/src/tool/percentageCalculator/i18n/en.ts +220 -220
  159. package/src/tool/percentageCalculator/i18n/es.ts +220 -220
  160. package/src/tool/percentageCalculator/i18n/fr.ts +220 -220
  161. package/src/tool/percentageCalculator/i18n/it.ts +220 -220
  162. package/src/tool/percentageCalculator/i18n/pl.ts +220 -220
  163. package/src/tool/percentageCalculator/i18n/ru.ts +220 -220
  164. package/src/tool/percentageCalculator/i18n/tr.ts +220 -220
  165. package/src/tool/percentageCalculator/i18n/zh.ts +220 -220
  166. package/src/tool/percentageCalculator/seo.astro +15 -15
  167. package/src/tool/profitability/i18n/de.ts +24 -7
  168. package/src/tool/profitability/i18n/fr.ts +121 -104
  169. package/src/tool/profitability/i18n/id.ts +2 -2
  170. package/src/tool/profitability/i18n/it.ts +24 -7
  171. package/src/tool/profitability/i18n/ja.ts +1 -1
  172. package/src/tool/profitability/i18n/nl.ts +24 -7
  173. package/src/tool/profitability/i18n/pl.ts +1 -1
  174. package/src/tool/profitability/i18n/pt.ts +24 -7
  175. package/src/tool/profitability/i18n/ru.ts +118 -118
  176. package/src/tool/profitability/i18n/sv.ts +1 -1
  177. package/src/tool/profitability/i18n/tr.ts +1 -1
  178. package/src/tool/profitability/i18n/zh.ts +118 -118
  179. package/src/tool/profitability/profitability-calculator.css +229 -229
  180. package/src/tool/rentIncreaseCalculator/i18n/it.ts +125 -125
  181. package/src/tool/rentIncreaseCalculator/i18n/tr.ts +125 -125
  182. package/src/tool/rentIncreaseCalculator/rent-increase-calculator.css +326 -326
  183. package/src/tool/rentIncreaseCalculator/seo.astro +15 -15
  184. package/src/tool/revolvingCardCalculator/i18n/de.ts +38 -20
  185. package/src/tool/revolvingCardCalculator/i18n/es.ts +19 -18
  186. package/src/tool/revolvingCardCalculator/i18n/fr.ts +32 -28
  187. package/src/tool/revolvingCardCalculator/i18n/id.ts +18 -18
  188. package/src/tool/revolvingCardCalculator/i18n/it.ts +18 -18
  189. package/src/tool/revolvingCardCalculator/i18n/ja.ts +2 -2
  190. package/src/tool/revolvingCardCalculator/i18n/ko.ts +2 -2
  191. package/src/tool/revolvingCardCalculator/i18n/nl.ts +22 -19
  192. package/src/tool/revolvingCardCalculator/i18n/pl.ts +2 -2
  193. package/src/tool/revolvingCardCalculator/i18n/pt.ts +2 -2
  194. package/src/tool/revolvingCardCalculator/i18n/ru.ts +2 -2
  195. package/src/tool/revolvingCardCalculator/i18n/sv.ts +2 -2
  196. package/src/tool/revolvingCardCalculator/i18n/tr.ts +2 -2
  197. package/src/tool/revolvingCardCalculator/i18n/zh.ts +6 -6
  198. package/src/tool/salaryEmployerCost/i18n/de.ts +10 -10
  199. package/src/tool/salaryEmployerCost/i18n/fr.ts +9 -9
  200. package/src/tool/salaryEmployerCost/i18n/id.ts +9 -9
  201. package/src/tool/salaryEmployerCost/i18n/it.ts +9 -9
  202. package/src/tool/salaryEmployerCost/i18n/ja.ts +1 -1
  203. package/src/tool/salaryEmployerCost/i18n/ko.ts +1 -1
  204. package/src/tool/salaryEmployerCost/i18n/nl.ts +2 -2
  205. package/src/tool/salaryEmployerCost/i18n/pl.ts +2 -2
  206. package/src/tool/salaryEmployerCost/i18n/pt.ts +2 -2
  207. package/src/tool/salaryEmployerCost/i18n/ru.ts +2 -2
  208. package/src/tool/salaryEmployerCost/i18n/sv.ts +2 -2
  209. package/src/tool/salaryEmployerCost/i18n/tr.ts +2 -2
  210. package/src/tool/salaryEmployerCost/i18n/zh.ts +2 -2
  211. package/src/tools.ts +2 -1
@@ -1,220 +1,220 @@
1
- import { bibliography } from '../bibliography'
2
- import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
- import type { ToolLocaleContent } from '../../../types';
4
- import type { PercentageCalculatorUI } from '../ui';
5
-
6
- const slug = 'calculadora-porcentajes';
7
- const title = 'Calculadora de Porcentajes 4 en 1: Descuentos, Subidas y Rebajas';
8
- const description =
9
- 'Calcula fácilmente porcentajes online gratis. 4 herramientas en 1 para sacar el X% de Y, diferencia porcentual, sumar o restar IVA, rebajas y propinas automáticas.';
10
-
11
- const faqData = [
12
- {
13
- question: '¿Cómo funciona la calculadora?',
14
- answer:
15
- 'Simplemente escribe los valores en los cuadros del caso de uso correspondiente a tu problema y nuestra calculadora procesa la fórmula sin necesidad de apretar ningún botón de calcular.',
16
- },
17
- {
18
- question: '¿Es válida para calcular el IVA o impuestos?',
19
- answer:
20
- 'Sí, el bloque 4 (\'Sumar o restar porcentaje\') está diseñado precisamente para casos como aplicar un IVA del 21% a un precio base o calcular un IRPF negativo.',
21
- },
22
- {
23
- question: '¿Maneja números decimales y negativos?',
24
- answer:
25
- 'Por supuesto. Puedes introducir números decimales (utilizando punto) y también funcionará con valores negativos si necesitas analizar balances contables en pérdidas.',
26
- },
27
- {
28
- question: '¿Puedo copiar los resultados?',
29
- answer:
30
- 'Sí, cada bloque cuenta con un botón en el recuadro del resultado que copia instantáneamente la cifra al portapapeles de tu dispositivo para poder pegarla en otra app o documento.',
31
- },
32
- ];
33
-
34
- const howToData = [
35
- {
36
- name: 'Identifica tu problema matemático',
37
- text: 'Lee los títulos de los 4 bloques y elige el que coincida con lo que quieres saber (Ej. ¿Cuánto es el 20% de 50? -> Bloque 1).',
38
- },
39
- {
40
- name: 'Introduce las cifras',
41
- text: 'Rellena los campos \'X\' e \'Y\'. No te preocupes por el orden, la frase de cada bloque te guía visualmente.',
42
- },
43
- {
44
- name: 'Copia el resultado instantáneo',
45
- text: 'La cifra aparecerá en tiempo real abajo a medida que escribes. Pulsa el icono de copiar si deseas llevártelo a otra parte.',
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: 'es',
81
- };
82
-
83
- export const content: ToolLocaleContent<PercentageCalculatorUI> = {
84
- slug,
85
- title,
86
- description,
87
- faq: faqData,
88
- bibliography,
89
-
90
- howTo: howToData,
91
- schemas: [faqSchema, howToSchema, appSchema],
92
- seo: [
93
- {
94
- type: 'title',
95
- text: 'Calculadora de Porcentajes 4 en 1: Domina los Cálculos Rápidos',
96
- level: 2,
97
- },
98
- {
99
- type: 'title',
100
- text: '¿Para qué sirve una calculadora de porcentajes múltiple?',
101
- level: 3,
102
- },
103
- {
104
- type: 'paragraph',
105
- html: 'Calcular porcentajes es una de las operaciones matemáticas más comunes en nuestro día a día. Desde calcular el descuento en unas rebajas, conocer la propina adecuada en un restaurante, hasta determinar el margen de beneficio en un negocio o el interés de un préstamo. A pesar de ser operaciones cotidianas, no siempre es fácil realizarlas mentalmente o recordar la fórmula exacta.',
106
- },
107
- {
108
- type: 'paragraph',
109
- html: 'Nuestra calculadora de porcentajes 4 en 1 agrupa los escenarios más demandados. Ya no necesitas buscar en Google "cómo sacar el 20 por ciento" o "fórmula para cálculo de porcentaje". Tienes las cuatro operaciones esenciales en un solo lugar, de forma interactiva y con resultados instantáneos.',
110
- },
111
- {
112
- type: 'title',
113
- text: 'Revisando los 4 casos de uso más habituales',
114
- level: 3,
115
- },
116
- {
117
- type: 'paragraph',
118
- html: 'Para facilitarte la vida, hemos separado la herramienta en cuatro bloques visuales claros que resuelven los problemas reales a los que nos enfrentamos a diario:',
119
- },
120
- {
121
- type: 'card',
122
- icon: 'mdi:percent',
123
- title: '1. ¿Cuánto es el X% de Y?',
124
- html: '<p><strong>El caso clásico.</strong> Útil para calcular descuentos o propinas. Si quieres saber cuánto es el 15% de 120€, esta es tu herramienta. La fórmula subyacente simplemente divide el porcentaje entre 100 y lo multiplica por el valor total.</p>',
125
- },
126
- {
127
- type: 'card',
128
- icon: 'mdi:division',
129
- title: '2. ¿Qué porcentaje es X de Y?',
130
- html: '<p><strong>Ideal para proporciones.</strong> Si has sacado 45 puntos en un examen de 60, ¿qué nota tienes sobre 100? Esta función divide la parte entre el total y lo multiplica por cien, dándote el peso relativo exacto.</p>',
131
- },
132
- {
133
- type: 'card',
134
- icon: 'mdi:chart-line-variant',
135
- title: '3. Aumento o Disminución Porcentual',
136
- html: '<p><strong>Perfecto para finanzas y analítica.</strong> ¿Cuánto ha subido el alquiler desde el año pasado? Si antes pagabas 800€ y ahora 840€, esta función te dirá que has sufrido un aumento del 5%. Mide el crecimiento o decrecimiento entre dos cifras.</p>',
137
- },
138
- {
139
- type: 'card',
140
- icon: 'mdi:calculator',
141
- title: '4. Sumar o Restar porcentaje a un valor',
142
- html: '<p><strong>Súper útil para el IVA.</strong> Si tienes un precio base (ej. 100€) y necesitas añadirle el 21% de IVA, esta calculadora te dará directamente los 121€ finales sin tener que hacer operaciones intermedias. De igual forma, sirve para aplicar un descuento directo (ej. restar un 20%).</p>',
143
- },
144
- {
145
- type: 'title',
146
- text: 'Mitos comunes sobre el cálculo de porcentajes',
147
- level: 3,
148
- },
149
- {
150
- type: 'paragraph',
151
- html: 'A menudo nos bloqueamos al ver porcentajes grandes o decimales, pero hay algunos "trucos" matemáticos que pueden hacerte la vida más fácil. El más famoso es la <strong>reversibilidad de los porcentajes</strong>.',
152
- },
153
- {
154
- type: 'tip',
155
- title: 'El truco de la reversibilidad',
156
- html: '<p>¿Sabías que el X% de Y es exactamente igual al Y% de X? Por ejemplo, si te piden calcular el 18% de 50 mentalmente, puede sonar complicado. Pero si lo inviertes, el 50% de 18 es muy fácil: ¡es 9! Esto aplica para absolutamente cualquier número y es un salvavidas asombroso en el día a día.</p>',
157
- },
158
- {
159
- type: 'title',
160
- text: 'Por qué fallamos al calcular crecimientos',
161
- level: 3,
162
- },
163
- {
164
- type: 'paragraph',
165
- html: 'Uno de los errores más comunes ocurre en el caso 3: el aumento o disminución porcentual. Imaginemos que una acción en bolsa cuesta 100€, baja un 50% y al día siguiente sube un 50%. La intuición nos dice que vuelve a valer 100€, pero es incorrecto.',
166
- },
167
- {
168
- type: 'paragraph',
169
- html: 'Si baja un 50% desde 100€, su nuevo valor es 50€. Si desde esos 50€ sube un 50%, el incremento es la mitad de 50 (25€). Por tanto, el precio final sería 75€. Este es un ejemplo clásico de por qué las subidas y bajadas porcentuales no son asimétricas y por qué calculadoras dinámicas como esta previenen errores financieros graves.',
170
- },
171
- {
172
- type: 'title',
173
- text: 'Uso profesional y académico',
174
- level: 3,
175
- },
176
- {
177
- type: 'paragraph',
178
- html: 'Nuestra interfaz está libre de distracciones y diseñada para <strong>trabajar rápido</strong>. Puedes tenerla en una pestaña fijada del navegador, tabular ágilmente entre los distintos campos y, gracias al botón de copiar junto al resultado, trasladar el dato exacto a tu Excel o Google Sheets sin riesgo de errores de tipografía.',
179
- },
180
- {
181
- type: 'list',
182
- items: [
183
- 'Comercio web y tiendas físicas: Cálculo rápido de PVP aplicando márgenes comerciales y sumando el IVA.',
184
- 'Gestión de recursos humanos: Determinación de la brecha salarial, retenciones de IRPF y subidas de sueldo referenciadas al IPC.',
185
- 'Educación universitaria: Profesores que nivelan calificaciones o estudiantes de ramas científicas analizando la desviación de sus experimentos.',
186
- 'Marketing digital: Medición del CTR (Click Through Rate), ROAS (Retorno del Gasto Publicitario) o Conversion Rate en eCommerce.',
187
- ],
188
- },
189
- ],
190
- ui: {
191
- labelTitle: 'Calculadora de Porcentajes',
192
- labelCase1Title: 'Caso 1',
193
- labelCase1Question: '¿Cuánto es el X% de Y?',
194
- labelCase1Placeholder1: 'X',
195
- labelCase1Placeholder2: 'Y',
196
- labelCase1Formula: 'Fórmula: (X / 100) × Y',
197
- labelCase2Title: 'Caso 2',
198
- labelCase2Question: '¿Qué porcentaje es X de Y?',
199
- labelCase2Placeholder1: 'X',
200
- labelCase2Placeholder2: 'Y',
201
- labelCase2Formula: 'Fórmula: (X / Y) × 100',
202
- labelCase3Title: 'Caso 3',
203
- labelCase3Question: 'Diferencia porcentual entre dos valores',
204
- labelCase3Placeholder1: 'Valor 1',
205
- labelCase3Placeholder2: 'Valor 2',
206
- labelCase3Formula: 'Fórmula: ((Valor 2 - Valor 1) / |Valor 1|) × 100',
207
- labelCase4Title: 'Caso 4',
208
- labelCase4Question: 'Sumar o restar porcentaje a un valor',
209
- labelCase4Placeholder1: 'Valor',
210
- labelCase4Placeholder2: '%',
211
- labelCase4Formula: 'Fórmula: Valor ± (Valor × (% / 100))',
212
- labelCase4AddLabel: 'Suma (Valor + %)',
213
- labelCase4SubtractLabel: 'Resta (Valor - %)',
214
- labelResult: 'Resultado',
215
- labelDifference: 'Diferencia',
216
- labelCopyTooltip: 'Copiar resultado',
217
- labelFormula: 'Fórmula',
218
- percentSymbol: '%',
219
- },
220
- };
1
+ import { bibliography } from '../bibliography'
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { ToolLocaleContent } from '../../../types';
4
+ import type { PercentageCalculatorUI } from '../ui';
5
+
6
+ const slug = 'calculadora-porcentajes';
7
+ const title = 'Calculadora de Porcentajes 4 en 1: Descuentos, Subidas y Rebajas';
8
+ const description =
9
+ 'Calcula fácilmente porcentajes online gratis. 4 herramientas en 1 para sacar el X% de Y, diferencia porcentual, sumar o restar IVA, rebajas y propinas automáticas.';
10
+
11
+ const faqData = [
12
+ {
13
+ question: '¿Cómo funciona la calculadora?',
14
+ answer:
15
+ 'Simplemente escribe los valores en los cuadros del caso de uso correspondiente a tu problema y nuestra calculadora procesa la fórmula sin necesidad de apretar ningún botón de calcular.',
16
+ },
17
+ {
18
+ question: '¿Es válida para calcular el IVA o impuestos?',
19
+ answer:
20
+ 'Sí, el bloque 4 (\'Sumar o restar porcentaje\') está diseñado precisamente para casos como aplicar un IVA del 21% a un precio base o calcular un IRPF negativo.',
21
+ },
22
+ {
23
+ question: '¿Maneja números decimales y negativos?',
24
+ answer:
25
+ 'Por supuesto. Puedes introducir números decimales (utilizando punto) y también funcionará con valores negativos si necesitas analizar balances contables en pérdidas.',
26
+ },
27
+ {
28
+ question: '¿Puedo copiar los resultados?',
29
+ answer:
30
+ 'Sí, cada bloque cuenta con un botón en el recuadro del resultado que copia instantáneamente la cifra al portapapeles de tu dispositivo para poder pegarla en otra app o documento.',
31
+ },
32
+ ];
33
+
34
+ const howToData = [
35
+ {
36
+ name: 'Identifica tu problema matemático',
37
+ text: 'Lee los títulos de los 4 bloques y elige el que coincida con lo que quieres saber (Ej. ¿Cuánto es el 20% de 50? -> Bloque 1).',
38
+ },
39
+ {
40
+ name: 'Introduce las cifras',
41
+ text: 'Rellena los campos \'X\' e \'Y\'. No te preocupes por el orden, la frase de cada bloque te guía visualmente.',
42
+ },
43
+ {
44
+ name: 'Copia el resultado instantáneo',
45
+ text: 'La cifra aparecerá en tiempo real abajo a medida que escribes. Pulsa el icono de copiar si deseas llevártelo a otra parte.',
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: 'es',
81
+ };
82
+
83
+ export const content: ToolLocaleContent<PercentageCalculatorUI> = {
84
+ slug,
85
+ title,
86
+ description,
87
+ faq: faqData,
88
+ bibliography,
89
+
90
+ howTo: howToData,
91
+ schemas: [faqSchema, howToSchema, appSchema],
92
+ seo: [
93
+ {
94
+ type: 'title',
95
+ text: 'Calculadora de Porcentajes 4 en 1: Domina los Cálculos Rápidos',
96
+ level: 2,
97
+ },
98
+ {
99
+ type: 'title',
100
+ text: '¿Para qué sirve una calculadora de porcentajes múltiple?',
101
+ level: 3,
102
+ },
103
+ {
104
+ type: 'paragraph',
105
+ html: 'Calcular porcentajes es una de las operaciones matemáticas más comunes en nuestro día a día. Desde calcular el descuento en unas rebajas, conocer la propina adecuada en un restaurante, hasta determinar el margen de beneficio en un negocio o el interés de un préstamo. A pesar de ser operaciones cotidianas, no siempre es fácil realizarlas mentalmente o recordar la fórmula exacta.',
106
+ },
107
+ {
108
+ type: 'paragraph',
109
+ html: 'Nuestra calculadora de porcentajes 4 en 1 agrupa los escenarios más demandados. Ya no necesitas buscar en Google "cómo sacar el 20 por ciento" o "fórmula para cálculo de porcentaje". Tienes las cuatro operaciones esenciales en un solo lugar, de forma interactiva y con resultados instantáneos.',
110
+ },
111
+ {
112
+ type: 'title',
113
+ text: 'Revisando los 4 casos de uso más habituales',
114
+ level: 3,
115
+ },
116
+ {
117
+ type: 'paragraph',
118
+ html: 'Para facilitarte la vida, hemos separado la herramienta en cuatro bloques visuales claros que resuelven los problemas reales a los que nos enfrentamos a diario:',
119
+ },
120
+ {
121
+ type: 'card',
122
+ icon: 'mdi:percent',
123
+ title: '1. ¿Cuánto es el X% de Y?',
124
+ html: '<p><strong>El caso clásico.</strong> Útil para calcular descuentos o propinas. Si quieres saber cuánto es el 15% de 120€, esta es tu herramienta. La fórmula subyacente simplemente divide el porcentaje entre 100 y lo multiplica por el valor total.</p>',
125
+ },
126
+ {
127
+ type: 'card',
128
+ icon: 'mdi:division',
129
+ title: '2. ¿Qué porcentaje es X de Y?',
130
+ html: '<p><strong>Ideal para proporciones.</strong> Si has sacado 45 puntos en un examen de 60, ¿qué nota tienes sobre 100? Esta función divide la parte entre el total y lo multiplica por cien, dándote el peso relativo exacto.</p>',
131
+ },
132
+ {
133
+ type: 'card',
134
+ icon: 'mdi:chart-line-variant',
135
+ title: '3. Aumento o Disminución Porcentual',
136
+ html: '<p><strong>Perfecto para finanzas y analítica.</strong> ¿Cuánto ha subido el alquiler desde el año pasado? Si antes pagabas 800€ y ahora 840€, esta función te dirá que has sufrido un aumento del 5%. Mide el crecimiento o decrecimiento entre dos cifras.</p>',
137
+ },
138
+ {
139
+ type: 'card',
140
+ icon: 'mdi:calculator',
141
+ title: '4. Sumar o Restar porcentaje a un valor',
142
+ html: '<p><strong>Súper útil para el IVA.</strong> Si tienes un precio base (ej. 100€) y necesitas añadirle el 21% de IVA, esta calculadora te dará directamente los 121€ finales sin tener que hacer operaciones intermedias. De igual forma, sirve para aplicar un descuento directo (ej. restar un 20%).</p>',
143
+ },
144
+ {
145
+ type: 'title',
146
+ text: 'Mitos comunes sobre el cálculo de porcentajes',
147
+ level: 3,
148
+ },
149
+ {
150
+ type: 'paragraph',
151
+ html: 'A menudo nos bloqueamos al ver porcentajes grandes o decimales, pero hay algunos "trucos" matemáticos que pueden hacerte la vida más fácil. El más famoso es la <strong>reversibilidad de los porcentajes</strong>.',
152
+ },
153
+ {
154
+ type: 'tip',
155
+ title: 'El truco de la reversibilidad',
156
+ html: '<p>¿Sabías que el X% de Y es exactamente igual al Y% de X? Por ejemplo, si te piden calcular el 18% de 50 mentalmente, puede sonar complicado. Pero si lo inviertes, el 50% de 18 es muy fácil: ¡es 9! Esto aplica para absolutamente cualquier número y es un salvavidas asombroso en el día a día.</p>',
157
+ },
158
+ {
159
+ type: 'title',
160
+ text: 'Por qué fallamos al calcular crecimientos',
161
+ level: 3,
162
+ },
163
+ {
164
+ type: 'paragraph',
165
+ html: 'Uno de los errores más comunes ocurre en el caso 3: el aumento o disminución porcentual. Imaginemos que una acción en bolsa cuesta 100€, baja un 50% y al día siguiente sube un 50%. La intuición nos dice que vuelve a valer 100€, pero es incorrecto.',
166
+ },
167
+ {
168
+ type: 'paragraph',
169
+ html: 'Si baja un 50% desde 100€, su nuevo valor es 50€. Si desde esos 50€ sube un 50%, el incremento es la mitad de 50 (25€). Por tanto, el precio final sería 75€. Este es un ejemplo clásico de por qué las subidas y bajadas porcentuales no son asimétricas y por qué calculadoras dinámicas como esta previenen errores financieros graves.',
170
+ },
171
+ {
172
+ type: 'title',
173
+ text: 'Uso profesional y académico',
174
+ level: 3,
175
+ },
176
+ {
177
+ type: 'paragraph',
178
+ html: 'Nuestra interfaz está libre de distracciones y diseñada para <strong>trabajar rápido</strong>. Puedes tenerla en una pestaña fijada del navegador, tabular ágilmente entre los distintos campos y, gracias al botón de copiar junto al resultado, trasladar el dato exacto a tu Excel o Google Sheets sin riesgo de errores de tipografía.',
179
+ },
180
+ {
181
+ type: 'list',
182
+ items: [
183
+ 'Comercio web y tiendas físicas: Cálculo rápido de PVP aplicando márgenes comerciales y sumando el IVA.',
184
+ 'Gestión de recursos humanos: Determinación de la brecha salarial, retenciones de IRPF y subidas de sueldo referenciadas al IPC.',
185
+ 'Educación universitaria: Profesores que nivelan calificaciones o estudiantes de ramas científicas analizando la desviación de sus experimentos.',
186
+ 'Marketing digital: Medición del CTR (Click Through Rate), ROAS (Retorno del Gasto Publicitario) o Conversion Rate en eCommerce.',
187
+ ],
188
+ },
189
+ ],
190
+ ui: {
191
+ labelTitle: 'Calculadora de Porcentajes',
192
+ labelCase1Title: 'Caso 1',
193
+ labelCase1Question: '¿Cuánto es el X% de Y?',
194
+ labelCase1Placeholder1: 'X',
195
+ labelCase1Placeholder2: 'Y',
196
+ labelCase1Formula: 'Fórmula: (X / 100) × Y',
197
+ labelCase2Title: 'Caso 2',
198
+ labelCase2Question: '¿Qué porcentaje es X de Y?',
199
+ labelCase2Placeholder1: 'X',
200
+ labelCase2Placeholder2: 'Y',
201
+ labelCase2Formula: 'Fórmula: (X / Y) × 100',
202
+ labelCase3Title: 'Caso 3',
203
+ labelCase3Question: 'Diferencia porcentual entre dos valores',
204
+ labelCase3Placeholder1: 'Valor 1',
205
+ labelCase3Placeholder2: 'Valor 2',
206
+ labelCase3Formula: 'Fórmula: ((Valor 2 - Valor 1) / |Valor 1|) × 100',
207
+ labelCase4Title: 'Caso 4',
208
+ labelCase4Question: 'Sumar o restar porcentaje a un valor',
209
+ labelCase4Placeholder1: 'Valor',
210
+ labelCase4Placeholder2: '%',
211
+ labelCase4Formula: 'Fórmula: Valor ± (Valor × (% / 100))',
212
+ labelCase4AddLabel: 'Suma (Valor + %)',
213
+ labelCase4SubtractLabel: 'Resta (Valor - %)',
214
+ labelResult: 'Resultado',
215
+ labelDifference: 'Diferencia',
216
+ labelCopyTooltip: 'Copiar resultado',
217
+ labelFormula: 'Fórmula',
218
+ percentSymbol: '%',
219
+ },
220
+ };