Martín Benzal (Glez)

9.7K posts

Martín Benzal (Glez) banner
Martín Benzal (Glez)

Martín Benzal (Glez)

@BenzalGlez

Protoinformatico, libertario minarquista, amante del deporte (baloncesto, balonmano, tenis...) y deportista. Técnico de Investigación.

Tirando... Katılım Temmuz 2012
604 Takip Edilen261 Takipçiler
Martín Benzal (Glez) retweetledi
Ron Swanson
Ron Swanson@MrRonswanson_·
@TamayoStuff Eres un puto vendido de mierda y eso te jode. Quiza UTBH no profudiza pero no eres capaz de rebatir ni un solo argumento de Rayo. Y al final la verdad es que haces propaganda y blanqueas a la PSOE que es quien te ha pagado, no vayas de digno cuando eres una putita mediatica mas
Español
21
56
2.1K
22.4K
Juan Soto Ivars
Juan Soto Ivars@juansotoivars·
El debate sobre lo que cobra la limpiadora y el médico se resolvió hace cien años en la Unión Soviética. -Camarada tenor, el conserje del teatro debería cobrar lo mismo que usted, pues ambos son trabajadores. A lo que el tenor contestó: -De acuerdo. Que cante el conserje.
Español
485
3.8K
18.7K
1M
Antonio
Antonio@brevogti·
@FJMoyano @PeibolEU @juansotoivars Ahora siguiendo tu lógica, mi profesión es constructor, si yo no hago el hospital donde va a operar el cirujano? es lo mismo entonces?
Español
1
0
0
101
Martín Benzal (Glez) retweetledi
Willy Tolerdo
Willy Tolerdo@WillyTolerdoo·
En La Sexta han dedicado 40 veces más tiempo a Vito Quiles, que al asesino de Esplugues de Llobregat.
Español
112
4.3K
17.8K
180.6K
Martín Benzal (Glez) retweetledi
David Alandete
David Alandete@alandete·
No defiendo a nadie. Comparar a Vito con Eichmann es una burrada sideral, una falta de respeto a las víctimas del Holocausto y una frivolidad bárbara. Cada uno actúa como quiere si es dentro de la legalidad. Pero en determinados medios sois mucho más activistas de lo que admitís, peor incluso que aquellos a los que criticáis, solo que lo disimuláis algo mejor.
Español
66
564
3.7K
35.2K
Martín Benzal (Glez) retweetledi
Jon González
Jon González@Jongonzlz·
Nadie los ha visto, porque sencillamente no existen, se los inventó. De hecho algunos tenemos sospechas bastante fundadas de que le llamaron a él precisamente para que desacreditara los números ciertos con otros inventados utilizando una autoridad de la que carecía, al no ser ya presidente de nada. Y cuando presentó esos datos inventados no vimos al presentador reclamar su verificación, como sí hizo con los datos correctos que se habían presentado una semana antes.
Francisco d la Torre@frdelatorre

Han pasado ocho días… alguien ha visto los números de Carlos Cruzado y de Gestha?

Español
11
362
1.3K
65.2K
Martín Benzal (Glez) retweetledi
Elyon
Elyon@ElyonMan·
Menudo maratón se está marcando Tamayo lavándole la cara al Gobierno. La semana pasada excluyéndolos de toda responsabilidad en la crisis de vivienda. Esta semana toca excluirlos de toda responsabilidad en el apagón. La semana que viene tocará el Covid, supongo.
La 1@La1_tve

El 28 de abril de 2025, a las 12:33, España se apagó. Sin luz, sin internet y sin explicaciones, llegaron las teorías. Un año después, Tamayo se pregunta si sabemos qué pasó. Esta noche un nuevo programa de Se nos ha ido de las manos con #TamayoApagón. rtve.es/n/17046201

Español
55
273
2.3K
110.5K
Martín Benzal (Glez) retweetledi
Jon González
Jon González@Jongonzlz·
En 2025, de nuevo líderes en la estadística más humillante para un país desarrollado. Tasa de riesgo de pobreza o exclusión social infantil. España 🇪🇸: 33,8%
Jon González tweet media
Español
105
1.5K
3K
235.5K
Martín Benzal (Glez) retweetledi
David Alandete
David Alandete@alandete·
Se ha normalizado llamar facha, fascista o nazi al adversario. Tachar de pseudomedios y de traidores a periodistas que no hacen más que su trabajo. Se lleva años incitando, degradando al contrario, hasta que pasa lo que pasa: algún loco se toma las cosas por su cuenta. Y ni siquiera cuando irrumpe la violencia se detienen. Entonces dicen que es falso, que es ficticio, que los reporteros somos amarillistas por contar lo que hemos visto con nuestros propios ojos. Y viene de donde viene. Ahora, con lo de la mujer del presidente español, se rasgan las vestiduras los mismos que celebraban con mucha risa que lo de Wyoming persiguiera a Ana Botella, Esperanza Aguirre o quien tocara. Los escraches violentos eran «jarabe democrático». Pero si es Begoña Gómez, entonces es acoso. En fin. Se está quedando el país hecho unos jirones.
Español
352
3.1K
8.8K
105K
Pedro Otamendi
Pedro Otamendi@PedroOtamendi·
Lo de Vito Quiles, escenas de insistencia directa, ya se lo hacía La Sexta a Ana Botella y a otros miembros del PartidoPopular. La diferencia es que, entonces, estos aguantaban el tipo y no llevaban a un grupo de personas que increpaban a los reporteros.
Español
251
3.3K
8.4K
267.5K
Martín Benzal (Glez)
Martín Benzal (Glez)@BenzalGlez·
@SPAINonymous @Jongonzlz ¿Cuál es la estafa? Hacer una web informativa solo es una forma más de compartir información, como las redes sociales. No entiendo tu punto.
Español
0
0
1
23
iSPAIN
iSPAIN@SPAINonymous·
@Jongonzlz @BenzalGlez JAJAJAJ GRAN PROYECTO A PEDIRLE A CLAUDE QUE CLAVE EXACTAMENTE LO QUE HACE GRATIS PARA TODOS PERO LE HABIES PUESTO UNA WEB JAJAJAJA ESTO ES UNA ESTAFA
Español
1
0
1
144
Jon González
Jon González@Jongonzlz·
Esto está todo mal principalmente porque no tiene sentido económico compararlos así. Pero aprovecho la oportunidad para promocionar otro gran proyecto, este de @BenzalGlez También para recomendar el Décimo informe del Observatorio sobre el reparto de los impuestos y prestaciones entre los hogares españoles de @socialfedea, donde esta comparación se realiza con el suficiente rigor y base técnica. t.co/CkrryIT6uc
Jon González tweet media
laSexta Xplica@laSextaXplica

🤔 ¿Después de pagar los impuestos, a quién le queda más y a quién menos? Lobato nos da las claves en #XplicaPrioridad

Español
7
89
351
22.8K
Martín Benzal (Glez) retweetledi
Martín Benzal (Glez) retweetledi
David Alandete
David Alandete@alandete·
Spain’s public TV budget is €1.3 BILLION (~$1.4b) a year. They got money for that but not for defense. It’s the cost of 13 hospitals. Much of it goes to shows designed to give airtime to otherwise unemployable voices abjectly loyal to those in power.
English
571
2.7K
6.7K
173.1K
Jon González
Jon González@Jongonzlz·
Quiero DEMOCRATIZAR el conocimiento del cálculo del IRPF y del salario neto, y las implicaciones de la progresividad en frío entre 2012 y 2026. Pero necesito fiscalistas y economistas con ojo al detalle y techies. Quiero que los que sabéis de fiscalidad auditéis los resultados de mi código para cada año atendiendo al más mínimo detalle (yo he tratado de hacerlo), Que los techies me propongáis mejoras en el código y optimizaciones en las salidas, y quiero que, finalmente, los que tenéis capacidad de montar una web con ello, os coordinéis y lo hagáis. También quiero que extraigáis un manual sencillo para que la gente lo entienda a partir de los cálculos que se hacen en el código. Y que se expliquen las distintas normativas y cómo impactaron. A TRABAJAR. GO GO GO! @Gsnchez @XMihura @Inspectores_IHE @frdelatorre @Jaume_Vinas @SantiCalvo_Eco Ahí va el código! import pandas as pd import numpy as np # ============================================================================= # 1. MÓDULO MACROECONÓMICO: INFLACIÓN ACUMULADA (DICIEMBRE A DICIEMBRE) # ============================================================================= IPC_ANUAL_DIC = { 2013: 0.003, 2014: -0.010, 2015: 0.000, 2016: 0.016, 2017: 0.011, 2018: 0.012, 2019: 0.008, 2020: -0.005, 2021: 0.065, 2022: 0.057, 2023: 0.031, 2024: 0.028, 2025: 0.029, 2026: 0.030 } def obtener_inflacion_acumulada(anio_base, anio_destino=2026): if anio_base == anio_destino: return 1.0 multiplicador = 1.0 for anio in range(anio_base + 1, anio_destino + 1): multiplicador *= (1 + IPC_ANUAL_DIC[anio]) return multiplicador INFLACION_A_2026 = {anio: obtener_inflacion_acumulada(anio, 2026) for anio in range(2012, 2027)} # ============================================================================= # 2. NORMATIVA FISCAL Y LABORAL (IRPF Y SS) # ============================================================================= def obtener_parametros(anio): p = {} # Bases y Tipos Generales SS p['base_max'] = { 2012: 39150.0, 2013: 41108.4, 2014: 43164.0, 2015: 43272.0, 2016: 43704.0, 2017: 45014.4, 2018: 45014.4, 2019: 48841.2, 2020: 48841.2, 2021: 48841.2, 2022: 49672.8, 2023: 53946.0, 2024: 56646.0, 2025: 58914.0, 2026: 61214.4 }[anio] p['ss_tipos'] = { 'comunes': [0.236, 0.047], 'desempleo': [0.055, 0.0155], 'fogasa': [0.002, 0.0], 'fp': [0.006, 0.001], 'atep': [0.015, 0.0] } # MEI y Solidaridad if anio == 2023: p['mei'] = [0.005, 0.001] elif anio == 2024: p['mei'] = [0.0058, 0.0012] elif anio == 2025: p['mei'] = [0.0067, 0.0013] elif anio >= 2026: p['mei'] = [0.0075, 0.0015] else: p['mei'] = [0.0, 0.0] if anio == 2025: p['solidaridad'] = [(1.10, 0.0092), (1.50, 0.0100), (float('inf'), 0.0117)] elif anio >= 2026: p['solidaridad'] = [(1.10, 0.0115), (1.50, 0.0125), (float('inf'), 0.0146)] else: p['solidaridad'] = [] # Mínimos y Gastos p['irpf_minimo'] = 5151 if anio <= 2014 else 5550 p['minimo_exento'] = { 2012: 11162, 2013: 11162, 2014: 11162, 2015: 12000, 2016: 12000, 2017: 12000, 2018: 12643, 2019: 14000, 2020: 14000, 2021: 14000, 2022: 14000, 2023: 15000, 2024: 15876, 2025: 15876, 2026: 15876 }[anio] p['gastos_fijos'] = 0 if anio <= 2014 else 2000 # Reducción Art 20 (y Metadatos para control) def get_art20_params(a): if a <= 2014: return {"U_Inf": 9180, "R_Max": 4080, "U_Sup": 13260, "R_Min": 2652} elif 2015 <= a <= 2017: return {"U_Inf": 11250, "R_Max": 3700, "U_Sup": 14450, "R_Min": 0} elif a == 2018: return {"U_Inf": "Transitorio", "R_Max": "Transitorio", "U_Sup": "Transitorio", "R_Min": "Transitorio"} elif 2019 <= a <= 2022: return {"U_Inf": 13115, "R_Max": 5565, "U_Sup": 16825, "R_Min": 0} elif a == 2023: return {"U_Inf": 14047.5, "R_Max": 6498, "U_Sup": 19747.5, "R_Min": 0} else: return {"U_Inf": 14852, "R_Max": 7302, "U_Sup": 19747.5, "R_Min": 0} p['art20_meta'] = get_art20_params(anio) def reduccion_trabajo(rn_previo): if anio <= 2014: if rn_previo <= 9180: return 4080.0 elif rn_previo <= 13260: return 4080.0 - 0.35 * (rn_previo - 9180.0) else: return 2652.0 elif 2015 <= anio <= 2017: if rn_previo <= 11250: return 3700.0 elif rn_previo <= 14450: return 3700.0 - 1.15625 * (rn_previo - 11250.0) else: return 0.0 elif anio == 2018: # Régimen Transitorio pre = 3700.0 if rn_previo <= 11250 else (3700.0 - 1.15625 * (rn_previo - 11250.0) if rn_previo <= 14450 else 0.0) post = 5565.0 if rn_previo <= 13115 else (max(0.0, 5565.0 - 1.5 * (rn_previo - 13115.0)) if rn_previo <= 16825 else 0.0) return (pre / 2.0) + (post / 2.0) elif 2019 <= anio <= 2022: if rn_previo <= 13115: return 5565.0 elif rn_previo <= 16825: return max(0.0, 5565.0 - 1.5 * (rn_previo - 13115.0)) else: return 0.0 elif anio == 2023: if rn_previo <= 14047.50: return 6498.0 elif rn_previo <= 19747.50: return max(0.0, 6498.0 - 1.14 * (rn_previo - 14047.50)) else: return 0.0 elif anio >= 2024: if rn_previo <= 14852: return 7302.0 elif rn_previo <= 17673.52: return 7302.0 - 1.75 * (rn_previo - 14852.0) elif rn_previo <= 19747.50: return 2364.34 - 1.14 * (rn_previo - 17673.52) else: return 0.0 return 0.0 p['reduccion_trabajo'] = reduccion_trabajo # Escalas IRPF if anio <= 2014: p['tramos_irpf'] = [(17707, 0.2475), (33007, 0.30), (53407, 0.40), (120000, 0.47), (175000, 0.49), (300000, 0.51), (float('inf'), 0.52)] elif anio == 2015: p['tramos_irpf'] = [(12450, 0.195), (20200, 0.245), (34000, 0.305), (60000, 0.38), (float('inf'), 0.46)] elif 2016 <= anio <= 2020: p['tramos_irpf'] = [(12450, 0.19), (20200, 0.24), (35200, 0.30), (60000, 0.37), (float('inf'), 0.45)] else: p['tramos_irpf'] = [(12450, 0.19), (20200, 0.24), (35200, 0.30), (60000, 0.37), (300000, 0.45), (float('inf'), 0.47)] # Deducción SMI def deduccion_smi(bruto): if anio == 2026: if bruto <= 17094: return 590.89 else: return max(0.0, 590.89 - 0.20 * (bruto - 17094.0)) elif anio == 2025: if bruto <= 16576: return 340.0 elif bruto <= 18276: return max(0, 340.0 - 0.20 * (bruto - 16576.0)) return 0.0 p['deduccion_smi'] = deduccion_smi return p # ============================================================================= # 3. GENERACIÓN DE HOJAS DE CONTROL DE PARÁMETROS # ============================================================================= def generar_hojas_control(): general = [] tramos_lista = [] for anio in range(2012, 2027): p = obtener_parametros(anio) tipo_emp = sum(x[0] for x in p['ss_tipos'].values()) tipo_tra = sum(x[1] for x in p['ss_tipos'].values()) general.append({ "Año": anio, "Base Máx. Anual": p['base_max'], "SS Empleador %": round(tipo_emp * 100, 2), "SS Empleado %": round(tipo_tra * 100, 2), "MEI Empleador %": round(p['mei'][0] * 100, 3), "MEI Empleado %": round(p['mei'][1] * 100, 3), "Gastos Fijos Art.19": p['gastos_fijos'], "Mín. Contribuyente": p['irpf_minimo'], "Mín. Exento Retención": p['minimo_exento'], "Art.20 Umbral Inf": p['art20_meta']['U_Inf'], "Art.20 Red. Máxima": p['art20_meta']['R_Max'], "Art.20 Umbral Sup": p['art20_meta']['U_Sup'], "Art.20 Red. Mínima": p['art20_meta']['R_Min'] }) for i, (lim, tip) in enumerate(p['tramos_irpf']): tramos_lista.append({ "Año": anio, "Nº Tramo": i + 1, "Hasta Base": lim if lim != float('inf') else "En adelante", "Tipo %": round(tip * 100, 2) }) return pd.DataFrame(general), pd.DataFrame(tramos_lista) # ============================================================================= # 4. MOTOR DETALLADO (PARA PESTAÑAS ANUALES DAT_YYYY) # ============================================================================= def calcular_cuotas_por_tramo(base_liq, tramos): cuotas_tramos = {f"T{i+1} ({round(tipo*100, 1)}%)": 0.0 for i, (_, tipo) in enumerate(tramos)} cuota_total = 0.0 if base_liq <= 0: return cuotas_tramos, cuota_total lim_ant = 0.0 for i, (lim, tipo) in enumerate(tramos): nombre = f"T{i+1} ({round(tipo*100, 1)}%)" if base_liq > lim: cuota = (lim - lim_ant) * tipo cuotas_tramos[nombre] = cuota cuota_total += cuota lim_ant = lim else: cuota = (base_liq - lim_ant) * tipo cuotas_tramos[nombre] = cuota cuota_total += cuota break return cuotas_tramos, cuota_total def procesar_ano(anio): p = obtener_parametros(anio) # Rango exhaustivo: 0 a 100.000€ de 1€ en 1€ salarios_brutos = np.arange(0, 100001, 1) resultados = [] for bruto in salarios_brutos: base_cotizacion = min(bruto, p['base_max']) exceso_base = max(0, bruto - p['base_max']) tipo_empresa = sum(x[0] for x in p['ss_tipos'].values()) + p['mei'][0] tipo_trabajador = sum(x[1] for x in p['ss_tipos'].values()) + p['mei'][1] cot_empresa = base_cotizacion * tipo_empresa cot_trabajador = base_cotizacion * tipo_trabajador if p['solidaridad'] and exceso_base > 0: tramo1_limite = p['base_max'] * 0.10 tramo2_limite = p['base_max'] * 0.50 exceso1 = min(exceso_base, tramo1_limite) exceso2 = min(max(0, exceso_base - tramo1_limite), tramo2_limite - tramo1_limite) exceso3 = max(0, exceso_base - tramo2_limite) cuota_sol_total = (exceso1 * p['solidaridad'][0][1]) + (exceso2 * p['solidaridad'][1][1]) + (exceso3 * p['solidaridad'][2][1]) cot_empresa += cuota_sol_total * (5/6) cot_trabajador += cuota_sol_total * (1/6) coste_laboral = bruto + cot_empresa rendimiento_previo_sin_fijos = bruto - cot_trabajador red_trabajo = p['reduccion_trabajo'](rendimiento_previo_sin_fijos) rendimiento_neto = max(0, rendimiento_previo_sin_fijos - p['gastos_fijos']) base_imponible = max(0, rendimiento_neto - red_trabajo) cuotas_tramos, cuota_integra = calcular_cuotas_por_tramo(base_imponible, p['tramos_irpf']) cuota_minimo = p['irpf_minimo'] * p['tramos_irpf'][0][1] cuota_teorica = max(0, cuota_integra - cuota_minimo) deduccion = p['deduccion_smi'](bruto) cuota_con_deduccion = max(0, cuota_teorica - deduccion) limite_retencion = max(0, (bruto - p['minimo_exento']) * 0.43) irpf_final = min(cuota_con_deduccion, limite_retencion) salario_neto = bruto - cot_trabajador - irpf_final fila = { "Salario Bruto": bruto, "Cot. Soc. Empresa": round(cot_empresa, 2), "Coste Laboral": round(coste_laboral, 2), "Cot. Soc. Trab.": round(cot_trabajador, 2), "Ren. Previo": round(rendimiento_previo_sin_fijos, 2), "Gastos Fijos": p['gastos_fijos'], "Red. Ren. Trab.": round(red_trabajo, 2), "Base Imponible": round(base_imponible, 2) } for k, v in cuotas_tramos.items(): fila[k] = round(v, 2) fila.update({ "Cuota Íntegra": round(cuota_integra, 2), "Cuota Mínimo Personal": round(cuota_minimo, 2), "Cuota Teórica": round(cuota_teorica, 2), "Deducción SMI": round(deduccion, 2), "Cuota tras SMI": round(cuota_con_deduccion, 2), "Límite 43% (Art 85.3)": round(limite_retencion, 2), "IRPF Final": round(irpf_final, 2), "Salario Neto": round(salario_neto, 2) }) resultados.append(fila) return pd.DataFrame(resultados) # ============================================================================= # 5. MOTOR RÁPIDO PARA COMPARATIVA INFLACIÓN # ============================================================================= def calcular_nomina_agregada(bruto, anio, p): base_cot = min(bruto, p['base_max']) exc_base = max(0, bruto - p['base_max']) t_emp = sum(x[0] for x in p['ss_tipos'].values()) + p['mei'][0] t_tra = sum(x[1] for x in p['ss_tipos'].values()) + p['mei'][1] cot_emp = base_cot * t_emp cot_tra = base_cot * t_tra if p['solidaridad'] and exc_base > 0: l1, l2 = p['base_max']*0.1, p['base_max']*0.5 e1, e2, e3 = min(exc_base, l1), min(max(0, exc_base-l1), l2-l1), max(0, exc_base-l2) q_sol = (e1*p['solidaridad'][0][1]) + (e2*p['solidaridad'][1][1]) + (e3*p['solidaridad'][2][1]) cot_emp += q_sol * (5/6); cot_tra += q_sol * (1/6) coste_lab = bruto + cot_emp rn_previo = bruto - cot_tra red20 = p['reduccion_trabajo'](rn_previo) base_imp = max(0, rn_previo - p['gastos_fijos'] - red20) q_integra = 0.0 lim_ant = 0.0 for lim, tipo in p['tramos_irpf']: if base_imp > lim: q_integra += (lim - lim_ant) * tipo lim_ant = lim else: q_integra += (base_imp - lim_ant) * tipo break q_min = p['irpf_minimo'] * p['tramos_irpf'][0][1] q_teorica = max(0, q_integra - q_min) q_smi = max(0, q_teorica - p['deduccion_smi'](bruto)) lim_ret = max(0, (bruto - p['minimo_exento']) * 0.43) irpf_final = min(q_smi, lim_ret) return coste_lab, cot_emp, cot_tra, irpf_final, bruto - cot_tra - irpf_final def generar_comparativa_inflacion(): # Análisis comparativo en saltos de 1.000€ salarios_2026 = np.arange(15000, 100001, 1000) p_2026 = obtener_parametros(2026) ref_2026 = {b: calcular_nomina_agregada(b, 2026, p_2026) for b in salarios_2026} resultados = [] for anio in range(2012, 2027): p_anio = obtener_parametros(anio) inf_acum = INFLACION_A_2026[anio] for bruto_26 in salarios_2026: bruto_nom = bruto_26 / inf_acum c_lab_n, c_emp_n, c_tra_n, irpf_n, neto_n = calcular_nomina_agregada(bruto_nom, anio, p_anio) c_lab_aj = c_lab_n * inf_acum c_emp_aj = c_emp_n * inf_acum c_tra_aj = c_tra_n * inf_acum irpf_aj = irpf_n * inf_acum neto_aj = neto_n * inf_acum neto_2026_real = ref_2026[bruto_26][4] dif_poder_adq = neto_aj - neto_2026_real resultados.append({ "Año a Comparar": anio, "Salario Equivalente (2026)": bruto_26, "Multiplicador IPC Acum.": round(inf_acum, 4), "IPC Acumulado (%)": f"{round((inf_acum - 1)*100, 2)}%", "Salario Bruto Nominal": round(bruto_nom, 2), "Coste Lab. (Euros 2026)": round(c_lab_aj, 2), "SS Emp. (Euros 2026)": round(c_emp_aj, 2), "SS Tra. (Euros 2026)": round(c_tra_aj, 2), "IRPF (Euros 2026)": round(irpf_aj, 2), "Neto Real en su Año": round(neto_aj, 2), "Neto Real en 2026": round(neto_2026_real, 2), "Variación Poder Adquisitivo Mensual vs 2026 (12 pagas)": round(dif_poder_adq / 12, 2), "Pérdida/Ganancia Anual Poder Adq.": round(dif_poder_adq, 2) }) return pd.DataFrame(resultados) # ============================================================================= # 6. EJECUCIÓN MAESTRA Y GENERACIÓN DEL EXCEL COMPLETO # ============================================================================= nombre_fichero = 'Auditoria_Integral_Nominas_e_Inflacion_2012_2026.xlsx' print("Iniciando la creación del mega-archivo Excel. ¡Paciencia, puede tardar un par de minutos!...") with pd.ExcelWriter(nombre_fichero, engine='openpyxl') as writer: # 1. Pestañas de Parámetros de Control print("Generando hojas de control normativo...") df_gen, df_tra = generar_hojas_control() df_gen.to_excel(writer, sheet_name='CONTROL_GENERAL', index=False) df_tra.to_excel(writer, sheet_name='CONTROL_TRAMOS_IRPF', index=False) # 2. Pestaña Comparativa Inflación print("Calculando y generando comparativa ajustada por IPC...") df_comparativa = generar_comparativa_inflacion() df_comparativa.to_excel(writer, sheet_name='COMPARATIVA_INFLACION', index=False) # 3. Pestañas Anuales Detalladas (de 1€ en 1€) for anio in range(2012, 2027): print(f"Calculando nóminas detalladas para el año {anio} (100.001 registros)...") df_ano = procesar_ano(anio) df_ano.to_excel(writer, sheet_name=f'DAT_{anio}', index=False) print(f"\n¡Éxito total! Archivo '{nombre_fichero}' creado correctamente con todas las auditorías solicitadas.")
Español
74
446
1.9K
237.6K
Pedro Cova
Pedro Cova@pcova2004·
@BenzalGlez @gonzalodowney La oposición repite la narrativa del supuesto fraude electoral aunque el Pdte.Trump afirma que MCM no tiene el apoyo ni respeto dentro del país para ser presidenta. Lo cómico es que no presentaron las pruebas ante el TSJ de Vzla sino que la guardaron en el Banco Central de Panamá
Español
1
0
0
53
Gonzalo Downey
Gonzalo Downey@gonzalodowney·
La derrota de Viktor Orbán en Hungría demuestra que hasta la derecha más dura, cuando pierde las elecciones, lo acepta y entrega el poder, algo que no puede decir la izquierda, en ninguno de los cinco continentes.
Español
981
2.8K
13.4K
570.4K
Pedro Cova
Pedro Cova@pcova2004·
@BenzalGlez @gonzalodowney Si desconoce la constitución de un país no debería opinar. La Presidenta (E) de Vzla, Delcys Rodríguez, ejerce el cargo de encargada porque era vicepresidente de un Presidente Electo; Nicolás Maduro. Protestas si hay pero con cultura política porque el Chavismo sigue gobernando.
Español
1
0
0
28
Martín Benzal (Glez) retweetledi
Jon González
Jon González@Jongonzlz·
❌ NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO ❌ El presupuesto del Plan Vivienda es a 5 años. 1.400M€ al año. Se destinará anualmente entre 2026 y 2030 el equivalente a un promedio de 2 días y 21 minutos de pensiones. DOS DÍAS Y VEINTIÚN MINUTOS
Vozpópuli@voz_populi

🏘 El presupuesto del Plan de Vivienda equivale a 'solo' medio mes de gasto en pensiones ✍ Por Blanca Martínez vozpopuli.com/economia/inmob…

Español
50
1.5K
5.5K
484.7K