{{ message }}
Repository navigation
Découpe d'un ticket de caisse article par article vers Tricount - #1
Merged
Merged
Conversation
Application complète : API FastAPI + interface une-page (PWA). - main.py : connexion à un Tricount via son lien de partage, création d'une dépense en custom split (perso + part égale du commun), re-découpe d'une dépense existante en conservant sa photo, proxy des pièces jointes. - receipt_parser.py : lecture des exports PDF/CSV des applis d'enseigne (E.Leclerc + générique) en pur Python, sans OCR ni IA. - receipt_ocr.py : repli OCR local (EasyOCR) pour les tickets photo, validé contre le total imprimé. - frontend/ : interface complète sans build ni framework, installable en PWA. - demo/demo_server.py : mode démo hors ligne avec un Tricount fictif, et samples/ticket_demo.csv pour dérouler le parcours. - docs/images : captures issues du mode démo (données fictives). Aucun secret dans le dépôt : .env et credentials.json restent locaux. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015qZ1PYFqwtmybDMB3XzDXL
Neyroe
added a commit
that referenced
this pull request
Sep 7, 2026
La fusion de la PR #1 avait été enregistrée avant l'intégration de la PR #2 dans sa branche ; ce merge amène le support Windows sur main. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015qZ1PYFqwtmybDMB3XzDXL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Pourquoi
Tricount partage une dépense uniformément (ou en parts fixes). Dans des courses à plusieurs,
la moitié d'un ticket est commune — pâtes, lessive, papier toilette — et l'autre moitié est
personnelle. Recopier 40 lignes à la main dans l'appli, personne ne le fait : on finit par tout
mettre en commun, et les comptes sont faux.
Cette PR apporte l'application complète qui fait ce découpage en une minute.
Le principe, en 4 temps
1. Connexion au Tricount — via son lien de partage. L'API (non publique) de Tricount/bunq est
utilisée avec une paire de clés RSA générée localement au premier lancement et stockée dans
credentials.json, exclu du dépôt. Pas de compte à créer, pas de mot de passe.2. Lecture du ticket, sans IA — les applis d'enseigne (Mon E.Leclerc & co) exportent des PDF
avec une vraie couche texte.
receipt_parser.pyla lit avecpdfplumber+ regex : pas d'OCR,pas d'appel à un modèle, pas d'octet qui sort de la machine. Pour les enseignes sans export
(Lidl…),
receipt_ocr.pyfait un OCR local (EasyOCR), valide la somme des lignes contre letotal imprimé et signale toujours le résultat comme à vérifier.
3. Répartition — chaque ligne est
Communpar défaut ; un clic la bascule sur une personne.Les totaux par personne se recalculent en direct, rayon par rayon.
4. Écriture dans Tricount — une seule dépense est créée avec un custom split où chacun doit
ses articles perso + sa part égale du commun. Les arrondis sont absorbés par le dernier membrepour que la somme des parts tombe exactement sur le total du ticket. Les dépenses déjà
existantes peuvent aussi être re-découpées après coup, en conservant la photo attachée.
Captures
Vue d'ensemble du Tricount — soldes et dernières dépenses :
Import du ticket (PDF, CSV ou photo), ou reprise d'une photo déjà dans le Tricount :
Répartition article par article —
C= commun, ou une initiale pour l'attribuer à quelqu'un.Le bandeau du haut suit les totaux en direct :
Confirmation : le détail de ce que chacun doit, perso + part du commun.
Essayer sans Tricount
pip install -r requirements.txt python demo/demo_server.py # http://localhost:8010Le serveur de démo sert la vraie interface avec un Tricount fictif en mémoire et zéro appel
réseau ; le parsing, lui, est le vrai code — déposez
samples/ticket_demo.csvdans l'écrand'import pour dérouler tout le parcours.
Contenu
main.pyreceipt_parser.pyreceipt_ocr.pyfrontend/index.htmldemo/demo_server.pyapp.pyVie privée / secrets
.env(lien de partage du Tricount) etcredentials.json(clés de l'appareil) sont dessecrets et restent locaux :
.gitignoreles exclut, seul.env.exampleest versionné.Un lien de partage suffit à accéder à un Tricount entier.
l'échantillon fictif
samples/ticket_demo.csv.🤖 Generated with Claude Code
https://claude.ai/code/session_015qZ1PYFqwtmybDMB3XzDXL