Giter Site home page Giter Site logo

anpy's People

Contributors

boogheta avatar davidbgk avatar fmassot avatar mdamien avatar paulineleon avatar ronnix avatar rouxrc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

anpy's Issues

Error when parsing articles from lecture 235 (2nd part) of PLF 2018

Hello 👋

There is an error when I try to retrieve articles from http://www.assemblee-nationale.fr/15/projets/pl0235.asp

>>> [art['titre'] for art in articles if art['type'] == 'article']
['liminaire', '1er', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '17', '18', '19', 'L. 6331-50 du code du travail Chambres des métiers', "de l'artisanat 39 869", 'L. 6331-50 du code du travail', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '58', '59', '60', '61', '62', '63']

Here we can see the title is wrong between 19 and 20 and thus the content of the article 19 is incomplete (dispatched between following wrong articles):

>>> [(art['titre'], art['alineas']) for art in articles if art['type'] == 'article'][17]
('19', {'001': "I. - L'article 46 de la loi n° 2011-1977 du 28 décembre 2011 de finances pour 2012, dans sa rédaction résultant de l'article 41 de la loi n° 2016-1088 du 8 août 2016 relative au travail, à la modernisation du dialogue social et à la sécurisation des parcours professionnel, est ainsi modifié :", '002': 'A. - Au tableau du I :', '003': '1° La deuxième ligne est supprimée ;', '004': '2° A la troisième ligne, colonne C, le montant : "571 000" est remplacé par le montant : "476 800" ;', '005': '3° A la quatrième ligne, colonne C, le montant : "735 000" est remplacé par le montant : "1 076 377" ;', '006': '4° A la cinquième ligne, colonne C, le montant : "2 300 000" est remplacé par le montant : "2 105 000" ;', '007': '5° La septième ligne est supprimée ;', '008': '6° A la douzième ligne, colonne C, le montant : "70 000" est remplacé par le montant : "65 000" ;', '009': '7° A la vingt-cinquième ligne, colonne C, le montant : "1 615" est remplacé par le montant : "1 515" ;', '010': '8° A la vingt-sixième ligne, colonne C, le montant : "1 615" est remplacé par le montant : "1 515" ;', '011': '9° A la vingt-septième ligne, colonne C, le montant : "190 000" est remplacé par le montant : "188 000" ;', '012': '10° A la trente-sixième ligne, colonne C, le montant : "44 600" est remplacé par le montant : "34 600" ;', '013': '11° A la trente-septième ligne, colonne C, le montant : "159 000" est remplacé par le montant : "73 844" ;', '014': '12° La trente-huitième ligne est supprimée ;', '015': '13° A la trente-neuvième ligne, colonne C, le montant : "40 900" est remplacé par le montant : "25 000" ;', '016': '14° A la quarante-cinquième ligne, colonne C, le montant : "376 117" est remplacé par le montant : "226 117" ;', '017': '15° A la quarante-sixième ligne, colonne C, le montant : "243 018" est remplacé par le montant : "203 149" ;', '018': '16° Après la quarante-sixième ligne, il est inséré une ligne ainsi rédigée :', '019': '"'})
>>> [(art['titre'], art['alineas']) for art in articles if art['type'] == 'article'][18]
('L. 6331-50 du code du travail Chambres des métiers', {'001': '"', '002': '17° A la cinquante-et-unième ligne, colonne C, le montant : "4 000" est remplacé par le montant : "5 000" ;', '003': '18° A la cinquante-cinquième ligne, colonne C, le montant : "17 924" est remplacé par le montant : "14 970" ;', '004': '19° A la cinquante-septième ligne, colonne C, le montant : "83 700" est remplacé par le montant : "56 500" ;', '005': '20° A la cinquante-neuvième ligne, colonne B, les mots : "Poitou-Charentes" sont remplacés par les mots :', '006': '"Nouvelle-Aquitaine" et colonne C, le montant : "9 890" est remplacé par le montant : "25 500" ;', '007': '21° A la soixantième ligne, colonne B, les mots : "de Languedoc-Roussillon" sont remplacés par les mots :', '008': '"d\'Occitanie" et colonne C, le montant : "19 231" est remplacé par le montant : "33 000" ;', '009': '22° A la soixante-quatrième ligne, colonne C, le montant : "3 000" est remplacé par le montant : "3 500" ;', '010': '23° A la soixante-cinquième ligne, colonne C, le montant : "125" est remplacé par le montant : "400" ;', '011': '24° Après la soixante-sixième ligne, sont insérées deux lignes ainsi rédigées :', '012': '"'})
>>> [(art['titre'], art['alineas']) for art in articles if art['type'] == 'article'][19]
("de l'artisanat 39 869", {'001': '"', '002': '17° A la cinquante-et-unième ligne, colonne C, le montant : "4 000" est remplacé par le montant : "5 000" ;', '003': '18° A la cinquante-cinquième ligne, colonne C, le montant : "17 924" est remplacé par le montant : "14 970" ;', '004': '19° A la cinquante-septième ligne, colonne C, le montant : "83 700" est remplacé par le montant : "56 500" ;', '005': '20° A la cinquante-neuvième ligne, colonne B, les mots : "Poitou-Charentes" sont remplacés par les mots :', '006': '"Nouvelle-Aquitaine" et colonne C, le montant : "9 890" est remplacé par le montant : "25 500" ;', '007': '21° A la soixantième ligne, colonne B, les mots : "de Languedoc-Roussillon" sont remplacés par les mots :', '008': '"d\'Occitanie" et colonne C, le montant : "19 231" est remplacé par le montant : "33 000" ;', '009': '22° A la soixante-quatrième ligne, colonne C, le montant : "3 000" est remplacé par le montant : "3 500" ;', '010': '23° A la soixante-cinquième ligne, colonne C, le montant : "125" est remplacé par le montant : "400" ;', '011': '24° Après la soixante-sixième ligne, sont insérées deux lignes ainsi rédigées :', '012': '"'})
>>> [(art['titre'], art['alineas']) for art in articles if art['type'] == 'article'][20]
('L. 6331-50 du code du travail', {'001': "II de l'article L. 561-3", '002': "Fonds d'assurance formation des chefs d'entreprise inscrits au répertoire des métiers mentionné au III de l'article 8 de l'ordonnance", '003': 'n° 2003-1213 du 18 décembre 2003', '004': 'Fonds de prévention des risques', '005': '54 000', '006': "du code de l'environnement", '007': 'naturels et majeurs 137 000', '008': '"', '009': '25° La soixante-neuvième ligne est supprimée ;', '010': '26° A la soixante-dixième ligne, colonne C, le montant : "528 000" est remplacé par le montant : "798 000" ;', '011': '27° A la soixante-dix-huitième ligne, colonne C, le montant : "166 066" est remplacé par le montant : "86 400" ;', '012': '29° A la soixante-dix-neuvième ligne, colonne C, le montant : "559" est remplacé par le montant : "709" ;', '013': '30° A la quatre-vingt-quatrième ligne, colonne C, le montant : "385 000" est remplacé par le montant : "395 000" ;', '014': '31° A la quatre-vingt-sixième ligne, colonne C, le montant : "66 000" est remplacé par le montant : "67 000" ;', '015': '32° A la quatre-vingt-septième ligne, colonne C, le montant : "132 844" est remplacé par le montant : "127 800".', '016': 'B. - Au III bis, les mots : "aux versements mentionnés au V des articles L. 213-9-2 et" sont remplacés par les mots :', '017': '"au versement prévu à l\'article".', '018': 'II. - Le code général des impôts est ainsi modifié :', '019': "1° Le XIII de l'article 235 ter ZD est abrogé ;", '020': "2° L'article 1601 A est abrogé ;", '021': "3° Les deuxième et troisième phrases du troisième alinéa de l'article 1609 novovicies sont supprimées.", '022': "III. - La deuxième phrase du 1° du II de l'article L. 435-1 du code de la construction et de l'habitation est remplacée par la phrase suivante :", '023': '"A compter de 2018, cette fraction est fixée à 375 M€".', '024': "IV. - Le code de l'environnement est ainsi modifié :", '025': "1° L'article L. 131-5-1 est abrogé ;", '026': '2° La première phrase du II de l\'article L. 561-3 est complétée par les dispositions suivantes : ", dans la limite du plafond prévu au I de l\'article 46 de la loi n° 2011- 1977 de finances pour 2012."', '027': "V. - L'article L. 6331-50 du code du travail, dans sa rédaction résultant de l'article 41 de la loi n° 2016-1088 du", '028': '8 août 2016 relative au travail, à la modernisation du dialogue social et à la sécurisation des parcours professionnel est ainsi rédigé :', '029': '"Art. L. 6331-50. - La contribution mentionnée au 1° de l\'article L. 6331-48 est versée à un fonds d\'assurance- formation de non-salariés.', '030': '"La contribution mentionnée au a du 2° de l\'article L. 6331-48 est affectée aux chambres mentionnées au a de l\'article 1601 du code général des impôts dans la limite d\'un plafond individuel fixé de façon à respecter le plafond général prévu au I de l\'article 46 de la loi n° 2011-1977 du 28 décembre 2011 de finances pour 2012 pour les actions de formation financées par les chambres des métiers et de l\'artisanat.', '031': '"Ce plafond individuel est obtenu, pour chacun de ces bénéficiaires, en répartissant le montant prévu au I de l\'article 46 de la loi n° 2011-1977 du 28 décembre 2011 précitée au prorata des appels des contributions mentionnées à l\'alinéa précédent émis l\'année directement antérieure auprès des travailleurs indépendants situés dans le ressort géographique de chaque bénéficiaire.', '032': '"La contribution mentionnée au b du 2° de l\'article L. 6331-48 est affectée, dans la limite du plafond prévu au I de l\'article 46 de la loi n° 2011-1977 du 28 décembre 2011 de finances pour 2012, au fonds d\'assurance formation des chefs d\'entreprise mentionné au III de l\'article 8 de l\'ordonnance n° 2003-1213 du 18 décembre 2003 relative aux mesures de simplification des formalités concernant les entreprises, les travailleurs indépendants, les associations et les particuliers employeurs.', '033': '"Les sommes excédant le plafond mentionné au deuxième alinéa sont reversées au budget général de l\'État avant le', '034': '31 décembre de chaque année."'})

And then it gets back to normal:

>>> [(art['titre'], art['alineas']) for art in articles if art['type'] == 'article'][21]
('20', {'001': "Sous réserve des dispositions de la présente loi, les affectations résultant de budgets annexes créés et de comptes spéciaux ouverts antérieurement à la date d'entrée en vigueur de la présente loi sont confirmées pour l'année 2018."})

I guess it is related to the fact the line is weirdly formated on the AN end and starts with Article L. 6331-50 du code du travail Chambres des métiers et de l’artisanat 39 869 which is interpreted as a whole new article.

It seems that it produces some errors on the lafabriquedelaloi too? See https://www.lafabriquedelaloi.fr/api/pjlf2018/procedure/02_1erelecture_assemblee_hemicycle/texte/texte.json

I will try to provide a fix for that very particular case.

Infinite recursion on multiple dosleg (regression on pjl11-242 / 243)

https://www.senat.fr/dossier-legislatif/pjl11-243.html
 -= DOSLEG URL: https://www.senat.fr/dossier-legislatif/pjl11-243.html =-
  [] download SENAT version
  [] parse SENAT version
## ERROR ### CMP.hemicycle WITHOUT BOTH SENAT AND ASSEMBLEE
  [] download AN version
  [] parse AN version
## WARNING ### FOUND ANOTHER DOSLEG INSIDE THE DOSLEG
## WARNING ### MERGING WITH PREVIOUS WORKS http://www.assemblee-nationale.fr/13/dossiers/art11_Constitution_pl.asp#art11_Constitution_plo
## WARNING ### FOUND ANOTHER DOSLEG INSIDE THE DOSLEG
## WARNING ### FOUND ANOTHER DOSLEG INSIDE THE DOSLEG
## WARNING ### MERGING WITH PREVIOUS WORKS http://www.assemblee-nationale.fr/13/dossiers/art11_Constitution_pl.asp
## WARNING ### FOUND ANOTHER DOSLEG INSIDE THE DOSLEG
## WARNING ### FOUND ANOTHER DOSLEG INSIDE THE DOSLEG
## WARNING ### MERGING WITH PREVIOUS WORKS http://www.assemblee-nationale.fr/13/dossiers/art11_Constitution_pl.asp
## WARNING ### FOUND ANOTHER DOSLEG INSIDE THE DOSLEG
## WARNING ### FOUND ANOTHER DOSLEG INSIDE THE DOSLEG
## WARNING ### MERGING WITH PREVIOUS WORKS http://www.assemblee-nationale.fr/13/dossiers/art11_Constitution_pl.asp
## WARNING ### FOUND ANOTHER DOSLEG INSIDE THE DOSLEG
## WARNING ### FOUND ANOTHER DOSLEG INSIDE THE DOSLEG
https://www.senat.fr/dossier-legislatif/pjl11-242.html
 -= DOSLEG URL: https://www.senat.fr/dossier-legislatif/pjl11-242.html =-
  [] download SENAT version
  [] parse SENAT version
  [] download AN version
  [] parse AN version
## WARNING ### FOUND ANOTHER DOSLEG INSIDE THE DOSLEG
## WARNING ### MERGING WITH PREVIOUS WORKS http://www.assemblee-nationale.fr/13/dossiers/art11_Constitution_pl.asp#art11_Constitution_plo
## WARNING ### FOUND ANOTHER DOSLEG INSIDE THE DOSLEG
## WARNING ### FOUND ANOTHER DOSLEG INSIDE THE DOSLEG
## WARNING ### MERGING WITH PREVIOUS WORKS http://www.assemblee-nationale.fr/13/dossiers/art11_Constitution_pl.asp
## WARNING ### FOUND ANOTHER DOSLEG INSIDE THE DOSLEG
## WARNING ### FOUND ANOTHER DOSLEG INSIDE THE DOSLEG
## WARNING ### MERGING WITH PREVIOUS WORKS http://www.assemblee-nationale.fr/13/dossiers/art11_Constitution_pl.asp
## WARNING ### FOUND ANOTHER DOSLEG INSIDE THE DOSLEG
## WARNING ### FOUND ANOTHER DOSLEG INSIDE THE DOSLEG
## WARNING ### MERGING WITH PREVIOUS WORKS http://www.assemblee-nationale.fr/13/dossiers/art11_Constitution_pl.asp
## WARNING ### FOUND ANOTHER DOSLEG INSIDE THE DOSLEG
## WARNING ### FOUND ANOTHER DOSLEG INSIDE THE DOSLEG

handle dossiers multi-legislature 14-15 with old 14th dossier redirected to dyn

cf regardscitoyens/lawfactory_utils@6df5aab#commitcomment-29601949
It breaks parsing Confiance when using AN's dossier as entry point, which is not breaking since it does work when calling from Senate's dossier ID.

Although it does break previously working parsing for the two following texts:

  • pjl16-432
  • ppl16-362

In both cases, it results in:

  • 1st lecture AN commission step duplicated with both urls to asp and pdf
  • 1st lecture AN hemicycle step duplicated with url asp (wrongly declared as depot) and url pdf (properly announced as hemicycle)

Commission step can be missing when parsing from Open Data for live texts

> anpy-cli parse http://www.assemblee-nationale.fr/dyn/15/dossiers/amelioration_tresorerie_associations
[
    {
        "assemblee_id": "15-amelioration_tresorerie_associations",
        "assemblee_legislature": 15,
        "assemblee_slug": "amelioration_tresorerie_associations",
        "beginning": "2018-10-17",
        "long_title": "Société : amélioration de la trésorerie des associations",
        "proposal_type": "PPL",
        "steps": [
            {
                "date": "2018-10-17",
                "id_opendata": "L15-VD187069DI",
                "institution": "assemblee",
                "source_url": "http://www.assemblee-nationale.fr/15/propositions/pion1329.asp",
                "stage": "1ère lecture",
                "step": "depot"
            },
            {
                "date": "2018-11-29",
                "id_opendata": "L15-VD187234S36552",
                "institution": "assemblee",
                "stage": "1ère lecture",
                "step": "hemicycle"
            }
        ],
        "urgence": false,
        "url_dossier_assemblee": "http://www.assemblee-nationale.fr/dyn/15/dossiers/amelioration_tresorerie_associations"
    }
]

Would be a good opportunity to add regression testing to the open data parser too.

Parse previous works and next works

There was a first try in law-factory-parser but this solution needs also the doslegs to be parsed.

Another solution is simply a url.replace(legislature, legislature+1) to detect other legislatures.

A nicer solution would be to use the open-data, via #7

New open data page of all publications

Hi there,

Just to let you know, in case you missed it, that French Assembly now provides an open data complete list of publications for a given day:

  • Today: http://www.assemblee-nationale.fr/dyn/opendata/list-publication/publication_j
  • Some past day: http://www.assemblee-nationale.fr/dyn/opendata/list-publication/publication_j-{N}
  • A given date: http://www.assemblee-nationale.fr/dyn/opendata/list-publication/publication_{YYYY-MM-DD}

These pages expose a CSV of publication dates and texts and amendments URLs, linking to the new open data formats (XML or JSON for amendments, stable HTML for texts).

More details in their FAQ.

I thought you might find this interesting.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.