Générateur de factures de test Factur-X / UBL avec mapping des Business Terms de la norme EN 16931. Outil pédagogique et de test pour la dématérialisation des factures (réforme e-invoicing, Chorus Pro, PDP).
- Deux syntaxes normées : CII (UN/CEFACT — données Factur-X/ZUGFeRD) et UBL 2.1 (OASIS).
- Profils de test prêts à l'emploi (standard FR, TVA mixte, exonéré).
- Logique métier découplée de l'UI : moteur réutilisable en CLI / API, interface Streamlit par-dessus.
L'application est déployée gratuitement sur Streamlit Community Cloud :
🔗 https://factur-x-generator.streamlit.app/ (à activer, voir section déploiement)
Chaque push sur main redéploie automatiquement l'application.
Prérequis unique : uv (le seul outil à installer
au préalable — il gère Python et toutes les dépendances).
git clone https://github.com/clav1stech/rfe.git
cd rfe
uv syncPuis lancer l'application :
uv run streamlit run app.pyuv sync installe exactement les versions figées dans uv.lock et la
version Python de .python-version : environnement 100 % reproductible sur
n'importe quelle machine, sans installation Python préalable.
uv run facturx-gen standard_fr --format cii # CII sur stdout
uv run facturx-gen multi_vat --format ubl -o out.xml # UBL dans un fichieruv run pytest
uv run ruff check .rfe/
├── app.py # Interface Streamlit (UI uniquement)
├── src/facturx_generator/ # Logique métier (aucune dépendance UI)
│ ├── models.py # Modèle de facture + calcul des totaux
│ ├── mapping.py # Table BT EN16931 ↔ CII / UBL
│ ├── cii.py # Sérialisation CII (Factur-X)
│ ├── ubl.py # Sérialisation UBL 2.1
│ ├── profiles.py # Profils de factures de test
│ ├── generator.py # Façade de génération (choix du format)
│ └── cli.py # Point d'entrée CLI `facturx-gen`
├── tests/ # Tests pytest
├── tools/ # Utilitaires hors exploitation (export, changelog)
├── docs/CODEMAP.md # Carte du code (rôles, flux, invariants)
├── pyproject.toml # Métadonnées + dépendances (PEP 621)
├── uv.lock # Verrou de dépendances (committé)
├── requirements.txt # Généré depuis le lock (Community Cloud)
├── .python-version # Version Python figée
└── .github/workflows/ci.yml # CI : ruff + pytest
-
Ouvrir
src/facturx_generator/profiles.py. -
Écrire une fonction
build_mon_profil() -> Invoicequi retourne une instanceInvoice(voir les profils existants comme modèle). -
L'enregistrer dans le dictionnaire
PROFILES:PROFILES = { ... "mon_profil": build_mon_profil, }
-
Il apparaît automatiquement dans l'UI Streamlit et la CLI. Ajouter un test dans
tests/pour valider ses totaux.
- Pousser le repo sur GitHub (branche
main). - Se connecter sur https://share.streamlit.io avec le compte GitHub.
- New app → From existing repo.
- Renseigner :
- Repository :
clav1stech/rfe - Branch :
main - Main file path :
app.py
- Repository :
- Deploy. Community Cloud lit
requirements.txtpour installer les dépendances, puis lanceapp.py. - Redéploiement automatique à chaque
pushsurmain.
requirements.txtest fourni pour la compatibilité Community Cloud (qui n'utilise pas encoreuv.lock). Le régénérer après toute modification de dépendances :uv export --no-dev --no-hashes --no-emit-project --format requirements-txt -o requirements.txt
Voir CONTRIBUTING.md : Conventional Commits, branches
feature/xxx, SemVer, tenue du CHANGELOG.md.
MIT.