Aller au contenu principal

Workflow Bash complet

Le script fatoora-full-workflow.sh exécute un scénario Fatoora de bout en bout : authentification OAuth2, récupération automatique du matricule fiscal, génération ou validation d'une facture TEIF, signature SEAL, envoi à TTN, suivi du job, puis téléchargement du XML signé et du PDF.

Télécharger fatoora-full-workflow.sh

Lien direct : /files/examples/fatoora-full-workflow.sh

Démonstration réelle

Cette animation est un rejeu anonymisé du test sandbox validé de bout en bout : la facture atteint ACCEPTED_TTN, puis le XML signé et le PDF sont téléchargés.

Exécution animée du workflow Fatoora dans un terminal

Prérequis

  • Bash 4 ou supérieur ;
  • curl, jq et awk ;
  • une clé Organisation API ou Partner API active ;
  • une configuration SEAL opérationnelle ;
  • une organisation avec un matricule fiscal configuré.
chmod +x fatoora-full-workflow.sh
./fatoora-full-workflow.sh --help
Protégez vos identifiants

Ne placez jamais le client_secret dans Git, dans une capture d'écran ou dans un historique partagé. Préférez des variables d'environnement et renouvelez immédiatement tout secret exposé.

Organisation API

Le script appelle GET /api/v2/organization, récupère le taxIdentifier et l'utilise comme MessageSenderIdentifier.

export FATOORA_CLIENT_ID="ak_live_xxx"
export FATOORA_CLIENT_SECRET="votre-secret"

./fatoora-full-workflow.sh \
--mode organization \
--client-id "$FATOORA_CLIENT_ID" \
--client-secret "$FATOORA_CLIENT_SECRET" \
--format json \
--generate-invoice \
--invoice-number "TEST-$(date +%s)" \
--buyer-tax-id 7654321RAM000 \
--buyer-name "Client Test" \
--item-description "Prestation de test" \
--quantity 1 \
--unit-price 100 \
--vat-rate 19 \
--signature-type seal \
--base-url https://business.sandbox.fatoora.tn

Partner API

Le script obtient d'abord un token app-only, découvre les organisations autorisées, puis demande un token limité au client choisi. Lorsqu'il existe plusieurs clients, la sélection doit être explicite.

./fatoora-full-workflow.sh \
--mode partner \
--client-id "$FATOORA_PARTNER_CLIENT_ID" \
--client-secret "$FATOORA_PARTNER_CLIENT_SECRET" \
--org-tax-id 1234567RAM000 \
--format json \
--generate-invoice \
--invoice-number "PARTNER-$(date +%s)" \
--buyer-tax-id 7654321RAM000 \
--buyer-name "Client Test" \
--item-description "Prestation de test" \
--quantity 1 \
--unit-price 100 \
--vat-rate 19 \
--signature-type seal

Utilisez --org-id UUID, --org-tax-id MATRICULE ou --interactive. La sélection automatique n'est autorisée que lorsqu'une seule organisation a donné son accord.

Utiliser une facture existante

./fatoora-full-workflow.sh \
--mode organization \
--client-id "$FATOORA_CLIENT_ID" \
--client-secret "$FATOORA_CLIENT_SECRET" \
--format xml \
--invoice-file ./facture.xml \
--signature-type seal

Pour un fichier JSON ou XML existant, le script vérifie que MessageSenderIdentifier correspond au taxIdentifier de l'organisation authentifiée. Il s'arrête avant la soumission en cas d'écart.

Résultat attendu

Le script attend le statut terminal COMPLETED, confirme ACCEPTED_TTN, puis écrit dans ./fatoora-output :

  • <invoice-id>.xml : document TEIF signé ;
  • <invoice-id>.pdf : représentation PDF de la facture.

Options utiles :

  • --output-dir CHEMIN : dossier de sortie ;
  • --poll-interval SECONDES : fréquence du polling ;
  • --poll-timeout SECONDES : délai maximal ;
  • --debug : diagnostics avec secrets et bearer tokens masqués ;
  • --insecure : désactive TLS, uniquement pour un environnement local maîtrisé.

Limites et dépannage

  • Le workflow automatique prend uniquement en charge SEAL. DigiGO exige une interaction utilisateur OAuth/OTP.
  • PARTNER_NOT_REGISTERED : utilisez une facture générée par le script avec une adresse complète, ou créez d'abord le client dans Fatoora.
  • SENDER_MATRICULE_MISMATCH : le vendeur du fichier ne correspond pas à l'organisation authentifiée.
  • NO_SIGNATURE_CREDITS : le quota ou les crédits de signature sont épuisés.
  • TTN_REJECTED ou VALIDATION_FAILED : consultez le statut et les logs du job dans Fatoora.