Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

Opening up the French tax software

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Chargement dans…3
×

Consultez-les par la suite

1 sur 28 Publicité

Plus De Contenu Connexe

Similaire à Opening up the French tax software (20)

Plus par Etalab (20)

Publicité

Plus récents (20)

Opening up the French tax software

  1. 1. Opening up the French tax software http://www.openfisca.fr/ https://framagit.org/openfisca https://github.com/openfisca @OpenFisca Michel Blancard michel.blancard@data.gouv.fr PyData – June 14, 2016
  2. 2. I - What is OpenFisca?
  3. 3. Legislation It's growing! In French (that most French people don't understand), not in python! Notices Bulletin Officiel des Finances Publiques-Impôts (BOFiP) Décrets How to compute the French tax and benefits?
  4. 4. It's complex! 4 How to compute the French tax and benefits?
  5. 5. It's complex, because the reality is complex. Individuals Housing Family Taxation How to compute the French tax and benefits?
  6. 6. OpenFisca aims to : ● cover both tax and benefits policies ● be efficient ● one family simulation ● simulation on the whole country ● be understandable ● be open source What is OpenFisca?
  7. 7. OpenFisca is used for : ● improving readability to the public ● designing reforms ● simulating one's situation ● understanding the tax and social system mes-aides.gouv.fr Why compute the French tax and benefits?
  8. 8. OpenFisca is used for : ● improving readability to the public ● designing reforms ● simulating one's situation ● understanding the tax and social system How to compute the French taxes ? tax difference between/after marriage
  9. 9. OpenFisca is used for : ● improving readability to the public ● designing reforms ● simulating one's situation ● understanding the tax and social system How to compute the French taxes ? personal simulation ui.openfisca.fr
  10. 10. OpenFisca is used for : ● improving readability to the public ● designing reforms ● simulating one's situation ● understanding the tax and social system How to compute the French taxes ? tax percentage as a function of income
  11. 11. The history of OpenFisca 2011 2014 2016 2 economists python scripts with QT frontend 2 developers join the project tax calculator of the tax administration released increasing demand for an open simulator OpenFisca reaches the sky and beyond... (see later) France Stratégie France Stratégie IPP Etalab
  12. 12. II – The French tax calculator
  13. 13. ● direct demand (aug 2014) ● 6 months later : seisine of the CADA ● 2 months later : positive notice from the CADA ● 2 months later : beginning of judicial proceedings ● 10 months later : release of the source code ! ● 10 months later + ε : the court issues a positive decision The quest for the source code (want to speed up the process ? → ouvre-boite.org)
  14. 14. ● April 1-2, 2016 at the Mozilla Fundation ● presence of 3 Ministers ● developers, civil servants, economists, citizens... all sitting at the same table ! A hackathon to celebrate : CodeImpôt
  15. 15. Preparation by Etalab and DGFiP : ● understand the Domain Specific Language (DSL) : M ● parse using Clean PEG (Igor Dejanović's Arpeggio) ● simplify the Abstract Syntax Tree (AST) → Direct Acyclic Graph of trees Preparation regle 10214: application : iliad,batch ; CSGAC = max(0,CSGC ­ CICSG); CSNET = max(0,(CSGC + PCSG ­  CICSG ­ CSGIM)) ; RDSAC = max(0,RDSC ­ CIRDS); RDNET = max(0,(RDSC + PRDS ­  CIRDS ­ CRDSIM)); PRSNET = max(0,(PRSC + PPRS ­  CIPRS ­ PRSPROV))  ; CVNAC  =  CVNSALC; CVNNET  =  max(0,(CVNSALC + PCVN  ­ COD8YT)); REGVNET  = BREGV + PREGV ; CDISAC = CDISC ; CDISNET = max(0,(CDISC + PCDIS ­  CDISPROV))  ; CGLOAAC = CGLOA ; CGLOANET = max(0,(CGLOA + PGLOA­ COD8YL ))  ;
  16. 16. Preparation by Etalab and DGFiP : ● understand the Domain Specific Language (DSL) : M ● parse using Clean PEG (Igor Dejanović's Arpeggio) ● simplify the Abstract Syntax Tree (AST) → Direct Acyclic Graph of trees Preparation comment = r'#.*' symbol = r'w+' symbol_enumeration = symbol  ("," symbol)* float = r'd+.d+' integer = r'd+' string = '"' r'[^"]*' '"' interval = symbol ".." symbol brackets = "[" symbol "]" ...
  17. 17. Preparation by Etalab and DGFiP : ● understand the Domain Specific Language (DSL) : M ● parse using Clean PEG (Igor Dejanović's Arpeggio) ● simplify the Abstract Syntax Tree (AST) → Direct Acyclic Graph of trees Preparation Python object / JSON
  18. 18. ● Directed Acyclic Graph (DAG) traversal (400ms) ● Arithmetic computations at each node (0.4ms in total for a single simulation) During the hackathon Efficient computation vs 400ms + 0.4ms = 400.4ms for 1 simulation 400ms + 10.000x0.4ms = 4.4s for 10.000 simulation Long live Numpy and vectorized computations !
  19. 19. During the hackathon Visualise
  20. 20. During the hackathon Simplify the graph for common fiscal situations
  21. 21. During the hackathon Transpile to other languages var functionsMapping = {     '+':function sumTab(tabValeurs){          return tabValeurs.reduce(function(a,b){             return a+b;         });     },     '*':function mulTab(tabValeurs){         return tabValeurs.reduce(function(a,b){             return a*b;         });     },     . . . Step 1 : Define an implementation of the operations
  22. 22. During the hackathon Transpile to other languages function computeFormula(node, values){     if(node.nodetype ==='symbol'){         var value = values[node.name];         if(typeof(value)==='undefined'){             value = 0;         };         return value     }else if(node.nodetype ==='float'){         return node.value;     }else if(node.nodetype==='call'){         var name = node.name;         var func = functionsMapping[name];         var args = [];         for(i in node.args){             args.push(computeFormula(node.args[i],values));         }         return func(args);     } } Step 2 : Code a DAG traversal
  23. 23. III – From code to data
  24. 24. II – The French tax calculator Tax rules vs implementation Rule of least power different concerns storage versioning editing speed simplicity (technologies evolve fast)
  25. 25. Python Code Quality Authority Parsing the current code Baron Redbaron Astroid Custom python python → julia 2to3
  26. 26. The future Tax rules written in DSL(s) Unique internal graph representation Implementation(s) The glue ? Python ? A functional language ?
  27. 27. Take-away message Language choice is not definitive ! (if you start with python)
  28. 28. Thank you ! http://www.openfisca.fr/ https://framagit.org/openfisca https://github.com/openfisca @OpenFisca Michel Blancard michel.blancard@data.gouv.fr PyData – June 14, 2016 We are hiring !

×