Blog de développement

Dépot de le Déclaration de TVA avec Selenium

Dernière Modification le :
2000-01-01
dépôt automatisé de TVA


Alexis de Lattre présente un nouveau module Oddo de préparation et télétransmission de la déclaration de TVA. Avec 2 volets: le calcul automatique des lignes de déclaration et des totaux puis la télétransmission. Il n'y a pas d'API publiquement accessible pour télétransmettre directement la déclaration de TVA. Il propose d'utiliser TELEDEC (payant!) en mode EDI. Il expérimente aussi un robot de remplissage de la déclaration de TVA sur impots.gouv.fr en mode EFI, avec Selenium IDE. Lire →.

La question de la préparation de la déclaration n'est pas abordée ici. Elle ne concerne pas les techniques Serveur ou le dépôt à proprement parler. On visionnera avec intéret sa vidéo à compter de la minute 9:30. Lire la vidéo → (ou son archive).

C'est une ébauche permettant d'initier la télédéclaration, qu'il faut finir à la main. Lire aussi ce billet →.

Je reprends l'idée avec l'ambition d'automatiser TOUT, de l'entrée sur le site jusqu'au paiement, à l'aide de Sélénium en version Python.

Les prérequis les outils et mise à jour des outils

Ce chapitre fait maintenant partie du Tronc Commun Lire →.

Log et captures d'écran

Ce chapitre fait maintenant partie du Tronc Commun Lire →.

Lecture des paramètres du Compte

J'utilise un format INI, simple. Attention la lecture est sensible à la case... Tout comme dans Template, les paramètres du compte incluent:
user_name = Bl*****
user_email = ********@free.fr
user_password = *******
email_utilisateur = ****p@free.fr
email_manager = ********@free.fr
email_manager_password = ********
numero_siren = 9**.1**.9**
numero_abonne = 2*******22

Dans l'application de impots.gouv.fr un utilisateur peut déclarer pour plusieurs sociétés (SIREN). Dans une utilisation multi-SIREN, il faudra porter le numero de SIREN ailleurs que dans les paramètres de compte, par exemple dans le nom des fichiers .csv de declaration ou .txt d'avancement.

Lecture du Fichier Clef/Valeur

Le fichier Clef/Valeur est à constituer depuis le logiciel de comptabilité, au format .CSV. A chacun sa sauce. Siren, Annee_declaration, mois_declaration sont dans le nom de fichier qui, lui, contient les couples cases/valeurs, comme sur le formulaire de CA

Descriptif des cases (ou clefs): Les références officielles Télécharger → ... Le descriptif ici suffit sans doute: Lire →. Le click droit pour lire le code de la source suffit aussi...

Pour trouver une bonne référence taper "edi-tva code nref 100089" et ajouter l'année en cours ou la precédente pour identifier un fichier XLS chez cerfaliassefiscale.com. Le fichier a un nom comme : 3310-CA3-version-2023-01-01_V3.xls... Alternativement, Explorer et Télécharger →

Les cases sont identifiées par leur code Lettre/chiffre ex: A1 Ventes, prestations de services.
(Ce code est documenté dans les spécifications EDI-TVA sous la dénomination code NREF).

Il y a differents systèmes de codification: Code PEDI (PEDI = Partenaire EDI), Code NREF (6 chiffres), Code Medoc (4 chiffres, familier car il apparait en regard des cases dans les cerfa). Le Code NREF est celui utilisé pour l'identification des INPUT dans la page de teledeclaration: il est donc notre référence. Le script dispose d'un accès àune table Case/Code Medoc/Code NREF. Lors de la lecture, si une clef est au format Case (Alphanumérique 2 ou 3 caractères) ou Code Medoc (4 chiffres), elle est convertie au format NREF. Il n'est donc pas indispensable d'être au format NREF, à condition d'avoir une table de conversion à jour. Pas de partie décimale: le déclarion de TVA se fait à l'arrondi, donc ne pas mettre de partie décimale. L'absence de virgule facilite l'utilisation du format .CSV.


[cases_valeurs]
case1 = valeur1
case2 = valeur2

Et la lecture

import configparser

config = configparser.ConfigParser()
config.read('chemin_vers_fichier.ini')

identifiant = config['DEFAULT']['identifiant']
password = config['DEFAULT']['password']
# Et ainsi de suite pour les autres clés

case1 = config['cases_valeurs']['case1']

Entrée sur la page d'acceuil


# Ouverture de la page de connexion
driver.get("https://cfspro-idp.impots.gouv.fr/")

# Remplacer 'id_utilisateur' et 'id_mot_de_passe' par les vrais sélecteurs des champs sur la page de connexion
# Ces sélecteurs peuvent être des ID, des noms, ou tout autre sélecteur CSS supporté par Selenium
# Attendre que la page se recharge après la connexion
driver.implicitly_wait(10)
sauvegarder_capture_et_source(driver)
# Saisie de l'identifiant
element_identifiant = driver.find_element("id", "ident")
element_identifiant.send_keys("xxxx@xxxx.fr")

# Saisie du mot de passe
element_mot_de_passe = driver.find_element("id", "mdp")
element_mot_de_passe.send_keys("xxxxx")
sauvegarder_capture_et_source(driver)
# Envoi du formulaire
# Remplacer 'id_bouton_connexion' par le vrai sélecteur du bouton de connexion
element_bouton_connexion = driver.find_element("id", "valider")
element_bouton_connexion.click()

XXX

					    
XXX