Un script Python pour générer un rapport PDF complet à partir d'un fichier XML TelePAC (Politique Agricole Commune française).
- Producteur : Numéro PACAGE, campagne, fichier XSD
- Demandeur : Exploitation, SIRET, email, certificat environnemental
- RPG (Registre Parcellaire Graphique) :
- Ilots avec numéros, communes, géométries
- Parcelles avec cultures, surfaces, statut bio
- Gestion des codes culture avec mapping vers libellés
- SNA (Surfaces Non Agricoles) :
- Catégories et types avec libellés
- Surfaces, largeurs, dates
- Intersections avec ilots et parcelles
- ZDH (Zones de Densité de Haies) :
- Numéros, densités de végétation
- Géométries
- Demandes d'aides :
- Pilier 1 (aides découplées, écorégime, légumineuses, etc.)
- Autres demandes spécifiques
- Pièces jointes : Liste avec codes, types et intitulés
- Autres obligations : BCAE, transmission de données, ISN
- Nombre total d'ilots et de parcelles
- Surface totale admissible
- Surface en agriculture biologique avec pourcentage
- Répartition des cultures par surface et pourcentage
- Nombre et surface totale des SNA
- Nombre de ZDH
- Parsing des polygones (
gml:Polygon) - Parsing des points (
gml:Point) - Extraction des coordonnées
- Comptage des points pour les polygones
Le script génère par défaut les deux formats :
| Format | Fichier | Nécessite | Description |
|---|---|---|---|
| Markdown | rapport_pac_XXXX_YYYYMMDD_HHMMSS.md |
Toujours | Rapport au format Markdown, lisible et modifiable |
rapport_pac_XXXX_YYYYMMDD_HHMMSS.pdf |
WeasyPrint | Rapport mis en page pour impression ou partage |
Le format PDF utilise les styles CSS définis dans templates/pdf_style.css pour une mise en page professionnelle avec :
- En-tête et pied de page
- Tableaux colorés
- Titres stylisés
- Polices lisibles
Personnalisation du PDF : Modifiez le fichier templates/pdf_style.css pour adapter les couleurs, polices et mise en page du rapport PDF.
Le rapport généré contient :
# Rapport PAC 20XX - 021162297
> Généré le : 20XX-07-25 15:33:06
> Source : Echanges-producteur-export-20XX-V1
---
## [RESUME] Résumé
### Identification
- **Numéro PACAGE** : 021162297
- **Campagne** : Courante
- **Exploitation** : SCEA ABC
- **SIRET** : 65f4654654XXXX
- **Email** : xxxxxxx.xxxxxxx@xxxxxx.xx
### Statistiques globales
- **Nombre d'ilots** : 9
- **Nombre de parcelles** : 10
- **Surface totale admissible** : 4886.00 ha
- **Surface en agriculture biologique** : 4886.00 ha (100.0%)
- **Nombre de SNA** : 47
- **Surface SNA totale** : 98.20 ha
- **Nombre de ZDH** : 4Méthode recommandée : Utilisez Docker pour éviter toute configuration manuelle.
# Génération d'un rapport avec les paramètres par défaut (MD + PDF)
python pac_report_generator.py ./input/Dossier-PAC-20XX_dossier_XXXXXXXXXX.xml
# Générer uniquement en Markdown (pas de PDF)
python pac_report_generator.py ./input/Dossier-PAC-20XX_dossier_XXXXXXXXXX.xml --no-pdf
# Générer uniquement en PDF (nécessite weasyprint)
python pac_report_generator.py ./input/Dossier-PAC-20XX_dossier_XXXXXXXXXX.xml --pdf-only
# Avec options personnalisées
python pac_report_generator.py ./input/Dossier-PAC-20XX_dossier_XXXXXXXXXX.xml \
--output ./rapports \
--config ./config/my_crop_codes.json \
--template ./templates/my_template.md--output, -o: Dossier de sortie (par défaut:output)--config, -c: Chemin vers le fichier de configuration (par défaut:config/crop_codes.json)--template, -t: Chemin vers le template Markdown (par défaut:templates/report_template.md)--no-pdf: Désactive la génération du PDF (génère uniquement Markdown)--pdf-only: Génère uniquement le fichier PDF (pas de Markdown)
Comportement par défaut : Les deux formats (Markdown et PDF) sont générés, sauf si WeasyPrint n'est pas installé ou n'a pas ses dépendances système.
Pour une exécution simplifiée avec toutes les dépendances préinstallées, utilisez Docker.
- Docker Desktop ou Docker Engine
# Construire l'image
docker build -t pac-report-generator -f .devcontainer/Dockerfile .
# Générer un rapport
docker run -it --rm \
-v ${PWD}:/workspace \
-w /workspace \
pac-report-generator \
python pac_report_generator.py input/votre_fichier.xml
# Avec options
docker run -it --rm \
-v ${PWD}:/workspace \
-w /workspace \
pac-report-generator \
python pac_report_generator.py input/votre_fichier.xml --output ./rapports --no-pdfPour le développement avec VS Code : Consultez .devcontainer/README.md pour configurer l'environnement de développement complet avec l'extension Remote - Containers.
PAC/
├── PACReportGenerator.py # Module principal avec la classe PACReportGenerator
├── pac_report_generator.py # Script principal CLI
├── pac_to_md.py # Script simplifié (ancienne version)
├── config/
│ └── crop_codes.json # Configuration des codes culture, SNA, ZDH
├── templates/
│ ├── report_template.md # Template Jinja2 pour le rapport Markdown
│ └── pdf_style.css # Styles CSS pour la génération PDF
├── input/
│ └── Dossier-PAC-20XX_dossier_XXXXXXXXXX.xml # Fichier exemple
├── output/
│ ├── rapport_pac_*.md # Rapports Markdown générés
│ └── rapport_pac_*.pdf # Rapports PDF générés (si activé)
└── README.md
Pour une installation locale :
- Python 3.7+
- Bibliothèques requises :
lxml,jinja2,weasyprint
pip install -r requirements.txtLe fichier config/crop_codes.json contient les mappings pour :
- Codes culture (ex: FVL → Féverole)
- Catégories SNA (ex: AT → Autre, VG → Végétal)
- Types SNA (ex: V1 → Végétal type 1)
- Densités de végétation (ex: MOINS_10 → Moins de 10%)
Le template templates/report_template.md utilise Jinja2 pour générer le rapport. Il contient les sections :
- Résumé avec identification et statistiques
- Répartition des cultures (tableau)
- Détail des ilots et parcelles
- Surfaces Non Agricoles (SNA)
- Zones de Densité de Haies (ZDH)
- Demandes d'aides
- Pièces jointes
- Autres obligations
Le projet suit une architecture modulaire :
PACReportGenerator: Classe principale qui gère tout le parsing et la générationconfig/: Fichiers de configurationtemplates/: Templates Jinja2output/: Rapports générés
Pour ajouter de nouveaux codes culture ou types SNA, modifiez simplement le fichier config/crop_codes.json.
Sur Windows, l'affichage des caractères accentués dans la console peut poser problème. Le rapport généré est cependant correctement encodé en UTF-8.
Utilisez des chemins relatifs ou absolus avec des barres obliques simples (/).
Les contributions sont les bienvenues. Pour toute suggestion ou bug, créez une issue ou une pull request.
Ce projet est sous licence MIT.