{"id":48547815,"url":"https://github.com/kyr0/easy-erechnung","last_synced_at":"2026-04-08T07:30:55.726Z","repository":{"id":333771015,"uuid":"915459940","full_name":"kyr0/easy-erechnung","owner":"kyr0","description":"Java-App for creating and validating Factur-X / ZuGFeRD / X-Rechnung invoices conforming with EU-Norm EN 16931.","archived":false,"fork":false,"pushed_at":"2026-03-26T18:58:49.000Z","size":3209,"stargazers_count":5,"open_issues_count":10,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-03-30T07:32:16.146Z","etag":null,"topics":["e-rechnung","en16931","factur-x","java","x-rechnung","zugferd","zugferd-pdf"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kyr0.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-01-11T22:32:44.000Z","updated_at":"2026-03-27T13:02:51.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kyr0/easy-erechnung","commit_stats":null,"previous_names":["kyr0/easy-erechnung"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kyr0/easy-erechnung","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyr0%2Feasy-erechnung","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyr0%2Feasy-erechnung/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyr0%2Feasy-erechnung/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyr0%2Feasy-erechnung/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kyr0","download_url":"https://codeload.github.com/kyr0/easy-erechnung/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyr0%2Feasy-erechnung/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31545904,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"online","status_checked_at":"2026-04-08T02:00:06.127Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["e-rechnung","en16931","factur-x","java","x-rechnung","zugferd","zugferd-pdf"],"created_at":"2026-04-08T07:30:54.913Z","updated_at":"2026-04-08T07:30:55.714Z","avatar_url":"https://github.com/kyr0.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🧾 easy-e-rechnung\n\n**Java-App for creating and validating Factur-X / ZuGFeRD / X-Rechnung invoices conforming with EU-Norm EN 16931.**\n\n---\n\n## ✨ Key Features\n\n| Feature | Description |\n|---------|-------------|\n| 🇪🇺 **EU Compliant** | Generates invoices conforming to **EN 16931**, accepted across all EU member states. |\n| 🔒 **100% Offline \u0026 Private** | All processing happens locally on your machine. Your invoice data never leaves your computer. |\n| 🤖 **LocalAI-Powered OCR** | Uses local, open-weight AI models for automatic, high-quality text extraction from PDF invoices. |\n| 📄 **Multi-Page Support** | Processes multi-page PDF invoices — each page is OCR'd separately, then semantically merged by the LLM into a single structured result. |\n| 🧠 **Works with Ollama** | Integrates with Ollama for local LLM inference. Default models: `glm-ocr:q8_0` (OCR) and `qwen3:4b-q8_0` (JSON extraction). |\n| 💻 **Cross-Platform** | Runs on **macOS**, **Linux**, and **Windows**. (macOS and Linux are the primary tested platforms.) |\n\n## 🚀 Setup\n\n```bash\n# Install tooling and dependencies\nbash setup.sh\n```\n\n## 🧾 Usage\n\nUsers usually interact with the app via the GUI:\n\n```bash\n# Start the App (Java)\n./start.sh\n```\n\n## 🧑‍💻 Calling the OCR pipeline via Shell\n\nYou can also run the OCR pipeline directly via shell:\n\n```bash\n# Single-page PDF\nbun run src/ocr.ts --input demo/verify.pdf --output /tmp/result.json \\\n  --seller-address \"Friedrich-Damm-Str. 8, 80999 München\" \\\n  --seller-tax-no \"147/214/00001\"\n\n# Multi-page PDF with custom models\nbun run src/ocr.ts --input demo/verify_multipage.pdf --output /tmp/result.json \\\n  --seller-address \"Friedrich-Damm-Str. 8, 80999 München\" \\\n  --seller-tax-no \"147/214/00001\" \\\n  --ocr-model glm-ocr:q8_0 --json-model qwen3:4b-q8_0\n```\n\n### OCR Pipeline Architecture\n\n1. **PDF → Images** — Each page is rendered as a high-resolution image.\n2. **Image Preprocessing** — Contrast boost, normalization, and resize to max 3MP.\n3. **OCR per Page** — Vision model (`glm-ocr:q8_0`) extracts text as markdown.\n4. **Date Preprocessing** — Date ranges in the OCR text are annotated with day counts (e.g. `DAYS: 31`) to help the LLM correctly set quantities for time-based line items.\n5. **JSON Extraction** — All page markdowns are combined and sent in a single LLM call (`qwen3:4b-q8_0`) to produce a structured ZUGFeRD-compatible JSON.\n\n---\n\n## 📸 How It Works\n\n### Step 1: Drag \u0026 Drop Your Invoice PDF\n\nSimply drag and drop a PDF invoice into the app. Multi-page PDFs are displayed with tabs on the left side. The AI-powered OCR will automatically extract the text from each page.\n\n![OCR Detection](docs/easy_erechnung_app_ocr_detection.png)\n\n---\n\n### Step 2: AI Post-Processing\n\nThe local AI model analyzes the OCR output and intelligently extracts all relevant invoice data. Progress is shown in real-time with per-page OCR status tabs and a JSON extraction log.\n\n![AI OCR Post-Processing](docs/easy_erechnung_app_ai_ocr_post.png)\n\n---\n\n### Step 3: Review Invoice Positions\n\nReview and edit the extracted line items. The app calculates totals automatically.\n\n![Invoice Positions](docs/easy_erechnung_app_positions.png)\n\n---\n\n### Step 4: Review Taxes \u0026 Totals\n\nVerify the tax calculations and monetary summations.\n\n![Taxes and Totals](docs/easy_erechnung_app_taxes.png)\n\n---\n\n### Step 5: Create the e-Invoice\n\nClick to generate the ZuGFeRD/Factur-X compliant PDF with embedded XML.\n\n![Create e-Invoice](docs/easy_erechnung_app_factur-x_zugferd_create.png)\n\n---\n\n### Step 6: Invoice Created Successfully\n\nThe app confirms successful creation and automatically opens the ELSTER e-Rechnung portal for official validation.\n\n![Success](docs/easy_erechnung_app_successful_creation.png)\n\n---\n\n### Step 7: View the Final Output\n\nYour new e-Invoice is ready.\n\n![Done](docs/easy_erechnung_app_done.png)\n\n---\n\n## ✅ Validated by Official Tools\n\n### ELSTER (German Tax Authority)\n\n![Validated by ELSTER](docs/elster_validated.png)\n\n### Other Validators\n\n![Validated by Winball](docs/winball_validated.png)\n\n---\n\n## 📁 Demo Data\n\nThe `demo/` folder contains sample invoice data for testing and demonstration purposes.\n\n---\n\n## 📜 License\n\nMIT, Open Source.\n\n---\n\n## 🛡️ Privacy Promise\n\n- **No network requests.** All AI inference runs locally.\n- **No telemetry.** Your data stays on your device.\n- **Open Source.** Audit the code yourself.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkyr0%2Feasy-erechnung","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkyr0%2Feasy-erechnung","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkyr0%2Feasy-erechnung/lists"}