Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
A Modern Compiler for the French Tax Code (2020) (arxiv.org)
189 points by sebg on Jan 30, 2023 | hide | past | favorite | 49 comments


I wish the state officially makes their income tax calculation available as machine-executable open-source software in an industry-standard language. For example, a Python function that takes a dictionary of inputs (gross income, number of dependents, capital gains, etc.) and produces a dictionary of outputs (federal tax, state tax, rebates, contribution limits, etc.).

This would solve many problems: The verbosity and ambiguity of human language (tax laws, tax calculation forms in English), the ability to inspect and independently verify calculations done by the state, the rent-seeking tax preparation software companies.

Here is my own feeble demonstration of the idea: https://www.nayuki.io/page/a-math-programming-view-of-canada...

Even if the state has its own online portal for you to review and adjust your tax return, I still want to see the full tax code be open source and runnable by the user.


> This would solve many problems: The verbosity and ambiguity of human language (tax laws, tax calculation forms in English)

1. It would not, the tax law remains the spec.

2. France does provide an executable encoding of the tax code, TFA is literally a compiler for that.

3. France started to do so circa 2016 (https://joinup.ec.europa.eu/collection/egovernment/document/...) after losing a FOIA-type case, though feelers had already been sent as a governmental agency (CAS) is at the root of OpenFisca (https://openfisca.org/), and by then the prime minister's data sharing and coordination office (etalab) had started using and contributing to it (https://openfisca.org/doc/manifest-history.html)

4. You can use OpenFisca to encode your own country's tax law, or lobby for your country to encode its tax law there (https://openfisca.org/en/packages/).


> 1. It would not, the tax law remains the spec.

Unless you rewrite the law to make the code the spec. Indeed, code is probably a better medium for unambiguously communicating calculations.

> 2. France does provide an executable encoding of the tax code, TFA is literally a compiler for that.

But other countries might not do so.

> 4. You can use OpenFisca to encode your own country's tax law, or lobby for your country to encode its tax law there (https://openfisca.org/en/packages/).

This would be amazing!


> Indeed, code is probably a better medium for unambiguously communicating calculations.

Ambiguity and obfuscation are usually intentional. Legislators and individual citizens do not necessarily have the same interests. This is why omnibus bills exist.


Laws (in the US anyway) are "ambiguous" because they can't be changed very often, so implementing regulations are left to the executive branch, and the judicial branch can edit either one however they feel like anyway and aren't programmers.


Yeah I think the slight nuance that some people miss is that many of the regulations in place are interpretations and implementations of more ambiguous laws.

And they are updated quite frequently and implemented quite programmatically!

But the laws also remain ambiguous because the world is an ambiguous place with a lot of edge and corner cases with unforeseen knock on effects.


Definitely agree. Having lawmakers micromanage everything would be a pain.

That said, one would hope

1) the tax code would be one of the least open-to-creative-interpretation parts of the system

2) the IRS equivalent could actually produce this code, rather than legislators


I think the US actually has the preferable solution, which is that it's not a crime to do your taxes wrong. (Most people think it is.)


Openfisca started a bit earlier, in 2011.


Yep, I fixed the timeline a bit after checking out the history page, as my original memories were incorrect. I guess because I'd first heard of openfisca around the time of the lawsuit.


It is my understanding that before it became an Etalab project, it was quite obscure.


While this could help with the mechanical calculations and preparation of returns, the wider point about ‘verbosity and ambiguity of human language’ can’t be nearly so easily dealt with outside the simplest cases, and would likely make the tax code /harder/ for people concerned to interpret and reason about, which is probably the opposite of the desired result.

Firstly the actual text of the law must be as legislated.

Secondly, law and most certainly tax law is necessarily nuanced in interpretation and the consequences for taxpayers and the government are material (to use a relatively simple and well-known British case, a machine-executable model would be unhelpful in determining whether Jaffa Cakes should be taxed for VAT as biscuits, or exempt as cakes. Then ask about chocolate chip cookies (zero rated) vs chocolate digestives (taxed!)). Stuff like this and more is argued about all the time.


> a machine-executable model would be unhelpful in determining whether Jaffa Cakes should be taxed for VAT as biscuits, or exempt as cakes.

You can have these definitions remain vague and still have an algorithm that is well defined over pre-labeled data. The purely mechanical steps based on arithmetic could (and should!) be defined as machine-parseable code or formulas.


Well, there's also that law which mandates that any algorithm used in an administrative decision must be explained in simple language upon request... but I am not certain that "administrative decisions" also covers the tax code ? (Though frankly, it should.)


There's considerable complexity in working out, for example, Australian personal income tax given a person's tax return (and assuming no dishonesty or error in it). I've seen mere approximations reach thousands of lines of C.


That's why you should keep things as simple as possible and avoid exceptions and special cases, which legislators are experts at creating in tax codes.

In your example this is because someone argued that staple food should not be taxed. Right, what is staple food? Obviously they decided that biscuits were but not cake. Pandora box is opened as soon as you allow any special cases.


How would you encode trillions of possible permutations of special cases?


Does Excel count as open source and industry standard? Because if so, the UK has a giant tax spreadsheet you can put your data in and get tax owed: https://assets.publishing.service.gov.uk/government/uploads/...

This document is the source of truth for tax calculations so it'll always give you the right answer.


What a nightmare. Makes my i7 smoke with LibreOffice.

Better than nothing though.


Too good to be true.


The French "income tax" (which, confusingly, is only one of the several taxes on income in France, and not the largest) is open source (https://gitlab.adullact.net/dgfip/ir-calcul).

There's also the OpenFisca project (https://openfisca.org/en/) which is a Python framework for coding tax and benefit system - France being the most complete - which is used in many things, like a web app to see which benefits you might be eligible to (https://www.mesdroitssociaux.gouv.fr/accueil/) or the French National Assembly tool to compute the effects of changing tax law (https://socio-fiscal.leximpact.an.fr/).


Germany kind of does.

They publish all the diagrams for income tax calculation, if you can decipher them. It takes a while but you get it right eventually.

This is how I built my income tax calculator and keep it updated.


Where one can find these diagrams?



It would also allow people to re-use ML optimizers to get the highest tax returns!


I would accept just the test suite! For a given set of inputs here is your tax owed.


Two of these authors are also two of the creators of the Catala programming language, which is "a domain-specific programming language designed for deriving correct-by-construction implementations from legislative texts." (https://catala-lang.org/en/).

Other publications in this area can be found at https://catala-lang.org/en/publications.


The FOIA request ("demande CADA") that led to publication of the French IRS ("DGFIP") software that computes taxes is here:

https://cada.data.gouv.fr/20144578/

Court ruling:

https://www.april.org/files/20160216-jugement-tribunal-admin...

Some history:

https://www.april.org/le-tribunal-administratif-valide-lavis...


The year is 2030, after developing unrest the world government has decided the best way to subdue the population is to make taxes even more complicated. Entire family units are formed around starting on the years taxes 13 months before the next tax season, any attempt to simplify tax is killed by the turbotax lobbyists, who boast a legendary 11 month taxes turnaround. Paper supply is at an all time low due to economic returns, and most crime is centered around illegal paper trade in order to file a paper return, and avoid the automatic audit on any virtual returns submitted.


Another huge French "tax" set is the social contributions, that makes our payrolls quite complex.

Computing payrolls is handled by the private sector, contrary to the case of the income tax.

But the French administration develops an open source set of online simulators :

https://mon-entreprise.fr

This is the source code of the underlying "tax" rules :

https://github.com/betagouv/mon-entreprise/tree/master/model...

Is uses an open source specific language that frames the writing of simple calculation rules, auto-generates an online documentation for non-developers and helps developers build automatic UIs.

It is unfortunately not yet translated for English speakers and developers.

https://publi.codes


The paper is fascinating from a compilers + VM perspective.

Short video summary: https://youtu.be/ES7fkec3Jv8


The old implementation didn't age well, but a newly invented language that 2 people understand will age much better.


Wow the old version is only 92K lines of M code.


> which unlike French wine, did not age well with time. :chefkiss:


Is the logic for such calculations known for the US? What about the UK?


Given that you know to apply a specific tax rule, the logic is formalized for the US. The problem is knowing when a specific tax rule applies to a given tax situation. In general, the IRS has an opinion — and not matching their opinion can land you in an audit — but the nuts-and-bolts application is still an interpretation. The IRS is, in my experience, pretty flexible with their interpretation. While individual auditors can have their hands tied with respect to fines/fee-schedules, I've always found them easy to work with, and knowledgeable. The last time I was audited, I ended up starting with a $220 fine; however, the auditor requested I review the previous several years of returns (for the same class of error), and I ended up getting a substantial check.


(2021)


From the article:

Unlike, say, the United States, the French system relies heavily on automation. During tax season, French taxpayers log in to the online tax portal, which is managed by the state. There, taxpayers are presented with online forms, generally pre-filled. If applicable, taxpayers can adjust the forms, e.g. by entering extra deductions or credits. Once the taxpayer is satisfied with the contents of the online form, they send in their return. Behind the scenes, the IR algorithm is run, and taking as input the contents of the forms, returns the final amount of tax owed. The taxpayer is then presented with the result at tax-collection time.


Nowadays, some people (like if they just have French salaries and no tax breaks) can even not look at it at all and their automatic filling will be automatically accepted


Same in Germany, although almost everybody is entitled to something. This must be why you get a default amount deducted for certain things. It must prevent labor-intensive tax declarations for very small refunds.

I built a tax calculator for English speakers, and highlighting that is next on my todo list. Many people pass up on significant returns, especially parents.


Right, I don't really know how it is in other countries, but in France, the subsidies for poor people (that's obviously a shortcut and is more complicated) don't go through income tax but other systems. There is only one thing that applies to everyone which is work-related expanses (like the fuel cost to go to your work), but which has a 10% rebate if you don't declare anything, so you declare only if it's higher than that.

I would guess maybe 20% of people can go through the fully automatic part, but I have no source for that.


Same thing in the Netherlands, if you're a regularly employed person you usually just click 'next' a few times.


But we didnt develop our own programming language to do this though.


The Dutch tax authority has developed RegelSpraak a controlled natural language for defining tax rules that is also formally specified and compilable to several targets.

There is a video of the team presenting how they built the DSL for tax rules in the JetBrains MPS language workbench from the MPS conference.

Case study:

https://resources.jetbrains.com/storage/products/mps/docs/MP...

Video:

https://m.youtube.com/watch?v=_-XMjfz3RcU


The system is the same in the UK, for people who have to do Self-Assessment.


UK taxes are much simpler than French ones.

In France everything is complicated with a huge number of taxes and rules.

In the UK, if you are employed you don't have to do anything. Income tax and National Insurance are calculated and taken at source automatically. Your other tax is the local Council tax, which is also simple and can be paid automatically.


> Council tax, which is also simple and can be paid automatically.

Helpfully my local council resets your enrollment or automatic payments each year, leading one to forget about them until you get a big nasty letter in the mail.


too bad the website is just a copy of the old paper forms in HTML form... Well at least I prefer using the website that to actually filling a paper form! (and being online make it easier to submit corrections if needed)


y no solidity




Consider applying for YC's Summer 2026 batch! Applications are open till May 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: