Webová aplikace pro zpracování faktur v prohlížeči. Uživatel nahraje PDF nebo tabulku, zkontroluje vyčtená data a zařadí import do ABRA Flexi.
- přihlášení, admin účet a správa uživatelů,
- nahrávání PDF a CSV/XLSX/XML souborů,
- extrakce fakturačních údajů z PDF přes OpenAI,
- ruční kontrola a úprava řádků před importem,
- fronta pro PDF extrakci a ABRA import,
- historie dávek se stránkováním, filtrováním a opakovaným importem,
- per-user nastavení pro OpenAI, ABRA a kontext firmy,
- SQLite pro lokální vývoj, PostgreSQL pro produkci.
EasyFlex/ Sdílené doménové jádro: extrakce, CSV/XML/XLSX parsing, ABRA mapping.
webapp/ Flask web, databázové modely, autentizace, templates, worker.
scripts/ Provozní a self-hosting pomocné skripty.
tests/ Pytest testy pro doménovou logiku a webovou vrstvu.
assets/ Statické assety používané aplikací.
Požadavky: Python 3.11 nebo 3.12, Poppler (pdftoppm) pro PDF extrakci.
python3 -m venv .venv
source .venv/bin/activate
pip install -r webapp/requirements.txtVytvořte .env nebo nastavte proměnné prostředí:
EASYFLEX_SECRET_KEY=change-me
EASYFLEX_ADMIN_PASSWORD=change-me
# DATABASE_URL=postgresql://user:password@host:5432/dbnameInicializace admin účtu:
python -m webapp.create_adminSpuštění webu:
python -m webapp.appSpuštění workeru v druhém terminálu:
python -m webapp.workerAplikace běží na http://127.0.0.1:5000/. Po přihlášení nastavte OpenAI a ABRA přístupy na /settings.
Základní proměnné:
EASYFLEX_ENV=productionv produkci vynutí bezpečnější start,EASYFLEX_SECRET_KEYje povinný v produkci,EASYFLEX_ADMIN_PASSWORDvytvoří nebo aktualizuje admin účet,DATABASE_URLpřepne aplikaci ze SQLite na PostgreSQL,MAX_CONTENT_LENGTH,MAX_PDF_FILES_PER_BATCH,MAX_PDF_FILE_BYTES,MAX_BATCH_TOTAL_BYTES,MAX_BATCH_TOTAL_PAGESaMAX_TABLE_FILE_BYTESřídí upload limity.
Citlivé OpenAI a ABRA přístupy se běžně nastavují v aplikaci na /settings a ukládají se do databáze k danému uživateli.
python -m pytest -q
pip install ruff
python -m ruff check . --exclude .venvProdukční běh vyžaduje web proces i worker proces. Procfile, Dockerfile a docker-compose.yml už obsahují obě části.
gunicorn "webapp.app:app" --timeout 180 --graceful-timeout 30 --workers 2
python -m webapp.workerPro produkci používejte PostgreSQL přes DATABASE_URL. SQLite ponechte pro lokální vývoj nebo velmi malý provoz.
Detailní self-hosting postup je v SELFHOSTING.md.