Skip to content

Abeeby/swiss-invoice-extractor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🇨🇭 Swiss Invoice Extractor

Un extracteur de données automatisé pour factures suisses, avec support du standard QR-bill (Swiss Payment Standards v2.0).

tests Python 3.10+ License: MIT

🎯 Objectif

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.

✨ Fonctionnalités

  • ✅ 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 .txt et .pdf (via pdfplumber)
  • ✅ Tests unitaires avec pytest

📦 Installation

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.txt

🚀 Utilisation

En ligne de commande

python invoice_extractor.py examples/sample_invoice.txt

En tant que module Python

from invoice_extractor import InvoiceExtractor

extractor = InvoiceExtractor()
result = extractor.extract_from_file("examples/sample_invoice.txt")

print(result.to_json(indent=2))

Exemple de sortie

{
  "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
}

🏗️ Architecture

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'extraction
  • TextParser — applique les regex pour les champs classiques
  • QRBillParser — décode le format spécifique Swiss Payment Standards

🧪 Tests

pytest tests/ -v

Couverture actuelle : 85% des chemins critiques.

🛠️ Stack technique

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

📚 Ressources utilisées

🚧 Pistes d'amélioration

  • 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

📝 À propos

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.

🔗 GitHub @Abeeby

📄 Licence

MIT — voir LICENSE.

About

Swiss invoice data extractor with QR-bill (Swiss Payment Standards v2.0) support. Python 3.10+, 22 pytest unit tests.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages