@jjlmoya/utils-finance 1.30.0 → 1.32.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 (215) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/en.ts +1 -1
  3. package/src/category/i18n/es.ts +4 -4
  4. package/src/category/i18n/fr.ts +159 -159
  5. package/src/category/i18n/pl.ts +1 -1
  6. package/src/category/i18n/ru.ts +158 -158
  7. package/src/category/index.ts +39 -38
  8. package/src/category/seo.astro +1 -1
  9. package/src/components/PreviewNavSidebar.astro +1 -1
  10. package/src/components/PreviewToolbar.astro +1 -1
  11. package/src/data.ts +1 -1
  12. package/src/entries.ts +4 -1
  13. package/src/env.d.ts +1 -1
  14. package/src/index.ts +1 -0
  15. package/src/layouts/PreviewLayout.astro +113 -113
  16. package/src/pages/index.astro +1 -1
  17. package/src/tests/bibliography_wellformed_export.test.ts +46 -0
  18. package/src/tests/category_seo_quality.test.ts +76 -0
  19. package/src/tests/faq_count.test.ts +1 -1
  20. package/src/tests/locale_completeness.test.ts +2 -2
  21. package/src/tests/mocks/astro_mock.js +1 -1
  22. package/src/tests/no_h1_in_components.test.ts +1 -1
  23. package/src/tests/script_density.test.ts +94 -94
  24. package/src/tests/seo_length.test.ts +23 -23
  25. package/src/tests/seo_translation_completeness.test.ts +69 -0
  26. package/src/tests/seo_wellformed_export.test.ts +65 -0
  27. package/src/tests/tool_validation.test.ts +17 -17
  28. package/src/tool/compoundInterest/compound-interest-calculator.css +236 -236
  29. package/src/tool/compoundInterest/entry.ts +32 -32
  30. package/src/tool/compoundInterest/i18n/de.ts +195 -195
  31. package/src/tool/compoundInterest/i18n/fr.ts +195 -195
  32. package/src/tool/compoundInterest/i18n/it.ts +195 -195
  33. package/src/tool/compoundInterest/i18n/pl.ts +194 -194
  34. package/src/tool/compoundInterest/i18n/ru.ts +195 -195
  35. package/src/tool/compoundInterest/i18n/tr.ts +195 -195
  36. package/src/tool/compoundInterest/i18n/zh.ts +189 -189
  37. package/src/tool/compoundInterest/seo.astro +15 -15
  38. package/src/tool/courtFeeCalculator/i18n/it.ts +158 -158
  39. package/src/tool/courtFeeCalculator/i18n/ru.ts +158 -158
  40. package/src/tool/courtFeeCalculator/i18n/tr.ts +158 -158
  41. package/src/tool/courtFeeCalculator/seo.astro +15 -15
  42. package/src/tool/courtFeeCalculator/spanish-court-fees-calculator.css +197 -197
  43. package/src/tool/debtSnowball/bibliography.ts +12 -12
  44. package/src/tool/debtSnowball/i18n/de.ts +16 -16
  45. package/src/tool/debtSnowball/i18n/id.ts +16 -16
  46. package/src/tool/debtSnowball/i18n/it.ts +168 -168
  47. package/src/tool/debtSnowball/i18n/nl.ts +16 -16
  48. package/src/tool/debtSnowball/i18n/pl.ts +168 -168
  49. package/src/tool/debtSnowball/i18n/pt.ts +1 -1
  50. package/src/tool/debtSnowball/i18n/ru.ts +1 -1
  51. package/src/tool/debtSnowball/i18n/sv.ts +22 -29
  52. package/src/tool/debtSnowball/i18n/tr.ts +168 -168
  53. package/src/tool/debtSnowball/i18n/zh.ts +168 -168
  54. package/src/tool/debtSnowball/seo.astro +15 -15
  55. package/src/tool/dividendYield/bibliography.astro +14 -0
  56. package/src/tool/dividendYield/bibliography.ts +12 -0
  57. package/src/tool/dividendYield/component.astro +83 -0
  58. package/src/tool/dividendYield/controller.ts +85 -0
  59. package/src/tool/dividendYield/dividend-yield-calculator.css +352 -0
  60. package/src/tool/dividendYield/dom-views.ts +58 -0
  61. package/src/tool/dividendYield/entry.ts +29 -0
  62. package/src/tool/dividendYield/evaluator.ts +16 -0
  63. package/src/tool/dividendYield/i18n/de.ts +53 -0
  64. package/src/tool/dividendYield/i18n/en.ts +138 -0
  65. package/src/tool/dividendYield/i18n/es.ts +49 -0
  66. package/src/tool/dividendYield/i18n/fr.ts +49 -0
  67. package/src/tool/dividendYield/i18n/id.ts +49 -0
  68. package/src/tool/dividendYield/i18n/it.ts +49 -0
  69. package/src/tool/dividendYield/i18n/ja.ts +49 -0
  70. package/src/tool/dividendYield/i18n/ko.ts +25 -0
  71. package/src/tool/dividendYield/i18n/nl.ts +25 -0
  72. package/src/tool/dividendYield/i18n/pl.ts +25 -0
  73. package/src/tool/dividendYield/i18n/pt.ts +25 -0
  74. package/src/tool/dividendYield/i18n/ru.ts +25 -0
  75. package/src/tool/dividendYield/i18n/sv.ts +25 -0
  76. package/src/tool/dividendYield/i18n/tr.ts +25 -0
  77. package/src/tool/dividendYield/i18n/zh.ts +25 -0
  78. package/src/tool/dividendYield/index.ts +11 -0
  79. package/src/tool/dividendYield/logic.test.ts +73 -0
  80. package/src/tool/dividendYield/logic.ts +55 -0
  81. package/src/tool/dividendYield/seo.astro +14 -0
  82. package/src/tool/dividendYield/storage.ts +24 -0
  83. package/src/tool/dividendYield/ui.ts +33 -0
  84. package/src/tool/financialFreedom/financial-freedom-calculator.css +311 -311
  85. package/src/tool/financialFreedom/i18n/en.ts +182 -182
  86. package/src/tool/financialFreedom/i18n/fr.ts +128 -128
  87. package/src/tool/financialFreedom/i18n/id.ts +24 -7
  88. package/src/tool/financialFreedom/i18n/it.ts +24 -7
  89. package/src/tool/financialFreedom/i18n/ja.ts +1 -1
  90. package/src/tool/financialFreedom/i18n/nl.ts +24 -7
  91. package/src/tool/financialFreedom/i18n/pl.ts +24 -7
  92. package/src/tool/financialFreedom/i18n/pt.ts +24 -7
  93. package/src/tool/financialFreedom/i18n/ru.ts +128 -128
  94. package/src/tool/financialFreedom/i18n/sv.ts +1 -1
  95. package/src/tool/financialFreedom/i18n/tr.ts +2 -2
  96. package/src/tool/financialFreedom/i18n/zh.ts +128 -128
  97. package/src/tool/fireCalculator/i18n/it.ts +241 -241
  98. package/src/tool/fireCalculator/i18n/ru.ts +241 -241
  99. package/src/tool/fireCalculator/i18n/tr.ts +241 -241
  100. package/src/tool/fireCalculator/i18n/zh.ts +241 -241
  101. package/src/tool/fireCalculator/seo.astro +15 -15
  102. package/src/tool/ibanBicSwiftConverter/i18n/fr.ts +151 -151
  103. package/src/tool/ibanBicSwiftConverter/i18n/it.ts +118 -118
  104. package/src/tool/ibanBicSwiftConverter/i18n/ru.ts +118 -118
  105. package/src/tool/ibanBicSwiftConverter/i18n/tr.ts +118 -118
  106. package/src/tool/ibanBicSwiftConverter/iban-to-bic-swift-converter.css +366 -366
  107. package/src/tool/ibanBicSwiftConverter/seo.astro +15 -15
  108. package/src/tool/inflation/bibliography.ts +20 -20
  109. package/src/tool/inflation/entry.ts +32 -32
  110. package/src/tool/inflation/i18n/de.ts +284 -284
  111. package/src/tool/inflation/i18n/fr.ts +284 -284
  112. package/src/tool/inflation/i18n/it.ts +284 -284
  113. package/src/tool/inflation/i18n/nl.ts +284 -284
  114. package/src/tool/inflation/i18n/pl.ts +284 -284
  115. package/src/tool/inflation/i18n/pt.ts +284 -284
  116. package/src/tool/inflation/i18n/ru.ts +284 -284
  117. package/src/tool/inflation/i18n/sv.ts +284 -284
  118. package/src/tool/inflation/i18n/tr.ts +284 -284
  119. package/src/tool/inflation/i18n/zh.ts +284 -284
  120. package/src/tool/inflation/seo.astro +15 -15
  121. package/src/tool/lateInterest/bibliography.ts +16 -16
  122. package/src/tool/lateInterest/entry.ts +32 -32
  123. package/src/tool/lateInterest/i18n/de.ts +213 -213
  124. package/src/tool/lateInterest/i18n/es.ts +213 -213
  125. package/src/tool/lateInterest/i18n/it.ts +213 -213
  126. package/src/tool/lateInterest/i18n/nl.ts +213 -213
  127. package/src/tool/lateInterest/i18n/pl.ts +213 -213
  128. package/src/tool/lateInterest/i18n/pt.ts +213 -213
  129. package/src/tool/lateInterest/i18n/ru.ts +213 -213
  130. package/src/tool/lateInterest/i18n/sv.ts +213 -213
  131. package/src/tool/lateInterest/i18n/tr.ts +213 -213
  132. package/src/tool/lateInterest/i18n/zh.ts +213 -213
  133. package/src/tool/lateInterest/seo.astro +15 -15
  134. package/src/tool/legalInterestRate/i18n/it.ts +129 -129
  135. package/src/tool/legalInterestRate/i18n/ru.ts +129 -129
  136. package/src/tool/legalInterestRate/i18n/tr.ts +128 -121
  137. package/src/tool/legalInterestRate/i18n/zh.ts +11 -4
  138. package/src/tool/legalInterestRate/seo.astro +15 -15
  139. package/src/tool/lotteryOptimizer/i18n/it.ts +163 -163
  140. package/src/tool/lotteryOptimizer/i18n/pl.ts +163 -163
  141. package/src/tool/lotteryOptimizer/i18n/ru.ts +163 -163
  142. package/src/tool/lotteryOptimizer/i18n/tr.ts +163 -163
  143. package/src/tool/lotteryOptimizer/i18n/zh.ts +162 -155
  144. package/src/tool/lotteryOptimizer/seo.astro +15 -15
  145. package/src/tool/mortgage/bibliography.ts +20 -20
  146. package/src/tool/mortgage/entry.ts +32 -32
  147. package/src/tool/mortgage/i18n/de.ts +210 -210
  148. package/src/tool/mortgage/i18n/es.ts +210 -210
  149. package/src/tool/mortgage/i18n/fr.ts +210 -210
  150. package/src/tool/mortgage/i18n/id.ts +210 -210
  151. package/src/tool/mortgage/i18n/it.ts +210 -210
  152. package/src/tool/mortgage/i18n/nl.ts +210 -210
  153. package/src/tool/mortgage/i18n/pl.ts +210 -210
  154. package/src/tool/mortgage/i18n/ru.ts +210 -210
  155. package/src/tool/mortgage/i18n/tr.ts +210 -210
  156. package/src/tool/mortgage/i18n/zh.ts +210 -210
  157. package/src/tool/mortgage/mortgage-calculator.css +595 -595
  158. package/src/tool/mortgage/seo.astro +15 -15
  159. package/src/tool/percentageCalculator/bibliography.ts +16 -16
  160. package/src/tool/percentageCalculator/entry.ts +32 -32
  161. package/src/tool/percentageCalculator/i18n/de.ts +220 -220
  162. package/src/tool/percentageCalculator/i18n/en.ts +220 -220
  163. package/src/tool/percentageCalculator/i18n/es.ts +220 -220
  164. package/src/tool/percentageCalculator/i18n/fr.ts +220 -220
  165. package/src/tool/percentageCalculator/i18n/it.ts +220 -220
  166. package/src/tool/percentageCalculator/i18n/pl.ts +220 -220
  167. package/src/tool/percentageCalculator/i18n/ru.ts +220 -220
  168. package/src/tool/percentageCalculator/i18n/tr.ts +220 -220
  169. package/src/tool/percentageCalculator/i18n/zh.ts +220 -220
  170. package/src/tool/percentageCalculator/seo.astro +15 -15
  171. package/src/tool/profitability/i18n/de.ts +24 -7
  172. package/src/tool/profitability/i18n/fr.ts +121 -104
  173. package/src/tool/profitability/i18n/id.ts +2 -2
  174. package/src/tool/profitability/i18n/it.ts +24 -7
  175. package/src/tool/profitability/i18n/ja.ts +1 -1
  176. package/src/tool/profitability/i18n/nl.ts +24 -7
  177. package/src/tool/profitability/i18n/pl.ts +1 -1
  178. package/src/tool/profitability/i18n/pt.ts +24 -7
  179. package/src/tool/profitability/i18n/ru.ts +118 -118
  180. package/src/tool/profitability/i18n/sv.ts +1 -1
  181. package/src/tool/profitability/i18n/tr.ts +1 -1
  182. package/src/tool/profitability/i18n/zh.ts +118 -118
  183. package/src/tool/profitability/profitability-calculator.css +229 -229
  184. package/src/tool/rentIncreaseCalculator/i18n/it.ts +125 -125
  185. package/src/tool/rentIncreaseCalculator/i18n/tr.ts +125 -125
  186. package/src/tool/rentIncreaseCalculator/rent-increase-calculator.css +326 -326
  187. package/src/tool/rentIncreaseCalculator/seo.astro +15 -15
  188. package/src/tool/revolvingCardCalculator/i18n/de.ts +38 -20
  189. package/src/tool/revolvingCardCalculator/i18n/es.ts +19 -18
  190. package/src/tool/revolvingCardCalculator/i18n/fr.ts +32 -28
  191. package/src/tool/revolvingCardCalculator/i18n/id.ts +18 -18
  192. package/src/tool/revolvingCardCalculator/i18n/it.ts +18 -18
  193. package/src/tool/revolvingCardCalculator/i18n/ja.ts +2 -2
  194. package/src/tool/revolvingCardCalculator/i18n/ko.ts +2 -2
  195. package/src/tool/revolvingCardCalculator/i18n/nl.ts +22 -19
  196. package/src/tool/revolvingCardCalculator/i18n/pl.ts +2 -2
  197. package/src/tool/revolvingCardCalculator/i18n/pt.ts +2 -2
  198. package/src/tool/revolvingCardCalculator/i18n/ru.ts +2 -2
  199. package/src/tool/revolvingCardCalculator/i18n/sv.ts +2 -2
  200. package/src/tool/revolvingCardCalculator/i18n/tr.ts +2 -2
  201. package/src/tool/revolvingCardCalculator/i18n/zh.ts +6 -6
  202. package/src/tool/salaryEmployerCost/i18n/de.ts +10 -10
  203. package/src/tool/salaryEmployerCost/i18n/fr.ts +9 -9
  204. package/src/tool/salaryEmployerCost/i18n/id.ts +9 -9
  205. package/src/tool/salaryEmployerCost/i18n/it.ts +9 -9
  206. package/src/tool/salaryEmployerCost/i18n/ja.ts +1 -1
  207. package/src/tool/salaryEmployerCost/i18n/ko.ts +1 -1
  208. package/src/tool/salaryEmployerCost/i18n/nl.ts +2 -2
  209. package/src/tool/salaryEmployerCost/i18n/pl.ts +2 -2
  210. package/src/tool/salaryEmployerCost/i18n/pt.ts +2 -2
  211. package/src/tool/salaryEmployerCost/i18n/ru.ts +2 -2
  212. package/src/tool/salaryEmployerCost/i18n/sv.ts +2 -2
  213. package/src/tool/salaryEmployerCost/i18n/tr.ts +2 -2
  214. package/src/tool/salaryEmployerCost/i18n/zh.ts +2 -2
  215. 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
+ };