Manuel administration fiscale
Téléchargement de l'export
fiscaleLa gestion des exports fiscaux se trouve dans la partie Préférences -> Comptabilité :
L’interface présente tous les exportsexport générés depuis le début de l’utilisation du logiciel. L’utilisateur peut, via un bouton dédié, générer un nouvel export couvrant une période maximale d’un an.an. Cette page met également à disposition la clé publique nécessaire à la vérification des données, ainsi qu’un lien vers la documentation.
Utilisation de l'export
Cette documentation décrit la procédure de vérification de l’intégrité et de l’authenticité d’un export fiscal généré par le logiciel.
Chaque archive regroupecontient l’ensembletoutes desles factures et de leurs ligneslignes, surles règlements et les journaux d’activité pour une période maximale d’un an,an. accompagnée d’uneUne signature Ed25519 assurantgarantit la non-altérationl’intégrité des données.
La période couverte est précisée dans le nom de l’archive.
L’
Contenu de l'archive
Fichiers de données
factures-20251101-20251130.json : Factures de la période avec signatures blockchain
reglements-20251101-20251130.json : Règlements de la période avec signatures blockchain
logs-20251101-20251130.json : Journaux d'Fichiers de sécurité
Documentation
Structure des données.
Factures
factures-YYYYMMDD-YYYYMMDD.json
Tableau fichierd'objets factures.json contient toutescontenant les factures etavec leurs lignes enfants sous cette structure :
[
{
"siret": "378534440"12345678901234",
"numero": "000000001"251100001",
"date": "2025-09-23",
"nom" : "DUPUY",
"prenom" : "Jean",
"total_TTC": "1000.01-15T10:30:00",
"total_HT": "800.1250.00",
"total_TTC": "1500.00",
"signature": "aca7aaf2e5c93b0ee377...",
"previous_signature": "",
"signature": "abc123...",
"lignes": [
{
"siret": "378534440"12345678901234",
"facture": "000000001"251100001",
"code": "2159815",
"libelle": "ActeSemelle A"orthopédique",
"prixVente": "125.00",
"prixUnitaireHT": "104.17",
"totalHT": "104.17",
"quantite": 1,
"prix_unitaire_TTC": "1000.00",
"prix_unitaire_HT": "800.00",
"prix_total_HT": "800.00",
"tva": "20.00"
}
]
}
]
siret : Numéro SIRET de l'établissement
numero : Numéro unique de la facture
date : Date de création (ISO 8601)
total_HT : Montant total hors taxes
total_TTC : Montant total toutes taxes comprises
signature : Signature blockchain de cette facture
previous_signature : Signature de la facture précédente (vide pour lignes : Tableau des lignes de reglements-YYYYMMDD-YYYYMMDD.json
Tableau signatured'objets Ed25519 de la facture.
Règlements
[
{
"siret": "378534440"12345678901234",
"facture": "251100001",
"user": "florian"Dr. Martin",
"facture"libelle": "000000001"Règlement Carte Bancaire",
"date_creation": "2025-09-23"01-15T10:35:00",
"date_reglement": "2025-09-23"01-15T10:35:00",
"montant": "1000.1500.00",
"mode": "CB",
"libelle": "Reglement M. ABC",
"signature": "abc123.ff187b00e19af92136bd...",
"previous_signature": "poiuyt.aca7aaf2e5c93b0ee377...",
},
]
siret facture : Numéro de la facture user libelle : Description du règlement
date_creation : Date d'enregistrement du règlement (ISO 8601)
date_reglement : Date effective du règlement (ISO 8601)
montant : Montant du règlement
mode : Mode de signature : previous_signature : Signature du règlement précédent
logs-YYYYMMDD-YYYYMMDD.json
Logs
Tableau
d'objets {
"model": "activitylog.activitylog",
"pk": 291,
"fields":[
{
"timestamp": "2025-06-24T12:02:44.257Z"01-15T10:30:00",
"user": "florian"Dr. Martin",
"action": "Impression"UPDATE",
"model": "Facture",
"object_pk"instance": 105,"251100001",
"diff": "{}\"status\": [\"brouillon\", \"object": {
validée\"pdf_file": ]}"/media/impressions/v2/factures_hors_teletrans/Facture-105.pdf"
},
"instance": "2c987",
"commentaire": "ImpressionValidation facturede 250600077la du type facture_hors_teletrans avec le modèle : Facture"facture",
"signature": "4c640482fc4253e4adab9a608513afa4717c1883c840fbfae1709f850d3f94e7"209e9cc27d6ebd9ccfbb...",
"previous_signature": "00232eaa0365661e4827daadd6e019b0199956fa385f5470eac383544e04fec8"ff187b00e19af92136bd..."
}
},]
timestamp : user : action : model : instance : diff : commentaire : signature : Vérificationblockchain de l'export et de la chaîne de factures
previous_signature Prérequis: pour l'exécutionSignature du script
log signature et previous_signature vides ou null.Système de sécurité
Signature cryptographique
L'archive utilise l'algorithme Ed25519 (courbes elliptiques) pour garantir :
Blockchain
Chaque enregistrement (facture, règlement, log) contient :
signature : Hash cryptographique des données + signature précédente
previous_signature : Signature de l'enregistrement précédent
Ce chaînage garantit :
Vérification de l'archive
Méthode 1 : Interface web (recommandée - aucune installation requise)
archive-fiscale-20251101-20251130.zip
Ouvrez le fichier verifier_archive.html dans votre navigateur web (Chrome, Firefox, Safari, Edge...)
Deux modes possibles :
Les résultats s'affichent en quelques secondes
Exemple d’archive valide
Pour le mode automatique (optionnel) :
pip# installDans pynaclle dossier de l'archive extraite
python3 -m http.server 8080
# Puis ouvrir: http://localhost:8080/verifier_archive.html
Aperçu
Méthode du2 script: Vérification manuelle (pour analyseexperts)
1. Vérifier la signature Ed25519
import json
import zipfile
from nacl.signing
import VerifyKey
import hashlib
def compute_fiscal_hash(facture):
data = {
"numero": facture["numero"],
"date": facture["date"],
"montant": facture["montant"],
"type_client": facture["type_client"],
"lignes": sorted([
{"libelle": l["libelle"], "quantite": l["quantite"], "montant": l["montant"], "tva": l["tva"]}
for l in facture["lignes"]
], key=lambda x: x["libelle"])
}
json_data = json.dumps(data, sort_keys=True)
return hashlib.sha256(json_data.encode()).hexdigest()
def verify_archive_and_chain(zip_path, sig_path, verify_key_path):nacl.encoding
# Charger la clé publique
with open(verify_key_path,'export_20251101_20251130.zip.verify_key.pub', "r"'r') as f:
verify_key = VerifyKey(bytes.fromhex(f.read()))
# Vérifier signature ZIP
with open(zip_path, "rb") as f:
zip_bytesverify_key_hex = f.read()
verify_key = nacl.signing.VerifyKey(verify_key_hex, encoder=nacl.encoding.HexEncoder)
# Charger les données
with open(sig_path,'export_20251101_20251130.zip', "r"'rb') as f:
data = f.read()
# Charger la signature
with open('export_20251101_20251130.zip.sig', 'r') as f:
signature_hex = f.read()
signature = bytes.fromhex(signature_hex)
# Vérifier
try:
verify_key.verify(bytes.fromhex(signature_hex),data, zip_bytes)signature)
print("✅✓ Signature ZIP valide")
except:
print("❌✗ Signature ZIPinvalide invalide"- Archive compromise")
2. FalseVérifier #la Décompresserblockchain
Pour withchaque zipfile.ZipFile(zip_path,type "r")de asdonnées zip_file:(factures, withrèglements, zip_file.open("factures.json")logs), asvérifier f:que factures:
signature_N = json.load(f)Hash(données_N #+ Vérificationsignature_N-1)
Consultez le fichier verifier_archive.html (source JavaScript) pour l'implémentation complète de la chaîne
previous_sig = None
all_ok = True
for facture in factures:
fiscal_hash = compute_fiscal_hash(facture)
data_to_verify = fiscal_hash
if previous_sig:
data_to_verify += previous_sig
try:
verify_key.verify(bytes.fromhex(facture["signature"]), data_to_verify.encode())
print(f"✅ Facture {facture['numero']} OK")
except:
print(f"❌ Facture {facture['numero']} INVALIDE")
all_ok = False
previous_sig = facture["signature"]
if all_ok:
print("✅ La chaînevérification de facturesblockchain.
Support
Interprétation des résultats
Pour toute laquestion suite.
Notescontactez importantes
Présence Informatique.


