<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.dolibarr.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Arcchester</id>
	<title>Dolibarr ERP CRM Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dolibarr.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Arcchester"/>
	<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php/Special:Contributions/Arcchester"/>
	<updated>2026-10-25T21:33:21Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Pennylane_Sync&amp;diff=68155</id>
		<title>Module Pennylane Sync</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Pennylane_Sync&amp;diff=68155"/>
		<updated>2026-10-19T15:57:56Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Pennylane Sync 1.0.5 : Dolibarr 18 à 24, section « Quel PDF part » (scan fournisseur déposé, &amp;lt;REF&amp;gt;.pdf, refus si plusieurs scans, relance au dépôt), historique 1.0.1 à 1.0.5&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module Pennylane Sync ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pennylane Sync&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui &#039;&#039;&#039;envoie automatiquement vos factures vers Pennylane&#039;&#039;&#039; : gardez Dolibarr pour la gestion, donnez Pennylane à votre expert-comptable. Les factures clients et fournisseurs validées, leurs PDF et les tiers partent vers Pennylane sans ressaisie ni export mensuel.&lt;br /&gt;
&lt;br /&gt;
Connecteur indépendant, &#039;&#039;&#039;non affilié à Pennylane SAS&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x (testé sur 18.0.5, 20.0.4 et 24.0.0, PHP 8.2)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 à 8.3&lt;br /&gt;
|-&lt;br /&gt;
! Prérequis || Modules Facturation et Tiers ; module Cron recommandé ; un jeton d&#039;API Pennylane&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (cURL pur)&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3483 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Factures clients&#039;&#039;&#039; validées envoyées avec leur PDF, leurs lignes, leurs taux de TVA et leur compte de produit. Avoirs et acomptes compris ; un avoir référence sa facture d&#039;origine.&lt;br /&gt;
# &#039;&#039;&#039;Factures fournisseurs&#039;&#039;&#039; saisies dans Dolibarr, envoyées avec le scan du fournisseur déposé dans l&#039;onglet &#039;&#039;Documents&#039;&#039; (voir [[#Quel PDF part|Quel PDF part]]).&lt;br /&gt;
# &#039;&#039;&#039;Création des tiers&#039;&#039;&#039; au premier envoi (société ou particulier, fournisseur sous son propre rôle), puis mise à jour ensuite.&lt;br /&gt;
# &#039;&#039;&#039;Résolution automatique des comptes comptables&#039;&#039;&#039; : le numéro de compte Dolibarr est traduit en identifiant Pennylane, avec mise en cache. Aucune table de correspondance à saisir à la main.&lt;br /&gt;
# &#039;&#039;&#039;File d&#039;attente tracée&#039;&#039;&#039; : chaque envoi est un job avec son statut, ses tentatives et le message exact renvoyé par l&#039;API. Reprise automatique, rejeu manuel, rattrapage d&#039;historique.&lt;br /&gt;
# &#039;&#039;&#039;Rapport d&#039;écart&#039;&#039;&#039; : mois par mois, ce que Dolibarr a validé face à ce que Pennylane a reçu — à vérifier avant une clôture.&lt;br /&gt;
# &#039;&#039;&#039;Panneau sur la fiche facture&#039;&#039;&#039; : PDF qui partira, date d&#039;envoi, identifiant distant, lien vers la pièce.&lt;br /&gt;
&lt;br /&gt;
Le module respecte les limites de débit de l&#039;API Pennylane (25 requêtes par tranche de 5 secondes) en se freinant sur les en-têtes de quota renvoyés par le serveur.&lt;br /&gt;
&lt;br /&gt;
== Les règlements : ce que le module fait, et pourquoi ==&lt;br /&gt;
&lt;br /&gt;
L&#039;API Pennylane ne permet pas d&#039;attacher un paiement chiffré à une facture, et une écriture comptable créée par l&#039;API ne peut pas être lettrée avec une pièce. Publier des règlements par ce biais laisserait des écritures à lettrer à la main et ferait double emploi avec le flux bancaire du cabinet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Le module ne pousse donc aucune écriture de règlement.&#039;&#039;&#039; À la place, chaque facture part avec une &#039;&#039;&#039;référence de rapprochement&#039;&#039;&#039; qui indique à Pennylane comment reconnaître le mouvement bancaire correspondant : le numéro de facture, ou l&#039;identifiant du paiement Stripe lorsque le module [[Module Stripe Payment Links|Stripe Payment Links]] est actif. Le lettrage devient exact parce que la référence l&#039;est.&lt;br /&gt;
&lt;br /&gt;
== Ce que le module ne fait pas ==&lt;br /&gt;
&lt;br /&gt;
* Il ne rapatrie rien de Pennylane vers Dolibarr : pas de double source de vérité.&lt;br /&gt;
* Il ne remplace pas la comptabilité de Dolibarr : il alimente celle du cabinet.&lt;br /&gt;
* Il n&#039;envoie ni commandes, ni devis, ni notes de frais, ni salaires.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Copier &amp;lt;code&amp;gt;pennylanesync/&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;htdocs/custom/&amp;lt;/code&amp;gt;, ou installer le zip depuis &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039;.&lt;br /&gt;
# Activer &#039;&#039;&#039;Pennylane Sync&#039;&#039;&#039; (famille « Finance / Facturation »).&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
# Dans Pennylane : &#039;&#039;Settings → Connectivity → Developers&#039;&#039; → créer un jeton d&#039;API. &#039;&#039;&#039;Un jeton correspond à une société.&#039;&#039;&#039;&lt;br /&gt;
# Coller le jeton dans la configuration du module et tester la connexion.&lt;br /&gt;
# Choisir ce qui est envoyé (factures clients, factures fournisseurs), et activer la tâche planifiée qui traite la file d&#039;attente.&lt;br /&gt;
# Facultatif : lancer un rattrapage d&#039;historique sur une période passée.&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
À la validation d&#039;une facture, un job est déposé dans la file. La tâche planifiée l&#039;exécute : le PDF est d&#039;abord téléversé, puis la facture est importée avec sa référence au fichier. Le panneau de la fiche facture montre l&#039;état de l&#039;envoi, et la page de la file permet de rejouer un job en échec après correction. Avant une clôture, le rapport d&#039;écart compare mois par mois les deux systèmes.&lt;br /&gt;
&lt;br /&gt;
== Quel PDF part ==&lt;br /&gt;
&lt;br /&gt;
Pennylane n&#039;importe une facture qu&#039;avec son PDF, et une pièce importée ne se remplace plus par l&#039;API. Le module choisit donc le fichier avant l&#039;envoi :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Facture client&#039;&#039;&#039; : le PDF généré par Dolibarr.&lt;br /&gt;
* &#039;&#039;&#039;Facture fournisseur&#039;&#039;&#039; : le scan du fournisseur déposé dans l&#039;onglet &#039;&#039;Documents&#039;&#039; de la facture, choisi dans cet ordre :&lt;br /&gt;
*# le fichier nommé &amp;lt;code&amp;gt;&amp;amp;lt;REF&amp;amp;gt;.pdf&amp;lt;/code&amp;gt;, où &amp;amp;lt;REF&amp;amp;gt; est la référence Dolibarr de la facture ;&lt;br /&gt;
*# sinon, le seul scan déposé ;&lt;br /&gt;
*# sinon, le scan dont le nom contient la référence du fournisseur.&lt;br /&gt;
* &#039;&#039;&#039;Sans aucun scan&#039;&#039;&#039;, c&#039;est le PDF généré par Dolibarr qui part. Quand une facture fournisseur a à la fois un PDF généré et un scan, c&#039;est le scan qui part.&lt;br /&gt;
* &#039;&#039;&#039;Plusieurs scans sans indice&#039;&#039;&#039; : l&#039;envoi est refusé avec le motif « PDF ambigu ». Renommez le bon fichier en &amp;lt;code&amp;gt;&amp;amp;lt;REF&amp;amp;gt;.pdf&amp;lt;/code&amp;gt; ou retirez les autres.&lt;br /&gt;
* &#039;&#039;&#039;Relance automatique&#039;&#039;&#039; : déposer, renommer ou retirer un PDF sur la facture remet en file un envoi bloqué pour PDF manquant ou ambigu, sans rejeu manuel. Même chose quand on génère le PDF d&#039;une facture client. Les autres échecs restent en l&#039;état.&lt;br /&gt;
&lt;br /&gt;
Le panneau de la fiche facture indique le PDF qui partira, ou ce qu&#039;il faut faire pour débloquer l&#039;envoi.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : envoi des factures clients et fournisseurs avec PDF, création et mise à jour des tiers, résolution des comptes comptables, file d&#039;attente tracée avec rejeu et rattrapage, référence de rapprochement bancaire, rapport d&#039;écart mensuel, panneau sur la fiche facture, FR/EN&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || Corrections : la file d&#039;attente ne distribue plus un même job à deux exécutions, la fusion de tiers ne crée plus de doublon chez Pennylane, la purge des journaux respecte l&#039;entité, la reprise à 12 h est atteignable et les numéros de compte courts sont résolus&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.2 || PDF obligatoire pour tout import ; factures abandonnées exclues ; recherche par référence externe avant de créer un tiers ou d&#039;importer une facture ; devises non prises en charge refusées ; guide de démarrage FR/EN et messages d&#039;erreur dépliables&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.3 || Interface harmonisée (compteurs, filtres, tableaux, badges, panneau de la facture) ; moteur de synchronisation inchangé&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.4 || Facture fournisseur : le scan déposé dans l&#039;onglet &#039;&#039;Documents&#039;&#039; part avec la facture (&amp;lt;code&amp;gt;&amp;amp;lt;REF&amp;amp;gt;.pdf&amp;lt;/code&amp;gt;, sinon le seul scan, sinon celui dont le nom contient la référence du fournisseur ; refus « PDF ambigu » s&#039;il y a plusieurs scans sans indice). Relance automatique au dépôt, au renommage ou au retrait d&#039;un PDF. Le panneau de la facture indique le PDF qui partira&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.5 || Compatible Dolibarr 18 et 19 (20 minimum auparavant) : le module s&#039;installe de Dolibarr 18 à 24. En 18 et 19, le panneau de la fiche facture s&#039;affiche dans le tableau des attributs. Moteur d&#039;envoi inchangé&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_ExportFlow&amp;diff=68060</id>
		<title>Module ExportFlow</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_ExportFlow&amp;diff=68060"/>
		<updated>2026-10-14T19:46:32Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Création de la page du module ExportFlow 1.0.0 (exports Excel, LibreOffice, CSV, PDF et envois programmés)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module ExportFlow ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Nom !! Éditeur !! Prix !! Compatibilité !! Langues&lt;br /&gt;
|-&lt;br /&gt;
| ExportFlow 1.0.0 || arcchester || 79 € HT (Dolistore) || Dolibarr 18 à 24, PHP 7.4 à 8.3 || fr, en, es, de, it&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ExportFlow&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui ajoute un bouton &#039;&#039;&#039;Exporter&#039;&#039;&#039; sur toutes les listes de Dolibarr et des modules externes. Le fichier reprend exactement l&#039;écran (filtres, tri, colonnes, toutes les pages) au format &#039;&#039;&#039;Excel (.xlsx), LibreOffice Calc (.ods), CSV ou PDF&#039;&#039;&#039;. Une liste peut aussi être envoyée par e-mail en un clic, ou &#039;&#039;&#039;programmée&#039;&#039;&#039; (chaque jour, semaine, mois) avec une &#039;&#039;&#039;période glissante&#039;&#039;&#039; sur ses filtres de date.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
# Accueil › Configuration › Modules › &#039;&#039;Déployer un module externe&#039;&#039; : envoyez le fichier zip.&lt;br /&gt;
# Activez &#039;&#039;&#039;ExportFlow&#039;&#039;&#039; (famille Technique).&lt;br /&gt;
# Pour les envois programmés, activez le module &#039;&#039;&#039;Travaux planifiés&#039;&#039;&#039; (cron) et vérifiez l&#039;onglet &#039;&#039;À propos et diagnostic&#039;&#039; de la configuration d&#039;ExportFlow.&lt;br /&gt;
&lt;br /&gt;
== Droits ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Droit !! Par défaut !! Effet&lt;br /&gt;
|-&lt;br /&gt;
| Exporter les listes affichées || Oui || Bouton Exporter, téléchargement des fichiers&lt;br /&gt;
|-&lt;br /&gt;
| Envoyer une liste par e-mail et programmer ses propres envois || Non || Menus « Envoyer par e-mail » et « Programmer un envoi », écran des envois&lt;br /&gt;
|-&lt;br /&gt;
| Gérer tous les envois programmés et consulter tout le journal || Non || Envois et journal de tous les utilisateurs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
=== Exporter une liste ===&lt;br /&gt;
Ouvrez une liste, filtrez-la et choisissez vos colonnes comme d&#039;habitude. Le bouton &#039;&#039;&#039;Exporter&#039;&#039;&#039; se trouve à côté des boutons d&#039;affichage (liste, kanban, statistiques). Un clic sur un format exporte &#039;&#039;&#039;toute la liste filtrée&#039;&#039;&#039; ; si des lignes sont cochées, seules celles-ci sont exportées. &#039;&#039;Options d&#039;export…&#039;&#039; permet de choisir le périmètre (toute la liste, page affichée, lignes cochées), les colonnes, le titre du document, la ligne de totaux et l&#039;orientation du PDF.&lt;br /&gt;
&lt;br /&gt;
=== Ce que contient le fichier ===&lt;br /&gt;
* Nombres, montants, pourcentages et dates de vrais types, relus selon la langue de l&#039;utilisateur.&lt;br /&gt;
* Codes postaux, téléphones, codes clients, EAN et SIRET gardés en texte.&lt;br /&gt;
* Ligne de totaux en SOUS.TOTAL (suit les filtres automatiques du tableur).&lt;br /&gt;
* Références cliquables vers les fiches Dolibarr.&lt;br /&gt;
* Feuille &#039;&#039;Informations&#039;&#039; : liste, filtres appliqués, tri, auteur, date, adresse de la liste.&lt;br /&gt;
* PDF : logo et coordonnées de la société, filtres, orientation et police calculées, entête répétée, totaux, page x / y.&lt;br /&gt;
&lt;br /&gt;
=== Envoyer par e-mail ===&lt;br /&gt;
&#039;&#039;Exporter › Envoyer par e-mail…&#039;&#039; : destinataires, copie, objet, message. Le fichier est envoyé par la messagerie de Dolibarr, avec un récapitulatif (liste, lignes, filtres).&lt;br /&gt;
&lt;br /&gt;
=== Programmer un envoi ===&lt;br /&gt;
&#039;&#039;Exporter › Programmer un envoi…&#039;&#039; ouvre un formulaire pré-rempli avec la liste courante :&lt;br /&gt;
* périodicité : tous les jours, du lundi au vendredi, chaque semaine (jour), chaque mois (jour ou dernier jour), heure ;&lt;br /&gt;
* &#039;&#039;&#039;période glissante&#039;&#039;&#039; : hier, aujourd&#039;hui, 7 ou 30 derniers jours, semaine, mois, trimestre ou année en cours ou précédent(e), appliquée à l&#039;un des filtres de date de la liste ;&lt;br /&gt;
* destinataires, objet (variables &amp;lt;code&amp;gt;{period}&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;{date}&amp;lt;/code&amp;gt;), message ;&lt;br /&gt;
* options : envoyer même si la liste est vide, conserver une copie des fichiers.&lt;br /&gt;
Les envois se gèrent dans &#039;&#039;Outils › Exports et envois › Envois programmés&#039;&#039; (envoyer maintenant, télécharger maintenant, historique, fichiers archivés).&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
* Formats proposés et nombre maximal de lignes par format (au-delà, refus clair, jamais de troncature).&lt;br /&gt;
* Tableurs : totaux, liens, feuille Informations, lignes alternées.&lt;br /&gt;
* PDF : orientation, couleur de l&#039;entête, logo, mention de pied de page.&lt;br /&gt;
* CSV : séparateur, nombres, BOM UTF-8.&lt;br /&gt;
* Pages exclues, tableaux secondaires.&lt;br /&gt;
* Envois programmés : URL interne, conservation des fichiers et du journal, test de connexion.&lt;br /&gt;
&lt;br /&gt;
== Envois programmés : la connexion du serveur vers lui-même ==&lt;br /&gt;
La tâche planifiée rejoue chaque liste en appelant Dolibarr depuis le serveur, avec un jeton à usage unique. Si le test « Connexion du serveur vers lui-même » échoue (pare-feu, proxy, conteneur), renseignez une &#039;&#039;&#039;URL interne&#039;&#039;&#039; joignable depuis le serveur, par exemple &amp;lt;code&amp;gt;http://127.0.0.1/dolibarr&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;http://localhost:8080&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Sécurité ==&lt;br /&gt;
* La liste est rejouée avec les droits de l&#039;utilisateur : il n&#039;exporte que ce qu&#039;il voit.&lt;br /&gt;
* Les paramètres d&#039;action (action, massaction, confirm…) ne sont jamais rejoués.&lt;br /&gt;
* Le texte n&#039;est jamais interprété comme formule ; le CSV neutralise les cellules commençant par = + - @.&lt;br /&gt;
* Journal de chaque export (utilisateur, liste, format, lignes, destinataires).&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
support@arcchester.com&lt;br /&gt;
&lt;br /&gt;
Page Dolistore : rechercher « ExportFlow » sur https://www.dolistore.com&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=List_of_modules_id&amp;diff=67992</id>
		<title>List of modules id</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=List_of_modules_id&amp;diff=67992"/>
		<updated>2026-10-11T00:01:40Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: /* ID 100000 - 499999 */ Reserve 303620–303629 for Arcchester; assign 303620 to Focus.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDevEn}}&lt;br /&gt;
{{TemplateDocDevEs}}&lt;br /&gt;
{{TemplateDocDevFr}}&lt;br /&gt;
{{TemplateDocDevZh}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page list all reserved modules numbers / ID.&lt;br /&gt;
&lt;br /&gt;
If you build or want to build your own modules, you should take an ID range here. Please pick range into existing holes first.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=ID 0 - 94999=&lt;br /&gt;
This range is reserved for Dolibarr&#039;s internal core modules, so all modules available into the standard distribution at https://github.com/Dolibarr/dolibarr&lt;br /&gt;
&lt;br /&gt;
=ID 95000 - 99999=&lt;br /&gt;
This range is reserved for Dolibarr&#039;s community modules with sources hosted into the github repository: https://github.com/Dolibarr/dolibarr-community-modules&lt;br /&gt;
&lt;br /&gt;
=ID 100000 - 499999=&lt;br /&gt;
&lt;br /&gt;
Reserved area for editors in need for an ID range. You can edit this page to add your own range (take a range of 20 numbers only the first time, ask us for more)&lt;br /&gt;
&lt;br /&gt;
[[File:Warning.png]] If you reserve more than 10 at once, we may automatically change your reservation range without information and you may experience conflicts with other modules in a future, so please follow the rules! &lt;br /&gt;
&lt;br /&gt;
*ID 100000 - 100999: OpenThink (http://www.openthink.be) - Belgium&lt;br /&gt;
*ID 101000 - 101999: DoliCloud (https://www.dolicloud.com) - France&lt;br /&gt;
*ID 102000 - 102999: Tiaris (http://www.tiaris.fr) - France&lt;br /&gt;
*ID 103000 - 103999: Open-concept.pro (http://www.open-concept.pro) - France&lt;br /&gt;
*ID 104000 - 104999: ATM Consulting (http://www.atm-consulting.fr) - France&lt;br /&gt;
*ID 105000 - 105999: GPC.solutions - France&lt;br /&gt;
*ID 106000 - 106999: PHPASSO&lt;br /&gt;
*ID 107000 - 107999: TecLib (http://www.teclib.com) / Auguria (http://www.auguria.net) - France&lt;br /&gt;
*ID 108000 - 108999: ETHICWEB&lt;br /&gt;
*ID 109000 - 109999: Aplose ([http://www.aplose.fr https://www.aplose.fr]) - France&lt;br /&gt;
*ID 110000 - 110999: Association Dolibarr (https://www.dolibarr.org)&lt;br /&gt;
*ID 111000 - 111999: Asset IT (www.assetit.ch) - Suisse&lt;br /&gt;
*ID 112000 - 112999: Aarboard AG ([https://www.aarboard.ch www.aarboard.ch]) - Suisse&lt;br /&gt;
*ID 113000 - 113999: Asilib - Alexandre Spangaro&lt;br /&gt;
*ID 114000 - 114999: Iceleaf OÜ&lt;br /&gt;
*ID 115000 - 115999: 2A2C Conseil - Cyril ZEKSER&lt;br /&gt;
*ID 116000 - 116999: Wolftec GmbH&lt;br /&gt;
*ID 117000 - 117999: Oscim (http://www.oscim.fr)&lt;br /&gt;
*ID 118000 - 118999: Oarces Web (dev.oarces.com)&lt;br /&gt;
*ID 119000 - 119999: Manuel Berrocal - Absolacom&lt;br /&gt;
*ID 120000 - 120999: Régis Houssin (http://www.inodbox.com) - France&lt;br /&gt;
*ID 121000 - 121999: Oscss - Shop - France&lt;br /&gt;
*ID 122000 - 122999: MrSof - la Nation du Web&lt;br /&gt;
*ID 123000 - 123999: Bruno Généré (webiseasy.org)&lt;br /&gt;
*ID 124000 - 124999: 7reasons s.r.l. (www.7reasons.eu) - Austria&lt;br /&gt;
*ID 125000 - 125999: ProgSI (www.progsi.ma)&lt;br /&gt;
*ID 126000 - 126999: Catalanet&lt;br /&gt;
*ID 127000 - 127999: Virgilio Filho pt-BR Brasil (@dolibarr.br) - Brazil&lt;br /&gt;
*ID 128000 - 128999: Nicolas Frappé France (www.sospc.info)&lt;br /&gt;
*ID 129000 - 129999: Adeo-Informatique&lt;br /&gt;
*ID 130000 - 130999: Technicks ICT (http://www.technicks.eu) - Italy&lt;br /&gt;
*ID 131000 - 131999: Joan Louis (itaca.fr) - France&lt;br /&gt;
*ID 132000 - 132999: Jean-Marie Arsac (https://azimut.fr) - France&lt;br /&gt;
*ID 133000 - 133999: Oriel Systems Ltd, UK. (www.orielsystems.com)&lt;br /&gt;
*ID 134000 - 134999: ALSOFT PVT. LTD. (https://www.alsoft.org)&lt;br /&gt;
*ID 135000 - 135999: Net-Logic (https://netlogic.fr)&lt;br /&gt;
*ID 136000 - 136050: MONA.RE - France&lt;br /&gt;
*ID 136051 - 136099: La Vida Marketing&lt;br /&gt;
*ID 136100 - 136149: Synergies-Tech France. (https://www.synergies-france.fr/)&lt;br /&gt;
*ID 136150 - 136199: Lyta&lt;br /&gt;
*ID 136200 - 136219: Maison Théophile Leclerc&lt;br /&gt;
*ID 136220 - 136270: SegoFount - Spain&lt;br /&gt;
*ID 136271 - 136320: Labor Dispatch (Simon Sheng , China)&lt;br /&gt;
*ID 136321 - 136370: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 136371 - 136420: Daxit Solutions (https://www.daxit.be) [https://wiki.dolibarr.org/index.php/DAXIT-SOLUTIONS_List_of_modules_id Liste complète des modules Daxit]&lt;br /&gt;
*ID 136421 - 136470: HUSCH GmbH (https://husch-gmbh.de)&lt;br /&gt;
*ID 136471 - 138999: NSINFO (https://www.ns-info.fr)&lt;br /&gt;
*ID 139000 - 139999: Synergies-Tech France. (https://www.synergies-france.fr/)&lt;br /&gt;
*ID 140000 - 140999: Altairis (http://altairis.fr)&lt;br /&gt;
*ID 141000 - 141050: Projet2Team (https://www.projet2team.fr)&lt;br /&gt;
*ID 141051 - 141099: Elistair (http://elistair.com)&lt;br /&gt;
*ID 141100 - 141149: Blue Networks Technologies (https://www.blnt.fr)&lt;br /&gt;
*ID 141150 - 141199: Mainlab S.r.l. (https://www.mainlabonline.it) - Italy&lt;br /&gt;
*ID 141200 - 141249: Florian DUFOURG - France&lt;br /&gt;
*ID 141250 - 141299: SoftAddicts - Canada&lt;br /&gt;
*ID 141300 - 141349: Finanboo - (https://www.finanboo.com)&lt;br /&gt;
*ID 141350 - 141399: ConstruxZion Soft - Colombia (https://www.construxzionsoft.com.co)&lt;br /&gt;
*ID 141400 - 141450: COEXDIS - République Démocratique du Congo (https://www.coexdis.com)&lt;br /&gt;
*ID 141451 - 141501: HALFWARE - Algeria (https://www.half-ware.com)&lt;br /&gt;
*ID 141502 - 141552: Quantraum (https://quantraum.com)&lt;br /&gt;
*ID 141553 - 141603: Nateo Group&lt;br /&gt;
*ID 141604 - 141653: digital centric GmbH (https://www.digitalcentric.de/dolibarr)&lt;br /&gt;
*ID 141654 - 141699: Decrypting (https://www.decrypting.fr)&lt;br /&gt;
*ID 141700 - 141749: Zeise IT Consulting - Germany (https://www.zeise-it.de)&lt;br /&gt;
*ID 141750 - 141799: Data Rooster - France (https://datarooster.io)&lt;br /&gt;
*ID 141800 - 141849: IP Développement (https://www.ipdeveloppement.fr)&lt;br /&gt;
*ID 141850 - 141899: MSICCA | MRVL Soluciones de Ingeniería y Construcción, c.a (https://msicca.com)&lt;br /&gt;
*ID 141900 - 141949: THERSANE (https://www.thersane.fr)&lt;br /&gt;
*ID 141950 - 141999: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 142000 - 142049: ITANéA (https://www.itanea.fr)&lt;br /&gt;
*ID 142050 - 142099: ERP Consulting NZ ([https://www.erpconsulting.co.nz www.erpconsulting.co.nz])&lt;br /&gt;
*ID 142100 - 142149: Bloxera GmbH (https://www.bloxera.com)&lt;br /&gt;
*ID 142150 - 142199: Evangelos Souglakos - Greece&lt;br /&gt;
*ID 142200 - 142249: Luc CALARESU - France&lt;br /&gt;
*ID 142250 - 142299: OmnIT Services - Belgique (https://www.omnitservices.biz)&lt;br /&gt;
*ID 142300 - 142349: Gwadeyes - Guadeloupe (https://www.gwadeyes-informatique.com/)&lt;br /&gt;
*ID 142350 - 142399: Solution Libre (https://www.solution-libre.fr/)&lt;br /&gt;
*ID 142400 - 142449: Res Digital (https://res.digital)&lt;br /&gt;
*ID 142450 - 142499: itopie informatique (https://www.itopie.ch)&lt;br /&gt;
*ID 142500 - 142549: Weblinx.IT GbR (https://weblinx.it/) - Germany&lt;br /&gt;
*ID 142550 - 142599: ASCI-Automation - Mexico (https://asci-automation.com.mx/)&lt;br /&gt;
*ID 142600 - 142649: ZENKO Design - Japan / France / Spain&lt;br /&gt;
*ID 142650 - 142699: AWeerWolf&lt;br /&gt;
*ID 142700 - 148749: Lysis (https://lysis.net/)&lt;br /&gt;
*ID 142750 - 142769: Doliplug (https://www.doliplug.com)&lt;br /&gt;
*ID 142770 - 142799: PandaERP&lt;br /&gt;
*ID 142800 - 142849: Bloxera GmbH (https://www.bloxera.com)&lt;br /&gt;
*ID 142850 - 144999: Everlats S.L. - España (https://www.everlats.com)&lt;br /&gt;
*ID 145000 - 145299: Gestsuite ERP ([https://www.everlats.com https://www.gestsuite.com])&lt;br /&gt;
*ID 149000 - 149999: SydTech - America Central (https://www.sydtech.io/)&lt;br /&gt;
*ID 150000 - 150999: Jeffinfo&lt;br /&gt;
*ID 151000 - 151999: Konverseo (https://konverseo.com)&lt;br /&gt;
*ID 152000 - 152049: Tanguy Pénet (http://tanguype.net)&lt;br /&gt;
*ID 152050 - 152099: Web Solutions&lt;br /&gt;
*ID 152100 - 152149: MagicNet (https://www.magicnet.it)&lt;br /&gt;
*ID 152150 - 152199: Benjamin Falière (https://www.faliere.com)&lt;br /&gt;
*ID 152200 - 152249: Solauv&lt;br /&gt;
*ID 152250 - 156499: TecnoGestión Principado S.L. (https://www.tecnogestion.com) - Asturias - España&lt;br /&gt;
*ID 156500 - 156549: ACE Recycling  (https://www.acerecycling.net.au/)&lt;br /&gt;
*ID 156550 - 156599: Kreativität Works ([http://www.kreativitat.com http://kreativitat.com])&lt;br /&gt;
*ID 156600 - 156649: [https://pierre-couy.dev Pierre Couy]&lt;br /&gt;
*ID 156650 - 156699: CXI (https://cyrix.co.za)&lt;br /&gt;
*ID 156700 - 156749: Mustafa Kemerci - Turkiye&lt;br /&gt;
*ID 156750 - 156799: [https://de-grandpre.quebec de Grandpré Technologies] - Québec (Canada)&lt;br /&gt;
*ID 156800 - 156849: Draceo&lt;br /&gt;
*ID 156850 - 156899: Valleiweb&lt;br /&gt;
*ID 156900 - 159949: NEOVIAQ Advisory LU(https://www.neoviaq.com)&lt;br /&gt;
*ID 159950 - 159999: Arve et Giffre INFOGESTION (https://www.ag-infogestion.fr)&lt;br /&gt;
*ID 160000 - 160999: Charles-François BENKE (http://www.patas-monkey.com)&lt;br /&gt;
*ID 161000 - 161999: Abbes Bahfir (https://01consulting.eu)&lt;br /&gt;
*ID 162000 - 162999: Jacques Rébiscoul&lt;br /&gt;
*ID 163000 - 163999: Open-DSI (https://www.open-dsi.fr)&lt;br /&gt;
*ID 164000 - 164999: Pixelada S. Coop. And. (https://pixelada.org)&lt;br /&gt;
*ID 165000 - 165049: DovConnect&lt;br /&gt;
*ID 165050 - 165099: Mind Operated Systems (https://www.mosystems.biz)&lt;br /&gt;
*ID 165100 - 165150: SD-Formation (https://sdformation.fr)&lt;br /&gt;
*ID 165151 - 165199: NUM&#039;X (https://www.numx-sets.eu)&lt;br /&gt;
*ID 165200 - 165249: Benjam Préjent (https://www.benjam-prejent.fr)&lt;br /&gt;
*ID 165250 - 165299: Dhi Loka Private Limited, India (https://www.dhiloka.com)&lt;br /&gt;
*ID 165300 - 169999: Accellier Limited (https://www.accellier.com/)&lt;br /&gt;
*ID 170000 - 170999: TRIDENT CONSULTING LTD (www.tridentdxb.com)&lt;br /&gt;
*ID 171000 - 171999: LVSInformatique (www.lvsinformatique.com)&lt;br /&gt;
*ID 172000 - 172299: Ray Soft-Systems (https://www.ray-soft-systems.com)&lt;br /&gt;
*ID 172300 - 172349: Günter Lukas Consulting (https://gl.co.at)&lt;br /&gt;
*ID 172350 - 172399: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 172400 - 172449: Professional Structures Limited (https://pstructures.com)&lt;br /&gt;
*ID 172450 - 172699: IT-BS (https://www.it-bs.fr)&lt;br /&gt;
*ID 172700 - 172749: Indelog (https://www.indelog.fr)&lt;br /&gt;
*ID 172750 - 172799: NSINFO (https://www.ns-info.fr)&lt;br /&gt;
*ID 172800 - 172849: E-Concept Applications (https://e-concept-applications.fr)&lt;br /&gt;
*ID 172850 - 172899: B&amp;amp;R Stamm UG (https://stamm-ug.de)&lt;br /&gt;
*ID 172900 - 172949: Dolipive, support@dolipive.fr, www.dolipive.fr&lt;br /&gt;
*ID 172950 - 172999: CKD-Industrie (https://ckd-industrie.com/) - France&lt;br /&gt;
*ID 173000 - 173049: Aneosys (https://aneosys.fr) - France&lt;br /&gt;
*ID 173050 - 173099: Sebastian Schloßer - Germany&lt;br /&gt;
*ID 173100 - 173149: TecnoSoluciones (https://tecnosoluciones.com)&lt;br /&gt;
*ID 173150 - 173199: Digitalworks (https://www.digitalworks.fr) - France&lt;br /&gt;
*ID 173200 - 173249: UNi.D Consulting (https://www.unid-consulting.fr) - France&lt;br /&gt;
*ID 173250 - 173299: NetworkDigital(https://www.networkdigital.fr) - France&lt;br /&gt;
*ID 173300 - 173300: Módulo VeriFactu Dolibarr (https://verifactudolibarr.es/) - España&lt;br /&gt;
*ID 173301 - 173320: Sibanet (https://sibanet.net) - España&lt;br /&gt;
*ID 173321 - 173340: disQutons (https://wiki.dolibarr.org/index.php/Category:DisQutons) - France&lt;br /&gt;
*ID 173341 - 173360: Surática Software (https://suratica.es) - Spain&lt;br /&gt;
*ID 173361 - 173380: UpInvoice (https://upinvoice.eu) - Spain&lt;br /&gt;
*ID 173381 - 179999: Toutatis (https://toutatis.eu)&lt;br /&gt;
*ID 180000 - 180999: BM eXpert Labs&lt;br /&gt;
*ID 181000 - 181999: TI Sin Problemas (https://www.tisinproblemas.com)&lt;br /&gt;
*ID 182000 - 182049: Chipserv Pawel Wlizlo (https://www.testware.it)&lt;br /&gt;
*ID 182050 - 182070: Herolapse (https://herolapse.com/)&lt;br /&gt;
*ID 182061 - 182999: TMC&lt;br /&gt;
*ID 183000 - 183999: BB2A Anthony Berton (https://www.bb2a.fr)&lt;br /&gt;
*ID 184000 - 184999: DPS PRINTING &amp;amp; DOCUMENTS SOCIEDAD ANONIMA (https://www.dps-lat.com)&lt;br /&gt;
*ID 185000 - 185049: Telioskour (https://github.com/telioskour)&lt;br /&gt;
*ID 185050 - 185099: Moko Consulting ([[Moko Consulting]] || https://mokoconsulting.tech)&lt;br /&gt;
*ID 185100 - 185149: Sinabe (https://sinabe.ch) - Suisse&lt;br /&gt;
*ID 185150 - 185169: Anatole Conseil (https://anatoleconseil.com/)&lt;br /&gt;
*ID 185170 - 185189: cferoiu&lt;br /&gt;
*ID 185190 - 185209: Guillemonde (https://guillemonde.family)&lt;br /&gt;
*ID 185210 - 185229: ITized - Finta Ionut (https://itized.com)&lt;br /&gt;
*ID 185230 - 185249: svewa (https://github.com/svewa/)&lt;br /&gt;
*ID 185250 - 185269: Clément Jaunay (https://clement-jny.fr/ || contact@clement-jny.fr)&lt;br /&gt;
*ID 185270 - 185289: AMB Technologies (https://www.ambts.fr)&lt;br /&gt;
*ID 185290 - 185299: VIOLET IT UG (https://violet-it.de)&lt;br /&gt;
*ID 185300 - 185319: lorem.site &#039;&#039;&#039;(&#039;&#039;&#039;https://lorem.site/&#039;&#039;&#039;)&#039;&#039;&#039;&lt;br /&gt;
*ID 185320 - 185340: Rentageek  (https://rentageek.hu) Hungary&lt;br /&gt;
*ID 185341 - 185360: Hamzavi Infotech (&amp;lt;nowiki&amp;gt;https://www.hamzaviinfotech.com&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
*ID 185361 - 185380: La souris de Gutenberg (&amp;lt;nowiki&amp;gt;https://www.lasourisdegutenberg.fr&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
*ID 185381 - 185400: LodinPay (https://www.lodinpay.io)&lt;br /&gt;
*ID 185401 - 185420: Avertissance (https://avertissance.fr). France&lt;br /&gt;
*ID 185421 - 185849: TH Investissements / Matelas No Stress - France (internal ERP / production / logistics modules)&lt;br /&gt;
*ID 185850 - 185899: B&amp;amp;R Stamm UG (&amp;lt;nowiki&amp;gt;https://stamm-ug.de&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
*ID 185900 - 185919: OpenLine Solutions - Olaf John (https://openlinesolutions.de) - Germany&lt;br /&gt;
*ID 185920 - 189999: Abadia Tecnologica - (https://abadiatecnologica.com) - Spain&lt;br /&gt;
*ID 190000 - 190999: Diciannove (http://19.coop)&lt;br /&gt;
*ID 191000 - 191999: Elonet (https://elonet.fr)&lt;br /&gt;
*ID 192000 - 192049: IDFOR Consulting (https://www.idfor-consulting.fr/)&lt;br /&gt;
*ID 192050 - 192069: Stogger (&amp;lt;nowiki&amp;gt;https://stogger.com&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
*ID 192070 - 192090: Protectora&lt;br /&gt;
*ID 192091 - 192110: CoopCircuits - OpenFoodNetwork (https://coopcircuits.fr/)&lt;br /&gt;
*ID 192111 - 192130: Saidigit - Belgique&lt;br /&gt;
*ID 192131 - 192150: Lia Concept (https://lia-concept.fr)&lt;br /&gt;
*ID 192151 - 192999: GHM LABS (https://ghm-labs.ma/)&lt;br /&gt;
*ID 193000 - 193020: Forlead (https://forlead.fr/)&lt;br /&gt;
*ID 193021 - 193041: Doliway (https://doliway.fr)&lt;br /&gt;
*ID 193042 - 193062: ERPkit ( https://erpkit.app )&lt;br /&gt;
*ID 193063 - 193083: Eric FALCON&lt;br /&gt;
*ID 193084 - 193103: Ienx2&lt;br /&gt;
*ID 193104 - 193123: OpenLine Solutions - Olaf John (https://openlinesolutions.de) - Germany&lt;br /&gt;
*ID 193124 - 193144: zeug.it - Germany&lt;br /&gt;
*ID 193145 - 193164: Alpenia (https://alpenia.app)&lt;br /&gt;
*ID 193165 - 193174: Nicolas Gracia - France&lt;br /&gt;
*ID 193174 - 193879: Ronald ASSOUS - OBS - France&lt;br /&gt;
*ID 193880 - 193899: Ideal Solutions&lt;br /&gt;
*ID 193900 - 193919: BRiCK (https://justbrick.fr)&lt;br /&gt;
*ID 193920 - 193929: &#039;&#039;&#039;DoliHub&#039;&#039;&#039; (ergoCogn, [https://dolihub.ch dolihub.ch]) - Switzerland&lt;br /&gt;
*ID 193930 - 193939: Unified Software&lt;br /&gt;
*ID 193940 - 193949: &#039;&#039;&#039;Anatole Conseil (&amp;lt;nowiki&amp;gt;https://anatoleconseil.com/&amp;lt;/nowiki&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
*ID 193950 - 193959: KIZILTANLAR - Ayhan Kızıltan - Türkiye&lt;br /&gt;
*ID 193960 - 193969: DesignShot (https://design-shot.com) | Germany&lt;br /&gt;
*ID 193970 - 193979: Yurexa (&amp;lt;nowiki&amp;gt;https://ko-fi.com/yurexa&amp;lt;/nowiki&amp;gt;) - France&lt;br /&gt;
*ID 193980 - 193989: Tekynod Sàrl (https://tekynod.ch) - Switzerland&lt;br /&gt;
*ID 193990 - 193999: &#039;&#039;&#039;DEVTHIS&#039;&#039;&#039; (https://devthis.fr) - France&lt;br /&gt;
*ID 194000 - 194019: Integmia&lt;br /&gt;
*ID 194020 - 194039: Goeger-IT (https://www.goeger-it.de) - Germany&lt;br /&gt;
*ID 194040 - 194050: &#039;&#039;&#039;Cédric Roy - France&#039;&#039;&#039;&lt;br /&gt;
*ID 194051 - 194060: &#039;&#039;&#039;Anatole Conseil (&amp;lt;nowiki&amp;gt;https://anatoleconseil.com/&amp;lt;/nowiki&amp;gt;)&#039;&#039;&#039;&lt;br /&gt;
*ID 194061 - 194070: &#039;&#039;&#039;R. Juan - GMAO+ - France&#039;&#039;&#039;&lt;br /&gt;
*ID 194071 - 194080: Idoo (https://idoo.mx) - Mexico&lt;br /&gt;
*ID 194081 - 194090: FlowMatrix AI (https://flowmatrixai.com)&lt;br /&gt;
*ID 194091 - 194100: M Burak Şentürk (https://buraksenturk.net)&lt;br /&gt;
*ID 194101 - 194110: Master AI VC ([[User:Danny.wu|Danny.wu]]) (https://www.masteraivc.com) - Taiwan&lt;br /&gt;
*ID 194121 - 194130: Luckidea (https://www.luckidea.fr) - France&lt;br /&gt;
*ID 194131 - 194140: Studio Viking  (&amp;lt;nowiki&amp;gt;https://www.studio-viking.fr&amp;lt;/nowiki&amp;gt;) - France&lt;br /&gt;
*ID 194411 - 194420: Welters Datentechnik (https://welters.de)&lt;br /&gt;
*ID 194421 - 194430: Altaxia (https://www.altaxia.fr)&lt;br /&gt;
*ID 194431 - 194451: Profy Solutions (https://projectfactory.rs/)&lt;br /&gt;
*ID 194152 - 194161: Theo Pequignot (https://theopequignot.fr) - France&lt;br /&gt;
*ID 194162 - 194171: Personalised AI Solutions MCP Connect (Spain)&lt;br /&gt;
*ID 194172 - 194181: M2engineering GmbH (https://m-2-engineering.com) - Germany - &lt;br /&gt;
*ID 194182 - 197979: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 197980 - 197989: Mercury Labs SAGL (https://mercurylabs.ch) - Swiss Banking - Switzerland&lt;br /&gt;
*ID 197990 - 197999: Mercury Labs SAGL (https://mercurylabs.ch) - Swiss Salaries - Switzerland&lt;br /&gt;
*ID 198000 - 198999: dolibaTeam&lt;br /&gt;
*ID 199000 - 199999: RFMS&lt;br /&gt;
*ID 200000 - 200999: Noxiome&lt;br /&gt;
*ID 201000 - 201999: Sasa Ostrouska (saxa)&lt;br /&gt;
*ID 202000 - 202999: Z-Application&lt;br /&gt;
*ID 203000 - 203099: Elidee - elidee.com&lt;br /&gt;
*ID 203100 - 203999: Garcia MICHEL (soamichel.fr)&lt;br /&gt;
*ID 204000 - 204999: Ari Elbaz elarifr - accedinfo.com&lt;br /&gt;
*ID 205000 - 205999: Kreiz IT&lt;br /&gt;
*ID 206000 - 206999: GBINFO (www.gbinfo.fr)&lt;br /&gt;
*ID 207000 - 207099: MacroProg (https://www.macroprog.com)&lt;br /&gt;
*ID 207100 - 207149: Reactiva Software&lt;br /&gt;
*ID 207150 - 207199: Ndejje University Water Research and Development Centre ([https://github.com/NDUWRDC/LIMS/])&lt;br /&gt;
*ID 207200 - 207299: Massaoud Bouzenad ([https://www.dzprod.net dzprod.net])&lt;br /&gt;
*ID 207300 - 207349: Ksar&lt;br /&gt;
*ID 207350 - 207399: Easylinux (www.easylinux.fr)&lt;br /&gt;
*ID 207400 - 207449: Arthur LENOBLE&lt;br /&gt;
*ID 207450 - 207499: Vaicop SAS de CV (México)&lt;br /&gt;
*ID 207500 - 207520: Frankie Wong - UK&lt;br /&gt;
*ID 207521 - 207540: Fyssec ([https://fyssec.fr/ fyssec.fr/])&lt;br /&gt;
*ID 207541 - 207560: My easy Office SAS ([https://www.myeasyoffice.fr www.myeasyoffice.fr])&lt;br /&gt;
*ID 207561 - 207580: All-Lock Védelem Kft.&lt;br /&gt;
*ID 207581 - 207599: Zenitique ([https://www.zenitique.fr www.zenitique.fr])&lt;br /&gt;
*ID 207600 - 207609: Vasile Panciuc - ProductExpiryIO - Moldova&lt;br /&gt;
*ID 207610 - 207619: Kunisolutions (https://kunisolutions.com)&lt;br /&gt;
*ID 207620 - 207629: INCREATION - France - ListColumnsManager*&lt;br /&gt;
*ID 207630 - 207639: DI404 (https://www.di404.fr)&lt;br /&gt;
*ID 207640 - 207649: Kajoz Business Hub - Zambia (https://kajozbizhub.africa)&lt;br /&gt;
*ID 207650 - 207679: Septmr (https://www.septmr.com)&lt;br /&gt;
*ID 207680 - 209989: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 209990 - 209999: doliTeam&lt;br /&gt;
*ID 210000 - 210100: Lemon (https://hellolemon.fr)&lt;br /&gt;
*ID 210101 - 210120: Cebrian IT ([[cebrian-it.com]])&lt;br /&gt;
*ID 210121 - 210130: Vasile Panciuc - Warehouse Scanner Pro&lt;br /&gt;
*ID 210131 - 210140: Vasile Panciuc - PanciucSoft - Moldova&lt;br /&gt;
*ID 210141 - 210999: Free (take ranges of 10 only please at once, ask us for more)&lt;br /&gt;
*ID 212100 - 212149: Audio Vidéo Technologies (https://www.avtek.fr)&lt;br /&gt;
*ID 212150 - 212169: AI MYA GROUP ([https://Www.AI-MYA-GROUP.com www.AI-MYA-GROUP.com])&lt;br /&gt;
*ID 212170 - 212189: DoliPro Suite - Carlosh7 ([https://github.com/carlosh7/DoliPro-Suite DoliPro-Suite])&lt;br /&gt;
*ID 212190 - 213999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 214000 - 214049: X-Boss&lt;br /&gt;
*ID 214050 - 221999: PixelJM&lt;br /&gt;
*ID 220000 - 220050: Apex Tech (https://apextechmods.com)&lt;br /&gt;
*ID 220051 - 220100: Technology Xchange Solutions (https://www.txscorp.com)&lt;br /&gt;
*ID 222000 - 222999:  dolibit  (https://www.dolibit.de)&lt;br /&gt;
*ID 223000 - 223049: Tráfico Canada&lt;br /&gt;
*ID 223050 - 223099: VLTN (https://vltn.sh)&lt;br /&gt;
*ID 223100 - 229949: Dazax.io (https://www.dazax.io)&lt;br /&gt;
*ID 229950 - 229999: Solucions Informàtiques, Serveis i Innovació SLU (https://6innova.es)&lt;br /&gt;
*ID 230000 - 230049: Unareil (https://www.unareil.eu)&lt;br /&gt;
*ID 230050 - 230099: Lyra Network (https://www.lyra.com/)&lt;br /&gt;
*ID 230100 - 230149: Gheorghe Iftimi - CTW - RO&lt;br /&gt;
*ID 230150 - 230199: MEMA Machinery &amp;amp; Tools (https://www.mema.be)&lt;br /&gt;
*ID 230200 - 230249: Teleassist&lt;br /&gt;
*ID 230250 - 230299: Nh Developer&lt;br /&gt;
*ID 230300 - 230499: Chickenforce/code-chicken, IT Services Hahn (https://github.com/code-chicken [http://itservices-hahn.de/ https://itservices-hahn.de])&lt;br /&gt;
*ID 230500 - 230549: Hidup Consulting (https://consulting.hidup.io)&lt;br /&gt;
*ID 230550 - 230599: CMR Conseil (https://www.weblockup.fr)&lt;br /&gt;
*ID 230600 - 230649: aFreeMind Studio&lt;br /&gt;
*ID 230650 - 230699: Unideal (https://www.uni-deal.com)&lt;br /&gt;
*ID 230700 - 230749: DevLansdes (https://devlandes.com/)&lt;br /&gt;
*ID 230750 - 230769  Kristof56 / Serpette &amp;amp; Cie /&lt;br /&gt;
*ID 230770 - 230789: Webelys (&amp;lt;nowiki&amp;gt;https://webelys.com&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
*ID 230790 - 230799: X Poitou Network (&amp;lt;nowiki&amp;gt;https://www.xpoitou.fr&amp;lt;/nowiki&amp;gt;) - France&lt;br /&gt;
*ID 230800 - 230999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 231000 - 231039: inno3 (&amp;lt;nowiki&amp;gt;https://inno3.fr&amp;lt;/nowiki&amp;gt;) - France - suite de modules open source Dolibarr (inno3dashboard, meetingnotes, supportcredits, caldavbridge, frameworkprojects, ...)&lt;br /&gt;
*ID 231040 - 231199: SBINFO - France - (https://sbinfo.fr)&lt;br /&gt;
*ID 231200 - 231219: Mugisha || Modules ERP personnalisés (facturation, RH, intégration)&lt;br /&gt;
*ID 231220 - 231229: Wdes SAS (https://wdes.fr) - France&lt;br /&gt;
*ID 231230 - 231239: WEBMAY (&amp;lt;nowiki&amp;gt;https://webmay.fr&amp;lt;/nowiki&amp;gt;) - France&lt;br /&gt;
*ID 231240 - 249999: &amp;lt;nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/nowiki&amp;gt;Free (take ranges of 10 only please at once, ask us for more)&amp;lt;nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*ID 250000 - 250019: Barnecki Spirits (https://github.com/Barnecki)&lt;br /&gt;
*ID 250020 - 250039: NEXORA COMMERCE (https://nexoratoolbox.com) - France&lt;br /&gt;
*ID 250040 - 262699: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 262700 - 262799: Scopen (https://www.scopen.fr)&lt;br /&gt;
*ID 262800 - 262849: Christophe BATTAREL EI&lt;br /&gt;
*ID 262850 - 262870: Nicolaus Hofer - Autriche&lt;br /&gt;
*ID 262871 - 262890: Knot Tools (&amp;lt;nowiki&amp;gt;https://knot.tools&amp;lt;/nowiki&amp;gt;) - France&lt;br /&gt;
*ID 262891 - 271799: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 271800 - 271849: bee solutions sàrl (Switzerland)&lt;br /&gt;
*ID 271850 - 272999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 273000 - 273019: Taler (https://taler.net)&lt;br /&gt;
*ID 273020 - 274199: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 274200 - 274249: Mathilde MAROCCO (https://mminformatique.fr)&lt;br /&gt;
*ID 274250 - 274299: Nerv Project (www.nerv-project.eu)&lt;br /&gt;
*ID 274300 - 274349: Knowhere Consulting S.L. (https://www.knowhere-consulting.eu)&lt;br /&gt;
*ID 274350 - 274399: Milen karaganski (https://blacktiehost.com)&lt;br /&gt;
*ID 274400 - 274449: Vincent MAURY ([https://www.timgroup.fr www.timgroup.fr])&lt;br /&gt;
*ID 274450 - 274499: Daraelmin&lt;br /&gt;
*ID 274500 - 274549: Emilie LAFORET (http://www.ermvallon.com)&lt;br /&gt;
*ID 274550 - 278999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 279000 - 279049: VSDigital Electronics (https://vsdigital.ar) - Argentina&lt;br /&gt;
*ID 279050 - 279959: Saar Systems (https://www.saarsystems.de) - Germany&lt;br /&gt;
*ID 279060 - 279999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 280000 - 280049: Bingroup (https://www.beinng.com)&lt;br /&gt;
*ID 280050 - 280099: Medialta (https://medialta.com)&lt;br /&gt;
*ID 280100 - 280149: Cédric Ancelin - Ancode (https://www.dolistore.com/fr/recherche?search_query=ancode)&lt;br /&gt;
*ID 280150 - 280169: Rafael CF (https://virtualmachine.digital) - México&lt;br /&gt;
*ID 280170 - 289999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 290000 - 290099: BNS - Project doliBRA ([https://www.beinng.com https://www.bns.net.br]) - Brasil&lt;br /&gt;
*ID 290100 - 299999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 300000 - 300049: RapidProgress (https://www.rapidprogress.eu) - Bulgaria&lt;br /&gt;
*ID 300050 - 300099: M@ Solution (https://www.ma-solution.fr/)&lt;br /&gt;
*ID 300100 - 300149: LAVA RUN (https://www.lavarun.re)&lt;br /&gt;
*ID 300150 - 300199: PsyCrow Code&lt;br /&gt;
*ID 300200 - 300249: Computences (https://www.computences.com/)&lt;br /&gt;
*ID 300250 - 300299: LEVEL IT (https://levelit.com.ar)&lt;br /&gt;
*ID 300300 - 300349: Progiseize (https://progiseize.fr)&lt;br /&gt;
*ID 300350 - 300399: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 300400 - 300449: Anouar Touati&lt;br /&gt;
*ID 300450 - 300499: Martin Danger&lt;br /&gt;
*ID 300500 - 300999: dolibaTeam&lt;br /&gt;
*ID 301000 - 301299: DOLIBA TEAM&lt;br /&gt;
*ID 301300 - 301499: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 301500 - 301549: Tom Trust - International&lt;br /&gt;
*ID 301550 - 301599: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 301600 - 302479: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 302480 - 302499: akyras (https://akyras.fr)&lt;br /&gt;
*ID 302500 - 302549: Diamubi (https://diamubi.com)&lt;br /&gt;
*ID 302550 - 302599: Datolab (https://www.datolab.com)&lt;br /&gt;
*ID 302600 - 302649: DuMaCo (https://www.dumaco.de)&lt;br /&gt;
*ID 302650 - 302699: Resilio SA&lt;br /&gt;
*ID 302700 - 302749: Aroga&lt;br /&gt;
*ID 302750 - 302799: Productivix (https://www.productivix.com)&lt;br /&gt;
*ID 302800 - 302849: Slibzz&lt;br /&gt;
*ID 302850 - 302899: idea design (https://ideadesign.dz)&lt;br /&gt;
*ID 302900 - 302949: AL MISBAH INFORMATIQUE (https://www.almisbah.ma)&lt;br /&gt;
*ID 302950 - 302999: Atis Solutions - France&lt;br /&gt;
*ID 303000 - 303499: Obixav - Nigeria&lt;br /&gt;
*ID 303500 - 303549: buschler plus GmbH, Germany (https://buschler.plus)&lt;br /&gt;
*ID 303550 - 303599: Prestalidaire - France (https://prestalidaire.com)&lt;br /&gt;
*ID 303600 - 303619: Apertice - France (https://apertice.fr)&lt;br /&gt;
*ID 303620 - 303629: Arcchester (https://arcchester.com) - Focus: 303620&lt;br /&gt;
*ID 303630 - 309999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 310000 - 310049: Neilson Dufour (&amp;lt;nowiki&amp;gt;https://hypercode.ca&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
*ID 310050 - 313999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 314000 - 314049: Ruemmler IT Solutions (https://www.ruemmler.net)&lt;br /&gt;
*ID 314050 - 314059: Qwimo - Belgique (https://qwimo.com)&lt;br /&gt;
*ID 314060 - 314149: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 314150 - 314199: Benoît PASCAL&lt;br /&gt;
*ID 314200 - 319999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 320000 - 320999: Novus Studios (www.novusstudios.it)&lt;br /&gt;
*ID 321000 - 321999: AtooNet (http://www.atoo-net.com)&lt;br /&gt;
*ID 322000 - 322049: Doymer Consultores&lt;br /&gt;
*ID 322050 - 329999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 330000 - 330049: XTEC Industries (www.xtec-ind.com)&lt;br /&gt;
*ID 330050 - 330099: 10100 S.R.L. - (www.10100.to)&lt;br /&gt;
*ID 330100 - 330149: AES Dana SRL (https://aes-dana.be)&lt;br /&gt;
*ID 330150 - 330199: Freshcore (https://www.freshcore.fr)&lt;br /&gt;
*ID 330200 - 331999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 332000 - 332099: Gecka (https://gecka.nc)&lt;br /&gt;
*ID 332100 - 332149: Agence Milkshake (http://agencemilkshake.com)&lt;br /&gt;
*ID 332150 - 332199: Daniel Prowald IT – Service (https://prowald-it.de)&lt;br /&gt;
*ID 332200 - 332249: UNITICE (https://unitice.com)&lt;br /&gt;
*ID 332250 - 332299: Sidonie Moulart&lt;br /&gt;
*ID 332300 - 332349: LTDJ (Antonin MARCHAL - Le Temple du Jeu)&lt;br /&gt;
*ID 332350 - 333299: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 333300 - 333349: Sense Africa (http://sense.africa)&lt;br /&gt;
*ID 333350 - 333369: Orion module&lt;br /&gt;
*ID 333370 - 339999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 340000 - 340049: M34D (https://m34d.com)&lt;br /&gt;
*ID 340050 - 340069: WiwIT&lt;br /&gt;
*ID 340070 - 340089: TAD-IT &amp;amp; SERVICES ([https://tadit-services.com/ https://tadit-services.com])&lt;br /&gt;
*ID 340090 - 349999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 350000 - 350049: SOUNDOU &amp;amp; MIDAS (https://www.soundou.org/)&lt;br /&gt;
*ID 350050 - 350099: Ildefonso González (https://igontek.es)&lt;br /&gt;
*ID 350100 - 350149: 7Kas Servicios de Internet, S.L. (https://7kas.com)&lt;br /&gt;
*ID 350150 - 350169: Silias (https://silias.ch)&lt;br /&gt;
*ID 350170 - 350999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 351000 - 351049: P&#039;tite Tête (https://ptitetete.com) - France&lt;br /&gt;
*ID 351050 - 358999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 359000 - 359049: Milen Karaganski0&lt;br /&gt;
*ID 359050 - 398999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 400000 - 400999: 2byte.es (http://www.2byte.es)&lt;br /&gt;
*ID 401000 - 401999: B&amp;amp;D Informática&lt;br /&gt;
*ID 402000 - 402999: Marcos García de La Fuente (marcosgdf)&lt;br /&gt;
*ID 403000 - 403999: Sergibyte&lt;br /&gt;
*ID 404000 - 404999: Aikhan&lt;br /&gt;
*ID 405000 - 405999: AIME (http://www.aime.mx)&lt;br /&gt;
*ID 406000 - 406999: Som Núvol (https://somnuvol.coop)&lt;br /&gt;
*ID 407000 - 407019: I-Motion SARL&lt;br /&gt;
*ID 407020 - 407029: valitool GmbH (https://valitool.org)&lt;br /&gt;
*ID 407030 - 408999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 409000 - 409999: LliureTIC (https://www.lliuretic.cat)&lt;br /&gt;
*ID 410000 - 410999: DoliGov&lt;br /&gt;
*ID 411000 - 411049: GATTEK SARL (https://www.ga-ttek.com)&lt;br /&gt;
*ID 411050 - 419999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 420000 - 420099: BBS Concept&lt;br /&gt;
*ID 420100 - 420199: LeMousticProduction (www.lemousticproduction.info) -&amp;lt; module DoliRH&lt;br /&gt;
*ID 420200 - 421199: VatCheck (www.abnc.be)&lt;br /&gt;
*ID 421200 - 421219: Dolix (https://dolix.fr)&lt;br /&gt;
*ID 421220 - 422199: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 422200 - 422999: Artaban (http://artaban.fr)&lt;br /&gt;
*ID 423000 - 423049: cyberesprit&lt;br /&gt;
*ID 423050 - 423099: R.Bossard&lt;br /&gt;
*ID 423100 - 423199: Joliciel (www.joliciel.fr)&lt;br /&gt;
*ID 423200 - 423299: Pragma-tech (www.pragma-tech.fr)&lt;br /&gt;
*ID 423300 - 423399: Pragma-tech (www.pragma-tech.fr)&lt;br /&gt;
*ID 423399 - 423999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 424000 - 424019: Philazerty ([https://www.philazerty.fr www.philazerty.fr])&lt;br /&gt;
*ID 424020 - 424039&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;: Studio 3 Points ([https://www.studio3points.ch www.studio3points.ch]) - Suisse&lt;br /&gt;
*ID 424040 - 424049: INTECH (https://www.intech.re) - Réunion&lt;br /&gt;
*ID 424050 - 424099: Pragma-tech (www.pragma-tech.fr)&lt;br /&gt;
*ID 424100 - 424149: Ohoo Solutions (http://www.ohoosolutions.com)&lt;br /&gt;
*ID 424150 - 424199: DAGARCAM Informática (https://www.dagarcam.com/)&lt;br /&gt;
*ID 424200 - 424999: Lab51 (https://github.com/lab51org)&lt;br /&gt;
*ID 425000 - 425999: Sébastien SERRE Thivinfo (www.thivinfo.com)&lt;br /&gt;
*ID 426000 - 426099: Arkesis-Solution&lt;br /&gt;
*ID 426100 - 426149: GetLandy (www.getlandy.com)&lt;br /&gt;
*ID 426150 - 426649: OOB Software&lt;br /&gt;
*ID 426650 - 426849: Soft-Task Serviços e Sistemas (www.soft-task.com.br)&lt;br /&gt;
*ID 426850 - 426999: Bruno Caldas (https://github.com/BCaldas)&lt;br /&gt;
*ID 427000 - 427999: Kevin GUERRIER (alias xcl.saian)&lt;br /&gt;
*ID 428000 - 428099: af83&lt;br /&gt;
*ID 428100 - 428199: Arnaud Serrut - Adalon&lt;br /&gt;
*ID 428200 - 428249: imschweiler consulting (http://www.imschweiler-consulting.de&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039;)&lt;br /&gt;
*ID 428250 - 428299: AL1FO&lt;br /&gt;
*ID 428300 - 428349: Federico García-Patiño Barbolani (&amp;lt;federico.garcia.patino@gmail.com&amp;gt;)&lt;br /&gt;
*ID 428350 - 428399: INTM Groupe - France (www.intm.com)&lt;br /&gt;
*ID 428400 - 428449: Nick Fragoulis - Greece&lt;br /&gt;
*ID 428450 - 428499: Kontava - France ([https://kontava.fr kontava.fr)]&lt;br /&gt;
*ID 428500 - 428549: hkwhitten - USA&lt;br /&gt;
*ID 428550 - 428999: SmartOne&lt;br /&gt;
*ID 429000 - 429999: induslab&lt;br /&gt;
*ID 430000 - 430099: Mixity sprl (www.mixity.be)&lt;br /&gt;
*ID 430100 - 430199: sgiraud&lt;br /&gt;
*ID 430200 - 430299: Merlion TI (www.merlion-si.com.br)&lt;br /&gt;
*ID 430300 - 431299: Libre Expert (www.libre-expert.com)&lt;br /&gt;
*ID 431300 - 431399: ptibogxiv (www.ptibogxiv.net)&lt;br /&gt;
*ID 431400 - 431499: Befox (www.befox.fr)&lt;br /&gt;
*ID 431500 - 431599: rue Béjo (www.ruebejo.fr)&lt;br /&gt;
*ID 431600 - 431699: Avizzeo (www.avizzeo.com)&lt;br /&gt;
*ID 431700 - 432199: Multisistemas (www.multisistemas.com.sv)&lt;br /&gt;
*ID 432200 - 432399: Burbuja - Chile (www.burbuja.cl)&lt;br /&gt;
*ID 432400 - 433399: INOVEA CONSEIL (https://www.inovea-conseil.com)&lt;br /&gt;
*ID 433400 - 434399: Rachid HRICH - Maroc (HricH ServiceS.)&lt;br /&gt;
*ID 434400 - 435399: Lance Bleakley - LanceIT (www.lanceit.net)&lt;br /&gt;
*ID 435400 - 435419: Victorien LOS - France&lt;br /&gt;
*ID 435420 - 435439: Clément ESTREM - France&lt;br /&gt;
*ID 435440 - 435999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 436000 - 436099: SOWEBIO ([https://www.soweb.io www.soweb.io])&lt;br /&gt;
*ID 436100 - 436199: CAP-REL (www.cap-rel.fr)&lt;br /&gt;
*ID 436200 - 436300: TDE-INFORMATIQUE (www.tde-informatique.fr)&lt;br /&gt;
*ID 436301 - 436349: Evarisk ([https://www.evarisk.com/id-module-dolibarr/ www.evarisk.com])&lt;br /&gt;
*ID 436350 - 436399: Eoxia ([https://www.eoxia.com/dolibarr/modules/ www.eoxia.com])&lt;br /&gt;
*ID 436400 - 437399: Mohamed AHERDANE - Morocco - IT Consultant ( www.wave.ma )&lt;br /&gt;
*ID 437400 - 437449: Martin Neubauer - Germany&lt;br /&gt;
*ID 437450 - 437599: Club1click (www.club1click.es)&lt;br /&gt;
*ID 437600 - 437629: Coulon Vincent (https://github.com/HoverEpic)&lt;br /&gt;
*ID 437630 - 437649: Aytechnet (https://www.aytechnet.fr/) - François Pons&lt;br /&gt;
*ID 437650 - 437699: LibreMaster (https://libremaster.com) - Christophe T.&lt;br /&gt;
*ID 437700 - 437749: STELLAR Broadband (https://www.stellarbb.com) - U.S.A. - Philip Laycock&lt;br /&gt;
*ID 437750 - 437799: DIGITA.LU Ajous Solutions&lt;br /&gt;
*ID 437800 - 437850: iProspective (https://iprospective.fr) - Mathieu Moulin&lt;br /&gt;
*ID 437851 - 437900: Theobald Groupe.&lt;br /&gt;
*ID 437901 - 437950: Neuronnexion (http://neuronnexion.coop)&lt;br /&gt;
*ID 437951 - 437952: jmbc - APIA-ASSO (https://www.apia-asso.fr)&lt;br /&gt;
*ID 437953 - 438002: IPCZEN SARL (https://www.ipczeninformatique.fr/)&lt;br /&gt;
*ID 438003 - 438052: FESF IT Department (https://fesf.org.pk)&lt;br /&gt;
*ID 438053 - 438103: Pilot Engineering team&lt;br /&gt;
*ID 438104 - 438153: u2042 (https://u2042.com)&lt;br /&gt;
*ID 438154 - 438204: Djair E Pereira (ocultooooo@gmail.com) - Brasil&lt;br /&gt;
*ID 438205 - 438255: yoandm (https://yoandm.com)&lt;br /&gt;
*ID 438256 - 438299: PTMSoft (&amp;lt;nowiki&amp;gt;https://www.ptmsoft.fr&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
*ID 438300 - 438399: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 438400 - 439399: Tetras Libre - France - Développement logiciels libres (www.tetras-libre.fr)&lt;br /&gt;
*ID 439400 - 440399: Dolibarr-pro - France - Développement Dolibarr (www.dolibarr-pro.com)&lt;br /&gt;
*ID 440400 - 441399: Quidlab Co., Ltd - Thailand - ( www.quidlab.com )&lt;br /&gt;
*ID 441400 - 442399: Ide@log - France - (https://www.idealog-info.net) - Laurent Leblanc&lt;br /&gt;
*ID 442400 - 443399: Valerio Bianchi (www.valeriobianchi.com)&lt;br /&gt;
*ID 443400 - 444399: delassalle - France - (www.delassalle.fr) - Joseph Delassalle&lt;br /&gt;
*ID 444400 - 445399: Webartis - Maroc - (www.webartis.net) - François Dry&lt;br /&gt;
*ID 445400 - 445499: SCOP Au-delà des nuages - France&lt;br /&gt;
*ID 445500 - 445549: X Net Systems - Egypt - (https://www.xneteg.com)&lt;br /&gt;
*ID 445550 - 445569: Schiefer.IT - Austria ([https://schiefer.it schiefer.it])&lt;br /&gt;
*ID 445570 - 445999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 446000 - 446999: iouston (http://www.iouston.com) - France - Julien Marchand&lt;br /&gt;
*ID 447000 - 447999: rSanjoSEO - Rafael San José Tovar (www.rsanjoseo.com) - Spain&lt;br /&gt;
*ID 448000 - 448999: Code 42 (www.code42.fr)&lt;br /&gt;
*ID 449000 - 449999: TakePOS (www.takepos.com)&lt;br /&gt;
*ID 450000 - 450999: Pierre ARDOIN&lt;br /&gt;
*ID 451000 - 451999: Éditeur depordi.fr&lt;br /&gt;
*ID 452000 - 452999: Dylan NAKONG&lt;br /&gt;
*ID 453000 - 453999: Menahd Ouchenir - France - menahd-ouchenir.com&lt;br /&gt;
*ID 454000 - 454999: Withheld - Canada&lt;br /&gt;
*ID 455000 - 455999: Gaëtan MAISON - Info Libre @ Dom - France (https://www.infolibreadom.com)&lt;br /&gt;
*ID 456000 - 456999: Laurent LEBLEU - B.L.C. - Blue Line Company - Lille - France (www.bluelinecompany.fr/dolibarr)&lt;br /&gt;
*ID 457000 - 457999: Sébastien BOUCHER&lt;br /&gt;
*ID 458000 - 458999: Lester HERNÁNDEZ - Argentina - (freelancerlrhd@gmail.com)&lt;br /&gt;
*ID 459000 - 459999: Infopen - France&lt;br /&gt;
*ID 460000 - 460049: torvista - Spain&lt;br /&gt;
*ID 460050 - 460099: ADVAISION.com (Belgique www.advaision.com)&lt;br /&gt;
*ID 460100 - 460119: Proximatic Digital - Spain (https://www.proximatic.digital)&lt;br /&gt;
*ID 460120 - 460129: Karite d&#039;Or SARL - Burkina Faso (https://dolibarr.karite-dor.com) - module RHBurkina&lt;br /&gt;
*ID 460130 - 460139: INTECH (&amp;lt;nowiki&amp;gt;https://www.intech.re&amp;lt;/nowiki&amp;gt;) - Réunion&lt;br /&gt;
*ID 460140 - 460999: Free (take ranges of 10 only please at once, ask us for more)&lt;br /&gt;
*ID 461000 - 461999: MEGALOGI - Maroc (www.erpcloud.ma)&lt;br /&gt;
*ID 462000 - 462999: Making Digital (www.making-digital.fr) - France&lt;br /&gt;
*ID 463000 - 463999: linx s.r.l.s.&lt;br /&gt;
*ID 464000 - 464999: NimbleCubed Inc. (www.nimblecubed.com)&lt;br /&gt;
*ID 465000 - 465999: Artefacts (www.artefacts.coop) - Pascal Daugeron&lt;br /&gt;
*ID 466000 - 466999: CDM Consultores - (www.cdm.guru)&lt;br /&gt;
*ID 467000 - 467999: M71 Service GmbH - (www.m71-service.de)&lt;br /&gt;
*ID 468000 - 468049: Clément Segonzac - France (clement.segonzac@gmail.com)&lt;br /&gt;
*ID 468050 - 468099: Flavien Belli - France (https://github.com/Marshlyin || belliflaviencontactpro@gmail.com)&lt;br /&gt;
*ID 468100 - 468119: Chl (https://code.bugness.org/Dolibarr)&lt;br /&gt;
*ID 468120 - 468169: Commotron GmbH (https://www.commotron.com/)&lt;br /&gt;
*ID 468170 - 468219: Infans Group (franck.lauby@infans.fr)&lt;br /&gt;
*ID 468175 - 468199: Gaëlle Rauffet - France (kiwiscan.net)&lt;br /&gt;
*ID 468200 - 468249: Paulo Oliveira - Brasil (paulorcdo@gmail.com)&lt;br /&gt;
*ID 468250 - 468269: CD-Systems - France (https://www.cd-systems.fr)&lt;br /&gt;
*ID 468270 - 468299: Nicolas Testori&lt;br /&gt;
*ID 468300 - 468349: Uvensys - Germany (https://uvensys.de)&lt;br /&gt;
*ID 468350 - 468399: Laudeco - Belgium (http://github.com/laudeco)&lt;br /&gt;
*ID 468400 - 468449: Alexis LAURIER - France (https://www.alexislaurier.fr)&lt;br /&gt;
*ID 468450 - 468499: Mehdi Belkhayat - Maroc (https://opensi.ma)&lt;br /&gt;
*ID 468500 - 468599: InvIT GmbH - Germany (https://invit.sh)&lt;br /&gt;
*ID 468600 - 468649: Ricardo Sequeira - Portugal (https://ricardo-sequeira.com)&lt;br /&gt;
*ID 468650 - 468699: J-IT - Belgique (https://www.j-it.be)&lt;br /&gt;
*ID 468700 - 468749: Fidesio - France (https://www.fidesio.com/)&lt;br /&gt;
*ID 468750 - 468799: Sgestion - Spain (http://www.sgestion.net/)&lt;br /&gt;
*ID 468800 - 468849: Denis JULIEN - Brasil (matrinxa@free.fr)&lt;br /&gt;
*ID 468850 - 468899: Mmariko - Module GED - Effios&lt;br /&gt;
*ID 468900 - 468949: Maazou Amadou Abdoul aziz - Maroc (yaronfada@gmail.com)&lt;br /&gt;
*ID 468950 - 468999: Alexis LAURIER - France (https://www.alexislaurier.fr)&lt;br /&gt;
*ID 469000 - 469049: John Livingston (https://github.com/JohnXLivingston/)&lt;br /&gt;
*ID 469050 - 469099: Macrorom ICT-services (https://macrorom.nl/)&lt;br /&gt;
*ID 469100 - 469149: HABOT IT - France (https://habot.it)&lt;br /&gt;
*ID 469150 - 469159: CaribbeanConsult.Com CCC - France Guadeloupe (https://dolibarr.ccc.gp)&lt;br /&gt;
*ID 469160 - 469171: GMBG - Portugal&lt;br /&gt;
*ID 469172 - 469199: BGi Lda - Portugal&lt;br /&gt;
*ID 469200 - 469219: elsotec GmbH&lt;br /&gt;
*ID 469220 - 469299: MODUL DISTRIBUTION - France&lt;br /&gt;
*ID 469300 - 469319: Experts Conseils Chanton - Grégoire Chanton (https://www.experts-conseils.ch) - Switzerland&lt;br /&gt;
*ID 469320 - 469329: Experts Conseils Chanton - Grégoire Chanton (https://www.experts-conseils.ch) - Switzerland - Terrain&lt;br /&gt;
*ID 469330 - 469339: Experts Conseils Chanton - Grégoire Chanton (https://www.experts-conseils.ch) - Switzerland - Doli Local Edit&lt;br /&gt;
*ID 469340 - 469949: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 469950 - 469999: Goldoweb (http://goldoweb.com)&lt;br /&gt;
*ID 470000 - 470999: Reindeer Digital (https://rdeer.cz)&lt;br /&gt;
*ID 471000 - 471099: CAP-REL (www.cap-rel.fr)&lt;br /&gt;
*ID 471100 - 471199: M. Morillon&lt;br /&gt;
*ID 471200 - 471209: Pablo Nuñez&lt;br /&gt;
*ID 471210 - 471300: FANEL A.Ş  (https://www.fanel.com.tr)&lt;br /&gt;
*ID 471300 - 480999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 481000 - 481999: Alhaidab-ITIS (https://alhaidab.dolibarr.sd)&lt;br /&gt;
*ID 482000 - 482999: Basix IT (https://www.basix.de)&lt;br /&gt;
*ID 483000 - 483049: SASCO SpA (https://www.sasco.cl)&lt;br /&gt;
*ID 483050 - 483099: WIP Engineering (https://www.wip-gmbh.com)&lt;br /&gt;
*ID 483100 - 483149: J.Kaiser&lt;br /&gt;
*ID 483150 - 483199: CodLines (https://www.codlines.com)&lt;br /&gt;
*ID 483200 - 483249: BleepalSoftware (https://bleepal.com)&lt;br /&gt;
*ID 485000 - 485049: Gest Info Service Plus (contact@gest-plus.fr)&lt;br /&gt;
*ID 485050 - 485069: DJOB&#039; Services&lt;br /&gt;
*ID 485070 - 485079: Arobase Pixel (https://www.arobase-pixel.fr/) - France&lt;br /&gt;
*ID 485080 - 485089: Graphphon_Togo (&amp;lt;nowiki&amp;gt;https://www.graphphon.com)-Togo(Afrique&amp;lt;/nowiki&amp;gt; de l&#039;Ouest)&lt;br /&gt;
*ID 490000 - 490049: VOLD (https://www.voldgroup.com)&lt;br /&gt;
*ID 490050 - 490249: QUANTIVO (http://quantivo.eu/)&lt;br /&gt;
*ID 490250 - 490299: VOLD (https://www.voldgroup.com)&lt;br /&gt;
*ID 490300 - 490309: Synezia (https://www.synezia.fr) - France&lt;br /&gt;
*ID 490310 - 490999: Free (take ranges of 10 only please at once, ask us for more)&lt;br /&gt;
*ID 491000 - 491049: NORD ERP CRM (https://www.nord-erp-crm.fr/)&lt;br /&gt;
*ID 491050 - 491099: KJR-online (https://kjr-online.fr/)&lt;br /&gt;
*ID 491100 - 491149: eNova&lt;br /&gt;
*ID 491150 - 491199: App 4 Business&lt;br /&gt;
*ID 491200 - 491249: Mil24 (http://www.mil24.com.py)&lt;br /&gt;
*ID 491250 - 491299: M2AM&lt;br /&gt;
*ID 491300 - 491349: luigifab (https://github.com/luigifab), also reuse id:105009 for Sentry fork&lt;br /&gt;
*ID 491350 - 491399: Frédéric France (https://github.com/frederic34)&lt;br /&gt;
*ID 491400 - 491449: E-dem (https://www.e-dem.com/)&lt;br /&gt;
*ID 491450 - 491499: Burofree (https://burofreeai.es)&lt;br /&gt;
*ID 491500 - 491549: EMDELEN (https://emdelen.fr/)&lt;br /&gt;
*ID 491550 - 491599: eSoUrCeS Technologie (https://techno.esources.ca/) - Canada&lt;br /&gt;
*ID 491600 - 491649: GoSouce Peru - Peru&lt;br /&gt;
*ID 491650 - 491669: Kaféin Studio (https://kafein.studio) - France&lt;br /&gt;
*ID 491670 - 491699: Neykinfo  - France&lt;br /&gt;
*ID 491700 - 491709: Bank Match&lt;br /&gt;
*ID 491710 - 491719: activiert IT (https://activiert.de/) - Germany&lt;br /&gt;
*ID 491720 - 491729: DoliLink (https://www.dolilink.app) - France&lt;br /&gt;
*ID 491730 - 491739: Dolibarr User Australia (dolibarruseraustralia@gmail.com) - Australia&lt;br /&gt;
*ID 491740 - 491999: &#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 492000 - 492020: Anura (https://www.anura.fr/)&lt;br /&gt;
*ID 492021 - 492030: Marino Sedda - DoLib (https://www.dolib.it) - Italy&lt;br /&gt;
*ID 492031 - 492940: Lucky Ranasolonirina - Madagascar&lt;br /&gt;
*ID 492041 - 492990:&#039;&#039;&#039;Free (take ranges of 10 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 492991 - 492999: bcs - Germany (sellleads.de@gmail.com)&lt;br /&gt;
*ID 493000 - 493020: Bourez Bastien EI (https://bastien-b.fr/)&lt;br /&gt;
*ID 493021 - 493040 Pluginar (https://pluginar.com.ar/) - Argentina&lt;br /&gt;
*ID 493051 - 493071: benhmida ilyess (bhilyess98@gmail.com)&lt;br /&gt;
*ID 493101 - 493120: George TS, George SP (gspanos@makeasite.gr)&lt;br /&gt;
*ID 493121 - 493140: BavariaPixel GbR&lt;br /&gt;
*ID 493150 - 493179: KSI (https://www.ksidol.io)&lt;br /&gt;
*ID 493180 - 493210: KSI (https://www.ksidol.io)&lt;br /&gt;
*ID 493200 - 493219: Stéphane Mallet (https://framagit.org/Steph501/dolibarr-mod-autoreminder)&lt;br /&gt;
*ID 493220 - 493239: TBNETSYS (www.tbnetsys.fr)&lt;br /&gt;
*ID 493240 - 493259: PEREL&lt;br /&gt;
*ID 493260 - 493269: Thermasse (https://www.thermasse.fr) - France&lt;br /&gt;
*ID 493270 - 493290: LogicMod (https://logicmod.ca) - Canada&lt;br /&gt;
*ID 493291 - 493310: NANAKA BUSINESS SOLUTIONS (https://www.nanaka.re) - La Réunion, France&lt;br /&gt;
*ID 495000 - 495009: JB SMT Informatique (https://www.jbsmt.fr)&lt;br /&gt;
*ID 495010 - 495029: Vankenhove Finance (https://www.vankenhovefinance.com) - France - Solaria&lt;br /&gt;
*ID 499001 - 499020: IT GENIUSES (https://www.itgeniuses.com)&lt;br /&gt;
*ID 499051 - 499071: KREATIV PROJECT MANAGEMENT&lt;br /&gt;
*ID 499072 - 499082: RIAS BAIXAS RENTALS (https://riasbaixasrentals.com) - Vigo, Spain&lt;br /&gt;
*ID 499083 - 499092: NEXTWAYS - LEBANON&lt;br /&gt;
&lt;br /&gt;
DO NOT ADD RECORD HERE, PLEASE FILL HOLES FIRST !!!!&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=ID &amp;gt; 500000=&lt;br /&gt;
&lt;br /&gt;
This range can&#039;t be reserved. It is a common range. If you don&#039;t plan to distribute your module, you can use an ID in this range with no need to reserve it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t already have reserved ids and need some, please don&#039;t use hazardous number and use a number higher than 500000, but it is better to ask a wiki account, and reserve your own range by editing the  100000 - 499999 range (10 ids at once).&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_PackTrace&amp;diff=67470</id>
		<title>Module PackTrace</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_PackTrace&amp;diff=67470"/>
		<updated>2026-09-28T03:16:12Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Création de la page du module PackTrace 1.0.0 (emballages PPWR (UE) 2025/40 et REP)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module PackTrace ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PackTrace&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM consacré aux &#039;&#039;&#039;emballages&#039;&#039;&#039; : il met en œuvre le &#039;&#039;&#039;règlement européen (UE) 2025/40 relatif aux emballages et aux déchets d&#039;emballages&#039;&#039;&#039; (PPWR), applicable depuis le 12 août 2026, et prépare les déclarations de &#039;&#039;&#039;responsabilité élargie du producteur&#039;&#039;&#039; (REP) en France (Citeo, Léko, emballages professionnels EPRO) et en Allemagne (registre LUCID, loi VerpackDG).&lt;br /&gt;
&lt;br /&gt;
À partir de la composition d&#039;emballage de chaque produit, le module calcule les poids mis sur le marché par matériau, par pays et par canal depuis les factures ou les expéditions, produit les fichiers de déclaration et génère la déclaration UE de conformité de chaque emballage.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x (vérifiée sur 18.0.5, 20.0.4 et 24.0.0)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 à 8.3 (extension DOM pour l&#039;export XML)&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune : tout s&#039;exécute sur le serveur Dolibarr, aucun appel sortant&lt;br /&gt;
|-&lt;br /&gt;
! Langues || Français, anglais ; déclaration de conformité aussi en allemand&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Qui est concerné, et ce que fait le module ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Profil !! Obligation !! Réponse du module&lt;br /&gt;
|-&lt;br /&gt;
| Marque ou fabricant (vente en ligne, épicerie fine, cosmétique, vins, artisanat…) || Déclarer chaque année les emballages mis sur le marché (Citeo ou Léko ; EPRO à partir de 2027 ; LUCID pour l&#039;Allemagne) ; déclaration UE de conformité || Composition d&#039;emballage par produit, calcul automatique, fichiers de déclaration, PDF de conformité&lt;br /&gt;
|-&lt;br /&gt;
| Importateur || Mêmes obligations pour les emballages en provenance de pays tiers || Idem, rôle « importateur »&lt;br /&gt;
|-&lt;br /&gt;
| Distributeur || Vérifier l&#039;inscription du producteur au registre (article 19) ; déclarer les emballages ajoutés, dont les colis || Numéros REP des fournisseurs et rappel sur leurs fiches, profils d&#039;emballages d&#039;expédition&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
=== Catalogue d&#039;emballages et composition des produits ===&lt;br /&gt;
* &#039;&#039;&#039;Éléments d&#039;emballage&#039;&#039;&#039; décrits une seule fois : matériau parmi 30, rattaché automatiquement aux 22 catégories du tableau 1 de l&#039;annexe II du PPWR, aux codes matériaux Citeo et Léko, aux 6 matériaux EPRO et aux codes matériaux LUCID ; poids, niveau (primaire, secondaire, tertiaire), type (vente, groupé, transport, service, e-commerce).&lt;br /&gt;
* Données PPWR : part de matière recyclée, classe de recyclabilité A/B/C, métaux lourds, PFAS pour le contact alimentaire, réemploi, fournisseur, emballage déjà déclaré en amont ; contrôle de complétude.&lt;br /&gt;
* &#039;&#039;&#039;Onglet Emballages&#039;&#039;&#039; sur la fiche produit : quantité par unité vendue, création rapide, copie depuis un produit similaire, poids et part recyclée calculés ; &#039;&#039;&#039;encart&#039;&#039;&#039; sur la fiche produit.&lt;br /&gt;
* Liste des &#039;&#039;&#039;produits vendus sans emballage&#039;&#039;&#039; sur les 12 derniers mois.&lt;br /&gt;
&lt;br /&gt;
=== Calcul des déclarations ===&lt;br /&gt;
* Source : &#039;&#039;&#039;factures&#039;&#039;&#039; validées (avoirs déduits en option, factures abandonnées et brouillons exclus) ou &#039;&#039;&#039;expéditions&#039;&#039;&#039; validées.&lt;br /&gt;
* &#039;&#039;&#039;Pays de mise sur le marché&#039;&#039;&#039; : pays du contact de livraison du document, sinon celui du client.&lt;br /&gt;
* &#039;&#039;&#039;Canal&#039;&#039;&#039; ménager ou professionnel : réglage du produit, sinon type de tiers (« Particulier » = ménager), sinon réglage par défaut.&lt;br /&gt;
* Périmètre de chaque filière appliqué : l&#039;emballage de transport ne va jamais chez Citeo ou Léko ; l&#039;emballage de transport des ventes aux particuliers relève de la REP professionnelle.&lt;br /&gt;
* &#039;&#039;&#039;Emballages d&#039;expédition&#039;&#039;&#039; (carton, calage, adhésif) ajoutés à chaque envoi, par mode d&#039;expédition, ou à chaque facture si les expéditions ne sont pas utilisées.&lt;br /&gt;
&lt;br /&gt;
=== Filières et exports ===&lt;br /&gt;
* &#039;&#039;&#039;Citeo&#039;&#039;&#039; et &#039;&#039;&#039;Léko&#039;&#039;&#039; (emballages ménagers) : poids par code matériau et &#039;&#039;&#039;fichier par UVC&#039;&#039;&#039; au format de la déclaration.&lt;br /&gt;
* &#039;&#039;&#039;EPRO&#039;&#039;&#039; (emballages professionnels, à partir du 1er janvier 2027) : poids par matériau.&lt;br /&gt;
* &#039;&#039;&#039;LUCID&#039;&#039;&#039; (Allemagne) : &#039;&#039;&#039;Datenmeldung XML&#039;&#039;&#039; conforme au guide ZSVR 1.3 (types HPM1, HMM1, HJM1, HNM1, HAM1 ; 14 systèmes duaux ; carton à boisson 68000 à partir de 2027).&lt;br /&gt;
* &#039;&#039;&#039;Registre PPWR&#039;&#039;&#039; de tout État membre (article 44, annexe IX) : 22 catégories, et déclaration simplifiée sous 10 tonnes.&lt;br /&gt;
* &#039;&#039;&#039;Barèmes&#039;&#039;&#039; 2026 Citeo et Léko embarqués, éditables par année ; contribution estimée au kilogramme et à l&#039;unité.&lt;br /&gt;
* Cycle de vie : brouillon recalculable, validation refusée tant qu&#039;un produit vendu n&#039;a pas d&#039;emballage (forçage tracé), dépôt avec référence, réouverture, historique.&lt;br /&gt;
&lt;br /&gt;
=== Déclaration de conformité et enregistrements ===&lt;br /&gt;
* &#039;&#039;&#039;Déclaration UE de conformité&#039;&#039;&#039; au format de l&#039;annexe VIII (procédure du module A, annexe VII) générée en PDF, en français, anglais ou allemand.&lt;br /&gt;
* &#039;&#039;&#039;Enregistrements REP&#039;&#039;&#039; de la société : IDU français (01 ménager, 02 professionnel) et numéro LUCID contrôlés au format, imprimés sur les PDF de devis, commandes, expéditions et factures (ajoutés au moment de la génération, sans modifier la note enregistrée).&lt;br /&gt;
* Enregistrements des &#039;&#039;&#039;fournisseurs&#039;&#039;&#039; dans l&#039;onglet « REP emballages » du tiers, et encart sur les commandes, réceptions et factures fournisseurs.&lt;br /&gt;
&lt;br /&gt;
=== Pilotage ===&lt;br /&gt;
* &#039;&#039;&#039;Tableau de bord&#039;&#039;&#039; : prochaine échéance réglementaire, indicateurs, feuille de route, pays de vente sans enregistrement valide, activité récente.&lt;br /&gt;
* Page &#039;&#039;À propos&#039;&#039; avec diagnostic de l&#039;installation et textes de référence.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Décompresser l&#039;archive pour obtenir le dossier &amp;lt;code&amp;gt;packtrace/&amp;lt;/code&amp;gt; et le copier dans &amp;lt;code&amp;gt;htdocs/custom/&amp;lt;/code&amp;gt; — ou installer le zip depuis &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039;.&lt;br /&gt;
# Activer &#039;&#039;&#039;PackTrace&#039;&#039;&#039; (famille « Produits »).&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Menu &#039;&#039;Emballages → Configuration&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Rôle&#039;&#039;&#039; de la société : fabricant ou marque, importateur, distributeur.&lt;br /&gt;
* &#039;&#039;&#039;Source des quantités&#039;&#039;&#039; (factures ou expéditions), &#039;&#039;&#039;canal par défaut&#039;&#039;&#039;, déduction des avoirs, emballages d&#039;expédition comptés à chaque facture, impression des numéros REP sur les PDF.&lt;br /&gt;
* Rubriques de la &#039;&#039;&#039;déclaration de conformité&#039;&#039;&#039; : signataire, mandataire, autres actes de l&#039;Union, normes appliquées.&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;Emballages → Enregistrements&#039;&#039; : saisir les IDU et le numéro LUCID.&lt;br /&gt;
# &#039;&#039;Emballages → Catalogue d&#039;emballages&#039;&#039; : décrire les éléments (ou les créer depuis l&#039;onglet Emballages d&#039;un produit).&lt;br /&gt;
# &#039;&#039;Emballages → Compositions produits&#039;&#039; : compléter les produits « vendus sans emballage ».&lt;br /&gt;
# &#039;&#039;Emballages → Déclarations REP&#039;&#039; : choisir le pays, la filière et la période, calculer, contrôler les alertes, valider, télécharger le fichier, puis marquer la déclaration déposée avec sa référence.&lt;br /&gt;
# Sur la fiche d&#039;un élément : générer et signer la déclaration de conformité.&lt;br /&gt;
&lt;br /&gt;
== État de la version 1.0.0 ==&lt;br /&gt;
&lt;br /&gt;
Version initiale couverte par 224 contrôles automatisés exécutés sur Dolibarr 18.0.5, 20.0.4 et 24.0.0 : activation, règles (référentiels, correspondances, formats, exports, déclaration de conformité), calcul sur de vrais documents (factures, avoirs, expéditions, contact de livraison, canaux, profils d&#039;expédition) et rendu HTTP de tous les écrans avec invariants de sécurité. Les actes d&#039;exécution du PPWR (format du registre, étiquetage harmonisé) n&#039;étant pas encore adoptés, les exports du registre suivent l&#039;annexe IX et seront alignés dès leur publication.&lt;br /&gt;
&lt;br /&gt;
PackTrace prépare les déclarations ; il ne remplace ni le portail de l&#039;éco-organisme ni un conseil juridique.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : catalogue d&#039;emballages PPWR, composition des produits, calcul depuis factures ou expéditions, déclarations Citeo, Léko, EPRO, LUCID (XML) et registre PPWR, barèmes 2026, déclaration UE de conformité (FR/EN/DE), enregistrements REP et mention sur les PDF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_EUDR_Trace&amp;diff=67469</id>
		<title>Module EUDR Trace</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_EUDR_Trace&amp;diff=67469"/>
		<updated>2026-09-28T00:50:14Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Création de la page du module EUDR Trace 1.0.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module EUDR Trace ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EUDR Trace&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui met en œuvre le &#039;&#039;&#039;règlement européen anti-déforestation (UE) 2023/1115&#039;&#039;&#039; (EUDR), tel que modifié par le règlement (UE) 2025/2650. Il couvre tous les acteurs de la chaîne : le &#039;&#039;&#039;registre « collecter et conserver »&#039;&#039;&#039; des négociants et opérateurs en aval, et les &#039;&#039;&#039;déclarations de diligence raisonnée (DDS)&#039;&#039;&#039; et &#039;&#039;&#039;déclarations simplifiées (SD)&#039;&#039;&#039; des importateurs, exportateurs et producteurs, transmises par l&#039;&#039;&#039;&#039;API V3&#039;&#039;&#039; officielle du système d&#039;information EUDR (TRACES).&lt;br /&gt;
&lt;br /&gt;
Produits concernés : bovins, cacao, café, palmier à huile, caoutchouc, soja, bois et leurs dérivés listés à l&#039;annexe I du règlement (meubles, papier, chocolat, cuir…). Dates d&#039;application : &#039;&#039;&#039;30 décembre 2026&#039;&#039;&#039; pour les grandes et moyennes entreprises, &#039;&#039;&#039;30 juin 2027&#039;&#039;&#039; pour les micro et petites entreprises.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x (vérifiée sur 18.0.5, 20.0.4 et 24.0.0)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 à 8.3 (extensions DOM, cURL, OpenSSL)&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune : tout s&#039;exécute sur le serveur Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
! Langues || Français, anglais&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Qui est concerné, et ce que fait le module ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Profil !! Obligation !! Réponse du module&lt;br /&gt;
|-&lt;br /&gt;
| Opérateur en aval, commerçant (négoce, menuiserie, torréfaction, chocolaterie, distribution) || Collecter et conserver 5 ans les numéros de référence reçus, l&#039;identité des fournisseurs et des clients (art. 5) || Onglet EUDR sur les documents, propagation automatique aux documents clients, impression sur les PDF, registre exportable&lt;br /&gt;
|-&lt;br /&gt;
| Opérateur (importation, exportation, première mise sur le marché) || Déclaration de diligence raisonnée avant chaque mise sur le marché || DDS préparée depuis une commande fournisseur, parcelles GeoJSON, évaluation du risque, transmission et suivi par l&#039;API V3&lt;br /&gt;
|-&lt;br /&gt;
| Micro ou petit producteur primaire établi dans un pays à faible risque || Déclaration simplifiée unique (art. 4a) || SD avec géolocalisation, adresse postale ou référence cadastrale&lt;br /&gt;
|-&lt;br /&gt;
| Mandataire || Déclarer pour le compte d&#039;autrui || Rôles « mandataire d&#039;opérateur » et « mandataire de micro-producteur », opérateur représenté&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
=== Registre « collecter et conserver » ===&lt;br /&gt;
* &#039;&#039;&#039;Onglet EUDR&#039;&#039;&#039; sur les commandes et factures fournisseurs, les réceptions, les commandes clients, les expéditions, les factures et les produits, et &#039;&#039;&#039;encart&#039;&#039;&#039; de couverture sur chaque fiche.&lt;br /&gt;
* Numéro de référence (14 caractères, préfixe « S » pour une déclaration simplifiée) et numéro de vérification &#039;&#039;&#039;contrôlés au format officiel&#039;&#039;&#039; ; numéro de secours délivré par la douane accepté.&lt;br /&gt;
* &#039;&#039;&#039;Transmission automatique&#039;&#039;&#039; : à la validation d&#039;une commande, d&#039;une expédition ou d&#039;une facture client, la référence amont la plus récente de chaque produit concerné est rattachée au document.&lt;br /&gt;
* &#039;&#039;&#039;Impression sur les PDF&#039;&#039;&#039; de commande, d&#039;expédition et de facture (ajoutée à la note publique au moment de la génération, sans modifier la note enregistrée).&lt;br /&gt;
* Option de &#039;&#039;&#039;blocage&#039;&#039;&#039; : refus de valider un document client contenant un produit concerné sans référence.&lt;br /&gt;
* &#039;&#039;&#039;Registre&#039;&#039;&#039; filtrable et &#039;&#039;&#039;exportable en CSV&#039;&#039;&#039; avec l&#039;identité complète des fournisseurs et des clients ; suppressions tracées ; piste d&#039;audit jamais purgée.&lt;br /&gt;
&lt;br /&gt;
=== Produits ===&lt;br /&gt;
* Détection automatique des produits concernés à partir de leur &#039;&#039;&#039;nomenclature douanière&#039;&#039;&#039; (champ natif « Code douane »), selon l&#039;annexe I.&lt;br /&gt;
* Classement en masse (matière première, code SH, essences pour le bois) ; signalement des positions dont le retrait de l&#039;annexe est proposé.&lt;br /&gt;
&lt;br /&gt;
=== Déclarations DDS et simplifiées — API V3 ===&lt;br /&gt;
* Services officiels &amp;lt;code&amp;gt;EUDRDueDiligenceStatementServiceV3&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;EUDRSimplifiedDeclarationServiceV3&amp;lt;/code&amp;gt;, authentification WS-Security (UsernameToken, PasswordDigest), en-tête BodyIdentity pour les comptes multi-opérateurs.&lt;br /&gt;
* &#039;&#039;&#039;DDS préparée en un clic&#039;&#039;&#039; depuis une commande fournisseur, une réception ou une facture fournisseur : marchandises, codes SH, poids nets calculés depuis le poids des produits, essences, parcelles du fournisseur ; importation détectée pour un fournisseur hors UE.&lt;br /&gt;
* &#039;&#039;&#039;Contrôles avant envoi (fail-closed)&#039;&#039;&#039; : règles de validation publiées par la Commission et &#039;&#039;&#039;schémas XSD officiels V3 embarqués&#039;&#039;&#039;. Rien n&#039;est envoyé tant qu&#039;un contrôle échoue.&lt;br /&gt;
* Transmission, &#039;&#039;&#039;relève automatique&#039;&#039;&#039; du numéro de référence et du numéro de vérification (tâche planifiée respectant les limites d&#039;appel du système), &#039;&#039;&#039;modification et retrait dans les 72 heures&#039;&#039;&#039;, regroupement de déclarations.&lt;br /&gt;
* Pièces XML échangées archivées (condensat d&#039;authentification masqué) et historique par déclaration.&lt;br /&gt;
&lt;br /&gt;
=== Parcelles et risque ===&lt;br /&gt;
* Import de fichier GeoJSON, collage ou simple point GPS ; adresse postale ou référence cadastrale pour les déclarations simplifiées.&lt;br /&gt;
* Contrôles hors ligne des erreurs listées par la Commission : polygone ouvert, troué ou dont les côtés se croisent, points dupliqués après troncature à 6 décimales, parcelle de plus de 4 ha décrite par un point (sauf bovins), propriétés mal orthographiées, fichier de plus de 25 Mo… Surface calculée et aperçu cartographique sans service externe.&lt;br /&gt;
* &#039;&#039;&#039;Classement des pays&#039;&#039;&#039; du règlement d&#039;exécution (UE) 2025/1093 embarqué (140 pays à faible risque, 4 à risque élevé), surchargeable pays par pays pour suivre une révision de la liste.&lt;br /&gt;
* Niveau de risque de chaque déclaration calculé à partir des pays de production ; diligence simplifiée reconnue lorsque tous les pays sont à faible risque ; évaluation et conclusion exigées sinon.&lt;br /&gt;
&lt;br /&gt;
=== Pilotage ===&lt;br /&gt;
* &#039;&#039;&#039;Tableau de bord&#039;&#039;&#039; avec compte à rebours jusqu&#039;à la date d&#039;application, indicateurs, feuille de route adaptée au profil et liste des documents à compléter.&lt;br /&gt;
* Page &#039;&#039;À propos&#039;&#039; avec diagnostic de l&#039;installation.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Décompresser l&#039;archive pour obtenir le dossier &amp;lt;code&amp;gt;eudrtrace/&amp;lt;/code&amp;gt; et le copier dans &amp;lt;code&amp;gt;htdocs/custom/&amp;lt;/code&amp;gt; — ou installer le zip depuis &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039;.&lt;br /&gt;
# Activer &#039;&#039;&#039;EUDR Trace&#039;&#039;&#039; (famille « Produits »).&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Menu &#039;&#039;EUDR → Configuration&#039;&#039; (ou &#039;&#039;Configuration → Modules → EUDR Trace&#039;&#039;) :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Profil&#039;&#039;&#039; : opérateur en aval, commerçant, opérateur, micro ou petit producteur primaire, mandataire ; &#039;&#039;&#039;taille&#039;&#039;&#039; de l&#039;entreprise ; &#039;&#039;&#039;numéro EORI&#039;&#039;&#039; (en France, repris du 5e identifiant professionnel de la société).&lt;br /&gt;
* &#039;&#039;&#039;Système d&#039;information EUDR&#039;&#039;&#039; (opérateurs, producteurs et mandataires seulement) : environnement d&#039;acceptation ou de production, utilisateur EU Login, clé d&#039;authentification (chiffrée en base), WebServiceClientId, Operator Access Identifier si le compte gère plusieurs opérateurs. Bouton &#039;&#039;&#039;« Tester la connexion »&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Transmission en aval&#039;&#039;&#039; : rattachement automatique des références, impression sur les PDF, blocage de la validation sans référence, géolocalisation confidentielle par défaut.&lt;br /&gt;
&lt;br /&gt;
=== Obtenir les identifiants du système d&#039;information ===&lt;br /&gt;
&lt;br /&gt;
# Créer un compte EU Login, puis l&#039;opérateur de la société dans le système d&#039;information EUDR (TRACES).&lt;br /&gt;
# Dans le profil de l&#039;utilisateur, section « Web Services Access », activer l&#039;accès et relever la clé d&#039;authentification.&lt;br /&gt;
# Tester d&#039;abord dans l&#039;environnement d&#039;acceptation, puis refaire la démarche en production.&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;EUDR → Produits concernés&#039;&#039; : confirmer le classement proposé à partir des codes douaniers.&lt;br /&gt;
# Sur une commande fournisseur ou une réception, onglet &#039;&#039;&#039;EUDR&#039;&#039;&#039; : saisir le numéro de référence et le numéro de vérification communiqués par le fournisseur.&lt;br /&gt;
# Valider les commandes, expéditions et factures clients : les références sont rattachées et imprimées automatiquement ; l&#039;encart de la fiche signale les produits sans référence.&lt;br /&gt;
# Opérateurs : &#039;&#039;Préparer une DDS depuis ce document&#039;&#039;, rattacher les parcelles, documenter l&#039;évaluation du risque, &#039;&#039;&#039;Valider&#039;&#039;&#039; puis &#039;&#039;&#039;Transmettre&#039;&#039;&#039;. Les numéros attribués apparaissent sur la déclaration et sont transmis aux clients.&lt;br /&gt;
# &#039;&#039;EUDR → Registre des références&#039;&#039; : consulter et exporter le registre à conserver 5 ans.&lt;br /&gt;
&lt;br /&gt;
== État de la version 1.0.0 ==&lt;br /&gt;
&lt;br /&gt;
Version initiale couverte par 331 contrôles automatisés exécutés sur Dolibarr 18.0.5, 20.0.4 et 24.0.0 : activation, règles GeoJSON (exemples et erreurs officiels de la Commission), cycle complet des déclarations contre un simulateur strict du système d&#039;information (authentification, horodatage et schéma XSD vérifiés), registre sur de vrais documents (commandes, factures, avoirs, PDF), et rendu HTTP de tous les écrans. La transmission réelle au système d&#039;information demande les identifiants de l&#039;opérateur.&lt;br /&gt;
&lt;br /&gt;
EUDR Trace est un outil de gestion : il ne remplace ni l&#039;analyse juridique de la situation de l&#039;entreprise ni la diligence raisonnée elle-même.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : registre « collecter et conserver », propagation aux documents clients et aux PDF, classement des produits (annexe I), parcelles GeoJSON contrôlées, classement des pays 2025/1093, déclarations DDS et SD via l&#039;API V3 (transmission, relève, modification et retrait sous 72 h, regroupement), FR/EN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_DoliBank_Match&amp;diff=67445</id>
		<title>Module DoliBank Match</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_DoliBank_Match&amp;diff=67445"/>
		<updated>2026-09-25T13:23:24Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Version 1.5.0 : salaires, charges et notes de frais, alerte anti-fraude IBAN, Mode Express repensé, compatibilité validée 18/20/24&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module DoliBank Match ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DoliBank Match&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM de &#039;&#039;&#039;rapprochement bancaire explicable&#039;&#039;&#039;. Il importe les relevés bancaires dans tous les formats courants, propose des correspondances avec les factures clients et fournisseurs, les salaires, les charges sociales et les notes de frais &#039;&#039;&#039;en justifiant chaque proposition&#039;&#039;&#039;, et ne comptabilise rien sans validation humaine explicite.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x (validé sur 18.0.5, 20.0.4 et 24.0.0)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum&lt;br /&gt;
|-&lt;br /&gt;
! Prérequis || Module Banque / Caisse actif ; MySQL ou MariaDB&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune — les règlements sont écrits par les classes natives de Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3319 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
=== Import de relevés ===&lt;br /&gt;
&lt;br /&gt;
* Formats acceptés : &#039;&#039;&#039;CSV/TXT, OFX 1 et 2, QIF, ISO 20022 CAMT.052/.053/.054, MT940/STA et CODA 2.x&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Prévisualisation avant import&#039;&#039;&#039; : le fichier est analysé, stocké côté serveur et rattaché à l&#039;entité, à l&#039;utilisateur et au compte bancaire ; rien n&#039;est écrit tant que l&#039;import n&#039;est pas confirmé.&lt;br /&gt;
* &#039;&#039;&#039;Imports immuables&#039;&#039;&#039; et détection de doublons par empreinte SHA-256 : réimporter le même fichier ne crée jamais de doublon.&lt;br /&gt;
* &#039;&#039;&#039;Rapport des lignes rejetées&#039;&#039;&#039; : aucune ligne n&#039;est perdue silencieusement.&lt;br /&gt;
&lt;br /&gt;
Pour un fichier CSV, seules trois informations sont obligatoires : une date d&#039;opération, un libellé, et soit une colonne de montant, soit deux colonnes débit et crédit. Les colonnes facultatives (devise, date de valeur, identifiant, référence, contrepartie, IBAN) sont reconnues sous leurs noms français et anglais usuels.&lt;br /&gt;
&lt;br /&gt;
=== Rapprochement explicable ===&lt;br /&gt;
&lt;br /&gt;
* Candidats proposés parmi les &#039;&#039;&#039;factures clients et fournisseurs&#039;&#039;&#039;, les avoirs et les acomptes, les &#039;&#039;&#039;salaires&#039;&#039;&#039;, les &#039;&#039;&#039;charges sociales et fiscales&#039;&#039;&#039; et les &#039;&#039;&#039;notes de frais&#039;&#039;&#039; (ces trois familles uniquement face aux débits, chacune désactivable), chaque proposition affichant &#039;&#039;&#039;les éléments de preuve qui l&#039;ont produite&#039;&#039;&#039;.&lt;br /&gt;
* Preuves prises en compte : montant, date, référence fournisseur, &#039;&#039;&#039;références structurées belges OGM/VCS&#039;&#039;&#039;, &#039;&#039;&#039;ISO 11649 RF&#039;&#039;&#039;, et IBAN validé du tiers.&lt;br /&gt;
* Le &#039;&#039;&#039;montant exact ne suffit jamais&#039;&#039;&#039; à lui seul à déclencher une proposition — garde-fou volontaire contre les faux rapprochements.&lt;br /&gt;
* &#039;&#039;&#039;Règlement multi-factures&#039;&#039;&#039; : un virement affecté à plusieurs factures du même tiers ; &#039;&#039;&#039;paiements partiels&#039;&#039;&#039; pris en charge.&lt;br /&gt;
* &#039;&#039;&#039;Frais bancaires&#039;&#039;&#039; enregistrés via &amp;lt;code&amp;gt;PaymentVarious&amp;lt;/code&amp;gt;, &#039;&#039;&#039;virements internes&#039;&#039;&#039; proposés et écritures croisées.&lt;br /&gt;
* &#039;&#039;&#039;Versements de plateformes&#039;&#039;&#039; Stripe, PayPal et Shopify Payments normalisés, avec contrôle brut / frais / remboursements / net.&lt;br /&gt;
* &#039;&#039;&#039;Alerte anti-fraude IBAN&#039;&#039;&#039; : un paiement fournisseur qui part vers un IBAN différent de ceux enregistrés pour ce fournisseur est signalé en rouge et ramené sous le seuil de forte confiance.&lt;br /&gt;
* &#039;&#039;&#039;Règles réutilisables&#039;&#039;&#039; et apprentissage IBAN — les règles &#039;&#039;&#039;proposent&#039;&#039;&#039;, elles ne comptabilisent jamais d&#039;elles-mêmes ; l&#039;apprentissage n&#039;a lieu qu&#039;après validation humaine.&lt;br /&gt;
&lt;br /&gt;
=== Sécurité de la comptabilisation ===&lt;br /&gt;
&lt;br /&gt;
La comptabilisation native est &#039;&#039;&#039;désactivée par défaut&#039;&#039;&#039; et exige trois conditions simultanées : la permission de rapprochement, une décision explicitement validée, et la permission dédiée de comptabilisation accompagnée du réglage correspondant du module. S&#039;y ajoutent la protection contre les doubles comptabilisations, contre les validations concurrentes et contre les sur-allocations cumulées, l&#039;idempotence des décisions, un état d&#039;erreur de comptabilisation explicitement non rejouable, et une &#039;&#039;&#039;piste d&#039;audit en ajout seul&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Interface ===&lt;br /&gt;
&lt;br /&gt;
Tableau de bord (taux de rapprochement, temps économisé, garde-fous actifs), boîte d&#039;opérations avec filtres avancés et indices colorés, &#039;&#039;&#039;Mode Express&#039;&#039;&#039; au clavier (→ valider, ← ignorer, ↓ passer ; un virement multi-factures se valide d&#039;un coup), écran de rapprochement détaillé, règles, versements de plateformes, connecteurs, bordereau imprimable et export CSV comptable, page de diagnostic et widget d&#039;accueil. Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_dolibankmatch-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039;.&lt;br /&gt;
# Activer &#039;&#039;&#039;DoliBank Match&#039;&#039;&#039; (famille « Finance / Facturation »).&lt;br /&gt;
# Configurer un compte bancaire par défaut et les seuils de score.&lt;br /&gt;
# Attribuer les droits d&#039;import et de rapprochement aux utilisateurs concernés.&lt;br /&gt;
# N&#039;accorder la permission de comptabilisation qu&#039;aux comptables autorisés, et n&#039;activer la comptabilisation native qu&#039;après un essai sur une copie de recette.&lt;br /&gt;
&lt;br /&gt;
En cas de mise à jour, désactiver puis réactiver le module pendant une fenêtre de maintenance afin que Dolibarr enregistre les nouvelles tables, les menus, la tâche planifiée, le widget et les permissions. &#039;&#039;&#039;La désactivation ne supprime pas les tables du module.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
# Importer un relevé et contrôler la prévisualisation avant de confirmer.&lt;br /&gt;
# Parcourir les propositions : chacune indique le score et les preuves retenues.&lt;br /&gt;
# Valider les décisions ; la comptabilisation native n&#039;intervient qu&#039;ensuite, et seulement si elle a été explicitement autorisée.&lt;br /&gt;
# Les règles permettent d&#039;automatiser la &#039;&#039;proposition&#039;&#039; des cas récurrents, jamais leur écriture.&lt;br /&gt;
&lt;br /&gt;
== Périmètre des connecteurs ==&lt;br /&gt;
&lt;br /&gt;
La couche Open Banking intégrée est livrée avec un connecteur bac à sable déterministe, pour les essais. Pour une &#039;&#039;&#039;connexion bancaire réelle&#039;&#039;&#039; (Qonto, open banking européen), voir le module complémentaire [[Module DoliBank Sync|DoliBank Sync]], qui alimente le moteur de rapprochement de DoliBank Match.&lt;br /&gt;
&lt;br /&gt;
Les versements Stripe, PayPal et Shopify Payments acceptent aujourd&#039;hui un JSON normalisé et relient les lignes de versement aux paiements Dolibarr par identifiant externe ; les clients d&#039;API et webhooks temps réel de ces plateformes constituent le jalon suivant.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.5.0 || Interface redessinée ; salaires, charges sociales et notes de frais proposés et réglés nativement ; alerte anti-fraude IBAN ; Mode Express repensé (multi-factures en une validation) ; bordereau et export CSV traduits ; diagnostic ; correction de la détection CODA sur les CSV à lignes longues et des réglages sans effet&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.0 || Suivi des fusions de tiers ; widget ROI corrigé ; libellés traduits&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.1 || Correction d&#039;une collision d&#039;identifiants de module et de permissions avec DoliTax ; restauration de l&#039;accès au tableau de bord, à l&#039;import et à la comptabilisation lorsque les deux modules sont activés&lt;br /&gt;
|-&lt;br /&gt;
| 0.3.0 || Prévisualisation avant import et rapport des rejets ; formats OFX, QIF, CAMT, MT940, CODA ; cycle brouillon → validation → comptabilisation native ; règlements multi-factures, partiels, avoirs et acomptes ; frais bancaires et virements internes ; protections anti-doublon et anti-sur-allocation ; règles et apprentissage IBAN ; interface Open Banking et connecteur bac à sable ; versements Stripe / PayPal / Shopify Payments&lt;br /&gt;
|-&lt;br /&gt;
| 0.2.0 || Références structurées OGM/VCS et ISO 11649 RF ; référence fournisseur et IBAN dans le moteur de score ; filtres avancés ; ignorance et restauration en masse, réversibles et auditées&lt;br /&gt;
|-&lt;br /&gt;
| 0.1.0 || Premier socle : import CSV, normalisation, détection de doublons, propositions explicables, tableau de bord, permissions, audit, FR/EN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Shopify_Sync&amp;diff=67420</id>
		<title>Module Shopify Sync</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Shopify_Sync&amp;diff=67420"/>
		<updated>2026-09-24T14:09:33Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Version 1.8.1 : publication des produits à variantes, suivi facultatif du statut en vente, prérequis API et droits, guide de recette et mise à jour.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module Shopify Sync ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shopify Sync&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui assure une &#039;&#039;&#039;synchronisation bidirectionnelle quasi temps réel entre Shopify et Dolibarr&#039;&#039;&#039; : commandes, clients, remboursements, produits et variantes, stock et expéditions. Le module dialogue directement avec l&#039;API &#039;&#039;&#039;GraphQL Admin&#039;&#039;&#039; de Shopify : sans SaaS intermédiaire, sans abonnement supplémentaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Version || 1.8.1&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x (validé sur 18.0.5, 20.0.4 et 24.0.0)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum (extension cURL), validé jusqu&#039;à 8.2&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (cURL pur : pas de Composer, pas de SDK)&lt;br /&gt;
|-&lt;br /&gt;
! Version d&#039;API Shopify || 2026-01 par défaut, configurable ; appels vérifiés sur 2025-07, 2025-10, 2026-01, 2026-04, 2026-07 et unstable&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3218 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
La fréquence effective dépend des tâches planifiées, de l’hébergement et des limites de l’API Shopify. Une boutique Shopify est configurée par entité Dolibarr.&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Commandes&#039;&#039;&#039; Shopify → Dolibarr : client (ou client invité), commande à la date de la vente, lignes reliées aux fiches produits, remises, &#039;&#039;&#039;frais de port&#039;&#039;&#039;, contact de livraison si l&#039;adresse diffère ; &#039;&#039;&#039;facture&#039;&#039;&#039; dès que la commande est payée, même après son import.&lt;br /&gt;
* &#039;&#039;&#039;Prix TTC ou HT&#039;&#039;&#039; : le module lit le réglage « taxes incluses » de la boutique, les montants importés correspondent à ce que le client a payé.&lt;br /&gt;
* &#039;&#039;&#039;Annulations&#039;&#039;&#039; Shopify répercutées sur la commande Dolibarr.&lt;br /&gt;
* &#039;&#039;&#039;Remboursements&#039;&#039;&#039; → avoirs Dolibarr : partiel (montant réellement rendu) ou total (avoir miroir ligne à ligne).&lt;br /&gt;
* &#039;&#039;&#039;Expéditions&#039;&#039;&#039; Dolibarr → Shopify : articles et quantités expédiés, numéro de suivi et transporteur ; expéditions partielles gérées. En option, l&#039;inverse : une étiquette imprimée dans Shopify crée et valide l&#039;expédition Dolibarr.&lt;br /&gt;
* &#039;&#039;&#039;Produits&#039;&#039;&#039; dans les deux sens, avec une &#039;&#039;&#039;source de vérité configurable&#039;&#039;&#039; (produits, prix, stock).&lt;br /&gt;
* &#039;&#039;&#039;Catalogue existant&#039;&#039;&#039; : rattachement par SKU des variantes Shopify aux fiches Dolibarr existantes, sans produit parent ni module Variants.&lt;br /&gt;
* &#039;&#039;&#039;Produits à variantes&#039;&#039;&#039; (module Variants) : les attributs Dolibarr deviennent des options Shopify, une variante par combinaison. Limites de la boutique lues à l&#039;exécution (2 048 variantes, 3 options).&lt;br /&gt;
* &#039;&#039;&#039;Stock multi-emplacements&#039;&#039;&#039; : table « entrepôts Dolibarr = emplacement Shopify », ou un emplacement unique alimenté par les entrepôts choisis.&lt;br /&gt;
* &#039;&#039;&#039;Metafields&#039;&#039;&#039; : attributs supplémentaires et champs standards (poids, dimensions, volume) publiés vers Shopify, avec conversion de type et d&#039;unité.&lt;br /&gt;
* &#039;&#039;&#039;Catégories, images, poids&#039;&#039;&#039; : collections et tags Shopify, menu de navigation, images des fiches, poids d&#039;expédition (options).&lt;br /&gt;
* &#039;&#039;&#039;Webhooks signés HMAC&#039;&#039;&#039; pour le quasi temps réel, doublés d&#039;une &#039;&#039;&#039;réconciliation planifiée&#039;&#039;&#039; qui rattrape commandes, paiements, annulations et remboursements manqués.&lt;br /&gt;
* &#039;&#039;&#039;File d&#039;attente asynchrone&#039;&#039;&#039; : limites de débit de l&#039;API absorbées, nouvelles tentatives sûres, aucun job traité deux fois.&lt;br /&gt;
* &#039;&#039;&#039;Anti-boucle&#039;&#039;&#039; par empreinte d&#039;état, et &#039;&#039;&#039;résolution de conflits&#039;&#039;&#039; configurable.&lt;br /&gt;
* &#039;&#039;&#039;Tableau de bord&#039;&#039;&#039; : file d&#039;attente, échecs, journal ; traiter la file maintenant, relancer les échecs, rattraper les commandes des N derniers jours.&lt;br /&gt;
* &#039;&#039;&#039;Encart « État Shopify »&#039;&#039;&#039; sur les fiches produit et commande, avec bouton « Synchroniser ».&lt;br /&gt;
* Bouton &#039;&#039;&#039;« Tester la connexion »&#039;&#039;&#039; : contrôles de configuration, droits, emplacements, webhooks et tâches planifiées, chacun avec le correctif suggéré.&lt;br /&gt;
* &#039;&#039;&#039;Diagnostic opérationnel&#039;&#039;&#039; : état de connexion et du planificateur, suivi par flux, causes et conseils, historique, relances ciblées et export de diagnostic sans secrets (depuis la 1.6.0).&lt;br /&gt;
* &#039;&#039;&#039;Assistant de configuration initiale&#039;&#039;&#039; : six étapes pour relier Shopify, choisir le catalogue, vérifier les SKU, associer les entrepôts et préparer un premier lot avec aperçu (depuis la 1.7.0).&lt;br /&gt;
* &#039;&#039;&#039;Sélection du catalogue&#039;&#039;&#039; : plusieurs branches autorisées, exclusions prioritaires et aperçu complet sans synchroniser (1.8.0, facultatif).&lt;br /&gt;
* &#039;&#039;&#039;Validation des produits&#039;&#039;&#039; : condition par champ booléen, contrôlée avant mise en file et au traitement (1.8.0, facultatif).&lt;br /&gt;
* &#039;&#039;&#039;Ordre des photos&#039;&#039;&#039; : reprise des positions Dolibarr et réordonnancement des médias existants, sans renvoyer les images inchangées (1.8.0, facultatif).&lt;br /&gt;
* Interface du module en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Ce qui est synchronisé, flux par flux ==&lt;br /&gt;
&lt;br /&gt;
Chaque flux s&#039;active ou se coupe indépendamment dans la configuration (carte « Flux synchronisés »).&lt;br /&gt;
&lt;br /&gt;
=== Commandes (Shopify → Dolibarr) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Événement Shopify !! Effet dans Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
| Commande créée || Tiers retrouvé par e-mail (sinon créé, avec l&#039;adresse de facturation et le pays) ; commande datée du jour de la vente, référence client = numéro Shopify ; une ligne par article, reliée à la fiche par la variante ou le SKU ; remises ; ligne « Frais de port » ; contact de livraison si l&#039;adresse diffère. La commande reste en &#039;&#039;&#039;brouillon&#039;&#039;&#039; (validation automatique en option).&lt;br /&gt;
|-&lt;br /&gt;
| Commande payée (tout de suite ou plus tard) || Facture créée depuis la commande et validée ; règlement enregistré en option (mode de paiement et compte bancaire au choix).&lt;br /&gt;
|-&lt;br /&gt;
| Commande annulée || Commande Dolibarr annulée, sauf si une expédition est déjà en cours.&lt;br /&gt;
|-&lt;br /&gt;
| Commande de test (passerelle de test Shopify) || Importée et signalée comme telle ; peut être ignorée par option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Un tiers existant n&#039;est jamais renommé par une commande : seuls les champs vides sont complétés.&lt;br /&gt;
&lt;br /&gt;
Ventes sans client (caisse Shopify POS, commandes anonymes) : portées par un seul tiers, choisi dans la configuration, ou « Client comptoir (Shopify) » créé automatiquement. Le code client est attribué par la numérotation Dolibarr, y compris quand il est obligatoire.&lt;br /&gt;
&lt;br /&gt;
=== Clients (dans les deux sens) ===&lt;br /&gt;
&lt;br /&gt;
* Shopify → Dolibarr : un client créé ou modifié met à jour son tiers (nom, e-mail, adresse, téléphone, pays, province). Une raison sociale Shopify devient le nom du tiers.&lt;br /&gt;
* Dolibarr → Shopify : un tiers client créé ou modifié est publié (prénom, nom, e-mail, téléphone). Un tiers sans e-mail ni téléphone n&#039;est pas publié (exigence Shopify).&lt;br /&gt;
* Client supprimé sur Shopify : le lien est retiré, le tiers Dolibarr est conservé.&lt;br /&gt;
&lt;br /&gt;
=== Produits (dans les deux sens) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Sens !! Création !! Modification&lt;br /&gt;
|-&lt;br /&gt;
| Dolibarr → Shopify (source de vérité produits = Dolibarr) || Produit Shopify avec titre, description, prix, SKU (= référence), code-barres, suivi de stock, statut actif si la fiche est en vente, sinon brouillon. Publication sur la Boutique en ligne en option. || Titre, description et metafields. Prix, SKU et code-barres seulement si l&#039;option « Réaligner prix, SKU et code-barres » est cochée ; statut seulement si « Suivre en vente » est cochée.&lt;br /&gt;
|-&lt;br /&gt;
| Shopify → Dolibarr || Fiche Dolibarr (référence = SKU, libellé, prix, code-barres, statut) ; une fiche par variante pour un produit à plusieurs variantes. Si le SKU correspond à une référence existante, la fiche est &#039;&#039;&#039;rattachée&#039;&#039;&#039; sans être modifiée. || Libellé. Prix seulement si Shopify est source de vérité des prix ; statut et code-barres seulement si Shopify est source de vérité des produits.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Produit supprimé sur Shopify : liens retirés, fiche Dolibarr conservée, jamais recréée d&#039;office (un export manuel peut la recréer si les flux, la source et les conditions de publication l’autorisent).&lt;br /&gt;
* Fiche rattachée par SKU : utilisée pour les commandes et le stock ; son titre, sa description et son prix ne sont jamais réécrits.&lt;br /&gt;
* Prix envoyé à Shopify : HT de la fiche par défaut (fonctionnement historique), ou TTC si la boutique est en TTC (option « selon la boutique »).&lt;br /&gt;
&lt;br /&gt;
=== Catégories, images et champs produit (Dolibarr → Shopify, options) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Catégories&#039;&#039;&#039; : chaque catégorie produit devient une &#039;&#039;&#039;collection&#039;&#039;&#039; Shopify, un &#039;&#039;&#039;tag&#039;&#039;&#039;, ou les deux. Le produit rejoint et quitte les collections selon ses catégories ; une collection parente peut contenir les produits de ses sous-catégories ; une catégorie renommée ou supprimée entraîne sa collection.&lt;br /&gt;
* &#039;&#039;&#039;Menu de navigation&#039;&#039;&#039; construit sur l&#039;arborescence, jusqu&#039;à 3 niveaux (limite Shopify), reconstruit seulement quand l&#039;arborescence change. Droits &amp;lt;code&amp;gt;read_online_store_navigation&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;write_online_store_navigation&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Images&#039;&#039;&#039; de l&#039;onglet « Fichiers joints » envoyées dans les médias du produit : ajout, remplacement quand le fichier change, retrait quand il disparaît, sans doublon.&lt;br /&gt;
* &#039;&#039;&#039;Metafields&#039;&#039;&#039; : un attribut supplémentaire &#039;&#039;ou&#039;&#039; un champ standard (&amp;lt;code&amp;gt;@weight&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@length&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@width&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@height&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@surface&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@volume&amp;lt;/code&amp;gt;) publié avec conversion de type et d&#039;unité (texte riche, poids, dimension, volume, nombres, dates, listes). Une valeur vidée efface le metafield ; une valeur refusée par Shopify n&#039;empêche pas les autres et le job apparaît en échec.&lt;br /&gt;
* &#039;&#039;&#039;Poids d&#039;expédition&#039;&#039;&#039; : le poids Dolibarr publié sur la variante Shopify, pour le calcul des frais de port.&lt;br /&gt;
* &#039;&#039;&#039;Produit supprimé dans Dolibarr&#039;&#039;&#039; : passé en brouillon ou archivé sur Shopify, jamais supprimé.&lt;br /&gt;
&lt;br /&gt;
Le module ne touche qu&#039;à ce qu&#039;il a créé : une collection, un tag ou une image ajoutés à la main sur Shopify ne sont jamais retirés.&lt;br /&gt;
&lt;br /&gt;
=== Stock (sens selon la source de vérité) ===&lt;br /&gt;
&lt;br /&gt;
* Source de vérité &#039;&#039;&#039;Dolibarr&#039;&#039;&#039; : chaque mouvement de stock publie la quantité des entrepôts choisis sur l&#039;emplacement Shopify correspondant (écriture « comparer puis écrire », conforme aux API 2026-04 et suivantes). Les niveaux Shopify sont ignorés : l&#039;expédition Dolibarr sortira le stock vendu.&lt;br /&gt;
* Source de vérité &#039;&#039;&#039;Shopify&#039;&#039;&#039; : un niveau modifié sur Shopify ajuste l&#039;entrepôt Dolibarr associé à l&#039;emplacement.&lt;br /&gt;
* Quantité échangée : physique publiée par défaut ; « Physique » dans les deux sens, ou « Disponible » si Dolibarr décrémente le stock dès la validation de commande (le diagnostic le suggère).&lt;br /&gt;
&lt;br /&gt;
=== Expéditions (Dolibarr → Shopify) ===&lt;br /&gt;
&lt;br /&gt;
* À la validation d&#039;une expédition liée à une commande Shopify, la commande passe « expédiée » sur Shopify pour les articles et quantités réellement expédiés (expéditions partielles comprises).&lt;br /&gt;
* Numéro de suivi et transporteur (d&#039;après le mode d&#039;expédition) transmis ; Shopify envoie au client son e-mail d&#039;expédition (désactivable).&lt;br /&gt;
* Une expédition n&#039;est jamais déclarée deux fois ; les expéditions de commandes qui ne viennent pas de Shopify sont ignorées.&lt;br /&gt;
* Le stock d&#039;un article expédié est publié après la déclaration de l&#039;expédition, pour que Shopify ne le décompte pas deux fois.&lt;br /&gt;
&lt;br /&gt;
=== Étiquettes imprimées dans Shopify (Shopify → Dolibarr, option) ===&lt;br /&gt;
&lt;br /&gt;
Pour les boutiques qui impriment leurs étiquettes dans Shopify (Chronopost, Colissimo, Shopify Shipping) tout en gardant Dolibarr seul maître du stock, par exemple un entrepôt partagé avec le B2B :&lt;br /&gt;
&lt;br /&gt;
* Chaque expédition Shopify crée et valide l&#039;expédition Dolibarr de la commande (importée au passage si besoin), avec le numéro de suivi et le transporteur.&lt;br /&gt;
* L&#039;entrepôt est celui de l&#039;emplacement Shopify expéditeur (table entrepôts = emplacement).&lt;br /&gt;
* La validation sort le stock dans Dolibarr, qui le repousse vers Shopify : les sorties B2B ne sont jamais écrasées.&lt;br /&gt;
* Jamais plus que le reste à expédier de chaque ligne ; étiquettes antérieures à l&#039;activation ignorées ; étiquette annulée sur Shopify = expédition annulée et stock remis.&lt;br /&gt;
* Prérequis : module Expéditions et « Décrémenter le stock réel à la validation des expéditions » dans le module Stocks (contrôlés par le diagnostic).&lt;br /&gt;
&lt;br /&gt;
=== Remboursements (Shopify → Dolibarr) ===&lt;br /&gt;
&lt;br /&gt;
* Remboursement partiel : avoir limité au montant réellement remboursé, avec répartition par taux lorsque le détail des lignes remboursées est disponible. Vérifier les taux et les frais de port pour un remboursement récupéré sans détail par réconciliation.&lt;br /&gt;
* Remboursement total : avoir reprenant chaque ligne de la facture.&lt;br /&gt;
* L&#039;avoir reste en brouillon par défaut (validation en option). Un remboursement arrivé avant sa commande ou sa facture est mis en attente ; si la facture reste absente, il passe dans les reprises puis devient visible en échec si le problème persiste.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
 Webhook Shopify ─┐                          ┌─ Trigger Dolibarr&lt;br /&gt;
                  ▼                          ▼&lt;br /&gt;
             [ JobQueue ] ── cron process_queue ── [ SyncEngine ]&lt;br /&gt;
                  │                                     │&lt;br /&gt;
           [ MappingRepository ]                 [ Mappers × 6 ]&lt;br /&gt;
         (id ↔ id + hash anti-boucle)      (Order / Customer / Refund /&lt;br /&gt;
                                            Product / Inventory / Fulfillment)&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
* Modules Dolibarr &#039;&#039;&#039;Produits&#039;&#039;&#039;, &#039;&#039;&#039;Commandes&#039;&#039;&#039; et &#039;&#039;&#039;Tiers&#039;&#039;&#039; actifs ; &#039;&#039;&#039;Stocks&#039;&#039;&#039;, &#039;&#039;&#039;Expéditions&#039;&#039;&#039; et &#039;&#039;&#039;Factures&#039;&#039;&#039; selon les flux utilisés.&lt;br /&gt;
* Une &#039;&#039;&#039;application Shopify&#039;&#039;&#039; disposant des droits Admin API (products, orders, inventory, customers, fulfillments, locations ; &amp;lt;code&amp;gt;read_publications&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;write_publications&amp;lt;/code&amp;gt; pour publier les nouveautés sur la Boutique en ligne ; &amp;lt;code&amp;gt;read_online_store_navigation&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;write_online_store_navigation&amp;lt;/code&amp;gt; pour le menu). Selon son type, elle fournit un jeton &amp;lt;code&amp;gt;shpat_…&amp;lt;/code&amp;gt; à coller, ou un &#039;&#039;client ID&#039;&#039; et un &#039;&#039;client secret&#039;&#039; avec lesquels le module obtient et renouvelle le jeton lui-même.&lt;br /&gt;
* Pour le temps réel : un endpoint webhook &#039;&#039;&#039;HTTPS public&#039;&#039;&#039;. Voir ci-dessous le fonctionnement sans webhook.&lt;br /&gt;
&lt;br /&gt;
== Installation et mise à jour ==&lt;br /&gt;
&lt;br /&gt;
# Sauvegarder la base de données, les documents et la configuration du module.&lt;br /&gt;
# Télécharger &amp;lt;code&amp;gt;module_shopifysync-1.8.1.zip&amp;lt;/code&amp;gt; depuis la [https://www.dolistore.com/product.php?id=3218 fiche DoliStore].&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039;, ou remplacer le dossier &amp;lt;code&amp;gt;custom/shopifysync&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &#039;&#039;&#039;Installer le nouveau code avant de désactiver l’ancienne version.&#039;&#039;&#039; Les versions antérieures à la 1.7.3 pouvaient effacer leurs réglages à la désactivation.&lt;br /&gt;
# Activer le module pour une première installation ; pour une mise à jour depuis une version antérieure à la 1.8.0, le désactiver puis le réactiver &#039;&#039;&#039;après le remplacement du code&#039;&#039;&#039;. Cette étape enregistre le hook de déplacement des photos et crée les tables manquantes des anciennes évolutions. Depuis la 1.7.3, identifiants, correspondances et flux désactivés sont conservés.&lt;br /&gt;
# Vérifier la configuration, tester la connexion et contrôler l’inscription des webhooks ainsi que les tâches planifiées.&lt;br /&gt;
# Tester les flux habituels sur un environnement de recette avant leur activation en production.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Compatibilité des réglages :&#039;&#039;&#039; le filtre de catégories, la condition de validation et la synchronisation de l’ordre des photos restent &#039;&#039;&#039;désactivés par défaut&#039;&#039;&#039;. Aucun export massif n’est lancé lors de leur enregistrement. La 1.8.0 n’ajoute pas de nouvelle table par rapport à une 1.7.3 complète. Des réglages déjà effacés par une ancienne version doivent être restaurés depuis une sauvegarde ou saisis à nouveau.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Créer l&#039;application Shopify&#039;&#039;&#039; et l&#039;installer sur la boutique. ⚠️ Depuis le &#039;&#039;&#039;1er janvier 2026&#039;&#039;&#039;, Shopify ne permet plus de créer une application personnalisée depuis l&#039;admin (celles qui affichent un jeton &amp;lt;code&amp;gt;shpat_…&amp;lt;/code&amp;gt; à copier) ; les installations existantes continuent de fonctionner sans rien changer, et une nouvelle installation passe par le &#039;&#039;&#039;Dev Dashboard&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Choisir le mode d&#039;authentification&#039;&#039;&#039; dans la carte « Connexion » :&lt;br /&gt;
#* &#039;&#039;Jeton permanent collé&#039;&#039; : mode par défaut et historique : coller le jeton &amp;lt;code&amp;gt;shpat_…&amp;lt;/code&amp;gt; d&#039;une application personnalisée créée avant 2026. Rien ne change pour les installations en service.&lt;br /&gt;
#* &#039;&#039;Client ID et secret&#039;&#039; : pour une application et une boutique appartenant à la &#039;&#039;&#039;même organisation Shopify&#039;&#039;&#039; : saisir le &#039;&#039;client ID&#039;&#039; et le &#039;&#039;client secret&#039;&#039; de l&#039;application du Dev Dashboard ; le module obtient un jeton valable 24 heures et le renouvelle seul.&lt;br /&gt;
#* &#039;&#039;Autorisation Shopify&#039;&#039; : installation par le flux d&#039;autorisation : déclarer comme &#039;&#039;redirect URL&#039;&#039; de l&#039;application l&#039;adresse affichée dans la configuration (&amp;lt;code&amp;gt;…/custom/shopifysync/oauth/callback.php&amp;lt;/code&amp;gt;), puis cliquer sur &#039;&#039;&#039;« Se reconnecter »&#039;&#039;&#039;. Le module reçoit un jeton d&#039;une heure et un jeton de rafraîchissement de 90 jours, tous deux renouvelés automatiquement.&lt;br /&gt;
# &#039;&#039;&#039;Connexion&#039;&#039;&#039; : domaine de la boutique, jeton (ou client ID et secret), app secret, version d&#039;API.&lt;br /&gt;
# &#039;&#039;&#039;Stock&#039;&#039;&#039; : emplacement Shopify et entrepôts, ou table « entrepôts = emplacement » (une règle par ligne, ex. &amp;lt;code&amp;gt;23 = gid://shopify/Location/85613641922&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Choisir les &#039;&#039;&#039;flux&#039;&#039;&#039; et les &#039;&#039;&#039;sources de vérité&#039;&#039;&#039;, puis cliquer sur &#039;&#039;&#039;« Inscrire les webhooks »&#039;&#039;&#039;.&lt;br /&gt;
# Catalogue déjà en place des deux côtés : &#039;&#039;&#039;« Rattacher les variantes par SKU »&#039;&#039;&#039;.&lt;br /&gt;
# Historique à reprendre : tableau de bord → &#039;&#039;&#039;« Rattraper les commandes des N derniers jours »&#039;&#039;&#039;.&lt;br /&gt;
# Activer les &#039;&#039;&#039;tâches planifiées&#039;&#039;&#039; Dolibarr : traitement de la file et réconciliation.&lt;br /&gt;
&lt;br /&gt;
Depuis la 1.7.1, les champs de connexion s’affichent ou se masquent selon le mode choisi, sans effacer les identifiants déjà enregistrés. Enregistrer le nouveau mode avant d’utiliser la reconnexion. Le secret de signature des webhooks reste commun aux modes.&lt;br /&gt;
&lt;br /&gt;
Références Shopify : [https://shopify.dev/docs/apps/build/authentication-authorization/client-credentials-grant authentification dans la même organisation], [https://shopify.dev/docs/apps/build/authentication-authorization/access-tokens durées des jetons].&lt;br /&gt;
&lt;br /&gt;
=== Jetons d&#039;accès et échéances Shopify ===&lt;br /&gt;
&lt;br /&gt;
Un jeton expirable est renouvelé &#039;&#039;&#039;avant&#039;&#039;&#039; son échéance (marge de deux minutes) et &#039;&#039;&#039;immédiatement&#039;&#039;&#039; si Shopify le refuse en cours de route : la requête est alors rejouée avec le jeton neuf. La réconciliation nocturne force en plus un renouvellement, car un jeton de rafraîchissement inutilisé pendant 90 jours expire : une boutique calme perdrait sa connexion sans prévenir. L&#039;écran de diagnostic affiche le mode, l&#039;échéance du jeton et alerte quand le rafraîchissement approche de sa fin.&lt;br /&gt;
&lt;br /&gt;
Deux échéances Shopify à ne pas confondre :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1er janvier 2026&#039;&#039;&#039; : plus aucune création d&#039;application personnalisée depuis l&#039;admin Shopify. Concerne les &#039;&#039;&#039;nouvelles&#039;&#039;&#039; installations, qui passent par le Dev Dashboard.&lt;br /&gt;
* &#039;&#039;&#039;1er janvier 2027&#039;&#039;&#039; : jetons expirables obligatoires pour les &#039;&#039;&#039;applications publiques&#039;&#039;&#039; de l&#039;App Store. Les applications personnalisées et celles créées par le marchand ne sont pas visées : une installation existante n&#039;a rien à faire.&lt;br /&gt;
&lt;br /&gt;
L&#039;URL de retour d&#039;autorisation est protégée par trois contrôles avant tout enregistrement : signature HMAC de Shopify, jeton d&#039;état à usage unique valable 15 minutes, et domaine de boutique identique à celui configuré.&lt;br /&gt;
&lt;br /&gt;
=== Assistant de configuration initiale (depuis la 1.7.0) ===&lt;br /&gt;
&lt;br /&gt;
L’onglet &#039;&#039;&#039;Assistant d’installation&#039;&#039;&#039; facilite la configuration du lien Shopify après l’installation du module. Il est facultatif et ne remplace pas le déploiement du ZIP.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Connexion&#039;&#039;&#039; : tester un jeton permanent ou des identifiants Client ID/secret ; une connexion OAuth déjà configurée peut être réutilisée. Une nouvelle autorisation OAuth se prépare dans la Configuration.&lt;br /&gt;
# &#039;&#039;&#039;Catalogue&#039;&#039;&#039; : choisir l’import Shopify, l’export de produits simples Dolibarr ou le rattachement de deux catalogues existants par SKU.&lt;br /&gt;
# &#039;&#039;&#039;Correspondances SKU&#039;&#039;&#039; : analyser les références absentes, doublons et ambiguïtés avant de créer des liens.&lt;br /&gt;
# &#039;&#039;&#039;Entrepôts&#039;&#039;&#039; : associer un entrepôt à un emplacement Shopify, ou conserver les correspondances avancées existantes.&lt;br /&gt;
# &#039;&#039;&#039;Facturation&#039;&#039;&#039; : vérifier les modules, options, moyen de paiement et compte bancaire, sans créer de facture ni de règlement.&lt;br /&gt;
# &#039;&#039;&#039;Aperçu et démarrage&#039;&#039;&#039; : examiner les changements de réglages et sélectionner explicitement les opérations du premier lot (20 au maximum).&lt;br /&gt;
&lt;br /&gt;
Les choix restent dans un brouillon privé pendant une heure. Aucun réglage actif n’est enregistré avant la confirmation. L’aperçu expire après 10 minutes et doit être recalculé si le catalogue ou les réglages changent. La confirmation crée les liens et les jobs ; la file habituelle effectue ensuite les échanges.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Catalogue déjà existant :&#039;&#039;&#039; le rattachement par SKU conserve la gestion des fiches dans les catalogues existants et désactive leur synchronisation. Les liens servent notamment aux commandes et aux stocks. Les photos et champs de ces produits restent gérés dans Shopify.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Limites :&#039;&#039;&#039; l’assistant analyse au plus 2 000 variantes Shopify et 2 000 fiches Dolibarr ; au-delà, utiliser les outils avancés. Les combinaisons Dolibarr complexes sont également orientées vers ces outils. Les traitements déjà en attente ou en cours doivent être terminés avant confirmation. Vérifier séparément les webhooks et tâches planifiées ; l’assistant ne suspend pas les automatismes existants.&lt;br /&gt;
&lt;br /&gt;
=== Sélection des catégories à exporter (1.8.0) ===&lt;br /&gt;
&lt;br /&gt;
Dans &#039;&#039;&#039;Configuration → Catalogue → Périmètre du catalogue&#039;&#039;&#039;, ouvrir &#039;&#039;&#039;Configurer et prévisualiser&#039;&#039;&#039;. Le filtre est &#039;&#039;&#039;désactivé par défaut&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Cocher &#039;&#039;&#039;Activer le filtre par catégories pour les exports vers Shopify&#039;&#039;&#039;.&lt;br /&gt;
# Choisir au moins une branche avec &#039;&#039;&#039;Autoriser la branche&#039;&#039;&#039;. Plusieurs branches peuvent être sélectionnées.&lt;br /&gt;
# Choisir, si nécessaire, des branches avec &#039;&#039;&#039;Exclure la branche&#039;&#039;&#039;.&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;Prévisualiser sans synchroniser&#039;&#039;&#039; pour examiner les compteurs et motifs avant d’enregistrer.&lt;br /&gt;
# Enregistrer lorsque le périmètre correspond au catalogue souhaité.&lt;br /&gt;
&lt;br /&gt;
Chaque sélection inclut la catégorie choisie et ses descendants actuels et futurs. Une exclusion est toujours prioritaire, même si le produit appartient aussi à une branche autorisée. Un produit sans branche autorisée voit son export suspendu.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exemple :&#039;&#039;&#039; autoriser « Maison » et « Jardin », puis exclure « Usage interne ». Les sous-catégories de Maison et Jardin sont incluses. Un produit classé à la fois dans Maison et Usage interne reste exclu. Il n’est pas nécessaire de sélectionner les catégories internes situées hors des branches autorisées pour les écarter.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variantes :&#039;&#039;&#039; les catégories du parent déterminent l’inclusion ; une catégorie exclue sur le parent ou sur un enfant suspend l’export du groupe entier.&lt;br /&gt;
&lt;br /&gt;
L’aperçu utilise les valeurs du formulaire sans enregistrer ni contacter Shopify. Il compte toutes les fiches de l’entité et présente 20 exemples par page, les causes de suspension et les fiches déjà reliées concernées. Les variantes sont comptées comme fiches : le total « Filtres satisfaits » ne garantit pas autant de créations Shopify, car les règles de SKU, variantes, sources et flux restent applicables. Cet aperçu complet est distinct de l’assistant limité à 2 000 fiches.&lt;br /&gt;
&lt;br /&gt;
=== Condition de validation des produits (1.8.0) ===&lt;br /&gt;
&lt;br /&gt;
# Créer, si nécessaire, un attribut supplémentaire de produit de type &#039;&#039;&#039;booléen&#039;&#039;&#039;, par exemple « Prêt pour la boutique », dans la configuration des produits Dolibarr.&lt;br /&gt;
# Dans &#039;&#039;&#039;Configuration → Catalogue → Exporter uniquement les produits validés&#039;&#039;&#039;, sélectionner ce champ et enregistrer. Par défaut, &#039;&#039;&#039;Aucun filtre de validation&#039;&#039;&#039; est sélectionné.&lt;br /&gt;
# Cocher le champ sur les produits à exporter. Une case vide ou décochée suspend l’export du catalogue. Pour un produit à variantes, le parent et tous ses enfants doivent être validés.&lt;br /&gt;
# Si un filtre de catégories est également actif, les deux conditions doivent être satisfaites.&lt;br /&gt;
&lt;br /&gt;
La règle est vérifiée avant la mise en file, dans les exports manuels et de nouveau lors du traitement des jobs déjà présents. Un produit devenu non éligible pendant l’attente n’est pas exporté. Un champ supprimé, devenu non booléen ou illisible bloque l’export avec une erreur ; le filtre n’est pas ignoré silencieusement.&lt;br /&gt;
&lt;br /&gt;
=== Effet des filtres sur les produits existants ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Enregistrer les filtres ne lance aucun export massif et ne supprime ni ne dépublie les produits Shopify.&#039;&#039;&#039; Sortir un produit du périmètre ou décocher sa validation suspend ses prochaines mises à jour du catalogue ; le retirer de la vente est une action distincte.&lt;br /&gt;
&lt;br /&gt;
* Commandes, stocks et expéditions conservent leurs propres réglages. Le filtre concerne les exports du catalogue vers Shopify.&lt;br /&gt;
* Pour reprendre un produit précédemment écarté, corriger sa catégorie ou sa validation, puis modifier sa fiche ou utiliser &#039;&#039;&#039;Synchroniser&#039;&#039;&#039;. Changer seulement les branches de configuration ou déplacer une branche entière ne lance pas un export massif.&lt;br /&gt;
* Avec le filtre actif, les collections, tags et le menu configuré utilisent les branches sélectionnées à la place de la racine historique. Les collections existantes ne sont pas automatiquement supprimées et les produits suspendus conservent leurs associations déjà publiées.&lt;br /&gt;
* Le menu configuré est reconstruit lors d’un prochain traitement catalogue qui le déclenche. La prévisualisation et l’enregistrement ne le modifient pas immédiatement.&lt;br /&gt;
* Une catégorie sélectionnée supprimée ou inaccessible, ou une boucle dans la hiérarchie, bloque l’export jusqu’à correction. Désactiver le filtre rétablit les règles historiques, dont la racine de catégories conservée.&lt;br /&gt;
* Les produits rattachés par SKU conservent leur catalogue géré dans Shopify.&lt;br /&gt;
&lt;br /&gt;
=== Publication des produits et statut des variantes (1.8.1) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disponible à partir de la version 1.8.1.&#039;&#039;&#039; Installer le ZIP 1.8.1 avant d’utiliser les fonctions ci-dessous.&lt;br /&gt;
&lt;br /&gt;
La 1.8.1 corrige la publication des nouveaux produits à variantes sur la &#039;&#039;&#039;Boutique en ligne&#039;&#039;&#039; lorsque l’option « Publier sur la Boutique en ligne » est activée. Un produit déjà créé mais non publié peut être réparé avec le bouton &#039;&#039;&#039;Synchroniser&#039;&#039;&#039;, sans création d’un second produit Shopify. Les mises à jour ordinaires ne republient pas un produit volontairement retiré après une publication réussie.&lt;br /&gt;
&lt;br /&gt;
L’option &#039;&#039;&#039;Suivre le statut en vente des variantes&#039;&#039;&#039; est &#039;&#039;&#039;désactivée par défaut&#039;&#039;&#039;. Elle permet de retirer de la Boutique en ligne un enfant Dolibarr hors vente, puis de le republier lorsqu’il est remis en vente. Les identifiants, quantités et autres variantes sont conservés.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prérequis et activation :&#039;&#039;&#039;&lt;br /&gt;
# Installer le ZIP 1.8.1 et effectuer la recette sur une boutique de test.&lt;br /&gt;
# Utiliser un catalogue piloté par Dolibarr avec le module Variants. Les produits rattachés à un catalogue existant par SKU restent gérés dans Shopify.&lt;br /&gt;
# Sélectionner l’API Shopify &#039;&#039;&#039;2026-07 ou suivante&#039;&#039;&#039; et disposer des droits &amp;lt;code&amp;gt;read_publications&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;write_publications&amp;lt;/code&amp;gt;. Renouveler l’autorisation Shopify si ces droits manquent.&lt;br /&gt;
# Activer « Suivre le statut en vente des variantes ». Le parent doit être actif et publié sur la Boutique en ligne ; activer également « Publier sur la Boutique en ligne » pour les nouvelles créations si nécessaire.&lt;br /&gt;
# Garder le champ de validation (« Ready for webshop », par exemple) coché sur le parent &#039;&#039;&#039;et tous ses enfants&#039;&#039;&#039;. Pour retirer un seul enfant, changer son statut &#039;&#039;&#039;en vente / hors vente&#039;&#039;&#039;, sans décocher cette validation.&lt;br /&gt;
# Traiter la file puis vérifier la visibilité et l’achat de chaque variante dans Shopify. Remettre l’enfant en vente, relancer la synchronisation et vérifier sa republication.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Règles à connaître :&#039;&#039;&#039;&lt;br /&gt;
* Les filtres de catégories et de validation restent prioritaires et s’appliquent au groupe entier, y compris au traitement de la file.&lt;br /&gt;
* Pour une variante déjà présente, seule sa publication sur la Boutique en ligne est modifiée. Ses autres canaux restent inchangés.&lt;br /&gt;
* Une &#039;&#039;&#039;nouvelle&#039;&#039;&#039; variante déjà hors vente est créée non publiée sur &#039;&#039;&#039;tous les canaux&#039;&#039;&#039; pour éviter une exposition temporaire. Sa remise en vente par cette option publie uniquement sur la Boutique en ligne.&lt;br /&gt;
* Enregistrer l’option ne déclenche pas d’export massif. La désactiver ne republie pas automatiquement les variantes précédemment retirées.&lt;br /&gt;
* Les correspondances de tout le groupe sont vérifiées avant la première dépublication. Une variante Shopify inconnue, un SKU ambigu ou une lecture incomplète bloque l’export avec un motif visible.&lt;br /&gt;
* Un refus de publication est journalisé et peut être relancé, y compris après une création interrompue. Le diagnostic d’accès au canal ne remplace pas un essai réel de publication et ne prouve pas à lui seul le droit d’écriture.&lt;br /&gt;
* Tous les enfants peuvent être hors vente sans perdre leurs valeurs d’attributs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mise à jour :&#039;&#039;&#039; la 1.8.1 n’ajoute aucune table. Depuis une installation 1.8.0 complète, remplacer le code suffit ; conserver la procédure de réactivation après remplacement du code pour une ancienne installation qui doit encore enregistrer les hooks de la 1.8.0. Sauvegarder et tester avant toute mise en production.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Validation :&#039;&#039;&#039; 2 013 contrôles locaux réussis sur Dolibarr 18, 20 et 24, avec mutations de publication simulées. La recette sur une boutique Shopify réelle reste à confirmer avant utilisation en production.&lt;br /&gt;
&lt;br /&gt;
=== Photos : ajout, suppression et ordre ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Envoi des images :&#039;&#039;&#039; activer le flux produits, choisir Dolibarr comme source du catalogue et activer l’envoi des images. Depuis la 1.7.3, ajouter une photo seule dans &#039;&#039;&#039;Fichiers joints&#039;&#039;&#039; suffit à mettre le produit en file, sans modifier un autre champ et sans activer de lien public. Les fichiers sont téléversés directement. Les remplacements de contenu sont détectés et les retraits concernent les médias gérés par le module. Un dépôt direct sur le disque, hors des événements Dolibarr, nécessite un nouvel export du produit.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ordre des photos (1.8.0) :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Après installation du nouveau code, réactiver le module pour enregistrer le hook de déplacement des fichiers.&lt;br /&gt;
# Activer explicitement &#039;&#039;&#039;Configuration → Catalogue → Synchroniser l’ordre des photos&#039;&#039;&#039;. Cette option est désactivée par défaut et nécessite l’envoi des images actif.&lt;br /&gt;
# Réordonner les photos par glisser-déposer dans les fichiers joints du produit, puis laisser la file se traiter.&lt;br /&gt;
# Vérifier la galerie et l’image principale dans Shopify.&lt;br /&gt;
&lt;br /&gt;
Les médias synchronisés sont placés en tête de galerie selon les positions Dolibarr ; la première photo devient l’image principale. Les fichiers non indexés suivent, triés par nom. Les médias ajoutés directement dans Shopify sont conservés après ceux du module, dans leur ordre relatif. Un simple déplacement &#039;&#039;&#039;ne renvoie pas les fichiers inchangés&#039;&#039;&#039;. Le réordonnancement Shopify étant asynchrone, sa fin est vérifiée lors d’un passage suivant de la file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Si une photo ne se synchronise pas :&#039;&#039;&#039; vérifier la source du catalogue, le flux produits, l’option images, les filtres éventuels et le traitement de la file. Le journal indique les images trouvées, envoyées et retirées. Un stockage de documents indisponible produit une erreur au lieu de retirer les médias. Les photos des produits rattachés par SKU restent gérées dans Shopify.&lt;br /&gt;
&lt;br /&gt;
=== Diagnostic et support (depuis la 1.6.0) ===&lt;br /&gt;
&lt;br /&gt;
Le tableau de bord affiche l’état de la connexion, du planificateur et du dernier rattrapage. Par flux et sens, il présente la dernière opération terminée, les traitements en attente ou en cours, les échecs, conflits et l’ancienneté de la file. Une dernière opération terminée peut être un doublon ou un événement ignoré : consulter son détail pour savoir si une écriture a eu lieu.&lt;br /&gt;
&lt;br /&gt;
* Ouvrir un blocage pour lire sa cause et l’action conseillée : identifiants, autorisations, facture attendue, écart de montant ou traitement interrompu.&lt;br /&gt;
* Corriger la cause puis relancer les échecs ou conflits sélectionnés, jusqu’à 50 à la fois. Les traitements en cours ne sont pas remis en attente.&lt;br /&gt;
* Utiliser &#039;&#039;&#039;Vérifier la connexion&#039;&#039;&#039; pour actualiser le contrôle ; la page ne contacte pas Shopify à chaque affichage. Les contrôles anciens deviennent non vérifiés et une tâche en retard empêche un état global sain.&lt;br /&gt;
* Télécharger l’export de diagnostic pour le support. Il contient les versions, statuts, compteurs et codes structurés, sans jetons, secrets, domaine de boutique, données clients, références, journaux bruts ni contenu des commandes. Il est téléchargé localement et n’est jamais envoyé automatiquement.&lt;br /&gt;
&lt;br /&gt;
L’historique détaillé débute à l’installation de cette fonctionnalité. L’export couvre une période de 1 à 30 jours, avec au plus 500 événements et une indication si les résultats sont tronqués. Les jobs et événements anciens peuvent avoir été purgés selon leur conservation.&lt;br /&gt;
&lt;br /&gt;
=== Options (désactivées par défaut) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Option !! Effet&lt;br /&gt;
|-&lt;br /&gt;
| Valider la commande || La commande importée reçoit sa référence définitive (et sort le stock si Dolibarr décrémente à la validation).&lt;br /&gt;
|-&lt;br /&gt;
| Valider l&#039;avoir || L&#039;avoir créé par un remboursement est validé aussitôt.&lt;br /&gt;
|-&lt;br /&gt;
| Réaligner prix, SKU et code-barres || Chaque modification Dolibarr réécrit ces champs sur un produit Shopify déjà publié.&lt;br /&gt;
|-&lt;br /&gt;
| Suivre « en vente » || Un produit retiré de la vente dans Dolibarr passe en brouillon sur Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Suivre le statut en vente des variantes (1.8.1) || Retirer ou republier un enfant sur la Boutique en ligne sans supprimer sa variante, changer ses quantités ni retirer ses frères et sœurs ; API 2026-07 minimum et droits de publication requis.&lt;br /&gt;
|-&lt;br /&gt;
| Prix envoyé selon la boutique || Prix TTC envoyés si la boutique affiche ses prix taxes incluses.&lt;br /&gt;
|-&lt;br /&gt;
| Catégories Dolibarr || Collections Shopify, tags, ou les deux, avec menu de navigation optionnel.&lt;br /&gt;
|-&lt;br /&gt;
| Images du produit || Fichiers joints envoyés dans les médias Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Synchroniser l’ordre des photos (1.8.0) || Positions Dolibarr reprises sur les médias existants sans renvoyer les fichiers inchangés.&lt;br /&gt;
|-&lt;br /&gt;
| Filtre de catégories (1.8.0) || Plusieurs branches autorisées et exclusions prioritaires ; aperçu avant enregistrement.&lt;br /&gt;
|-&lt;br /&gt;
| Exporter uniquement les produits validés (1.8.0) || Condition par champ booléen, vérifiée avant mise en file et au traitement.&lt;br /&gt;
|-&lt;br /&gt;
| Poids d&#039;expédition || Poids Dolibarr publié sur la variante Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Produit supprimé dans Dolibarr || Brouillon ou archivage sur Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Étiquettes imprimées dans Shopify || Chaque expédition Shopify crée et valide l&#039;expédition Dolibarr, stock sorti par Dolibarr.&lt;br /&gt;
|-&lt;br /&gt;
| Ignorer les commandes de test || Les commandes passées avec la passerelle de test Shopify ne sont pas importées.&lt;br /&gt;
|-&lt;br /&gt;
| Publier sur la Boutique en ligne || Un produit créé par le module est rendu visible sur la boutique.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Autres réglages : service Dolibarr des frais de port, taux de TVA par défaut, quantité Shopify échangée, notification d&#039;expédition au client (active par défaut), règlement et compte bancaire des commandes payées.&lt;br /&gt;
&lt;br /&gt;
=== Tâches planifiées sous Dolibarr 24 ===&lt;br /&gt;
&lt;br /&gt;
Les deux tâches du module sont de type &amp;lt;code&amp;gt;command&amp;lt;/code&amp;gt; (exécution en ligne de commande). Depuis Dolibarr 24, une tâche CLI est comptée &#039;&#039;&#039;en erreur&#039;&#039;&#039; si la variable &amp;lt;code&amp;gt;$dolibarr_cron_allow_cli&amp;lt;/code&amp;gt; n&#039;est pas activée : en version 20 le cas était seulement journalisé. Ajoutez donc dans &amp;lt;code&amp;gt;conf/conf.php&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 $dolibarr_cron_allow_cli = 1;&lt;br /&gt;
&lt;br /&gt;
Sans cela, les tâches « ShopifySync » s&#039;affichent en rouge dans &#039;&#039;Outils → Tâches planifiées&#039;&#039; alors même que le module fonctionne. Sans tâche planifiée active, le bouton « Traiter la file maintenant » du tableau de bord exécute la file à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Fonctionnement sans endpoint webhook ===&lt;br /&gt;
&lt;br /&gt;
Le module reste utilisable derrière un hébergement fermé aux connexions entrantes : la réconciliation planifiée, qui n&#039;effectue que des appels sortants, rattrape les commandes, les paiements, les annulations et les remboursements. La fenêtre d&#039;analyse (2 jours par défaut) se règle par la constante &amp;lt;code&amp;gt;SHOPIFYSYNC_RECONCILE_WINDOW_DAYS&amp;lt;/code&amp;gt;. L&#039;import étant idempotent, le recouvrement entre deux passages ne crée pas de doublon. Les jobs terminés sont purgés après 30 jours et le journal après 90 jours.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.8.1 || Publication des nouveaux produits à variantes ; réparation manuelle des produits déjà créés ; suivi facultatif du statut en vente de chaque enfant, désactivé par défaut ; conservation des identifiants et quantités ; vérification du groupe avant dépublication ; erreurs rejouables ; contrôle de l’API et des autorisations ; aucune nouvelle table.&lt;br /&gt;
|-&lt;br /&gt;
| 1.8.0 || Sélection de plusieurs branches de catégories, exclusions prioritaires, aperçu complet paginé et validation facultative par champ booléen ; contrôles avant mise en file et au traitement ; collections, tags et menu alignés sur le périmètre ; ordre des photos Dolibarr repris sur les médias existants sans renvoi des fichiers inchangés et suivi asynchrone ; nouvelles options désactivées par défaut, sans export massif ni dépublication automatique.&lt;br /&gt;
|-&lt;br /&gt;
| 1.7.3 || Envoi des images depuis les dossiers réels et historiques, déclenchement par ajout ou retrait d’une photo seule, détection des remplacements par leur contenu, protection si le stockage est indisponible ; conservation des réglages et des flux désactivés lors d’une désactivation/réactivation après installation du correctif.&lt;br /&gt;
|-&lt;br /&gt;
| 1.7.2 || Chargement de Dolibarr dans l’assistant conforme au validateur de paquet pour les installations en racine et dans custom, sans changement de synchronisation.&lt;br /&gt;
|-&lt;br /&gt;
| 1.7.1 || Champs de connexion affichés selon le mode d’authentification dans la Configuration et l’assistant ; identifiants masqués conservés ; reconnexion après enregistrement du mode.&lt;br /&gt;
|-&lt;br /&gt;
| 1.7.0 || Assistant facultatif de configuration du lien Shopify en six étapes : connexion, catalogue, SKU, entrepôts, facturation et aperçu ; brouillon privé, confirmation explicite d’un premier lot de 20 opérations maximum, contrôle des ambiguïtés et des modifications concurrentes ; analyse limitée à 2 000 fiches de chaque côté.&lt;br /&gt;
|-&lt;br /&gt;
| 1.6.0 || Diagnostic de connexion et des tâches planifiées, suivi par flux et sens, causes compréhensibles, historique filtrable, relances ciblées et export de diagnostic sans secrets ; remboursements sans facture source visibles dans les reprises puis en échec si le blocage persiste.&lt;br /&gt;
|-&lt;br /&gt;
| 1.5.0 || Jetons d&#039;accès qui expirent pris en charge : mode « client ID et secret » (jeton de 24 h renouvelé par le module) et mode « autorisation Shopify » (jeton d&#039;une heure + rafraîchissement de 90 jours), renouvellement avant échéance et à la volée sur un refus, renouvellement préventif chaque nuit, bouton « Se reconnecter », URL de retour protégée par signature, état à usage unique et contrôle du domaine ; le mode « jeton permanent collé » reste le défaut et ne change pas&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.3 || Correctifs : contrôle strict des montants appliqué aussi au rejeu, règlement retenté quand son enregistrement avait échoué, remboursement en échec distingué d&#039;une attente de facture (job en échec au lieu d&#039;un classement silencieux), frais de port remboursés portés à leur propre taux de TVA, renommage vers un tag déjà saisi à la main qui n&#039;est plus adopté par le module&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.2 || Correctifs du contre-audit : frais de port refusés rendus à la commande et reposés au rejeu, quantité modifiée sur Shopify détectée, validation de commande et de facture rejouées à la reprise, option de contrôle strict des montants, remboursements limités aux transactions réellement abouties et répartis par taux de TVA, ligne d&#039;avoir refusée non enregistrée comme traitée, tags jamais adoptés et renommage limité aux produits suivis, renommage échoué réellement retenté au rejeu&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.1 || Correctifs : unité forcée des metafields réellement convertie (2 kg publiés en 2000 g) ; un tag Shopify saisi à la main n&#039;est plus retiré ; suppression de collection refusée signalée au lieu d&#039;être déclarée réussie ; erreurs de renommage de tag remontées ; remboursement de montant nul ne crée plus d&#039;avoir intégral ; commande dont une ligne a été refusée ni validée ni facturée, puis complétée au rejeu ; modification faite pendant un export conservée ; webhook non acquitté quand le job n&#039;a pas pu être enregistré&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.0 || Catégories Dolibarr en collections Shopify, tags et menu de navigation ; images des fiches envoyées dans les médias ; champs standards (poids, dimensions, volume) publiables en metafields avec conversion d&#039;unité ; poids d&#039;expédition ; metafields fiables (case décochée, valeur vidée, valeur refusée signalée sans bloquer les autres) ; produit supprimé dans Dolibarr passé en brouillon ou archivé&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.1 || Code client obligatoire géré (clients créés avec le code de la numérotation Dolibarr) ; ventes sans client (caisse Shopify POS) portées par un tiers unique configurable ; motif des refus journalisé ; étiquettes d&#039;un emplacement non géré ignorées&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.0 || Étiquettes imprimées dans Shopify (option) : expédition Dolibarr créée et validée sur l&#039;entrepôt de l&#039;emplacement expéditeur, stock sorti par Dolibarr qui reste seul maître, suivi et transporteur repris, annulation gérée, rattrapage par la réconciliation&lt;br /&gt;
|-&lt;br /&gt;
| 1.2.0 || Prix TTC, frais de port, date de vente, contact de livraison et clients invités à l&#039;import ; annulations Shopify ; expéditions partielles avec transporteur ; prix, SKU et code-barres posés à la création des produits ; import d&#039;un produit par variante ; suppressions Shopify gérées ; réconciliation des paiements, annulations et remboursements ; actions du tableau de bord ; options de validation et de réalignement (désactivées par défaut, aucun changement de comportement à la mise à jour) ; validé sur Dolibarr 18, 20 et 24&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.2 || Bouton « Synchroniser » des fiches commande ; facture créée quand le paiement arrive après l&#039;import&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.1 || Export de stock compatible avec les API Shopify 2026-04 et suivantes ; sonde de compatibilité multi-versions&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.0 || Tableau de bord et écrans redessinés, encart « État Shopify » sur les fiches ; rattachement par SKU d&#039;un catalogue existant ; stock multi-emplacements&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.2 || Produits à variantes (options Shopify, 1 SKU par combinaison, pagination jusqu&#039;à 2 048 variantes, refus au-delà de 3 attributs) ; stock multi-entrepôts ; metafields ; règlement automatique des commandes payées ; adresse de facturation complète ; bouton « Tester la connexion » ; remises Shopify à l&#039;import ; réconciliation par horodatage absolu et rattrapage des remboursements&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || Gestion des erreurs GraphQL renvoyées en chaîne ; version d&#039;API portée à 2026-01 ; &amp;lt;code&amp;gt;inventoryActivate&amp;lt;/code&amp;gt; avant écriture de stock ; correction critique de la création des lignes de commande&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : commandes, clients, remboursements, produits, stock, expéditions, webhooks signés, file d&#039;attente, tableau de bord&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Shopify_Sync&amp;diff=67417</id>
		<title>Module Shopify Sync</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Shopify_Sync&amp;diff=67417"/>
		<updated>2026-09-24T11:55:19Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Mise à jour 1.8.0 : catégories et validation produit, ordre des photos, assistant, diagnostic, migration et historique 1.6.0 à 1.8.0.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module Shopify Sync ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shopify Sync&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui assure une &#039;&#039;&#039;synchronisation bidirectionnelle quasi temps réel entre Shopify et Dolibarr&#039;&#039;&#039; : commandes, clients, remboursements, produits et variantes, stock et expéditions. Le module dialogue directement avec l&#039;API &#039;&#039;&#039;GraphQL Admin&#039;&#039;&#039; de Shopify : sans SaaS intermédiaire, sans abonnement supplémentaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Version || 1.8.0&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x (validé sur 18.0.5, 20.0.4 et 24.0.0)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum (extension cURL), validé jusqu&#039;à 8.2&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (cURL pur : pas de Composer, pas de SDK)&lt;br /&gt;
|-&lt;br /&gt;
! Version d&#039;API Shopify || 2026-01 par défaut, configurable ; appels vérifiés sur 2025-07, 2025-10, 2026-01, 2026-04, 2026-07 et unstable&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3218 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
La fréquence effective dépend des tâches planifiées, de l’hébergement et des limites de l’API Shopify. Une boutique Shopify est configurée par entité Dolibarr.&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Commandes&#039;&#039;&#039; Shopify → Dolibarr : client (ou client invité), commande à la date de la vente, lignes reliées aux fiches produits, remises, &#039;&#039;&#039;frais de port&#039;&#039;&#039;, contact de livraison si l&#039;adresse diffère ; &#039;&#039;&#039;facture&#039;&#039;&#039; dès que la commande est payée, même après son import.&lt;br /&gt;
* &#039;&#039;&#039;Prix TTC ou HT&#039;&#039;&#039; : le module lit le réglage « taxes incluses » de la boutique, les montants importés correspondent à ce que le client a payé.&lt;br /&gt;
* &#039;&#039;&#039;Annulations&#039;&#039;&#039; Shopify répercutées sur la commande Dolibarr.&lt;br /&gt;
* &#039;&#039;&#039;Remboursements&#039;&#039;&#039; → avoirs Dolibarr : partiel (montant réellement rendu) ou total (avoir miroir ligne à ligne).&lt;br /&gt;
* &#039;&#039;&#039;Expéditions&#039;&#039;&#039; Dolibarr → Shopify : articles et quantités expédiés, numéro de suivi et transporteur ; expéditions partielles gérées. En option, l&#039;inverse : une étiquette imprimée dans Shopify crée et valide l&#039;expédition Dolibarr.&lt;br /&gt;
* &#039;&#039;&#039;Produits&#039;&#039;&#039; dans les deux sens, avec une &#039;&#039;&#039;source de vérité configurable&#039;&#039;&#039; (produits, prix, stock).&lt;br /&gt;
* &#039;&#039;&#039;Catalogue existant&#039;&#039;&#039; : rattachement par SKU des variantes Shopify aux fiches Dolibarr existantes, sans produit parent ni module Variants.&lt;br /&gt;
* &#039;&#039;&#039;Produits à variantes&#039;&#039;&#039; (module Variants) : les attributs Dolibarr deviennent des options Shopify, une variante par combinaison. Limites de la boutique lues à l&#039;exécution (2 048 variantes, 3 options).&lt;br /&gt;
* &#039;&#039;&#039;Stock multi-emplacements&#039;&#039;&#039; : table « entrepôts Dolibarr = emplacement Shopify », ou un emplacement unique alimenté par les entrepôts choisis.&lt;br /&gt;
* &#039;&#039;&#039;Metafields&#039;&#039;&#039; : attributs supplémentaires et champs standards (poids, dimensions, volume) publiés vers Shopify, avec conversion de type et d&#039;unité.&lt;br /&gt;
* &#039;&#039;&#039;Catégories, images, poids&#039;&#039;&#039; : collections et tags Shopify, menu de navigation, images des fiches, poids d&#039;expédition (options).&lt;br /&gt;
* &#039;&#039;&#039;Webhooks signés HMAC&#039;&#039;&#039; pour le quasi temps réel, doublés d&#039;une &#039;&#039;&#039;réconciliation planifiée&#039;&#039;&#039; qui rattrape commandes, paiements, annulations et remboursements manqués.&lt;br /&gt;
* &#039;&#039;&#039;File d&#039;attente asynchrone&#039;&#039;&#039; : limites de débit de l&#039;API absorbées, nouvelles tentatives sûres, aucun job traité deux fois.&lt;br /&gt;
* &#039;&#039;&#039;Anti-boucle&#039;&#039;&#039; par empreinte d&#039;état, et &#039;&#039;&#039;résolution de conflits&#039;&#039;&#039; configurable.&lt;br /&gt;
* &#039;&#039;&#039;Tableau de bord&#039;&#039;&#039; : file d&#039;attente, échecs, journal ; traiter la file maintenant, relancer les échecs, rattraper les commandes des N derniers jours.&lt;br /&gt;
* &#039;&#039;&#039;Encart « État Shopify »&#039;&#039;&#039; sur les fiches produit et commande, avec bouton « Synchroniser ».&lt;br /&gt;
* Bouton &#039;&#039;&#039;« Tester la connexion »&#039;&#039;&#039; : contrôles de configuration, droits, emplacements, webhooks et tâches planifiées, chacun avec le correctif suggéré.&lt;br /&gt;
* &#039;&#039;&#039;Diagnostic opérationnel&#039;&#039;&#039; : état de connexion et du planificateur, suivi par flux, causes et conseils, historique, relances ciblées et export de diagnostic sans secrets (depuis la 1.6.0).&lt;br /&gt;
* &#039;&#039;&#039;Assistant de configuration initiale&#039;&#039;&#039; : six étapes pour relier Shopify, choisir le catalogue, vérifier les SKU, associer les entrepôts et préparer un premier lot avec aperçu (depuis la 1.7.0).&lt;br /&gt;
* &#039;&#039;&#039;Sélection du catalogue&#039;&#039;&#039; : plusieurs branches autorisées, exclusions prioritaires et aperçu complet sans synchroniser (1.8.0, facultatif).&lt;br /&gt;
* &#039;&#039;&#039;Validation des produits&#039;&#039;&#039; : condition par champ booléen, contrôlée avant mise en file et au traitement (1.8.0, facultatif).&lt;br /&gt;
* &#039;&#039;&#039;Ordre des photos&#039;&#039;&#039; : reprise des positions Dolibarr et réordonnancement des médias existants, sans renvoyer les images inchangées (1.8.0, facultatif).&lt;br /&gt;
* Interface du module en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Ce qui est synchronisé, flux par flux ==&lt;br /&gt;
&lt;br /&gt;
Chaque flux s&#039;active ou se coupe indépendamment dans la configuration (carte « Flux synchronisés »).&lt;br /&gt;
&lt;br /&gt;
=== Commandes (Shopify → Dolibarr) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Événement Shopify !! Effet dans Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
| Commande créée || Tiers retrouvé par e-mail (sinon créé, avec l&#039;adresse de facturation et le pays) ; commande datée du jour de la vente, référence client = numéro Shopify ; une ligne par article, reliée à la fiche par la variante ou le SKU ; remises ; ligne « Frais de port » ; contact de livraison si l&#039;adresse diffère. La commande reste en &#039;&#039;&#039;brouillon&#039;&#039;&#039; (validation automatique en option).&lt;br /&gt;
|-&lt;br /&gt;
| Commande payée (tout de suite ou plus tard) || Facture créée depuis la commande et validée ; règlement enregistré en option (mode de paiement et compte bancaire au choix).&lt;br /&gt;
|-&lt;br /&gt;
| Commande annulée || Commande Dolibarr annulée, sauf si une expédition est déjà en cours.&lt;br /&gt;
|-&lt;br /&gt;
| Commande de test (passerelle de test Shopify) || Importée et signalée comme telle ; peut être ignorée par option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Un tiers existant n&#039;est jamais renommé par une commande : seuls les champs vides sont complétés.&lt;br /&gt;
&lt;br /&gt;
Ventes sans client (caisse Shopify POS, commandes anonymes) : portées par un seul tiers, choisi dans la configuration, ou « Client comptoir (Shopify) » créé automatiquement. Le code client est attribué par la numérotation Dolibarr, y compris quand il est obligatoire.&lt;br /&gt;
&lt;br /&gt;
=== Clients (dans les deux sens) ===&lt;br /&gt;
&lt;br /&gt;
* Shopify → Dolibarr : un client créé ou modifié met à jour son tiers (nom, e-mail, adresse, téléphone, pays, province). Une raison sociale Shopify devient le nom du tiers.&lt;br /&gt;
* Dolibarr → Shopify : un tiers client créé ou modifié est publié (prénom, nom, e-mail, téléphone). Un tiers sans e-mail ni téléphone n&#039;est pas publié (exigence Shopify).&lt;br /&gt;
* Client supprimé sur Shopify : le lien est retiré, le tiers Dolibarr est conservé.&lt;br /&gt;
&lt;br /&gt;
=== Produits (dans les deux sens) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Sens !! Création !! Modification&lt;br /&gt;
|-&lt;br /&gt;
| Dolibarr → Shopify (source de vérité produits = Dolibarr) || Produit Shopify avec titre, description, prix, SKU (= référence), code-barres, suivi de stock, statut actif si la fiche est en vente, sinon brouillon. Publication sur la Boutique en ligne en option. || Titre, description et metafields. Prix, SKU et code-barres seulement si l&#039;option « Réaligner prix, SKU et code-barres » est cochée ; statut seulement si « Suivre en vente » est cochée.&lt;br /&gt;
|-&lt;br /&gt;
| Shopify → Dolibarr || Fiche Dolibarr (référence = SKU, libellé, prix, code-barres, statut) ; une fiche par variante pour un produit à plusieurs variantes. Si le SKU correspond à une référence existante, la fiche est &#039;&#039;&#039;rattachée&#039;&#039;&#039; sans être modifiée. || Libellé. Prix seulement si Shopify est source de vérité des prix ; statut et code-barres seulement si Shopify est source de vérité des produits.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Produit supprimé sur Shopify : liens retirés, fiche Dolibarr conservée, jamais recréée d&#039;office (un export manuel peut la recréer si les flux, la source et les conditions de publication l’autorisent).&lt;br /&gt;
* Fiche rattachée par SKU : utilisée pour les commandes et le stock ; son titre, sa description et son prix ne sont jamais réécrits.&lt;br /&gt;
* Prix envoyé à Shopify : HT de la fiche par défaut (fonctionnement historique), ou TTC si la boutique est en TTC (option « selon la boutique »).&lt;br /&gt;
&lt;br /&gt;
=== Catégories, images et champs produit (Dolibarr → Shopify, options) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Catégories&#039;&#039;&#039; : chaque catégorie produit devient une &#039;&#039;&#039;collection&#039;&#039;&#039; Shopify, un &#039;&#039;&#039;tag&#039;&#039;&#039;, ou les deux. Le produit rejoint et quitte les collections selon ses catégories ; une collection parente peut contenir les produits de ses sous-catégories ; une catégorie renommée ou supprimée entraîne sa collection.&lt;br /&gt;
* &#039;&#039;&#039;Menu de navigation&#039;&#039;&#039; construit sur l&#039;arborescence, jusqu&#039;à 3 niveaux (limite Shopify), reconstruit seulement quand l&#039;arborescence change. Droits &amp;lt;code&amp;gt;read_online_store_navigation&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;write_online_store_navigation&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Images&#039;&#039;&#039; de l&#039;onglet « Fichiers joints » envoyées dans les médias du produit : ajout, remplacement quand le fichier change, retrait quand il disparaît, sans doublon.&lt;br /&gt;
* &#039;&#039;&#039;Metafields&#039;&#039;&#039; : un attribut supplémentaire &#039;&#039;ou&#039;&#039; un champ standard (&amp;lt;code&amp;gt;@weight&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@length&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@width&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@height&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@surface&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@volume&amp;lt;/code&amp;gt;) publié avec conversion de type et d&#039;unité (texte riche, poids, dimension, volume, nombres, dates, listes). Une valeur vidée efface le metafield ; une valeur refusée par Shopify n&#039;empêche pas les autres et le job apparaît en échec.&lt;br /&gt;
* &#039;&#039;&#039;Poids d&#039;expédition&#039;&#039;&#039; : le poids Dolibarr publié sur la variante Shopify, pour le calcul des frais de port.&lt;br /&gt;
* &#039;&#039;&#039;Produit supprimé dans Dolibarr&#039;&#039;&#039; : passé en brouillon ou archivé sur Shopify, jamais supprimé.&lt;br /&gt;
&lt;br /&gt;
Le module ne touche qu&#039;à ce qu&#039;il a créé : une collection, un tag ou une image ajoutés à la main sur Shopify ne sont jamais retirés.&lt;br /&gt;
&lt;br /&gt;
=== Stock (sens selon la source de vérité) ===&lt;br /&gt;
&lt;br /&gt;
* Source de vérité &#039;&#039;&#039;Dolibarr&#039;&#039;&#039; : chaque mouvement de stock publie la quantité des entrepôts choisis sur l&#039;emplacement Shopify correspondant (écriture « comparer puis écrire », conforme aux API 2026-04 et suivantes). Les niveaux Shopify sont ignorés : l&#039;expédition Dolibarr sortira le stock vendu.&lt;br /&gt;
* Source de vérité &#039;&#039;&#039;Shopify&#039;&#039;&#039; : un niveau modifié sur Shopify ajuste l&#039;entrepôt Dolibarr associé à l&#039;emplacement.&lt;br /&gt;
* Quantité échangée : physique publiée par défaut ; « Physique » dans les deux sens, ou « Disponible » si Dolibarr décrémente le stock dès la validation de commande (le diagnostic le suggère).&lt;br /&gt;
&lt;br /&gt;
=== Expéditions (Dolibarr → Shopify) ===&lt;br /&gt;
&lt;br /&gt;
* À la validation d&#039;une expédition liée à une commande Shopify, la commande passe « expédiée » sur Shopify pour les articles et quantités réellement expédiés (expéditions partielles comprises).&lt;br /&gt;
* Numéro de suivi et transporteur (d&#039;après le mode d&#039;expédition) transmis ; Shopify envoie au client son e-mail d&#039;expédition (désactivable).&lt;br /&gt;
* Une expédition n&#039;est jamais déclarée deux fois ; les expéditions de commandes qui ne viennent pas de Shopify sont ignorées.&lt;br /&gt;
* Le stock d&#039;un article expédié est publié après la déclaration de l&#039;expédition, pour que Shopify ne le décompte pas deux fois.&lt;br /&gt;
&lt;br /&gt;
=== Étiquettes imprimées dans Shopify (Shopify → Dolibarr, option) ===&lt;br /&gt;
&lt;br /&gt;
Pour les boutiques qui impriment leurs étiquettes dans Shopify (Chronopost, Colissimo, Shopify Shipping) tout en gardant Dolibarr seul maître du stock, par exemple un entrepôt partagé avec le B2B :&lt;br /&gt;
&lt;br /&gt;
* Chaque expédition Shopify crée et valide l&#039;expédition Dolibarr de la commande (importée au passage si besoin), avec le numéro de suivi et le transporteur.&lt;br /&gt;
* L&#039;entrepôt est celui de l&#039;emplacement Shopify expéditeur (table entrepôts = emplacement).&lt;br /&gt;
* La validation sort le stock dans Dolibarr, qui le repousse vers Shopify : les sorties B2B ne sont jamais écrasées.&lt;br /&gt;
* Jamais plus que le reste à expédier de chaque ligne ; étiquettes antérieures à l&#039;activation ignorées ; étiquette annulée sur Shopify = expédition annulée et stock remis.&lt;br /&gt;
* Prérequis : module Expéditions et « Décrémenter le stock réel à la validation des expéditions » dans le module Stocks (contrôlés par le diagnostic).&lt;br /&gt;
&lt;br /&gt;
=== Remboursements (Shopify → Dolibarr) ===&lt;br /&gt;
&lt;br /&gt;
* Remboursement partiel : avoir limité au montant réellement remboursé, avec répartition par taux lorsque le détail des lignes remboursées est disponible. Vérifier les taux et les frais de port pour un remboursement récupéré sans détail par réconciliation.&lt;br /&gt;
* Remboursement total : avoir reprenant chaque ligne de la facture.&lt;br /&gt;
* L&#039;avoir reste en brouillon par défaut (validation en option). Un remboursement arrivé avant sa commande ou sa facture est mis en attente ; si la facture reste absente, il passe dans les reprises puis devient visible en échec si le problème persiste.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
 Webhook Shopify ─┐                          ┌─ Trigger Dolibarr&lt;br /&gt;
                  ▼                          ▼&lt;br /&gt;
             [ JobQueue ] ── cron process_queue ── [ SyncEngine ]&lt;br /&gt;
                  │                                     │&lt;br /&gt;
           [ MappingRepository ]                 [ Mappers × 6 ]&lt;br /&gt;
         (id ↔ id + hash anti-boucle)      (Order / Customer / Refund /&lt;br /&gt;
                                            Product / Inventory / Fulfillment)&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
* Modules Dolibarr &#039;&#039;&#039;Produits&#039;&#039;&#039;, &#039;&#039;&#039;Commandes&#039;&#039;&#039; et &#039;&#039;&#039;Tiers&#039;&#039;&#039; actifs ; &#039;&#039;&#039;Stocks&#039;&#039;&#039;, &#039;&#039;&#039;Expéditions&#039;&#039;&#039; et &#039;&#039;&#039;Factures&#039;&#039;&#039; selon les flux utilisés.&lt;br /&gt;
* Une &#039;&#039;&#039;application Shopify&#039;&#039;&#039; disposant des droits Admin API (products, orders, inventory, customers, fulfillments, locations ; &amp;lt;code&amp;gt;read_publications&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;write_publications&amp;lt;/code&amp;gt; pour publier les nouveautés sur la Boutique en ligne ; &amp;lt;code&amp;gt;read_online_store_navigation&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;write_online_store_navigation&amp;lt;/code&amp;gt; pour le menu). Selon son type, elle fournit un jeton &amp;lt;code&amp;gt;shpat_…&amp;lt;/code&amp;gt; à coller, ou un &#039;&#039;client ID&#039;&#039; et un &#039;&#039;client secret&#039;&#039; avec lesquels le module obtient et renouvelle le jeton lui-même.&lt;br /&gt;
* Pour le temps réel : un endpoint webhook &#039;&#039;&#039;HTTPS public&#039;&#039;&#039;. Voir ci-dessous le fonctionnement sans webhook.&lt;br /&gt;
&lt;br /&gt;
== Installation et mise à jour ==&lt;br /&gt;
&lt;br /&gt;
# Sauvegarder la base de données, les documents et la configuration du module.&lt;br /&gt;
# Télécharger &amp;lt;code&amp;gt;module_shopifysync-1.8.0.zip&amp;lt;/code&amp;gt; depuis la [https://www.dolistore.com/product.php?id=3218 fiche DoliStore].&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039;, ou remplacer le dossier &amp;lt;code&amp;gt;custom/shopifysync&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &#039;&#039;&#039;Installer le nouveau code avant de désactiver l’ancienne version.&#039;&#039;&#039; Les versions antérieures à la 1.7.3 pouvaient effacer leurs réglages à la désactivation.&lt;br /&gt;
# Activer le module pour une première installation ; pour une mise à jour vers la 1.8.0, le désactiver puis le réactiver &#039;&#039;&#039;après le remplacement du code&#039;&#039;&#039;. Cette étape enregistre le hook de déplacement des photos et crée les tables manquantes des anciennes évolutions. Depuis la 1.7.3, identifiants, correspondances et flux désactivés sont conservés.&lt;br /&gt;
# Vérifier la configuration, tester la connexion et contrôler l’inscription des webhooks ainsi que les tâches planifiées.&lt;br /&gt;
# Tester les flux habituels sur un environnement de recette avant leur activation en production.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Compatibilité des réglages :&#039;&#039;&#039; le filtre de catégories, la condition de validation et la synchronisation de l’ordre des photos restent &#039;&#039;&#039;désactivés par défaut&#039;&#039;&#039;. Aucun export massif n’est lancé lors de leur enregistrement. La 1.8.0 n’ajoute pas de nouvelle table par rapport à une 1.7.3 complète. Des réglages déjà effacés par une ancienne version doivent être restaurés depuis une sauvegarde ou saisis à nouveau.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Créer l&#039;application Shopify&#039;&#039;&#039; et l&#039;installer sur la boutique. ⚠️ Depuis le &#039;&#039;&#039;1er janvier 2026&#039;&#039;&#039;, Shopify ne permet plus de créer une application personnalisée depuis l&#039;admin (celles qui affichent un jeton &amp;lt;code&amp;gt;shpat_…&amp;lt;/code&amp;gt; à copier) ; les installations existantes continuent de fonctionner sans rien changer, et une nouvelle installation passe par le &#039;&#039;&#039;Dev Dashboard&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Choisir le mode d&#039;authentification&#039;&#039;&#039; dans la carte « Connexion » :&lt;br /&gt;
#* &#039;&#039;Jeton permanent collé&#039;&#039; : mode par défaut et historique : coller le jeton &amp;lt;code&amp;gt;shpat_…&amp;lt;/code&amp;gt; d&#039;une application personnalisée créée avant 2026. Rien ne change pour les installations en service.&lt;br /&gt;
#* &#039;&#039;Client ID et secret&#039;&#039; : pour une application et une boutique appartenant à la &#039;&#039;&#039;même organisation Shopify&#039;&#039;&#039; : saisir le &#039;&#039;client ID&#039;&#039; et le &#039;&#039;client secret&#039;&#039; de l&#039;application du Dev Dashboard ; le module obtient un jeton valable 24 heures et le renouvelle seul.&lt;br /&gt;
#* &#039;&#039;Autorisation Shopify&#039;&#039; : installation par le flux d&#039;autorisation : déclarer comme &#039;&#039;redirect URL&#039;&#039; de l&#039;application l&#039;adresse affichée dans la configuration (&amp;lt;code&amp;gt;…/custom/shopifysync/oauth/callback.php&amp;lt;/code&amp;gt;), puis cliquer sur &#039;&#039;&#039;« Se reconnecter »&#039;&#039;&#039;. Le module reçoit un jeton d&#039;une heure et un jeton de rafraîchissement de 90 jours, tous deux renouvelés automatiquement.&lt;br /&gt;
# &#039;&#039;&#039;Connexion&#039;&#039;&#039; : domaine de la boutique, jeton (ou client ID et secret), app secret, version d&#039;API.&lt;br /&gt;
# &#039;&#039;&#039;Stock&#039;&#039;&#039; : emplacement Shopify et entrepôts, ou table « entrepôts = emplacement » (une règle par ligne, ex. &amp;lt;code&amp;gt;23 = gid://shopify/Location/85613641922&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Choisir les &#039;&#039;&#039;flux&#039;&#039;&#039; et les &#039;&#039;&#039;sources de vérité&#039;&#039;&#039;, puis cliquer sur &#039;&#039;&#039;« Inscrire les webhooks »&#039;&#039;&#039;.&lt;br /&gt;
# Catalogue déjà en place des deux côtés : &#039;&#039;&#039;« Rattacher les variantes par SKU »&#039;&#039;&#039;.&lt;br /&gt;
# Historique à reprendre : tableau de bord → &#039;&#039;&#039;« Rattraper les commandes des N derniers jours »&#039;&#039;&#039;.&lt;br /&gt;
# Activer les &#039;&#039;&#039;tâches planifiées&#039;&#039;&#039; Dolibarr : traitement de la file et réconciliation.&lt;br /&gt;
&lt;br /&gt;
Depuis la 1.7.1, les champs de connexion s’affichent ou se masquent selon le mode choisi, sans effacer les identifiants déjà enregistrés. Enregistrer le nouveau mode avant d’utiliser la reconnexion. Le secret de signature des webhooks reste commun aux modes.&lt;br /&gt;
&lt;br /&gt;
Références Shopify : [https://shopify.dev/docs/apps/build/authentication-authorization/client-credentials-grant authentification dans la même organisation], [https://shopify.dev/docs/apps/build/authentication-authorization/access-tokens durées des jetons].&lt;br /&gt;
&lt;br /&gt;
=== Jetons d&#039;accès et échéances Shopify ===&lt;br /&gt;
&lt;br /&gt;
Un jeton expirable est renouvelé &#039;&#039;&#039;avant&#039;&#039;&#039; son échéance (marge de deux minutes) et &#039;&#039;&#039;immédiatement&#039;&#039;&#039; si Shopify le refuse en cours de route : la requête est alors rejouée avec le jeton neuf. La réconciliation nocturne force en plus un renouvellement, car un jeton de rafraîchissement inutilisé pendant 90 jours expire : une boutique calme perdrait sa connexion sans prévenir. L&#039;écran de diagnostic affiche le mode, l&#039;échéance du jeton et alerte quand le rafraîchissement approche de sa fin.&lt;br /&gt;
&lt;br /&gt;
Deux échéances Shopify à ne pas confondre :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1er janvier 2026&#039;&#039;&#039; : plus aucune création d&#039;application personnalisée depuis l&#039;admin Shopify. Concerne les &#039;&#039;&#039;nouvelles&#039;&#039;&#039; installations, qui passent par le Dev Dashboard.&lt;br /&gt;
* &#039;&#039;&#039;1er janvier 2027&#039;&#039;&#039; : jetons expirables obligatoires pour les &#039;&#039;&#039;applications publiques&#039;&#039;&#039; de l&#039;App Store. Les applications personnalisées et celles créées par le marchand ne sont pas visées : une installation existante n&#039;a rien à faire.&lt;br /&gt;
&lt;br /&gt;
L&#039;URL de retour d&#039;autorisation est protégée par trois contrôles avant tout enregistrement : signature HMAC de Shopify, jeton d&#039;état à usage unique valable 15 minutes, et domaine de boutique identique à celui configuré.&lt;br /&gt;
&lt;br /&gt;
=== Assistant de configuration initiale (depuis la 1.7.0) ===&lt;br /&gt;
&lt;br /&gt;
L’onglet &#039;&#039;&#039;Assistant d’installation&#039;&#039;&#039; facilite la configuration du lien Shopify après l’installation du module. Il est facultatif et ne remplace pas le déploiement du ZIP.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Connexion&#039;&#039;&#039; : tester un jeton permanent ou des identifiants Client ID/secret ; une connexion OAuth déjà configurée peut être réutilisée. Une nouvelle autorisation OAuth se prépare dans la Configuration.&lt;br /&gt;
# &#039;&#039;&#039;Catalogue&#039;&#039;&#039; : choisir l’import Shopify, l’export de produits simples Dolibarr ou le rattachement de deux catalogues existants par SKU.&lt;br /&gt;
# &#039;&#039;&#039;Correspondances SKU&#039;&#039;&#039; : analyser les références absentes, doublons et ambiguïtés avant de créer des liens.&lt;br /&gt;
# &#039;&#039;&#039;Entrepôts&#039;&#039;&#039; : associer un entrepôt à un emplacement Shopify, ou conserver les correspondances avancées existantes.&lt;br /&gt;
# &#039;&#039;&#039;Facturation&#039;&#039;&#039; : vérifier les modules, options, moyen de paiement et compte bancaire, sans créer de facture ni de règlement.&lt;br /&gt;
# &#039;&#039;&#039;Aperçu et démarrage&#039;&#039;&#039; : examiner les changements de réglages et sélectionner explicitement les opérations du premier lot (20 au maximum).&lt;br /&gt;
&lt;br /&gt;
Les choix restent dans un brouillon privé pendant une heure. Aucun réglage actif n’est enregistré avant la confirmation. L’aperçu expire après 10 minutes et doit être recalculé si le catalogue ou les réglages changent. La confirmation crée les liens et les jobs ; la file habituelle effectue ensuite les échanges.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Catalogue déjà existant :&#039;&#039;&#039; le rattachement par SKU conserve la gestion des fiches dans les catalogues existants et désactive leur synchronisation. Les liens servent notamment aux commandes et aux stocks. Les photos et champs de ces produits restent gérés dans Shopify.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Limites :&#039;&#039;&#039; l’assistant analyse au plus 2 000 variantes Shopify et 2 000 fiches Dolibarr ; au-delà, utiliser les outils avancés. Les combinaisons Dolibarr complexes sont également orientées vers ces outils. Les traitements déjà en attente ou en cours doivent être terminés avant confirmation. Vérifier séparément les webhooks et tâches planifiées ; l’assistant ne suspend pas les automatismes existants.&lt;br /&gt;
&lt;br /&gt;
=== Sélection des catégories à exporter (1.8.0) ===&lt;br /&gt;
&lt;br /&gt;
Dans &#039;&#039;&#039;Configuration → Catalogue → Périmètre du catalogue&#039;&#039;&#039;, ouvrir &#039;&#039;&#039;Configurer et prévisualiser&#039;&#039;&#039;. Le filtre est &#039;&#039;&#039;désactivé par défaut&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Cocher &#039;&#039;&#039;Activer le filtre par catégories pour les exports vers Shopify&#039;&#039;&#039;.&lt;br /&gt;
# Choisir au moins une branche avec &#039;&#039;&#039;Autoriser la branche&#039;&#039;&#039;. Plusieurs branches peuvent être sélectionnées.&lt;br /&gt;
# Choisir, si nécessaire, des branches avec &#039;&#039;&#039;Exclure la branche&#039;&#039;&#039;.&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;Prévisualiser sans synchroniser&#039;&#039;&#039; pour examiner les compteurs et motifs avant d’enregistrer.&lt;br /&gt;
# Enregistrer lorsque le périmètre correspond au catalogue souhaité.&lt;br /&gt;
&lt;br /&gt;
Chaque sélection inclut la catégorie choisie et ses descendants actuels et futurs. Une exclusion est toujours prioritaire, même si le produit appartient aussi à une branche autorisée. Un produit sans branche autorisée voit son export suspendu.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exemple :&#039;&#039;&#039; autoriser « Maison » et « Jardin », puis exclure « Usage interne ». Les sous-catégories de Maison et Jardin sont incluses. Un produit classé à la fois dans Maison et Usage interne reste exclu. Il n’est pas nécessaire de sélectionner les catégories internes situées hors des branches autorisées pour les écarter.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variantes :&#039;&#039;&#039; les catégories du parent déterminent l’inclusion ; une catégorie exclue sur le parent ou sur un enfant suspend l’export du groupe entier.&lt;br /&gt;
&lt;br /&gt;
L’aperçu utilise les valeurs du formulaire sans enregistrer ni contacter Shopify. Il compte toutes les fiches de l’entité et présente 20 exemples par page, les causes de suspension et les fiches déjà reliées concernées. Les variantes sont comptées comme fiches : le total « Filtres satisfaits » ne garantit pas autant de créations Shopify, car les règles de SKU, variantes, sources et flux restent applicables. Cet aperçu complet est distinct de l’assistant limité à 2 000 fiches.&lt;br /&gt;
&lt;br /&gt;
=== Condition de validation des produits (1.8.0) ===&lt;br /&gt;
&lt;br /&gt;
# Créer, si nécessaire, un attribut supplémentaire de produit de type &#039;&#039;&#039;booléen&#039;&#039;&#039;, par exemple « Prêt pour la boutique », dans la configuration des produits Dolibarr.&lt;br /&gt;
# Dans &#039;&#039;&#039;Configuration → Catalogue → Exporter uniquement les produits validés&#039;&#039;&#039;, sélectionner ce champ et enregistrer. Par défaut, &#039;&#039;&#039;Aucun filtre de validation&#039;&#039;&#039; est sélectionné.&lt;br /&gt;
# Cocher le champ sur les produits à exporter. Une case vide ou décochée suspend l’export du catalogue. Pour un produit à variantes, le parent et tous ses enfants doivent être validés.&lt;br /&gt;
# Si un filtre de catégories est également actif, les deux conditions doivent être satisfaites.&lt;br /&gt;
&lt;br /&gt;
La règle est vérifiée avant la mise en file, dans les exports manuels et de nouveau lors du traitement des jobs déjà présents. Un produit devenu non éligible pendant l’attente n’est pas exporté. Un champ supprimé, devenu non booléen ou illisible bloque l’export avec une erreur ; le filtre n’est pas ignoré silencieusement.&lt;br /&gt;
&lt;br /&gt;
=== Effet des filtres sur les produits existants ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Enregistrer les filtres ne lance aucun export massif et ne supprime ni ne dépublie les produits Shopify.&#039;&#039;&#039; Sortir un produit du périmètre ou décocher sa validation suspend ses prochaines mises à jour du catalogue ; le retirer de la vente est une action distincte.&lt;br /&gt;
&lt;br /&gt;
* Commandes, stocks et expéditions conservent leurs propres réglages. Le filtre concerne les exports du catalogue vers Shopify.&lt;br /&gt;
* Pour reprendre un produit précédemment écarté, corriger sa catégorie ou sa validation, puis modifier sa fiche ou utiliser &#039;&#039;&#039;Synchroniser&#039;&#039;&#039;. Changer seulement les branches de configuration ou déplacer une branche entière ne lance pas un export massif.&lt;br /&gt;
* Avec le filtre actif, les collections, tags et le menu configuré utilisent les branches sélectionnées à la place de la racine historique. Les collections existantes ne sont pas automatiquement supprimées et les produits suspendus conservent leurs associations déjà publiées.&lt;br /&gt;
* Le menu configuré est reconstruit lors d’un prochain traitement catalogue qui le déclenche. La prévisualisation et l’enregistrement ne le modifient pas immédiatement.&lt;br /&gt;
* Une catégorie sélectionnée supprimée ou inaccessible, ou une boucle dans la hiérarchie, bloque l’export jusqu’à correction. Désactiver le filtre rétablit les règles historiques, dont la racine de catégories conservée.&lt;br /&gt;
* Les produits rattachés par SKU conservent leur catalogue géré dans Shopify.&lt;br /&gt;
&lt;br /&gt;
=== Photos : ajout, suppression et ordre ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Envoi des images :&#039;&#039;&#039; activer le flux produits, choisir Dolibarr comme source du catalogue et activer l’envoi des images. Depuis la 1.7.3, ajouter une photo seule dans &#039;&#039;&#039;Fichiers joints&#039;&#039;&#039; suffit à mettre le produit en file, sans modifier un autre champ et sans activer de lien public. Les fichiers sont téléversés directement. Les remplacements de contenu sont détectés et les retraits concernent les médias gérés par le module. Un dépôt direct sur le disque, hors des événements Dolibarr, nécessite un nouvel export du produit.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ordre des photos (1.8.0) :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Après installation du nouveau code, réactiver le module pour enregistrer le hook de déplacement des fichiers.&lt;br /&gt;
# Activer explicitement &#039;&#039;&#039;Configuration → Catalogue → Synchroniser l’ordre des photos&#039;&#039;&#039;. Cette option est désactivée par défaut et nécessite l’envoi des images actif.&lt;br /&gt;
# Réordonner les photos par glisser-déposer dans les fichiers joints du produit, puis laisser la file se traiter.&lt;br /&gt;
# Vérifier la galerie et l’image principale dans Shopify.&lt;br /&gt;
&lt;br /&gt;
Les médias synchronisés sont placés en tête de galerie selon les positions Dolibarr ; la première photo devient l’image principale. Les fichiers non indexés suivent, triés par nom. Les médias ajoutés directement dans Shopify sont conservés après ceux du module, dans leur ordre relatif. Un simple déplacement &#039;&#039;&#039;ne renvoie pas les fichiers inchangés&#039;&#039;&#039;. Le réordonnancement Shopify étant asynchrone, sa fin est vérifiée lors d’un passage suivant de la file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Si une photo ne se synchronise pas :&#039;&#039;&#039; vérifier la source du catalogue, le flux produits, l’option images, les filtres éventuels et le traitement de la file. Le journal indique les images trouvées, envoyées et retirées. Un stockage de documents indisponible produit une erreur au lieu de retirer les médias. Les photos des produits rattachés par SKU restent gérées dans Shopify.&lt;br /&gt;
&lt;br /&gt;
=== Diagnostic et support (depuis la 1.6.0) ===&lt;br /&gt;
&lt;br /&gt;
Le tableau de bord affiche l’état de la connexion, du planificateur et du dernier rattrapage. Par flux et sens, il présente la dernière opération terminée, les traitements en attente ou en cours, les échecs, conflits et l’ancienneté de la file. Une dernière opération terminée peut être un doublon ou un événement ignoré : consulter son détail pour savoir si une écriture a eu lieu.&lt;br /&gt;
&lt;br /&gt;
* Ouvrir un blocage pour lire sa cause et l’action conseillée : identifiants, autorisations, facture attendue, écart de montant ou traitement interrompu.&lt;br /&gt;
* Corriger la cause puis relancer les échecs ou conflits sélectionnés, jusqu’à 50 à la fois. Les traitements en cours ne sont pas remis en attente.&lt;br /&gt;
* Utiliser &#039;&#039;&#039;Vérifier la connexion&#039;&#039;&#039; pour actualiser le contrôle ; la page ne contacte pas Shopify à chaque affichage. Les contrôles anciens deviennent non vérifiés et une tâche en retard empêche un état global sain.&lt;br /&gt;
* Télécharger l’export de diagnostic pour le support. Il contient les versions, statuts, compteurs et codes structurés, sans jetons, secrets, domaine de boutique, données clients, références, journaux bruts ni contenu des commandes. Il est téléchargé localement et n’est jamais envoyé automatiquement.&lt;br /&gt;
&lt;br /&gt;
L’historique détaillé débute à l’installation de cette fonctionnalité. L’export couvre une période de 1 à 30 jours, avec au plus 500 événements et une indication si les résultats sont tronqués. Les jobs et événements anciens peuvent avoir été purgés selon leur conservation.&lt;br /&gt;
&lt;br /&gt;
=== Options (désactivées par défaut) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Option !! Effet&lt;br /&gt;
|-&lt;br /&gt;
| Valider la commande || La commande importée reçoit sa référence définitive (et sort le stock si Dolibarr décrémente à la validation).&lt;br /&gt;
|-&lt;br /&gt;
| Valider l&#039;avoir || L&#039;avoir créé par un remboursement est validé aussitôt.&lt;br /&gt;
|-&lt;br /&gt;
| Réaligner prix, SKU et code-barres || Chaque modification Dolibarr réécrit ces champs sur un produit Shopify déjà publié.&lt;br /&gt;
|-&lt;br /&gt;
| Suivre « en vente » || Un produit retiré de la vente dans Dolibarr passe en brouillon sur Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Prix envoyé selon la boutique || Prix TTC envoyés si la boutique affiche ses prix taxes incluses.&lt;br /&gt;
|-&lt;br /&gt;
| Catégories Dolibarr || Collections Shopify, tags, ou les deux, avec menu de navigation optionnel.&lt;br /&gt;
|-&lt;br /&gt;
| Images du produit || Fichiers joints envoyés dans les médias Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Synchroniser l’ordre des photos (1.8.0) || Positions Dolibarr reprises sur les médias existants sans renvoyer les fichiers inchangés.&lt;br /&gt;
|-&lt;br /&gt;
| Filtre de catégories (1.8.0) || Plusieurs branches autorisées et exclusions prioritaires ; aperçu avant enregistrement.&lt;br /&gt;
|-&lt;br /&gt;
| Exporter uniquement les produits validés (1.8.0) || Condition par champ booléen, vérifiée avant mise en file et au traitement.&lt;br /&gt;
|-&lt;br /&gt;
| Poids d&#039;expédition || Poids Dolibarr publié sur la variante Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Produit supprimé dans Dolibarr || Brouillon ou archivage sur Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Étiquettes imprimées dans Shopify || Chaque expédition Shopify crée et valide l&#039;expédition Dolibarr, stock sorti par Dolibarr.&lt;br /&gt;
|-&lt;br /&gt;
| Ignorer les commandes de test || Les commandes passées avec la passerelle de test Shopify ne sont pas importées.&lt;br /&gt;
|-&lt;br /&gt;
| Publier sur la Boutique en ligne || Un produit créé par le module est rendu visible sur la boutique.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Autres réglages : service Dolibarr des frais de port, taux de TVA par défaut, quantité Shopify échangée, notification d&#039;expédition au client (active par défaut), règlement et compte bancaire des commandes payées.&lt;br /&gt;
&lt;br /&gt;
=== Tâches planifiées sous Dolibarr 24 ===&lt;br /&gt;
&lt;br /&gt;
Les deux tâches du module sont de type &amp;lt;code&amp;gt;command&amp;lt;/code&amp;gt; (exécution en ligne de commande). Depuis Dolibarr 24, une tâche CLI est comptée &#039;&#039;&#039;en erreur&#039;&#039;&#039; si la variable &amp;lt;code&amp;gt;$dolibarr_cron_allow_cli&amp;lt;/code&amp;gt; n&#039;est pas activée : en version 20 le cas était seulement journalisé. Ajoutez donc dans &amp;lt;code&amp;gt;conf/conf.php&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 $dolibarr_cron_allow_cli = 1;&lt;br /&gt;
&lt;br /&gt;
Sans cela, les tâches « ShopifySync » s&#039;affichent en rouge dans &#039;&#039;Outils → Tâches planifiées&#039;&#039; alors même que le module fonctionne. Sans tâche planifiée active, le bouton « Traiter la file maintenant » du tableau de bord exécute la file à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Fonctionnement sans endpoint webhook ===&lt;br /&gt;
&lt;br /&gt;
Le module reste utilisable derrière un hébergement fermé aux connexions entrantes : la réconciliation planifiée, qui n&#039;effectue que des appels sortants, rattrape les commandes, les paiements, les annulations et les remboursements. La fenêtre d&#039;analyse (2 jours par défaut) se règle par la constante &amp;lt;code&amp;gt;SHOPIFYSYNC_RECONCILE_WINDOW_DAYS&amp;lt;/code&amp;gt;. L&#039;import étant idempotent, le recouvrement entre deux passages ne crée pas de doublon. Les jobs terminés sont purgés après 30 jours et le journal après 90 jours.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.8.0 || Sélection de plusieurs branches de catégories, exclusions prioritaires, aperçu complet paginé et validation facultative par champ booléen ; contrôles avant mise en file et au traitement ; collections, tags et menu alignés sur le périmètre ; ordre des photos Dolibarr repris sur les médias existants sans renvoi des fichiers inchangés et suivi asynchrone ; nouvelles options désactivées par défaut, sans export massif ni dépublication automatique.&lt;br /&gt;
|-&lt;br /&gt;
| 1.7.3 || Envoi des images depuis les dossiers réels et historiques, déclenchement par ajout ou retrait d’une photo seule, détection des remplacements par leur contenu, protection si le stockage est indisponible ; conservation des réglages et des flux désactivés lors d’une désactivation/réactivation après installation du correctif.&lt;br /&gt;
|-&lt;br /&gt;
| 1.7.2 || Chargement de Dolibarr dans l’assistant conforme au validateur de paquet pour les installations en racine et dans custom, sans changement de synchronisation.&lt;br /&gt;
|-&lt;br /&gt;
| 1.7.1 || Champs de connexion affichés selon le mode d’authentification dans la Configuration et l’assistant ; identifiants masqués conservés ; reconnexion après enregistrement du mode.&lt;br /&gt;
|-&lt;br /&gt;
| 1.7.0 || Assistant facultatif de configuration du lien Shopify en six étapes : connexion, catalogue, SKU, entrepôts, facturation et aperçu ; brouillon privé, confirmation explicite d’un premier lot de 20 opérations maximum, contrôle des ambiguïtés et des modifications concurrentes ; analyse limitée à 2 000 fiches de chaque côté.&lt;br /&gt;
|-&lt;br /&gt;
| 1.6.0 || Diagnostic de connexion et des tâches planifiées, suivi par flux et sens, causes compréhensibles, historique filtrable, relances ciblées et export de diagnostic sans secrets ; remboursements sans facture source visibles dans les reprises puis en échec si le blocage persiste.&lt;br /&gt;
|-&lt;br /&gt;
| 1.5.0 || Jetons d&#039;accès qui expirent pris en charge : mode « client ID et secret » (jeton de 24 h renouvelé par le module) et mode « autorisation Shopify » (jeton d&#039;une heure + rafraîchissement de 90 jours), renouvellement avant échéance et à la volée sur un refus, renouvellement préventif chaque nuit, bouton « Se reconnecter », URL de retour protégée par signature, état à usage unique et contrôle du domaine ; le mode « jeton permanent collé » reste le défaut et ne change pas&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.3 || Correctifs : contrôle strict des montants appliqué aussi au rejeu, règlement retenté quand son enregistrement avait échoué, remboursement en échec distingué d&#039;une attente de facture (job en échec au lieu d&#039;un classement silencieux), frais de port remboursés portés à leur propre taux de TVA, renommage vers un tag déjà saisi à la main qui n&#039;est plus adopté par le module&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.2 || Correctifs du contre-audit : frais de port refusés rendus à la commande et reposés au rejeu, quantité modifiée sur Shopify détectée, validation de commande et de facture rejouées à la reprise, option de contrôle strict des montants, remboursements limités aux transactions réellement abouties et répartis par taux de TVA, ligne d&#039;avoir refusée non enregistrée comme traitée, tags jamais adoptés et renommage limité aux produits suivis, renommage échoué réellement retenté au rejeu&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.1 || Correctifs : unité forcée des metafields réellement convertie (2 kg publiés en 2000 g) ; un tag Shopify saisi à la main n&#039;est plus retiré ; suppression de collection refusée signalée au lieu d&#039;être déclarée réussie ; erreurs de renommage de tag remontées ; remboursement de montant nul ne crée plus d&#039;avoir intégral ; commande dont une ligne a été refusée ni validée ni facturée, puis complétée au rejeu ; modification faite pendant un export conservée ; webhook non acquitté quand le job n&#039;a pas pu être enregistré&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.0 || Catégories Dolibarr en collections Shopify, tags et menu de navigation ; images des fiches envoyées dans les médias ; champs standards (poids, dimensions, volume) publiables en metafields avec conversion d&#039;unité ; poids d&#039;expédition ; metafields fiables (case décochée, valeur vidée, valeur refusée signalée sans bloquer les autres) ; produit supprimé dans Dolibarr passé en brouillon ou archivé&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.1 || Code client obligatoire géré (clients créés avec le code de la numérotation Dolibarr) ; ventes sans client (caisse Shopify POS) portées par un tiers unique configurable ; motif des refus journalisé ; étiquettes d&#039;un emplacement non géré ignorées&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.0 || Étiquettes imprimées dans Shopify (option) : expédition Dolibarr créée et validée sur l&#039;entrepôt de l&#039;emplacement expéditeur, stock sorti par Dolibarr qui reste seul maître, suivi et transporteur repris, annulation gérée, rattrapage par la réconciliation&lt;br /&gt;
|-&lt;br /&gt;
| 1.2.0 || Prix TTC, frais de port, date de vente, contact de livraison et clients invités à l&#039;import ; annulations Shopify ; expéditions partielles avec transporteur ; prix, SKU et code-barres posés à la création des produits ; import d&#039;un produit par variante ; suppressions Shopify gérées ; réconciliation des paiements, annulations et remboursements ; actions du tableau de bord ; options de validation et de réalignement (désactivées par défaut, aucun changement de comportement à la mise à jour) ; validé sur Dolibarr 18, 20 et 24&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.2 || Bouton « Synchroniser » des fiches commande ; facture créée quand le paiement arrive après l&#039;import&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.1 || Export de stock compatible avec les API Shopify 2026-04 et suivantes ; sonde de compatibilité multi-versions&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.0 || Tableau de bord et écrans redessinés, encart « État Shopify » sur les fiches ; rattachement par SKU d&#039;un catalogue existant ; stock multi-emplacements&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.2 || Produits à variantes (options Shopify, 1 SKU par combinaison, pagination jusqu&#039;à 2 048 variantes, refus au-delà de 3 attributs) ; stock multi-entrepôts ; metafields ; règlement automatique des commandes payées ; adresse de facturation complète ; bouton « Tester la connexion » ; remises Shopify à l&#039;import ; réconciliation par horodatage absolu et rattrapage des remboursements&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || Gestion des erreurs GraphQL renvoyées en chaîne ; version d&#039;API portée à 2026-01 ; &amp;lt;code&amp;gt;inventoryActivate&amp;lt;/code&amp;gt; avant écriture de stock ; correction critique de la création des lignes de commande&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : commandes, clients, remboursements, produits, stock, expéditions, webhooks signés, file d&#039;attente, tableau de bord&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Shopify_Sync&amp;diff=67404</id>
		<title>Module Shopify Sync</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Shopify_Sync&amp;diff=67404"/>
		<updated>2026-09-22T20:10:01Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Versions 1.4.3 et 1.5.0 : correctifs de reprise et de TVA du port, puis jetons d&amp;#039;accès expirables (client ID/secret ou autorisation Shopify) renouvelés automatiquement ; parcours d&amp;#039;installation mis à jour (fin des applications personnalisées créées dans l&amp;#039;admin depuis 2026)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module Shopify Sync ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shopify Sync&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui assure une &#039;&#039;&#039;synchronisation bidirectionnelle quasi temps réel entre Shopify et Dolibarr&#039;&#039;&#039; : commandes, clients, remboursements, produits et variantes, stock et expéditions. Le module dialogue directement avec l&#039;API &#039;&#039;&#039;GraphQL Admin&#039;&#039;&#039; de Shopify — sans SaaS intermédiaire, sans abonnement supplémentaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Version || 1.5.0&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x (validé sur 18.0.5, 20.0.4 et 24.0.0)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum (extension cURL), validé jusqu&#039;à 8.2&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (cURL pur : pas de Composer, pas de SDK)&lt;br /&gt;
|-&lt;br /&gt;
! Version d&#039;API Shopify || 2026-01 par défaut, configurable ; appels vérifiés sur 2025-07, 2025-10, 2026-01, 2026-04, 2026-07 et unstable&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3218 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Commandes&#039;&#039;&#039; Shopify → Dolibarr : client (ou client invité), commande à la date de la vente, lignes reliées aux fiches produits, remises, &#039;&#039;&#039;frais de port&#039;&#039;&#039;, contact de livraison si l&#039;adresse diffère ; &#039;&#039;&#039;facture&#039;&#039;&#039; dès que la commande est payée, même après son import.&lt;br /&gt;
* &#039;&#039;&#039;Prix TTC ou HT&#039;&#039;&#039; : le module lit le réglage « taxes incluses » de la boutique, les montants importés correspondent à ce que le client a payé.&lt;br /&gt;
* &#039;&#039;&#039;Annulations&#039;&#039;&#039; Shopify répercutées sur la commande Dolibarr.&lt;br /&gt;
* &#039;&#039;&#039;Remboursements&#039;&#039;&#039; → avoirs Dolibarr : partiel (montant réellement rendu) ou total (avoir miroir ligne à ligne).&lt;br /&gt;
* &#039;&#039;&#039;Expéditions&#039;&#039;&#039; Dolibarr → Shopify : articles et quantités expédiés, numéro de suivi et transporteur ; expéditions partielles gérées. En option, l&#039;inverse : une étiquette imprimée dans Shopify crée et valide l&#039;expédition Dolibarr.&lt;br /&gt;
* &#039;&#039;&#039;Produits&#039;&#039;&#039; dans les deux sens, avec une &#039;&#039;&#039;source de vérité configurable&#039;&#039;&#039; (produits, prix, stock).&lt;br /&gt;
* &#039;&#039;&#039;Catalogue existant&#039;&#039;&#039; : rattachement par SKU des variantes Shopify aux fiches Dolibarr existantes, sans produit parent ni module Variants.&lt;br /&gt;
* &#039;&#039;&#039;Produits à variantes&#039;&#039;&#039; (module Variants) : les attributs Dolibarr deviennent des options Shopify, une variante par combinaison. Limites de la boutique lues à l&#039;exécution (2 048 variantes, 3 options).&lt;br /&gt;
* &#039;&#039;&#039;Stock multi-emplacements&#039;&#039;&#039; : table « entrepôts Dolibarr = emplacement Shopify », ou un emplacement unique alimenté par les entrepôts choisis.&lt;br /&gt;
* &#039;&#039;&#039;Metafields&#039;&#039;&#039; : attributs supplémentaires et champs standards (poids, dimensions, volume) publiés vers Shopify, avec conversion de type et d&#039;unité.&lt;br /&gt;
* &#039;&#039;&#039;Catégories, images, poids&#039;&#039;&#039; : collections et tags Shopify, menu de navigation, images des fiches, poids d&#039;expédition (options).&lt;br /&gt;
* &#039;&#039;&#039;Webhooks signés HMAC&#039;&#039;&#039; pour le quasi temps réel, doublés d&#039;une &#039;&#039;&#039;réconciliation planifiée&#039;&#039;&#039; qui rattrape commandes, paiements, annulations et remboursements manqués.&lt;br /&gt;
* &#039;&#039;&#039;File d&#039;attente asynchrone&#039;&#039;&#039; : limites de débit de l&#039;API absorbées, nouvelles tentatives sûres, aucun job traité deux fois.&lt;br /&gt;
* &#039;&#039;&#039;Anti-boucle&#039;&#039;&#039; par empreinte d&#039;état, et &#039;&#039;&#039;résolution de conflits&#039;&#039;&#039; configurable.&lt;br /&gt;
* &#039;&#039;&#039;Tableau de bord&#039;&#039;&#039; : file d&#039;attente, échecs, journal ; traiter la file maintenant, relancer les échecs, rattraper les commandes des N derniers jours.&lt;br /&gt;
* &#039;&#039;&#039;Encart « État Shopify »&#039;&#039;&#039; sur les fiches produit et commande, avec bouton « Synchroniser ».&lt;br /&gt;
* Bouton &#039;&#039;&#039;« Tester la connexion »&#039;&#039;&#039; : contrôles de configuration, droits, emplacements, webhooks et tâches planifiées, chacun avec le correctif suggéré.&lt;br /&gt;
* Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Ce qui est synchronisé, flux par flux ==&lt;br /&gt;
&lt;br /&gt;
Chaque flux s&#039;active ou se coupe indépendamment dans la configuration (carte « Flux synchronisés »).&lt;br /&gt;
&lt;br /&gt;
=== Commandes (Shopify → Dolibarr) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Événement Shopify !! Effet dans Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
| Commande créée || Tiers retrouvé par e-mail (sinon créé, avec l&#039;adresse de facturation et le pays) ; commande datée du jour de la vente, référence client = numéro Shopify ; une ligne par article, reliée à la fiche par la variante ou le SKU ; remises ; ligne « Frais de port » ; contact de livraison si l&#039;adresse diffère. La commande reste en &#039;&#039;&#039;brouillon&#039;&#039;&#039; (validation automatique en option).&lt;br /&gt;
|-&lt;br /&gt;
| Commande payée (tout de suite ou plus tard) || Facture créée depuis la commande et validée ; règlement enregistré en option (mode de paiement et compte bancaire au choix).&lt;br /&gt;
|-&lt;br /&gt;
| Commande annulée || Commande Dolibarr annulée, sauf si une expédition est déjà en cours.&lt;br /&gt;
|-&lt;br /&gt;
| Commande de test (passerelle de test Shopify) || Importée et signalée comme telle ; peut être ignorée par option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Un tiers existant n&#039;est jamais renommé par une commande : seuls les champs vides sont complétés.&lt;br /&gt;
&lt;br /&gt;
Ventes sans client (caisse Shopify POS, commandes anonymes) : portées par un seul tiers, choisi dans la configuration, ou « Client comptoir (Shopify) » créé automatiquement. Le code client est attribué par la numérotation Dolibarr, y compris quand il est obligatoire.&lt;br /&gt;
&lt;br /&gt;
=== Clients (dans les deux sens) ===&lt;br /&gt;
&lt;br /&gt;
* Shopify → Dolibarr : un client créé ou modifié met à jour son tiers (nom, e-mail, adresse, téléphone, pays, province). Une raison sociale Shopify devient le nom du tiers.&lt;br /&gt;
* Dolibarr → Shopify : un tiers client créé ou modifié est publié (prénom, nom, e-mail, téléphone). Un tiers sans e-mail ni téléphone n&#039;est pas publié (exigence Shopify).&lt;br /&gt;
* Client supprimé sur Shopify : le lien est retiré, le tiers Dolibarr est conservé.&lt;br /&gt;
&lt;br /&gt;
=== Produits (dans les deux sens) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Sens !! Création !! Modification&lt;br /&gt;
|-&lt;br /&gt;
| Dolibarr → Shopify (source de vérité produits = Dolibarr) || Produit Shopify avec titre, description, prix, SKU (= référence), code-barres, suivi de stock, statut actif si la fiche est en vente, sinon brouillon. Publication sur la Boutique en ligne en option. || Titre, description et metafields. Prix, SKU et code-barres seulement si l&#039;option « Réaligner prix, SKU et code-barres » est cochée ; statut seulement si « Suivre en vente » est cochée.&lt;br /&gt;
|-&lt;br /&gt;
| Shopify → Dolibarr || Fiche Dolibarr (référence = SKU, libellé, prix, code-barres, statut) ; une fiche par variante pour un produit à plusieurs variantes. Si le SKU correspond à une référence existante, la fiche est &#039;&#039;&#039;rattachée&#039;&#039;&#039; sans être modifiée. || Libellé. Prix seulement si Shopify est source de vérité des prix ; statut et code-barres seulement si Shopify est source de vérité des produits.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Produit supprimé sur Shopify : liens retirés, fiche Dolibarr conservée, jamais recréée d&#039;office (le bouton « Synchroniser » de la fiche la republie).&lt;br /&gt;
* Fiche rattachée par SKU : utilisée pour les commandes et le stock ; son titre, sa description et son prix ne sont jamais réécrits.&lt;br /&gt;
* Prix envoyé à Shopify : HT de la fiche par défaut (fonctionnement historique), ou TTC si la boutique est en TTC (option « selon la boutique »).&lt;br /&gt;
&lt;br /&gt;
=== Catégories, images et champs produit (Dolibarr → Shopify, options) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Catégories&#039;&#039;&#039; : chaque catégorie produit devient une &#039;&#039;&#039;collection&#039;&#039;&#039; Shopify, un &#039;&#039;&#039;tag&#039;&#039;&#039;, ou les deux. Le produit rejoint et quitte les collections selon ses catégories ; une collection parente peut contenir les produits de ses sous-catégories ; une catégorie renommée ou supprimée entraîne sa collection.&lt;br /&gt;
* &#039;&#039;&#039;Menu de navigation&#039;&#039;&#039; construit sur l&#039;arborescence, jusqu&#039;à 3 niveaux (limite Shopify), reconstruit seulement quand l&#039;arborescence change. Droits &amp;lt;code&amp;gt;read_online_store_navigation&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;write_online_store_navigation&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Images&#039;&#039;&#039; de l&#039;onglet « Fichiers joints » envoyées dans les médias du produit : ajout, remplacement quand le fichier change, retrait quand il disparaît, sans doublon.&lt;br /&gt;
* &#039;&#039;&#039;Metafields&#039;&#039;&#039; : un attribut supplémentaire &#039;&#039;ou&#039;&#039; un champ standard (&amp;lt;code&amp;gt;@weight&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@length&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@width&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@height&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@surface&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@volume&amp;lt;/code&amp;gt;) publié avec conversion de type et d&#039;unité (texte riche, poids, dimension, volume, nombres, dates, listes). Une valeur vidée efface le metafield ; une valeur refusée par Shopify n&#039;empêche pas les autres et le job apparaît en échec.&lt;br /&gt;
* &#039;&#039;&#039;Poids d&#039;expédition&#039;&#039;&#039; : le poids Dolibarr publié sur la variante Shopify, pour le calcul des frais de port.&lt;br /&gt;
* &#039;&#039;&#039;Produit supprimé dans Dolibarr&#039;&#039;&#039; : passé en brouillon ou archivé sur Shopify, jamais supprimé.&lt;br /&gt;
&lt;br /&gt;
Le module ne touche qu&#039;à ce qu&#039;il a créé : une collection, un tag ou une image ajoutés à la main sur Shopify ne sont jamais retirés.&lt;br /&gt;
&lt;br /&gt;
=== Stock (sens selon la source de vérité) ===&lt;br /&gt;
&lt;br /&gt;
* Source de vérité &#039;&#039;&#039;Dolibarr&#039;&#039;&#039; : chaque mouvement de stock publie la quantité des entrepôts choisis sur l&#039;emplacement Shopify correspondant (écriture « comparer puis écrire », conforme aux API 2026-04 et suivantes). Les niveaux Shopify sont ignorés : l&#039;expédition Dolibarr sortira le stock vendu.&lt;br /&gt;
* Source de vérité &#039;&#039;&#039;Shopify&#039;&#039;&#039; : un niveau modifié sur Shopify ajuste l&#039;entrepôt Dolibarr associé à l&#039;emplacement.&lt;br /&gt;
* Quantité échangée : physique publiée par défaut ; « Physique » dans les deux sens, ou « Disponible » si Dolibarr décrémente le stock dès la validation de commande (le diagnostic le suggère).&lt;br /&gt;
&lt;br /&gt;
=== Expéditions (Dolibarr → Shopify) ===&lt;br /&gt;
&lt;br /&gt;
* À la validation d&#039;une expédition liée à une commande Shopify, la commande passe « expédiée » sur Shopify pour les articles et quantités réellement expédiés (expéditions partielles comprises).&lt;br /&gt;
* Numéro de suivi et transporteur (d&#039;après le mode d&#039;expédition) transmis ; Shopify envoie au client son e-mail d&#039;expédition (désactivable).&lt;br /&gt;
* Une expédition n&#039;est jamais déclarée deux fois ; les expéditions de commandes qui ne viennent pas de Shopify sont ignorées.&lt;br /&gt;
* Le stock d&#039;un article expédié est publié après la déclaration de l&#039;expédition, pour que Shopify ne le décompte pas deux fois.&lt;br /&gt;
&lt;br /&gt;
=== Étiquettes imprimées dans Shopify (Shopify → Dolibarr, option) ===&lt;br /&gt;
&lt;br /&gt;
Pour les boutiques qui impriment leurs étiquettes dans Shopify (Chronopost, Colissimo, Shopify Shipping) tout en gardant Dolibarr seul maître du stock, par exemple un entrepôt partagé avec le B2B :&lt;br /&gt;
&lt;br /&gt;
* Chaque expédition Shopify crée et valide l&#039;expédition Dolibarr de la commande (importée au passage si besoin), avec le numéro de suivi et le transporteur.&lt;br /&gt;
* L&#039;entrepôt est celui de l&#039;emplacement Shopify expéditeur (table entrepôts = emplacement).&lt;br /&gt;
* La validation sort le stock dans Dolibarr, qui le repousse vers Shopify : les sorties B2B ne sont jamais écrasées.&lt;br /&gt;
* Jamais plus que le reste à expédier de chaque ligne ; étiquettes antérieures à l&#039;activation ignorées ; étiquette annulée sur Shopify = expédition annulée et stock remis.&lt;br /&gt;
* Prérequis : module Expéditions et « Décrémenter le stock réel à la validation des expéditions » dans le module Stocks (contrôlés par le diagnostic).&lt;br /&gt;
&lt;br /&gt;
=== Remboursements (Shopify → Dolibarr) ===&lt;br /&gt;
&lt;br /&gt;
* Remboursement partiel : avoir d&#039;une ligne au montant rendu, au taux de TVA de la facture d&#039;origine.&lt;br /&gt;
* Remboursement total : avoir reprenant chaque ligne de la facture.&lt;br /&gt;
* L&#039;avoir reste en brouillon par défaut (validation en option). Un remboursement arrivé avant sa commande ou sa facture attend jusqu&#039;à une heure.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
 Webhook Shopify ─┐                          ┌─ Trigger Dolibarr&lt;br /&gt;
                  ▼                          ▼&lt;br /&gt;
             [ JobQueue ] ── cron process_queue ── [ SyncEngine ]&lt;br /&gt;
                  │                                     │&lt;br /&gt;
           [ MappingRepository ]                 [ Mappers × 6 ]&lt;br /&gt;
         (id ↔ id + hash anti-boucle)      (Order / Customer / Refund /&lt;br /&gt;
                                            Product / Inventory / Fulfillment)&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
* Modules Dolibarr &#039;&#039;&#039;Produits&#039;&#039;&#039;, &#039;&#039;&#039;Commandes&#039;&#039;&#039; et &#039;&#039;&#039;Tiers&#039;&#039;&#039; actifs ; &#039;&#039;&#039;Stocks&#039;&#039;&#039;, &#039;&#039;&#039;Expéditions&#039;&#039;&#039; et &#039;&#039;&#039;Factures&#039;&#039;&#039; selon les flux utilisés.&lt;br /&gt;
* Une &#039;&#039;&#039;application Shopify&#039;&#039;&#039; disposant des droits Admin API (products, orders, inventory, customers, fulfillments, locations ; &amp;lt;code&amp;gt;read_publications&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;write_publications&amp;lt;/code&amp;gt; pour publier les nouveautés sur la Boutique en ligne ; &amp;lt;code&amp;gt;read_online_store_navigation&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;write_online_store_navigation&amp;lt;/code&amp;gt; pour le menu). Selon son type, elle fournit un jeton &amp;lt;code&amp;gt;shpat_…&amp;lt;/code&amp;gt; à coller, ou un &#039;&#039;client ID&#039;&#039; et un &#039;&#039;client secret&#039;&#039; avec lesquels le module obtient et renouvelle le jeton lui-même.&lt;br /&gt;
* Pour le temps réel : un endpoint webhook &#039;&#039;&#039;HTTPS public&#039;&#039;&#039;. Voir ci-dessous le fonctionnement sans webhook.&lt;br /&gt;
&lt;br /&gt;
== Installation et mise à jour ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_shopifysync-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039; (ou remplacer le dossier &amp;lt;code&amp;gt;custom/shopifysync&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Activer &#039;&#039;&#039;Shopify Sync&#039;&#039;&#039; (famille « Interfaces avec des systèmes externes »).&lt;br /&gt;
# Après une mise à jour : cliquer sur &#039;&#039;&#039;« Inscrire les webhooks »&#039;&#039;&#039; pour ajouter les nouveaux sujets, puis sur « Tester la connexion ». Les réglages existants sont conservés et le comportement par défaut ne change pas.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Créer l&#039;application Shopify&#039;&#039;&#039; et l&#039;installer sur la boutique. ⚠️ Depuis le &#039;&#039;&#039;1{{er}} janvier 2026&#039;&#039;&#039;, Shopify ne permet plus de créer une application personnalisée depuis l&#039;admin (celles qui affichent un jeton &amp;lt;code&amp;gt;shpat_…&amp;lt;/code&amp;gt; à copier) ; les installations existantes continuent de fonctionner sans rien changer, et une nouvelle installation passe par le &#039;&#039;&#039;Dev Dashboard&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Choisir le mode d&#039;authentification&#039;&#039;&#039; dans la carte « Connexion » :&lt;br /&gt;
#* &#039;&#039;Jeton permanent collé&#039;&#039; — mode par défaut et historique : coller le jeton &amp;lt;code&amp;gt;shpat_…&amp;lt;/code&amp;gt; d&#039;une application personnalisée créée avant 2026. Rien ne change pour les installations en service.&lt;br /&gt;
#* &#039;&#039;Client ID et secret&#039;&#039; — recommandé pour une nouvelle installation : saisir le &#039;&#039;client ID&#039;&#039; et le &#039;&#039;client secret&#039;&#039; de l&#039;application du Dev Dashboard ; le module obtient un jeton valable 24 heures et le renouvelle seul.&lt;br /&gt;
#* &#039;&#039;Autorisation Shopify&#039;&#039; — installation par le flux d&#039;autorisation : déclarer comme &#039;&#039;redirect URL&#039;&#039; de l&#039;application l&#039;adresse affichée dans la configuration (&amp;lt;code&amp;gt;…/custom/shopifysync/oauth/callback.php&amp;lt;/code&amp;gt;), puis cliquer sur &#039;&#039;&#039;« Se reconnecter »&#039;&#039;&#039;. Le module reçoit un jeton d&#039;une heure et un jeton de rafraîchissement de 90 jours, tous deux renouvelés automatiquement.&lt;br /&gt;
# &#039;&#039;&#039;Connexion&#039;&#039;&#039; : domaine de la boutique, jeton (ou client ID et secret), app secret, version d&#039;API.&lt;br /&gt;
# &#039;&#039;&#039;Stock&#039;&#039;&#039; : emplacement Shopify et entrepôts, ou table « entrepôts = emplacement » (une règle par ligne, ex. &amp;lt;code&amp;gt;23 = gid://shopify/Location/85613641922&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Choisir les &#039;&#039;&#039;flux&#039;&#039;&#039; et les &#039;&#039;&#039;sources de vérité&#039;&#039;&#039;, puis cliquer sur &#039;&#039;&#039;« Inscrire les webhooks »&#039;&#039;&#039;.&lt;br /&gt;
# Catalogue déjà en place des deux côtés : &#039;&#039;&#039;« Rattacher les variantes par SKU »&#039;&#039;&#039;.&lt;br /&gt;
# Historique à reprendre : tableau de bord → &#039;&#039;&#039;« Rattraper les commandes des N derniers jours »&#039;&#039;&#039;.&lt;br /&gt;
# Activer les &#039;&#039;&#039;tâches planifiées&#039;&#039;&#039; Dolibarr : traitement de la file et réconciliation.&lt;br /&gt;
&lt;br /&gt;
=== Jetons d&#039;accès et échéances Shopify ===&lt;br /&gt;
&lt;br /&gt;
Un jeton expirable est renouvelé &#039;&#039;&#039;avant&#039;&#039;&#039; son échéance (marge de deux minutes) et &#039;&#039;&#039;immédiatement&#039;&#039;&#039; si Shopify le refuse en cours de route : la requête est alors rejouée avec le jeton neuf. La réconciliation nocturne force en plus un renouvellement, car un jeton de rafraîchissement inutilisé pendant 90 jours expire — une boutique calme perdrait sa connexion sans prévenir. L&#039;écran de diagnostic affiche le mode, l&#039;échéance du jeton et alerte quand le rafraîchissement approche de sa fin.&lt;br /&gt;
&lt;br /&gt;
Deux échéances Shopify à ne pas confondre :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1{{er}} janvier 2026&#039;&#039;&#039; — plus aucune création d&#039;application personnalisée depuis l&#039;admin Shopify. Concerne les &#039;&#039;&#039;nouvelles&#039;&#039;&#039; installations, qui passent par le Dev Dashboard.&lt;br /&gt;
* &#039;&#039;&#039;1{{er}} janvier 2027&#039;&#039;&#039; — jetons expirables obligatoires pour les &#039;&#039;&#039;applications publiques&#039;&#039;&#039; de l&#039;App Store. Les applications personnalisées et celles créées par le marchand ne sont pas visées : une installation existante n&#039;a rien à faire.&lt;br /&gt;
&lt;br /&gt;
L&#039;URL de retour d&#039;autorisation est protégée par trois contrôles avant tout enregistrement : signature HMAC de Shopify, jeton d&#039;état à usage unique valable 15 minutes, et domaine de boutique identique à celui configuré.&lt;br /&gt;
&lt;br /&gt;
=== Options (désactivées par défaut) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Option !! Effet&lt;br /&gt;
|-&lt;br /&gt;
| Valider la commande || La commande importée reçoit sa référence définitive (et sort le stock si Dolibarr décrémente à la validation).&lt;br /&gt;
|-&lt;br /&gt;
| Valider l&#039;avoir || L&#039;avoir créé par un remboursement est validé aussitôt.&lt;br /&gt;
|-&lt;br /&gt;
| Réaligner prix, SKU et code-barres || Chaque modification Dolibarr réécrit ces champs sur un produit Shopify déjà publié.&lt;br /&gt;
|-&lt;br /&gt;
| Suivre « en vente » || Un produit retiré de la vente dans Dolibarr passe en brouillon sur Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Prix envoyé selon la boutique || Prix TTC envoyés si la boutique affiche ses prix taxes incluses.&lt;br /&gt;
|-&lt;br /&gt;
| Catégories Dolibarr || Collections Shopify, tags, ou les deux, avec menu de navigation optionnel.&lt;br /&gt;
|-&lt;br /&gt;
| Images du produit || Fichiers joints envoyés dans les médias Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Poids d&#039;expédition || Poids Dolibarr publié sur la variante Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Produit supprimé dans Dolibarr || Brouillon ou archivage sur Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Étiquettes imprimées dans Shopify || Chaque expédition Shopify crée et valide l&#039;expédition Dolibarr, stock sorti par Dolibarr.&lt;br /&gt;
|-&lt;br /&gt;
| Ignorer les commandes de test || Les commandes passées avec la passerelle de test Shopify ne sont pas importées.&lt;br /&gt;
|-&lt;br /&gt;
| Publier sur la Boutique en ligne || Un produit créé par le module est rendu visible sur la boutique.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Autres réglages : service Dolibarr des frais de port, taux de TVA par défaut, quantité Shopify échangée, notification d&#039;expédition au client (active par défaut), règlement et compte bancaire des commandes payées.&lt;br /&gt;
&lt;br /&gt;
=== Tâches planifiées sous Dolibarr 24 ===&lt;br /&gt;
&lt;br /&gt;
Les deux tâches du module sont de type &amp;lt;code&amp;gt;command&amp;lt;/code&amp;gt; (exécution en ligne de commande). Depuis Dolibarr 24, une tâche CLI est comptée &#039;&#039;&#039;en erreur&#039;&#039;&#039; si la variable &amp;lt;code&amp;gt;$dolibarr_cron_allow_cli&amp;lt;/code&amp;gt; n&#039;est pas activée — en version 20 le cas était seulement journalisé. Ajoutez donc dans &amp;lt;code&amp;gt;conf/conf.php&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 $dolibarr_cron_allow_cli = 1;&lt;br /&gt;
&lt;br /&gt;
Sans cela, les tâches « ShopifySync » s&#039;affichent en rouge dans &#039;&#039;Outils → Tâches planifiées&#039;&#039; alors même que le module fonctionne. Sans tâche planifiée active, le bouton « Traiter la file maintenant » du tableau de bord exécute la file à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Fonctionnement sans endpoint webhook ===&lt;br /&gt;
&lt;br /&gt;
Le module reste utilisable derrière un hébergement fermé aux connexions entrantes : la réconciliation planifiée, qui n&#039;effectue que des appels sortants, rattrape les commandes, les paiements, les annulations et les remboursements. La fenêtre d&#039;analyse (2 jours par défaut) se règle par la constante &amp;lt;code&amp;gt;SHOPIFYSYNC_RECONCILE_WINDOW_DAYS&amp;lt;/code&amp;gt;. L&#039;import étant idempotent, le recouvrement entre deux passages ne crée pas de doublon. Les jobs terminés sont purgés après 30 jours et le journal après 90 jours.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.5.0 || Jetons d&#039;accès qui expirent pris en charge : mode « client ID et secret » (jeton de 24 h renouvelé par le module) et mode « autorisation Shopify » (jeton d&#039;une heure + rafraîchissement de 90 jours), renouvellement avant échéance et à la volée sur un refus, renouvellement préventif chaque nuit, bouton « Se reconnecter », URL de retour protégée par signature, état à usage unique et contrôle du domaine ; le mode « jeton permanent collé » reste le défaut et ne change pas&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.3 || Correctifs : contrôle strict des montants appliqué aussi au rejeu, règlement retenté quand son enregistrement avait échoué, remboursement en échec distingué d&#039;une attente de facture (job en échec au lieu d&#039;un classement silencieux), frais de port remboursés portés à leur propre taux de TVA, renommage vers un tag déjà saisi à la main qui n&#039;est plus adopté par le module&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.2 || Correctifs du contre-audit : frais de port refusés rendus à la commande et reposés au rejeu, quantité modifiée sur Shopify détectée, validation de commande et de facture rejouées à la reprise, option de contrôle strict des montants, remboursements limités aux transactions réellement abouties et répartis par taux de TVA, ligne d&#039;avoir refusée non enregistrée comme traitée, tags jamais adoptés et renommage limité aux produits suivis, renommage échoué réellement retenté au rejeu&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.1 || Correctifs : unité forcée des metafields réellement convertie (2 kg publiés en 2000 g) ; un tag Shopify saisi à la main n&#039;est plus retiré ; suppression de collection refusée signalée au lieu d&#039;être déclarée réussie ; erreurs de renommage de tag remontées ; remboursement de montant nul ne crée plus d&#039;avoir intégral ; commande dont une ligne a été refusée ni validée ni facturée, puis complétée au rejeu ; modification faite pendant un export conservée ; webhook non acquitté quand le job n&#039;a pas pu être enregistré&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.0 || Catégories Dolibarr en collections Shopify, tags et menu de navigation ; images des fiches envoyées dans les médias ; champs standards (poids, dimensions, volume) publiables en metafields avec conversion d&#039;unité ; poids d&#039;expédition ; metafields fiables (case décochée, valeur vidée, valeur refusée signalée sans bloquer les autres) ; produit supprimé dans Dolibarr passé en brouillon ou archivé&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.1 || Code client obligatoire géré (clients créés avec le code de la numérotation Dolibarr) ; ventes sans client (caisse Shopify POS) portées par un tiers unique configurable ; motif des refus journalisé ; étiquettes d&#039;un emplacement non géré ignorées&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.0 || Étiquettes imprimées dans Shopify (option) : expédition Dolibarr créée et validée sur l&#039;entrepôt de l&#039;emplacement expéditeur, stock sorti par Dolibarr qui reste seul maître, suivi et transporteur repris, annulation gérée, rattrapage par la réconciliation&lt;br /&gt;
|-&lt;br /&gt;
| 1.2.0 || Prix TTC, frais de port, date de vente, contact de livraison et clients invités à l&#039;import ; annulations Shopify ; expéditions partielles avec transporteur ; prix, SKU et code-barres posés à la création des produits ; import d&#039;un produit par variante ; suppressions Shopify gérées ; réconciliation des paiements, annulations et remboursements ; actions du tableau de bord ; options de validation et de réalignement (désactivées par défaut, aucun changement de comportement à la mise à jour) ; validé sur Dolibarr 18, 20 et 24&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.2 || Bouton « Synchroniser » des fiches commande ; facture créée quand le paiement arrive après l&#039;import&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.1 || Export de stock compatible avec les API Shopify 2026-04 et suivantes ; sonde de compatibilité multi-versions&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.0 || Tableau de bord et écrans redessinés, encart « État Shopify » sur les fiches ; rattachement par SKU d&#039;un catalogue existant ; stock multi-emplacements&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.2 || Produits à variantes (options Shopify, 1 SKU par combinaison, pagination jusqu&#039;à 2 048 variantes, refus au-delà de 3 attributs) ; stock multi-entrepôts ; metafields ; règlement automatique des commandes payées ; adresse de facturation complète ; bouton « Tester la connexion » ; remises Shopify à l&#039;import ; réconciliation par horodatage absolu et rattrapage des remboursements&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || Gestion des erreurs GraphQL renvoyées en chaîne ; version d&#039;API portée à 2026-01 ; &amp;lt;code&amp;gt;inventoryActivate&amp;lt;/code&amp;gt; avant écriture de stock ; correction critique de la création des lignes de commande&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : commandes, clients, remboursements, produits, stock, expéditions, webhooks signés, file d&#039;attente, tableau de bord&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Shopify_Sync&amp;diff=67403</id>
		<title>Module Shopify Sync</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Shopify_Sync&amp;diff=67403"/>
		<updated>2026-09-22T19:16:42Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Version 1.4.2 : correctifs du contre-audit (frais de port reposés au rejeu, quantité modifiée détectée, validations rejouées, contrôle strict des montants en option, remboursements par taux de TVA, tags limités à ceux posés par le module)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module Shopify Sync ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shopify Sync&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui assure une &#039;&#039;&#039;synchronisation bidirectionnelle quasi temps réel entre Shopify et Dolibarr&#039;&#039;&#039; : commandes, clients, remboursements, produits et variantes, stock et expéditions. Le module dialogue directement avec l&#039;API &#039;&#039;&#039;GraphQL Admin&#039;&#039;&#039; de Shopify — sans SaaS intermédiaire, sans abonnement supplémentaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Version || 1.4.2&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x (validé sur 18.0.5, 20.0.4 et 24.0.0)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum (extension cURL), validé jusqu&#039;à 8.2&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (cURL pur : pas de Composer, pas de SDK)&lt;br /&gt;
|-&lt;br /&gt;
! Version d&#039;API Shopify || 2026-01 par défaut, configurable ; appels vérifiés sur 2025-07, 2025-10, 2026-01, 2026-04, 2026-07 et unstable&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3218 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Commandes&#039;&#039;&#039; Shopify → Dolibarr : client (ou client invité), commande à la date de la vente, lignes reliées aux fiches produits, remises, &#039;&#039;&#039;frais de port&#039;&#039;&#039;, contact de livraison si l&#039;adresse diffère ; &#039;&#039;&#039;facture&#039;&#039;&#039; dès que la commande est payée, même après son import.&lt;br /&gt;
* &#039;&#039;&#039;Prix TTC ou HT&#039;&#039;&#039; : le module lit le réglage « taxes incluses » de la boutique, les montants importés correspondent à ce que le client a payé.&lt;br /&gt;
* &#039;&#039;&#039;Annulations&#039;&#039;&#039; Shopify répercutées sur la commande Dolibarr.&lt;br /&gt;
* &#039;&#039;&#039;Remboursements&#039;&#039;&#039; → avoirs Dolibarr : partiel (montant réellement rendu) ou total (avoir miroir ligne à ligne).&lt;br /&gt;
* &#039;&#039;&#039;Expéditions&#039;&#039;&#039; Dolibarr → Shopify : articles et quantités expédiés, numéro de suivi et transporteur ; expéditions partielles gérées. En option, l&#039;inverse : une étiquette imprimée dans Shopify crée et valide l&#039;expédition Dolibarr.&lt;br /&gt;
* &#039;&#039;&#039;Produits&#039;&#039;&#039; dans les deux sens, avec une &#039;&#039;&#039;source de vérité configurable&#039;&#039;&#039; (produits, prix, stock).&lt;br /&gt;
* &#039;&#039;&#039;Catalogue existant&#039;&#039;&#039; : rattachement par SKU des variantes Shopify aux fiches Dolibarr existantes, sans produit parent ni module Variants.&lt;br /&gt;
* &#039;&#039;&#039;Produits à variantes&#039;&#039;&#039; (module Variants) : les attributs Dolibarr deviennent des options Shopify, une variante par combinaison. Limites de la boutique lues à l&#039;exécution (2 048 variantes, 3 options).&lt;br /&gt;
* &#039;&#039;&#039;Stock multi-emplacements&#039;&#039;&#039; : table « entrepôts Dolibarr = emplacement Shopify », ou un emplacement unique alimenté par les entrepôts choisis.&lt;br /&gt;
* &#039;&#039;&#039;Metafields&#039;&#039;&#039; : attributs supplémentaires et champs standards (poids, dimensions, volume) publiés vers Shopify, avec conversion de type et d&#039;unité.&lt;br /&gt;
* &#039;&#039;&#039;Catégories, images, poids&#039;&#039;&#039; : collections et tags Shopify, menu de navigation, images des fiches, poids d&#039;expédition (options).&lt;br /&gt;
* &#039;&#039;&#039;Webhooks signés HMAC&#039;&#039;&#039; pour le quasi temps réel, doublés d&#039;une &#039;&#039;&#039;réconciliation planifiée&#039;&#039;&#039; qui rattrape commandes, paiements, annulations et remboursements manqués.&lt;br /&gt;
* &#039;&#039;&#039;File d&#039;attente asynchrone&#039;&#039;&#039; : limites de débit de l&#039;API absorbées, nouvelles tentatives sûres, aucun job traité deux fois.&lt;br /&gt;
* &#039;&#039;&#039;Anti-boucle&#039;&#039;&#039; par empreinte d&#039;état, et &#039;&#039;&#039;résolution de conflits&#039;&#039;&#039; configurable.&lt;br /&gt;
* &#039;&#039;&#039;Tableau de bord&#039;&#039;&#039; : file d&#039;attente, échecs, journal ; traiter la file maintenant, relancer les échecs, rattraper les commandes des N derniers jours.&lt;br /&gt;
* &#039;&#039;&#039;Encart « État Shopify »&#039;&#039;&#039; sur les fiches produit et commande, avec bouton « Synchroniser ».&lt;br /&gt;
* Bouton &#039;&#039;&#039;« Tester la connexion »&#039;&#039;&#039; : contrôles de configuration, droits, emplacements, webhooks et tâches planifiées, chacun avec le correctif suggéré.&lt;br /&gt;
* Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Ce qui est synchronisé, flux par flux ==&lt;br /&gt;
&lt;br /&gt;
Chaque flux s&#039;active ou se coupe indépendamment dans la configuration (carte « Flux synchronisés »).&lt;br /&gt;
&lt;br /&gt;
=== Commandes (Shopify → Dolibarr) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Événement Shopify !! Effet dans Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
| Commande créée || Tiers retrouvé par e-mail (sinon créé, avec l&#039;adresse de facturation et le pays) ; commande datée du jour de la vente, référence client = numéro Shopify ; une ligne par article, reliée à la fiche par la variante ou le SKU ; remises ; ligne « Frais de port » ; contact de livraison si l&#039;adresse diffère. La commande reste en &#039;&#039;&#039;brouillon&#039;&#039;&#039; (validation automatique en option).&lt;br /&gt;
|-&lt;br /&gt;
| Commande payée (tout de suite ou plus tard) || Facture créée depuis la commande et validée ; règlement enregistré en option (mode de paiement et compte bancaire au choix).&lt;br /&gt;
|-&lt;br /&gt;
| Commande annulée || Commande Dolibarr annulée, sauf si une expédition est déjà en cours.&lt;br /&gt;
|-&lt;br /&gt;
| Commande de test (passerelle de test Shopify) || Importée et signalée comme telle ; peut être ignorée par option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Un tiers existant n&#039;est jamais renommé par une commande : seuls les champs vides sont complétés.&lt;br /&gt;
&lt;br /&gt;
Ventes sans client (caisse Shopify POS, commandes anonymes) : portées par un seul tiers, choisi dans la configuration, ou « Client comptoir (Shopify) » créé automatiquement. Le code client est attribué par la numérotation Dolibarr, y compris quand il est obligatoire.&lt;br /&gt;
&lt;br /&gt;
=== Clients (dans les deux sens) ===&lt;br /&gt;
&lt;br /&gt;
* Shopify → Dolibarr : un client créé ou modifié met à jour son tiers (nom, e-mail, adresse, téléphone, pays, province). Une raison sociale Shopify devient le nom du tiers.&lt;br /&gt;
* Dolibarr → Shopify : un tiers client créé ou modifié est publié (prénom, nom, e-mail, téléphone). Un tiers sans e-mail ni téléphone n&#039;est pas publié (exigence Shopify).&lt;br /&gt;
* Client supprimé sur Shopify : le lien est retiré, le tiers Dolibarr est conservé.&lt;br /&gt;
&lt;br /&gt;
=== Produits (dans les deux sens) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Sens !! Création !! Modification&lt;br /&gt;
|-&lt;br /&gt;
| Dolibarr → Shopify (source de vérité produits = Dolibarr) || Produit Shopify avec titre, description, prix, SKU (= référence), code-barres, suivi de stock, statut actif si la fiche est en vente, sinon brouillon. Publication sur la Boutique en ligne en option. || Titre, description et metafields. Prix, SKU et code-barres seulement si l&#039;option « Réaligner prix, SKU et code-barres » est cochée ; statut seulement si « Suivre en vente » est cochée.&lt;br /&gt;
|-&lt;br /&gt;
| Shopify → Dolibarr || Fiche Dolibarr (référence = SKU, libellé, prix, code-barres, statut) ; une fiche par variante pour un produit à plusieurs variantes. Si le SKU correspond à une référence existante, la fiche est &#039;&#039;&#039;rattachée&#039;&#039;&#039; sans être modifiée. || Libellé. Prix seulement si Shopify est source de vérité des prix ; statut et code-barres seulement si Shopify est source de vérité des produits.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Produit supprimé sur Shopify : liens retirés, fiche Dolibarr conservée, jamais recréée d&#039;office (le bouton « Synchroniser » de la fiche la republie).&lt;br /&gt;
* Fiche rattachée par SKU : utilisée pour les commandes et le stock ; son titre, sa description et son prix ne sont jamais réécrits.&lt;br /&gt;
* Prix envoyé à Shopify : HT de la fiche par défaut (fonctionnement historique), ou TTC si la boutique est en TTC (option « selon la boutique »).&lt;br /&gt;
&lt;br /&gt;
=== Catégories, images et champs produit (Dolibarr → Shopify, options) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Catégories&#039;&#039;&#039; : chaque catégorie produit devient une &#039;&#039;&#039;collection&#039;&#039;&#039; Shopify, un &#039;&#039;&#039;tag&#039;&#039;&#039;, ou les deux. Le produit rejoint et quitte les collections selon ses catégories ; une collection parente peut contenir les produits de ses sous-catégories ; une catégorie renommée ou supprimée entraîne sa collection.&lt;br /&gt;
* &#039;&#039;&#039;Menu de navigation&#039;&#039;&#039; construit sur l&#039;arborescence, jusqu&#039;à 3 niveaux (limite Shopify), reconstruit seulement quand l&#039;arborescence change. Droits &amp;lt;code&amp;gt;read_online_store_navigation&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;write_online_store_navigation&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Images&#039;&#039;&#039; de l&#039;onglet « Fichiers joints » envoyées dans les médias du produit : ajout, remplacement quand le fichier change, retrait quand il disparaît, sans doublon.&lt;br /&gt;
* &#039;&#039;&#039;Metafields&#039;&#039;&#039; : un attribut supplémentaire &#039;&#039;ou&#039;&#039; un champ standard (&amp;lt;code&amp;gt;@weight&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@length&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@width&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@height&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@surface&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@volume&amp;lt;/code&amp;gt;) publié avec conversion de type et d&#039;unité (texte riche, poids, dimension, volume, nombres, dates, listes). Une valeur vidée efface le metafield ; une valeur refusée par Shopify n&#039;empêche pas les autres et le job apparaît en échec.&lt;br /&gt;
* &#039;&#039;&#039;Poids d&#039;expédition&#039;&#039;&#039; : le poids Dolibarr publié sur la variante Shopify, pour le calcul des frais de port.&lt;br /&gt;
* &#039;&#039;&#039;Produit supprimé dans Dolibarr&#039;&#039;&#039; : passé en brouillon ou archivé sur Shopify, jamais supprimé.&lt;br /&gt;
&lt;br /&gt;
Le module ne touche qu&#039;à ce qu&#039;il a créé : une collection, un tag ou une image ajoutés à la main sur Shopify ne sont jamais retirés.&lt;br /&gt;
&lt;br /&gt;
=== Stock (sens selon la source de vérité) ===&lt;br /&gt;
&lt;br /&gt;
* Source de vérité &#039;&#039;&#039;Dolibarr&#039;&#039;&#039; : chaque mouvement de stock publie la quantité des entrepôts choisis sur l&#039;emplacement Shopify correspondant (écriture « comparer puis écrire », conforme aux API 2026-04 et suivantes). Les niveaux Shopify sont ignorés : l&#039;expédition Dolibarr sortira le stock vendu.&lt;br /&gt;
* Source de vérité &#039;&#039;&#039;Shopify&#039;&#039;&#039; : un niveau modifié sur Shopify ajuste l&#039;entrepôt Dolibarr associé à l&#039;emplacement.&lt;br /&gt;
* Quantité échangée : physique publiée par défaut ; « Physique » dans les deux sens, ou « Disponible » si Dolibarr décrémente le stock dès la validation de commande (le diagnostic le suggère).&lt;br /&gt;
&lt;br /&gt;
=== Expéditions (Dolibarr → Shopify) ===&lt;br /&gt;
&lt;br /&gt;
* À la validation d&#039;une expédition liée à une commande Shopify, la commande passe « expédiée » sur Shopify pour les articles et quantités réellement expédiés (expéditions partielles comprises).&lt;br /&gt;
* Numéro de suivi et transporteur (d&#039;après le mode d&#039;expédition) transmis ; Shopify envoie au client son e-mail d&#039;expédition (désactivable).&lt;br /&gt;
* Une expédition n&#039;est jamais déclarée deux fois ; les expéditions de commandes qui ne viennent pas de Shopify sont ignorées.&lt;br /&gt;
* Le stock d&#039;un article expédié est publié après la déclaration de l&#039;expédition, pour que Shopify ne le décompte pas deux fois.&lt;br /&gt;
&lt;br /&gt;
=== Étiquettes imprimées dans Shopify (Shopify → Dolibarr, option) ===&lt;br /&gt;
&lt;br /&gt;
Pour les boutiques qui impriment leurs étiquettes dans Shopify (Chronopost, Colissimo, Shopify Shipping) tout en gardant Dolibarr seul maître du stock, par exemple un entrepôt partagé avec le B2B :&lt;br /&gt;
&lt;br /&gt;
* Chaque expédition Shopify crée et valide l&#039;expédition Dolibarr de la commande (importée au passage si besoin), avec le numéro de suivi et le transporteur.&lt;br /&gt;
* L&#039;entrepôt est celui de l&#039;emplacement Shopify expéditeur (table entrepôts = emplacement).&lt;br /&gt;
* La validation sort le stock dans Dolibarr, qui le repousse vers Shopify : les sorties B2B ne sont jamais écrasées.&lt;br /&gt;
* Jamais plus que le reste à expédier de chaque ligne ; étiquettes antérieures à l&#039;activation ignorées ; étiquette annulée sur Shopify = expédition annulée et stock remis.&lt;br /&gt;
* Prérequis : module Expéditions et « Décrémenter le stock réel à la validation des expéditions » dans le module Stocks (contrôlés par le diagnostic).&lt;br /&gt;
&lt;br /&gt;
=== Remboursements (Shopify → Dolibarr) ===&lt;br /&gt;
&lt;br /&gt;
* Remboursement partiel : avoir d&#039;une ligne au montant rendu, au taux de TVA de la facture d&#039;origine.&lt;br /&gt;
* Remboursement total : avoir reprenant chaque ligne de la facture.&lt;br /&gt;
* L&#039;avoir reste en brouillon par défaut (validation en option). Un remboursement arrivé avant sa commande ou sa facture attend jusqu&#039;à une heure.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
 Webhook Shopify ─┐                          ┌─ Trigger Dolibarr&lt;br /&gt;
                  ▼                          ▼&lt;br /&gt;
             [ JobQueue ] ── cron process_queue ── [ SyncEngine ]&lt;br /&gt;
                  │                                     │&lt;br /&gt;
           [ MappingRepository ]                 [ Mappers × 6 ]&lt;br /&gt;
         (id ↔ id + hash anti-boucle)      (Order / Customer / Refund /&lt;br /&gt;
                                            Product / Inventory / Fulfillment)&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
* Modules Dolibarr &#039;&#039;&#039;Produits&#039;&#039;&#039;, &#039;&#039;&#039;Commandes&#039;&#039;&#039; et &#039;&#039;&#039;Tiers&#039;&#039;&#039; actifs ; &#039;&#039;&#039;Stocks&#039;&#039;&#039;, &#039;&#039;&#039;Expéditions&#039;&#039;&#039; et &#039;&#039;&#039;Factures&#039;&#039;&#039; selon les flux utilisés.&lt;br /&gt;
* Une &#039;&#039;&#039;custom app Shopify&#039;&#039;&#039; disposant des droits Admin API (products, orders, inventory, customers, fulfillments, locations ; &amp;lt;code&amp;gt;read_publications&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;write_publications&amp;lt;/code&amp;gt; pour publier les nouveautés sur la Boutique en ligne), installée sur la boutique — elle fournit l&#039;&#039;&#039;Admin API access token&#039;&#039; (&amp;lt;code&amp;gt;shpat_…&amp;lt;/code&amp;gt;) et l&#039;&#039;&#039;app secret&#039;&#039;.&lt;br /&gt;
* Pour le temps réel : un endpoint webhook &#039;&#039;&#039;HTTPS public&#039;&#039;&#039;. Voir ci-dessous le fonctionnement sans webhook.&lt;br /&gt;
&lt;br /&gt;
== Installation et mise à jour ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_shopifysync-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039; (ou remplacer le dossier &amp;lt;code&amp;gt;custom/shopifysync&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Activer &#039;&#039;&#039;Shopify Sync&#039;&#039;&#039; (famille « Interfaces avec des systèmes externes »).&lt;br /&gt;
# Après une mise à jour : cliquer sur &#039;&#039;&#039;« Inscrire les webhooks »&#039;&#039;&#039; pour ajouter les nouveaux sujets, puis sur « Tester la connexion ». Les réglages existants sont conservés et le comportement par défaut ne change pas.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Créer l&#039;app Shopify&#039;&#039;&#039; et l&#039;installer sur la boutique :&lt;br /&gt;
#* &#039;&#039;Boutiques récentes&#039;&#039; — Shopify admin → &#039;&#039;Settings → Apps → Develop apps&#039;&#039; redirige vers le Dev Dashboard → &#039;&#039;Create app&#039;&#039; → &#039;&#039;Scopes&#039;&#039; → &#039;&#039;Install app&#039;&#039; ; le jeton s&#039;obtient par l&#039;installation OAuth.&lt;br /&gt;
#* &#039;&#039;Boutiques plus anciennes&#039;&#039; — &#039;&#039;Settings → Apps → Develop apps → Create app&#039;&#039; affiche directement l&#039;Admin API access token après installation.&lt;br /&gt;
# &#039;&#039;&#039;Connexion&#039;&#039;&#039; : domaine de la boutique, jeton, app secret, version d&#039;API.&lt;br /&gt;
# &#039;&#039;&#039;Stock&#039;&#039;&#039; : emplacement Shopify et entrepôts, ou table « entrepôts = emplacement » (une règle par ligne, ex. &amp;lt;code&amp;gt;23 = gid://shopify/Location/85613641922&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Choisir les &#039;&#039;&#039;flux&#039;&#039;&#039; et les &#039;&#039;&#039;sources de vérité&#039;&#039;&#039;, puis cliquer sur &#039;&#039;&#039;« Inscrire les webhooks »&#039;&#039;&#039;.&lt;br /&gt;
# Catalogue déjà en place des deux côtés : &#039;&#039;&#039;« Rattacher les variantes par SKU »&#039;&#039;&#039;.&lt;br /&gt;
# Historique à reprendre : tableau de bord → &#039;&#039;&#039;« Rattraper les commandes des N derniers jours »&#039;&#039;&#039;.&lt;br /&gt;
# Activer les &#039;&#039;&#039;tâches planifiées&#039;&#039;&#039; Dolibarr : traitement de la file et réconciliation.&lt;br /&gt;
&lt;br /&gt;
=== Options (désactivées par défaut) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Option !! Effet&lt;br /&gt;
|-&lt;br /&gt;
| Valider la commande || La commande importée reçoit sa référence définitive (et sort le stock si Dolibarr décrémente à la validation).&lt;br /&gt;
|-&lt;br /&gt;
| Valider l&#039;avoir || L&#039;avoir créé par un remboursement est validé aussitôt.&lt;br /&gt;
|-&lt;br /&gt;
| Réaligner prix, SKU et code-barres || Chaque modification Dolibarr réécrit ces champs sur un produit Shopify déjà publié.&lt;br /&gt;
|-&lt;br /&gt;
| Suivre « en vente » || Un produit retiré de la vente dans Dolibarr passe en brouillon sur Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Prix envoyé selon la boutique || Prix TTC envoyés si la boutique affiche ses prix taxes incluses.&lt;br /&gt;
|-&lt;br /&gt;
| Catégories Dolibarr || Collections Shopify, tags, ou les deux, avec menu de navigation optionnel.&lt;br /&gt;
|-&lt;br /&gt;
| Images du produit || Fichiers joints envoyés dans les médias Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Poids d&#039;expédition || Poids Dolibarr publié sur la variante Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Produit supprimé dans Dolibarr || Brouillon ou archivage sur Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Étiquettes imprimées dans Shopify || Chaque expédition Shopify crée et valide l&#039;expédition Dolibarr, stock sorti par Dolibarr.&lt;br /&gt;
|-&lt;br /&gt;
| Ignorer les commandes de test || Les commandes passées avec la passerelle de test Shopify ne sont pas importées.&lt;br /&gt;
|-&lt;br /&gt;
| Publier sur la Boutique en ligne || Un produit créé par le module est rendu visible sur la boutique.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Autres réglages : service Dolibarr des frais de port, taux de TVA par défaut, quantité Shopify échangée, notification d&#039;expédition au client (active par défaut), règlement et compte bancaire des commandes payées.&lt;br /&gt;
&lt;br /&gt;
=== Tâches planifiées sous Dolibarr 24 ===&lt;br /&gt;
&lt;br /&gt;
Les deux tâches du module sont de type &amp;lt;code&amp;gt;command&amp;lt;/code&amp;gt; (exécution en ligne de commande). Depuis Dolibarr 24, une tâche CLI est comptée &#039;&#039;&#039;en erreur&#039;&#039;&#039; si la variable &amp;lt;code&amp;gt;$dolibarr_cron_allow_cli&amp;lt;/code&amp;gt; n&#039;est pas activée — en version 20 le cas était seulement journalisé. Ajoutez donc dans &amp;lt;code&amp;gt;conf/conf.php&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 $dolibarr_cron_allow_cli = 1;&lt;br /&gt;
&lt;br /&gt;
Sans cela, les tâches « ShopifySync » s&#039;affichent en rouge dans &#039;&#039;Outils → Tâches planifiées&#039;&#039; alors même que le module fonctionne. Sans tâche planifiée active, le bouton « Traiter la file maintenant » du tableau de bord exécute la file à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Fonctionnement sans endpoint webhook ===&lt;br /&gt;
&lt;br /&gt;
Le module reste utilisable derrière un hébergement fermé aux connexions entrantes : la réconciliation planifiée, qui n&#039;effectue que des appels sortants, rattrape les commandes, les paiements, les annulations et les remboursements. La fenêtre d&#039;analyse (2 jours par défaut) se règle par la constante &amp;lt;code&amp;gt;SHOPIFYSYNC_RECONCILE_WINDOW_DAYS&amp;lt;/code&amp;gt;. L&#039;import étant idempotent, le recouvrement entre deux passages ne crée pas de doublon. Les jobs terminés sont purgés après 30 jours et le journal après 90 jours.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.2 || Correctifs du contre-audit : frais de port refusés rendus à la commande et reposés au rejeu, quantité modifiée sur Shopify détectée, validation de commande et de facture rejouées à la reprise, option de contrôle strict des montants, remboursements limités aux transactions réellement abouties et répartis par taux de TVA, ligne d&#039;avoir refusée non enregistrée comme traitée, tags jamais adoptés et renommage limité aux produits suivis, renommage échoué réellement retenté au rejeu&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.1 || Correctifs : unité forcée des metafields réellement convertie (2 kg publiés en 2000 g) ; un tag Shopify saisi à la main n&#039;est plus retiré ; suppression de collection refusée signalée au lieu d&#039;être déclarée réussie ; erreurs de renommage de tag remontées ; remboursement de montant nul ne crée plus d&#039;avoir intégral ; commande dont une ligne a été refusée ni validée ni facturée, puis complétée au rejeu ; modification faite pendant un export conservée ; webhook non acquitté quand le job n&#039;a pas pu être enregistré&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.0 || Catégories Dolibarr en collections Shopify, tags et menu de navigation ; images des fiches envoyées dans les médias ; champs standards (poids, dimensions, volume) publiables en metafields avec conversion d&#039;unité ; poids d&#039;expédition ; metafields fiables (case décochée, valeur vidée, valeur refusée signalée sans bloquer les autres) ; produit supprimé dans Dolibarr passé en brouillon ou archivé&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.1 || Code client obligatoire géré (clients créés avec le code de la numérotation Dolibarr) ; ventes sans client (caisse Shopify POS) portées par un tiers unique configurable ; motif des refus journalisé ; étiquettes d&#039;un emplacement non géré ignorées&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.0 || Étiquettes imprimées dans Shopify (option) : expédition Dolibarr créée et validée sur l&#039;entrepôt de l&#039;emplacement expéditeur, stock sorti par Dolibarr qui reste seul maître, suivi et transporteur repris, annulation gérée, rattrapage par la réconciliation&lt;br /&gt;
|-&lt;br /&gt;
| 1.2.0 || Prix TTC, frais de port, date de vente, contact de livraison et clients invités à l&#039;import ; annulations Shopify ; expéditions partielles avec transporteur ; prix, SKU et code-barres posés à la création des produits ; import d&#039;un produit par variante ; suppressions Shopify gérées ; réconciliation des paiements, annulations et remboursements ; actions du tableau de bord ; options de validation et de réalignement (désactivées par défaut, aucun changement de comportement à la mise à jour) ; validé sur Dolibarr 18, 20 et 24&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.2 || Bouton « Synchroniser » des fiches commande ; facture créée quand le paiement arrive après l&#039;import&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.1 || Export de stock compatible avec les API Shopify 2026-04 et suivantes ; sonde de compatibilité multi-versions&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.0 || Tableau de bord et écrans redessinés, encart « État Shopify » sur les fiches ; rattachement par SKU d&#039;un catalogue existant ; stock multi-emplacements&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.2 || Produits à variantes (options Shopify, 1 SKU par combinaison, pagination jusqu&#039;à 2 048 variantes, refus au-delà de 3 attributs) ; stock multi-entrepôts ; metafields ; règlement automatique des commandes payées ; adresse de facturation complète ; bouton « Tester la connexion » ; remises Shopify à l&#039;import ; réconciliation par horodatage absolu et rattrapage des remboursements&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || Gestion des erreurs GraphQL renvoyées en chaîne ; version d&#039;API portée à 2026-01 ; &amp;lt;code&amp;gt;inventoryActivate&amp;lt;/code&amp;gt; avant écriture de stock ; correction critique de la création des lignes de commande&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : commandes, clients, remboursements, produits, stock, expéditions, webhooks signés, file d&#039;attente, tableau de bord&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Shopify_Sync&amp;diff=67402</id>
		<title>Module Shopify Sync</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Shopify_Sync&amp;diff=67402"/>
		<updated>2026-09-22T18:53:21Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Version 1.4.1 : correctifs (unité forcée des metafields convertie, tags posés à la main préservés, refus Shopify remontés, remboursement nul, commande incomplète réparée au rejeu, modification pendant export, webhook non acquitté)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module Shopify Sync ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shopify Sync&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui assure une &#039;&#039;&#039;synchronisation bidirectionnelle quasi temps réel entre Shopify et Dolibarr&#039;&#039;&#039; : commandes, clients, remboursements, produits et variantes, stock et expéditions. Le module dialogue directement avec l&#039;API &#039;&#039;&#039;GraphQL Admin&#039;&#039;&#039; de Shopify — sans SaaS intermédiaire, sans abonnement supplémentaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Version || 1.4.1&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x (validé sur 18.0.5, 20.0.4 et 24.0.0)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum (extension cURL), validé jusqu&#039;à 8.2&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (cURL pur : pas de Composer, pas de SDK)&lt;br /&gt;
|-&lt;br /&gt;
! Version d&#039;API Shopify || 2026-01 par défaut, configurable ; appels vérifiés sur 2025-07, 2025-10, 2026-01, 2026-04, 2026-07 et unstable&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3218 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Commandes&#039;&#039;&#039; Shopify → Dolibarr : client (ou client invité), commande à la date de la vente, lignes reliées aux fiches produits, remises, &#039;&#039;&#039;frais de port&#039;&#039;&#039;, contact de livraison si l&#039;adresse diffère ; &#039;&#039;&#039;facture&#039;&#039;&#039; dès que la commande est payée, même après son import.&lt;br /&gt;
* &#039;&#039;&#039;Prix TTC ou HT&#039;&#039;&#039; : le module lit le réglage « taxes incluses » de la boutique, les montants importés correspondent à ce que le client a payé.&lt;br /&gt;
* &#039;&#039;&#039;Annulations&#039;&#039;&#039; Shopify répercutées sur la commande Dolibarr.&lt;br /&gt;
* &#039;&#039;&#039;Remboursements&#039;&#039;&#039; → avoirs Dolibarr : partiel (montant réellement rendu) ou total (avoir miroir ligne à ligne).&lt;br /&gt;
* &#039;&#039;&#039;Expéditions&#039;&#039;&#039; Dolibarr → Shopify : articles et quantités expédiés, numéro de suivi et transporteur ; expéditions partielles gérées. En option, l&#039;inverse : une étiquette imprimée dans Shopify crée et valide l&#039;expédition Dolibarr.&lt;br /&gt;
* &#039;&#039;&#039;Produits&#039;&#039;&#039; dans les deux sens, avec une &#039;&#039;&#039;source de vérité configurable&#039;&#039;&#039; (produits, prix, stock).&lt;br /&gt;
* &#039;&#039;&#039;Catalogue existant&#039;&#039;&#039; : rattachement par SKU des variantes Shopify aux fiches Dolibarr existantes, sans produit parent ni module Variants.&lt;br /&gt;
* &#039;&#039;&#039;Produits à variantes&#039;&#039;&#039; (module Variants) : les attributs Dolibarr deviennent des options Shopify, une variante par combinaison. Limites de la boutique lues à l&#039;exécution (2 048 variantes, 3 options).&lt;br /&gt;
* &#039;&#039;&#039;Stock multi-emplacements&#039;&#039;&#039; : table « entrepôts Dolibarr = emplacement Shopify », ou un emplacement unique alimenté par les entrepôts choisis.&lt;br /&gt;
* &#039;&#039;&#039;Metafields&#039;&#039;&#039; : attributs supplémentaires et champs standards (poids, dimensions, volume) publiés vers Shopify, avec conversion de type et d&#039;unité.&lt;br /&gt;
* &#039;&#039;&#039;Catégories, images, poids&#039;&#039;&#039; : collections et tags Shopify, menu de navigation, images des fiches, poids d&#039;expédition (options).&lt;br /&gt;
* &#039;&#039;&#039;Webhooks signés HMAC&#039;&#039;&#039; pour le quasi temps réel, doublés d&#039;une &#039;&#039;&#039;réconciliation planifiée&#039;&#039;&#039; qui rattrape commandes, paiements, annulations et remboursements manqués.&lt;br /&gt;
* &#039;&#039;&#039;File d&#039;attente asynchrone&#039;&#039;&#039; : limites de débit de l&#039;API absorbées, nouvelles tentatives sûres, aucun job traité deux fois.&lt;br /&gt;
* &#039;&#039;&#039;Anti-boucle&#039;&#039;&#039; par empreinte d&#039;état, et &#039;&#039;&#039;résolution de conflits&#039;&#039;&#039; configurable.&lt;br /&gt;
* &#039;&#039;&#039;Tableau de bord&#039;&#039;&#039; : file d&#039;attente, échecs, journal ; traiter la file maintenant, relancer les échecs, rattraper les commandes des N derniers jours.&lt;br /&gt;
* &#039;&#039;&#039;Encart « État Shopify »&#039;&#039;&#039; sur les fiches produit et commande, avec bouton « Synchroniser ».&lt;br /&gt;
* Bouton &#039;&#039;&#039;« Tester la connexion »&#039;&#039;&#039; : contrôles de configuration, droits, emplacements, webhooks et tâches planifiées, chacun avec le correctif suggéré.&lt;br /&gt;
* Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Ce qui est synchronisé, flux par flux ==&lt;br /&gt;
&lt;br /&gt;
Chaque flux s&#039;active ou se coupe indépendamment dans la configuration (carte « Flux synchronisés »).&lt;br /&gt;
&lt;br /&gt;
=== Commandes (Shopify → Dolibarr) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Événement Shopify !! Effet dans Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
| Commande créée || Tiers retrouvé par e-mail (sinon créé, avec l&#039;adresse de facturation et le pays) ; commande datée du jour de la vente, référence client = numéro Shopify ; une ligne par article, reliée à la fiche par la variante ou le SKU ; remises ; ligne « Frais de port » ; contact de livraison si l&#039;adresse diffère. La commande reste en &#039;&#039;&#039;brouillon&#039;&#039;&#039; (validation automatique en option).&lt;br /&gt;
|-&lt;br /&gt;
| Commande payée (tout de suite ou plus tard) || Facture créée depuis la commande et validée ; règlement enregistré en option (mode de paiement et compte bancaire au choix).&lt;br /&gt;
|-&lt;br /&gt;
| Commande annulée || Commande Dolibarr annulée, sauf si une expédition est déjà en cours.&lt;br /&gt;
|-&lt;br /&gt;
| Commande de test (passerelle de test Shopify) || Importée et signalée comme telle ; peut être ignorée par option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Un tiers existant n&#039;est jamais renommé par une commande : seuls les champs vides sont complétés.&lt;br /&gt;
&lt;br /&gt;
Ventes sans client (caisse Shopify POS, commandes anonymes) : portées par un seul tiers, choisi dans la configuration, ou « Client comptoir (Shopify) » créé automatiquement. Le code client est attribué par la numérotation Dolibarr, y compris quand il est obligatoire.&lt;br /&gt;
&lt;br /&gt;
=== Clients (dans les deux sens) ===&lt;br /&gt;
&lt;br /&gt;
* Shopify → Dolibarr : un client créé ou modifié met à jour son tiers (nom, e-mail, adresse, téléphone, pays, province). Une raison sociale Shopify devient le nom du tiers.&lt;br /&gt;
* Dolibarr → Shopify : un tiers client créé ou modifié est publié (prénom, nom, e-mail, téléphone). Un tiers sans e-mail ni téléphone n&#039;est pas publié (exigence Shopify).&lt;br /&gt;
* Client supprimé sur Shopify : le lien est retiré, le tiers Dolibarr est conservé.&lt;br /&gt;
&lt;br /&gt;
=== Produits (dans les deux sens) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Sens !! Création !! Modification&lt;br /&gt;
|-&lt;br /&gt;
| Dolibarr → Shopify (source de vérité produits = Dolibarr) || Produit Shopify avec titre, description, prix, SKU (= référence), code-barres, suivi de stock, statut actif si la fiche est en vente, sinon brouillon. Publication sur la Boutique en ligne en option. || Titre, description et metafields. Prix, SKU et code-barres seulement si l&#039;option « Réaligner prix, SKU et code-barres » est cochée ; statut seulement si « Suivre en vente » est cochée.&lt;br /&gt;
|-&lt;br /&gt;
| Shopify → Dolibarr || Fiche Dolibarr (référence = SKU, libellé, prix, code-barres, statut) ; une fiche par variante pour un produit à plusieurs variantes. Si le SKU correspond à une référence existante, la fiche est &#039;&#039;&#039;rattachée&#039;&#039;&#039; sans être modifiée. || Libellé. Prix seulement si Shopify est source de vérité des prix ; statut et code-barres seulement si Shopify est source de vérité des produits.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Produit supprimé sur Shopify : liens retirés, fiche Dolibarr conservée, jamais recréée d&#039;office (le bouton « Synchroniser » de la fiche la republie).&lt;br /&gt;
* Fiche rattachée par SKU : utilisée pour les commandes et le stock ; son titre, sa description et son prix ne sont jamais réécrits.&lt;br /&gt;
* Prix envoyé à Shopify : HT de la fiche par défaut (fonctionnement historique), ou TTC si la boutique est en TTC (option « selon la boutique »).&lt;br /&gt;
&lt;br /&gt;
=== Catégories, images et champs produit (Dolibarr → Shopify, options) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Catégories&#039;&#039;&#039; : chaque catégorie produit devient une &#039;&#039;&#039;collection&#039;&#039;&#039; Shopify, un &#039;&#039;&#039;tag&#039;&#039;&#039;, ou les deux. Le produit rejoint et quitte les collections selon ses catégories ; une collection parente peut contenir les produits de ses sous-catégories ; une catégorie renommée ou supprimée entraîne sa collection.&lt;br /&gt;
* &#039;&#039;&#039;Menu de navigation&#039;&#039;&#039; construit sur l&#039;arborescence, jusqu&#039;à 3 niveaux (limite Shopify), reconstruit seulement quand l&#039;arborescence change. Droits &amp;lt;code&amp;gt;read_online_store_navigation&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;write_online_store_navigation&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Images&#039;&#039;&#039; de l&#039;onglet « Fichiers joints » envoyées dans les médias du produit : ajout, remplacement quand le fichier change, retrait quand il disparaît, sans doublon.&lt;br /&gt;
* &#039;&#039;&#039;Metafields&#039;&#039;&#039; : un attribut supplémentaire &#039;&#039;ou&#039;&#039; un champ standard (&amp;lt;code&amp;gt;@weight&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@length&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@width&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@height&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@surface&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@volume&amp;lt;/code&amp;gt;) publié avec conversion de type et d&#039;unité (texte riche, poids, dimension, volume, nombres, dates, listes). Une valeur vidée efface le metafield ; une valeur refusée par Shopify n&#039;empêche pas les autres et le job apparaît en échec.&lt;br /&gt;
* &#039;&#039;&#039;Poids d&#039;expédition&#039;&#039;&#039; : le poids Dolibarr publié sur la variante Shopify, pour le calcul des frais de port.&lt;br /&gt;
* &#039;&#039;&#039;Produit supprimé dans Dolibarr&#039;&#039;&#039; : passé en brouillon ou archivé sur Shopify, jamais supprimé.&lt;br /&gt;
&lt;br /&gt;
Le module ne touche qu&#039;à ce qu&#039;il a créé : une collection, un tag ou une image ajoutés à la main sur Shopify ne sont jamais retirés.&lt;br /&gt;
&lt;br /&gt;
=== Stock (sens selon la source de vérité) ===&lt;br /&gt;
&lt;br /&gt;
* Source de vérité &#039;&#039;&#039;Dolibarr&#039;&#039;&#039; : chaque mouvement de stock publie la quantité des entrepôts choisis sur l&#039;emplacement Shopify correspondant (écriture « comparer puis écrire », conforme aux API 2026-04 et suivantes). Les niveaux Shopify sont ignorés : l&#039;expédition Dolibarr sortira le stock vendu.&lt;br /&gt;
* Source de vérité &#039;&#039;&#039;Shopify&#039;&#039;&#039; : un niveau modifié sur Shopify ajuste l&#039;entrepôt Dolibarr associé à l&#039;emplacement.&lt;br /&gt;
* Quantité échangée : physique publiée par défaut ; « Physique » dans les deux sens, ou « Disponible » si Dolibarr décrémente le stock dès la validation de commande (le diagnostic le suggère).&lt;br /&gt;
&lt;br /&gt;
=== Expéditions (Dolibarr → Shopify) ===&lt;br /&gt;
&lt;br /&gt;
* À la validation d&#039;une expédition liée à une commande Shopify, la commande passe « expédiée » sur Shopify pour les articles et quantités réellement expédiés (expéditions partielles comprises).&lt;br /&gt;
* Numéro de suivi et transporteur (d&#039;après le mode d&#039;expédition) transmis ; Shopify envoie au client son e-mail d&#039;expédition (désactivable).&lt;br /&gt;
* Une expédition n&#039;est jamais déclarée deux fois ; les expéditions de commandes qui ne viennent pas de Shopify sont ignorées.&lt;br /&gt;
* Le stock d&#039;un article expédié est publié après la déclaration de l&#039;expédition, pour que Shopify ne le décompte pas deux fois.&lt;br /&gt;
&lt;br /&gt;
=== Étiquettes imprimées dans Shopify (Shopify → Dolibarr, option) ===&lt;br /&gt;
&lt;br /&gt;
Pour les boutiques qui impriment leurs étiquettes dans Shopify (Chronopost, Colissimo, Shopify Shipping) tout en gardant Dolibarr seul maître du stock, par exemple un entrepôt partagé avec le B2B :&lt;br /&gt;
&lt;br /&gt;
* Chaque expédition Shopify crée et valide l&#039;expédition Dolibarr de la commande (importée au passage si besoin), avec le numéro de suivi et le transporteur.&lt;br /&gt;
* L&#039;entrepôt est celui de l&#039;emplacement Shopify expéditeur (table entrepôts = emplacement).&lt;br /&gt;
* La validation sort le stock dans Dolibarr, qui le repousse vers Shopify : les sorties B2B ne sont jamais écrasées.&lt;br /&gt;
* Jamais plus que le reste à expédier de chaque ligne ; étiquettes antérieures à l&#039;activation ignorées ; étiquette annulée sur Shopify = expédition annulée et stock remis.&lt;br /&gt;
* Prérequis : module Expéditions et « Décrémenter le stock réel à la validation des expéditions » dans le module Stocks (contrôlés par le diagnostic).&lt;br /&gt;
&lt;br /&gt;
=== Remboursements (Shopify → Dolibarr) ===&lt;br /&gt;
&lt;br /&gt;
* Remboursement partiel : avoir d&#039;une ligne au montant rendu, au taux de TVA de la facture d&#039;origine.&lt;br /&gt;
* Remboursement total : avoir reprenant chaque ligne de la facture.&lt;br /&gt;
* L&#039;avoir reste en brouillon par défaut (validation en option). Un remboursement arrivé avant sa commande ou sa facture attend jusqu&#039;à une heure.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
 Webhook Shopify ─┐                          ┌─ Trigger Dolibarr&lt;br /&gt;
                  ▼                          ▼&lt;br /&gt;
             [ JobQueue ] ── cron process_queue ── [ SyncEngine ]&lt;br /&gt;
                  │                                     │&lt;br /&gt;
           [ MappingRepository ]                 [ Mappers × 6 ]&lt;br /&gt;
         (id ↔ id + hash anti-boucle)      (Order / Customer / Refund /&lt;br /&gt;
                                            Product / Inventory / Fulfillment)&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
* Modules Dolibarr &#039;&#039;&#039;Produits&#039;&#039;&#039;, &#039;&#039;&#039;Commandes&#039;&#039;&#039; et &#039;&#039;&#039;Tiers&#039;&#039;&#039; actifs ; &#039;&#039;&#039;Stocks&#039;&#039;&#039;, &#039;&#039;&#039;Expéditions&#039;&#039;&#039; et &#039;&#039;&#039;Factures&#039;&#039;&#039; selon les flux utilisés.&lt;br /&gt;
* Une &#039;&#039;&#039;custom app Shopify&#039;&#039;&#039; disposant des droits Admin API (products, orders, inventory, customers, fulfillments, locations ; &amp;lt;code&amp;gt;read_publications&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;write_publications&amp;lt;/code&amp;gt; pour publier les nouveautés sur la Boutique en ligne), installée sur la boutique — elle fournit l&#039;&#039;&#039;Admin API access token&#039;&#039; (&amp;lt;code&amp;gt;shpat_…&amp;lt;/code&amp;gt;) et l&#039;&#039;&#039;app secret&#039;&#039;.&lt;br /&gt;
* Pour le temps réel : un endpoint webhook &#039;&#039;&#039;HTTPS public&#039;&#039;&#039;. Voir ci-dessous le fonctionnement sans webhook.&lt;br /&gt;
&lt;br /&gt;
== Installation et mise à jour ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_shopifysync-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039; (ou remplacer le dossier &amp;lt;code&amp;gt;custom/shopifysync&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Activer &#039;&#039;&#039;Shopify Sync&#039;&#039;&#039; (famille « Interfaces avec des systèmes externes »).&lt;br /&gt;
# Après une mise à jour : cliquer sur &#039;&#039;&#039;« Inscrire les webhooks »&#039;&#039;&#039; pour ajouter les nouveaux sujets, puis sur « Tester la connexion ». Les réglages existants sont conservés et le comportement par défaut ne change pas.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Créer l&#039;app Shopify&#039;&#039;&#039; et l&#039;installer sur la boutique :&lt;br /&gt;
#* &#039;&#039;Boutiques récentes&#039;&#039; — Shopify admin → &#039;&#039;Settings → Apps → Develop apps&#039;&#039; redirige vers le Dev Dashboard → &#039;&#039;Create app&#039;&#039; → &#039;&#039;Scopes&#039;&#039; → &#039;&#039;Install app&#039;&#039; ; le jeton s&#039;obtient par l&#039;installation OAuth.&lt;br /&gt;
#* &#039;&#039;Boutiques plus anciennes&#039;&#039; — &#039;&#039;Settings → Apps → Develop apps → Create app&#039;&#039; affiche directement l&#039;Admin API access token après installation.&lt;br /&gt;
# &#039;&#039;&#039;Connexion&#039;&#039;&#039; : domaine de la boutique, jeton, app secret, version d&#039;API.&lt;br /&gt;
# &#039;&#039;&#039;Stock&#039;&#039;&#039; : emplacement Shopify et entrepôts, ou table « entrepôts = emplacement » (une règle par ligne, ex. &amp;lt;code&amp;gt;23 = gid://shopify/Location/85613641922&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Choisir les &#039;&#039;&#039;flux&#039;&#039;&#039; et les &#039;&#039;&#039;sources de vérité&#039;&#039;&#039;, puis cliquer sur &#039;&#039;&#039;« Inscrire les webhooks »&#039;&#039;&#039;.&lt;br /&gt;
# Catalogue déjà en place des deux côtés : &#039;&#039;&#039;« Rattacher les variantes par SKU »&#039;&#039;&#039;.&lt;br /&gt;
# Historique à reprendre : tableau de bord → &#039;&#039;&#039;« Rattraper les commandes des N derniers jours »&#039;&#039;&#039;.&lt;br /&gt;
# Activer les &#039;&#039;&#039;tâches planifiées&#039;&#039;&#039; Dolibarr : traitement de la file et réconciliation.&lt;br /&gt;
&lt;br /&gt;
=== Options (désactivées par défaut) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Option !! Effet&lt;br /&gt;
|-&lt;br /&gt;
| Valider la commande || La commande importée reçoit sa référence définitive (et sort le stock si Dolibarr décrémente à la validation).&lt;br /&gt;
|-&lt;br /&gt;
| Valider l&#039;avoir || L&#039;avoir créé par un remboursement est validé aussitôt.&lt;br /&gt;
|-&lt;br /&gt;
| Réaligner prix, SKU et code-barres || Chaque modification Dolibarr réécrit ces champs sur un produit Shopify déjà publié.&lt;br /&gt;
|-&lt;br /&gt;
| Suivre « en vente » || Un produit retiré de la vente dans Dolibarr passe en brouillon sur Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Prix envoyé selon la boutique || Prix TTC envoyés si la boutique affiche ses prix taxes incluses.&lt;br /&gt;
|-&lt;br /&gt;
| Catégories Dolibarr || Collections Shopify, tags, ou les deux, avec menu de navigation optionnel.&lt;br /&gt;
|-&lt;br /&gt;
| Images du produit || Fichiers joints envoyés dans les médias Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Poids d&#039;expédition || Poids Dolibarr publié sur la variante Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Produit supprimé dans Dolibarr || Brouillon ou archivage sur Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Étiquettes imprimées dans Shopify || Chaque expédition Shopify crée et valide l&#039;expédition Dolibarr, stock sorti par Dolibarr.&lt;br /&gt;
|-&lt;br /&gt;
| Ignorer les commandes de test || Les commandes passées avec la passerelle de test Shopify ne sont pas importées.&lt;br /&gt;
|-&lt;br /&gt;
| Publier sur la Boutique en ligne || Un produit créé par le module est rendu visible sur la boutique.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Autres réglages : service Dolibarr des frais de port, taux de TVA par défaut, quantité Shopify échangée, notification d&#039;expédition au client (active par défaut), règlement et compte bancaire des commandes payées.&lt;br /&gt;
&lt;br /&gt;
=== Tâches planifiées sous Dolibarr 24 ===&lt;br /&gt;
&lt;br /&gt;
Les deux tâches du module sont de type &amp;lt;code&amp;gt;command&amp;lt;/code&amp;gt; (exécution en ligne de commande). Depuis Dolibarr 24, une tâche CLI est comptée &#039;&#039;&#039;en erreur&#039;&#039;&#039; si la variable &amp;lt;code&amp;gt;$dolibarr_cron_allow_cli&amp;lt;/code&amp;gt; n&#039;est pas activée — en version 20 le cas était seulement journalisé. Ajoutez donc dans &amp;lt;code&amp;gt;conf/conf.php&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 $dolibarr_cron_allow_cli = 1;&lt;br /&gt;
&lt;br /&gt;
Sans cela, les tâches « ShopifySync » s&#039;affichent en rouge dans &#039;&#039;Outils → Tâches planifiées&#039;&#039; alors même que le module fonctionne. Sans tâche planifiée active, le bouton « Traiter la file maintenant » du tableau de bord exécute la file à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Fonctionnement sans endpoint webhook ===&lt;br /&gt;
&lt;br /&gt;
Le module reste utilisable derrière un hébergement fermé aux connexions entrantes : la réconciliation planifiée, qui n&#039;effectue que des appels sortants, rattrape les commandes, les paiements, les annulations et les remboursements. La fenêtre d&#039;analyse (2 jours par défaut) se règle par la constante &amp;lt;code&amp;gt;SHOPIFYSYNC_RECONCILE_WINDOW_DAYS&amp;lt;/code&amp;gt;. L&#039;import étant idempotent, le recouvrement entre deux passages ne crée pas de doublon. Les jobs terminés sont purgés après 30 jours et le journal après 90 jours.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.1 || Correctifs : unité forcée des metafields réellement convertie (2 kg publiés en 2000 g) ; un tag Shopify saisi à la main n&#039;est plus retiré ; suppression de collection refusée signalée au lieu d&#039;être déclarée réussie ; erreurs de renommage de tag remontées ; remboursement de montant nul ne crée plus d&#039;avoir intégral ; commande dont une ligne a été refusée ni validée ni facturée, puis complétée au rejeu ; modification faite pendant un export conservée ; webhook non acquitté quand le job n&#039;a pas pu être enregistré&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.0 || Catégories Dolibarr en collections Shopify, tags et menu de navigation ; images des fiches envoyées dans les médias ; champs standards (poids, dimensions, volume) publiables en metafields avec conversion d&#039;unité ; poids d&#039;expédition ; metafields fiables (case décochée, valeur vidée, valeur refusée signalée sans bloquer les autres) ; produit supprimé dans Dolibarr passé en brouillon ou archivé&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.1 || Code client obligatoire géré (clients créés avec le code de la numérotation Dolibarr) ; ventes sans client (caisse Shopify POS) portées par un tiers unique configurable ; motif des refus journalisé ; étiquettes d&#039;un emplacement non géré ignorées&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.0 || Étiquettes imprimées dans Shopify (option) : expédition Dolibarr créée et validée sur l&#039;entrepôt de l&#039;emplacement expéditeur, stock sorti par Dolibarr qui reste seul maître, suivi et transporteur repris, annulation gérée, rattrapage par la réconciliation&lt;br /&gt;
|-&lt;br /&gt;
| 1.2.0 || Prix TTC, frais de port, date de vente, contact de livraison et clients invités à l&#039;import ; annulations Shopify ; expéditions partielles avec transporteur ; prix, SKU et code-barres posés à la création des produits ; import d&#039;un produit par variante ; suppressions Shopify gérées ; réconciliation des paiements, annulations et remboursements ; actions du tableau de bord ; options de validation et de réalignement (désactivées par défaut, aucun changement de comportement à la mise à jour) ; validé sur Dolibarr 18, 20 et 24&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.2 || Bouton « Synchroniser » des fiches commande ; facture créée quand le paiement arrive après l&#039;import&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.1 || Export de stock compatible avec les API Shopify 2026-04 et suivantes ; sonde de compatibilité multi-versions&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.0 || Tableau de bord et écrans redessinés, encart « État Shopify » sur les fiches ; rattachement par SKU d&#039;un catalogue existant ; stock multi-emplacements&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.2 || Produits à variantes (options Shopify, 1 SKU par combinaison, pagination jusqu&#039;à 2 048 variantes, refus au-delà de 3 attributs) ; stock multi-entrepôts ; metafields ; règlement automatique des commandes payées ; adresse de facturation complète ; bouton « Tester la connexion » ; remises Shopify à l&#039;import ; réconciliation par horodatage absolu et rattrapage des remboursements&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || Gestion des erreurs GraphQL renvoyées en chaîne ; version d&#039;API portée à 2026-01 ; &amp;lt;code&amp;gt;inventoryActivate&amp;lt;/code&amp;gt; avant écriture de stock ; correction critique de la création des lignes de commande&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : commandes, clients, remboursements, produits, stock, expéditions, webhooks signés, file d&#039;attente, tableau de bord&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Shopify_Sync&amp;diff=67401</id>
		<title>Module Shopify Sync</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Shopify_Sync&amp;diff=67401"/>
		<updated>2026-09-22T18:05:09Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Version 1.4.0 : catégories en collections/tags/menu, images des fiches, champs standards en metafields, metafields fiabilisés, produit supprimé archivé&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module Shopify Sync ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shopify Sync&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui assure une &#039;&#039;&#039;synchronisation bidirectionnelle quasi temps réel entre Shopify et Dolibarr&#039;&#039;&#039; : commandes, clients, remboursements, produits et variantes, stock et expéditions. Le module dialogue directement avec l&#039;API &#039;&#039;&#039;GraphQL Admin&#039;&#039;&#039; de Shopify — sans SaaS intermédiaire, sans abonnement supplémentaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Version || 1.4.0&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x (validé sur 18.0.5, 20.0.4 et 24.0.0)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum (extension cURL), validé jusqu&#039;à 8.2&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (cURL pur : pas de Composer, pas de SDK)&lt;br /&gt;
|-&lt;br /&gt;
! Version d&#039;API Shopify || 2026-01 par défaut, configurable ; appels vérifiés sur 2025-07, 2025-10, 2026-01, 2026-04, 2026-07 et unstable&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3218 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Commandes&#039;&#039;&#039; Shopify → Dolibarr : client (ou client invité), commande à la date de la vente, lignes reliées aux fiches produits, remises, &#039;&#039;&#039;frais de port&#039;&#039;&#039;, contact de livraison si l&#039;adresse diffère ; &#039;&#039;&#039;facture&#039;&#039;&#039; dès que la commande est payée, même après son import.&lt;br /&gt;
* &#039;&#039;&#039;Prix TTC ou HT&#039;&#039;&#039; : le module lit le réglage « taxes incluses » de la boutique, les montants importés correspondent à ce que le client a payé.&lt;br /&gt;
* &#039;&#039;&#039;Annulations&#039;&#039;&#039; Shopify répercutées sur la commande Dolibarr.&lt;br /&gt;
* &#039;&#039;&#039;Remboursements&#039;&#039;&#039; → avoirs Dolibarr : partiel (montant réellement rendu) ou total (avoir miroir ligne à ligne).&lt;br /&gt;
* &#039;&#039;&#039;Expéditions&#039;&#039;&#039; Dolibarr → Shopify : articles et quantités expédiés, numéro de suivi et transporteur ; expéditions partielles gérées. En option, l&#039;inverse : une étiquette imprimée dans Shopify crée et valide l&#039;expédition Dolibarr.&lt;br /&gt;
* &#039;&#039;&#039;Produits&#039;&#039;&#039; dans les deux sens, avec une &#039;&#039;&#039;source de vérité configurable&#039;&#039;&#039; (produits, prix, stock).&lt;br /&gt;
* &#039;&#039;&#039;Catalogue existant&#039;&#039;&#039; : rattachement par SKU des variantes Shopify aux fiches Dolibarr existantes, sans produit parent ni module Variants.&lt;br /&gt;
* &#039;&#039;&#039;Produits à variantes&#039;&#039;&#039; (module Variants) : les attributs Dolibarr deviennent des options Shopify, une variante par combinaison. Limites de la boutique lues à l&#039;exécution (2 048 variantes, 3 options).&lt;br /&gt;
* &#039;&#039;&#039;Stock multi-emplacements&#039;&#039;&#039; : table « entrepôts Dolibarr = emplacement Shopify », ou un emplacement unique alimenté par les entrepôts choisis.&lt;br /&gt;
* &#039;&#039;&#039;Metafields&#039;&#039;&#039; : attributs supplémentaires et champs standards (poids, dimensions, volume) publiés vers Shopify, avec conversion de type et d&#039;unité.&lt;br /&gt;
* &#039;&#039;&#039;Catégories, images, poids&#039;&#039;&#039; : collections et tags Shopify, menu de navigation, images des fiches, poids d&#039;expédition (options).&lt;br /&gt;
* &#039;&#039;&#039;Webhooks signés HMAC&#039;&#039;&#039; pour le quasi temps réel, doublés d&#039;une &#039;&#039;&#039;réconciliation planifiée&#039;&#039;&#039; qui rattrape commandes, paiements, annulations et remboursements manqués.&lt;br /&gt;
* &#039;&#039;&#039;File d&#039;attente asynchrone&#039;&#039;&#039; : limites de débit de l&#039;API absorbées, nouvelles tentatives sûres, aucun job traité deux fois.&lt;br /&gt;
* &#039;&#039;&#039;Anti-boucle&#039;&#039;&#039; par empreinte d&#039;état, et &#039;&#039;&#039;résolution de conflits&#039;&#039;&#039; configurable.&lt;br /&gt;
* &#039;&#039;&#039;Tableau de bord&#039;&#039;&#039; : file d&#039;attente, échecs, journal ; traiter la file maintenant, relancer les échecs, rattraper les commandes des N derniers jours.&lt;br /&gt;
* &#039;&#039;&#039;Encart « État Shopify »&#039;&#039;&#039; sur les fiches produit et commande, avec bouton « Synchroniser ».&lt;br /&gt;
* Bouton &#039;&#039;&#039;« Tester la connexion »&#039;&#039;&#039; : contrôles de configuration, droits, emplacements, webhooks et tâches planifiées, chacun avec le correctif suggéré.&lt;br /&gt;
* Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Ce qui est synchronisé, flux par flux ==&lt;br /&gt;
&lt;br /&gt;
Chaque flux s&#039;active ou se coupe indépendamment dans la configuration (carte « Flux synchronisés »).&lt;br /&gt;
&lt;br /&gt;
=== Commandes (Shopify → Dolibarr) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Événement Shopify !! Effet dans Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
| Commande créée || Tiers retrouvé par e-mail (sinon créé, avec l&#039;adresse de facturation et le pays) ; commande datée du jour de la vente, référence client = numéro Shopify ; une ligne par article, reliée à la fiche par la variante ou le SKU ; remises ; ligne « Frais de port » ; contact de livraison si l&#039;adresse diffère. La commande reste en &#039;&#039;&#039;brouillon&#039;&#039;&#039; (validation automatique en option).&lt;br /&gt;
|-&lt;br /&gt;
| Commande payée (tout de suite ou plus tard) || Facture créée depuis la commande et validée ; règlement enregistré en option (mode de paiement et compte bancaire au choix).&lt;br /&gt;
|-&lt;br /&gt;
| Commande annulée || Commande Dolibarr annulée, sauf si une expédition est déjà en cours.&lt;br /&gt;
|-&lt;br /&gt;
| Commande de test (passerelle de test Shopify) || Importée et signalée comme telle ; peut être ignorée par option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Un tiers existant n&#039;est jamais renommé par une commande : seuls les champs vides sont complétés.&lt;br /&gt;
&lt;br /&gt;
Ventes sans client (caisse Shopify POS, commandes anonymes) : portées par un seul tiers, choisi dans la configuration, ou « Client comptoir (Shopify) » créé automatiquement. Le code client est attribué par la numérotation Dolibarr, y compris quand il est obligatoire.&lt;br /&gt;
&lt;br /&gt;
=== Clients (dans les deux sens) ===&lt;br /&gt;
&lt;br /&gt;
* Shopify → Dolibarr : un client créé ou modifié met à jour son tiers (nom, e-mail, adresse, téléphone, pays, province). Une raison sociale Shopify devient le nom du tiers.&lt;br /&gt;
* Dolibarr → Shopify : un tiers client créé ou modifié est publié (prénom, nom, e-mail, téléphone). Un tiers sans e-mail ni téléphone n&#039;est pas publié (exigence Shopify).&lt;br /&gt;
* Client supprimé sur Shopify : le lien est retiré, le tiers Dolibarr est conservé.&lt;br /&gt;
&lt;br /&gt;
=== Produits (dans les deux sens) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Sens !! Création !! Modification&lt;br /&gt;
|-&lt;br /&gt;
| Dolibarr → Shopify (source de vérité produits = Dolibarr) || Produit Shopify avec titre, description, prix, SKU (= référence), code-barres, suivi de stock, statut actif si la fiche est en vente, sinon brouillon. Publication sur la Boutique en ligne en option. || Titre, description et metafields. Prix, SKU et code-barres seulement si l&#039;option « Réaligner prix, SKU et code-barres » est cochée ; statut seulement si « Suivre en vente » est cochée.&lt;br /&gt;
|-&lt;br /&gt;
| Shopify → Dolibarr || Fiche Dolibarr (référence = SKU, libellé, prix, code-barres, statut) ; une fiche par variante pour un produit à plusieurs variantes. Si le SKU correspond à une référence existante, la fiche est &#039;&#039;&#039;rattachée&#039;&#039;&#039; sans être modifiée. || Libellé. Prix seulement si Shopify est source de vérité des prix ; statut et code-barres seulement si Shopify est source de vérité des produits.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Produit supprimé sur Shopify : liens retirés, fiche Dolibarr conservée, jamais recréée d&#039;office (le bouton « Synchroniser » de la fiche la republie).&lt;br /&gt;
* Fiche rattachée par SKU : utilisée pour les commandes et le stock ; son titre, sa description et son prix ne sont jamais réécrits.&lt;br /&gt;
* Prix envoyé à Shopify : HT de la fiche par défaut (fonctionnement historique), ou TTC si la boutique est en TTC (option « selon la boutique »).&lt;br /&gt;
&lt;br /&gt;
=== Catégories, images et champs produit (Dolibarr → Shopify, options) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Catégories&#039;&#039;&#039; : chaque catégorie produit devient une &#039;&#039;&#039;collection&#039;&#039;&#039; Shopify, un &#039;&#039;&#039;tag&#039;&#039;&#039;, ou les deux. Le produit rejoint et quitte les collections selon ses catégories ; une collection parente peut contenir les produits de ses sous-catégories ; une catégorie renommée ou supprimée entraîne sa collection.&lt;br /&gt;
* &#039;&#039;&#039;Menu de navigation&#039;&#039;&#039; construit sur l&#039;arborescence, jusqu&#039;à 3 niveaux (limite Shopify), reconstruit seulement quand l&#039;arborescence change. Droits &amp;lt;code&amp;gt;read_online_store_navigation&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;write_online_store_navigation&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Images&#039;&#039;&#039; de l&#039;onglet « Fichiers joints » envoyées dans les médias du produit : ajout, remplacement quand le fichier change, retrait quand il disparaît, sans doublon.&lt;br /&gt;
* &#039;&#039;&#039;Metafields&#039;&#039;&#039; : un attribut supplémentaire &#039;&#039;ou&#039;&#039; un champ standard (&amp;lt;code&amp;gt;@weight&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@length&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@width&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@height&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@surface&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@volume&amp;lt;/code&amp;gt;) publié avec conversion de type et d&#039;unité (texte riche, poids, dimension, volume, nombres, dates, listes). Une valeur vidée efface le metafield ; une valeur refusée par Shopify n&#039;empêche pas les autres et le job apparaît en échec.&lt;br /&gt;
* &#039;&#039;&#039;Poids d&#039;expédition&#039;&#039;&#039; : le poids Dolibarr publié sur la variante Shopify, pour le calcul des frais de port.&lt;br /&gt;
* &#039;&#039;&#039;Produit supprimé dans Dolibarr&#039;&#039;&#039; : passé en brouillon ou archivé sur Shopify, jamais supprimé.&lt;br /&gt;
&lt;br /&gt;
Le module ne touche qu&#039;à ce qu&#039;il a créé : une collection, un tag ou une image ajoutés à la main sur Shopify ne sont jamais retirés.&lt;br /&gt;
&lt;br /&gt;
=== Stock (sens selon la source de vérité) ===&lt;br /&gt;
&lt;br /&gt;
* Source de vérité &#039;&#039;&#039;Dolibarr&#039;&#039;&#039; : chaque mouvement de stock publie la quantité des entrepôts choisis sur l&#039;emplacement Shopify correspondant (écriture « comparer puis écrire », conforme aux API 2026-04 et suivantes). Les niveaux Shopify sont ignorés : l&#039;expédition Dolibarr sortira le stock vendu.&lt;br /&gt;
* Source de vérité &#039;&#039;&#039;Shopify&#039;&#039;&#039; : un niveau modifié sur Shopify ajuste l&#039;entrepôt Dolibarr associé à l&#039;emplacement.&lt;br /&gt;
* Quantité échangée : physique publiée par défaut ; « Physique » dans les deux sens, ou « Disponible » si Dolibarr décrémente le stock dès la validation de commande (le diagnostic le suggère).&lt;br /&gt;
&lt;br /&gt;
=== Expéditions (Dolibarr → Shopify) ===&lt;br /&gt;
&lt;br /&gt;
* À la validation d&#039;une expédition liée à une commande Shopify, la commande passe « expédiée » sur Shopify pour les articles et quantités réellement expédiés (expéditions partielles comprises).&lt;br /&gt;
* Numéro de suivi et transporteur (d&#039;après le mode d&#039;expédition) transmis ; Shopify envoie au client son e-mail d&#039;expédition (désactivable).&lt;br /&gt;
* Une expédition n&#039;est jamais déclarée deux fois ; les expéditions de commandes qui ne viennent pas de Shopify sont ignorées.&lt;br /&gt;
* Le stock d&#039;un article expédié est publié après la déclaration de l&#039;expédition, pour que Shopify ne le décompte pas deux fois.&lt;br /&gt;
&lt;br /&gt;
=== Étiquettes imprimées dans Shopify (Shopify → Dolibarr, option) ===&lt;br /&gt;
&lt;br /&gt;
Pour les boutiques qui impriment leurs étiquettes dans Shopify (Chronopost, Colissimo, Shopify Shipping) tout en gardant Dolibarr seul maître du stock, par exemple un entrepôt partagé avec le B2B :&lt;br /&gt;
&lt;br /&gt;
* Chaque expédition Shopify crée et valide l&#039;expédition Dolibarr de la commande (importée au passage si besoin), avec le numéro de suivi et le transporteur.&lt;br /&gt;
* L&#039;entrepôt est celui de l&#039;emplacement Shopify expéditeur (table entrepôts = emplacement).&lt;br /&gt;
* La validation sort le stock dans Dolibarr, qui le repousse vers Shopify : les sorties B2B ne sont jamais écrasées.&lt;br /&gt;
* Jamais plus que le reste à expédier de chaque ligne ; étiquettes antérieures à l&#039;activation ignorées ; étiquette annulée sur Shopify = expédition annulée et stock remis.&lt;br /&gt;
* Prérequis : module Expéditions et « Décrémenter le stock réel à la validation des expéditions » dans le module Stocks (contrôlés par le diagnostic).&lt;br /&gt;
&lt;br /&gt;
=== Remboursements (Shopify → Dolibarr) ===&lt;br /&gt;
&lt;br /&gt;
* Remboursement partiel : avoir d&#039;une ligne au montant rendu, au taux de TVA de la facture d&#039;origine.&lt;br /&gt;
* Remboursement total : avoir reprenant chaque ligne de la facture.&lt;br /&gt;
* L&#039;avoir reste en brouillon par défaut (validation en option). Un remboursement arrivé avant sa commande ou sa facture attend jusqu&#039;à une heure.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
 Webhook Shopify ─┐                          ┌─ Trigger Dolibarr&lt;br /&gt;
                  ▼                          ▼&lt;br /&gt;
             [ JobQueue ] ── cron process_queue ── [ SyncEngine ]&lt;br /&gt;
                  │                                     │&lt;br /&gt;
           [ MappingRepository ]                 [ Mappers × 6 ]&lt;br /&gt;
         (id ↔ id + hash anti-boucle)      (Order / Customer / Refund /&lt;br /&gt;
                                            Product / Inventory / Fulfillment)&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
* Modules Dolibarr &#039;&#039;&#039;Produits&#039;&#039;&#039;, &#039;&#039;&#039;Commandes&#039;&#039;&#039; et &#039;&#039;&#039;Tiers&#039;&#039;&#039; actifs ; &#039;&#039;&#039;Stocks&#039;&#039;&#039;, &#039;&#039;&#039;Expéditions&#039;&#039;&#039; et &#039;&#039;&#039;Factures&#039;&#039;&#039; selon les flux utilisés.&lt;br /&gt;
* Une &#039;&#039;&#039;custom app Shopify&#039;&#039;&#039; disposant des droits Admin API (products, orders, inventory, customers, fulfillments, locations ; &amp;lt;code&amp;gt;read_publications&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;write_publications&amp;lt;/code&amp;gt; pour publier les nouveautés sur la Boutique en ligne), installée sur la boutique — elle fournit l&#039;&#039;&#039;Admin API access token&#039;&#039; (&amp;lt;code&amp;gt;shpat_…&amp;lt;/code&amp;gt;) et l&#039;&#039;&#039;app secret&#039;&#039;.&lt;br /&gt;
* Pour le temps réel : un endpoint webhook &#039;&#039;&#039;HTTPS public&#039;&#039;&#039;. Voir ci-dessous le fonctionnement sans webhook.&lt;br /&gt;
&lt;br /&gt;
== Installation et mise à jour ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_shopifysync-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039; (ou remplacer le dossier &amp;lt;code&amp;gt;custom/shopifysync&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Activer &#039;&#039;&#039;Shopify Sync&#039;&#039;&#039; (famille « Interfaces avec des systèmes externes »).&lt;br /&gt;
# Après une mise à jour : cliquer sur &#039;&#039;&#039;« Inscrire les webhooks »&#039;&#039;&#039; pour ajouter les nouveaux sujets, puis sur « Tester la connexion ». Les réglages existants sont conservés et le comportement par défaut ne change pas.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Créer l&#039;app Shopify&#039;&#039;&#039; et l&#039;installer sur la boutique :&lt;br /&gt;
#* &#039;&#039;Boutiques récentes&#039;&#039; — Shopify admin → &#039;&#039;Settings → Apps → Develop apps&#039;&#039; redirige vers le Dev Dashboard → &#039;&#039;Create app&#039;&#039; → &#039;&#039;Scopes&#039;&#039; → &#039;&#039;Install app&#039;&#039; ; le jeton s&#039;obtient par l&#039;installation OAuth.&lt;br /&gt;
#* &#039;&#039;Boutiques plus anciennes&#039;&#039; — &#039;&#039;Settings → Apps → Develop apps → Create app&#039;&#039; affiche directement l&#039;Admin API access token après installation.&lt;br /&gt;
# &#039;&#039;&#039;Connexion&#039;&#039;&#039; : domaine de la boutique, jeton, app secret, version d&#039;API.&lt;br /&gt;
# &#039;&#039;&#039;Stock&#039;&#039;&#039; : emplacement Shopify et entrepôts, ou table « entrepôts = emplacement » (une règle par ligne, ex. &amp;lt;code&amp;gt;23 = gid://shopify/Location/85613641922&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Choisir les &#039;&#039;&#039;flux&#039;&#039;&#039; et les &#039;&#039;&#039;sources de vérité&#039;&#039;&#039;, puis cliquer sur &#039;&#039;&#039;« Inscrire les webhooks »&#039;&#039;&#039;.&lt;br /&gt;
# Catalogue déjà en place des deux côtés : &#039;&#039;&#039;« Rattacher les variantes par SKU »&#039;&#039;&#039;.&lt;br /&gt;
# Historique à reprendre : tableau de bord → &#039;&#039;&#039;« Rattraper les commandes des N derniers jours »&#039;&#039;&#039;.&lt;br /&gt;
# Activer les &#039;&#039;&#039;tâches planifiées&#039;&#039;&#039; Dolibarr : traitement de la file et réconciliation.&lt;br /&gt;
&lt;br /&gt;
=== Options (désactivées par défaut) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Option !! Effet&lt;br /&gt;
|-&lt;br /&gt;
| Valider la commande || La commande importée reçoit sa référence définitive (et sort le stock si Dolibarr décrémente à la validation).&lt;br /&gt;
|-&lt;br /&gt;
| Valider l&#039;avoir || L&#039;avoir créé par un remboursement est validé aussitôt.&lt;br /&gt;
|-&lt;br /&gt;
| Réaligner prix, SKU et code-barres || Chaque modification Dolibarr réécrit ces champs sur un produit Shopify déjà publié.&lt;br /&gt;
|-&lt;br /&gt;
| Suivre « en vente » || Un produit retiré de la vente dans Dolibarr passe en brouillon sur Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Prix envoyé selon la boutique || Prix TTC envoyés si la boutique affiche ses prix taxes incluses.&lt;br /&gt;
|-&lt;br /&gt;
| Catégories Dolibarr || Collections Shopify, tags, ou les deux, avec menu de navigation optionnel.&lt;br /&gt;
|-&lt;br /&gt;
| Images du produit || Fichiers joints envoyés dans les médias Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Poids d&#039;expédition || Poids Dolibarr publié sur la variante Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Produit supprimé dans Dolibarr || Brouillon ou archivage sur Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Étiquettes imprimées dans Shopify || Chaque expédition Shopify crée et valide l&#039;expédition Dolibarr, stock sorti par Dolibarr.&lt;br /&gt;
|-&lt;br /&gt;
| Ignorer les commandes de test || Les commandes passées avec la passerelle de test Shopify ne sont pas importées.&lt;br /&gt;
|-&lt;br /&gt;
| Publier sur la Boutique en ligne || Un produit créé par le module est rendu visible sur la boutique.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Autres réglages : service Dolibarr des frais de port, taux de TVA par défaut, quantité Shopify échangée, notification d&#039;expédition au client (active par défaut), règlement et compte bancaire des commandes payées.&lt;br /&gt;
&lt;br /&gt;
=== Tâches planifiées sous Dolibarr 24 ===&lt;br /&gt;
&lt;br /&gt;
Les deux tâches du module sont de type &amp;lt;code&amp;gt;command&amp;lt;/code&amp;gt; (exécution en ligne de commande). Depuis Dolibarr 24, une tâche CLI est comptée &#039;&#039;&#039;en erreur&#039;&#039;&#039; si la variable &amp;lt;code&amp;gt;$dolibarr_cron_allow_cli&amp;lt;/code&amp;gt; n&#039;est pas activée — en version 20 le cas était seulement journalisé. Ajoutez donc dans &amp;lt;code&amp;gt;conf/conf.php&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 $dolibarr_cron_allow_cli = 1;&lt;br /&gt;
&lt;br /&gt;
Sans cela, les tâches « ShopifySync » s&#039;affichent en rouge dans &#039;&#039;Outils → Tâches planifiées&#039;&#039; alors même que le module fonctionne. Sans tâche planifiée active, le bouton « Traiter la file maintenant » du tableau de bord exécute la file à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Fonctionnement sans endpoint webhook ===&lt;br /&gt;
&lt;br /&gt;
Le module reste utilisable derrière un hébergement fermé aux connexions entrantes : la réconciliation planifiée, qui n&#039;effectue que des appels sortants, rattrape les commandes, les paiements, les annulations et les remboursements. La fenêtre d&#039;analyse (2 jours par défaut) se règle par la constante &amp;lt;code&amp;gt;SHOPIFYSYNC_RECONCILE_WINDOW_DAYS&amp;lt;/code&amp;gt;. L&#039;import étant idempotent, le recouvrement entre deux passages ne crée pas de doublon. Les jobs terminés sont purgés après 30 jours et le journal après 90 jours.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.0 || Catégories Dolibarr en collections Shopify, tags et menu de navigation ; images des fiches envoyées dans les médias ; champs standards (poids, dimensions, volume) publiables en metafields avec conversion d&#039;unité ; poids d&#039;expédition ; metafields fiables (case décochée, valeur vidée, valeur refusée signalée sans bloquer les autres) ; produit supprimé dans Dolibarr passé en brouillon ou archivé&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.1 || Code client obligatoire géré (clients créés avec le code de la numérotation Dolibarr) ; ventes sans client (caisse Shopify POS) portées par un tiers unique configurable ; motif des refus journalisé ; étiquettes d&#039;un emplacement non géré ignorées&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.0 || Étiquettes imprimées dans Shopify (option) : expédition Dolibarr créée et validée sur l&#039;entrepôt de l&#039;emplacement expéditeur, stock sorti par Dolibarr qui reste seul maître, suivi et transporteur repris, annulation gérée, rattrapage par la réconciliation&lt;br /&gt;
|-&lt;br /&gt;
| 1.2.0 || Prix TTC, frais de port, date de vente, contact de livraison et clients invités à l&#039;import ; annulations Shopify ; expéditions partielles avec transporteur ; prix, SKU et code-barres posés à la création des produits ; import d&#039;un produit par variante ; suppressions Shopify gérées ; réconciliation des paiements, annulations et remboursements ; actions du tableau de bord ; options de validation et de réalignement (désactivées par défaut, aucun changement de comportement à la mise à jour) ; validé sur Dolibarr 18, 20 et 24&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.2 || Bouton « Synchroniser » des fiches commande ; facture créée quand le paiement arrive après l&#039;import&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.1 || Export de stock compatible avec les API Shopify 2026-04 et suivantes ; sonde de compatibilité multi-versions&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.0 || Tableau de bord et écrans redessinés, encart « État Shopify » sur les fiches ; rattachement par SKU d&#039;un catalogue existant ; stock multi-emplacements&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.2 || Produits à variantes (options Shopify, 1 SKU par combinaison, pagination jusqu&#039;à 2 048 variantes, refus au-delà de 3 attributs) ; stock multi-entrepôts ; metafields ; règlement automatique des commandes payées ; adresse de facturation complète ; bouton « Tester la connexion » ; remises Shopify à l&#039;import ; réconciliation par horodatage absolu et rattrapage des remboursements&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || Gestion des erreurs GraphQL renvoyées en chaîne ; version d&#039;API portée à 2026-01 ; &amp;lt;code&amp;gt;inventoryActivate&amp;lt;/code&amp;gt; avant écriture de stock ; correction critique de la création des lignes de commande&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : commandes, clients, remboursements, produits, stock, expéditions, webhooks signés, file d&#039;attente, tableau de bord&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Shopify_Sync&amp;diff=67364</id>
		<title>Module Shopify Sync</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Shopify_Sync&amp;diff=67364"/>
		<updated>2026-09-18T16:27:04Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Version 1.3.1 : étiquettes imprimées dans Shopify, ventes en caisse, code client obligatoire&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module Shopify Sync ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shopify Sync&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui assure une &#039;&#039;&#039;synchronisation bidirectionnelle quasi temps réel entre Shopify et Dolibarr&#039;&#039;&#039; : commandes, clients, remboursements, produits et variantes, stock et expéditions. Le module dialogue directement avec l&#039;API &#039;&#039;&#039;GraphQL Admin&#039;&#039;&#039; de Shopify — sans SaaS intermédiaire, sans abonnement supplémentaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Version || 1.3.1&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x (validé sur 18.0.5, 20.0.4 et 24.0.0)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum (extension cURL), validé jusqu&#039;à 8.2&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (cURL pur : pas de Composer, pas de SDK)&lt;br /&gt;
|-&lt;br /&gt;
! Version d&#039;API Shopify || 2026-01 par défaut, configurable ; appels vérifiés sur 2025-07, 2025-10, 2026-01, 2026-04, 2026-07 et unstable&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3218 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Commandes&#039;&#039;&#039; Shopify → Dolibarr : client (ou client invité), commande à la date de la vente, lignes reliées aux fiches produits, remises, &#039;&#039;&#039;frais de port&#039;&#039;&#039;, contact de livraison si l&#039;adresse diffère ; &#039;&#039;&#039;facture&#039;&#039;&#039; dès que la commande est payée, même après son import.&lt;br /&gt;
* &#039;&#039;&#039;Prix TTC ou HT&#039;&#039;&#039; : le module lit le réglage « taxes incluses » de la boutique, les montants importés correspondent à ce que le client a payé.&lt;br /&gt;
* &#039;&#039;&#039;Annulations&#039;&#039;&#039; Shopify répercutées sur la commande Dolibarr.&lt;br /&gt;
* &#039;&#039;&#039;Remboursements&#039;&#039;&#039; → avoirs Dolibarr : partiel (montant réellement rendu) ou total (avoir miroir ligne à ligne).&lt;br /&gt;
* &#039;&#039;&#039;Expéditions&#039;&#039;&#039; Dolibarr → Shopify : articles et quantités expédiés, numéro de suivi et transporteur ; expéditions partielles gérées. En option, l&#039;inverse : une étiquette imprimée dans Shopify crée et valide l&#039;expédition Dolibarr.&lt;br /&gt;
* &#039;&#039;&#039;Produits&#039;&#039;&#039; dans les deux sens, avec une &#039;&#039;&#039;source de vérité configurable&#039;&#039;&#039; (produits, prix, stock).&lt;br /&gt;
* &#039;&#039;&#039;Catalogue existant&#039;&#039;&#039; : rattachement par SKU des variantes Shopify aux fiches Dolibarr existantes, sans produit parent ni module Variants.&lt;br /&gt;
* &#039;&#039;&#039;Produits à variantes&#039;&#039;&#039; (module Variants) : les attributs Dolibarr deviennent des options Shopify, une variante par combinaison. Limites de la boutique lues à l&#039;exécution (2 048 variantes, 3 options).&lt;br /&gt;
* &#039;&#039;&#039;Stock multi-emplacements&#039;&#039;&#039; : table « entrepôts Dolibarr = emplacement Shopify », ou un emplacement unique alimenté par les entrepôts choisis.&lt;br /&gt;
* &#039;&#039;&#039;Metafields&#039;&#039;&#039; : publication d&#039;attributs supplémentaires Dolibarr vers Shopify.&lt;br /&gt;
* &#039;&#039;&#039;Webhooks signés HMAC&#039;&#039;&#039; pour le quasi temps réel, doublés d&#039;une &#039;&#039;&#039;réconciliation planifiée&#039;&#039;&#039; qui rattrape commandes, paiements, annulations et remboursements manqués.&lt;br /&gt;
* &#039;&#039;&#039;File d&#039;attente asynchrone&#039;&#039;&#039; : limites de débit de l&#039;API absorbées, nouvelles tentatives sûres, aucun job traité deux fois.&lt;br /&gt;
* &#039;&#039;&#039;Anti-boucle&#039;&#039;&#039; par empreinte d&#039;état, et &#039;&#039;&#039;résolution de conflits&#039;&#039;&#039; configurable.&lt;br /&gt;
* &#039;&#039;&#039;Tableau de bord&#039;&#039;&#039; : file d&#039;attente, échecs, journal ; traiter la file maintenant, relancer les échecs, rattraper les commandes des N derniers jours.&lt;br /&gt;
* &#039;&#039;&#039;Encart « État Shopify »&#039;&#039;&#039; sur les fiches produit et commande, avec bouton « Synchroniser ».&lt;br /&gt;
* Bouton &#039;&#039;&#039;« Tester la connexion »&#039;&#039;&#039; : contrôles de configuration, droits, emplacements, webhooks et tâches planifiées, chacun avec le correctif suggéré.&lt;br /&gt;
* Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Ce qui est synchronisé, flux par flux ==&lt;br /&gt;
&lt;br /&gt;
Chaque flux s&#039;active ou se coupe indépendamment dans la configuration (carte « Flux synchronisés »).&lt;br /&gt;
&lt;br /&gt;
=== Commandes (Shopify → Dolibarr) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Événement Shopify !! Effet dans Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
| Commande créée || Tiers retrouvé par e-mail (sinon créé, avec l&#039;adresse de facturation et le pays) ; commande datée du jour de la vente, référence client = numéro Shopify ; une ligne par article, reliée à la fiche par la variante ou le SKU ; remises ; ligne « Frais de port » ; contact de livraison si l&#039;adresse diffère. La commande reste en &#039;&#039;&#039;brouillon&#039;&#039;&#039; (validation automatique en option).&lt;br /&gt;
|-&lt;br /&gt;
| Commande payée (tout de suite ou plus tard) || Facture créée depuis la commande et validée ; règlement enregistré en option (mode de paiement et compte bancaire au choix).&lt;br /&gt;
|-&lt;br /&gt;
| Commande annulée || Commande Dolibarr annulée, sauf si une expédition est déjà en cours.&lt;br /&gt;
|-&lt;br /&gt;
| Commande de test (passerelle de test Shopify) || Importée et signalée comme telle ; peut être ignorée par option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Un tiers existant n&#039;est jamais renommé par une commande : seuls les champs vides sont complétés.&lt;br /&gt;
&lt;br /&gt;
Ventes sans client (caisse Shopify POS, commandes anonymes) : portées par un seul tiers, choisi dans la configuration, ou « Client comptoir (Shopify) » créé automatiquement. Le code client est attribué par la numérotation Dolibarr, y compris quand il est obligatoire.&lt;br /&gt;
&lt;br /&gt;
=== Clients (dans les deux sens) ===&lt;br /&gt;
&lt;br /&gt;
* Shopify → Dolibarr : un client créé ou modifié met à jour son tiers (nom, e-mail, adresse, téléphone, pays, province). Une raison sociale Shopify devient le nom du tiers.&lt;br /&gt;
* Dolibarr → Shopify : un tiers client créé ou modifié est publié (prénom, nom, e-mail, téléphone). Un tiers sans e-mail ni téléphone n&#039;est pas publié (exigence Shopify).&lt;br /&gt;
* Client supprimé sur Shopify : le lien est retiré, le tiers Dolibarr est conservé.&lt;br /&gt;
&lt;br /&gt;
=== Produits (dans les deux sens) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Sens !! Création !! Modification&lt;br /&gt;
|-&lt;br /&gt;
| Dolibarr → Shopify (source de vérité produits = Dolibarr) || Produit Shopify avec titre, description, prix, SKU (= référence), code-barres, suivi de stock, statut actif si la fiche est en vente, sinon brouillon. Publication sur la Boutique en ligne en option. || Titre, description et metafields. Prix, SKU et code-barres seulement si l&#039;option « Réaligner prix, SKU et code-barres » est cochée ; statut seulement si « Suivre en vente » est cochée.&lt;br /&gt;
|-&lt;br /&gt;
| Shopify → Dolibarr || Fiche Dolibarr (référence = SKU, libellé, prix, code-barres, statut) ; une fiche par variante pour un produit à plusieurs variantes. Si le SKU correspond à une référence existante, la fiche est &#039;&#039;&#039;rattachée&#039;&#039;&#039; sans être modifiée. || Libellé. Prix seulement si Shopify est source de vérité des prix ; statut et code-barres seulement si Shopify est source de vérité des produits.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Produit supprimé sur Shopify : liens retirés, fiche Dolibarr conservée, jamais recréée d&#039;office (le bouton « Synchroniser » de la fiche la republie).&lt;br /&gt;
* Fiche rattachée par SKU : utilisée pour les commandes et le stock ; son titre, sa description et son prix ne sont jamais réécrits.&lt;br /&gt;
* Prix envoyé à Shopify : HT de la fiche par défaut (fonctionnement historique), ou TTC si la boutique est en TTC (option « selon la boutique »).&lt;br /&gt;
&lt;br /&gt;
=== Stock (sens selon la source de vérité) ===&lt;br /&gt;
&lt;br /&gt;
* Source de vérité &#039;&#039;&#039;Dolibarr&#039;&#039;&#039; : chaque mouvement de stock publie la quantité des entrepôts choisis sur l&#039;emplacement Shopify correspondant (écriture « comparer puis écrire », conforme aux API 2026-04 et suivantes). Les niveaux Shopify sont ignorés : l&#039;expédition Dolibarr sortira le stock vendu.&lt;br /&gt;
* Source de vérité &#039;&#039;&#039;Shopify&#039;&#039;&#039; : un niveau modifié sur Shopify ajuste l&#039;entrepôt Dolibarr associé à l&#039;emplacement.&lt;br /&gt;
* Quantité échangée : physique publiée par défaut ; « Physique » dans les deux sens, ou « Disponible » si Dolibarr décrémente le stock dès la validation de commande (le diagnostic le suggère).&lt;br /&gt;
&lt;br /&gt;
=== Expéditions (Dolibarr → Shopify) ===&lt;br /&gt;
&lt;br /&gt;
* À la validation d&#039;une expédition liée à une commande Shopify, la commande passe « expédiée » sur Shopify pour les articles et quantités réellement expédiés (expéditions partielles comprises).&lt;br /&gt;
* Numéro de suivi et transporteur (d&#039;après le mode d&#039;expédition) transmis ; Shopify envoie au client son e-mail d&#039;expédition (désactivable).&lt;br /&gt;
* Une expédition n&#039;est jamais déclarée deux fois ; les expéditions de commandes qui ne viennent pas de Shopify sont ignorées.&lt;br /&gt;
* Le stock d&#039;un article expédié est publié après la déclaration de l&#039;expédition, pour que Shopify ne le décompte pas deux fois.&lt;br /&gt;
&lt;br /&gt;
=== Étiquettes imprimées dans Shopify (Shopify → Dolibarr, option) ===&lt;br /&gt;
&lt;br /&gt;
Pour les boutiques qui impriment leurs étiquettes dans Shopify (Chronopost, Colissimo, Shopify Shipping) tout en gardant Dolibarr seul maître du stock, par exemple un entrepôt partagé avec le B2B :&lt;br /&gt;
&lt;br /&gt;
* Chaque expédition Shopify crée et valide l&#039;expédition Dolibarr de la commande (importée au passage si besoin), avec le numéro de suivi et le transporteur.&lt;br /&gt;
* L&#039;entrepôt est celui de l&#039;emplacement Shopify expéditeur (table entrepôts = emplacement).&lt;br /&gt;
* La validation sort le stock dans Dolibarr, qui le repousse vers Shopify : les sorties B2B ne sont jamais écrasées.&lt;br /&gt;
* Jamais plus que le reste à expédier de chaque ligne ; étiquettes antérieures à l&#039;activation ignorées ; étiquette annulée sur Shopify = expédition annulée et stock remis.&lt;br /&gt;
* Prérequis : module Expéditions et « Décrémenter le stock réel à la validation des expéditions » dans le module Stocks (contrôlés par le diagnostic).&lt;br /&gt;
&lt;br /&gt;
=== Remboursements (Shopify → Dolibarr) ===&lt;br /&gt;
&lt;br /&gt;
* Remboursement partiel : avoir d&#039;une ligne au montant rendu, au taux de TVA de la facture d&#039;origine.&lt;br /&gt;
* Remboursement total : avoir reprenant chaque ligne de la facture.&lt;br /&gt;
* L&#039;avoir reste en brouillon par défaut (validation en option). Un remboursement arrivé avant sa commande ou sa facture attend jusqu&#039;à une heure.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
 Webhook Shopify ─┐                          ┌─ Trigger Dolibarr&lt;br /&gt;
                  ▼                          ▼&lt;br /&gt;
             [ JobQueue ] ── cron process_queue ── [ SyncEngine ]&lt;br /&gt;
                  │                                     │&lt;br /&gt;
           [ MappingRepository ]                 [ Mappers × 6 ]&lt;br /&gt;
         (id ↔ id + hash anti-boucle)      (Order / Customer / Refund /&lt;br /&gt;
                                            Product / Inventory / Fulfillment)&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
* Modules Dolibarr &#039;&#039;&#039;Produits&#039;&#039;&#039;, &#039;&#039;&#039;Commandes&#039;&#039;&#039; et &#039;&#039;&#039;Tiers&#039;&#039;&#039; actifs ; &#039;&#039;&#039;Stocks&#039;&#039;&#039;, &#039;&#039;&#039;Expéditions&#039;&#039;&#039; et &#039;&#039;&#039;Factures&#039;&#039;&#039; selon les flux utilisés.&lt;br /&gt;
* Une &#039;&#039;&#039;custom app Shopify&#039;&#039;&#039; disposant des droits Admin API (products, orders, inventory, customers, fulfillments, locations ; &amp;lt;code&amp;gt;read_publications&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;write_publications&amp;lt;/code&amp;gt; pour publier les nouveautés sur la Boutique en ligne), installée sur la boutique — elle fournit l&#039;&#039;&#039;Admin API access token&#039;&#039; (&amp;lt;code&amp;gt;shpat_…&amp;lt;/code&amp;gt;) et l&#039;&#039;&#039;app secret&#039;&#039;.&lt;br /&gt;
* Pour le temps réel : un endpoint webhook &#039;&#039;&#039;HTTPS public&#039;&#039;&#039;. Voir ci-dessous le fonctionnement sans webhook.&lt;br /&gt;
&lt;br /&gt;
== Installation et mise à jour ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_shopifysync-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039; (ou remplacer le dossier &amp;lt;code&amp;gt;custom/shopifysync&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Activer &#039;&#039;&#039;Shopify Sync&#039;&#039;&#039; (famille « Interfaces avec des systèmes externes »).&lt;br /&gt;
# Après une mise à jour : cliquer sur &#039;&#039;&#039;« Inscrire les webhooks »&#039;&#039;&#039; pour ajouter les nouveaux sujets, puis sur « Tester la connexion ». Les réglages existants sont conservés et le comportement par défaut ne change pas.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Créer l&#039;app Shopify&#039;&#039;&#039; et l&#039;installer sur la boutique :&lt;br /&gt;
#* &#039;&#039;Boutiques récentes&#039;&#039; — Shopify admin → &#039;&#039;Settings → Apps → Develop apps&#039;&#039; redirige vers le Dev Dashboard → &#039;&#039;Create app&#039;&#039; → &#039;&#039;Scopes&#039;&#039; → &#039;&#039;Install app&#039;&#039; ; le jeton s&#039;obtient par l&#039;installation OAuth.&lt;br /&gt;
#* &#039;&#039;Boutiques plus anciennes&#039;&#039; — &#039;&#039;Settings → Apps → Develop apps → Create app&#039;&#039; affiche directement l&#039;Admin API access token après installation.&lt;br /&gt;
# &#039;&#039;&#039;Connexion&#039;&#039;&#039; : domaine de la boutique, jeton, app secret, version d&#039;API.&lt;br /&gt;
# &#039;&#039;&#039;Stock&#039;&#039;&#039; : emplacement Shopify et entrepôts, ou table « entrepôts = emplacement » (une règle par ligne, ex. &amp;lt;code&amp;gt;23 = gid://shopify/Location/85613641922&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Choisir les &#039;&#039;&#039;flux&#039;&#039;&#039; et les &#039;&#039;&#039;sources de vérité&#039;&#039;&#039;, puis cliquer sur &#039;&#039;&#039;« Inscrire les webhooks »&#039;&#039;&#039;.&lt;br /&gt;
# Catalogue déjà en place des deux côtés : &#039;&#039;&#039;« Rattacher les variantes par SKU »&#039;&#039;&#039;.&lt;br /&gt;
# Historique à reprendre : tableau de bord → &#039;&#039;&#039;« Rattraper les commandes des N derniers jours »&#039;&#039;&#039;.&lt;br /&gt;
# Activer les &#039;&#039;&#039;tâches planifiées&#039;&#039;&#039; Dolibarr : traitement de la file et réconciliation.&lt;br /&gt;
&lt;br /&gt;
=== Options (désactivées par défaut) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Option !! Effet&lt;br /&gt;
|-&lt;br /&gt;
| Valider la commande || La commande importée reçoit sa référence définitive (et sort le stock si Dolibarr décrémente à la validation).&lt;br /&gt;
|-&lt;br /&gt;
| Valider l&#039;avoir || L&#039;avoir créé par un remboursement est validé aussitôt.&lt;br /&gt;
|-&lt;br /&gt;
| Réaligner prix, SKU et code-barres || Chaque modification Dolibarr réécrit ces champs sur un produit Shopify déjà publié.&lt;br /&gt;
|-&lt;br /&gt;
| Suivre « en vente » || Un produit retiré de la vente dans Dolibarr passe en brouillon sur Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Prix envoyé selon la boutique || Prix TTC envoyés si la boutique affiche ses prix taxes incluses.&lt;br /&gt;
|-&lt;br /&gt;
| Étiquettes imprimées dans Shopify || Chaque expédition Shopify crée et valide l&#039;expédition Dolibarr, stock sorti par Dolibarr.&lt;br /&gt;
|-&lt;br /&gt;
| Ignorer les commandes de test || Les commandes passées avec la passerelle de test Shopify ne sont pas importées.&lt;br /&gt;
|-&lt;br /&gt;
| Publier sur la Boutique en ligne || Un produit créé par le module est rendu visible sur la boutique.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Autres réglages : service Dolibarr des frais de port, taux de TVA par défaut, quantité Shopify échangée, notification d&#039;expédition au client (active par défaut), règlement et compte bancaire des commandes payées.&lt;br /&gt;
&lt;br /&gt;
=== Tâches planifiées sous Dolibarr 24 ===&lt;br /&gt;
&lt;br /&gt;
Les deux tâches du module sont de type &amp;lt;code&amp;gt;command&amp;lt;/code&amp;gt; (exécution en ligne de commande). Depuis Dolibarr 24, une tâche CLI est comptée &#039;&#039;&#039;en erreur&#039;&#039;&#039; si la variable &amp;lt;code&amp;gt;$dolibarr_cron_allow_cli&amp;lt;/code&amp;gt; n&#039;est pas activée — en version 20 le cas était seulement journalisé. Ajoutez donc dans &amp;lt;code&amp;gt;conf/conf.php&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 $dolibarr_cron_allow_cli = 1;&lt;br /&gt;
&lt;br /&gt;
Sans cela, les tâches « ShopifySync » s&#039;affichent en rouge dans &#039;&#039;Outils → Tâches planifiées&#039;&#039; alors même que le module fonctionne. Sans tâche planifiée active, le bouton « Traiter la file maintenant » du tableau de bord exécute la file à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Fonctionnement sans endpoint webhook ===&lt;br /&gt;
&lt;br /&gt;
Le module reste utilisable derrière un hébergement fermé aux connexions entrantes : la réconciliation planifiée, qui n&#039;effectue que des appels sortants, rattrape les commandes, les paiements, les annulations et les remboursements. La fenêtre d&#039;analyse (2 jours par défaut) se règle par la constante &amp;lt;code&amp;gt;SHOPIFYSYNC_RECONCILE_WINDOW_DAYS&amp;lt;/code&amp;gt;. L&#039;import étant idempotent, le recouvrement entre deux passages ne crée pas de doublon. Les jobs terminés sont purgés après 30 jours et le journal après 90 jours.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.1 || Code client obligatoire géré (clients créés avec le code de la numérotation Dolibarr) ; ventes sans client (caisse Shopify POS) portées par un tiers unique configurable ; motif des refus journalisé ; étiquettes d&#039;un emplacement non géré ignorées&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.0 || Étiquettes imprimées dans Shopify (option) : expédition Dolibarr créée et validée sur l&#039;entrepôt de l&#039;emplacement expéditeur, stock sorti par Dolibarr qui reste seul maître, suivi et transporteur repris, annulation gérée, rattrapage par la réconciliation&lt;br /&gt;
|-&lt;br /&gt;
| 1.2.0 || Prix TTC, frais de port, date de vente, contact de livraison et clients invités à l&#039;import ; annulations Shopify ; expéditions partielles avec transporteur ; prix, SKU et code-barres posés à la création des produits ; import d&#039;un produit par variante ; suppressions Shopify gérées ; réconciliation des paiements, annulations et remboursements ; actions du tableau de bord ; options de validation et de réalignement (désactivées par défaut, aucun changement de comportement à la mise à jour) ; validé sur Dolibarr 18, 20 et 24&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.2 || Bouton « Synchroniser » des fiches commande ; facture créée quand le paiement arrive après l&#039;import&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.1 || Export de stock compatible avec les API Shopify 2026-04 et suivantes ; sonde de compatibilité multi-versions&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.0 || Tableau de bord et écrans redessinés, encart « État Shopify » sur les fiches ; rattachement par SKU d&#039;un catalogue existant ; stock multi-emplacements&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.2 || Produits à variantes (options Shopify, 1 SKU par combinaison, pagination jusqu&#039;à 2 048 variantes, refus au-delà de 3 attributs) ; stock multi-entrepôts ; metafields ; règlement automatique des commandes payées ; adresse de facturation complète ; bouton « Tester la connexion » ; remises Shopify à l&#039;import ; réconciliation par horodatage absolu et rattrapage des remboursements&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || Gestion des erreurs GraphQL renvoyées en chaîne ; version d&#039;API portée à 2026-01 ; &amp;lt;code&amp;gt;inventoryActivate&amp;lt;/code&amp;gt; avant écriture de stock ; correction critique de la création des lignes de commande&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : commandes, clients, remboursements, produits, stock, expéditions, webhooks signés, file d&#039;attente, tableau de bord&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Shopify_Sync&amp;diff=67335</id>
		<title>Module Shopify Sync</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Shopify_Sync&amp;diff=67335"/>
		<updated>2026-09-17T08:38:17Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Version 1.2.0 : ce qui est synchronisé flux par flux, options, mise à jour, historique&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module Shopify Sync ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shopify Sync&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui assure une &#039;&#039;&#039;synchronisation bidirectionnelle quasi temps réel entre Shopify et Dolibarr&#039;&#039;&#039; : commandes, clients, remboursements, produits et variantes, stock et expéditions. Le module dialogue directement avec l&#039;API &#039;&#039;&#039;GraphQL Admin&#039;&#039;&#039; de Shopify — sans SaaS intermédiaire, sans abonnement supplémentaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Version || 1.2.0&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x (validé sur 18.0.5, 20.0.4 et 24.0.0)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum (extension cURL), validé jusqu&#039;à 8.2&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (cURL pur : pas de Composer, pas de SDK)&lt;br /&gt;
|-&lt;br /&gt;
! Version d&#039;API Shopify || 2026-01 par défaut, configurable ; appels vérifiés sur 2025-07, 2025-10, 2026-01, 2026-04, 2026-07 et unstable&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3218 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Commandes&#039;&#039;&#039; Shopify → Dolibarr : client (ou client invité), commande à la date de la vente, lignes reliées aux fiches produits, remises, &#039;&#039;&#039;frais de port&#039;&#039;&#039;, contact de livraison si l&#039;adresse diffère ; &#039;&#039;&#039;facture&#039;&#039;&#039; dès que la commande est payée, même après son import.&lt;br /&gt;
* &#039;&#039;&#039;Prix TTC ou HT&#039;&#039;&#039; : le module lit le réglage « taxes incluses » de la boutique, les montants importés correspondent à ce que le client a payé.&lt;br /&gt;
* &#039;&#039;&#039;Annulations&#039;&#039;&#039; Shopify répercutées sur la commande Dolibarr.&lt;br /&gt;
* &#039;&#039;&#039;Remboursements&#039;&#039;&#039; → avoirs Dolibarr : partiel (montant réellement rendu) ou total (avoir miroir ligne à ligne).&lt;br /&gt;
* &#039;&#039;&#039;Expéditions&#039;&#039;&#039; Dolibarr → Shopify : articles et quantités expédiés, numéro de suivi et transporteur ; expéditions partielles gérées.&lt;br /&gt;
* &#039;&#039;&#039;Produits&#039;&#039;&#039; dans les deux sens, avec une &#039;&#039;&#039;source de vérité configurable&#039;&#039;&#039; (produits, prix, stock).&lt;br /&gt;
* &#039;&#039;&#039;Catalogue existant&#039;&#039;&#039; : rattachement par SKU des variantes Shopify aux fiches Dolibarr existantes, sans produit parent ni module Variants.&lt;br /&gt;
* &#039;&#039;&#039;Produits à variantes&#039;&#039;&#039; (module Variants) : les attributs Dolibarr deviennent des options Shopify, une variante par combinaison. Limites de la boutique lues à l&#039;exécution (2 048 variantes, 3 options).&lt;br /&gt;
* &#039;&#039;&#039;Stock multi-emplacements&#039;&#039;&#039; : table « entrepôts Dolibarr = emplacement Shopify », ou un emplacement unique alimenté par les entrepôts choisis.&lt;br /&gt;
* &#039;&#039;&#039;Metafields&#039;&#039;&#039; : publication d&#039;attributs supplémentaires Dolibarr vers Shopify.&lt;br /&gt;
* &#039;&#039;&#039;Webhooks signés HMAC&#039;&#039;&#039; pour le quasi temps réel, doublés d&#039;une &#039;&#039;&#039;réconciliation planifiée&#039;&#039;&#039; qui rattrape commandes, paiements, annulations et remboursements manqués.&lt;br /&gt;
* &#039;&#039;&#039;File d&#039;attente asynchrone&#039;&#039;&#039; : limites de débit de l&#039;API absorbées, nouvelles tentatives sûres, aucun job traité deux fois.&lt;br /&gt;
* &#039;&#039;&#039;Anti-boucle&#039;&#039;&#039; par empreinte d&#039;état, et &#039;&#039;&#039;résolution de conflits&#039;&#039;&#039; configurable.&lt;br /&gt;
* &#039;&#039;&#039;Tableau de bord&#039;&#039;&#039; : file d&#039;attente, échecs, journal ; traiter la file maintenant, relancer les échecs, rattraper les commandes des N derniers jours.&lt;br /&gt;
* &#039;&#039;&#039;Encart « État Shopify »&#039;&#039;&#039; sur les fiches produit et commande, avec bouton « Synchroniser ».&lt;br /&gt;
* Bouton &#039;&#039;&#039;« Tester la connexion »&#039;&#039;&#039; : contrôles de configuration, droits, emplacements, webhooks et tâches planifiées, chacun avec le correctif suggéré.&lt;br /&gt;
* Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Ce qui est synchronisé, flux par flux ==&lt;br /&gt;
&lt;br /&gt;
Chaque flux s&#039;active ou se coupe indépendamment dans la configuration (carte « Flux synchronisés »).&lt;br /&gt;
&lt;br /&gt;
=== Commandes (Shopify → Dolibarr) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Événement Shopify !! Effet dans Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
| Commande créée || Tiers retrouvé par e-mail (sinon créé, avec l&#039;adresse de facturation et le pays) ; commande datée du jour de la vente, référence client = numéro Shopify ; une ligne par article, reliée à la fiche par la variante ou le SKU ; remises ; ligne « Frais de port » ; contact de livraison si l&#039;adresse diffère. La commande reste en &#039;&#039;&#039;brouillon&#039;&#039;&#039; (validation automatique en option).&lt;br /&gt;
|-&lt;br /&gt;
| Commande payée (tout de suite ou plus tard) || Facture créée depuis la commande et validée ; règlement enregistré en option (mode de paiement et compte bancaire au choix).&lt;br /&gt;
|-&lt;br /&gt;
| Commande annulée || Commande Dolibarr annulée, sauf si une expédition est déjà en cours.&lt;br /&gt;
|-&lt;br /&gt;
| Commande de test (passerelle de test Shopify) || Importée et signalée comme telle ; peut être ignorée par option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Un tiers existant n&#039;est jamais renommé par une commande : seuls les champs vides sont complétés.&lt;br /&gt;
&lt;br /&gt;
=== Clients (dans les deux sens) ===&lt;br /&gt;
&lt;br /&gt;
* Shopify → Dolibarr : un client créé ou modifié met à jour son tiers (nom, e-mail, adresse, téléphone, pays, province). Une raison sociale Shopify devient le nom du tiers.&lt;br /&gt;
* Dolibarr → Shopify : un tiers client créé ou modifié est publié (prénom, nom, e-mail, téléphone). Un tiers sans e-mail ni téléphone n&#039;est pas publié (exigence Shopify).&lt;br /&gt;
* Client supprimé sur Shopify : le lien est retiré, le tiers Dolibarr est conservé.&lt;br /&gt;
&lt;br /&gt;
=== Produits (dans les deux sens) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Sens !! Création !! Modification&lt;br /&gt;
|-&lt;br /&gt;
| Dolibarr → Shopify (source de vérité produits = Dolibarr) || Produit Shopify avec titre, description, prix, SKU (= référence), code-barres, suivi de stock, statut actif si la fiche est en vente, sinon brouillon. Publication sur la Boutique en ligne en option. || Titre, description et metafields. Prix, SKU et code-barres seulement si l&#039;option « Réaligner prix, SKU et code-barres » est cochée ; statut seulement si « Suivre en vente » est cochée.&lt;br /&gt;
|-&lt;br /&gt;
| Shopify → Dolibarr || Fiche Dolibarr (référence = SKU, libellé, prix, code-barres, statut) ; une fiche par variante pour un produit à plusieurs variantes. Si le SKU correspond à une référence existante, la fiche est &#039;&#039;&#039;rattachée&#039;&#039;&#039; sans être modifiée. || Libellé. Prix seulement si Shopify est source de vérité des prix ; statut et code-barres seulement si Shopify est source de vérité des produits.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Produit supprimé sur Shopify : liens retirés, fiche Dolibarr conservée, jamais recréée d&#039;office (le bouton « Synchroniser » de la fiche la republie).&lt;br /&gt;
* Fiche rattachée par SKU : utilisée pour les commandes et le stock ; son titre, sa description et son prix ne sont jamais réécrits.&lt;br /&gt;
* Prix envoyé à Shopify : HT de la fiche par défaut (fonctionnement historique), ou TTC si la boutique est en TTC (option « selon la boutique »).&lt;br /&gt;
&lt;br /&gt;
=== Stock (sens selon la source de vérité) ===&lt;br /&gt;
&lt;br /&gt;
* Source de vérité &#039;&#039;&#039;Dolibarr&#039;&#039;&#039; : chaque mouvement de stock publie la quantité des entrepôts choisis sur l&#039;emplacement Shopify correspondant (écriture « comparer puis écrire », conforme aux API 2026-04 et suivantes). Les niveaux Shopify sont ignorés : l&#039;expédition Dolibarr sortira le stock vendu.&lt;br /&gt;
* Source de vérité &#039;&#039;&#039;Shopify&#039;&#039;&#039; : un niveau modifié sur Shopify ajuste l&#039;entrepôt Dolibarr associé à l&#039;emplacement.&lt;br /&gt;
* Quantité échangée : physique publiée par défaut ; « Physique » dans les deux sens, ou « Disponible » si Dolibarr décrémente le stock dès la validation de commande (le diagnostic le suggère).&lt;br /&gt;
&lt;br /&gt;
=== Expéditions (Dolibarr → Shopify) ===&lt;br /&gt;
&lt;br /&gt;
* À la validation d&#039;une expédition liée à une commande Shopify, la commande passe « expédiée » sur Shopify pour les articles et quantités réellement expédiés (expéditions partielles comprises).&lt;br /&gt;
* Numéro de suivi et transporteur (d&#039;après le mode d&#039;expédition) transmis ; Shopify envoie au client son e-mail d&#039;expédition (désactivable).&lt;br /&gt;
* Une expédition n&#039;est jamais déclarée deux fois ; les expéditions de commandes qui ne viennent pas de Shopify sont ignorées.&lt;br /&gt;
* Le stock d&#039;un article expédié est publié après la déclaration de l&#039;expédition, pour que Shopify ne le décompte pas deux fois.&lt;br /&gt;
&lt;br /&gt;
=== Remboursements (Shopify → Dolibarr) ===&lt;br /&gt;
&lt;br /&gt;
* Remboursement partiel : avoir d&#039;une ligne au montant rendu, au taux de TVA de la facture d&#039;origine.&lt;br /&gt;
* Remboursement total : avoir reprenant chaque ligne de la facture.&lt;br /&gt;
* L&#039;avoir reste en brouillon par défaut (validation en option). Un remboursement arrivé avant sa commande ou sa facture attend jusqu&#039;à une heure.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
 Webhook Shopify ─┐                          ┌─ Trigger Dolibarr&lt;br /&gt;
                  ▼                          ▼&lt;br /&gt;
             [ JobQueue ] ── cron process_queue ── [ SyncEngine ]&lt;br /&gt;
                  │                                     │&lt;br /&gt;
           [ MappingRepository ]                 [ Mappers × 6 ]&lt;br /&gt;
         (id ↔ id + hash anti-boucle)      (Order / Customer / Refund /&lt;br /&gt;
                                            Product / Inventory / Fulfillment)&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
* Modules Dolibarr &#039;&#039;&#039;Produits&#039;&#039;&#039;, &#039;&#039;&#039;Commandes&#039;&#039;&#039; et &#039;&#039;&#039;Tiers&#039;&#039;&#039; actifs ; &#039;&#039;&#039;Stocks&#039;&#039;&#039;, &#039;&#039;&#039;Expéditions&#039;&#039;&#039; et &#039;&#039;&#039;Factures&#039;&#039;&#039; selon les flux utilisés.&lt;br /&gt;
* Une &#039;&#039;&#039;custom app Shopify&#039;&#039;&#039; disposant des droits Admin API (products, orders, inventory, customers, fulfillments, locations ; &amp;lt;code&amp;gt;read_publications&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;write_publications&amp;lt;/code&amp;gt; pour publier les nouveautés sur la Boutique en ligne), installée sur la boutique — elle fournit l&#039;&#039;&#039;Admin API access token&#039;&#039; (&amp;lt;code&amp;gt;shpat_…&amp;lt;/code&amp;gt;) et l&#039;&#039;&#039;app secret&#039;&#039;.&lt;br /&gt;
* Pour le temps réel : un endpoint webhook &#039;&#039;&#039;HTTPS public&#039;&#039;&#039;. Voir ci-dessous le fonctionnement sans webhook.&lt;br /&gt;
&lt;br /&gt;
== Installation et mise à jour ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_shopifysync-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039; (ou remplacer le dossier &amp;lt;code&amp;gt;custom/shopifysync&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Activer &#039;&#039;&#039;Shopify Sync&#039;&#039;&#039; (famille « Interfaces avec des systèmes externes »).&lt;br /&gt;
# Après une mise à jour : cliquer sur &#039;&#039;&#039;« Inscrire les webhooks »&#039;&#039;&#039; pour ajouter les nouveaux sujets, puis sur « Tester la connexion ». Les réglages existants sont conservés et le comportement par défaut ne change pas.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Créer l&#039;app Shopify&#039;&#039;&#039; et l&#039;installer sur la boutique :&lt;br /&gt;
#* &#039;&#039;Boutiques récentes&#039;&#039; — Shopify admin → &#039;&#039;Settings → Apps → Develop apps&#039;&#039; redirige vers le Dev Dashboard → &#039;&#039;Create app&#039;&#039; → &#039;&#039;Scopes&#039;&#039; → &#039;&#039;Install app&#039;&#039; ; le jeton s&#039;obtient par l&#039;installation OAuth.&lt;br /&gt;
#* &#039;&#039;Boutiques plus anciennes&#039;&#039; — &#039;&#039;Settings → Apps → Develop apps → Create app&#039;&#039; affiche directement l&#039;Admin API access token après installation.&lt;br /&gt;
# &#039;&#039;&#039;Connexion&#039;&#039;&#039; : domaine de la boutique, jeton, app secret, version d&#039;API.&lt;br /&gt;
# &#039;&#039;&#039;Stock&#039;&#039;&#039; : emplacement Shopify et entrepôts, ou table « entrepôts = emplacement » (une règle par ligne, ex. &amp;lt;code&amp;gt;23 = gid://shopify/Location/85613641922&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Choisir les &#039;&#039;&#039;flux&#039;&#039;&#039; et les &#039;&#039;&#039;sources de vérité&#039;&#039;&#039;, puis cliquer sur &#039;&#039;&#039;« Inscrire les webhooks »&#039;&#039;&#039;.&lt;br /&gt;
# Catalogue déjà en place des deux côtés : &#039;&#039;&#039;« Rattacher les variantes par SKU »&#039;&#039;&#039;.&lt;br /&gt;
# Historique à reprendre : tableau de bord → &#039;&#039;&#039;« Rattraper les commandes des N derniers jours »&#039;&#039;&#039;.&lt;br /&gt;
# Activer les &#039;&#039;&#039;tâches planifiées&#039;&#039;&#039; Dolibarr : traitement de la file et réconciliation.&lt;br /&gt;
&lt;br /&gt;
=== Options (désactivées par défaut) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Option !! Effet&lt;br /&gt;
|-&lt;br /&gt;
| Valider la commande || La commande importée reçoit sa référence définitive (et sort le stock si Dolibarr décrémente à la validation).&lt;br /&gt;
|-&lt;br /&gt;
| Valider l&#039;avoir || L&#039;avoir créé par un remboursement est validé aussitôt.&lt;br /&gt;
|-&lt;br /&gt;
| Réaligner prix, SKU et code-barres || Chaque modification Dolibarr réécrit ces champs sur un produit Shopify déjà publié.&lt;br /&gt;
|-&lt;br /&gt;
| Suivre « en vente » || Un produit retiré de la vente dans Dolibarr passe en brouillon sur Shopify.&lt;br /&gt;
|-&lt;br /&gt;
| Prix envoyé selon la boutique || Prix TTC envoyés si la boutique affiche ses prix taxes incluses.&lt;br /&gt;
|-&lt;br /&gt;
| Ignorer les commandes de test || Les commandes passées avec la passerelle de test Shopify ne sont pas importées.&lt;br /&gt;
|-&lt;br /&gt;
| Publier sur la Boutique en ligne || Un produit créé par le module est rendu visible sur la boutique.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Autres réglages : service Dolibarr des frais de port, taux de TVA par défaut, quantité Shopify échangée, notification d&#039;expédition au client (active par défaut), règlement et compte bancaire des commandes payées.&lt;br /&gt;
&lt;br /&gt;
=== Tâches planifiées sous Dolibarr 24 ===&lt;br /&gt;
&lt;br /&gt;
Les deux tâches du module sont de type &amp;lt;code&amp;gt;command&amp;lt;/code&amp;gt; (exécution en ligne de commande). Depuis Dolibarr 24, une tâche CLI est comptée &#039;&#039;&#039;en erreur&#039;&#039;&#039; si la variable &amp;lt;code&amp;gt;$dolibarr_cron_allow_cli&amp;lt;/code&amp;gt; n&#039;est pas activée — en version 20 le cas était seulement journalisé. Ajoutez donc dans &amp;lt;code&amp;gt;conf/conf.php&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 $dolibarr_cron_allow_cli = 1;&lt;br /&gt;
&lt;br /&gt;
Sans cela, les tâches « ShopifySync » s&#039;affichent en rouge dans &#039;&#039;Outils → Tâches planifiées&#039;&#039; alors même que le module fonctionne. Sans tâche planifiée active, le bouton « Traiter la file maintenant » du tableau de bord exécute la file à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Fonctionnement sans endpoint webhook ===&lt;br /&gt;
&lt;br /&gt;
Le module reste utilisable derrière un hébergement fermé aux connexions entrantes : la réconciliation planifiée, qui n&#039;effectue que des appels sortants, rattrape les commandes, les paiements, les annulations et les remboursements. La fenêtre d&#039;analyse (2 jours par défaut) se règle par la constante &amp;lt;code&amp;gt;SHOPIFYSYNC_RECONCILE_WINDOW_DAYS&amp;lt;/code&amp;gt;. L&#039;import étant idempotent, le recouvrement entre deux passages ne crée pas de doublon. Les jobs terminés sont purgés après 30 jours et le journal après 90 jours.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.2.0 || Prix TTC, frais de port, date de vente, contact de livraison et clients invités à l&#039;import ; annulations Shopify ; expéditions partielles avec transporteur ; prix, SKU et code-barres posés à la création des produits ; import d&#039;un produit par variante ; suppressions Shopify gérées ; réconciliation des paiements, annulations et remboursements ; actions du tableau de bord ; options de validation et de réalignement (désactivées par défaut, aucun changement de comportement à la mise à jour) ; validé sur Dolibarr 18, 20 et 24&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.2 || Bouton « Synchroniser » des fiches commande ; facture créée quand le paiement arrive après l&#039;import&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.1 || Export de stock compatible avec les API Shopify 2026-04 et suivantes ; sonde de compatibilité multi-versions&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.0 || Tableau de bord et écrans redessinés, encart « État Shopify » sur les fiches ; rattachement par SKU d&#039;un catalogue existant ; stock multi-emplacements&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.2 || Produits à variantes (options Shopify, 1 SKU par combinaison, pagination jusqu&#039;à 2 048 variantes, refus au-delà de 3 attributs) ; stock multi-entrepôts ; metafields ; règlement automatique des commandes payées ; adresse de facturation complète ; bouton « Tester la connexion » ; remises Shopify à l&#039;import ; réconciliation par horodatage absolu et rattrapage des remboursements&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || Gestion des erreurs GraphQL renvoyées en chaîne ; version d&#039;API portée à 2026-01 ; &amp;lt;code&amp;gt;inventoryActivate&amp;lt;/code&amp;gt; avant écriture de stock ; correction critique de la création des lignes de commande&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : commandes, clients, remboursements, produits, stock, expéditions, webhooks signés, file d&#039;attente, tableau de bord&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_WhatsApp_Notify&amp;diff=67205</id>
		<title>Module WhatsApp Notify</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_WhatsApp_Notify&amp;diff=67205"/>
		<updated>2026-09-06T12:03:20Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Categorie corrigee (Category: au lieu de Categorie:) et contact de support mis a jour&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module WhatsApp Notify ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WhatsApp Notify&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui envoie les factures et les relances de paiement directement sur le &#039;&#039;&#039;WhatsApp&#039;&#039;&#039; des clients, depuis Dolibarr, via l&#039;&#039;&#039;&#039;API Cloud officielle de Meta&#039;&#039;&#039; (messages template approuvés, envoi serveur, statuts de livraison). Il ne s&#039;agit ni d&#039;un lien « web.whatsapp » à ouvrir manuellement, ni d&#039;une passerelle tierce payante.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 23.x&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum (extension cURL)&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (cURL pur : pas de Composer, pas de SDK)&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3214 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* Bouton &#039;&#039;&#039;« Envoyer sur WhatsApp »&#039;&#039;&#039; sur la fiche facture, avec badge d&#039;état coloré.&lt;br /&gt;
* &#039;&#039;&#039;Envoi automatique&#039;&#039;&#039; optionnel dès la validation de la facture (déclencheur BILL_VALIDATE).&lt;br /&gt;
* &#039;&#039;&#039;PDF de la facture en pièce jointe&#039;&#039;&#039; du message WhatsApp (template avec en-tête Document).&lt;br /&gt;
* &#039;&#039;&#039;Suivi de livraison en temps réel&#039;&#039;&#039; : envoyé / livré / &#039;&#039;&#039;lu&#039;&#039;&#039; / échec — mis à jour par le webhook Meta (signature HMAC-SHA256 vérifiée).&lt;br /&gt;
* Message &#039;&#039;&#039;template&#039;&#039;&#039; à 3 variables : nom du client, référence de la facture, montant TTC.&lt;br /&gt;
* &#039;&#039;&#039;Numéros internationaux&#039;&#039;&#039; : normalisation automatique au format E.164, indicatif par défaut configurable pour les numéros locaux.&lt;br /&gt;
* &#039;&#039;&#039;Traçabilité&#039;&#039;&#039; : chaque envoi est journalisé en base (identifiant de message Meta, statut, date).&lt;br /&gt;
* Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Prérequis Meta (une seule fois, ~10 minutes) ==&lt;br /&gt;
&lt;br /&gt;
Le module utilise l&#039;API Cloud officielle — il faut donc un compte Meta :&lt;br /&gt;
&lt;br /&gt;
# Un &#039;&#039;&#039;compte Meta Business&#039;&#039;&#039; (gratuit) et une application de type « Business ».&lt;br /&gt;
# Un &#039;&#039;&#039;numéro WhatsApp Business&#039;&#039;&#039; relié à l&#039;API Cloud (un numéro de test est fourni gratuitement par Meta pour les essais).&lt;br /&gt;
# Un &#039;&#039;&#039;jeton d&#039;accès permanent&#039;&#039;&#039; (System User) — Meta &amp;gt; Business Settings &amp;gt; Users &amp;gt; System users.&lt;br /&gt;
# Un &#039;&#039;&#039;template de message approuvé&#039;&#039;&#039; : le texte prêt à copier est fourni avec le module ; l&#039;approbation Meta prend en général moins de 24 h.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note : Meta facture à la conversation/au message (directement à Meta). L&#039;ouverture du compte et le premier template sont gratuits.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_whatsappnotify-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039; et sélectionner le zip.&lt;br /&gt;
# Activer le module &#039;&#039;&#039;WhatsApp Notify&#039;&#039;&#039; dans la liste des modules (famille « Interfaces avec des systèmes externes »).&lt;br /&gt;
# Aucune dépendance à installer sur le serveur.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Menu &#039;&#039;Configuration → Modules → WhatsApp Notify&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Identifiants Meta&#039;&#039;&#039; : jeton d&#039;accès permanent, Phone Number ID, WhatsApp Business Account ID, version de l&#039;API.&lt;br /&gt;
* &#039;&#039;&#039;Webhook (suivi de livraison)&#039;&#039;&#039; : l&#039;URL à déclarer dans Meta est affichée ; renseigner le verify token et l&#039;app secret pour la vérification de signature.&lt;br /&gt;
* &#039;&#039;&#039;Messages&#039;&#039;&#039; : nom du template, langue du template, pièce jointe PDF (oui/non), envoi automatique à la validation (oui/non), indicatif téléphonique par défaut.&lt;br /&gt;
&lt;br /&gt;
Prérequis de données : le &#039;&#039;&#039;numéro de téléphone&#039;&#039;&#039; du tiers (fiche client) doit être renseigné — de préférence au format international (+33…, +212…) ; à défaut, l&#039;indicatif par défaut est appliqué.&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
* Sur la fiche d&#039;une &#039;&#039;&#039;facture validée&#039;&#039;&#039;, un encart « Notification WhatsApp » propose le bouton d&#039;envoi ; après envoi, il affiche le statut (envoyé / livré / lu) et le numéro du destinataire.&lt;br /&gt;
* En mode &#039;&#039;&#039;automatique&#039;&#039;&#039;, le message part dès la validation de la facture, sans action de l&#039;utilisateur.&lt;br /&gt;
* Chaque message envoyé est visible en base avec son identifiant Meta (wamid) pour audit.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : envoi manuel + automatique, template Meta, PDF en pièce jointe, webhook de statut signé, normalisation E.164, FR/EN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Assistance : https://github.com/chakibarrama/Dolistore/issues&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Factur-X_France&amp;diff=67204</id>
		<title>Module Factur-X France</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Factur-X_France&amp;diff=67204"/>
		<updated>2026-09-06T12:03:18Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Categorie corrigee (Category: au lieu de Categorie:) et contact de support mis a jour&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module Factur-X France ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Factur-X France&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui génère et contrôle des factures électroniques au format &#039;&#039;&#039;Factur-X&#039;&#039;&#039; (PDF/A-3 avec XML CII conforme à la norme européenne &#039;&#039;&#039;EN 16931&#039;&#039;&#039;), dans le cadre de la réforme française de la facturation électronique (dépôt PPF / plateformes agréées, Chorus Pro pour le secteur public).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (module autonome : pas de Java, pas de Composer, pas de service externe)&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3075 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Génération automatique&#039;&#039;&#039; du fichier Factur-X (PDF/A-3 + XML CII EN 16931) à la validation de chaque facture client — profils Minimum, Basic et Comfort (EN 16931).&lt;br /&gt;
* &#039;&#039;&#039;Types de documents&#039;&#039;&#039; : factures standard (380), avoirs (381), factures d&#039;acompte (386) et factures rectificatives (384), avec la référence à la facture d&#039;origine (BG-3) lorsque la norme l&#039;exige.&lt;br /&gt;
* &#039;&#039;&#039;Pré-contrôle « anti-rejet »&#039;&#039;&#039; : un encart sur la fiche facture indique, avant émission, si la facture est conforme ; en cas d&#039;anomalie, l&#039;identifiant officiel de la règle en cause est affiché (ex. BR-CL-23, BR-CO-15) avec le champ Dolibarr à corriger.&lt;br /&gt;
* &#039;&#039;&#039;Secteur public (B2G) — Chorus Pro&#039;&#039;&#039; : les clients de type « Administration » sont détectés automatiquement ; le SIRET du destinataire, le code service exécutant et le numéro d&#039;engagement (BT-10 / BT-13) sont contrôlés avant émission.&lt;br /&gt;
* &#039;&#039;&#039;Tableau de bord de conformité&#039;&#039;&#039; : score de conformité sur une période, règles en échec agrégées, détail par facture, et export par lot (ZIP) des XML Factur-X.&lt;br /&gt;
* &#039;&#039;&#039;QR de paiement SEPA&#039;&#039;&#039; (option, norme EPC069-12) : un QR-code imprimé sur le PDF permet au client de pré-remplir son virement (bénéficiaire, IBAN, montant, référence) en le scannant avec son application bancaire. Jamais imprimé sur les avoirs.&lt;br /&gt;
* &#039;&#039;&#039;Comportement fail-safe&#039;&#039;&#039; : une facture non conforme ne produit aucun fichier électronique douteux — le PDF standard de Dolibarr est conservé tel quel et l&#039;anomalie est expliquée.&lt;br /&gt;
* Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Conformité ==&lt;br /&gt;
&lt;br /&gt;
Les fichiers produits sont validés avec les outils de référence utilisés par les plateformes :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Schéma XSD officiel&#039;&#039;&#039; Factur-X / EN 16931 (validation structurelle, également exécutée en local avant chaque émission) ;&lt;br /&gt;
* &#039;&#039;&#039;Schematron officiel EN 16931&#039;&#039;&#039; (règles métier BR-*, BR-CO-*, BR-CL-*) ;&lt;br /&gt;
* &#039;&#039;&#039;veraPDF&#039;&#039;&#039; pour la conformité PDF/A-3b du PDF final ;&lt;br /&gt;
* Compatibilité &#039;&#039;&#039;ZUGFeRD 2.x&#039;&#039;&#039; : Factur-X et ZUGFeRD partagent la même spécification, les fichiers sont donc également utilisables avec des clients allemands.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_facturxfrance-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039; et sélectionner le zip.&lt;br /&gt;
# Activer le module &#039;&#039;&#039;FacturXFrance&#039;&#039;&#039; dans la liste des modules.&lt;br /&gt;
# Aucune dépendance à installer sur le serveur.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Menu &#039;&#039;Configuration → Modules → FacturXFrance&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Profil Factur-X&#039;&#039;&#039; : Minimum, Basic ou Comfort (recommandé pour PPF/PDP).&lt;br /&gt;
* &#039;&#039;&#039;Correspondance des taux de TVA&#039;&#039;&#039; : associer chaque taux local au code UNCL 5305 (S, Z, E, AE, K, G, O).&lt;br /&gt;
* &#039;&#039;&#039;Correspondance des unités&#039;&#039;&#039; : associer les unités Dolibarr aux codes UN/CEFACT (C62, HUR, KGM…).&lt;br /&gt;
* &#039;&#039;&#039;QR de paiement&#039;&#039;&#039; : case à cocher (désactivé par défaut).&lt;br /&gt;
* Un onglet &#039;&#039;À propos&#039;&#039; fournit un panneau de diagnostic (versions, extensions PHP) utile au support.&lt;br /&gt;
&lt;br /&gt;
Prérequis de données pour une facture conforme : SIRET de l&#039;émetteur, TVA intracommunautaire, compte bancaire (IBAN/BIC) associé à la facture, SIRET du client français. Pour un client « Administration » : renseigner le code service exécutant ou le numéro d&#039;engagement dans le champ « Réf. client » de la facture.&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
* À la &#039;&#039;&#039;validation d&#039;une facture&#039;&#039;&#039;, le XML Factur-X est généré puis injecté dans le PDF (PDF/A-3). Les fichiers sont visibles dans les documents joints de la facture.&lt;br /&gt;
* L&#039;encart &#039;&#039;&#039;Conformité Factur-X&#039;&#039;&#039; de la fiche facture permet de revérifier la conformité à tout moment.&lt;br /&gt;
* Le &#039;&#039;&#039;tableau de bord&#039;&#039;&#039; (lien depuis la page de configuration) permet d&#039;analyser une période entière et de télécharger tous les XML conformes en un ZIP.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.5.0 || QR de paiement SEPA (EPC069-12), compatibilité Dolibarr 18 renforcée&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.0 || Secteur public B2G : contrôles Chorus Pro, BT-10 / BT-13&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.0 || Factures d&#039;acompte et rectificatives, tableau de bord de conformité, export par lot&lt;br /&gt;
|-&lt;br /&gt;
| 1.2.0 || Avoirs (BG-3), validation XSD à l&#039;exécution, comportement fail-safe&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.x || Pré-contrôle EN 16931 en PHP, conformité PDF/A-3 (veraPDF)&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.x || Génération Factur-X initiale (XSD + Schematron)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Les demandes accompagnées d&#039;une capture de l&#039;onglet &#039;&#039;À propos&#039;&#039; (diagnostic) sont traitées plus rapidement.&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_DoliBank_Sync&amp;diff=67203</id>
		<title>Module DoliBank Sync</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_DoliBank_Sync&amp;diff=67203"/>
		<updated>2026-09-06T12:02:08Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Documentation du module externe DoliBank Sync (editeur arcchester)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module DoliBank Sync ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DoliBank Sync&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui fait &#039;&#039;&#039;arriver vos relevés bancaires tout seuls dans Dolibarr&#039;&#039;&#039; : connexion directe à &#039;&#039;&#039;Qonto&#039;&#039;&#039; et, via l&#039;&#039;&#039;&#039;open banking&#039;&#039;&#039;, aux banques européennes couvertes par GoCardless Bank Account Data. Chaque ligne est dédoublonnée, proposée au rapprochement, et peut devenir une dépense en un clic.&lt;br /&gt;
&lt;br /&gt;
Connecteur indépendant, &#039;&#039;&#039;non affilié à Qonto ni à GoCardless&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 20.0 à 24.x (testé sur 20.0.4 et 24.0.0, PHP 8.2)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 à 8.3&lt;br /&gt;
|-&lt;br /&gt;
! Prérequis || Module Banque actif ; module Cron recommandé pour les relevés automatiques&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (cURL pur)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Le besoin traité ==&lt;br /&gt;
&lt;br /&gt;
Relever le compte automatiquement, rapprocher les factures et créer les dépenses depuis le relevé est le deuxième besoin exprimé sur le forum Dolibarr francophone, après la facture électronique. Aujourd&#039;hui, il faut exporter un fichier depuis sa banque, l&#039;importer, puis pointer à la main.&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Connexion Qonto&#039;&#039;&#039; en deux champs : identifiant d&#039;organisation et clé secrète. Tous les comptes de l&#039;organisation sont remontés, avec les pièces jointes des transactions récentes.&lt;br /&gt;
# &#039;&#039;&#039;Connexion open banking&#039;&#039;&#039; (GoCardless Bank Account Data) : choix de la banque, consentement sur le site de la banque, retour dans Dolibarr, et renouvellement guidé avant expiration du consentement.&lt;br /&gt;
# &#039;&#039;&#039;Relevé automatique&#039;&#039;&#039; toutes les heures par tâche planifiée, incrémental et sans doublon.&lt;br /&gt;
# &#039;&#039;&#039;Boîte de réception&#039;&#039;&#039; des lignes nouvelles : rapprocher avec une facture client ou fournisseur, créer une facture fournisseur réglée, enregistrer un paiement divers, lier un virement interne, ignorer, ou laisser une règle proposer l&#039;action.&lt;br /&gt;
# &#039;&#039;&#039;Règles&#039;&#039;&#039; du type « le libellé contient X → fournisseur Y, compte Z ». Les règles &#039;&#039;&#039;proposent&#039;&#039;&#039;, l&#039;utilisateur valide.&lt;br /&gt;
# &#039;&#039;&#039;Deux chemins d&#039;intégration&#039;&#039;&#039; : seul, le module écrit dans le compte bancaire natif de Dolibarr ; avec [[Module DoliBank Match|DoliBank Match]] installé, il alimente son moteur de rapprochement explicable (candidats, scores, lettrage multi-factures, paiements partiels).&lt;br /&gt;
# &#039;&#039;&#039;Contrôle de solde&#039;&#039;&#039; : solde de la banque comparé au solde Dolibarr, compte par compte, tout écart étant signalé.&lt;br /&gt;
&lt;br /&gt;
Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Copier &amp;lt;code&amp;gt;dolibanksync/&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;htdocs/custom/&amp;lt;/code&amp;gt;, ou installer le zip depuis &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039;.&lt;br /&gt;
# Activer &#039;&#039;&#039;DoliBank Sync&#039;&#039;&#039; (famille « Finance / Facturation »).&lt;br /&gt;
# Attribuer les droits : consulter, traiter les lignes, gérer les connexions, configurer.&lt;br /&gt;
# Pour l&#039;open banking : créer un compte sur &amp;lt;code&amp;gt;bankaccountdata.gocardless.com&amp;lt;/code&amp;gt;, générer les « User secrets » et les saisir dans &#039;&#039;Configuration → DoliBank Sync&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
L&#039;usage de l&#039;open banking suppose un compte chez le fournisseur d&#039;agrégation, dont les conditions et les éventuels frais lui sont propres.&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;Banque → DoliBank Sync → Connexions bancaires → Nouvelle connexion&#039;&#039; : Qonto (identifiant + clé secrète), open banking (choix de la banque puis consentement sur son site), ou bac à sable pour essayer sans compte.&lt;br /&gt;
# Associer chaque compte remonté à un compte bancaire Dolibarr, cocher « Relever », enregistrer.&lt;br /&gt;
# &#039;&#039;&#039;« Relever maintenant »&#039;&#039;&#039; ou attendre la tâche horaire. Les lignes apparaissent dans la boîte de réception, et dans le compte bancaire Dolibarr (mode natif) ou dans DoliBank Match.&lt;br /&gt;
# Depuis une ligne : rapprocher une facture, créer une facture fournisseur réglée, un paiement divers, lier un virement interne, ou ignorer. Les règles pré-remplissent l&#039;action proposée.&lt;br /&gt;
&lt;br /&gt;
=== Mode natif : traitement des lignes bancaires ===&lt;br /&gt;
&lt;br /&gt;
À l&#039;import, chaque transaction devient une ligne du compte bancaire, dite &#039;&#039;&#039;ligne provisoire&#039;&#039;&#039;. Rapprocher une facture crée le règlement natif et le &#039;&#039;&#039;lie à cette ligne&#039;&#039;&#039; — aucune ligne n&#039;est créée en double. Un paiement divers crée sa propre ligne : la ligne provisoire, si elle n&#039;est pas encore rapprochée, est remplacée. Un virement interne relie les deux lignes existantes.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : connecteurs Qonto et open banking GoCardless, relevé horaire incrémental et dédoublonné, boîte de réception avec six actions, règles de proposition, intégration native ou via DoliBank Match, contrôle de solde, FR/EN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Pennylane_Sync&amp;diff=67202</id>
		<title>Module Pennylane Sync</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Pennylane_Sync&amp;diff=67202"/>
		<updated>2026-09-06T12:02:07Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Documentation du module externe Pennylane Sync (editeur arcchester)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module Pennylane Sync ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pennylane Sync&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui &#039;&#039;&#039;envoie automatiquement vos factures vers Pennylane&#039;&#039;&#039; : gardez Dolibarr pour la gestion, donnez Pennylane à votre expert-comptable. Les factures clients et fournisseurs validées, leurs PDF et les tiers partent vers Pennylane sans ressaisie ni export mensuel.&lt;br /&gt;
&lt;br /&gt;
Connecteur indépendant, &#039;&#039;&#039;non affilié à Pennylane SAS&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 20.0 à 24.x (testé sur 20.0.4 et 24.0.0, PHP 8.2)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 à 8.3&lt;br /&gt;
|-&lt;br /&gt;
! Prérequis || Modules Facturation et Tiers ; module Cron recommandé ; un jeton d&#039;API Pennylane&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (cURL pur)&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3483 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Factures clients&#039;&#039;&#039; validées envoyées avec leur PDF, leurs lignes, leurs taux de TVA et leur compte de produit. Avoirs et acomptes compris ; un avoir référence sa facture d&#039;origine.&lt;br /&gt;
# &#039;&#039;&#039;Factures fournisseurs&#039;&#039;&#039; saisies dans Dolibarr, envoyées avec leur pièce jointe.&lt;br /&gt;
# &#039;&#039;&#039;Création des tiers&#039;&#039;&#039; au premier envoi (société ou particulier, fournisseur sous son propre rôle), puis mise à jour ensuite.&lt;br /&gt;
# &#039;&#039;&#039;Résolution automatique des comptes comptables&#039;&#039;&#039; : le numéro de compte Dolibarr est traduit en identifiant Pennylane, avec mise en cache. Aucune table de correspondance à saisir à la main.&lt;br /&gt;
# &#039;&#039;&#039;File d&#039;attente tracée&#039;&#039;&#039; : chaque envoi est un job avec son statut, ses tentatives et le message exact renvoyé par l&#039;API. Reprise automatique, rejeu manuel, rattrapage d&#039;historique.&lt;br /&gt;
# &#039;&#039;&#039;Rapport d&#039;écart&#039;&#039;&#039; : mois par mois, ce que Dolibarr a validé face à ce que Pennylane a reçu — à vérifier avant une clôture.&lt;br /&gt;
# &#039;&#039;&#039;Panneau sur la fiche facture&#039;&#039;&#039; : date d&#039;envoi, identifiant distant, lien vers la pièce.&lt;br /&gt;
&lt;br /&gt;
Le module respecte les limites de débit de l&#039;API Pennylane (25 requêtes par tranche de 5 secondes) en se freinant sur les en-têtes de quota renvoyés par le serveur.&lt;br /&gt;
&lt;br /&gt;
== Les règlements : ce que le module fait, et pourquoi ==&lt;br /&gt;
&lt;br /&gt;
L&#039;API Pennylane ne permet pas d&#039;attacher un paiement chiffré à une facture, et une écriture comptable créée par l&#039;API ne peut pas être lettrée avec une pièce. Publier des règlements par ce biais laisserait des écritures à lettrer à la main et ferait double emploi avec le flux bancaire du cabinet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Le module ne pousse donc aucune écriture de règlement.&#039;&#039;&#039; À la place, chaque facture part avec une &#039;&#039;&#039;référence de rapprochement&#039;&#039;&#039; qui indique à Pennylane comment reconnaître le mouvement bancaire correspondant : le numéro de facture, ou l&#039;identifiant du paiement Stripe lorsque le module [[Module Stripe Payment Links|Stripe Payment Links]] est actif. Le lettrage devient exact parce que la référence l&#039;est.&lt;br /&gt;
&lt;br /&gt;
== Ce que le module ne fait pas ==&lt;br /&gt;
&lt;br /&gt;
* Il ne rapatrie rien de Pennylane vers Dolibarr : pas de double source de vérité.&lt;br /&gt;
* Il ne remplace pas la comptabilité de Dolibarr : il alimente celle du cabinet.&lt;br /&gt;
* Il n&#039;envoie ni commandes, ni devis, ni notes de frais, ni salaires.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Copier &amp;lt;code&amp;gt;pennylanesync/&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;htdocs/custom/&amp;lt;/code&amp;gt;, ou installer le zip depuis &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039;.&lt;br /&gt;
# Activer &#039;&#039;&#039;Pennylane Sync&#039;&#039;&#039; (famille « Finance / Facturation »).&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
# Dans Pennylane : &#039;&#039;Settings → Connectivity → Developers&#039;&#039; → créer un jeton d&#039;API. &#039;&#039;&#039;Un jeton correspond à une société.&#039;&#039;&#039;&lt;br /&gt;
# Coller le jeton dans la configuration du module et tester la connexion.&lt;br /&gt;
# Choisir ce qui est envoyé (factures clients, factures fournisseurs), et activer la tâche planifiée qui traite la file d&#039;attente.&lt;br /&gt;
# Facultatif : lancer un rattrapage d&#039;historique sur une période passée.&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
À la validation d&#039;une facture, un job est déposé dans la file. La tâche planifiée l&#039;exécute : le PDF est d&#039;abord téléversé, puis la facture est importée avec sa référence au fichier. Le panneau de la fiche facture montre l&#039;état de l&#039;envoi, et la page de la file permet de rejouer un job en échec après correction. Avant une clôture, le rapport d&#039;écart compare mois par mois les deux systèmes.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : envoi des factures clients et fournisseurs avec PDF, création et mise à jour des tiers, résolution des comptes comptables, file d&#039;attente tracée avec rejeu et rattrapage, référence de rapprochement bancaire, rapport d&#039;écart mensuel, panneau sur la fiche facture, FR/EN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_E-Reporting_France&amp;diff=67201</id>
		<title>Module E-Reporting France</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_E-Reporting_France&amp;diff=67201"/>
		<updated>2026-09-06T12:02:06Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Documentation du module externe E-Reporting France (editeur arcchester)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module E-Reporting France ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;E-Reporting France&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui &#039;&#039;&#039;transmet vos données de transaction et de paiement à votre Plateforme Agréée&#039;&#039;&#039;, directement depuis Dolibarr. C&#039;est le second volet de la réforme française de la facturation électronique — celui que la facture Factur-X ne couvre pas.&lt;br /&gt;
&lt;br /&gt;
Le module est développé contre les &#039;&#039;&#039;spécifications externes de la DGFiP v3.2 du 30 avril 2026&#039;&#039;&#039;, dont les schémas XSD du flux 10 sont embarqués dans le module.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 20.0 à 24.x (testé sur 20.0.4 et 24.0.0)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 à 8.3&lt;br /&gt;
|-&lt;br /&gt;
! Prérequis || Modules Facturation et Tiers ; module Cron recommandé&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (cURL seul : pas de Composer, pas de SDK)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== L&#039;obligation couverte ==&lt;br /&gt;
&lt;br /&gt;
À partir du &#039;&#039;&#039;1er septembre 2027&#039;&#039;&#039;, toute entreprise assujettie à la TVA doit transmettre à l&#039;administration, via sa Plateforme Agréée :&lt;br /&gt;
&lt;br /&gt;
* ses &#039;&#039;&#039;ventes aux particuliers&#039;&#039;&#039; (B2C), en France comme à l&#039;étranger ;&lt;br /&gt;
* ses &#039;&#039;&#039;opérations avec des entreprises étrangères&#039;&#039;&#039;, à la vente comme à l&#039;achat ;&lt;br /&gt;
* les &#039;&#039;&#039;données de paiement&#039;&#039;&#039; de ses prestations de services.&lt;br /&gt;
&lt;br /&gt;
Ces opérations n&#039;ont pas de facture électronique et ne passent donc pas par le circuit Factur-X. L&#039;amende est de &#039;&#039;&#039;500 € par transmission manquante&#039;&#039;&#039;, plafonnée à 15 000 € par an (article 1788 D du CGI, montant doublé par la loi de finances pour 2026).&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Classement de chaque opération&#039;&#039;&#039; : B2B France (hors périmètre), B2C, vente à l&#039;international, achat à l&#039;international. Chaque décision affiche la règle qui l&#039;a produite, et une surcharge par tiers permet de la contredire.&lt;br /&gt;
# &#039;&#039;&#039;Agrégation conforme&#039;&#039;&#039; : le B2C part par jour, devise et catégorie — jamais facture par facture, comme l&#039;impose le flux 10.3. L&#039;international part facture par facture.&lt;br /&gt;
# &#039;&#039;&#039;Deux calendriers tenus séparément&#039;&#039;&#039; : au réel normal mensuel, les transactions se déclarent par décade, trois fois par mois, mais les paiements &#039;&#039;&#039;une seule fois par mois&#039;&#039;&#039;. Le module suit les deux rythmes avec leurs échéances et leurs retards propres.&lt;br /&gt;
# &#039;&#039;&#039;Ventilation des encaissements&#039;&#039;&#039; par taux, au centime, sur la part prestations de services. Règlements partiels et multi-factures compris.&lt;br /&gt;
# &#039;&#039;&#039;Production du message officiel&#039;&#039;&#039; du flux 10, &#039;&#039;&#039;validé contre le XSD de la DGFiP avant l&#039;envoi&#039;&#039;&#039; : un message non conforme n&#039;est ni écrit ni transmis.&lt;br /&gt;
# &#039;&#039;&#039;Transmission&#039;&#039;&#039; via un bac à sable, un dépôt de fichier manuel, une API REST générique, ou les connecteurs du module [[Module PA Transmission|PA Transmission]] s&#039;il est installé.&lt;br /&gt;
# &#039;&#039;&#039;Journalisation&#039;&#039;&#039; de chaque tentative, de chaque réponse et de chaque rejet, avec possibilité de rejeu.&lt;br /&gt;
&lt;br /&gt;
== Ce que le module ne fait pas ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Il n&#039;est pas une Plateforme Agréée.&#039;&#039;&#039; Dolibarr équipé de ce module est une « solution compatible » au sens des spécifications externes : il ne dialogue jamais directement avec le portail public de facturation, il remet son flux à votre plateforme.&lt;br /&gt;
* Il n&#039;émet pas de factures électroniques B2B — voir [[Module Factur-X France|Factur-X France]] et [[Module PA Transmission|PA Transmission]].&lt;br /&gt;
* Il ne remplace pas la déclaration de TVA — voir [[Module DoliTax|DoliTax]].&lt;br /&gt;
* Il ne produit &#039;&#039;&#039;aucun message pour une période sans opération&#039;&#039;&#039; : les spécifications v3.2 suppriment l&#039;obligation d&#039;« e-reporting à blanc ».&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_ereportingfrance-x.y.z.zip&amp;lt;/code&amp;gt;, puis dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039;.&lt;br /&gt;
# Activer &#039;&#039;&#039;E-Reporting France&#039;&#039;&#039; (famille « Finance / Facturation »).&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
# Renseigner le &#039;&#039;&#039;SIREN&#039;&#039;&#039; de votre société dans la configuration du système : sans lui, aucune transmission n&#039;est possible.&lt;br /&gt;
# Choisir votre &#039;&#039;&#039;régime déclaratif de TVA&#039;&#039;&#039; et votre &#039;&#039;&#039;connecteur&#039;&#039;&#039; dans la configuration du module, puis tester le connecteur.&lt;br /&gt;
# Facultatif : fixer une &#039;&#039;&#039;date de début&#039;&#039;&#039; avant laquelle rien ne doit être déclaré, pour une mise en route sur un historique existant.&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
Le module ouvre les périodes déclaratives selon le calendrier de votre régime, y range les opérations classées, produit le message du flux 10, le valide, puis le transmet. Chaque période affiche son échéance, son contenu, son état et l&#039;historique de ses tentatives. Une page dédiée permet de reprendre à la main une opération dont le classement automatique ne convient pas.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : classement des opérations avec règle affichée et surcharge par tiers, agrégation B2C par jour/devise/catégorie, double calendrier transactions/paiements, ventilation des encaissements par taux, génération et validation XSD du flux 10 (spécifications DGFiP v3.2), connecteurs bac à sable / fichier / REST générique / PA Transmission, journal et rejeu, FR/EN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_PeppolConnect&amp;diff=67200</id>
		<title>Module PeppolConnect</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_PeppolConnect&amp;diff=67200"/>
		<updated>2026-09-06T12:02:05Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Documentation du module externe PeppolConnect (editeur arcchester)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module PeppolConnect ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PeppolConnect&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui génère des factures et avoirs au format &#039;&#039;&#039;UBL Peppol BIS Billing 3.0&#039;&#039;&#039;, les &#039;&#039;&#039;valide localement avant envoi&#039;&#039;&#039;, puis les transmet via l&#039;API du &#039;&#039;&#039;point d&#039;accès Peppol&#039;&#039;&#039; de votre choix. Il reçoit également les factures fournisseurs arrivées par le réseau.&lt;br /&gt;
&lt;br /&gt;
Cible principale : les entreprises &#039;&#039;&#039;belges&#039;&#039;&#039; (facturation électronique B2B obligatoire par Peppol depuis le 1er janvier 2026) et les échanges intra-UE sur le réseau Peppol.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x (activation vérifiée sur 18.0.5, 20.0.1 et 24.0.0)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum (extensions cURL et XML)&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (pas de Java, pas de Composer, pas de SDK)&lt;br /&gt;
|-&lt;br /&gt;
! Langues || Français, anglais, néerlandais&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ce que le module n&#039;est pas ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PeppolConnect n&#039;est pas un point d&#039;accès Peppol&#039;&#039;&#039; : il ne parle ni AS4 ni SMP. Il prépare, contrôle, dépose et suit vos documents chez un prestataire certifié (Peppyrus, e-invoice.be, Scrada, B2Brouter, Storecove…), chez qui un abonnement peut être nécessaire.&lt;br /&gt;
&lt;br /&gt;
En France, la conformité à la réforme de la facturation électronique passe par une &#039;&#039;&#039;Plateforme Agréée&#039;&#039;&#039; : ce module ne la remplace pas — voir [[Module Factur-X France|Factur-X France]] et [[Module PA Transmission|PA Transmission]].&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Identifiants Peppol résolus automatiquement&#039;&#039;&#039; depuis la fiche société et les fiches tiers : numéro d&#039;entreprise belge (schéma 0208, contrôle modulo 97), SIRET (0009), SIREN (0002), numéro de TVA par pays. Une surcharge reste possible par un champ « Identifiant Peppol » sur le tiers.&lt;br /&gt;
* &#039;&#039;&#039;Génération UBL&#039;&#039;&#039; : facture (380), acompte (386) et avoir (381) avec référence à la facture d&#039;origine ; remises de ligne et remises globales ; déduction d&#039;acomptes ; ventilation de TVA par catégorie EN 16931 avec motifs d&#039;exonération et codes VATEX ; moyens de paiement UNTDID 4461, IBAN et BIC.&lt;br /&gt;
* &#039;&#039;&#039;Validation locale avant envoi&#039;&#039;&#039; : contrôle XSD, puis une quarantaine de règles EN 16931. La conformité est prouvée contre le &#039;&#039;&#039;Schematron officiel&#039;&#039;&#039; Peppol BIS Billing 3.0.&lt;br /&gt;
* &#039;&#039;&#039;Comportement fail-closed&#039;&#039;&#039; : une donnée obligatoire manquante bloque la génération et affiche une erreur lisible (adresse client incomplète, identifiant non résolu, taux nul sans catégorie de TVA…). Aucun fichier partiel n&#039;est produit.&lt;br /&gt;
* &#039;&#039;&#039;Encart sur la fiche facture&#039;&#039;&#039; : destinataire Peppol résolu, statut du dernier document, boutons « Générer l&#039;UBL » et « Télécharger ».&lt;br /&gt;
* &#039;&#039;&#039;Suivi&#039;&#039;&#039; : page &#039;&#039;Documents Peppol&#039;&#039; avec bandeau de KPI, filtre par statut, téléchargement et envoi dès qu&#039;un connecteur est configuré.&lt;br /&gt;
* &#039;&#039;&#039;Réception des factures fournisseurs&#039;&#039;&#039; arrivées par le réseau, importées en brouillon.&lt;br /&gt;
* &#039;&#039;&#039;Diagnostic&#039;&#039;&#039; dans l&#039;onglet &#039;&#039;À propos&#039;&#039; : extensions PHP, table, identifiant émetteur, TVA de la société, prestataire, correspondance des taux de TVA.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Décompresser l&#039;archive pour obtenir le dossier &amp;lt;code&amp;gt;peppolconnect/&amp;lt;/code&amp;gt; et le copier dans &amp;lt;code&amp;gt;htdocs/custom/&amp;lt;/code&amp;gt; — ou installer le zip depuis &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039;.&lt;br /&gt;
# Activer &#039;&#039;&#039;PeppolConnect&#039;&#039;&#039; (famille « Finance / Facturation »).&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Menu &#039;&#039;Configuration → Modules → PeppolConnect&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prestataire&#039;&#039;&#039; (point d&#039;accès), &#039;&#039;&#039;clé API&#039;&#039;&#039;, case « Environnement de test », &#039;&#039;&#039;identifiant émetteur&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Correspondance des taux de TVA&#039;&#039;&#039; avec les catégories EN 16931 — importable en un clic depuis le module Factur-X France s&#039;il est installé.&lt;br /&gt;
* Bouton &#039;&#039;&#039;« Tester la connexion »&#039;&#039;&#039; : le module affiche l&#039;identifiant Peppol de votre participant tel que le prestataire le connaît.&lt;br /&gt;
&lt;br /&gt;
=== Se connecter à Peppyrus (point d&#039;accès, Belgique) ===&lt;br /&gt;
&lt;br /&gt;
# Créer un compte sur &amp;lt;code&amp;gt;customer.test.peppyrus.be&amp;lt;/code&amp;gt; (réseau de test) puis sur &amp;lt;code&amp;gt;customer.peppyrus.be&amp;lt;/code&amp;gt; (production).&lt;br /&gt;
# Déclarer votre identifiant de participant et les types de documents « Peppol BIS Billing UBL Invoice V3 » et « Credit Note V3 ».&lt;br /&gt;
# Créer une clé API et la coller dans la configuration du module, en cochant « Environnement de test » tant que vous êtes sur le réseau de test.&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
# Valider une facture client : l&#039;encart Peppol de la fiche indique le destinataire résolu et l&#039;état du document.&lt;br /&gt;
# &#039;&#039;&#039;« Générer l&#039;UBL »&#039;&#039;&#039; produit et valide le fichier ; en cas de donnée manquante, l&#039;erreur nomme le champ Dolibarr à corriger.&lt;br /&gt;
# Depuis la page &#039;&#039;Documents Peppol&#039;&#039;, envoyer le document au point d&#039;accès et suivre son statut.&lt;br /&gt;
# Les factures fournisseurs reçues par le réseau sont importées en brouillon, à contrôler puis valider.&lt;br /&gt;
&lt;br /&gt;
== État de la version 1.0.0 ==&lt;br /&gt;
&lt;br /&gt;
Génération et validation locales prouvées contre le Schematron officiel, connecteur Peppyrus (envoi, statuts, annuaire) et réception des factures fournisseurs. L&#039;ensemble est couvert par 377 assertions exécutées hors ligne, et l&#039;activation est vérifiée sur Dolibarr 18, 20 et 24. La validation sur le bac à sable Peppyrus en conditions réelles demande une clé d&#039;API du prestataire.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : génération UBL Peppol BIS Billing 3.0 (factures, acomptes, avoirs), validation XSD et EN 16931, connecteur Peppyrus, réception des factures fournisseurs, résolution des identifiants Peppol, FR/EN/NL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_DoliBank_Match&amp;diff=67199</id>
		<title>Module DoliBank Match</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_DoliBank_Match&amp;diff=67199"/>
		<updated>2026-09-06T12:01:59Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Documentation du module externe DoliBank Match (editeur arcchester)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module DoliBank Match ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DoliBank Match&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM de &#039;&#039;&#039;rapprochement bancaire explicable&#039;&#039;&#039;. Il importe les relevés bancaires dans tous les formats courants, propose des correspondances avec les factures clients et fournisseurs &#039;&#039;&#039;en justifiant chaque proposition&#039;&#039;&#039;, et ne comptabilise rien sans validation humaine explicite.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum&lt;br /&gt;
|-&lt;br /&gt;
! Prérequis || Module Banque / Caisse actif ; MySQL ou MariaDB&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune — les règlements sont écrits par les classes natives de Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3319 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
=== Import de relevés ===&lt;br /&gt;
&lt;br /&gt;
* Formats acceptés : &#039;&#039;&#039;CSV/TXT, OFX 1 et 2, QIF, ISO 20022 CAMT.052/.053/.054, MT940/STA et CODA 2.x&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Prévisualisation avant import&#039;&#039;&#039; : le fichier est analysé, stocké côté serveur et rattaché à l&#039;entité, à l&#039;utilisateur et au compte bancaire ; rien n&#039;est écrit tant que l&#039;import n&#039;est pas confirmé.&lt;br /&gt;
* &#039;&#039;&#039;Imports immuables&#039;&#039;&#039; et détection de doublons par empreinte SHA-256 : réimporter le même fichier ne crée jamais de doublon.&lt;br /&gt;
* &#039;&#039;&#039;Rapport des lignes rejetées&#039;&#039;&#039; : aucune ligne n&#039;est perdue silencieusement.&lt;br /&gt;
&lt;br /&gt;
Pour un fichier CSV, seules trois informations sont obligatoires : une date d&#039;opération, un libellé, et soit une colonne de montant, soit deux colonnes débit et crédit. Les colonnes facultatives (devise, date de valeur, identifiant, référence, contrepartie, IBAN) sont reconnues sous leurs noms français et anglais usuels.&lt;br /&gt;
&lt;br /&gt;
=== Rapprochement explicable ===&lt;br /&gt;
&lt;br /&gt;
* Candidats proposés parmi les &#039;&#039;&#039;factures clients et fournisseurs&#039;&#039;&#039;, les avoirs et les acomptes, chaque proposition affichant &#039;&#039;&#039;les éléments de preuve qui l&#039;ont produite&#039;&#039;&#039;.&lt;br /&gt;
* Preuves prises en compte : montant, date, référence fournisseur, &#039;&#039;&#039;références structurées belges OGM/VCS&#039;&#039;&#039;, &#039;&#039;&#039;ISO 11649 RF&#039;&#039;&#039;, et IBAN validé du tiers.&lt;br /&gt;
* Le &#039;&#039;&#039;montant exact ne suffit jamais&#039;&#039;&#039; à lui seul à déclencher une proposition — garde-fou volontaire contre les faux rapprochements.&lt;br /&gt;
* &#039;&#039;&#039;Règlement multi-factures&#039;&#039;&#039; : un virement affecté à plusieurs factures du même tiers ; &#039;&#039;&#039;paiements partiels&#039;&#039;&#039; pris en charge.&lt;br /&gt;
* &#039;&#039;&#039;Frais bancaires&#039;&#039;&#039; enregistrés via &amp;lt;code&amp;gt;PaymentVarious&amp;lt;/code&amp;gt;, &#039;&#039;&#039;virements internes&#039;&#039;&#039; proposés et écritures croisées.&lt;br /&gt;
* &#039;&#039;&#039;Versements de plateformes&#039;&#039;&#039; Stripe, PayPal et Shopify Payments normalisés, avec contrôle brut / frais / remboursements / net.&lt;br /&gt;
* &#039;&#039;&#039;Règles réutilisables&#039;&#039;&#039; et apprentissage IBAN — les règles &#039;&#039;&#039;proposent&#039;&#039;&#039;, elles ne comptabilisent jamais d&#039;elles-mêmes ; l&#039;apprentissage n&#039;a lieu qu&#039;après validation humaine.&lt;br /&gt;
&lt;br /&gt;
=== Sécurité de la comptabilisation ===&lt;br /&gt;
&lt;br /&gt;
La comptabilisation native est &#039;&#039;&#039;désactivée par défaut&#039;&#039;&#039; et exige trois conditions simultanées : la permission de rapprochement, une décision explicitement validée, et la permission dédiée de comptabilisation accompagnée du réglage correspondant du module. S&#039;y ajoutent la protection contre les doubles comptabilisations, contre les validations concurrentes et contre les sur-allocations cumulées, l&#039;idempotence des décisions, un état d&#039;erreur de comptabilisation explicitement non rejouable, et une &#039;&#039;&#039;piste d&#039;audit en ajout seul&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Interface ===&lt;br /&gt;
&lt;br /&gt;
Tableau de bord, boîte d&#039;opérations avec filtres avancés, écran de rapprochement, règles, versements de plateformes, connecteurs, rapports. Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_dolibankmatch-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039;.&lt;br /&gt;
# Activer &#039;&#039;&#039;DoliBank Match&#039;&#039;&#039; (famille « Finance / Facturation »).&lt;br /&gt;
# Configurer un compte bancaire par défaut et les seuils de score.&lt;br /&gt;
# Attribuer les droits d&#039;import et de rapprochement aux utilisateurs concernés.&lt;br /&gt;
# N&#039;accorder la permission de comptabilisation qu&#039;aux comptables autorisés, et n&#039;activer la comptabilisation native qu&#039;après un essai sur une copie de recette.&lt;br /&gt;
&lt;br /&gt;
En cas de mise à jour depuis une version 0.2.x, désactiver puis réactiver le module pendant une fenêtre de maintenance afin que Dolibarr enregistre les nouvelles tables, les menus, la tâche planifiée et la permission de comptabilisation. &#039;&#039;&#039;La désactivation ne supprime pas les tables du module.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
# Importer un relevé et contrôler la prévisualisation avant de confirmer.&lt;br /&gt;
# Parcourir les propositions : chacune indique le score et les preuves retenues.&lt;br /&gt;
# Valider les décisions ; la comptabilisation native n&#039;intervient qu&#039;ensuite, et seulement si elle a été explicitement autorisée.&lt;br /&gt;
# Les règles permettent d&#039;automatiser la &#039;&#039;proposition&#039;&#039; des cas récurrents, jamais leur écriture.&lt;br /&gt;
&lt;br /&gt;
== Périmètre des connecteurs ==&lt;br /&gt;
&lt;br /&gt;
La couche Open Banking et la synchronisation incrémentale sont implémentées avec un connecteur bac à sable déterministe : un fournisseur réel demande encore le choix du prestataire, des identifiants d&#039;API, un parcours de consentement et son renouvellement. Pour une &#039;&#039;&#039;connexion bancaire réelle&#039;&#039;&#039; (Qonto, open banking européen), voir le module complémentaire [[Module DoliBank Sync|DoliBank Sync]], qui alimente le moteur de rapprochement de DoliBank Match.&lt;br /&gt;
&lt;br /&gt;
Les versements Stripe, PayPal et Shopify Payments acceptent aujourd&#039;hui un JSON normalisé et relient les lignes de versement aux paiements Dolibarr par identifiant externe ; les clients d&#039;API et webhooks temps réel de ces plateformes constituent le jalon suivant.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.1 || Correction d&#039;une collision d&#039;identifiants de module et de permissions avec DoliTax ; restauration de l&#039;accès au tableau de bord, à l&#039;import et à la comptabilisation lorsque les deux modules sont activés&lt;br /&gt;
|-&lt;br /&gt;
| 0.3.0 || Prévisualisation avant import et rapport des rejets ; formats OFX, QIF, CAMT, MT940, CODA ; cycle brouillon → validation → comptabilisation native ; règlements multi-factures, partiels, avoirs et acomptes ; frais bancaires et virements internes ; protections anti-doublon et anti-sur-allocation ; règles et apprentissage IBAN ; interface Open Banking et connecteur bac à sable ; versements Stripe / PayPal / Shopify Payments&lt;br /&gt;
|-&lt;br /&gt;
| 0.2.0 || Références structurées OGM/VCS et ISO 11649 RF ; référence fournisseur et IBAN dans le moteur de score ; filtres avancés ; ignorance et restauration en masse, réversibles et auditées&lt;br /&gt;
|-&lt;br /&gt;
| 0.1.0 || Premier socle : import CSV, normalisation, détection de doublons, propositions explicables, tableau de bord, permissions, audit, FR/EN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_DoliTax&amp;diff=67198</id>
		<title>Module DoliTax</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_DoliTax&amp;diff=67198"/>
		<updated>2026-09-06T12:01:58Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Documentation du module externe DoliTax (editeur arcchester)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module DoliTax ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DoliTax&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM destiné aux &#039;&#039;&#039;experts-comptables et directions financières&#039;&#039;&#039; : il produit une &#039;&#039;&#039;grille de TVA&#039;&#039;&#039;, calcule les &#039;&#039;&#039;réintégrations fiscales&#039;&#039;&#039; et une &#039;&#039;&#039;provision d&#039;impôt sur les sociétés&#039;&#039;&#039; à partir des seules données Dolibarr.&lt;br /&gt;
&lt;br /&gt;
Le calcul est &#039;&#039;&#039;déterministe&#039;&#039;&#039; : aucune intelligence artificielle, aucun appel externe, uniquement des agrégations SQL. Mêmes entrées, mêmes résultats, au centime.&lt;br /&gt;
&lt;br /&gt;
Presets &#039;&#039;&#039;France&#039;&#039;&#039; (par défaut), &#039;&#039;&#039;Suisse&#039;&#039;&#039; et &#039;&#039;&#039;Maroc&#039;&#039;&#039; — taux, régime et barèmes restent entièrement paramétrables.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune — lecture pure : le module ne pose ni hook ni déclencheur et n&#039;écrit dans aucune donnée métier&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3400 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Grille de TVA ===&lt;br /&gt;
&lt;br /&gt;
Bases HT et TVA ventilées par taux légal, côté collecté et déductible, avec le solde (TVA due ou crédit de TVA), par mois, trimestre ou année.&lt;br /&gt;
&lt;br /&gt;
Les trois régimes d&#039;exigibilité sont implémentés :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Régime !! Ventes !! Achats&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Débits&#039;&#039;&#039; || à la date de facture || à la date de facture&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Encaissements&#039;&#039;&#039; || au prorata des paiements de la période || idem&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Mixte&#039;&#039;&#039; (droit commun français) || biens aux débits, services à l&#039;encaissement || idem&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Règles particulières appliquées dans tous les régimes :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Factures d&#039;acompte&#039;&#039;&#039; : toujours prises à l&#039;encaissement — France, art. 269-2 du CGI depuis le 01/01/2023, en alignement sur l&#039;article 65 de la directive 2006/112/CE ; avances encaissées au Maroc.&lt;br /&gt;
* &#039;&#039;&#039;TVA déductible au paiement&#039;&#039;&#039; (option) : le droit à déduction naît au règlement de la facture fournisseur quel que soit le régime — droit commun marocain, activé par le preset MA.&lt;br /&gt;
* &#039;&#039;&#039;Prorata de déduction&#039;&#039;&#039; (option, 100 % par défaut) pour les assujettis partiels.&lt;br /&gt;
* Tout taux hors de la liste légale configurée bascule dans un bucket &#039;&#039;&#039;« Autres taux — à contrôler »&#039;&#039;&#039; visible à l&#039;écran : jamais ignoré silencieusement.&lt;br /&gt;
&lt;br /&gt;
Périmètre : factures validées ou payées ; brouillons et factures abandonnées exclus ; avoirs comptés en négatif.&lt;br /&gt;
&lt;br /&gt;
=== 2. Réintégrations fiscales ===&lt;br /&gt;
&lt;br /&gt;
Table de plafonds de déductibilité par compte comptable, avec deux sémantiques distinctes :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Plafond annuel&#039;&#039;&#039; → réintégration du seul excédent : &amp;lt;code&amp;gt;max(0, total du compte − plafond)&amp;lt;/code&amp;gt;. Exemple français : amortissements de véhicules de tourisme au-delà de 18 300 €.&lt;br /&gt;
* &#039;&#039;&#039;Plafond unitaire&#039;&#039;&#039; → réintégration de la &#039;&#039;&#039;totalité&#039;&#039;&#039; des lignes dont le prix unitaire dépasse le plafond : un cadeau au-dessus du seuil est intégralement non déductible, pas seulement pour son excédent. Exemple : cadeaux clients à 73 € TTC en France, 100 DH au Maroc.&lt;br /&gt;
* &#039;&#039;&#039;Plafond à 0&#039;&#039;&#039; en règle annuelle → compte intégralement non déductible (amendes, pénalités).&lt;br /&gt;
&lt;br /&gt;
Source des montants : les écritures comptables si le module Comptabilité est actif et alimenté ; à défaut les lignes de factures fournisseurs via leur ventilation comptable, puis le compte d&#039;achat du produit. &#039;&#039;&#039;La source réellement utilisée est toujours affichée.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 3. Cockpit impôt sur les sociétés ===&lt;br /&gt;
&lt;br /&gt;
Chiffre d&#039;affaires HT, résultat net comptable, réintégrations et &#039;&#039;&#039;provision d&#039;IS&#039;&#039;&#039;, puis le tableau de passage comptable → fiscal → impôt, détaillé tranche par tranche.&lt;br /&gt;
&lt;br /&gt;
* Barème &#039;&#039;&#039;progressif&#039;&#039;&#039; (ventilation par tranches — France 15 % / 25 %) ou &#039;&#039;&#039;proportionnel par seuils&#039;&#039;&#039; (le taux de la tranche atteinte s&#039;applique à tout le résultat — Maroc depuis la LF 2023, taux effectif cantonal suisse).&lt;br /&gt;
* &#039;&#039;&#039;Cotisation minimale&#039;&#039;&#039; optionnelle (Maroc) : &amp;lt;code&amp;gt;IS dû = max(IS barème, max(CA × taux, plancher))&amp;lt;/code&amp;gt;, due même en situation déficitaire.&lt;br /&gt;
* Barème stocké &#039;&#039;&#039;par exercice&#039;&#039;&#039; : un nouveau barème de loi de finances ne casse pas l&#039;historique.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_dolitax-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039;.&lt;br /&gt;
# Activer &#039;&#039;&#039;DoliTax&#039;&#039;&#039; (famille « Finance / Comptabilité »).&lt;br /&gt;
&lt;br /&gt;
Les tables &amp;lt;code&amp;gt;llx_dolitax_is_brackets&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;llx_dolitax_ceilings&amp;lt;/code&amp;gt; sont créées à l&#039;activation et &#039;&#039;&#039;conservées&#039;&#039;&#039; en cas de désactivation.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
# Ouvrir la configuration du module, onglet &#039;&#039;&#039;Options&#039;&#039;&#039; → choisir le preset pays → &#039;&#039;&#039;Appliquer le preset&#039;&#039;&#039;.&lt;br /&gt;
# Vérifier et adapter les comptes des plafonds à votre plan comptable, ainsi que le barème d&#039;IS de l&#039;exercice.&lt;br /&gt;
# Les préfixes de comptes (produits, charges, chiffre d&#039;affaires, comptes d&#039;impôt exclus des charges) sont paramétrables — indispensable hors plan comptable général français, le chiffre d&#039;affaires étant en 71x au Maroc.&lt;br /&gt;
&lt;br /&gt;
Droits : &amp;lt;code&amp;gt;dolitax → read&amp;lt;/code&amp;gt; pour consulter les trois tableaux de bord, &amp;lt;code&amp;gt;dolitax → admin&amp;lt;/code&amp;gt; pour la configuration.&lt;br /&gt;
&lt;br /&gt;
== Limites assumées de la version 1.0 ==&lt;br /&gt;
&lt;br /&gt;
DoliTax est un outil de &#039;&#039;&#039;pré-calcul et de contrôle de gestion&#039;&#039;&#039;, pas un logiciel de liasse fiscale. Ne sont pas traités :&lt;br /&gt;
&lt;br /&gt;
* l&#039;exercice décalé (l&#039;exercice est l&#039;année civile) ;&lt;br /&gt;
* l&#039;autoliquidation : acquisitions intracommunautaires et services intra-UE (France), impôt sur les acquisitions (Suisse), article 115 (Maroc) ;&lt;br /&gt;
* la TVA à l&#039;importation, la TVA sur marge, la franchise en base ;&lt;br /&gt;
* la TVA non récupérable par nature (véhicules de tourisme, carburants) — à traiter via le prorata global ou hors module ;&lt;br /&gt;
* le report déficitaire, les crédits et réductions d&#039;impôt, les acomptes provisionnels ;&lt;br /&gt;
* les contributions additionnelles (contribution sociale de 3,3 % en France, contribution sociale de solidarité marocaine) ;&lt;br /&gt;
* la méthode des taux de la dette fiscale nette (Suisse).&lt;br /&gt;
&lt;br /&gt;
=== Points de vigilance ===&lt;br /&gt;
&lt;br /&gt;
Ces comportements sont volontaires et documentés, mais doivent être connus :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mode « flux »&#039;&#039;&#039; (sans le module Comptabilité) : c&#039;est une approximation de gestion. Les immobilisations achetées sur facture fournisseur y sont comptées en charge &#039;&#039;et&#039;&#039; amorties si le module Immobilisations est actif. Pour un résultat exact, activez la comptabilité : le module bascule alors automatiquement sur le grand livre.&lt;br /&gt;
* &#039;&#039;&#039;Plafond d&#039;amortissement des véhicules&#039;&#039;&#039; : la règle annuelle compare le total du compte au plafond, alors que le plafond légal porte sur la base amortissable par véhicule. Avec plusieurs véhicules, saisissez le plafond cumulé correspondant.&lt;br /&gt;
* &#039;&#039;&#039;Règle unitaire&#039;&#039;&#039; : le seuil est comparé au prix unitaire TTC, ligne par ligne, conformément aux textes. Le cumul annuel par bénéficiaire (règle française des cadeaux) n&#039;est pas reconstituable depuis les factures Dolibarr et n&#039;est donc pas calculé.&lt;br /&gt;
* &#039;&#039;&#039;Factures de situation&#039;&#039;&#039; : traitées exactement comme le rapport de TVA natif de Dolibarr, afin que les deux états concordent.&lt;br /&gt;
* &#039;&#039;&#039;Factures abandonnées&#039;&#039;&#039; : exclues. Une créance devenue irrécouvrable ne fait donc pas remonter automatiquement la TVA déjà déclarée — l&#039;ajustement reste manuel.&lt;br /&gt;
* &#039;&#039;&#039;Régime mixte et lignes de remise&#039;&#039;&#039; : le partage est exhaustif (services à l&#039;encaissement, tout le reste aux débits), donc aucune ligne n&#039;est perdue. En revanche, une ligne de remise ou de déduction d&#039;acompte, que Dolibarr crée sans nature explicite, est traitée comme un bien : sur une facture de services, sa TVA est prise à la facturation alors que la prestation l&#039;est à l&#039;encaissement. Il s&#039;agit d&#039;un écart de calendrier — le cumul sur l&#039;exercice reste juste.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : grille de TVA (débits / encaissements / mixte), réintégrations par plafonds annuels et unitaires, provision d&#039;IS (barème progressif ou proportionnel, cotisation minimale), presets France / Suisse / Maroc, FR/EN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_LogiCockpit&amp;diff=67197</id>
		<title>Module LogiCockpit</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_LogiCockpit&amp;diff=67197"/>
		<updated>2026-09-06T12:01:57Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Documentation du module externe LogiCockpit (editeur arcchester)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module LogiCockpit ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LogiCockpit&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui regroupe dans un &#039;&#039;&#039;écran unique, entièrement en AJAX&#039;&#039;&#039;, tout le flux commande → expédition → reliquat → facture. Expédier, suivre les reliquats et facturer les bons de livraison en masse se font sans jamais recharger la page.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x (suite d&#039;intégration rejouée sur Dolibarr 24.0.0)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 à 8.3&lt;br /&gt;
|-&lt;br /&gt;
! Bases de données || MySQL / MariaDB et PostgreSQL&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune — aucune modification du cœur, écritures effectuées par les classes natives Dolibarr&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3316 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Le problème traité ==&lt;br /&gt;
&lt;br /&gt;
Dans Dolibarr natif, expédier une commande demande une demi-douzaine d&#039;écrans et une dizaine de clics. Suivre les reliquats impose d&#039;ouvrir chaque commande une par une. Et en fin de mois, les bons de livraison se facturent un par un : le cœur ne sait pas regrouper plusieurs BL d&#039;un même client dans une seule facture.&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
=== Bandeau de KPI temps réel ===&lt;br /&gt;
&lt;br /&gt;
Quatre compteurs rafraîchis en continu : commandes en attente d&#039;expédition, reliquats critiques en attente de stock, BL à facturer, et montant HT en attente de facturation.&lt;br /&gt;
&lt;br /&gt;
=== Onglet « À expédier » — Quick-Dispatch ===&lt;br /&gt;
&lt;br /&gt;
* Liste dense des commandes validées ou en cours, avec un &#039;&#039;&#039;badge de disponibilité du stock&#039;&#039;&#039; calculé produit par produit : tout en stock, livrable partiellement, ou rupture totale.&lt;br /&gt;
* Recherche instantanée, filtres par badge, alerte visuelle sur les commandes en retard par rapport à la date souhaitée.&lt;br /&gt;
* &#039;&#039;&#039;Tiroir de saisie rapide&#039;&#039;&#039; : quantités pré-remplies au maximum livrable selon le stock réel, choix de l&#039;entrepôt source (le mieux fourni est présélectionné), détail du stock par entrepôt.&lt;br /&gt;
* &#039;&#039;&#039;« Générer et valider le bon de livraison » en un clic&#039;&#039;&#039;, sans quitter l&#039;écran. Le stock est décrémenté par le cœur de Dolibarr, comme d&#039;habitude.&lt;br /&gt;
* &#039;&#039;&#039;Utilisation entièrement au clavier&#039;&#039;&#039; : Entrée passe à la ligne suivante, la dernière ligne valide, Échap ferme.&lt;br /&gt;
* &#039;&#039;&#039;Douchette code-barres&#039;&#039;&#039; : scanner une référence ou un code-barres incrémente la ligne de +1 ; enchaîner les scans puis valider.&lt;br /&gt;
* Garde-fous : détection des BL brouillon existants (anti-double expédition), produits gérés en lot/série redirigés vers la fiche native, revalidation de toutes les quantités côté serveur.&lt;br /&gt;
&lt;br /&gt;
=== Onglet « Reliquats &amp;amp; backorders » ===&lt;br /&gt;
&lt;br /&gt;
Liste dédiée des commandes &#039;&#039;&#039;partiellement livrées&#039;&#039;&#039;, avec un badge indiquant si le stock permet de les solder. Trois résolutions, chacune en un clic :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Créer une sous-commande de reliquat&#039;&#039;&#039; : nouvelle commande liée reprenant les lignes manquantes (prix, TVA, remises et champs complémentaires conservés) ; la commande initiale est classée livrée ; la traçabilité est visible dans les objets liés.&lt;br /&gt;
* &#039;&#039;&#039;Clôturer le solde&#039;&#039;&#039; : abandon du reste à livrer, libération du stock prévisionnel, trace horodatée en note privée.&lt;br /&gt;
* &#039;&#039;&#039;Alerte client&#039;&#039;&#039; : email d&#039;information pré-rempli (articles restants et quantités), à copier ou à ouvrir dans votre messagerie.&lt;br /&gt;
&lt;br /&gt;
=== Onglet « À facturer » — Facturation groupée ===&lt;br /&gt;
&lt;br /&gt;
* Tous les BL validés non facturés, &#039;&#039;&#039;regroupés par client&#039;&#039;&#039; avec sous-totaux.&lt;br /&gt;
* Sélection par bon de livraison ou par client entier, barre de sélection flottante affichant le total en direct.&lt;br /&gt;
* &#039;&#039;&#039;Une seule facture par client&#039;&#039;&#039;, quel que soit le nombre de BL sélectionnés, avec une ligne séparatrice entre les lots : &#039;&#039;« --- Bon de livraison BL2607-0012 du 12/07/2026 --- »&#039;&#039;.&lt;br /&gt;
* Prix, TVA, remises, unités et champs complémentaires repris des lignes de commande d&#039;origine ; liens de traçabilité facture ↔ BL ↔ commandes créés ; BL passés au statut &#039;&#039;Facturé&#039;&#039; (le déclencheur &amp;lt;code&amp;gt;SHIPPING_BILLED&amp;lt;/code&amp;gt; est émis).&lt;br /&gt;
* Factures créées &#039;&#039;&#039;en brouillon&#039;&#039;&#039; pour relecture ; validation automatique disponible en option.&lt;br /&gt;
&lt;br /&gt;
== Gain mesuré ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Tâche !! Dolibarr natif !! Avec LogiCockpit&lt;br /&gt;
|-&lt;br /&gt;
| Expédier une commande || ~10 clics, 6 écrans || 2 clics, aucun rechargement&lt;br /&gt;
|-&lt;br /&gt;
| Trouver les reliquats || Commande par commande || Liste dédiée + badge de stock&lt;br /&gt;
|-&lt;br /&gt;
| Résoudre un reliquat || Recréation manuelle || 1 clic (sous-commande liée)&lt;br /&gt;
|-&lt;br /&gt;
| Facturer 40 BL en fin de mois || 40 factures une par une || 2 clics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_logicockpit-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039;.&lt;br /&gt;
# Activer &#039;&#039;&#039;LogiCockpit&#039;&#039;&#039; dans la liste des modules (famille « Produits / Stock »).&lt;br /&gt;
# Les modules Commandes, Expéditions, Factures et Stocks doivent être actifs.&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
Le module n&#039;ajoute aucune table : il lit et écrit exclusivement via les classes natives de Dolibarr. Tout se passe dans la page &#039;&#039;Cockpit&#039;&#039;, accessible depuis le menu logistique, organisée en trois onglets décrits ci-dessus.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || Compatibilité Dolibarr 24.0 : le modèle PDF de repli de la facturation groupée était &amp;lt;code&amp;gt;crabe&amp;lt;/code&amp;gt;, supprimé du cœur en 24.0 — remplacé par &amp;lt;code&amp;gt;sponge&amp;lt;/code&amp;gt;, présent de la V18 à la V24. Suite d&#039;intégration rejouée sur 24.0.0 (69/69).&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : bandeau KPI, Quick-Dispatch avec douchette, reliquats et sous-commandes liées, facturation groupée par client, FR/EN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_PDF_Annexes&amp;diff=67196</id>
		<title>Module PDF Annexes</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_PDF_Annexes&amp;diff=67196"/>
		<updated>2026-09-06T12:01:56Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Documentation du module externe PDF Annexes (editeur arcchester)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module PDF Annexes ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PDF Annexes&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui &#039;&#039;&#039;fusionne automatiquement vos annexes PDF&#039;&#039;&#039; — conditions générales de vente, fiches techniques, RIB, plaquettes — dans les PDF de vos &#039;&#039;&#039;devis, commandes et factures&#039;&#039;&#039;. Le document généré est un fichier unique, envoyé tel quel par email : plus de CGV oubliées ni expédiées dans une pièce jointe séparée.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x (validé sur Dolibarr 24.0.0)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 à 8.3&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune — le module utilise le moteur PDF déjà présent dans Dolibarr (TCPDI), sans librairie externe ni binaire serveur&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3315 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Fusion native&#039;&#039;&#039; : le PDF officiel Dolibarr et vos annexes ne forment plus qu&#039;un seul fichier, généré au même emplacement que d&#039;habitude — aucun changement dans vos habitudes d&#039;envoi.&lt;br /&gt;
* &#039;&#039;&#039;Règles conditionnelles sans code&#039;&#039;&#039; :&lt;br /&gt;
** par &#039;&#039;&#039;type de document&#039;&#039;&#039; : devis, commandes, factures ;&lt;br /&gt;
** par &#039;&#039;&#039;montant TTC&#039;&#039;&#039; (minimum / maximum) — par exemple joindre une plaquette seulement au-delà de 5 000 € ;&lt;br /&gt;
** par &#039;&#039;&#039;pays du tiers&#039;&#039;&#039; (« parmi FR, BE, CH » ou « hors de FR ») — par exemple des CGV export ;&lt;br /&gt;
** par &#039;&#039;&#039;langue du document&#039;&#039;&#039; — CGV françaises ou anglaises selon la langue de la facture.&lt;br /&gt;
* &#039;&#039;&#039;Position au choix&#039;&#039;&#039; : page de garde (avant le document) ou annexe (après).&lt;br /&gt;
* &#039;&#039;&#039;Fiches techniques produits automatiques&#039;&#039;&#039; : les PDF attachés aux produits présents dans les lignes du document sont annexés d&#039;eux-mêmes, une seule fois par produit, selon un motif de nom configurable (par exemple &amp;lt;code&amp;gt;FT_*.pdf&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &#039;&#039;&#039;Validation à l&#039;upload&#039;&#039;&#039; : chaque PDF est testé par le moteur de fusion au moment de l&#039;envoi. Un fichier protégé ou incompatible est refusé immédiatement avec un message clair, au lieu d&#039;échouer silencieusement plus tard.&lt;br /&gt;
* &#039;&#039;&#039;Jamais bloquant&#039;&#039;&#039; : si une annexe pose problème à la génération, elle est simplement omise ; en cas d&#039;échec de la fusion, le document natif reste intact.&lt;br /&gt;
* &#039;&#039;&#039;Compatible Factur-X&#039;&#039;&#039; : les factures électroniques PDF/A-3 produites par le module [[Module Factur-X France|Factur-X France]] ne sont jamais altérées (option &amp;lt;code&amp;gt;PDFANNEXES_SKIP_IF_FACTURX&amp;lt;/code&amp;gt;, activée par défaut).&lt;br /&gt;
* Compatible avec les modèles de document du cœur (azur, sponge, eratosthene…) sans aucune modification de ceux-ci.&lt;br /&gt;
* Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_pdfannexes-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039;.&lt;br /&gt;
# Activer &#039;&#039;&#039;PDF Annexes&#039;&#039;&#039; dans la liste des modules (famille « Outils »).&lt;br /&gt;
&lt;br /&gt;
== Configuration : vos CGV en deux minutes ==&lt;br /&gt;
&lt;br /&gt;
# Ouvrir la configuration du module et envoyer votre PDF de CGV.&lt;br /&gt;
# Créer la règle « CGV » : documents ciblés = devis + commandes + factures, position = fin de document. Enregistrer.&lt;br /&gt;
# C&#039;est terminé. Chaque PDF généré contient désormais vos CGV, et l&#039;envoi par email joint ce fichier unique.&lt;br /&gt;
&lt;br /&gt;
Les règles suivantes se créent de la même manière, en ajoutant les conditions voulues (montant, pays, langue).&lt;br /&gt;
&lt;br /&gt;
== Limites connues ==&lt;br /&gt;
&lt;br /&gt;
* Les PDF &#039;&#039;&#039;protégés par mot de passe&#039;&#039;&#039; ne peuvent pas être fusionnés — ils sont refusés dès l&#039;upload, avec un message explicite.&lt;br /&gt;
* Les liens cliquables et les champs de formulaire des annexes sont &#039;&#039;&#039;aplatis&#039;&#039;&#039; lors de la fusion. Sans conséquence pour des CGV ou des fiches techniques.&lt;br /&gt;
* La numérotation « Page X/Y » du document natif n&#039;est pas recalculée après ajout des annexes.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : fusion via le hook &amp;lt;code&amp;gt;afterPDFCreation&amp;lt;/code&amp;gt;, règles conditionnelles (type, montant, pays, langue), position avant/après, fiches techniques produits, validation à l&#039;upload, exclusion Factur-X, FR/EN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ce module a été diffusé sous le nom « DoliSmart PDF » avant sa version 1.0.0 ; il a été renommé &#039;&#039;&#039;PDF Annexes&#039;&#039;&#039; pour éviter toute confusion avec l&#039;application mobile &#039;&#039;DoliSmart&#039;&#039;, sans lien avec ce module.&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_PA_Reception&amp;diff=67195</id>
		<title>Module PA Reception</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_PA_Reception&amp;diff=67195"/>
		<updated>2026-09-06T12:01:51Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Documentation du module externe PA Reception (editeur arcchester)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module PA Reception ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PA Reception&#039;&#039;&#039; (Réception PA) est un module complémentaire pour Dolibarr ERP/CRM qui &#039;&#039;&#039;reçoit les factures fournisseurs électroniques&#039;&#039;&#039; depuis une &#039;&#039;&#039;Plateforme Agréée&#039;&#039;&#039; (PA, ex-PDP), les importe automatiquement en factures fournisseurs Dolibarr, et émet les &#039;&#039;&#039;statuts obligatoires du cycle de vie&#039;&#039;&#039; (reçue, refusée, encaissée).&lt;br /&gt;
&lt;br /&gt;
La réception des factures électroniques est obligatoire pour &#039;&#039;&#039;toutes&#039;&#039;&#039; les entreprises assujetties à la TVA dès le &#039;&#039;&#039;1er septembre 2026&#039;&#039;&#039;, y compris celles qui n&#039;émettront qu&#039;en 2027. Ce module couvre cette obligation côté Dolibarr.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum (extension cURL)&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (cURL pur : pas de Composer, pas de SDK, pas d&#039;OCR)&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3322 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Boîte de réception&#039;&#039;&#039; : relève les factures entrantes depuis la Plateforme Agréée.&lt;br /&gt;
* &#039;&#039;&#039;Import automatique&#039;&#039;&#039; en facture fournisseur Dolibarr à l&#039;état brouillon, avec rapprochement du fournisseur par &#039;&#039;&#039;SIRET&#039;&#039;&#039; (création de la fiche tiers si elle n&#039;existe pas) et protection anti-doublon.&lt;br /&gt;
* &#039;&#039;&#039;Émission des statuts obligatoires&#039;&#039;&#039; du cycle de vie vers la plateforme : &#039;&#039;reçue&#039;&#039; (accusé de réception), &#039;&#039;refusée&#039;&#039; (avec motif), &#039;&#039;encaissée&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Analyse Factur-X / CII (EN 16931) native&#039;&#039;&#039; : les données sont lues dans le XML structuré, il ne s&#039;agit pas d&#039;une reconnaissance de caractères sur le PDF — donc aucune erreur de lecture.&lt;br /&gt;
* Encart « origine PA » sur la fiche facture fournisseur, rappelant la provenance et l&#039;état.&lt;br /&gt;
* &#039;&#039;&#039;Architecture ouverte à connecteurs&#039;&#039;&#039; : brancher une nouvelle plateforme revient à écrire une classe qui implémente &amp;lt;code&amp;gt;PaInboundConnectorInterface&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Connecteurs fournis ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Connecteur !! État !! Configuration&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Sandbox&#039;&#039;&#039; || Prêt à l&#039;emploi || Aucune — des factures d&#039;exemple sont intégrées au module&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PA REST générique&#039;&#039;&#039; || Prêt à l&#039;emploi || Endpoint + clé de votre contrat&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Conventions du connecteur REST ===&lt;br /&gt;
&lt;br /&gt;
 GET  {endpoint}/inbox                → [{ &amp;quot;id&amp;quot;, &amp;quot;filename&amp;quot;, &amp;quot;date&amp;quot; }]&lt;br /&gt;
 GET  {endpoint}/messages/{id}/file   → contenu XML brut&lt;br /&gt;
 POST {endpoint}/messages/{id}/status → { &amp;quot;status&amp;quot;, &amp;quot;reason&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
Authentification : &amp;lt;code&amp;gt;Authorization: Bearer &amp;amp;lt;clé&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
* Le module &#039;&#039;&#039;Fournisseurs&#039;&#039;&#039; de Dolibarr doit être actif.&lt;br /&gt;
* Un accès à une Plateforme Agréée pour le connecteur « PA REST ». Le connecteur Sandbox permet de tester le module de bout en bout sans aucun compte.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_pareception-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039;.&lt;br /&gt;
# Activer &#039;&#039;&#039;PA Reception&#039;&#039;&#039; dans la liste des modules (famille « Finance / Facturation »).&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Menu &#039;&#039;Configuration → Modules → PA Reception&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Connecteur&#039;&#039;&#039; : Sandbox (test immédiat) ou PA REST, puis l&#039;endpoint et la clé de votre plateforme.&lt;br /&gt;
* Comportement d&#039;import : création automatique du fournisseur inconnu, émission automatique de l&#039;accusé de réception.&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
# Menu &#039;&#039;Facturation | Paiement → Réception PA&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;« Relever la boîte »&#039;&#039;&#039; : la liste des factures entrantes s&#039;affiche.&lt;br /&gt;
# &#039;&#039;&#039;« Importer »&#039;&#039;&#039; : la facture fournisseur est créée en brouillon, rattachée au bon tiers, et l&#039;accusé de réception est émis.&lt;br /&gt;
# Refuser une facture depuis la boîte de réception envoie le statut &#039;&#039;refusée&#039;&#039; à la plateforme avec le motif saisi.&lt;br /&gt;
&lt;br /&gt;
== Place dans la gamme ==&lt;br /&gt;
&lt;br /&gt;
Réception : &#039;&#039;&#039;PA Reception&#039;&#039;&#039;. Émission : [[Module Factur-X France|Factur-X France]] (génération) et [[Module PA Transmission|PA Transmission]] (envoi). Émission + réception = conformité complète à la réforme.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : boîte de réception, import Factur-X/CII en facture fournisseur, rapprochement par SIRET, statuts de cycle de vie, connecteurs Sandbox et PA REST, FR/EN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Shopify_Sync&amp;diff=67194</id>
		<title>Module Shopify Sync</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Shopify_Sync&amp;diff=67194"/>
		<updated>2026-09-06T12:01:50Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Documentation du module externe Shopify Sync (editeur arcchester)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module Shopify Sync ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shopify Sync&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui assure une &#039;&#039;&#039;synchronisation bidirectionnelle quasi temps réel entre Shopify et Dolibarr&#039;&#039;&#039; : commandes, clients, remboursements, produits et variantes, stock et expéditions. Le module dialogue directement avec l&#039;API &#039;&#039;&#039;GraphQL Admin&#039;&#039;&#039; de Shopify — sans SaaS intermédiaire, sans abonnement supplémentaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x (validé sur Dolibarr 24.0.0 / PHP 8.2)&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum (extension cURL)&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (cURL pur : pas de Composer, pas de SDK)&lt;br /&gt;
|-&lt;br /&gt;
! Version d&#039;API Shopify || 2026-01 par défaut, configurable&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3218 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Commandes&#039;&#039;&#039; Shopify → Dolibarr : commande, client, et facture si la commande est payée ; remises Shopify appliquées avec contrôle d&#039;intégrité du sous-total.&lt;br /&gt;
* &#039;&#039;&#039;Remboursements&#039;&#039;&#039; → avoirs Dolibarr : un remboursement partiel crée un avoir du montant réellement remboursé, un remboursement total un avoir miroir ligne à ligne.&lt;br /&gt;
* &#039;&#039;&#039;Produits et stock&#039;&#039;&#039; dans les deux sens, avec une &#039;&#039;&#039;source de vérité configurable&#039;&#039;&#039; par entité (Dolibarr, Shopify, ou aucune synchronisation).&lt;br /&gt;
* &#039;&#039;&#039;Produits à variantes&#039;&#039;&#039; : les attributs Dolibarr deviennent des options Shopify, une variante par combinaison (SKU, prix). Les limites réelles de la boutique sont lues à l&#039;exécution via &amp;lt;code&amp;gt;shop.resourceLimits&amp;lt;/code&amp;gt; ; la relecture des variantes est paginée jusqu&#039;à 2 048 variantes, et le module refuse explicitement les produits à plus de 3 attributs (limite Shopify).&lt;br /&gt;
* &#039;&#039;&#039;Stock multi-entrepôts&#039;&#039;&#039; : choix des entrepôts Dolibarr qui alimentent la vitrine — le stock magasin peut rester hors ligne.&lt;br /&gt;
* &#039;&#039;&#039;Metafields&#039;&#039;&#039; : publication d&#039;attributs supplémentaires Dolibarr vers Shopify.&lt;br /&gt;
* &#039;&#039;&#039;Expéditions&#039;&#039;&#039; Dolibarr → Shopify : création du &#039;&#039;fulfillment&#039;&#039; avec le numéro de suivi.&lt;br /&gt;
* &#039;&#039;&#039;Webhooks signés HMAC&#039;&#039;&#039; pour le quasi temps réel, doublés d&#039;un &#039;&#039;&#039;cron de réconciliation&#039;&#039;&#039; qui sert de filet de sécurité.&lt;br /&gt;
* &#039;&#039;&#039;File d&#039;attente asynchrone&#039;&#039;&#039; : absorbe les limites de débit de l&#039;API, réessaie avec temporisation croissante.&lt;br /&gt;
* &#039;&#039;&#039;Anti-boucle&#039;&#039;&#039; par empreinte d&#039;état, et &#039;&#039;&#039;résolution de conflits&#039;&#039;&#039; configurable (maître désigné, dernière écriture gagnante, ou mise en quarantaine).&lt;br /&gt;
* &#039;&#039;&#039;Tableau de bord&#039;&#039;&#039; : file d&#039;attente, échecs, conflits, rejeu d&#039;un job en un clic.&lt;br /&gt;
* Bouton &#039;&#039;&#039;« Tester la connexion »&#039;&#039;&#039; : 13 contrôles, chacun avec le correctif suggéré.&lt;br /&gt;
* Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
 Webhook Shopify ─┐                          ┌─ Trigger Dolibarr&lt;br /&gt;
                  ▼                          ▼&lt;br /&gt;
             [ JobQueue ] ── cron process_queue ── [ SyncEngine ]&lt;br /&gt;
                  │                                     │&lt;br /&gt;
           [ MappingRepository ]                 [ Mappers × 6 ]&lt;br /&gt;
         (id ↔ id + hash anti-boucle)      (Order / Customer / Refund /&lt;br /&gt;
                                            Product / Inventory / Fulfillment)&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
* Modules Dolibarr &#039;&#039;&#039;Produits&#039;&#039;&#039;, &#039;&#039;&#039;Commandes&#039;&#039;&#039; et &#039;&#039;&#039;Tiers&#039;&#039;&#039; actifs.&lt;br /&gt;
* Une &#039;&#039;&#039;custom app Shopify&#039;&#039;&#039; disposant des droits Admin API (products, orders, inventory, customers, fulfillments, locations), installée sur la boutique — elle fournit l&#039;&#039;&#039;Admin API access token&#039;&#039; (&amp;lt;code&amp;gt;shpat_…&amp;lt;/code&amp;gt;) et l&#039;&#039;&#039;app secret&#039;&#039;.&lt;br /&gt;
* Pour le temps réel : un endpoint webhook &#039;&#039;&#039;HTTPS public&#039;&#039;&#039;. Voir ci-dessous le fonctionnement sans webhook.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_shopifysync-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039;.&lt;br /&gt;
# Activer &#039;&#039;&#039;Shopify Sync&#039;&#039;&#039; (famille « Interfaces avec des systèmes externes »).&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Créer l&#039;app Shopify&#039;&#039;&#039; et l&#039;installer sur la boutique :&lt;br /&gt;
#* &#039;&#039;Boutiques récentes&#039;&#039; — Shopify admin → &#039;&#039;Settings → Apps → Develop apps&#039;&#039; redirige vers le Dev Dashboard → &#039;&#039;Create app&#039;&#039; → &#039;&#039;Scopes&#039;&#039; → &#039;&#039;Install app&#039;&#039; ; le jeton s&#039;obtient par l&#039;installation OAuth.&lt;br /&gt;
#* &#039;&#039;Boutiques plus anciennes&#039;&#039; — &#039;&#039;Settings → Apps → Develop apps → Create app&#039;&#039; affiche directement l&#039;Admin API access token après installation.&lt;br /&gt;
# &#039;&#039;&#039;Configuration du module&#039;&#039;&#039; : domaine de la boutique, jeton, app secret, version d&#039;API, &#039;&#039;location&#039;&#039; Shopify (&amp;lt;code&amp;gt;gid://shopify/Location/…&amp;lt;/code&amp;gt;) et entrepôt Dolibarr correspondant.&lt;br /&gt;
# Choisir la &#039;&#039;&#039;portée&#039;&#039;&#039; de la synchronisation et les &#039;&#039;&#039;sources de vérité&#039;&#039;&#039;, puis cliquer sur &#039;&#039;&#039;« Inscrire les webhooks »&#039;&#039;&#039;.&lt;br /&gt;
# Activer les &#039;&#039;&#039;tâches planifiées&#039;&#039;&#039; Dolibarr : traitement de la file et réconciliation.&lt;br /&gt;
&lt;br /&gt;
=== Tâches planifiées sous Dolibarr 24 ===&lt;br /&gt;
&lt;br /&gt;
Les deux tâches du module sont de type &amp;lt;code&amp;gt;command&amp;lt;/code&amp;gt; (exécution en ligne de commande). Depuis Dolibarr 24, une tâche CLI est comptée &#039;&#039;&#039;en erreur&#039;&#039;&#039; si la variable &amp;lt;code&amp;gt;$dolibarr_cron_allow_cli&amp;lt;/code&amp;gt; n&#039;est pas activée — en version 20 le cas était seulement journalisé. Ajoutez donc dans &amp;lt;code&amp;gt;conf/conf.php&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 $dolibarr_cron_allow_cli = 1;&lt;br /&gt;
&lt;br /&gt;
Sans cela, les tâches « ShopifySync » s&#039;affichent en rouge dans &#039;&#039;Outils → Tâches planifiées&#039;&#039; alors même que le module fonctionne.&lt;br /&gt;
&lt;br /&gt;
=== Fonctionnement sans endpoint webhook ===&lt;br /&gt;
&lt;br /&gt;
Le module reste utilisable derrière un hébergement fermé aux connexions entrantes : les commandes &#039;&#039;&#039;et&#039;&#039;&#039; les remboursements sont rattrapés par la réconciliation planifiée, qui n&#039;effectue que des appels sortants. Sa fréquence est un cron Dolibarr standard, ajustable jusqu&#039;à l&#039;heure. La fenêtre d&#039;analyse (2 jours par défaut) se règle par la constante &amp;lt;code&amp;gt;SHOPIFYSYNC_RECONCILE_WINDOW_DAYS&amp;lt;/code&amp;gt;. L&#039;import étant idempotent, le recouvrement entre deux passages ne crée pas de doublon.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.2 || Produits à variantes (options Shopify, 1 SKU par combinaison, pagination jusqu&#039;à 2 048 variantes, refus au-delà de 3 attributs) ; stock multi-entrepôts ; metafields ; règlement automatique des commandes payées ; adresse de facturation complète ; bouton « Tester la connexion » (13 contrôles) ; remises Shopify à l&#039;import ; réconciliation par horodatage absolu et rattrapage des remboursements ; validé sur Dolibarr 24.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || Gestion des erreurs GraphQL renvoyées en chaîne ; version d&#039;API portée à 2026-01 ; &amp;lt;code&amp;gt;inventoryActivate&amp;lt;/code&amp;gt; avant écriture de stock ; correction critique de la création des lignes de commande&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : commandes, clients, remboursements, produits, stock, expéditions, webhooks signés, file d&#039;attente, tableau de bord&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_PA_Transmission&amp;diff=67193</id>
		<title>Module PA Transmission</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_PA_Transmission&amp;diff=67193"/>
		<updated>2026-09-06T12:01:49Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Documentation du module externe PA Transmission (editeur arcchester)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module PA Transmission ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PA Transmission&#039;&#039;&#039; (anciennement « PDP Transmission ») est un module complémentaire pour Dolibarr ERP/CRM qui &#039;&#039;&#039;transmet vos factures Factur-X à une Plateforme Agréée&#039;&#039;&#039; (PA) du réseau français de facturation électronique, et suit leur &#039;&#039;&#039;cycle de vie&#039;&#039;&#039; (déposée → reçue → acceptée / refusée) directement dans Dolibarr.&lt;br /&gt;
&lt;br /&gt;
Depuis juillet 2025, les PDP (Plateformes de Dématérialisation Partenaires) sont officiellement devenues des &#039;&#039;&#039;Plateformes Agréées (PA)&#039;&#039;&#039; dans la terminologie de la DGFiP.&lt;br /&gt;
&lt;br /&gt;
C&#039;est le complément du module [[Module Factur-X France|Factur-X France]] : celui-ci &#039;&#039;génère&#039;&#039; le fichier Factur-X, celui-là le &#039;&#039;transmet&#039;&#039; sur le réseau — l&#039;étape qu&#039;impose la réforme.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum (extension cURL)&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (cURL pur : pas de Composer, pas de SDK)&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3211 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* Bouton &#039;&#039;&#039;« Transmettre »&#039;&#039;&#039; sur la fiche facture, avec badge de cycle de vie coloré : à transmettre / transmise / reçue / acceptée / refusée / erreur.&lt;br /&gt;
* Bouton &#039;&#039;&#039;« Rafraîchir le statut »&#039;&#039;&#039; : interrogation de la plateforme pour mettre à jour l&#039;état.&lt;br /&gt;
* &#039;&#039;&#039;Transmission automatique&#039;&#039;&#039; optionnelle dès la validation de la facture.&lt;br /&gt;
* Choix du contenu transmis : le &#039;&#039;&#039;XML Factur-X&#039;&#039;&#039; seul ou le &#039;&#039;&#039;PDF/A-3&#039;&#039;&#039; complet.&lt;br /&gt;
* &#039;&#039;&#039;Architecture ouverte à connecteurs&#039;&#039;&#039; — brancher une nouvelle plateforme revient à écrire une classe qui implémente &amp;lt;code&amp;gt;PdpConnectorInterface&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Journalisation de chaque dépôt et de chaque réponse, pour l&#039;audit.&lt;br /&gt;
* Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Connecteurs fournis ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Connecteur !! Type !! État !! Configuration&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Sandbox&#039;&#039;&#039; || Simulateur intégré || Prêt à l&#039;emploi || Aucune&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Chorus Pro&#039;&#039;&#039; || B2G secteur public, API PISTE || Codé sur l&#039;API documentée || Identifiants PISTE + compte technique&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Docaposte&#039;&#039;&#039; || PA privée B2B (REST) || Preset nommé || Endpoint + clé de votre contrat&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Yooz&#039;&#039;&#039; || PA privée B2B (REST) || Preset nommé || Endpoint + clé de votre contrat&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PA REST générique&#039;&#039;&#039; || API REST || Prêt à l&#039;emploi || Endpoint + clé&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;À savoir :&#039;&#039;&#039; Docaposte et Yooz sont des plateformes privées dont les API ne sont pas publiques et nécessitent un contrat commercial. Le module fournit un preset nommé qui s&#039;appuie sur le connecteur REST générique — vous renseignez l&#039;endpoint et la clé fournis par votre prestataire. Le connecteur Chorus Pro est écrit d&#039;après la documentation de l&#039;API PISTE : validez-le sur la sandbox PISTE avec vos identifiants avant tout usage en production.&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
* Le fichier Factur-X doit exister — il est produit par le module [[Module Factur-X France|Factur-X France]] à la validation de la facture.&lt;br /&gt;
* Un compte auprès d&#039;une Plateforme Agréée pour les connecteurs autres que Sandbox.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_pdptransmission-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039;.&lt;br /&gt;
# Activer &#039;&#039;&#039;PA Transmission&#039;&#039;&#039; dans la liste des modules (famille « Finance / Facturation »).&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Menu &#039;&#039;Configuration → Modules → PA Transmission&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Connecteur&#039;&#039;&#039; : Sandbox pour tester immédiatement (aucun paramètre), ou l&#039;un des connecteurs REST puis l&#039;URL de l&#039;API et la clé de votre contrat.&lt;br /&gt;
* &#039;&#039;&#039;Contenu transmis&#039;&#039;&#039; : XML Factur-X ou PDF/A-3.&lt;br /&gt;
* &#039;&#039;&#039;Transmission automatique&#039;&#039;&#039; à la validation de la facture (oui/non).&lt;br /&gt;
&lt;br /&gt;
=== Conventions du connecteur REST générique ===&lt;br /&gt;
&lt;br /&gt;
Le connecteur attend, de façon adaptable selon la plateforme :&lt;br /&gt;
&lt;br /&gt;
 POST {endpoint}/transmissions        multipart : file + reference + metadata&lt;br /&gt;
      → { &amp;quot;id&amp;quot;: &amp;quot;...&amp;quot;, &amp;quot;status&amp;quot;: &amp;quot;...&amp;quot; }&lt;br /&gt;
 GET  {endpoint}/transmissions/{id}   Authorization: Bearer &amp;lt;clé&amp;gt;&lt;br /&gt;
      → { &amp;quot;status&amp;quot;: &amp;quot;...&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
La correspondance entre les statuts de la plateforme et les statuts internes est centralisée dans &amp;lt;code&amp;gt;PdpGenericRestConnector::mapStatus()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
# Ouvrir une facture validée dont le Factur-X a été généré.&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;« Transmettre »&#039;&#039;&#039; — ou laisser la transmission automatique agir à la validation.&lt;br /&gt;
# Suivre le badge de cycle de vie ; « Rafraîchir le statut » interroge la plateforme à la demande.&lt;br /&gt;
&lt;br /&gt;
== Place dans la gamme ==&lt;br /&gt;
&lt;br /&gt;
Émission : [[Module Factur-X France|Factur-X France]] (génération) + &#039;&#039;&#039;PA Transmission&#039;&#039;&#039; (envoi). Réception : [[Module PA Reception|PA Reception]]. Les deux volets réunis couvrent la réforme française de la facturation électronique.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || Terminologie PA (ex-PDP) alignée sur la DGFiP, corrections de robustesse&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : transmission, cycle de vie, connecteurs Sandbox / Chorus Pro / REST générique / presets Docaposte et Yooz&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Stripe_Payment_Links&amp;diff=67192</id>
		<title>Module Stripe Payment Links</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Stripe_Payment_Links&amp;diff=67192"/>
		<updated>2026-09-06T12:01:44Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Documentation du module externe Stripe Payment Links (editeur arcchester)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module Stripe Payment Links ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stripe Payment Links&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui génère un &#039;&#039;&#039;lien de paiement Stripe&#039;&#039;&#039; (carte bancaire, Apple Pay, Google Pay) pour chaque facture client, et &#039;&#039;&#039;réconcilie automatiquement&#039;&#039;&#039; le règlement dans Dolibarr grâce au webhook Stripe. Le client paie en ligne, la facture passe à « payée » sans intervention.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum (extension cURL)&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (cURL pur : pas de Composer, pas de SDK Stripe)&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3208 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* Bouton &#039;&#039;&#039;« Générer un lien de paiement Stripe »&#039;&#039;&#039; sur la fiche facture.&lt;br /&gt;
* Création de véritables &#039;&#039;Stripe Payment Links&#039;&#039; (chaîne Product → Price → Payment Link de l&#039;API Stripe), et non de simples liens de checkout jetables.&lt;br /&gt;
* &#039;&#039;&#039;Statut visible&#039;&#039;&#039; sur la fiche facture : aucun lien / en attente de paiement / payé, avec la date de règlement.&lt;br /&gt;
* Copie du lien en un clic et &#039;&#039;&#039;insertion automatique dans les emails&#039;&#039;&#039; via le jeton de substitution &amp;lt;code&amp;gt;__STRIPEPAYMENTLINK__&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Webhook sécurisé&#039;&#039;&#039; (vérification de la signature HMAC-SHA256 de Stripe) : à réception de l&#039;événement &amp;lt;code&amp;gt;checkout.session.completed&amp;lt;/code&amp;gt;, le paiement est créé dans Dolibarr et la facture est marquée payée.&lt;br /&gt;
* &#039;&#039;&#039;Rapprochement bancaire optionnel&#039;&#039;&#039; : le règlement peut être affecté au compte bancaire de votre choix.&lt;br /&gt;
* Modes &#039;&#039;&#039;test&#039;&#039;&#039; et &#039;&#039;&#039;live&#039;&#039;&#039; séparés, bascule par la configuration.&lt;br /&gt;
* Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
* Un compte Stripe (l&#039;ouverture est gratuite ; Stripe prélève sa commission sur les transactions).&lt;br /&gt;
* Une URL de webhook &#039;&#039;&#039;accessible en HTTPS depuis Internet&#039;&#039;&#039; pour la réconciliation automatique. Sans elle, le lien de paiement fonctionne mais le règlement doit être saisi à la main dans Dolibarr.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_stripepaymentlinks-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039; et sélectionner le zip.&lt;br /&gt;
# Activer &#039;&#039;&#039;Stripe Payment Links&#039;&#039;&#039; dans la liste des modules (famille « Finance / Facturation »).&lt;br /&gt;
# Aucune dépendance à installer sur le serveur.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Menu &#039;&#039;Configuration → Modules → Stripe Payment Links&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Clés API&#039;&#039;&#039; : coller la clé secrète &amp;lt;code&amp;gt;sk_test_…&amp;lt;/code&amp;gt; pour les essais, et &amp;lt;code&amp;gt;sk_live_…&amp;lt;/code&amp;gt; pour la production (&#039;&#039;Stripe → Développeurs → Clés API&#039;&#039;).&lt;br /&gt;
* &#039;&#039;&#039;Webhook&#039;&#039;&#039; : dans &#039;&#039;Stripe → Développeurs → Webhooks&#039;&#039;, créer un endpoint pointant vers l&#039;URL affichée par la page de configuration du module (&amp;lt;code&amp;gt;.../custom/stripepaymentlinks/webhook/stripe.php&amp;lt;/code&amp;gt;), s&#039;abonner à l&#039;événement &amp;lt;code&amp;gt;checkout.session.completed&amp;lt;/code&amp;gt;, puis coller le secret de signature &amp;lt;code&amp;gt;whsec_…&amp;lt;/code&amp;gt; dans le module.&lt;br /&gt;
* &#039;&#039;&#039;Utilisateur auteur des paiements&#039;&#039;&#039; : l&#039;utilisateur Dolibarr au nom duquel les règlements automatiques sont enregistrés.&lt;br /&gt;
* &#039;&#039;&#039;Compte bancaire&#039;&#039;&#039; de rapprochement (facultatif).&lt;br /&gt;
* &#039;&#039;&#039;Mode&#039;&#039;&#039; : test ou live.&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
# Ouvrir une facture &#039;&#039;&#039;validée&#039;&#039;&#039;.&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;« Générer un lien de paiement Stripe »&#039;&#039;&#039;.&lt;br /&gt;
# Transmettre le lien au client — manuellement, ou en insérant &amp;lt;code&amp;gt;__STRIPEPAYMENTLINK__&amp;lt;/code&amp;gt; dans le modèle d&#039;email d&#039;envoi de facture.&lt;br /&gt;
# À réception du paiement, Stripe appelle le webhook : le règlement est créé et la facture passe à « payée ». Le badge de la fiche facture affiche l&#039;état et la date.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || Corrections de robustesse du webhook et du rapprochement bancaire&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : génération du lien de paiement, badge d&#039;état, webhook signé, jeton d&#039;email, modes test/live&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : support@arcchester.com&lt;br /&gt;
* Autres modules du même éditeur : [https://www.dolistore.com/recherche?controller=search&amp;amp;search_query=arcchester recherche « arcchester » sur le Dolistore]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_WhatsApp_Notify&amp;diff=66834</id>
		<title>Module WhatsApp Notify</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_WhatsApp_Notify&amp;diff=66834"/>
		<updated>2026-07-30T22:57:08Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Created page with &amp;quot;== Module WhatsApp Notify ==  &amp;#039;&amp;#039;&amp;#039;WhatsApp Notify&amp;#039;&amp;#039;&amp;#039; est un module complémentaire pour Dolibarr ERP/CRM qui envoie les factures et les relances de paiement directement sur le...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module WhatsApp Notify ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WhatsApp Notify&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui envoie les factures et les relances de paiement directement sur le &#039;&#039;&#039;WhatsApp&#039;&#039;&#039; des clients, depuis Dolibarr, via l&#039;&#039;&#039;&#039;API Cloud officielle de Meta&#039;&#039;&#039; (messages template approuvés, envoi serveur, statuts de livraison). Il ne s&#039;agit ni d&#039;un lien « web.whatsapp » à ouvrir manuellement, ni d&#039;une passerelle tierce payante.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 23.x&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum (extension cURL)&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (cURL pur : pas de Composer, pas de SDK)&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3214 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* Bouton &#039;&#039;&#039;« Envoyer sur WhatsApp »&#039;&#039;&#039; sur la fiche facture, avec badge d&#039;état coloré.&lt;br /&gt;
* &#039;&#039;&#039;Envoi automatique&#039;&#039;&#039; optionnel dès la validation de la facture (déclencheur BILL_VALIDATE).&lt;br /&gt;
* &#039;&#039;&#039;PDF de la facture en pièce jointe&#039;&#039;&#039; du message WhatsApp (template avec en-tête Document).&lt;br /&gt;
* &#039;&#039;&#039;Suivi de livraison en temps réel&#039;&#039;&#039; : envoyé / livré / &#039;&#039;&#039;lu&#039;&#039;&#039; / échec — mis à jour par le webhook Meta (signature HMAC-SHA256 vérifiée).&lt;br /&gt;
* Message &#039;&#039;&#039;template&#039;&#039;&#039; à 3 variables : nom du client, référence de la facture, montant TTC.&lt;br /&gt;
* &#039;&#039;&#039;Numéros internationaux&#039;&#039;&#039; : normalisation automatique au format E.164, indicatif par défaut configurable pour les numéros locaux.&lt;br /&gt;
* &#039;&#039;&#039;Traçabilité&#039;&#039;&#039; : chaque envoi est journalisé en base (identifiant de message Meta, statut, date).&lt;br /&gt;
* Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Prérequis Meta (une seule fois, ~10 minutes) ==&lt;br /&gt;
&lt;br /&gt;
Le module utilise l&#039;API Cloud officielle — il faut donc un compte Meta :&lt;br /&gt;
&lt;br /&gt;
# Un &#039;&#039;&#039;compte Meta Business&#039;&#039;&#039; (gratuit) et une application de type « Business ».&lt;br /&gt;
# Un &#039;&#039;&#039;numéro WhatsApp Business&#039;&#039;&#039; relié à l&#039;API Cloud (un numéro de test est fourni gratuitement par Meta pour les essais).&lt;br /&gt;
# Un &#039;&#039;&#039;jeton d&#039;accès permanent&#039;&#039;&#039; (System User) — Meta &amp;gt; Business Settings &amp;gt; Users &amp;gt; System users.&lt;br /&gt;
# Un &#039;&#039;&#039;template de message approuvé&#039;&#039;&#039; : le texte prêt à copier est fourni avec le module ; l&#039;approbation Meta prend en général moins de 24 h.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note : Meta facture à la conversation/au message (directement à Meta). L&#039;ouverture du compte et le premier template sont gratuits.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_whatsappnotify-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039; et sélectionner le zip.&lt;br /&gt;
# Activer le module &#039;&#039;&#039;WhatsApp Notify&#039;&#039;&#039; dans la liste des modules (famille « Interfaces avec des systèmes externes »).&lt;br /&gt;
# Aucune dépendance à installer sur le serveur.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Menu &#039;&#039;Configuration → Modules → WhatsApp Notify&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Identifiants Meta&#039;&#039;&#039; : jeton d&#039;accès permanent, Phone Number ID, WhatsApp Business Account ID, version de l&#039;API.&lt;br /&gt;
* &#039;&#039;&#039;Webhook (suivi de livraison)&#039;&#039;&#039; : l&#039;URL à déclarer dans Meta est affichée ; renseigner le verify token et l&#039;app secret pour la vérification de signature.&lt;br /&gt;
* &#039;&#039;&#039;Messages&#039;&#039;&#039; : nom du template, langue du template, pièce jointe PDF (oui/non), envoi automatique à la validation (oui/non), indicatif téléphonique par défaut.&lt;br /&gt;
&lt;br /&gt;
Prérequis de données : le &#039;&#039;&#039;numéro de téléphone&#039;&#039;&#039; du tiers (fiche client) doit être renseigné — de préférence au format international (+33…, +212…) ; à défaut, l&#039;indicatif par défaut est appliqué.&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
* Sur la fiche d&#039;une &#039;&#039;&#039;facture validée&#039;&#039;&#039;, un encart « Notification WhatsApp » propose le bouton d&#039;envoi ; après envoi, il affiche le statut (envoyé / livré / lu) et le numéro du destinataire.&lt;br /&gt;
* En mode &#039;&#039;&#039;automatique&#039;&#039;&#039;, le message part dès la validation de la facture, sans action de l&#039;utilisateur.&lt;br /&gt;
* Chaque message envoyé est visible en base avec son identifiant Meta (wamid) pour audit.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || Version initiale : envoi manuel + automatique, template Meta, PDF en pièce jointe, webhook de statut signé, normalisation E.164, FR/EN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : contact@arcchester.com&lt;br /&gt;
* Assistance : https://github.com/chakibarrama/Dolistore/issues&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Factur-X_France&amp;diff=66821</id>
		<title>Module Factur-X France</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Factur-X_France&amp;diff=66821"/>
		<updated>2026-07-29T23:31:50Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module Factur-X France ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Factur-X France&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui génère et contrôle des factures électroniques au format &#039;&#039;&#039;Factur-X&#039;&#039;&#039; (PDF/A-3 avec XML CII conforme à la norme européenne &#039;&#039;&#039;EN 16931&#039;&#039;&#039;), dans le cadre de la réforme française de la facturation électronique (dépôt PPF / plateformes agréées, Chorus Pro pour le secteur public).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (module autonome : pas de Java, pas de Composer, pas de service externe)&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3075 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Génération automatique&#039;&#039;&#039; du fichier Factur-X (PDF/A-3 + XML CII EN 16931) à la validation de chaque facture client — profils Minimum, Basic et Comfort (EN 16931).&lt;br /&gt;
* &#039;&#039;&#039;Types de documents&#039;&#039;&#039; : factures standard (380), avoirs (381), factures d&#039;acompte (386) et factures rectificatives (384), avec la référence à la facture d&#039;origine (BG-3) lorsque la norme l&#039;exige.&lt;br /&gt;
* &#039;&#039;&#039;Pré-contrôle « anti-rejet »&#039;&#039;&#039; : un encart sur la fiche facture indique, avant émission, si la facture est conforme ; en cas d&#039;anomalie, l&#039;identifiant officiel de la règle en cause est affiché (ex. BR-CL-23, BR-CO-15) avec le champ Dolibarr à corriger.&lt;br /&gt;
* &#039;&#039;&#039;Secteur public (B2G) — Chorus Pro&#039;&#039;&#039; : les clients de type « Administration » sont détectés automatiquement ; le SIRET du destinataire, le code service exécutant et le numéro d&#039;engagement (BT-10 / BT-13) sont contrôlés avant émission.&lt;br /&gt;
* &#039;&#039;&#039;Tableau de bord de conformité&#039;&#039;&#039; : score de conformité sur une période, règles en échec agrégées, détail par facture, et export par lot (ZIP) des XML Factur-X.&lt;br /&gt;
* &#039;&#039;&#039;QR de paiement SEPA&#039;&#039;&#039; (option, norme EPC069-12) : un QR-code imprimé sur le PDF permet au client de pré-remplir son virement (bénéficiaire, IBAN, montant, référence) en le scannant avec son application bancaire. Jamais imprimé sur les avoirs.&lt;br /&gt;
* &#039;&#039;&#039;Comportement fail-safe&#039;&#039;&#039; : une facture non conforme ne produit aucun fichier électronique douteux — le PDF standard de Dolibarr est conservé tel quel et l&#039;anomalie est expliquée.&lt;br /&gt;
* Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Conformité ==&lt;br /&gt;
&lt;br /&gt;
Les fichiers produits sont validés avec les outils de référence utilisés par les plateformes :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Schéma XSD officiel&#039;&#039;&#039; Factur-X / EN 16931 (validation structurelle, également exécutée en local avant chaque émission) ;&lt;br /&gt;
* &#039;&#039;&#039;Schematron officiel EN 16931&#039;&#039;&#039; (règles métier BR-*, BR-CO-*, BR-CL-*) ;&lt;br /&gt;
* &#039;&#039;&#039;veraPDF&#039;&#039;&#039; pour la conformité PDF/A-3b du PDF final ;&lt;br /&gt;
* Compatibilité &#039;&#039;&#039;ZUGFeRD 2.x&#039;&#039;&#039; : Factur-X et ZUGFeRD partagent la même spécification, les fichiers sont donc également utilisables avec des clients allemands.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_facturxfrance-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039; et sélectionner le zip.&lt;br /&gt;
# Activer le module &#039;&#039;&#039;FacturXFrance&#039;&#039;&#039; dans la liste des modules.&lt;br /&gt;
# Aucune dépendance à installer sur le serveur.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Menu &#039;&#039;Configuration → Modules → FacturXFrance&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Profil Factur-X&#039;&#039;&#039; : Minimum, Basic ou Comfort (recommandé pour PPF/PDP).&lt;br /&gt;
* &#039;&#039;&#039;Correspondance des taux de TVA&#039;&#039;&#039; : associer chaque taux local au code UNCL 5305 (S, Z, E, AE, K, G, O).&lt;br /&gt;
* &#039;&#039;&#039;Correspondance des unités&#039;&#039;&#039; : associer les unités Dolibarr aux codes UN/CEFACT (C62, HUR, KGM…).&lt;br /&gt;
* &#039;&#039;&#039;QR de paiement&#039;&#039;&#039; : case à cocher (désactivé par défaut).&lt;br /&gt;
* Un onglet &#039;&#039;À propos&#039;&#039; fournit un panneau de diagnostic (versions, extensions PHP) utile au support.&lt;br /&gt;
&lt;br /&gt;
Prérequis de données pour une facture conforme : SIRET de l&#039;émetteur, TVA intracommunautaire, compte bancaire (IBAN/BIC) associé à la facture, SIRET du client français. Pour un client « Administration » : renseigner le code service exécutant ou le numéro d&#039;engagement dans le champ « Réf. client » de la facture.&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
* À la &#039;&#039;&#039;validation d&#039;une facture&#039;&#039;&#039;, le XML Factur-X est généré puis injecté dans le PDF (PDF/A-3). Les fichiers sont visibles dans les documents joints de la facture.&lt;br /&gt;
* L&#039;encart &#039;&#039;&#039;Conformité Factur-X&#039;&#039;&#039; de la fiche facture permet de revérifier la conformité à tout moment.&lt;br /&gt;
* Le &#039;&#039;&#039;tableau de bord&#039;&#039;&#039; (lien depuis la page de configuration) permet d&#039;analyser une période entière et de télécharger tous les XML conformes en un ZIP.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.5.0 || QR de paiement SEPA (EPC069-12), compatibilité Dolibarr 18 renforcée&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.0 || Secteur public B2G : contrôles Chorus Pro, BT-10 / BT-13&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.0 || Factures d&#039;acompte et rectificatives, tableau de bord de conformité, export par lot&lt;br /&gt;
|-&lt;br /&gt;
| 1.2.0 || Avoirs (BG-3), validation XSD à l&#039;exécution, comportement fail-safe&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.x || Pré-contrôle EN 16931 en PHP, conformité PDF/A-3 (veraPDF)&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.x || Génération Factur-X initiale (XSD + Schematron)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : contact@arcchester.com&lt;br /&gt;
* Les demandes accompagnées d&#039;une capture de l&#039;onglet &#039;&#039;À propos&#039;&#039; (diagnostic) sont traitées plus rapidement.&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Factur-X_France&amp;diff=66820</id>
		<title>Module Factur-X France</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Factur-X_France&amp;diff=66820"/>
		<updated>2026-07-29T23:26:02Z</updated>

		<summary type="html">&lt;p&gt;Arcchester: Création de la page du module Factur-X France (module complémentaire Dolistore)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Module Factur-X France ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Factur-X France&#039;&#039;&#039; est un module complémentaire pour Dolibarr ERP/CRM qui génère et contrôle des factures électroniques au format &#039;&#039;&#039;Factur-X&#039;&#039;&#039; (PDF/A-3 avec XML CII conforme à la norme européenne &#039;&#039;&#039;EN 16931&#039;&#039;&#039;), dans le cadre de la réforme française de la facturation électronique (dépôt PPF / plateformes agréées, Chorus Pro pour le secteur public).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Éditeur || arcchester&lt;br /&gt;
|-&lt;br /&gt;
! Licence || GPL v3&lt;br /&gt;
|-&lt;br /&gt;
! Compatibilité Dolibarr || 18.0 à 24.x&lt;br /&gt;
|-&lt;br /&gt;
! PHP || 7.4 minimum&lt;br /&gt;
|-&lt;br /&gt;
! Dépendances || Aucune (module autonome : pas de Java, pas de Composer, pas de service externe)&lt;br /&gt;
|-&lt;br /&gt;
! Distribution || [https://www.dolistore.com/product.php?id=3075 Fiche sur le Dolistore]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Génération automatique&#039;&#039;&#039; du fichier Factur-X (PDF/A-3 + XML CII EN 16931) à la validation de chaque facture client — profils Minimum, Basic et Comfort (EN 16931).&lt;br /&gt;
* &#039;&#039;&#039;Types de documents&#039;&#039;&#039; : factures standard (380), avoirs (381), factures d&#039;acompte (386) et factures rectificatives (384), avec la référence à la facture d&#039;origine (BG-3) lorsque la norme l&#039;exige.&lt;br /&gt;
* &#039;&#039;&#039;Pré-contrôle « anti-rejet »&#039;&#039;&#039; : un encart sur la fiche facture indique, avant émission, si la facture est conforme ; en cas d&#039;anomalie, l&#039;identifiant officiel de la règle en cause est affiché (ex. BR-CL-23, BR-CO-15) avec le champ Dolibarr à corriger.&lt;br /&gt;
* &#039;&#039;&#039;Secteur public (B2G) — Chorus Pro&#039;&#039;&#039; : les clients de type « Administration » sont détectés automatiquement ; le SIRET du destinataire, le code service exécutant et le numéro d&#039;engagement (BT-10 / BT-13) sont contrôlés avant émission.&lt;br /&gt;
* &#039;&#039;&#039;Tableau de bord de conformité&#039;&#039;&#039; : score de conformité sur une période, règles en échec agrégées, détail par facture, et export par lot (ZIP) des XML Factur-X.&lt;br /&gt;
* &#039;&#039;&#039;QR de paiement SEPA&#039;&#039;&#039; (option, norme EPC069-12) : un QR-code imprimé sur le PDF permet au client de pré-remplir son virement (bénéficiaire, IBAN, montant, référence) en le scannant avec son application bancaire. Jamais imprimé sur les avoirs.&lt;br /&gt;
* &#039;&#039;&#039;Comportement fail-safe&#039;&#039;&#039; : une facture non conforme ne produit aucun fichier électronique douteux — le PDF standard de Dolibarr est conservé tel quel et l&#039;anomalie est expliquée.&lt;br /&gt;
* Interface et documentation en français et en anglais.&lt;br /&gt;
&lt;br /&gt;
== Conformité ==&lt;br /&gt;
&lt;br /&gt;
Les fichiers produits sont validés avec les outils de référence utilisés par les plateformes :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Schéma XSD officiel&#039;&#039;&#039; Factur-X / EN 16931 (validation structurelle, également exécutée en local avant chaque émission) ;&lt;br /&gt;
* &#039;&#039;&#039;Schematron officiel EN 16931&#039;&#039;&#039; (règles métier BR-*, BR-CO-*, BR-CL-*) ;&lt;br /&gt;
* &#039;&#039;&#039;veraPDF&#039;&#039;&#039; pour la conformité PDF/A-3b du PDF final ;&lt;br /&gt;
* Compatibilité &#039;&#039;&#039;ZUGFeRD 2.x&#039;&#039;&#039; : Factur-X et ZUGFeRD partagent la même spécification, les fichiers sont donc également utilisables avec des clients allemands.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Télécharger le zip &amp;lt;code&amp;gt;module_facturxfrance-x.y.z.zip&amp;lt;/code&amp;gt; depuis le Dolistore.&lt;br /&gt;
# Dans Dolibarr : &#039;&#039;Accueil → Configuration → Modules/Applications → Déployer/installer un module externe&#039;&#039; et sélectionner le zip.&lt;br /&gt;
# Activer le module &#039;&#039;&#039;FacturXFrance&#039;&#039;&#039; dans la liste des modules.&lt;br /&gt;
# Aucune dépendance à installer sur le serveur.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Menu &#039;&#039;Configuration → Modules → FacturXFrance&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Profil Factur-X&#039;&#039;&#039; : Minimum, Basic ou Comfort (recommandé pour PPF/PDP).&lt;br /&gt;
* &#039;&#039;&#039;Correspondance des taux de TVA&#039;&#039;&#039; : associer chaque taux local au code UNCL 5305 (S, Z, E, AE, K, G, O).&lt;br /&gt;
* &#039;&#039;&#039;Correspondance des unités&#039;&#039;&#039; : associer les unités Dolibarr aux codes UN/CEFACT (C62, HUR, KGM…).&lt;br /&gt;
* &#039;&#039;&#039;QR de paiement&#039;&#039;&#039; : case à cocher (désactivé par défaut).&lt;br /&gt;
* Un onglet &#039;&#039;À propos&#039;&#039; fournit un panneau de diagnostic (versions, extensions PHP) utile au support.&lt;br /&gt;
&lt;br /&gt;
Prérequis de données pour une facture conforme : SIRET de l&#039;émetteur, TVA intracommunautaire, compte bancaire (IBAN/BIC) associé à la facture, SIRET du client français. Pour un client « Administration » : renseigner le code service exécutant ou le numéro d&#039;engagement dans le champ « Réf. client » de la facture.&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
* À la &#039;&#039;&#039;validation d&#039;une facture&#039;&#039;&#039;, le XML Factur-X est généré puis injecté dans le PDF (PDF/A-3). Les fichiers sont visibles dans les documents joints de la facture.&lt;br /&gt;
* L&#039;encart &#039;&#039;&#039;Conformité Factur-X&#039;&#039;&#039; de la fiche facture permet de revérifier la conformité à tout moment.&lt;br /&gt;
* Le &#039;&#039;&#039;tableau de bord&#039;&#039;&#039; (lien depuis la page de configuration) permet d&#039;analyser une période entière et de télécharger tous les XML conformes en un ZIP.&lt;br /&gt;
&lt;br /&gt;
== Historique des versions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version !! Apports principaux&lt;br /&gt;
|-&lt;br /&gt;
| 1.5.0 || QR de paiement SEPA (EPC069-12), compatibilité Dolibarr 18 renforcée&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.0 || Secteur public B2G : contrôles Chorus Pro, BT-10 / BT-13&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.0 || Factures d&#039;acompte et rectificatives, tableau de bord de conformité, export par lot&lt;br /&gt;
|-&lt;br /&gt;
| 1.2.0 || Avoirs (BG-3), validation XSD à l&#039;exécution, comportement fail-safe&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.x || Pré-contrôle EN 16931 en PHP, conformité PDF/A-3 (veraPDF)&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.x || Génération Factur-X initiale (XSD + Schematron)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
* Contact : chakibarrama@gmail.com&lt;br /&gt;
* Les demandes accompagnées d&#039;une capture de l&#039;onglet &#039;&#039;À propos&#039;&#039; (diagnostic) sont traitées plus rapidement.&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Modules complémentaires]]&lt;/div&gt;</summary>
		<author><name>Arcchester</name></author>
	</entry>
</feed>