Invoice Platform
Une boîte de réception pour les factures d'entreprise, qui centralise les documents, en extrait les informations et prépare l'export mensuel du comptable.
J’ai construit Invoice Platform pour supprimer une tâche mensuelle répétitive : retrouver chaque facture, vérifier ses informations et préparer les fichiers destinés au comptable.
Les factures arrivent rarement au même endroit. Certaines sont jointes à un email, d’autres téléchargées en PDF ou photographiées avec un téléphone. La plateforme les rassemble dans une seule liste, lit les champs utiles et laisse les valeurs incertaines visibles plutôt que de deviner en silence.
Le cycle mensuel
- Connecter Gmail, importer un PDF ou une image, ou envoyer le document via Telegram.
- Extraire le fournisseur, la date, le numéro de facture, les montants, la TVA et la devise avec de l’OCR et un modèle de langage.
- Garder les champs manquants ou peu fiables dans la file de vérification jusqu’à leur validation.
- Choisir une période et exporter les fichiers d’origine dans un ZIP, un récapitulatif Excel ou un fichier Excel contenant des liens sécurisés.
La plateforme fonctionne aussi en équipe. Le propriétaire peut inviter ses collègues ou son comptable, attribuer des rôles et retrouver les actions sensibles dans le journal d’audit.
En dehors du tableau de bord
Le bot Telegram constitue un autre point d’entrée, pas un parcours séparé. Il accepte les photos et les fichiers, répond aux questions sur les factures enregistrées et envoie des rappels programmés. Un serveur MCP expose les mêmes actions à Claude et aux autres clients compatibles : lister, importer, valider et exporter les factures, avec un accès limité à l’entreprise.
Sous le capot
Le projet est un monorepo Turborepo exécuté avec Bun. Une application Next.js 15 sert l’interface et l’API, un worker BullMQ traite les documents et les exports, et deux services distincts font tourner l’agent Telegram et le serveur MCP. Les données sont stockées dans PostgreSQL avec Prisma, Redis gère les files de tâches et les documents privés sont conservés dans Cloudflare R2 derrière des liens signés à durée limitée.
Le point le plus important
La décision la plus difficile n’a pas été d’extraire un champ supplémentaire, mais de savoir quand ne pas faire confiance au résultat. Un montant faux présenté avec assurance est pire qu’un champ vide. Tout le pipeline repose donc sur un passage clair de l’automatisation à la vérification humaine.