Vicente Zafrilla

4.5K posts

Vicente Zafrilla banner
Vicente Zafrilla

Vicente Zafrilla

@vicentinvs

Researcher and consultant on tech regulation, intellectual property and (open) innovation. Read, ask, form an opinion and restart again 🌻

Присоединился Ağustos 2015
516 Подписки301 Подписчики
Vicente Zafrilla ретвитнул
Jaime Gómez-Obregón
Jaime Gómez-Obregón@JaimeObregon·
Hacedlo viral, por favor. No se me ocurre otra forma de mover adelante el país que contestar a cada ñapa con un escándalo. «Progreso por escarnio», se estudiará en los libros… 😩
Jaime Gómez-Obregón@JaimeObregon

👋 Hola, Ministerio de Transformación Digital, @mintradigital: 👋 Hola, Secretaría de Estado, @SEtelecoGob: Autofirma es un componente esencial de la Administración Electrónica española. Millones lo utilizamos para relacionarnos con la Administración. No por placer, sino porque es ✨requisito✨. ----8<----8<----8<----8<----8<----8<---- El paquete de Autofirma que distribuís para Mac no cumple las garantías de seguridad modernas (notarización), así que el sistema dice que es malware que puede dañar el sistema y rechaza instalarla. 😃🔫 ----8<----8<----8<----8<----8<----8<---- 🤦 Para instalarla hay que —ojo al dato— desactivar las políticas de ciberseguridad del sistema operativo. 🤦 ¡Hola, @INCIBE! Hacéis campañas fabulosas para concienciar a la ciudadanía de los riesgos de ciberseguridad, pero luego nos enjaretáis —el Estado— marrones como este. ¿Podéis hacer algo, por favor? Respetado ministro @oscarlopeztwit: Respetada secretaria de Estado @mariagv: — Si hacéis software, cumplid los estándares modernos de empaquetado y distribución de software. — Si no podéis notarizar Autofirma, modernizad la arquitectura del programa para que se pueda. — Si no podéis modernizar Autofirma, necesitamos un Ministerio para la Transformación del Ministerio de la Transformación Digital. Esto es lo que ve un usuario al intentar instalar Autofirma en un Mac:

Español
23
467
874
42.7K
Vicente Zafrilla ретвитнул
Jon González
Jon González@Jongonzlz·
¿Cuántas visualizaciones podemos conseguir en España en un tuit en el que he pegado a lo bruto un chorro de lineas de código con cálculos de IRPF?
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
9
90
538
21.8K
Vicente Zafrilla ретвитнул
Jon González
Jon González@Jongonzlz·
Ha llegado el momento. Hoy, a igualdad de salario real, todos los trabajadores pagan más IRPF que en 2019. No es una opinión: son los datos. La inflación ha empujado a millones de personas en España a pagar más sin ganar más en términos reales. Deflactar el IRPF no es una cuestión ideológica; es justicia fiscal, especialmente con las rentas medias-bajas. Partidos del @ppopular @vox_es @JuntsXCat @eajpnv_eu @coalicion @upn_navarra. Es la hora de olvidarse de las diferencias y unirse por un objetivo común para mejorar la vida de los españoles. Asociaciones @atenea_esp @UnivHesperides @juandemariana @InstitutOstrom @voceslibres_esp @CivismoF. Es el momento de empujar esta medida. Hay que pasar de la 'Proposición no de ley' a una 'Proposición de ley' en el Congreso que deflacte los parámetros del IRPF de forma razonable pero suficiente. Si el Gobierno se escuda en el artículo 134.6 CE para no negociarla, amenazar con una moción de censura. Tenéis los números.
Jon González tweet media
Español
143
3.1K
7.3K
897.1K
Vicente Zafrilla ретвитнул
Gerard
Gerard@Gsnchez·
Os comento algunos resultados preliminares: 1/ He parseado 126.065 PDFs del BORME desde 2009 hasta hoy. ¿Por qué 2009? Porque ahí cambió el formato del boletín. Antes de eso la estructura es diferente y requiere otras técnicas, pero 2009-2026 cubre la inmensa mayoría de empresas activas hoy. 2/ El problema del cruce: el BORME no publica el CIF de las empresas. Solo el nombre y los datos registrales (tomo, hoja, inscripción). Así que para cruzar con licitaciones toca hacer matching por nombre normalizado: quitar acentos, unificar formas jurídicas (S.L. = SL = Sociedad Limitada), eliminar paréntesis, guiones, etc. Resultado: de 5,9M de adjudicaciones en el PLACSP, 3,8M cruzan con alguna empresa del BORME. Un 64%, que representa 1.482 mil millones de euros en contratos (67% del importe total). El 36% restante son autónomos (personas físicas que no aparecen en el Registro Mercantil), UTEs, y empresas constituidas antes de 2009. 3/ ¿Y las homónimas? Sin CIF, "CONSTRUCCIONES GARCIA SL" en Madrid y en Sevilla son la misma empresa para nosotros. Para medir el problema, analicé los NIFs del propio PLACSP: el 95% de los nombres normalizados corresponden a un único CIF. La homonimia existe pero es baja. 4/ Con ese cruce he buscado 5 tipos de anomalías: Empresa recién creada: constituida menos de 6 meses antes de ganar un contrato público. Salen 16.337 adjudicaciones. Capital ridículo: empresa con menos de 10.000€ de capital social ganando contratos de más de 100.000€. 71.461 adjudicaciones. Multi-administrador: la misma persona aparece como cargo en más de una empresa. 1.052.326 personas. Este flag todavía está crudo — lo interesante será cruzarlo con PLACSP para ver si esas empresas compiten en las mismas licitaciones. Disolución post-adjudicación: la empresa se disuelve menos de un año después de ganar el contrato. 9.928 adjudicaciones. Adjudicación en concurso: empresa en situación concursal recibiendo contratos públicos. 9.655 adjudicaciones. Ninguno de estos flags es una acusación. Crear una SL con 3.000€ de capital es perfectamente legal. Que un administrador esté en 5 empresas también. Son señales que, acumuladas o combinadas, merecen una segunda mirada. 5/ Lo que falta: cruzar los multi-administradores con licitaciones concretas, analizar cambios de cargos alrededor de las fechas de adjudicación, incorporar contratos menores, y buscar fuentes complementarias de CIF para mejorar el matching. Vamos a ello.
Gerard@Gsnchez

A puntito de acabar de parsear los ∼126K PDFs del BORME... ~9M de actos societarios y ~14.5M de cargos extraídos con pdfplumber + regex sobre 17 años de Boletín Oficial del Registro Mercantil. Pronto cruzaremos esto con licitaciones públicas 👀

Español
91
685
2.1K
219.3K
Vicente Zafrilla ретвитнул
Julyoh Ruz
Julyoh Ruz@JulioARuz·
Os voy a contar hasta qué punto ha llegado la corrupción en este país y a qué niveles ha llegado a operar la administración pública para sacarle dinero al ciudadano. Cuando realizas un cambio de titularidad de un vehículo, te dan una autorización provisional para circular durante 30 días. Si pasa ese tiempo y no te ha llegado el permiso de circulación, tienes dos opciones: exponerte a la sanción o solicitar una copia de dicho permiso POR EXTRAVÍO. Tú no has extraviado nada, en todo caso, quienes tienen la obligación legal de custodiar la documentación, es decir, la @DGTes , es quien ha sido negligente en su custodia. Pues bien, solicitar el duplicado supone pagar una nueva tasa de 20€. Ahora viene lo mejor. Cuando se presenta una queja, la respuesta es que hay algún dato erróneo en la dirección que tú has proporcionado, pero oh casualidad, oh terrible destino, la sanción x no llevar el permiso de circulación si llega sin problema. Es la mafia institucional…
Español
8
221
671
41.1K
Vicente Zafrilla ретвитнул
Jon González
Jon González@Jongonzlz·
Algunos ejemplos: Chaval 3 años encadenando temporales --> lo echan --> indemnización ridícula. Con mochila habría acumulado algo desde el día 1. Trabajador con 12 años quiere cambiar de empresa --> no se mueve porque "pierde la indemnización". El sistema actual penaliza la movilidad. Pyme quiere contratar indefinido --> miedo al coste incierto si sale mal. Resultado: temporalidad. Dualidad otra vez. Despido --> juicio --> años de lío --> nadie sabe cuánto toca pagar/cobrar. Sistema caro e imprevisible. Persona que nunca es despedida --> 40 años trabajando --> indemnización: cero. Con mochila ese dinero sería suyo al jubilarse. El modelo actual no protege más. Protege a unos mucho y a otros casi nada.
Español
35
215
903
33.3K
Vicente Zafrilla ретвитнул
Matriz2x2
Matriz2x2@matriz2x2·
CPS + CIENCIA DEL SUEÑO Lanzo idea liminal a @Recuenco Tesis: El cerebro humano pasa 8 horas al día expuesto a un entorno de máxima incertidumbre: los sueños. Estudiar cómo lo gestiona podría conducir a nuevas incorporaciones al corpus del meta toolkit cognitivo del CPS
Matriz2x2 tweet media
Español
2
7
33
6.3K
Vicente Zafrilla ретвитнул
Froilán I de España 🇪🇸
Froilán I de España 🇪🇸@FroilLannister·
Los Ministros de Sánchez, que no deben estar contentos con su sueldo que les pagamos todos también han decidido que tenemos que pagarles el desplazamiento de fin de semana desde Madrid a sus lugares de origen. Ese es el respeto que tienen los “progresistas” al uso de lo público.
Español
38
674
1.9K
40.5K
Vicente Zafrilla ретвитнул
Jaime Gómez-Obregón
Jaime Gómez-Obregón@JaimeObregon·
Ya no es solo la frustración, respetado ministro @oscarlopeztwit; son los miles o decenas de miles de horas improductivas que, como país, nos infligen los servicios públicos digitales cuando no funcionan bien. Por favor 🙏, interésese por el asunto. Muchas gracias.
Borja Pascual@BorPascAl

Los que trabajamos con ello a Diario, estamos hasta un puñetero sitio de la lentitud y las caídas del portal. La única web que no falla es la de Hacienda. Poco a poco y después de golpe.

Español
7
76
280
14.9K
Vicente Zafrilla ретвитнул
David Criado
David Criado@vorpalina·
En fin, me dejo a mucha gente, pero solo quería probaros con ejemplos reales que existe todo un movimiento real de estudio, tributo y conversación sobre los grandes temas de la humanidad, con el ánimo de no quedarse en el utilitarismo vacío y el corto plazo posmoderno.
Español
1
1
11
799
Vicente Zafrilla ретвитнул
Wall Street Wolverine
Wall Street Wolverine@wallstwolverine·
Merz: “Debemos desregular todos los sectores. Pido un borrón y cuenta nueva regulatoria. Las pequeñas correcciones legislativas no son suficientes. Necesitamos revisar sistemáticamente toda la legislación vigente de la UE”
Español
322
1.2K
5.6K
279.6K
Vicente Zafrilla ретвитнул
Vicente Zafrilla ретвитнул
David Criado
David Criado@vorpalina·
ASCENSOR SOCIAL Una sociedad desarrollada es una sociedad con clase media amplia y estable La del s.XX se sustentaba sobre 3 ascensores sociales: • Educación pública • Derechos laborales y Estabilidad laboral • Bienestar accesible: vivienda, bienes, movilidad Abro hilo 🧵
David Criado tweet media
Español
1
2
7
616
Vicente Zafrilla ретвитнул
José Luis Antúnez
José Luis Antúnez@jlantunez·
Todo son efectos especiales. Todo es una pantomima que saldrá cara. Subir SMI, subvenciones para... Es de manual. Todos los gobiernos lo hacen con más o menos descaro en esta situación. Todo es patada pa'lante.
Fernando Garea@Fgarea

La petición a los ministerios de propuestas que no pasen por el Congreso provocó tensión en una reunión en la Moncloa La reunión se "agrió" cuando los ministerios plantearon iniciativas sin 'punch' político como la celebración del bicentenario de Goya elespanol.com/edicion/202512…

Español
3
8
31
7K
Vicente Zafrilla ретвитнул
Jon González
Jon González@Jongonzlz·
Ahora también cabría preguntarse por qué el trabajador promedio español tiene que tener una cuña fiscal promedio de la UE, cuando el salario promedio comparable en la UE es inferior y el IRPF es progresivo. Aquí con el ejemplo de Dinamarca. Con una cuña fiscal inferior y un salario un 80% superior x.com/i/status/19270…
Español
2
11
48
5.5K
Vicente Zafrilla ретвитнул
Volodymyr Zelenskyy / Володимир Зеленський
Russia is at it again, using dangerous statements to undermine all achievements of our shared diplomatic efforts with President Trump's team. We keep working together to bring peace closer. This alleged "residence strike" story is a complete fabrication intended to justify additional attacks against Ukraine, including Kyiv, as well as Russia’s own refusal to take necessary steps to end the war. Typical Russian lies. Furthermore, the Russians have already targeted Kyiv in the past, including the Cabinet of Ministers building. Ukraine does not take steps that can undermine diplomacy. To the contrary, Russia always takes such steps. This is one of many differences between us. It is critical that the world doesn’t stay silent now. We cannot allow Russia to undermine the work on achieving a lasting peace.
English
2.5K
8.6K
34.9K
1.6M