EquipeBaie Invoice Automation
Project description
Equipe Baie — Invoice Automation
Automated invoicing pipeline that parses PDF invoices, enriches them with client accounting references, and generates Excel accounting exports — with a desktop UI for day-to-day operation.
Project structure
EquipeBaie_Freelance-project/
├── src/
│ ├── ebia/ # Core library (published to PyPI)
│ │ ├── parser.py # PDF invoice parser
│ │ ├── xls_generator.py # Excel (.xlsx) generator
│ │ └── cli.py # CLI entry point
│ └── ebia_ui/ # Desktop application (not on PyPI)
│ ├── core/
│ │ ├── config_manager.py # Persistent JSON config
│ │ ├── client_manager.py # Client reference registry
│ │ ├── engine.py # Orchestration layer (RunEngine)
│ │ └── manifest.py # Processed-file tracking (SHA-256)
│ ├── ui/
│ │ ├── main_window.py
│ │ ├── components/ # Reusable widgets, sidebar
│ │ └── views/ # Run, Config, Client, About pages
│ ├── assets/ # logo.png, logo.ico
│ ├── logging_config.py # App-wide logging setup
│ └── main.py # Application entry point
├── tests/
│ ├── unit/ # Pure-function tests, no I/O
│ ├── integration/ # Real PDF/Excel tests
│ └── e2e/ # CLI subprocess tests
├── scripts/
│ └── build_exe.py # PyInstaller Windows exe build
├── reports/ # Generated .xlsx files (git-ignored)
│ └── processed.json # Manifest of already-processed PDFs
└── pyproject.toml
Components
ebia — core library
Stateless, no side effects. Can be used standalone via CLI or imported directly.
parser.py— extractsClient,date,total_ttcfrom a French-format PDF invoice usingpdfplumberxls_generator.py— generates one.xlsxper month with one sheet per day; 3 accounting rows per invoice (411 / 44571 / 701)
ebia_ui — desktop application
Built with customtkinter. Requires Python + display (not headless).
- Run view — manual trigger + recurring scheduler (daily / weekly / monthly)
- Config view — VAT rate, working folder path, document ID start
- Client view — client reference registry (accounting code ↔ client name)
- Manifest — SHA-256 based deduplication: already-processed PDFs are skipped on subsequent runs; only recorded after successful Excel generation
Installation
Library only (CLI usage)
pip install ebia
Development (library + UI + tests)
git clone https://github.com/Alamajdoub9/EquipeBaie_Freelance-project.git
cd EquipeBaie_Freelance-project
python -m venv .venv
source .venv/bin/activate # Linux / macOS
# .venv\Scripts\Activate.ps1 # Windows PowerShell
pip install -e ".[dev,app]"
Running the application
ebia-ui
# or
python -m ebia_ui.main
Configuration and client data are stored in ~/.equipe_baie/.
Generated Excel files are written to reports/ at the project root.
CLI usage (library only)
# Parse a single PDF and print extracted fields
ebia --path facture.pdf
# Generate Excel from a folder of PDFs
ebia --path ./invoices --out ./output/result.xlsx --start-piece 1 --start-document 1
Running tests
# All tests
pytest
# By level
pytest -m unit
pytest -m integration
pytest -m e2e
# With coverage
pytest --cov=src/ebia --cov=src/ebia_ui/core --cov-report=term-missing
Test matrix:
| Suite | What it covers |
|---|---|
unit/test_parser.py |
PDF field extraction logic |
unit/test_generator.py |
Excel row generation and formatting |
unit/test_manifest.py |
SHA-256 manifest: load, save, deduplication |
unit/test_ebia_ui_core.py |
ConfigManager, ClientManager, RunEngine error paths |
integration/test_engine.py |
Full pipeline: PDFs → parse → enrich → xlsx |
integration/test_generator_xlsx.py |
Multi-month/multi-day workbook structure |
integration/test_parser_pdf.py |
Real PDF corpus parsing |
e2e/test_cli.py |
CLI invoked as subprocess |
Delivery
The project has two independent deliverables:
1. ebia PyPI package
Published automatically on every release via release.yml:
# Trigger from GitHub Actions UI
# → tags the commit, builds the wheel, publishes to PyPI, creates GitHub Release
The ebia_ui package is excluded from the PyPI wheel (internal app, not a public library).
2. Windows desktop application (.exe)
Built via PyInstaller on a Windows runner:
python scripts/build_exe.py
# produces: dist/EquipeBaie.exe
The .exe is attached to the GitHub Release alongside the wheel. Users on Windows can run it with no Python installation required.
Linux / macOS: run from source with
ebia-ui(see above). The system tray / background scheduler feature is planned for a future release.
Application data locations
| Data | Location |
|---|---|
| Config (VAT rate, folder path, etc.) | ~/.equipe_baie/config.json |
| Client reference registry | ~/.equipe_baie/clients.json |
| Processed-file manifest | ~/.equipe_baie/processed.json |
| Application logs | ~/.equipe_baie/logs/ebia.log (5 MB × 3 rotating backups) |
| Generated Excel files | ~/Documents/Equipe_Baie/Rapports/ (Windows & Linux) |
Requirements
- Python >= 3.10
- Library deps:
pdfplumber,openpyxl - UI extra deps:
customtkinter >= 5.2.0,Pillow >= 10.0.0 - Dev deps:
pytest,pytest-cov,pytest-mock,ruff,mypy
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ebia-0.2.0-py3-none-any.whl.
File metadata
- Download URL: ebia-0.2.0-py3-none-any.whl
- Upload date:
- Size: 10.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac8a38f717a322cd498a54f48605e331a4c8a6d0b5bc2a7bf0ce047e10fb737c
|
|
| MD5 |
7071dcd46b95c161444eae40b7aefd54
|
|
| BLAKE2b-256 |
57dab382581df5289c8b128d604307eaf19fbba77a44354dcda585047ef41cdb
|