# Structure du PDF Force Ouvrière — Veille Juridique ## Format standard Le PDF de la veille juridique de Force Ouvrière suit un format fixe de **2 pages**. ### Page 1 : Actualités législatives + Brèves de jurisprudence **En-tête** (bruit à ignorer) : - Nom : "Confédération Générale du Travail Force Ouvrière" - Adresse : "141 avenue du Maine - 75680 Paris Cedex 14" - Contacts : email, téléphone - Titre : "VEILLE JURIDIQUE" - Période : "Du XX au XX mois YYYY" **Sections** : 1. **Actualités législatives et réglementaires** — souvent "Aucune actualité importante" (section optionnelle, peut être vide) 2. **Jurisprudence** — liste d'arrêts, chacun avec : - Titre : format "Sujet - Sous-sujet" (ex: "Visite de reprise - Dispositions conventionnelles - Délai") - Corps : résumé de l'arrêt en 3-10 phrases - Référence : "(Cass. soc., JJ-MM-AA, n°XXXXXXX)" ### Page 2 : Focus juridique **En-tête** : même que page 1 **Section FOCUS** : - Titre : phrase d'accroche (ex: "Attention à l'indemnité de préavis !") - Introduction : contexte en 2-3 phrases - Sous-sections : "Du côté de l'employeur", "Du côté du salarié" - Corps : développement juridique avec 1-2 arrêts - Conclusion : phrase de synthèse ## Parsing avec extract_pdf.py ```bash # Extraction structurée (JSON) python3 scripts/extract_pdf.py /chemin/veille.pdf --structured # Retourne : # { # "pages": 2, # "page_1": { # "section": "breves", # "actualites_legislatives": "...", # peut être vide # "breves": [{"title": ..., "body": ...}, ...] # }, # "page_2": { # "section": "focus", # "focus": { "title": ..., "sections": [...] } # } # } ``` ## Pattern de dialogue radio Le script `generate_juridique.py` suit ce schéma (3 parties) : ``` Intro (jingle + présentateur) Partie 1 — Actualités législatives et réglementaires (~15-45s) : presentateur → annonce la rubrique expert_breves → résume les textes (ou absent si vide) presentateur → transition Partie 2 — Brèves de jurisprudence (~3-5 min) : presentateur → intro + question expert_breves → réponse globale presentateur → question sur arrêt 1 expert_breves → réponse arrêt 1 presentateur → question sur arrêt 2 expert_breves → réponse arrêt 2 ... presentateur → transition Partie 3 — Focus juridique (~3-5 min) : presentateur → intro du sujet expert_focus → réponse globale presentateur → question conséquences expert_focus → réponse + conclusion Outro (présentateur → conclusion) ``` ## Prononciation des références juridiques Les fonctions de `generate_juridique.py` gèrent automatiquement : | Format source | Résultat oral | |---------------|---------------| | `Cass. soc., 6-5-26, n°24-13599` | « Cour de cassation, chambre sociale, le six mai deux mille vingt-six, numéro vingt-quatre tiret treize mille cinq cent quatre-vingt-dix-neuf » | | `article L 7112-4` | « article L sept mille cent douze tiret quatre » | | `article L. 3251-1` | « article L trois mille deux cent cinquante et un » | | `décret n°2022-679` | « décret numéro deux mille vingt-deux tiret six cent soixante-dix-neuf » | Les fonctions clés : - `prononcer_numero()` : entier → texte français - `prononcer_date_cass()` : `JJ-M-AA` → « le JJ mois année » - `prononcer_article_loi()` : `L XXX-XX` → « article L XXX tiret XX » - `prononcer_reference_juridique()` : applique toutes les conversions au texte ## Notes techniques - **pymupdf** pour l'extraction texte (installé via `pip install pymupdf pymupdf4llm`) - Les tirets de césure (`-\n`) sont conservés dans le texte brut → à nettoyer lors de la synthèse - Les caractères spéciaux Word (, ) → ignorés par le parser - Les numéros d'arrêt : format `n°XXXXXXX` → à épeler à l'oral