Skip to main content

Manuel administration fiscale

Téléchargement de l'export

 fiscale

La gestion des exports fiscaux se trouve dans la partie Préférences -> Comptabilité :

Capture d’écran 2025-09-25 à 15.06.32.png

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.

Capture_exports.pngCapture d’écran 2025-11-14 à 14.22.34.png

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

    export_2024-01-01_2025-07-31.export_20251101_20251130.zip : archive ZIPArchive contenant les fichiersdonnées JSON
      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'export.
      activité
      de la période avec signatures blockchain

      Fichiers de sécurité

        export_2024-01-01_2025-07-31.export_20251101_20251130.zip.sig : signatureSignature cryptographique Ed25519 de l’l'archive ZIP.
        export_2024-01-01_2025-07-31.export_20251101_20251130.zip.verify_key.pub : cléClé publique fournie par Présence Informatique pour vérifier la signature

        Documentation

          README.md : l'équivalent de cette documentation au format markdown verifier_archive.html : Interface web de vérification

          Structure des données.

          fichiers

          JSON

          Factures

          factures-YYYYMMDD-YYYYMMDD.json

          Le

          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"
                }
              ]
            }
          ]
          previous_signatureChamps principaux : chaîne
          avecsiret : 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 maintenirla l’intégritépremière) lignes : Tableau des lignes de lafacturation blockchain.
          signature

          reglements-YYYYMMDD-YYYYMMDD.json

          :

          Tableau signatured'objets Ed25519 de la facture.

          Règlements

          Le fichier règlements.json contient touscontenant les règlements sous cette structure :
          [
            {
              "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...",
            },
          ]
          Champs previous_signatureprincipaux : chaîne avecsiret la: signatureNuméro SIRET de l'établissement facture : Numéro de la facture précédenteassociée pouruser maintenir: l’intégritéUtilisateur ayant enregistré le règlement 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 larèglement blockchain.(CB, Espèces, Chèque, Virement, etc.) signature : signatureSignature Ed25519blockchain de lace facture.règlement previous_signature : Signature du règlement précédent

          logs-YYYYMMDD-YYYYMMDD.json

          Logs

          Tableau

          d'objets
          Enfin le fichier log.json contientcontenant les logsjournaux de toutes les actions des utilisateurs dans le logicield'activité :
            {
              "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..."
            }
          },]
          {
          Champs "model"principaux :
            timestamp : "activitylog.activitylog",Date "pk"et heure de l'action (ISO 8601) user : 292,Utilisateur "fields"ayant effectué l'action action : {Type "timestamp"d'action  model : "2025-06-25T07:59:42.342Z",Type "user"d'objet modifié (Facture, Reglement, Patient, etc.) instance : "florian",Identifiant "action"de l'objet modifié diff : "Mise à jour", "model": "LigneFacture", "object_pk": 192, "diff": { "quantite": [1, 2] }, "object": { "code": "2110490", "conditionnement": 1, "dateActe": "2025-06-01", "libelle": "CHUP, ADULTE NEUT, PODIABETES PARADIS, LA PAIRE", "ligneParent": 0, "lpp": 28075, "montantRemboursementAMC": 0.0, "montantRemboursementAMO": 0.0, "nomCodeActe": "DVO", "pcRO": null, "prestaFse": null, "prixSS": 55.02, "prixUnitaireHT": 53.89, "prixVente": 55.02, ... }, "instance": "2c987", "commentaire": "AperçuDétail des modifications (format JSON) commentaire : {'quantite'Commentaire optionnel signature : [1,Signature 2]}...", "signature": "bc162eaaa1a018fa45d5b197633a25d7c7b0602bcfbd69628cc9a081f557607f", "previous_signature": "c9460eb3b93bb34742e4774094a389f515d1255b6dd88f56a0376eea06146c94" } } ...

            Vérificationblockchain de l'export et de la chaîne de factures

            Télécharger le script

            Le script permet de :

              Vérifier puis décompresser export_2024-01-01_2025-07-31.zip  Charger le JSON et vérifier chaque facture, règlement etce log previous_signature
              Prérequis: pour l'exécutionSignature du script
              log
                Python 3.x Installer la librairie PyNaCl :précédent
                Note : Tous les enregistrements ne sont pas nécessairement signés. Les enregistrements créés avant la mise en place du système de signature auront des champs signature et previous_signature vides ou null.

                Système de sécurité

                Signature cryptographique

                L'archive utilise l'algorithme Ed25519 (courbes elliptiques) pour garantir :

                  L'authenticité : L'archive provient bien de votre système L'intégrité : Aucune modification n'a été effectuée après génération

                  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 :

                      L'inaltérabilité : Impossible de modifier un enregistrement sans casser la chaîne La non-répudiation : Impossible de supprimer ou insérer un enregistrement

                      Vérification de l'archive

                      Méthode 1 : Interface web (recommandée - aucune installation requise)

                        Extrayez l'archive archive-fiscale-20251101-20251130.zip Ouvrez le fichier verifier_archive.html dans votre navigateur web (Chrome, Firefox, Safari, Edge...)
                        Capture d’écran 2025-11-14 à 14.04.33.png
                        Deux modes possibles :
                          Mode automatique : Si vous utilisez un serveur HTTP local (voir ci-dessous), les fichiers se chargent automatiquement Mode manuel : Sinon, un bouton apparaît pour sélectionner les 3 fichiers
                          Capture d’écran 2025-11-14 à 14.04.54.png Les résultats s'affichent en quelques secondes
                            Exemple d’archive corrompue
                            Capture d’écran 2025-11-14 à 14.05.15.png Exemple d’archive valide
                            Capture d’écran 2025-11-14 à 14.14.44.png
                            Avantages : Aucune installation Python, interface graphique, fonctionne sur tous les systèmes

                            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")
                            return

                            2. FalseVérifier #la Décompresserblockchain

                            JSON

                            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.

                            est

                            Support

                            intacte")     else:         print("❌ La chaîne de factures est compromise")     return all_ok # Exemple d'utilisation if __name__ == "__main__":     verify_archive_and_chain("factures_archive.zip", "factures_archive.zip.sig", "verify_key.hex")

                            Interprétation des résultats

                              ✅ Facture OK : intégrité de la facture et chainage valide. ❌ Facture INVALIDE : la facture a été modifiée ou la signature ne correspond pas. ✅ La chaîne de factures est intacte : toutes les factures sont conformes et la blockchain interne n’a pas été altérée. ❌ La chaîne de factures est compromise : au moins une facture a été modifiée, ce qui invalide

                              Pour toute laquestion suite.

                              concernant cette
                              archive,

                              Notescontactez importantes

                              Présence

                              L’éditeur fournit une archive contenant une chaîne de factures intègre. Cette chaîne est vérifiée automatiquement lors de la génération de l’archive.
                              Si, lors de votre propre vérification, la chaîne apparaît comme compromise, cela signifie qu'un des fichiers a été modifié en dehors du logiciel et ne doit pas être utilisé.

                              Informatique.