1 puntos por GN⁺ 2024-01-04 | 1 comentarios | Compartir por WhatsApp
  • Para calcular directamente las deducciones de nómina en Canadá sin usar un servicio externo de nómina, hay que implementar las fórmulas de CPP, EI e impuesto sobre la renta que aparecen en Payroll Deductions Formulas de la CRA
  • En 2024, el Canada Pension Plan pasó a incluir no solo primas básicas y adicionales, sino también second additional premiums, así que hubo que reescribir la hoja de cálculo existente desde cero
  • Como la documentación de la CRA tiene dispersos entre distintas secciones los lugares donde se calculan y se usan los valores, primero se creó un gráfico de dependencias en GraphViz para identificar qué elementos había que calcular
  • El gráfico consta de 79 nodos, desde valores de entrada como “Year's Annual Maximum Pensionable Earnings” de $73,200 en 2024 hasta “Total payroll deductions”
  • Se registraron solo las relaciones de dependencia entre valores, excluyendo las fórmulas en sí, y quedaron fuera del alcance los empleados por comisión, quienes se inscriben o se retiran del CPP, y los residentes de Quebec, Nova Scotia, Yukon y Ontario

La complejidad de calcular directamente las deducciones de nómina de la CRA

  • La Canada Revenue Agency publica periódicamente el documento Payroll Deductions Formulas para el cálculo de deducciones de nómina, y ya va en la edición 119
  • Este documento contiene las fórmulas necesarias para calcular las deducciones de nómina que recauda la CRA
    • Canada Pension Plan
    • Employment Insurance
    • Impuesto sobre la renta
  • Si operas un pequeño negocio en Canadá y no quieres usar un proveedor externo de nómina, necesitas implementar estas fórmulas directamente en una hoja de cálculo
  • Igual que otras partes del sistema tributario, el cálculo de las deducciones de nómina se ha ido volviendo cada vez más complejo, y en 2024 la incorporación de second additional premiums al CPP hizo necesario reescribir la hoja de cálculo

El orden de cálculo organizado con GraphViz

  • El documento de la CRA no permite ver fácilmente de un vistazo qué valores deben calcularse primero
    • Un valor necesario puede calcularse antes o después de donde se usa, así que hay que ir y venir constantemente dentro del documento
  • Para ordenar esto, se elaboró un gráfico de dependencias con GraphViz
  • El gráfico tiene 79 nodos, y el flujo representativo es el siguiente
    • “Year's Annual Maximum Pensionable Earnings”: $73,200 para el año fiscal 2024
    • Nodo final: “Total payroll deductions”
  • El gráfico no incluye las fórmulas en sí; solo registra de qué otros valores depende cada valor
  • Para simplificar el alcance del cálculo, se excluyen los siguientes casos
    • Empleados por comisión
    • Empleados que se inscriben o se retiran del Canada Pension Plan
    • Residentes de Quebec, Nova Scotia, Yukon y Ontario
  • La imagen completa en tamaño original está disponible en payroll.png, y sus dimensiones son 5627x2033

1 comentarios

 
GN⁺ 2024-01-04
Opiniones de Hacker News
  • Es una lástima que el gobierno no proporcione las fórmulas públicas en forma de código.
    Según entiendo, la única forma de procesarlo de manera confiable es usar el formulario web que ofrece la CRA: https://www.canada.ca/en/revenue-agency/services/e-services/...
    Calcularlo a mano es doloroso y propenso a errores.

    • Alemania publica desde hace mucho tiempo, al menos desde la década de 1970, un diagrama de flujo estándar para el cálculo de nómina, con variables y fórmulas con nombre: https://www.bundesfinanzministerium.de/Content/DE/Downloads/...
    • Ojalá hubiera algo parecido para los cálculos de hipotecas.
      Por ejemplo, TD Canada no informa cada vez qué parte del pago se destina al capital. Creo haber hecho bien el cálculo por mi cuenta, pero a menudo difiere por decenas de dólares del saldo que muestra el banco después del pago.
      También es frustrante que en Canadá no se pueda usar una API para obtener los detalles y estados de cuenta.
    • No estoy para nada de acuerdo con que el gobierno deba publicar fórmulas públicas en forma de código.
      Eso equivaldría a entregarle al gobierno un medio para hacerlas tan complejas como sea posible. Los impuestos deberían ser lo bastante simples como para que quien los paga los entienda por completo.
      Que el gobierno no logre equilibrar el presupuesto no justifica que el software se vuelva indispensable para averiguar algo tan básico como las deducciones de nómina.
      Si calcularlo a mano es doloroso y propenso a errores, el problema mayor es que no haya una ley que obligue al gobierno a hacerlo posible también a mano.
    • Francia incluso creó su propio DSL para impuestos: https://github.com/MLanguage/mlang
    • Todas las leyes deberían expresarse como código.
      Así quedaría claro rápidamente cuántas leyes se contradicen entre sí o son inconsistentes.
  • Habiendo trabajado un poco con legislación fiscal, creo que el ciclo de la complejidad tributaria es más o menos así:
    se aprueba una ley fiscal, contadores y abogados tributarios inteligentes encuentran formas legales de reducir impuestos, y la autoridad fiscal emite regulaciones para cerrar esos huecos.
    Cuando cambia el gobierno, baja algunos impuestos o agrega deducciones para ganar votos y ajustar la economía, y el gobierno siguiente revierte selectivamente las políticas del anterior por motivos políticos.
    Si se trata de tributación internacional, se suman técnicas de optimización fiscal entre varias jurisdicciones, incentivos de distintos países para atraer multinacionales, intentos de estandarización de la OCDE y tratados tributarios bilaterales.
    Ej.: Double Irish With a Dutch Sandwich https://www.investopedia.com/terms/d/double-irish-with-a-dut...

    • Esta complejidad no surge por intentar cerrar huecos fiscales. En su mayoría surge porque a los políticos les gusta ponerles nombre a las cosas.
      En Canadá existe desde hace mucho un crédito fiscal llamado “personal amount”, pero en lugar de decir “los primeros $X de ingresos no pagan impuestos”, se implementa como un crédito fiscal no reembolsable equivalente a la tasa mínima × $X.
      Luego se convirtió en “aumentemos el personal amount evitando reducir impuestos al 1% de mayores ingresos”, y ahora existe un personal amount que varía según el ingreso.
      La “BC Tax Reduction” de BC también es, a grandes rasgos, una estructura que da un crédito fiscal adicional a quienes ganan entre unos $22k y $36k. Ambas cosas podrían haberse implementado simplemente como tramos impositivos, pero los votantes reaccionan más ante un nombre como “Tax Reduction” que ante un nuevo tramo.
    • Si en el paso 1 se terminara con una tasa única, se podrían evitar estos problemas. Bastaría con aplicarla por igual a todo.
      Habría que eliminar excepciones como trato preferencial a ingresos por inversión, bienes raíces, empresas, o hadas de tres patas que viven en zonas inundables.
      Entonces el mercado podría asignar el esfuerzo humano a las tareas más valiosas.
      La productividad que se desperdicia en este tema es absurda. Millones de personas se dedican a crear, resolver y manipular acertijos complejos, sin que haya evidencia de que esa complejidad sea beneficiosa.
    • Hay un problema en llamar “lagunas” a las excepciones explícitas, partidas específicas, deducciones y créditos fiscales.
      A menudo esos elementos están pensados precisamente para ser usados para evitar tributación. Grupos, individuos y organizaciones hacen lobby ante el gobierno para que sus temas de interés se incluyan como excepciones, deducciones o créditos fiscales.
      Que contadores o abogados tributarios los usen correctamente no es “evadir impuestos legalmente”; es que, para empezar, no eran impuestos que se debieran pagar.
      Para decir que pagar exactamente el impuesto adeudado según la ley es “evitar impuestos mediante lagunas”, habría que partir de la premisa de que todos los ingresos pertenecen al gobierno, y esa premisa es inaceptable.
  • Tuve una pequeña empresa de procesamiento de nómina en Canadá, y la construimos toda en Rails.
    Cada vez que cambiaban las reglas, hacíamos scraping de la calculadora de la CRA, calculábamos para varias provincias y rangos salariales, y hacíamos que los resultados se imprimieran con rspec.
    Así podíamos probar si habíamos reflejado correctamente la normativa y si no habíamos omitido reglas o ingresado valores incorrectos.

  • Hace unos años hice algo parecido para el IRS: https://nampas.github.io/tax-map/

    • Me pregunto si existe un término para un grafo dirigido con disposición circular.
      También me pregunto si todas las aristas son unidireccionales o si hay aristas bidireccionales. Espero que no haya bidireccionales.
  • Este tipo de diagrama es justamente la razón por la que existen los proveedores de procesamiento de nómina.
    Para un artículo relacionado, ver https://www.bitsaboutmoney.com/archive/payroll-providers-pow... de Bits About Money.

    • Aun así, al final son matemáticas, y el gobierno también verifica la estandarización para comprobar que lo presentado por los proveedores de nómina sea correcto.
      Entonces el gobierno debería poder proporcionar ese estándar.
  • Aplausos para el autor
    A estas alturas, la CRA debería publicar la implementación de referencia de todas las fórmulas para que las pequeñas empresas puedan usarla

    • Sería buenísimo que publicaran una hoja de cálculo de LibreOffice
      Incluso si no la publican, estaría bien que al menos la hicieran internamente. Si ellos mismos tuvieran que leer la documentación, es muy probable que la documentación también quedara mucho mejor escrita
    • ¿Por qué harían eso? Si publican todo, todos encontrarían bugs y problemas, y entonces la CRA tendría que hacerse cargo
      También podrían perder muchos ingresos por multas
      En la universidad fui encargado de residencia y recibía comida y alojamiento “gratis”, y cuando declaré impuestos en Canadá por primera vez a los 20 años, subdeclaré unos USD 1,000. Era mi primera declaración de impuestos canadiense como ciudadano estadounidense
      Unos años después me llegó una multa de unos USD 5,500, una cantidad enorme para un estudiante universitario que trabajaba medio tiempo. Ahí me enteré de que BC podía igualar tal cual las multas de la CRA
      Viéndolo en retrospectiva, quizá habría sido mejor no aceptar ese trabajo. Durante el resto del tiempo que viví en Canadá contraté a un CPA
      El IRS, en comparación, se siente cálido y acogedor. Al menos, si cometes un error, la multa es proporcional al monto subdeclarado. Siempre que no seas ultrarrico
    • La CRA no lo va a hacer. No tiene obligación de dar una respuesta clara
    • En otra respuesta apuntaron a este formulario web: https://news.ycombinator.com/item?id=38843556
      No parece ser una hoja descargable, pero al menos hay algo
  • En Francia, este tipo de reglas se ofrece como sitio web, API, paquete de NPM y reglas fuente en el lenguaje https://publi.codes
    https://mon-entreprise.urssaf.fr/développeur

  • “Excluye a residentes de Quebec, Nueva Escocia, Yukón y Ontario”, o sea, básicamente el 75% de Canadá

    • Para ser justos, Nueva Escocia, Yukón y Ontario solo requerirían agregar unos cuantos nodos más
      Simplemente estoy en BC y no quise preocuparme por eso
      Quebec es un problema completamente distinto. Ahí el cálculo de deducciones de nómina es mucho más complejo
    • Quebec es prácticamente casi otro país
      Hay muchísimas reglas y requisitos extraños de RR. HH. que solo aplican en QC
  • Estoy en EE. UU., pero puedo decir con certeza que cosas como estas son aproximadamente la mitad de la razón por la que no he contratado empleados en mi LLC.
    Aunque quisiera contratar, en la práctica sería como contratar también a un contador.

    • Considerando la tendencia del trabajo remoto, hay que mirar con mucha atención la relación entre el estado donde se quiere contratar al empleado y el estado donde está la empresa.
      Algunos estados son un verdadero dolor de cabeza. Por ejemplo, NJ, CA, NY y OH.
      Si te registras en un estado, la empresa puede seguir quedando bajo seguimiento por todo tipo de incumplimientos que ese estado reconozca incluso después de que el empleado se vaya a otro trabajo.
      Por ejemplo, podrías recibir una multa grande por no haber declarado que ya no tienes empleados en ese estado.
      Los estados con los que fue fácil tratar fueron ID, TN y TX.
      En general, por estas razones conviene contratar solo empleados de tu propio estado. Si no es imprescindible, no contrataría.
    • Si estás pensando en contratar desarrolladores o personas involucradas en investigación o experimentación, conviene conocer bien la Section 174.
      Como los costos de desarrolladores deben amortizarse durante 5 años, podrías recibir una factura fiscal enorme. Aplica tanto para empleados como para contratistas.
      Ojalá la deroguen, pero si no, es una disposición que, aunque en palabras del Senator Wyden es “stupid”, nadie esperaba que siguiera existiendo.
      https://www.law.cornell.edu/uscode/text/26/174
      Edición: no se va a derogar. Pero sí podrían crear una ley para ignorarla hasta cierta fecha futura. Una vez que está en los libros, por cuestiones contables es muy difícil eliminar una norma tributaria.
    • Como dicen otras respuestas, las empresas de procesamiento de nómina existen por una razón, y hoy hay muchos servicios que también facilitan el cumplimiento normativo.
      Por ejemplo, muchas empresas pequeñas y medianas que conozco usan Gusto, porque facilita agregar contratistas o empleados.
      No quiero promocionar específicamente a Gusto; si buscas, hay muchos servicios competidores. No es gratis, pero al ser un modelo SaaS tiene la ventaja de que puede empezar con un costo por empleado y escalar junto con la empresa.
    • Si el problema no es la complejidad contable por costos adicionales sino el cálculo de la nómina, incluso para empleo nacional puedes contratar mediante remote.com o deel.com.
      Eso aplica cuando el empleado es asalariado o trabaja como contratista independiente. Pero en ese caso no es realmente un empleado.
      Una empresa de empleo de registro garantiza el cumplimiento de las leyes locales y cobra el costo total del empleado más una comisión de servicio.
    • Si el problema es calcular y remitir la nómina a las agencias federales y estatales, eso no tiene por qué ser una barrera en absoluto.
      Hay innumerables servicios de nómina que calculan y remiten por entre $30 y $50 al mes por empleado. Para el procesamiento normal de nómina no hace falta necesariamente un contador.
  • Esto muestra cómo funciona cualquier algoritmo, independientemente de si es software o no.
    Si empiezas con algo deseable o necesario y sigues agregando complejidad, terminas con un desastre que produce resultados arbitrarios, vuelve locos a los externos y, si se lee como un conjuro, hasta puede invocar a un demonio menor.
    La solución obvia que viene a la mente es la refactorización. Esa tarea que los políticos prometen en campaña y que los desarrolladores junior exigen cuando se encuentran con una nueva base de código.
    Pero en la práctica casi nunca ocurre, porque nadie puede distinguir con claridad qué funcionalidades y complejidades son innecesarias y cuáles fueron intencionales.
    La segunda solución es implementarlo limpiamente dentro de un marco más formal, como un lenguaje de tipos estáticos o un demostrador de teoremas. Pero si el sistema en sí ya es contradictorio, este intento también suele fracasar.
    Por suerte, a nadie le importan los “casos límite raros” y todo se deja así hasta que alguien se fuga con alrededor de un millón de dólares.

    • En realidad, la CRA y los gobiernos federales recientes han hecho mucho por simplificar los impuestos de Canadá. Hoy son mucho más simples. Claro que esta parte de la nómina es la excepción.
      Hace 10 o 15 años había montones de créditos especiales de todo tipo para comprar votos.
      Hoy, si no tienes trabajo por cuenta propia ni inversiones en el extranjero y eres un asalariado común, declarar impuestos es algo trivial y casi automatizado.
      La mayor parte de la complejidad del gráfico anterior parece deberse a que Canadá es un país con un federalismo fuerte, por lo que cada provincia tiene competencias y excepciones relacionadas. A eso se suman el seguro de empleo y el sistema de pensiones federales.