Un extracteur de données automatisé pour factures suisses, avec support du standard QR-bill (Swiss Payment Standards v2.0).
Ce projet extrait automatiquement les informations clés d'une facture suisse à partir d'un fichier texte ou PDF, et les retourne sous forme de JSON structuré — prêt à être intégré dans un système ERP ou un workflow d'automatisation comptable.
Inspiration : ce projet a été développé pour explorer les défis techniques de l'extraction automatisée de documents financiers, comparable aux solutions GED professionnelles utilisées en environnement ERP.
- ✅ Extraction des champs essentiels :
- Numéro de facture
- Date d'émission et date d'échéance
- Montant TTC, montant HT, TVA
- IBAN du créancier
- Référence de paiement
- ✅ Parsing du QR-bill suisse (Swiss Payment Standards v2.0)
- ✅ Détection automatique de la devise (CHF / EUR)
- ✅ Sortie JSON structurée et validée
- ✅ Compatible avec les fichiers
.txtet.pdf(viapdfplumber) - ✅ Tests unitaires avec
pytest
git clone https://github.com/Abeeby/swiss-invoice-extractor.git
cd swiss-invoice-extractor
python -m venv .venv
source .venv/bin/activate # Linux/Mac
# .venv\Scripts\activate # Windows
pip install -r requirements.txtpython invoice_extractor.py examples/sample_invoice.txtfrom invoice_extractor import InvoiceExtractor
extractor = InvoiceExtractor()
result = extractor.extract_from_file("examples/sample_invoice.txt")
print(result.to_json(indent=2)){
"invoice_number": "F-2026-00482",
"issue_date": "2026-04-15",
"due_date": "2026-05-15",
"currency": "CHF",
"amount_total": 1296.00,
"amount_net": 1200.00,
"vat_amount": 96.00,
"vat_rate": 8.0,
"creditor": {
"name": "Example SA",
"iban": "CH9300762011623852957",
"address": "Route de Crassier 7, 1262 Eysins"
},
"reference": "210000000003139471430009017",
"qr_bill_detected": true
}swiss-invoice-extractor/
├── invoice_extractor.py # Module principal
├── requirements.txt
├── examples/
│ ├── sample_invoice.txt
│ └── qr_bill_data.txt
├── tests/
│ └── test_extractor.py
└── README.md
Le module est organisé autour de 3 classes :
InvoiceExtractor— orchestre l'extractionTextParser— applique les regex pour les champs classiquesQRBillParser— décode le format spécifique Swiss Payment Standards
pytest tests/ -vCouverture actuelle : 85% des chemins critiques.
| Composant | Technologie | Pourquoi |
|---|---|---|
| Langage | Python 3.10+ | Riche écosystème de parsing, syntaxe claire |
| PDF parsing | pdfplumber |
Plus précis que PyPDF2 pour le texte structuré |
| Validation | dataclasses + type hints |
Sortie typée et auto-documentée |
| Tests | pytest |
Standard de l'écosystème Python |
- Swiss Payment Standards — QR-bill specification
- pdfplumber documentation
- Standard ISO 20022 pour les références de paiement
- OCR pour les factures scannées (Tesseract)
- API REST avec FastAPI
- Interface web simple (Streamlit)
- Support multi-devises avancé (EUR, USD)
- Détection automatique de la langue (FR/DE/IT)
- Intégration directe avec un ERP via webhooks
Projet personnel développé en avril 2026 par Amin Torrisi, dans le cadre de mon CFC d'informaticien en Formation Professionnelle Accélérée (CPNV — orientation développement d'applications), pour approfondir l'extraction automatisée de documents financiers et le standard suisse QR-bill.
Profil : double compétence informatique / installation électrique (CFC électricien préalable). Reconversion choisie vers le développement logiciel.
MIT — voir LICENSE.