Un banc d’essai de factures électroniques Réalisé
- Le problème
- Savoir ce que le contrôle officiel laisse vraiment passer, plutôt que de le supposer en lisant la norme.
- Ce que j’ai construit
- Neuf factures au format CII (XML), générées sur un même scénario de situation de travaux, chacune avec un seul encodage différent. Elles sont validées au schématron officiel EN 16931, puis soumises à deux plateformes agréées. Les démonstrations 1 et 2 en viennent.
- Les choix techniques
- Une fonction de génération unique, pour que deux cas ne diffèrent que par ce qu’on veut tester ; validation XSLT avec Saxon-HE ; résultats reproductibles en deux commandes.
- Python
- XML CII
- EN 16931
- Schématron
- XSLT · Saxon
Extrait réel : deux façons d’encoder une retenue de garantie en remise. La première passe le contrôle en sous-déclarant la TVA, la seconde est juste et rejetée.
# A2a : retenue en remise document, arithmetique COHERENTE (TVA recalculee)
build("A2a_retenue_remise_coherente.xml", lines=SIT,
taxes=[(23750, 4750, "S", 20.0, None)],
allowances=[(1250.0, "102", "Retenue de garantie 5%", "S", 20.0)],
line_total=25000, allowance_total=1250, charge_total=0,
tax_basis=23750, tax_total=4750, grand=28500, due=28500)
# A2b : retenue en remise document, TVA LEGALEMENT JUSTE (5000) -> incoherence arithmetique
build("A2b_retenue_remise_TVA_juste.xml", lines=SIT,
taxes=[(25000, 5000, "S", 20.0, None)],
allowances=[(1250.0, "102", "Retenue de garantie 5%", "S", 20.0)],
line_total=25000, allowance_total=1250, charge_total=0,
tax_basis=23750, tax_total=5000, grand=28750, due=28750)