Skip to content

feat(integrations): add Pennylane transaction fetcher - #63

Open
Gauthier-Huguenin wants to merge 1 commit into
romainsimon:masterfrom
Gauthier-Huguenin:feat/pennylane-transactions
Open

feat(integrations): add Pennylane transaction fetcher#63
Gauthier-Huguenin wants to merge 1 commit into
romainsimon:masterfrom
Gauthier-Huguenin:feat/pennylane-transactions

Conversation

@Gauthier-Huguenin

Copy link
Copy Markdown

Résumé

Ajoute une intégration Pennylane autonome sur le modèle explicitement retenu par le mainteneur dans l'issue #18 : un script Node fin et indépendamment révisable qui normalise les transactions vers le format partagé de Paperasse, sans introduire de framework central.

Closes part of #18.

Fonctionnement

  • lit les transactions via l'API Company v2 GET /transactions ;
  • utilise uniquement le scope minimal transactions:readonly ;
  • suit la pagination opaque next_cursor et détecte les curseurs absents ou répétés ;
  • accepte des bornes --start et --end validées ;
  • normalise montant et frais dans la devise d'origine, avec contre-valeurs EUR ;
  • écrit data/transactions/pennylane.json ;
  • ne déclenche aucun appel Pennylane depuis npm run fetch : l'accès reste explicite via npm run fetch:pennylane ;
  • n'effectue aucune mutation distante.

Configuration

"pennylane": {
  "enabled": true
}
export PENNYLANE_API_TOKEN="..."
npm run fetch:pennylane

Le token n'est jamais placé dans l'URL ou dans les fichiers générés. Les données réelles sous data/transactions/ restent ignorées par Git.

Validation

  • node --test integrations/pennylane/fetch.test.js : 9 tests passés ;
  • pagination multi-page, curseur manquant/répété, filtres de dates, absence de token dans l'URL ;
  • normalisation des montants et frais en devise et en EUR ;
  • configuration enabled=false et écriture JSON ;
  • fixtures entièrement fictives ;
  • vérification de l'endpoint, des scopes, champs et règles de pagination contre la documentation officielle Pennylane Company API v2 ;
  • git diff --check propre.

Périmètre volontaire

Cette PR suit la direction donnée par le mainteneur le 7 juillet 2026 dans #18 : des scripts fetch.js autonomes plutôt qu'une migration de Qonto et Stripe vers une interface centralisée. Elle ne crée ni facture, ni fournisseur, ni écriture comptable dans Pennylane.

@romainsimon romainsimon left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Merci pour cette intégration. L’approche — script Node autonome normalisant les transactions — est cohérente avec les connecteurs existants du repo. J’ai exécuté node integrations/pennylane/fetch.test.js : les 9 tests passent.

J’ai aussi vérifié l’API officielle : endpoint /api/external/v2/transactions, scope transactions:readonly, pagination par curseur, limite 1–100 et authentification Bearer correspondent bien à la documentation Pennylane : https://pennylane.readme.io/reference/gettransactions

Avant merge, il reste trois ajustements :

  1. Documenter que la création d’un token API nécessite actuellement une offre Essential ou supérieure ainsi qu’un rôle autorisé. Sans cela, la documentation laisse penser que le connecteur est disponible pour tous les comptes.
  2. Rendre la règle d’activation cohérente avec l’exemple. Le README demande enabled: true, mais le code exécute le connecteur dès lors que la valeur n’est pas explicitement false. Soit rendre l’activation opt-in, soit documenter clairement ce comportement.
  3. Signaler que raw: tx conserve le payload complet — comptes, tiers, factures rapprochées et URLs éventuelles — dans le fichier local. Le répertoire est bien ignoré par Git, mais la sensibilité de ces données doit être explicite.

Après ces corrections documentaires/configuration et un check CI exécutant réellement les 9 tests, cette PR pourra être mergée. Aucun contenu publicitaire problématique détecté.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants