Skip to Content

Invoice Pilot

Invoice Pilot étend WooCommerce avec une facturation pays par pays pour les 27 États membres de l’UE. Il capture les bons champs de facturation à la commande (codes SDI / PEC italiens, SIRET français, Leitweg-ID allemand, NIP polonais, CUI roumain, etc.), puis émet des factures, avoirs, proformas et devis PDF et XML immuables à partir de la commande. Le PDF est rendu via mPDF ; l’enveloppe XML est choisie automatiquement en fonction du pays de l’acheteur et couvre onze profils nationaux dont FatturaPA (IT), XRechnung (DE), KSeF FA(2) (PL), Factur-X (FR), CIUS_RO (RO), Facturae (ES) et UBL 2.1 / PEPPOL BIS 3.0 comme fallback générique.

Au-delà du moteur documentaire, Invoice Pilot embarque des intégrations de premier ordre avec six fournisseurs comptables — SmartBill (Roumanie), Fatture in Cloud (Italie), Xero, QuickBooks Online, Fortnox (Suède) et Sage — un validateur de TVA qui interroge le service européen VIES avec un fallback de format par pays, un tableau de bord avec cartes KPI et graphiques de tendance, et une couche IA multi-fournisseurs optionnelle (Anthropic Claude, OpenAI, Google Gemini, DeepSeek, Grok xAI) pour le smart-fill à la commande, le contrôle de conformité pré-émission, la traduction des lignes et la recherche documentaire en langage naturel. Le plugin prend également en charge WordPress Multisite avec des tables par site et une page d’aperçu à l’échelle du réseau.

Points forts

  • Cycle de vie documentaire piloté par WooCommerce pour factures, avoirs, proformas et devis, avec séries de numérotation réservées, un flux propre émission / régénération / réémission / annulation / avoir, et un style par type de document (bandeau de mention sur les documents non fiscaux, libellés « Valable jusqu’au » sur les devis, « Total du remboursement » sur les avoirs, bloc de paiement masqué sur les devis et avoirs).
  • Champs de facturation spécifiques par pays UE-27 enregistrés à la fois pour la commande shortcode héritée et pour la commande en blocs WooCommerce 8.6+ (via l’Additional Checkout Fields API).
  • Rendu PDF via mPDF avec l’un des trois templates fournis (Minimal, Classic, Modern), avec sélecteur de couleur d’accent, couleur du texte, famille de police et logo vendeur.
  • Onze writers XML dispatchés automatiquement depuis le pays de l’acheteur : FatturaPA (IT), Factur-X / CII (FR), XRechnung 3.0 (DE), KSeF FA(2) (PL), CIUS_RO 1.0.0 (RO), Facturae 3.2.2 (ES), SAF-T PT (PT), OIOUBL (DK), Finvoice 3.0 (FI), ebInterface 6.1 (AT), myDATA InvoicesDoc (GR / EL), avec UBL 2.1 / PEPPOL BIS 3.0 comme fallback universel.
  • Chaîne de validation de TVA combinant le service SOAP européen VIES avec une validation regex hors-ligne par pays, un cache en base et un cron horaire qui revalide les entrées périmées.
  • Six intégrations comptables — SmartBill, Fatture in Cloud, Xero, QuickBooks Online, Fortnox et Sage — chacune avec identifiants chiffrés, opérations push / status / void et file de retry. L’onglet des intégrations utilise un sélecteur de fournisseur sticky : le panneau que vous configuriez reste ouvert d’une sauvegarde à l’autre.
  • Couche IA optionnelle avec cinq fournisseurs (Anthropic, OpenAI, Google Gemini, DeepSeek, Grok xAI) couvrant smart-fill, contrôle de conformité, traduction des lignes et recherche en langage naturel ; le plugin fonctionne entièrement sans clé d’API.
  • Tableau de bord avec sélecteur de période, cinq cartes KPI et deux graphiques de tendance ; un Journal d’intégration distinct enregistre chaque push et chaque échec.
  • Prise en charge WordPress Multisite — chaque sous-site a ses propres tables, ses réglages et ses compteurs de numérotation, avec une page d’admin réseau qui agrège les statistiques.

Prérequis

ComposantMinimum
WordPress5.8 (testé jusqu’à 7.0)
PHP8.0
WooCommerce7.0
Base de donnéesMySQL 5.7 ou MariaDB 10.2 (le SQL du tableau de bord utilise JSON_EXTRACT / JSON_UNQUOTE sur la colonne de snapshot immuable)

L’intégration au block checkout est enregistrée via l’Additional Checkout Fields API de WooCommerce (introduite dans WooCommerce 8.6). Sur les versions plus anciennes, le filtre hérité woocommerce_billing_fields ajoute toujours les champs TVA, code fiscal et spécifiques par pays au shortcode checkout : le plugin se dégrade gracieusement.

Installation

  1. Téléchargez le dernier ZIP Invoice Pilot depuis la page Releases  GitHub.
  2. Dans WordPress, ouvrez Extensions → Ajouter → Téléverser une extension.
  3. Choisissez le ZIP et cliquez sur Installer maintenant.
  4. Cliquez sur Activer.
  5. Ouvrez Invoice Pilot → Réglages pour configurer le vendeur, les séries de numérotation et les intégrations optionnelles.

L’activation crée les tables du plugin, installe les réglages par défaut et amorce cinq séries de numérotation (une par type de document) : INV (facture, par défaut), REC (reçu), CN (avoir), PRO (proforma) et Q (devis), toutes utilisant le pattern YYYY-NNNN avec une remise à zéro annuelle. Quatre tâches cron sont également planifiées : nettoyage quotidien des logs, retry des pushes d’intégration échoués toutes les quinze minutes, revalidation VIES horaire et rafraîchissement quotidien du token Fatture in Cloud.

Sur WordPress Multisite, le même bootstrap par site est exécuté automatiquement à la création d’un nouveau sous-site (wp_initialize_site).

Configuration

Tous les écrans d’Invoice Pilot vivent sous le menu de premier niveau Invoice Pilot dans la barre latérale d’administration WordPress :

  • Tableau de bord — cartes KPI et graphiques de tendance.
  • Documents — data-grid moderne listant chaque document émis (facture, avoir, proforma, devis, reçu) avec une barre d’outils unifiée (recherche IA + filtre par type), des pastilles de statut colorées (paid / void / converted / draft / issued), une pagination 20 lignes et des actions inline PDF / XML / Supprimer.
  • Réglages — page de configuration en huit onglets (documentée plus bas).
  • Journal — entrées du journal d’intégration avec rétention et action de nettoyage manuel.

La page Réglages est découpée selon les onglets suivants, dans l’ordre d’apparition dans l’UI :

  1. Général
  2. Séries
  3. Types de document
  4. Templates
  5. Validation TVA
  6. Intégrations
  7. IA
  8. Avancé

Général

Invoice Pilot — Réglages, onglet Général
Réglages → Général — clé de licence, identité du vendeur et valeurs par défaut des documents.

L’onglet Général se compose de trois cartes : Licence, Détails du vendeur et Valeurs par défaut des documents.

Licence

ChampNotes
Clé de licenceCollez la clé PILOT-XXXX-XXXX-XXXX-XXXX issue de votre e-mail de confirmation de commande et cliquez sur Vérifier & enregistrer pour activer les mises à jour automatiques via le flux des releases GitHub. Le plugin émet toujours des documents sans clé ; seul le canal d’auto-update est conditionné.

Détails du vendeur porte l’identité imprimée sur chaque document émis ; Valeurs par défaut des documents porte un petit nombre de valeurs WooCommerce par défaut.

ChampPar défautNotes
Nom du vendeurvideTexte libre.
TVAvideIdentifiant de TVA du vendeur.
Code fiscalvideCodice fiscale italien ou équivalent.
AdressevideRue.
Code postal / CAPvideCode postal.
Villevide
Province (2 lettres, IT uniquement)videForcée en majuscules à la sauvegarde.
Pays (ISO, 2 lettres)ITISO-3166-1 alpha-2 ; forcé en majuscules.
E-mailvideValidé comme adresse e-mail.
LogovideSélectionné depuis la médiathèque WordPress. PNG ou SVG à fond transparent recommandé ; hauteur conseillée 64–128px. Le logo est imprimé en haut à droite de la facture.
IBANvideUtilisé par les writers qui émettent des instructions de paiement. Imprimé dans le pied de page de la facture et intégré dans <DatiPagamento> de FatturaPA.
Nom de la banquevideTexte libre — imprimé sous l’IBAN dans le pied de page de la facture et émis comme <IstitutoFinanziario> à l’intérieur du bloc <DettaglioPagamento> de FatturaPA.
SWIFT / BICvide8 ou 11 caractères alphanumériques ; passé en majuscules et débarrassé des espaces à la sauvegarde. Imprimé à côté de l’IBAN et émis comme <BIC> dans FatturaPA.
Statut déclencheurprocessingStatut de commande WooCommerce qui déclenche l’émission automatique de la facture. Valeurs autorisées : processing, completed, on-hold, pending.
Série par défautINVSlug de la série de numérotation utilisée pour les nouvelles factures.
Format du numéro de TVA sur le PDFPréfixé — VAT IT04032690614 (style VIES, recommandé)Comment le numéro de TVA du vendeur est imprimé sur la facture rendue et l’aperçu PDF. Valeurs : Préfixé (code pays devant le numéro, en miroir du format style VIES), Sans préfixe (numéro seul, tel que saisi dans Détails du vendeur → TVA). Par défaut Préfixé.
Champs de facturation spécifiques au paysItalie uniquement (SDI / PEC / régime fiscal)Sélecteur tri-état qui contrôle quels champs spécifiques au pays sont exposés à la commande. Valeurs : Off — seuls les champs universels TVA et code fiscal sont affichés, Italie uniquement (SDI / PEC / régime fiscal), Tous les champs UE-27 spécifiques au pays. S’applique à la fois au block checkout et au shortcode checkout hérité. Chaque champ porte une étiquette traduisible (par exemple SDI recipient code, Certified email (PEC), SIRET, Steuernummer) — les anciens noms snake_case ont disparu.

Séries

Invoice Pilot — Réglages, onglet Séries
Réglages → Séries — table CRUD des séries de numérotation avec pattern par type, compteur et stratégie de reset.

L’onglet Séries est une table CRUD des séries de numérotation stockées dans la table series du plugin. Chaque ligne contrôle la façon dont les documents d’un type donné sont numérotés.

Colonnes : Slug, Pattern, Compteur, Reset, Par défaut, Activée, Actions (Modifier / Supprimer).

Le formulaire Ajouter / Modifier expose :

ChampValeurs autoriséesPar défaut
SlugIdentifiant en minuscules. Doit être unique.vide
Type de documentinvoice, receipt, credit_note, proforma, quote.invoice
PatternTexte libre ; les placeholders {YYYY} (année) et {NNNN} (compteur) sont étendus à l’émission.INV-{YYYY}-{NNNN}
CompteurEntier, un ou supérieur. Prochain numéro à attribuer — le tout prochain document émis depuis cette série utilisera exactement cette valeur (ainsi, avec Compteur = 47, c’est INV-2026-0047 qui sortira ensuite, pas INV-2026-0048).1
Stratégie de resetnever, yearly.never
Par défautBooléen — marque cette série comme par défaut pour les nouveaux documents de ce type.off
ActivéeBooléen — autorise l’utilisation de cette série.on

Renommer un slug met à jour la ligne en place (préservant l’id entier et les références éventuelles) et migre automatiquement le réglage default_series s’il pointait sur l’ancien slug. Supprimer une série ne retire pas les documents existants ; ils conservent leurs numéros.

Types de document

Invoice Pilot — Réglages, onglet Types de document
Réglages → Types de document — types optionnels et réglages bollo / ritenuta par défaut pour FatturaPA.

L’onglet Types de document bascule les types de documents optionnels et expose les réglages bollo et ritenuta propres à FatturaPA.

Carte Types de document

InterrupteurPar défautDescription
Émission automatique d’un avoir au remboursement WConLorsqu’un remboursement WooCommerce est créé, un avoir lié à la facture d’origine est émis automatiquement.
Activer les documents proformaonAffiche un bouton « Créer un proforma » sur l’écran de commande WC et autorise la conversion en facture.
Activer les devis (preventivo)onAffiche un bouton « Créer un devis » sur l’écran de commande WC. Les devis sont non fiscaux : un PDF est produit mais pas de XML.

Carte FatturaPA — B2B italien

ChampPar défautDescription
Bollo virtuale assoltooffÉmet DatiBollo (timbre virtuel de 2,00 EUR) sur les factures au-delà de 77,47 EUR lorsque l’obligation a été déclarée à l’Agenzia delle Entrate.
Appliquer la Ritenuta d’accontooffCalcule et émet DatiRitenuta sur les factures aux acheteurs B2B italiens.
Taux par défaut20,00 %0–100, pas 0,01.
Tipo ritenutaRT02RT01 (persone fisiche) ou RT02 (persone giuridiche).
Causale pagamentoALettre majuscule unique issue de la table SDI 1.1.5.2 (par exemple A = prestations professionnelles).

Templates

Invoice Pilot — Réglages, onglet Templates
Réglages → Templates — sélecteur radio Minimal / Classic / Modern, sélecteurs de couleurs et de typographie, et un aperçu PDF en direct en dessous (l’iframe d’aperçu est capturée séparément, voir plus bas).

Choisissez l’un des trois templates PDF fournis et personnalisez ses couleurs et sa typographie.

TemplateDescription
MinimalMise en page sans-serif épurée avec un accent teal. Par défaut.
ClassicTypographie serif avec bandeau d’en-tête coloré. Aspect traditionnel pour les prestations professionnelles.
ModernEn-tête sur deux colonnes et cartes arrondies. Adapté aux marques au design soigné.

Champs supplémentaires :

ChampPar défautNotes
Couleur principale#1e8a8aSélecteur de couleur HTML5 natif ; accent pour les titres, séparateurs et en-têtes de table.
PolicePolice du thème du site (stack système)Une de : default, dejavusans, dejavuserif, dejavusansmono, helvetica, times, courier. La valeur default utilise le stack système du site avec DejaVuSans en fallback PDF.
Couleur du texte#222222Couleur par défaut du corps de texte. Les légendes et footers atténués conservent leur teinte plus claire.

L’onglet embarque également un aperçu PDF en direct (rendu via l’endpoint REST /wp-json/invoice-pilot/v1/preview-template) pour comparer les templates côte à côte avant d’enregistrer. Changer le radio permute l’iframe immédiatement ; le choix n’est persisté qu’au moment où vous cliquez sur Enregistrer le template.

Invoice Pilot — aperçu PDF en direct (template Modern, facture)
Aperçu en direct rendu via mPDF — template Modern, type facture, vos vrais détails vendeur (logo, couleur principale, IBAN) et un exemple d’acheteur / de lignes.

Un sélecteur de Type de document se trouve au-dessus de l’iframe pour prévisualiser le rendu de chacun des quatre types — invoice, credit_note, proforma, quote — avec le même template, le même vendeur et le même acheteur d’exemple. Les différences appliquées par type sont :

TypeTitrePréfixe de numéroPastille de statutBandeau de mentionPaiement / IBAN
invoiceFactureINV-ISSUEDaffiché
credit_noteAvoirCN-CREDIT NOTERemboursement de INV-…masqué
proformaProformaPRO-PROFORMAProforma — document non fiscal.affiché
quoteDevisQ-QUOTEDevis — document non fiscal, sous réserve d'acceptation.masqué

Les devis renomment en plus les cellules « Émis » / « Échéance » mises en avant en Valable jusqu’au, et le total mis en avant devient Total estimé ; les avoirs le renomment en Total du remboursement. Ces différences proviennent d’une table de surcharges de libellés par type et d’un helper doc_type_context() injecté dans le moteur de template, pour que les trois designs fournis (Minimal / Classic / Modern) conservent une identité visuelle cohérente entre les types de documents sans dupliquer les fichiers de template.

Le pied de page porte toujours le pays de l’acheteur sous sa forme anglaise complète (par exemple Germany, et non DE) — le code ISO de la commande est résolu via Locale::getDisplayRegion() de PHP avant le rendu, ce qui garde la facture rendue lisible pour les acheteurs humains et les auditeurs fiscaux. Le numéro de TVA du vendeur, lui, est imprimé selon Format du numéro de TVA sur le PDF dans Général → Valeurs par défaut des documents — par défaut sous la forme préfixée style VIES (VAT IT04032690614), avec une option Sans préfixe pour les juridictions qui préfèrent le numéro brut.

Le dispatcher qui choisit la bonne enveloppe XML selon le pays de l’acheteur est le filtre invoice_pilot_xml_writer_for_country, que le code hôte peut surcharger par ISO (voir Hooks et filtres).

Validation TVA

Invoice Pilot — Réglages, onglet Validation TVA
Réglages → Validation TVA — chaîne de validateurs (VIES + format par pays), TTL et état du cache, interrupteurs reverse charge, testeur en direct et seeder des taux standard UE-27.

Les identifiants de TVA saisis à la commande (et sur tout écran d’adresse qui expose le champ) passent par une chaîne de validateurs. Chaque validateur est activé par un interrupteur indépendant et tourne dans l’ordre jusqu’à ce qu’un d’entre eux renvoie un résultat positif ; les réponses positives comme négatives sont mises en cache pour le TTL configuré.

ValidateurPar défautDescription
VIES (SOAP UE)onCroise les identifiants de TVA UE avec le service VIES de la Commission européenne.
Format par paysonValidation regex hors-ligne par pays. Toujours recommandée en repli.
ChampPar défautPlage / Notes
TTL du cache (heures)241720. Les lookups VIES en échec datant de plus de 6 heures sont revalidés par le cron horaire.
Reverse charge B2B intra-UEonLorsque l’acheteur se trouve dans un État membre UE différent du vendeur et fournit une TVA que la chaîne confirme comme valide, WooCommerce met automatiquement la TVA du panier à zéro (l’acheteur autoliquide la TVA dans son pays). Le champ TVA gagne aussi un badge en direct : ✓ vert quand le lookup réussit, ✕ rouge quand il échoue.
Déduire la TVA si le client est dans le pays de baseoffLa plupart des juridictions n’autorisent PAS cela — laissez désactivé sauf si vous disposez d’un avis fiscal spécifique qui s’applique à votre activité. Lorsque activé, une TVA B2B locale valide déclenche la déduction reverse charge aussi sur les ventes domestiques.

Une ligne État du cache en lecture seule rapporte le nombre d’entrées en cache et combien ont expiré en attente d’éviction.

Tester la validation TVA — une petite carte de test sous les réglages exécute chaque fournisseur directement contre une seule TVA, en contournant l’ordre de la chaîne et le cache, pour vous permettre de voir si VIES a réellement confirmé le numéro ou si seul le contrôle de format hors-ligne l’a fait.

Seeder les taux de TVA standard UE-27 — la carte du bas peuple WooCommerce → Réglages → Taxe → Taux standard avec le taux de TVA standard actuel pour chaque État membre UE-27 (AT 20% BE 21% BG 20% HR 25% CY 19% CZ 21% DK 25% EE 22% FI 25.5% FR 20% DE 19% GR 24% HU 27% IE 23% IT 22% LV 21% LT 21% LU 17% MT 18% NL 21% PL 23% PT 23% RO 21% SK 23% SI 22% ES 21% SE 25%). Par défaut seuls les pays manquants sont insérés ; cochez Écraser les taux existants pour forcer le rafraîchissement de chaque ligne à la valeur canonique (utile après une hausse nationale de la TVA). La carte liste aussi chaque paire (ISO, taux) pour que vous voyiez exactement ce qui sera écrit avant de presser le bouton.

Intégrations

L’onglet Intégrations rend un panneau par fournisseur d’intégration enregistré, derrière un sélecteur Fournisseur unique en haut — choisissez le fournisseur à configurer et seule sa carte est visible, les autres restent dans le DOM masqués. Le sélecteur est sticky entre les sauvegardes : lorsque vous enregistrez le formulaire d’un fournisseur (ou que vous arrivez sur l’onglet avec ?integration=<id> dans l’URL), le rendu suivant garde ce fournisseur sélectionné, vous évitant d’être renvoyé sur celui qui est activé en premier dans l’ordre d’enregistrement.

Par défaut, Invoice Pilot embarque six fournisseurs ; du code tiers peut en enregistrer d’autres via le filtre invoice_pilot_integration_providers.

Chaque panneau de fournisseur est clos par une carte Statut de connexion avec un bouton Tester la connexion. Le bouton émet une requête légère contre les identifiants enregistrés et affiche la réponse upstream — enregistrez d’abord le formulaire si vous venez de coller de nouveaux tokens.

SmartBill

Invoice Pilot — Intégrations, panneau SmartBill
Intégrations → SmartBill — interrupteur d’activation, nom d’utilisateur API, token chiffré, CIF et série.

Fournisseur de facturation roumain. Les identifiants sont chiffrés au repos par la couche de crypto symétrique du plugin.

ChampPar défautNotes
Activer SmartBilloffPousse les factures émises vers SmartBill dès leur émission.
Nom d’utilisateur APIvideLe nom d’utilisateur que vous utilisez pour vous connecter à SmartBill.
TokenvideCollez votre token API SmartBill. La valeur stockée est chiffrée ; laissez le champ vide aux sauvegardes ultérieures pour la conserver.
CIF (société)videCode TVA roumain de la société.
SérievideSérie SmartBill utilisée pour les factures poussées.

Lorsque l’intégration est activée, Invoice Pilot appelle POST /SBORO/api/v2/invoice à l’émission, puis pull_status pour réconcilier et void lorsqu’une facture est annulée.

Fatture in Cloud

Invoice Pilot — Intégrations, panneau Fatture in Cloud
Intégrations → Fatture in Cloud — tokens OAuth, id de la société et l’interrupteur Créer les clients.

Fournisseur de facturation italien. Les tokens OAuth sont stockés chiffrés au repos. Le cron quotidien invoice_pilot_refresh_fic_token rafraîchit automatiquement l’access token lorsque l’intégration est activée.

ChampPar défautNotes
Activer Fatture in CloudoffPousse les documents émis (factures, avoirs, proformas, devis) vers Fatture in Cloud dès leur émission.
Client IDvideIdentifiant client OAuth.
Access tokenvideCollez l’access token OAuth. La valeur stockée est chiffrée ; laissez le champ vide aux sauvegardes ultérieures pour la conserver.
Refresh tokenvideMême traitement que l’access token.
Company ID0Identifiant numérique de la société dans votre compte Fatture in Cloud.
Créer les clientsonCrée automatiquement une fiche client dans FIC lorsqu’un nouvel acheteur est facturé.

Conformément à la politique produit de Fatture in Cloud, Invoice Pilot ne soumet pas FatturaPA au SDI à votre place. La soumission SDI est laissée à une étape manuelle distincte depuis votre compte FIC.

Xero

Invoice Pilot — Intégrations, panneau Xero
Intégrations → Xero — en haut : panneau de connexion en un clic avec l’URI de redirection à enregistrer sur developer.xero.com. En bas : identifiants de l’application et valeurs par défaut de comportement. Plus bas : une section Statut de connexion avec un bouton Tester la connexion en direct.

Plateforme comptable mondiale. Les tokens OAuth 2.0 sont chiffrés au repos. L’onglet de réglages est organisé en Connexion (statut + boutons Connecter / Déconnecter) en haut et Réglages (identifiants de l’application + comportement du push) en bas.

Connexion

Invoice Pilot embarque un flux OAuth intégré — vous n’avez plus à faire la danse dans Postman et à coller quatre chaînes dans le formulaire. La configuration de bout en bout est :

  1. Créez une Web app sur developer.xero.com  avec l’URI de redirection imprimée dans le panneau Connexion — recopiez-la telle quelle, Xero la compare caractère par caractère. Les applications créées après le 2 mars 2026 ne peuvent demander que le jeu de scopes granulaires ; Invoice Pilot choisit le bon automatiquement.
  2. Générez un Client secret sur la page de l’application Xero (Xero ne l’affiche qu’une seule fois), puis collez Client ID et Client secret dans le formulaire Réglages et enregistrez.
  3. Cliquez sur Connecter à Xero. Vous serez envoyé vers l’écran de consentement standard et, si votre compte autorise plus d’une organisation, vous serez redirigé vers un sélecteur intégré à la carte pour choisir le tenant cible. Les tokens sont échangés et persistés automatiquement.
  4. Déconnecter efface les access et refresh tokens ainsi que le tenant id, tout en conservant les identifiants de l’application pour faciliter une reconnexion.

Les pushes utilisent POST /Invoices avec l’en-tête standard Idempotency-Key dérivé de l’id et du numéro de la facture locale, afin qu’un retry réseau retombe sur le même InvoiceID côté Xero au lieu de créer un doublon. Le refresh token est rotaté automatiquement sur 401 ; s’il finit par expirer (Xero invalide les refresh tokens après 60 jours d’inactivité), il suffit de recliquer sur Connecter.

Champs
ChampPar défautNotes
Activer XerooffPousse les documents émis vers Xero dès leur émission.
Client ID / Client secretvideIdentifiants d’application OAuth 2.0 issus du Xero Developer Portal. Obligatoires avant de pouvoir utiliser Connecter.
Access token / Refresh token (avancé)videRemplis automatiquement par le bouton Connecter. À coller à la main uniquement si vous avez obtenu les tokens en dehors de cette UI.
Tenant IDvideUUID de l’organisation Xero. Rempli automatiquement par Connecter (une seule organisation) ou défini via le sélecteur de tenant intégré à la carte (plusieurs organisations).
Default account code200Code de compte de revenu apposé sur chaque ligne poussée. Valeurs régionales par défaut : UK/NZ 200, US 400, AU 200. Retrouvez le vôtre dans Accounting → Chart of accounts sur Xero.
Default tax typeOUTPUTTaxType Xero appliqué aux lignes taxées. Valeurs courantes : OUTPUT (TVA standard sur ventes), OUTPUT2 (taux réduit), EXEMPTOUTPUT, NONE. Les lignes à TVA zéro retombent automatiquement sur NONE.
Invoice status on pushAUTHORISEDL’une des valeurs DRAFT (modifiable dans Xero, pas encore une vraie facture), SUBMITTED (en attente d’approbation), AUTHORISED (finalisée). Toute autre valeur est ramenée à AUTHORISED.
Payment account UUIDvideAccountID du compte bancaire/caisse Xero utilisé lors de l’enregistrement des paiements. Retrouvez-le via GET /api.xro/2.0/Accounts?where=Type=="BANK" ou via l’interface Xero (Chart of accounts → click the bank account → URL contains the UUID). Laissez vide pour désactiver l’enregistrement des paiements.

QuickBooks Online

Invoice Pilot — Intégrations, panneau QuickBooks Online
Intégrations → QuickBooks Online — en haut : panneau de connexion en un clic avec l’URI de redirection à enregistrer sur developer.intuit.com. En bas : identifiants de l’application, interrupteur d’environnement et comportements par défaut. Plus bas : une section Connection Status avec un bouton Test Connection en direct.

Intuit QuickBooks Online — US / CA / UK / mondial. Les tokens OAuth 2.0 sont chiffrés au repos. L’onglet de réglages est organisé en Connexion (statut + boutons Connecter / Déconnecter) en haut et Réglages (identifiants de l’application + comportement du push) en bas.

Connexion

Invoice Pilot embarque un flux OAuth intégré — vous n’avez plus à faire la danse dans Postman et à coller cinq chaînes dans le formulaire. La configuration de bout en bout est :

  1. Créez une application sur developer.intuit.com  avec QuickBooks Online and Payments comme plateforme et le scope com.intuit.quickbooks.accounting. Ouvrez l’onglet Keys & OAuth et basculez entre Development et Production selon l’environnement visé — chacun a sa propre paire client_id
    • secret.
  2. Ajoutez l’URI de redirection imprimée dans le panneau Connexion à la liste Redirect URIs puis cliquez sur Save — Intuit accepte http://localhost pour les applications de Development.
  3. Collez Client ID et Client secret dans le formulaire Réglages, choisissez l’Environment correspondant (Sandbox / Production) et enregistrez.
  4. Cliquez sur Connect to QuickBooks. L’écran de consentement d’Intuit vous permet de choisir l’entreprise contre laquelle l’intégration écrira ; le realmId choisi est renvoyé dans l’URL de callback et enregistré automatiquement — il n’y a pas de sélecteur de tenant séparé.
  5. Déconnecter efface les access et refresh tokens ainsi que le realm id, tout en conservant les identifiants de l’application pour faciliter une reconnexion.

Chaque push utilise POST /v3/company/{realmId}/invoice avec le paramètre de requête requestid fixé à une valeur stable par facture — QBO collapse les POST réessayés sur la réponse d’origine, si bien qu’un retry réseau ne créera jamais de doublon. Les pushes portent aussi minorversion=75 pour que QBO renvoie les formes d’entités actuelles (sans cela, l’API rétrograde silencieusement vers son contrat de 2017). Les refresh tokens durent 100 jours à compter de leur émission et sont rotés à chaque utilisation ; le plugin gère la rotation de manière transparente sur 401.

Champs
ChampPar défautNotes
Activer QuickBooks OnlineoffPousse les documents émis dès leur émission.
Environmentsandboxsandbox (par défaut) tape sur sandbox-quickbooks.api.intuit.com ; production tape sur quickbooks.api.intuit.com. Chaque environnement a ses propres Client ID + secret sur la page de l’application Intuit.
Client ID / Client secretvideIdentifiants d’application OAuth 2.0 issus de l’onglet Keys & OAuth de votre application Intuit Developer. Obligatoires avant de pouvoir utiliser Connect.
Access token / Refresh token (avancé)videRemplis automatiquement par le bouton Connect. Les access tokens QBO durent environ 60 minutes et sont rotés via le refresh token ; les refresh tokens durent 100 jours à compter de leur émission et sont rotés à chaque utilisation. À coller à la main uniquement si vous avez obtenu les tokens en dehors de cette UI.
Realm IDvideID d’entreprise QuickBooks. Rempli automatiquement par Connect — QBO le passe en tant que realmId dans le callback OAuth. Les entreprises sandbox ressemblent à 9341457147734811 ; les realms de production sont du même format.
Default customer IDvideCustomer.Id QBO auquel chaque facture poussée est rattachée. Obligatoire — QBO refuse les factures sans CustomerRef. Retrouvez-le sous Sales → Customers dans l’interface QBO ou via GET /v3/company/{realmId}/query?query=select * from Customer.
Default item ID1Item.Id QBO utilisé pour chaque ligne. 1 est l’article “Services” par défaut dans un sandbox tout neuf ; retrouvez le vôtre sous Sales → Products and services.
Default tax codeNONTaxCodeRef QBO appliqué à chaque ligne. NON = non taxable (par défaut), TAX = taxe de vente par défaut sur les comptes US/CA. Surchargez par juridiction en configurant le tax code dans QBO et en collant son nom ici.

Fortnox

Invoice Pilot — Intégrations, panneau Fortnox
Intégrations → Fortnox — identifiants OAuth, numéro client par défaut, TVA par défaut et l’interrupteur Comptabiliser au push.

Plateforme comptable suédoise. Identifiants OAuth 2.0 chiffrés au repos.

ChampPar défautNotes
Activer FortnoxoffPousse les documents émis dès leur émission.
Client ID / Client secretvideIdentifiants OAuth 2.0 issus du portail développeur Fortnox.
Access token / Refresh tokenvideChiffrés au repos.
Numéro client par défautvideUtilisé lorsque l’acheteur n’a pas de numéro client Fortnox résolu.
TVA par défaut25Taux de TVA suédoise par défaut (en %) appliqué lorsqu’aucun taux n’est mappé.
Comptabiliser au pushoffCrée également la pièce comptable lors du push de la facture.

Sage

Invoice Pilot — Intégrations, panneau Sage
Intégrations → Sage Business Cloud — identifiants OAuth, business id, ids contact/ledger/tax-rate par défaut.

Plateforme comptable OAuth 2.0 (Sage Accounting / Business Cloud).

ChampPar défautNotes
Activer SageoffPousse les documents émis dès leur émission.
Client ID / Client secretvideIdentifiants OAuth 2.0 issus de Sage Developer.
Access token / Refresh tokenvideChiffrés au repos.
Business IDvideIdentifiant de l’entreprise Sage sur laquelle l’intégration écrit.
Contact id / ledger id / tax rate id par défautvideValeurs de repli appliquées quand le snapshot ne porte pas la correspondance correspondante.

IA

Invoice Pilot — Réglages, onglet IA
Réglages → IA — sélecteur de fournisseur (Anthropic / OpenAI / Google Gemini / DeepSeek / Grok), clé d’API chiffrée, Tester la connexion et quatre interrupteurs de fonctionnalités avec limites de débit horaires.

L’onglet IA est découpé en deux cartes : Configuration du fournisseur et Fonctionnalités. Le plugin fonctionne entièrement sans clé d’API ; cet onglet ajoute des capacités optionnelles propulsées par l’IA.

Configuration du fournisseur

ChampNotes
FournisseurAnthropic (par défaut), OpenAI, Google Gemini, DeepSeek ou Grok (xAI). Chaque fournisseur conserve sa propre clé d’API chiffrée, vous pouvez donc basculer de l’un à l’autre sans recoller les identifiants.
Clé d’APIStockée chiffrée. La carte affiche un badge vert Configuré lorsqu’une clé est déjà enregistrée. Le lien « Obtenez votre clé d’API sur … » pointe vers la console du fournisseur choisi.
ModèleListe par fournisseur (voir tableau ci-dessous). Le premier modèle de la liste est utilisé comme défaut lorsqu’aucun n’est configuré.
Tester la connexionAppelle l’endpoint messages / chat/completions du fournisseur avec un prompt d’un token et rapporte le succès ou l’erreur upstream.

Modèles proposés par fournisseur :

FournisseurModèles
AnthropicClaude Opus 4.7 (meilleure qualité, par défaut), Claude Sonnet 4.6 (recommandé), Claude Haiku 4.5 (rapide, économique)
OpenAIGPT-5 (meilleure qualité), GPT-5 mini (rapide), GPT-4o, GPT-4o mini (le moins cher)
Google GeminiGemini 2.5 Pro, Gemini 2.5 Flash (meilleur rapport qualité-prix), Gemini 2.5 Flash Lite (le moins cher)
DeepSeekDeepSeek V3.2 Chat, DeepSeek V3.2 Reasoner
Grok (xAI)Grok 4.1 Fast, Grok 4, Grok 3, Grok 3 Mini

Fonctionnalités

InterrupteurPar défautDescription
Smart-fill du paiementoffLes clients collent un bloc de facturation libre à la commande ; le modèle remplit le formulaire structuré.
Appels smart-fill par heure5Limite de débit par session.
Pré-contrôle de conformitéoffLe modèle scanne chaque facture avant émission et signale les problèmes potentiels.
Bloquer l’émission sur défauts critiquesoffLorsqu’un problème critique est détecté, empêche l’émission de la facture.
Appels de conformité par heure10
Traduire les descriptions de ligneoffUtilise l’IA pour traduire les lignes de facture dans la langue de l’acheteur. Pris en compte par Polyglot lorsque le plugin compagnon est installé.
Recherche documentaire en langage natureloffRequêtes libres sur la page d’admin Documents.
Appels de recherche par heure10

Avancé

Invoice Pilot — Réglages, onglet Avancé
Réglages → Avancé — rétention des logs, comportement à la désinstallation, actions de maintenance manuelles et bas de page de version.

Rétention et désinstallation

ChampPar défautPlage
Rétention des logs (jours)9013650. Les entrées du journal d’intégration plus anciennes sont purgées par le cron quotidien.
Effacer les données à la désinstallationoffSupprime toutes les tables et options d’Invoice Pilot lorsque le plugin est désinstallé. Destructif. Off par défaut.

Actions de maintenance

  • Lancer le nettoyage des logs maintenant — déclenche l’action invoice_pilot_cleanup_logs immédiatement au lieu d’attendre le cron quotidien.
  • Purger le cache de validation — supprime chaque ligne de la table de cache de validation TVA.

Une petite ligne Versions en bas affiche la version courante du plugin et la version du schéma de base de données.

Utilisation

Émettre une facture automatiquement depuis une commande WooCommerce

Le workflow par défaut ne demande aucune action manuelle.

  1. Un client passe commande sur WooCommerce. La commande expose les champs TVA et Code fiscal ainsi que tout champ spécifique au pays de facturation (par exemple SDI recipient code et Certified email (PEC) sur les commandes IT). Le champ TVA est validé en direct au fur et à mesure que le client tape — un badge ✓ vert apparaît à l’intérieur de l’input quand la chaîne confirme le numéro, ✕ rouge quand elle échoue. Si l’acheteur est dans un autre État membre UE et que la TVA est valide, WooCommerce met automatiquement la TVA du panier à zéro (reverse charge B2B intra-UE — voir Réglages → Validation TVA).
  2. Lorsque la commande atteint le statut déclencheur défini sous Réglages → Général → Statut déclencheur (processing par défaut), Invoice Pilot émet une facture en utilisant la Série par défaut (INV par défaut), persiste un snapshot JSON immuable de la commande, rend le PDF, génère l’enveloppe XML pour le pays de l’acheteur et pousse vers toute intégration activée.
  3. L’écran de commande gagne une meta box Invoice Pilot qui liste les documents émis avec des liens vers le PDF et le XML, plus des boutons d’action Régénérer, Réémettre, Annuler, Créer un avoir, Créer un proforma, Créer un devis et Pousser vers le fournisseur.
Invoice Pilot — écran d'édition de commande WooCommerce avec les champs de facturation spécifiques au pays et la meta box Invoice Pilot
WooCommerce → Commandes → Modifier — la carte Facturation porte les champs spécifiques au pays enregistrés pour l’ISO de l’acheteur (ici code destinataire SDI italien, Certified email / PEC et Régime fiscal), et la meta box Invoice Pilot sur la droite affiche le numéro du document émis avec les liens PDF / XML, une action Regenerate document et les raccourcis Other documents pour proforma et devis.

La meta box Invoice Pilot fait remonter, pour le dernier document non annulé de la commande : le numéro du document (par exemple INV-2026-0063), la pastille de statut (Issued / Paid / Void), les boutons de téléchargement PDF et XML (liens REST signés par token), une action Regenerate document qui re-rend les artefacts contre le template et les réglages vendeur courants sans changer le numéro du document, et une section Other documents qui expose des boutons Create proforma et Create quote en un clic. Lorsqu’une intégration est activée, un bouton Push to provider apparaît à côté des liens PDF / XML et rejoue l’appel d’intégration contre la cible configurée.

Émettre manuellement

Si l’émission automatique est désactivée ou que la commande n’a pas encore atteint le statut déclencheur, la meta box de la commande expose un bouton Émettre maintenant. Le même flux s’applique — snapshot, PDF, XML, push d’intégration — mais à la demande.

Avoirs depuis les remboursements

Lorsque Émission automatique d’un avoir au remboursement WC est activée (par défaut), tout remboursement WooCommerce créé sur une commande dotée d’une facture déclenche un avoir dans la série CN. L’avoir renvoie à la facture parente et la référence dans le XML. Le PDF rendu porte un bandeau de mention « Remboursement de INV-… » en haut, une pastille de statut CREDIT NOTE, Total du remboursement dans la cellule mise en avant, et masque le pied IBAN / méthode de paiement (le flux de paiement original ne s’applique plus). Vous pouvez aussi émettre un avoir manuellement — total ou partiel — depuis la carte Actions sur l’écran d’édition de la facture, à condition que la facture parente soit en statut issued.

Proformas et devis

Lorsque les interrupteurs correspondants sont activés, l’écran de commande expose aussi les boutons Créer un proforma et Créer un devis. Les deux produisent des documents non fiscaux — un PDF est rendu mais aucun XML n’est généré pour les devis. Le PDF rendu porte un traitement visuel propre à son type : un bandeau de mention en haut (« Proforma — document non fiscal. » / « Devis — document non fiscal, sous réserve d’acceptation. »), une pastille de statut « QUOTE » / « PROFORMA » à la place de « ISSUED », et sur les devis le libellé de date mis en avant passe à Valable jusqu’au et le total mis en avant à Total estimé. Les devis masquent le bloc IBAN / méthode de paiement puisqu’aucun paiement n’est encore dû.

Un proforma peut être converti en facture via l’action Convertir, qui re-numérote le document sous la série de facture configurée.

Envoyer une facture au client

Le plugin enregistre une action de commande Envoyer la facture Invoice Pilot au client dans le menu déroulant standard des actions de commande WooCommerce, qui envoie le PDF à l’acheteur via wp_mail() de WordPress.

Télécharger les documents

Les PDF et enveloppes XML sont servis depuis un endpoint REST adressable publiquement mais signé par token :

GET /wp-json/invoice-pilot/v1/download/{id}/{format}?token=…

{format} vaut pdf ou xml. Le token est généré à l’émission du document et imprimé dans la meta box de la commande et dans la table de liste des factures.

Tableau de bord

Invoice Pilot — Tableau de bord
Tableau de bord — carte Vue d’ensemble d’activité avec sélecteur de période et cinq cartes KPI, carte Tendances avec deux graphiques de séries temporelles en dessous.

Invoice Pilot → Tableau de bord ouvre une carte Vue d’ensemble d’activité au-dessus d’une carte Tendances. La Vue d’ensemble expose une barre de période avec quatre fenêtres — 7 jours, 14 jours, 30 jours (par défaut) et 90 jours — et cinq cartes KPI :

  • Factures — nombre total de documents émis sur la période.
  • Net revenue — somme des totaux nets dans la devise de la boutique, rendue avec le symbole monétaire de la locale et deux décimales (par exemple €3,876.09 ou 3.876,09 € selon la locale de l’administrateur).
  • VAT collected — somme des totaux de TVA depuis le snapshot immuable. Même formatage monétaire dépendant de la locale que Net revenue. Une migration de schéma distincte remplit cette valeur pour les factures émises avant la version de schéma 1.3.1, où la colonne n’était pas peuplée à l’écriture.
  • Avg value — chiffre d’affaires net divisé par le nombre de factures, également formaté en devise.
  • B2B / B2C — répartition entre factures B2B (l’acheteur a un numéro de TVA) et B2C sur la même période.

Sous les KPI, la carte Tendances rend deux graphiques côte à côte — Invoices over time (un graphique double axe ligne + aire avec le nombre de factures sur l’axe gauche et la tendance du chiffre d’affaires net remplie sur l’axe droit) et By buyer country (un graphique en donut des principaux codes ISO acheteurs, avec la légende de couleurs en dessous). Toutes les figures sont alimentées par /wp-json/invoice-pilot/v1/dashboard?days=N.

Liste des documents

Invoice Pilot — liste des Documents
Documents — barre d’outils unifiée (recherche IA + filtre par type + décompte en cours) et data grid avec les colonnes NUMÉRO, TYPE, STATUT, COMMANDE, ÉMIS LE, TOTAL, CONFORMITÉ, FICHIERS et ACTIONS.

Invoice Pilot → Documents liste chaque document émis avec des pastilles de statut (paid / void / converted / draft / issued — colorées selon l’état du cycle de vie), une colonne Conformité portant le badge coloré produit par le pré-contrôle IA, et des actions inline PDF / XML / Supprimer par ligne. La page pagine par 20 lignes et expose une barre d’outils unifiée qui combine la recherche IA en texte libre avec un filtre par type de document (invoice / credit_note / proforma / quote / receipt) plus un décompte en cours à droite. Lorsque la recherche IA est activée, le champ de recherche accepte des requêtes libres (par exemple, « factures allemandes du mois dernier au-dessus de 1 000 EUR ») que le fournisseur configuré traduit en requête de liste ; les chips de filtre résolus apparaissent au-dessus du tableau pour que vous voyiez exactement comment le modèle a interprété votre phrase.

Liste des commandes WooCommerce

Invoice Pilot — colonne Numéro de facture sur l'écran des commandes WC
WooCommerce → Commandes — une colonne Facture affiche le numéro de document attribué à chaque commande, avec une petite icône d’aperçu qui mène au PDF rendu.

Invoice Pilot ajoute une unique colonne Facture à la liste standard des commandes WooCommerce (/wp-admin/admin.php?page=wc-orders) pour que le gérant de la boutique voie d’un coup d’œil quelles commandes ont déjà été documentées et lesquelles ne le sont pas, sans quitter l’écran des commandes. La colonne se place entre Commande et Date et affiche le numéro de document attribué par la série configurée (par exemple INV-2026-0063) lu tel quel depuis la colonne immuable number, avec une petite icône d’aperçu eye à côté du numéro qui ouvre en ligne le PDF rendu dans un nouvel onglet.

Les commandes sans document émis rendent un tiret cadratin — utile pour déboguer les inadéquations de statut déclencheur ou pour filtrer les commandes qui nécessitent un passage manuel par wp invoice-pilot issue. Le même renderer câble à la fois la colonne de la table de posts héritée (manage_edit-shop_order_columns) et la colonne HPOS (manage_woocommerce_page_wc-orders_columns), si bien que l’expérience est identique quel que soit le stockage de commandes utilisé par votre boutique.

Journal d’intégration

Invoice Pilot — journal d'intégration
Journal — log chronologique des pushes d’intégration avec filtres par fournisseur/action et action Supprimer par ligne ; les champs sensibles du payload sont rédigés à l’écriture par Core\Logger.

Invoice Pilot → Journal enregistre chaque push d’intégration, chaque réponse et chaque échec. La barre d’outils en haut combine un sélecteur Bulk actions + bouton Apply (pour l’instant une seule bulk-delete), un menu fournisseur et un menu action — tous deux peuplés à partir des valeurs réellement vues dans le log de sorte qu’ils n’affichent jamais que des filtres correspondant à une ligne réelle — et un décompte d’entrées en cours sur la droite.

La data grid porte huit colonnes :

ColonneNotes
DATE (UTC)Pastille d’horodatage, UTC. Triée par ordre décroissant par défaut.
PROVIDERSlug du fournisseur en minuscules (fattureincloud, smartbill, xero, …).
ACTIONOpération à l’origine de l’entrée (push, pull_status, refresh_token, void).
INVOICELien #<id> qui renvoie au document, ou tiret cadratin pour les entrées sans rapport avec une facture donnée (rafraîchissements de token, maintenance manuelle).
HTTPPastille colorée portant le code de statut upstream — vert pour 2xx, ambre pour 4xx, rouge pour 5xx (ou toute entrée dont la colonne error n’est pas null).
ERRORMessage d’erreur upstream en rouge lorsque l’appel a échoué ; tiret cadratin en cas de succès.
MSDurée wall-clock de l’appel en millisecondes.
ACTIONSUne action Supprimer rouge par ligne pour un nettoyage ciblé.

Les champs sensibles du payload sont rédigés à l’écriture par le Core\Logger du plugin, les requêtes et corps de réponse peuvent donc être conservés sans risque dans le log. Les anciennes entrées sont purgées par le cron quotidien invoice_pilot_cleanup_logs selon le réglage Rétention des logs (jours) de l’onglet Avancé.

Admin réseau (Multisite)

Sur un réseau Multisite, une page supplémentaire Invoice Pilot Network apparaît dans la barre latérale d’admin réseau. Elle agrège les nombres et totaux de factures sur chaque sous-site où Invoice Pilot est actif.

Facturation UE-27

Invoice Pilot embarque un registre de champs de facturation spécifiques par pays pour chaque État membre UE-27. Chaque champ est optionnel à la commande (le plugin n’impose pas de données B2B sur une commande B2C) ; la validation ne se déclenche que lorsque le pays de l’acheteur correspond à l’ISO du champ.

Le registre couvre actuellement :

PaysChamps
IT Italieei_recipient_code (7 alphanumériques, par défaut 0000000), ei_certified_email (PEC), fiscal_regime (RF01–RF19)
FR Francesiren (9 chiffres), siret (14 chiffres), chorus_pro_service_code
DE Allemagnesteuernummer, ust_id, leitweg_id, hrb
ES Espagnenif, face_oficina_contable, face_organo_gestor, face_unidad_tramitadora
PT Portugalnif (9 chiffres), atcud
NL Pays-Baskvk_number (8 chiffres), btw_id
BE Belgiquebce_number (10 chiffres)
LU Luxembourg
AT Autricheuid_nummer, firmenbuchnummer, steuernummer
IE Irlande
DK Danemarkcvr_number (8 chiffres), ean_location_number
SE Suèdeorganisationsnummer
FI Finlandey_tunnus, ovt_code
PL Polognenip (10 chiffres), regon, ksef_id
CZ République tchèquedic, ico (8 chiffres), data_box_id
SK Slovaquiedic, ico (8 chiffres), data_box_id
HU Hongrietax_number, group_member_id
SI Slovénievat_id, maticna_stevilka
HR Croatieoib (11 chiffres)
RO Roumaniecui
BG Bulgarieeik (9–13 chiffres), vat_id
GR Grèceafm (9 chiffres), dou_code
CY Chypretic
MT Malteid_number
LT Lituaniecompany_code
LV Lettonieregistration_number
EE Estonieregistry_code

L’intégration au block checkout enregistre les champs sous l’espace de noms invoice-pilot/... via l’Additional Checkout Fields API. Par défaut, seuls les champs italiens sont exposés dans le block checkout pour ne pas submerger les acheteurs non italiens ; l’interrupteur Tous les champs UE-27 à la commande dans Général active le jeu complet. Le shortcode checkout hérité rend toujours le registre complet filtré par le pays de facturation sélectionné.

Les champs pays sont persistés sur la commande, copiés dans le snapshot immuable de la facture et consommés par les writers XML — par exemple l’italien ei_recipient_code devient CodiceDestinatario / PECDestinatario dans l’enveloppe FatturaPA, tandis que l’allemand leitweg_id devient BuyerReference / EndpointID 0204 dans XRechnung.

Intégrations

SmartBill

SmartBill (Roumanie) est câblé dans l’IntegrationManager du plugin via le filtre invoice_pilot_integration_providers et expose l’interface standard de fournisseur : push, pull_status, void et test_connection.

  • Push mappe le snapshot de la facture sur le schéma JSON SmartBill et appelle POST /SBORO/api/v2/invoice avec le CIF et la série configurés.
  • Synchronisation de statut réconcilie les états draft / issued / paid lors du run du cron de retry des quinze minutes.
  • Void annule sur SmartBill une facture précédemment poussée lorsque la facture source est annulée dans WordPress.

Toutes les actions sont consignées dans le journal d’intégration. Les échecs sont mis en file et ré-essayés par le cron invoice_pilot_retry_integrations.

Fatture in Cloud

Fatture in Cloud (Italie) suit la même interface de fournisseur et mappe le snapshot de la facture sur la forme entity / items_list attendue par l’endpoint des documents émis de FIC. Les champs italiens spécifiques sont mappés explicitement :

  • ei_recipient_codeei_code
  • ei_certified_emailcertified_email
  • TVA / code fiscal / province / pays de l’acheteur → clés entity correspondantes

Les identifiants OAuth sont chiffrés au repos. Le cron quotidien invoice_pilot_refresh_fic_token rafraîchit l’access token lorsque l’intégration est activée. Mettre Créer les clients sur on fait créer à l’intégration une nouvelle fiche client dans FIC sur la première facture d’un acheteur.

Invoice Pilot ne soumet pas FatturaPA au SDI à votre place. La soumission SDI est laissée à une étape manuelle distincte depuis votre compte Fatture in Cloud.

Smart-fill IA

La couche IA est entièrement optionnelle. Sans clé d’API configurée, le plugin émet toujours des factures, rend les PDF et XML, valide la TVA et pousse vers les intégrations — seules les quatre fonctionnalités IA ci-dessous sont indisponibles.

Cinq fournisseurs sont pris en charge :

FournisseurModèle par défautURL pour la clé d’API
Anthropicclaude-opus-4-7console.anthropic.com 
OpenAIgpt-5platform.openai.com 
Google Geminigemini-2.5-proaistudio.google.com 
DeepSeekdeepseek-chatplatform.deepseek.com 
Grok (xAI)grok-4-1-fast-non-reasoningconsole.x.ai 

La clé d’API est stockée chiffrée au repos via la couche de crypto symétrique du plugin. Cliquer sur Tester la connexion émet une requête minimale vers l’endpoint choisi et fait remonter l’erreur upstream si les identifiants sont mauvais.

Quatre fonctionnalités peuvent être basculées indépendamment une fois la clé enregistrée :

  • Smart-fill à la commande — une zone de texte « Coller les détails de facturation » apparaît à la commande. Le modèle parse le texte libre et remplit le formulaire de facturation WooCommerce structuré, y compris les champs spécifiques par pays. Limité en débit par session.
  • Pré-contrôle de conformité — chaque facture est passée au modèle juste avant émission, avec l’option de bloquer l’émission sur défauts critiques lorsqu’un problème critique est détecté (par exemple, une facture B2B italienne sans le code destinataire SDI).
  • Auto-traduction des lignes — les descriptions des lignes de facture sont traduites dans la langue de l’acheteur. Lorsque le plugin compagnon Polyglot  est installé, le pipeline de traduction lui est délégué.
  • Recherche documentaire en langage naturel — la barre de recherche sur la page d’admin Documents accepte des requêtes libres que le modèle traduit en requête de liste.

Chaque fonctionnalité a sa propre limite de débit horaire.

Hooks et filtres

Les noms de hooks centralisés vivent dans la classe \InvoicePilot\Core\Hooks. Liste complète :

HookTypeRôle
invoice_pilot_redact_keysfilterClés supplémentaires à rédiger dans les payloads journalisés.
invoice_pilot_xml_writer_for_countryfilterSurcharge du writer XML par ISO d’acheteur. Deux arguments : writer courant, ISO.
invoice_pilot_validator_chainfilterSurcharge ou extension de la chaîne de validation TVA.
invoice_pilot_integration_providersfilterEnregistre des fournisseurs d’intégration supplémentaires.
invoice_pilot_country_fieldsfilterAjoute ou supprime des champs de checkout spécifiques par pays. Deux arguments : tableau des champs actuels, code ISO.
invoice_pilot_bootedactionSe déclenche après le boot du plugin. Passe le singleton.
invoice_pilot_register_modulesactionHook d’enregistrement des modules.
invoice_pilot_invoice_issuedactionSe déclenche après l’émission d’une nouvelle facture.
invoice_pilot_invoice_renderedactionSe déclenche après le rendu du PDF ou du XML.
invoice_pilot_integration_pushedactionSe déclenche après un push d’intégration réussi.
invoice_pilot_integration_failedactionSe déclenche après un push d’intégration en échec.
invoice_pilot_cleanup_logsactionCron quotidien — purge les anciennes entrées du journal d’intégration.
invoice_pilot_retry_integrationsactionCron toutes les quinze minutes — ré-essaye les pushes en échec.
invoice_pilot_revalidate_viesactionCron horaire — revalide les entrées VIES périmées du cache.
invoice_pilot_render_integration_tabactionÉmis depuis l’onglet Intégrations pour que les fournisseurs puissent rendre leurs propres cartes de réglages.
invoice_pilot_refresh_fic_tokenactionCron quotidien — rafraîchit l’access token Fatture in Cloud.

Enregistrer un writer XML personnalisé :

add_filter( 'invoice_pilot_xml_writer_for_country', function ( $writer, $iso ) { if ( 'NL' === $iso ) { return new My_Custom_Nl_Writer(); } return $writer; }, 20, 2 );

Enregistrer un fournisseur d’intégration personnalisé :

add_filter( 'invoice_pilot_integration_providers', function ( array $providers ) { $providers[] = new My_Custom_Provider(); return $providers; } );

Masquer ou étendre les champs de checkout spécifiques par pays (par exemple pour supprimer les invites ei_certified_email (PEC) et fiscal_regime (code RF) de l’Italie lorsque votre boutique n’en a jamais besoin — pas de fork du plugin requis) :

add_filter( 'invoice_pilot_country_fields', function ( array $fields, string $iso ) { if ( 'IT' === $iso ) { $fields = array_values( array_filter( $fields, fn ( $f ) => ! in_array( $f->name, [ 'ei_certified_email', 'fiscal_regime' ], true ) ) ); } return $fields; }, 10, 2 );

Le filtre s’exécute à la fois sur le chemin de validation du submit PHP et sur le snapshot JS servi au checkout WC Blocks, de sorte que les deux couches restent synchronisées. Noms machine des champs actuellement fournis (à utiliser dans le filtre) :

PaysNoms de champs
ITei_certified_email, fiscal_regime
FRsiren, siret, chorus_pro_service_code
DEsteuernummer, ust_id, leitweg_id, hrb
ESnif, face_oficina_contable, face_organo_gestor, face_unidad_tramitadora
PTnif, atcud
NLkvk_number, btw_id

Le registre complet par pays est défini dans CountryFieldRegistry::install_defaults() et couvre tous les ISO EU-27.

FAQ

Invoice Pilot soumet-il FatturaPA au SDI ?

Non. Invoice Pilot génère le XML FatturaPA et le stocke sur la commande ; la soumission SDI est volontairement laissée à une étape manuelle distincte (ou à l’intégration Fatture in Cloud sur votre compte).

Puis-je ajouter un writer pour un pays non intégré ?

Oui. Branchez-vous sur invoice_pilot_xml_writer_for_country et renvoyez votre propre implémentation de \InvoicePilot\Modules\Xml\XmlWriterInterface.

Fonctionne-t-il avec le block checkout WooCommerce ?

Oui. Les champs spécifiques par pays sont enregistrés via l’Additional Checkout Fields API de WooCommerce 8.6+, ils apparaissent donc à la fois dans le block checkout et dans le shortcode checkout hérité. Sur les versions de WooCommerce antérieures à 8.6, seul le chemin de filtre hérité est emprunté.

Fonctionne-t-il sur WordPress Multisite ?

Oui. Chaque sous-site a ses propres tables, ses réglages et ses compteurs de numérotation. Une page d’admin réseau sous Network Admin → Invoice Pilot Network agrège les nombres de factures sur le réseau. Sur les nouveaux sous-sites, les tables et les séries par défaut sont créées automatiquement via le hook wp_initialize_site.

Les identifiants sont-ils chiffrés ?

Oui. Les tokens SmartBill, les tokens OAuth Fatture in Cloud et la clé d’API IA sont chiffrés au repos via \InvoicePilot\Core\Crypto. Laisser un champ de token vide à la sauvegarde suivante préserve la valeur existante.

Que deviennent mes données si je supprime le plugin ?

Rien, sauf opt-in. La valeur par défaut de Avancé → Effacer les données à la désinstallation est off, les tables, options, journaux d’intégration et cache de validation sont donc préservés entre désactivation et réactivation. Activez l’option si vous voulez que la routine uninstall.php supprime tout lorsque WordPress supprime le plugin.

Où obtenir une clé d’API pour les fonctionnalités IA ?

Chaque fournisseur a sa propre console : Anthropic sur console.anthropic.com , OpenAI sur platform.openai.com , Google AI Studio sur aistudio.google.com , DeepSeek sur platform.deepseek.com  et Grok sur console.x.ai . L’onglet IA renvoie directement vers la console du fournisseur choisi.

Faut-il une clé IA pour que le plugin fonctionne ?

Non. Les fonctionnalités IA (smart-fill, contrôle de conformité, traduction de lignes, recherche en langage naturel) sont optionnelles. Le moteur de facturation principal — cycle de vie documentaire, génération PDF et XML, validation de TVA, intégrations, tableau de bord — tourne sans clé d’API.

Dépannage

La facture n’est pas émise lorsque la commande passe à Processing

Vérifiez Réglages → Général → Statut déclencheur. La valeur par défaut est processing ; si vous l’avez personnalisée (par exemple à completed), la routine d’émission auto ne se déclenche que sur le statut configuré. Vous pouvez aussi cliquer sur Émettre maintenant depuis la meta box de commande pour émettre manuellement, indépendamment du déclencheur.

La commande affiche trop (ou trop peu) de champs pays

Par défaut, seuls les champs italiens SDI sont exposés. Ouvrez Réglages → Général → Document defaults → Champs de facturation spécifiques au pays et choisissez la portée :

  • Off — seuls les champs universels TVA et code fiscal sont affichés.
  • Italie uniquement (SDI / PEC / régime fiscal) — défaut.
  • Tous les champs UE-27 spécifiques au pays — chaque ISO du registre.

Le réglage s’applique à la fois au block checkout et au shortcode checkout hérité. Les champs spécifiques au pays sont toujours masqués côté client lorsque le pays de facturation ne correspond pas.

La validation TVA se bloque ou tombe en timeout

Le service VIES est parfois lent ou indisponible. Le plugin conserve un cache par TVA pour le TTL configuré (24 heures par défaut) et revalide les entrées périmées toutes les heures via le cron invoice_pilot_revalidate_vies. Si VIES est hors ligne, le validateur Format par pays accepte toujours les numéros bien formés. Vous pouvez aussi augmenter le TTL du cache sous Réglages → Validation TVA.

Le tableau de bord n’affiche aucune donnée

Le SQL du tableau de bord s’appuie sur JSON_EXTRACT / JSON_UNQUOTE sur la colonne de snapshot de facture immuable. Vérifiez que votre serveur de base de données est MySQL 5.7+ ou MariaDB 10.2+. Si la barre de période affiche la bonne fenêtre mais que les cartes restent sur --, ouvrez /wp-json/invoice-pilot/v1/dashboard?days=30 directement et examinez la réponse — les échecs d’authentification REST apparaissent comme rest_forbidden.

Un push d’intégration échoue

Ouvrez Invoice Pilot → Journal et repérez l’entrée en échec — la colonne HTTP signale les réponses non 2xx avec un badge coloré et la colonne Erreur affiche le message d’erreur upstream en rouge. L’entrée échouée est automatiquement ré-essayée par le cron invoice_pilot_retry_integrations toutes les quinze minutes ; vous pouvez aussi cliquer sur Pousser vers le fournisseur dans la meta box de commande pour ré-essayer immédiatement. Utilisez l’action Supprimer sur une ligne pour purger une entrée ponctuelle sans attendre le cron de rétention.

Tester la connexion dans l’onglet IA renvoie une erreur

Le message renvoyé en rouge provient directement de l’endpoint du fournisseur. Causes fréquentes :

  • Une clé d’API invalide ou révoquée — générez-en une nouvelle et collez-la dans le champ Clé d’API, puis enregistrez.
  • Un nom de modèle auquel le compte n’a pas accès — choisissez un autre modèle dans le menu déroulant.
  • Sortie réseau bloquée par l’hébergeur — confirmez que le HTTPS sortant vers api.anthropic.com, api.openai.com, generativelanguage.googleapis.com, api.deepseek.com ou api.x.ai est autorisé.

Les e-mails de notification au client n’arrivent pas

Les e-mails de facture client sont envoyés via la fonction wp_mail() de WordPress. Si aucun e-mail n’arrive, le problème vient presque toujours de la configuration mail du site et non d’Invoice Pilot. Installez un plugin de mail transactionnel (par exemple un plugin qui route les e-mails WordPress via SMTP) et redéclenchez l’action Envoyer la facture Invoice Pilot au client depuis une commande de test.

Last updated on