init: extract eli-erechnung-coach from qognio-bot-widget-template@d2c816f
Source files (src/) and rendered bundle (www/) extracted on 2026-04-29T01:35:47+02:00. Adds nginx:alpine Dockerfile + docker-compose.yml (Caddy-labels) so the bot runs stand-alone or as a per-customer template clone. Parent monorepo commit: d2c816f3edbc9760802a11b29ff4151c7aad4b46 Bot version: 2026-04-25
This commit is contained in:
commit
8cacb99a3f
16 changed files with 3982 additions and 0 deletions
7
.dockerignore
Normal file
7
.dockerignore
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
README.md
|
||||||
|
bot.json
|
||||||
|
src/
|
||||||
|
docker-compose.yml
|
||||||
|
*.md
|
||||||
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
.DS_Store
|
||||||
|
*.log
|
||||||
|
*.tmp
|
||||||
|
node_modules/
|
||||||
13
Dockerfile
Normal file
13
Dockerfile
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
# Static-bundle bot — nginx:alpine serves www/ on port 80.
|
||||||
|
FROM nginx:1.27-alpine
|
||||||
|
|
||||||
|
# nginx config: gzip + cache headers + index.html no-store
|
||||||
|
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||||
|
|
||||||
|
# Static bundle
|
||||||
|
COPY www/ /usr/share/nginx/html/
|
||||||
|
|
||||||
|
# Run as non-root via nginx's built-in unprivileged image features
|
||||||
|
EXPOSE 80
|
||||||
|
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
||||||
|
CMD wget -q --spider http://127.0.0.1/index.html || exit 1
|
||||||
67
README.md
Normal file
67
README.md
Normal file
|
|
@ -0,0 +1,67 @@
|
||||||
|
# Eli — E-Rechnungs-Navigator
|
||||||
|
|
||||||
|
Eli — der E-Rechnungs-Navigator für KMU. XRechnung & ZUGFeRD verstehen, Empfangs- und Versandpflicht, Aufbewahrung. Im deutschen Bunker.
|
||||||
|
|
||||||
|
```
|
||||||
|
slug : eli-erechnung-coach
|
||||||
|
version : 2026-04-25
|
||||||
|
accent : #1d4ed8
|
||||||
|
runtime : nginx:alpine (static bundle)
|
||||||
|
template : qognio-bot-template-core (former qognio-bot-widget-template)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Layout
|
||||||
|
|
||||||
|
```
|
||||||
|
.
|
||||||
|
├── src/ source — config.yaml, welcome.html, curricula.json, etc.
|
||||||
|
├── www/ rendered, directly servable static bundle
|
||||||
|
├── Dockerfile nginx:alpine + www/ → port 80
|
||||||
|
├── docker-compose.yml bot-host pattern (Caddy-labels, restart unless-stopped)
|
||||||
|
├── nginx.conf gzip + cache + SPA fallback
|
||||||
|
└── bot.json metadata + parent_core_commit
|
||||||
|
```
|
||||||
|
|
||||||
|
## Run locally
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose up --build
|
||||||
|
# → http://localhost (you'll need to tweak ports for local-only use)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Re-render after upstream core changes
|
||||||
|
|
||||||
|
This repo only stores src + rendered output; the rendering engine lives in
|
||||||
|
`qognio-bot-template-core`. To pull in core changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /path/to/qognio-bot-template-core
|
||||||
|
./scripts/render.sh eli-erechnung-coach --bot-repo /path/to/this/repo
|
||||||
|
git -C /path/to/this/repo commit -am "render: refresh from core@<sha>"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Per-customer copy (template usage)
|
||||||
|
|
||||||
|
This repo is a **template**. To clone for a customer:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone <this-repo> my-customer-eli-erechnung-coach
|
||||||
|
cd my-customer-eli-erechnung-coach
|
||||||
|
# tweak src/config.yaml (slug, bot_key_value, accent), src/welcome.html, src/curricula.json
|
||||||
|
docker compose -f docker-compose.yml up --build
|
||||||
|
```
|
||||||
|
|
||||||
|
## Deploy to qognio bot-host (.42 LXC pattern — legacy)
|
||||||
|
|
||||||
|
The bot-manager spawns LXC containers named after the slug. Push www/ via:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh fmh@46.243.203.42
|
||||||
|
sudo lxc file push /tmp/www/* eli-erechnung-coach/var/www/html/
|
||||||
|
```
|
||||||
|
|
||||||
|
(Or run the docker-compose pattern on a Docker host — same network as Caddy.)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Generated by `qognio-bot-template-core/scripts/extract-to-repo.sh` on 2026-04-29T01:35:47+02:00.
|
||||||
14
bot.json
Normal file
14
bot.json
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"slug": "eli-erechnung-coach",
|
||||||
|
"name": "Eli",
|
||||||
|
"title": "E-Rechnungs-Navigator",
|
||||||
|
"tagline": "E-Rechnung",
|
||||||
|
"description": "Eli — der E-Rechnungs-Navigator für KMU. XRechnung & ZUGFeRD verstehen, Empfangs- und Versandpflicht, Aufbewahrung. Im deutschen Bunker.",
|
||||||
|
"version": "2026-04-25",
|
||||||
|
"accent": "#1d4ed8",
|
||||||
|
"extracted_from": "qognio-bot-widget-template",
|
||||||
|
"parent_core_commit": "d2c816f3edbc9760802a11b29ff4151c7aad4b46",
|
||||||
|
"extracted_at": "2026-04-29T01:35:47+02:00",
|
||||||
|
"runtime": "nginx:alpine",
|
||||||
|
"default_port": 80
|
||||||
|
}
|
||||||
20
docker-compose.yml
Normal file
20
docker-compose.yml
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Stand-alone bot container.
|
||||||
|
# Designed for the "caddy" external network on the bot host (qognio pattern).
|
||||||
|
# Override the hostname via SLUG env var if you reuse this template per customer.
|
||||||
|
services:
|
||||||
|
bot:
|
||||||
|
build: .
|
||||||
|
image: qognio/bot-eli-erechnung-coach:${TAG:-latest}
|
||||||
|
container_name: bot-eli-erechnung-coach
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- caddy
|
||||||
|
labels:
|
||||||
|
caddy: "eli-erechnung-coach.on.qognio.com"
|
||||||
|
caddy.reverse_proxy: "{{upstreams 80}}"
|
||||||
|
qognio.bot.slug: "eli-erechnung-coach"
|
||||||
|
qognio.bot.version: "2026-04-25"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
caddy:
|
||||||
|
external: true
|
||||||
27
nginx.conf
Normal file
27
nginx.conf
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name _;
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
index index.html;
|
||||||
|
|
||||||
|
# gzip
|
||||||
|
gzip on;
|
||||||
|
gzip_vary on;
|
||||||
|
gzip_types text/css application/javascript application/json image/svg+xml text/plain;
|
||||||
|
gzip_min_length 512;
|
||||||
|
|
||||||
|
# index.html: never cache (so welcome screen / wiring updates land instantly)
|
||||||
|
location = /index.html {
|
||||||
|
add_header Cache-Control "no-store, must-revalidate" always;
|
||||||
|
}
|
||||||
|
|
||||||
|
# static assets: cache 1h
|
||||||
|
location ~* \.(?:css|js|json|svg|png|jpe?g|webp|gif|ico|woff2?)$ {
|
||||||
|
add_header Cache-Control "public, max-age=3600" always;
|
||||||
|
try_files $uri =404;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
try_files $uri $uri/ /index.html;
|
||||||
|
}
|
||||||
|
}
|
||||||
18
src/check-badges.js
Normal file
18
src/check-badges.js
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
// Erste Validierung — 1 Quiz im Definitions-Modul korrekt
|
||||||
|
if ((state.moduleCorrect && state.moduleCorrect['definition-erechnung'] >= 1)) unlockBadge('erste_validierung');
|
||||||
|
// Paragraphen-Profi — 5 Quiz korrekt im Übergangsregeln-Modul (Rechtsrahmen)
|
||||||
|
if ((state.moduleCorrect && state.moduleCorrect['uebergangsregeln'] >= 5)) unlockBadge('paragraphen_profi');
|
||||||
|
// Format-Kenner — 5 Quiz korrekt zum XRechnung-Deepdive
|
||||||
|
if ((state.moduleCorrect && state.moduleCorrect['xrechnung-deepdive'] >= 5)) unlockBadge('format_kenner');
|
||||||
|
// Validator-Pro — 10 Quiz korrekt im Tools-Validator-Modul
|
||||||
|
if ((state.moduleCorrect && state.moduleCorrect['tools-validator'] >= 10)) unlockBadge('validator_pro');
|
||||||
|
// GoBD-Compliant — 3 Quiz korrekt im GoBD-Fristen-Modul
|
||||||
|
if ((state.moduleCorrect && state.moduleCorrect['gobd-fristen'] >= 3)) unlockBadge('gobd_compliant');
|
||||||
|
// Eli-Meister — 22 von 28 Modulen mit ≥80% Quiz-Score abgeschlossen (~79% Master-Coverage)
|
||||||
|
if ((state.completedCurricula || []).length >= 22) unlockBadge('eli_meister');
|
||||||
|
// Streak 7 — 7 Tage in Folge aktiv
|
||||||
|
if (state.maxStreak >= 7) unlockBadge('streak_7');
|
||||||
|
// Night Owl & Early Bird (beibehalten)
|
||||||
|
const h = new Date().getHours();
|
||||||
|
if (h >= 22) unlockBadge('night_owl');
|
||||||
|
if (h < 7) unlockBadge('early_bird');
|
||||||
33
src/config.yaml
Normal file
33
src/config.yaml
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
slug: eli-erechnung-coach
|
||||||
|
bot_name: Eli
|
||||||
|
bot_title: E-Rechnungs-Navigator
|
||||||
|
brand_letter: E
|
||||||
|
title: "Eli · Dein E-Rechnungs-Navigator"
|
||||||
|
tagline: "Pflicht ab 2025/2027 — Eli macht's verständlich"
|
||||||
|
tagline_short: E-Rechnung
|
||||||
|
meta_description: "Eli — der E-Rechnungs-Navigator für KMU. XRechnung & ZUGFeRD verstehen, Empfangs- und Versandpflicht, Aufbewahrung. Im deutschen Bunker."
|
||||||
|
bot_key_var: __ELI_KEY__
|
||||||
|
bot_key_value: qb_z2x46r4mdb7j
|
||||||
|
ls_prefix: eli
|
||||||
|
bot_version: "2026-04-25"
|
||||||
|
|
||||||
|
# Color theme — warm-blau (Finance/Vertrauen)
|
||||||
|
accent: "#1d4ed8"
|
||||||
|
accent_2: "#3b82f6"
|
||||||
|
accent_dark: "#1e3a8a"
|
||||||
|
accent_rgb: "29, 78, 216"
|
||||||
|
accent_rgb_compact: "29,78,216"
|
||||||
|
success_color: "#22c55e"
|
||||||
|
msg_strong_color: "#bfdbfe"
|
||||||
|
|
||||||
|
# UI Labels
|
||||||
|
tab_flash_label: Karten
|
||||||
|
tab_curriculum_label: Module
|
||||||
|
curriculum_long_label: E-Rechnungs-Atlas
|
||||||
|
|
||||||
|
# Bot-personality strings
|
||||||
|
quiz_intro_hint: "Wähle ein Modul — Eli erstellt Praxis-Fragen aus dem E-Rechnungs-Alltag (Empfang, Versand, Buchhaltung)."
|
||||||
|
quiz_verb: erstellt
|
||||||
|
quiz_noun: "E-Rechnungs-Fragen"
|
||||||
|
flash_intro_hint: "Karteikarten zu XRechnung, ZUGFeRD, Aufbewahrung — Spaced-Repetition."
|
||||||
|
flash_verb: generiert
|
||||||
417
src/curricula.json
Normal file
417
src/curricula.json
Normal file
|
|
@ -0,0 +1,417 @@
|
||||||
|
{
|
||||||
|
"version": "2026-04-25",
|
||||||
|
"updated": "2026-04-25",
|
||||||
|
"curricula": [
|
||||||
|
{
|
||||||
|
"id": "grundlagen",
|
||||||
|
"title": "1 · Grundlagen + Pflichten-Zeitplan",
|
||||||
|
"short": "§14 UStG, EN 16931, Stichtage 2025-2028",
|
||||||
|
"icon": "shield",
|
||||||
|
"color": "#0284c7",
|
||||||
|
"description": "Was ist eine E-Rechnung im Sinne des §14 UStG? Format-Familie XRechnung/ZUGFeRD/Peppol. Wachstumschancengesetz und der Pflichten-Stufenplan 2025/2027/2028. Ausnahmen (Kleinbeträge, B2C, §19).",
|
||||||
|
"source_md": "00-grundlagen-erechnung.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "definition-erechnung",
|
||||||
|
"title": "Was ist eine E-Rechnung wirklich?",
|
||||||
|
"objectives": [
|
||||||
|
"Definition §14 Abs. 1 Satz 3 UStG verstehen",
|
||||||
|
"PDF != E-Rechnung: warum reine PDFs nicht mehr zählen",
|
||||||
|
"Strukturiertes Format + EN 16931 als Kriterium"
|
||||||
|
],
|
||||||
|
"topics": ["§14 UStG", "EN 16931", "strukturiertes Format", "Wachstumschancengesetz"],
|
||||||
|
"difficulty": "einfach",
|
||||||
|
"source_heading": "Was ist eine E-Rechnung (im Sinne des §14 UStG ab 2025)?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "format-familie",
|
||||||
|
"title": "Format-Familie im Überblick",
|
||||||
|
"objectives": [
|
||||||
|
"XRechnung 3.0.2 vs ZUGFeRD 2.3 vs Peppol BIS 3.0 unterscheiden",
|
||||||
|
"Wann reine XML / wann Hybrid",
|
||||||
|
"EDIFACT als Sonderfall einordnen"
|
||||||
|
],
|
||||||
|
"topics": ["XRechnung", "ZUGFeRD", "Peppol BIS", "Factur-X", "EDIFACT"],
|
||||||
|
"difficulty": "einfach",
|
||||||
|
"source_heading": "Format-Familie im Überblick"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "stichtage",
|
||||||
|
"title": "Stichtage 2020-2028",
|
||||||
|
"objectives": [
|
||||||
|
"Empfangs-Pflicht ab 01.01.2025 (für ALLE)",
|
||||||
|
"Ausstellungs-Pflicht ab 2027 (>800k) bzw. 2028 (alle)",
|
||||||
|
"B2G seit 27.11.2020 + EU-Richtlinie 18.04.2020"
|
||||||
|
],
|
||||||
|
"topics": ["01.01.2025", "01.01.2027", "01.01.2028", "B2G 2020", "ViDA 2030"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Die wichtigsten Stichtage auf einer Seite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ausnahmen",
|
||||||
|
"title": "Ausnahmen + Sonderfälle",
|
||||||
|
"objectives": [
|
||||||
|
"Kleinbetragsrechnung §33 UStDV (≤ 250 EUR)",
|
||||||
|
"B2C bleibt formfrei",
|
||||||
|
"Steuerfreie Umsätze §4 Nr. 8-29 UStG"
|
||||||
|
],
|
||||||
|
"topics": ["§33 UStDV", "§34 UStDV Fahrausweise", "B2C", "Heilbehandlung §4 Nr. 14"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Welche Umsätze sind ausgenommen?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "kleinunternehmer",
|
||||||
|
"title": "Kleinunternehmer §19 UStG",
|
||||||
|
"objectives": [
|
||||||
|
"Empfangs-Pflicht GILT auch für §19",
|
||||||
|
"Ausstellungs-Erleichterung §34a UStDV verstehen",
|
||||||
|
"Praxis-Setup für Selbstständige (0 EUR)"
|
||||||
|
],
|
||||||
|
"topics": ["§19 UStG", "§34a UStDV", "Empfang vs Ausstellung", "Quba-Viewer"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Stolperstelle 2: \"Kleinunternehmer §19 sind komplett raus\""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rechtsrahmen",
|
||||||
|
"title": "2 · Rechtsrahmen §14/§27 UStG + GoBD",
|
||||||
|
"short": "Paragraphen, Fristen, Bußgelder",
|
||||||
|
"icon": "scale",
|
||||||
|
"color": "#38bdf8",
|
||||||
|
"description": "§14 UStG (Definition + Pflicht), §27 Abs. 38 UStG (Übergangsfristen), §13b UStG (Reverse Charge), GoBD-Aufbewahrung 8 Jahre, BMF-Schreiben 15.10.2024 + 15.10.2025, Bußgeldnormen §26a UStG.",
|
||||||
|
"source_md": "01-rechtsrahmen-14-ustg.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "wachstumschancen",
|
||||||
|
"title": "Wachstumschancengesetz + §14 UStG neu",
|
||||||
|
"objectives": [
|
||||||
|
"Reform 2024 + USt-Lücke als Treiber kennen",
|
||||||
|
"Definition §14 Abs. 1 Satz 3 UStG zitieren",
|
||||||
|
"BMF-Schreiben 15.10.2024 + 15.10.2025 einordnen"
|
||||||
|
],
|
||||||
|
"topics": ["BGBl 2024 I 108", "BMF 15.10.2024", "USt-Lücke 23 Mrd", "ViDA-Vorbereitung"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Wachstumschancengesetz — die zentrale Reform"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "uebergangsregeln",
|
||||||
|
"title": "§27 Abs. 38 UStG Übergangsregeln",
|
||||||
|
"objectives": [
|
||||||
|
"Phase 1 (2025-26): Empfang ja, Ausstellung optional",
|
||||||
|
"Phase 2 (2027): >800k Umsatz = Ausstellungs-Pflicht",
|
||||||
|
"Phase 3 (2028): Vollständige Pflicht alle B2B"
|
||||||
|
],
|
||||||
|
"topics": ["§27 UStG", "800k-Schwelle", "EDI-Frist 2027", "B2B-Inland"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "§27 Abs. 38 UStG — Übergangsregeln (Ausstellung)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "reverse-charge",
|
||||||
|
"title": "§13b UStG Reverse Charge im XML",
|
||||||
|
"objectives": [
|
||||||
|
"Wann §13b greift (Bauleistungen, EU-B2B, Schrott)",
|
||||||
|
"BT-151 VAT category code = AE",
|
||||||
|
"BT-120 Pflicht-Begründungstext"
|
||||||
|
],
|
||||||
|
"topics": ["§13b UStG", "BT-151 AE", "BT-120 Begründung", "Bauleistungen"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "§13b UStG — Steuerschuldumkehr (Reverse Charge)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "b2g-historie",
|
||||||
|
"title": "B2G-Pflicht seit 27.11.2020",
|
||||||
|
"objectives": [
|
||||||
|
"EU-Richtlinie 2014/55/EU als Grundlage",
|
||||||
|
"Bund / Länder / Kommunen abgrenzen",
|
||||||
|
"Leitweg-ID als Pflichtfeld bei B2G"
|
||||||
|
],
|
||||||
|
"topics": ["E-RechVO Bund", "RL 2014/55/EU", "OZG", "ZRE"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "B2G — bereits seit 2020 Pflicht"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "bussgelder",
|
||||||
|
"title": "§26a UStG Bußgelder + Vorsteuer-Risiko",
|
||||||
|
"objectives": [
|
||||||
|
"Bußgeld bis 5.000 EUR pro Vorgang ab 2027/28",
|
||||||
|
"GoBD-Verstoß = Schätzungsbefugnis FA",
|
||||||
|
"Vorsteuerabzug bei mangelhafter E-Rechnung"
|
||||||
|
],
|
||||||
|
"topics": ["§26a UStG", "§158 AO", "Vorsteuer-Versagung", "Schätzung"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Bußgelder bei Verstoß"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "zugferd-xrechnung",
|
||||||
|
"title": "3 · Format-Vergleich (XRechnung/ZUGFeRD/Peppol)",
|
||||||
|
"short": "Profile, BT-Codes, Anatomie eines XML",
|
||||||
|
"icon": "git-compare",
|
||||||
|
"color": "#0369a1",
|
||||||
|
"description": "Tiefer Dive in die Formate. XRechnung 3.0.2 (KoSIT-CIUS, BR-DE-Regeln). ZUGFeRD 2.3 Profile MINIMUM/BASIC-WL/BASIC/EN 16931/EXTENDED/XRECHNUNG. Peppol BIS 3.0 mit 4-Corner-Modell. BT-Code-Pflichten anhand echter XML-Snippets.",
|
||||||
|
"source_md": "03-xrechnung-vs-zugferd.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "xrechnung-deepdive",
|
||||||
|
"title": "XRechnung 3.0.2 Deep-Dive",
|
||||||
|
"objectives": [
|
||||||
|
"KoSIT-CIUS verstehen",
|
||||||
|
"BR-DE-Erweiterungen zur EN 16931",
|
||||||
|
"Pflichtfelder BT-23, BT-34, BT-49 ab 3.0.1"
|
||||||
|
],
|
||||||
|
"topics": ["KoSIT", "CIUS", "BR-DE", "BT-23/34/49", "01.02.2025"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "XRechnung — die behörden-getriebene Schiene"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "zugferd-profile",
|
||||||
|
"title": "ZUGFeRD-Profile + Hybrid-PDF",
|
||||||
|
"objectives": [
|
||||||
|
"MINIMUM/BASIC-WL = KEINE gültige E-Rechnung",
|
||||||
|
"BASIC/EN 16931/EXTENDED = gültig",
|
||||||
|
"Wann XRECHNUNG-Profil sinnvoll"
|
||||||
|
],
|
||||||
|
"topics": ["MINIMUM", "BASIC-WL", "BASIC", "EN 16931", "EXTENDED", "PDF/A-3"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "ZUGFeRD 2.3 — die wirtschafts-getriebene Schiene"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "peppol-deepdive",
|
||||||
|
"title": "Peppol BIS 3.0 + 4-Corner",
|
||||||
|
"objectives": [
|
||||||
|
"4-Corner-Modell verstehen",
|
||||||
|
"Access-Point-Provider auswählen",
|
||||||
|
"Wann Peppol nötig ist (vs E-Mail reicht)"
|
||||||
|
],
|
||||||
|
"topics": ["Peppol BIS 3.0", "4-Corner", "Participant-ID", "MLR", "ViDA 2030"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Peppol BIS Billing 3.0 — die EU-grenzüberschreitende Schiene"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "bt-codes",
|
||||||
|
"title": "BT-Codes (Business Terms EN 16931)",
|
||||||
|
"objectives": [
|
||||||
|
"BT-1 Rechnungsnummer, BT-2 Datum, BT-3 Typ",
|
||||||
|
"BT-10 Buyer reference / Leitweg-ID",
|
||||||
|
"BT-31/48 USt-IdNr, BT-151 VAT category"
|
||||||
|
],
|
||||||
|
"topics": ["BT-1", "BT-3 Code 380/381", "BT-10", "BT-20 Skonto", "BT-151"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Anatomie einer E-Rechnung (Pflicht-Inhalte)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "format-wahl",
|
||||||
|
"title": "Entscheidungs-Matrix Format",
|
||||||
|
"objectives": [
|
||||||
|
"B2G: XRechnung, B2B: ZUGFeRD, EU/Konzern: Peppol",
|
||||||
|
"Misch-Betrieb optimal aufstellen",
|
||||||
|
"Empfänger-Wünsche berücksichtigen"
|
||||||
|
],
|
||||||
|
"topics": ["Format-Wahl", "B2G vs B2B", "Misch-Betrieb"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Entscheidungs-Matrix für die Praxis"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ablehnung",
|
||||||
|
"title": "Wann darf der Empfänger ablehnen?",
|
||||||
|
"objectives": [
|
||||||
|
"Profil MINIMUM/BASIC-WL → ablehnen",
|
||||||
|
"PDF-XML-Diskrepanz → ablehnen",
|
||||||
|
"Korrektur-Workflow Storno + Neu"
|
||||||
|
],
|
||||||
|
"topics": ["Ablehnung", "Validator-Fehler", "Korrektur 381+380"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Wann lehnt der Empfänger eine ZUGFeRD-Rechnung berechtigt ab?"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "validator",
|
||||||
|
"title": "4 · Validator + typische Fehler",
|
||||||
|
"short": "KoSIT-Tools, BR-DE-Codes, Top-15-Fehler",
|
||||||
|
"icon": "alert-triangle",
|
||||||
|
"color": "#0ea5e9",
|
||||||
|
"description": "KoSIT-Validator + Mustang + eDocuPortal als Werkzeuge. Top-15 Validierungs-Fehler in der Praxis: Leitweg-ID, BT-151 VAT-category, BT-20 Skonto-Segment-Format, Beträge-Inkonsistenz, Encoding-Pannen.",
|
||||||
|
"source_md": "04-validator-fehler-typisch.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "tools-validator",
|
||||||
|
"title": "Validator-Tools im Vergleich",
|
||||||
|
"objectives": [
|
||||||
|
"KoSIT-Validator als Referenz",
|
||||||
|
"Mustang-Project + Quba-Viewer als Open Source",
|
||||||
|
"Online-Tools für Quick-Checks"
|
||||||
|
],
|
||||||
|
"topics": ["KoSIT-Validator", "Mustang", "Quba-Viewer", "eDocuPortal"],
|
||||||
|
"difficulty": "einfach",
|
||||||
|
"source_heading": "Welche Validatoren gibt es?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "leitweg-id",
|
||||||
|
"title": "Leitweg-ID (BT-10) korrekt",
|
||||||
|
"objectives": [
|
||||||
|
"Format <Grobadressierung>-<Feinadressierung>-<Prüfziffer>",
|
||||||
|
"Modulo-11-Prüfung",
|
||||||
|
"Häufige Copy-Paste-Fehler"
|
||||||
|
],
|
||||||
|
"topics": ["BT-10", "BR-DE-21", "Modulo-11", "Leitweg-ID-Lookup"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Fehler 1: Fehlende oder falsche Leitweg-ID (BT-10)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vat-category",
|
||||||
|
"title": "VAT category code (BT-151)",
|
||||||
|
"objectives": [
|
||||||
|
"S/AE/K/E/Z/G/O sicher unterscheiden",
|
||||||
|
"BT-120 Begründungspflicht bei AE/K/E/Z",
|
||||||
|
"Kategorie-Konsistenz Position vs Summe"
|
||||||
|
],
|
||||||
|
"topics": ["BT-151", "BT-120", "S Standard", "AE Reverse", "K innerg. Lieferung"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Fehler 2: Falscher VAT category code (BT-151)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "skonto-bt20",
|
||||||
|
"title": "Skonto-Segment-Format (BT-20)",
|
||||||
|
"objectives": [
|
||||||
|
"#SKONTO#TAGE=14#PROZENT=2.00# auswendig",
|
||||||
|
"Multi-Stufen-Skonto korrekt",
|
||||||
|
"Freitext = BR-DE-18-Warning"
|
||||||
|
],
|
||||||
|
"topics": ["BT-20", "BR-DE-18", "Skonto-Segment", "BASISBETRAG"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Fehler 3: Skonto im falschen Format (BT-20)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "betraege-konsistenz",
|
||||||
|
"title": "Betrags-Konsistenz + Rundung",
|
||||||
|
"objectives": [
|
||||||
|
"Kette LineExtensionAmount → Tax → Payable",
|
||||||
|
"Rundungs-Toleranz 0.02 EUR",
|
||||||
|
"Validator rechnet nach"
|
||||||
|
],
|
||||||
|
"topics": ["BT-106", "BT-109", "BT-112", "BT-115", "BR-CO-15"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Fehler 8: Beträge stimmen rechnerisch nicht"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "encoding-format",
|
||||||
|
"title": "Encoding + UN/CEFACT-Codes",
|
||||||
|
"objectives": [
|
||||||
|
"UTF-8 ist Pflicht (kein ANSI/Latin-1)",
|
||||||
|
"Punkt als Dezimal-Trenner (kein Komma)",
|
||||||
|
"C62 für Stück, HUR für Stunden, KGM für kg"
|
||||||
|
],
|
||||||
|
"topics": ["UTF-8", "Dezimal-Punkt", "UN/CEFACT", "C62", "HUR", "KGM"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Fehler 6: Falsche UN/CEFACT-Einheitencode (BT-130)"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "gobd",
|
||||||
|
"title": "5 · GoBD + Tools-Marktübersicht",
|
||||||
|
"short": "Archivierung 8 Jahre, DATEV/sevdesk/Lexware, Open Source",
|
||||||
|
"icon": "archive",
|
||||||
|
"color": "#7dd3fc",
|
||||||
|
"description": "GoBD-Aufbewahrung 8 Jahre, maschinelle Auswertbarkeit, Verfahrensdokumentation. Eingangs- und Ausgangs-Workflows. Tools-Marktübersicht: DATEV Unternehmen Online, Lexware Office, sevdesk, easybill, FastBill, SAP DRC, plus Open Source (Mustang, Quba, Fakturama).",
|
||||||
|
"source_md": "05-prozess-eingangs-rechnung.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "gobd-fristen",
|
||||||
|
"title": "GoBD-Fristen + Aufbewahrungs-Logik",
|
||||||
|
"objectives": [
|
||||||
|
"8 Jahre für Rechnungen ab 01.01.2025",
|
||||||
|
"10 Jahre für Banken/Versicherungen + Buchungsbelege",
|
||||||
|
"Fristbeginn Ablauf des Kalenderjahres"
|
||||||
|
],
|
||||||
|
"topics": ["§147 AO", "§14b UStG", "8-Jahres-Frist", "Fristbeginn"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "GoBD — Aufbewahrungsfristen + maschinelle Auswertbarkeit"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "verfahrensdoku",
|
||||||
|
"title": "Verfahrensdokumentation für KMU",
|
||||||
|
"objectives": [
|
||||||
|
"1-2 Seiten reichen",
|
||||||
|
"Empfangs-Pfad + Verarbeitung + Archivierung beschreiben",
|
||||||
|
"Rollen + Berechtigungen festlegen"
|
||||||
|
],
|
||||||
|
"topics": ["Verfahrensdoku", "Rollen", "Berechtigungen", "Korrektur-Prozess"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "GoBD-Anforderungen für E-Rechnungen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "eingangs-workflow",
|
||||||
|
"title": "Eingangs-Workflow Schritt für Schritt",
|
||||||
|
"objectives": [
|
||||||
|
"Empfang → Format-Erkennung → Validierung → Buchhaltung → Archiv",
|
||||||
|
"ZUGFeRD-PDF + XML zusammen archivieren",
|
||||||
|
"Vorsteuer-Falle bei mangelhafter Rechnung"
|
||||||
|
],
|
||||||
|
"topics": ["Eingangs-Workflow", "Format-Erkennung", "ZUGFeRD-Archiv", "Vorsteuer"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Der Eingangs-Workflow auf einer Seite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ausgangs-workflow",
|
||||||
|
"title": "Ausgangs-Workflow + Versand",
|
||||||
|
"objectives": [
|
||||||
|
"Erstellung → Validation → Versand → Nachweis",
|
||||||
|
"E-Mail vs Peppol vs Portal vergleichen",
|
||||||
|
"Storno+Neu nach §14 UStG"
|
||||||
|
],
|
||||||
|
"topics": ["Ausgangs-Workflow", "Peppol-Versand", "MLR-Quittung", "Storno 381"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Der Ausgangs-Workflow auf einer Seite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "tools-kmu",
|
||||||
|
"title": "Tools-Marktübersicht KMU",
|
||||||
|
"objectives": [
|
||||||
|
"DATEV Unternehmen Online für STB-gebundene KMU",
|
||||||
|
"sevdesk/Lexware/easybill für KMU autonom",
|
||||||
|
"Open-Source-Stack (Mustang + Quba)"
|
||||||
|
],
|
||||||
|
"topics": ["DATEV", "sevdesk", "Lexware Office", "easybill", "Mustang"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "1. Komplett-Suiten (KMU-tauglich)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "stolperstellen-praxis",
|
||||||
|
"title": "Top-Stolperstellen + FAQ",
|
||||||
|
"objectives": [
|
||||||
|
"PDF-mit-XML-Mythos sauber widerlegen",
|
||||||
|
"Korrektur-Workflow ohne GoBD-Verstoß",
|
||||||
|
"Fehlerhafte Eingangs-Rechnung richtig handhaben"
|
||||||
|
],
|
||||||
|
"topics": ["Stolperstellen", "PDF-Mythos", "Korrektur", "Eingangs-Mängel"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Stolperstelle 1: \"Mein PDF mit eingebettetem XML reicht doch?\""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"badges": [
|
||||||
|
{"id": "erste_validierung", "title": "Erste Validierung", "icon": "check-circle", "description": "1. Quiz zu Grundlagen erfolgreich."},
|
||||||
|
{"id": "paragraphen_profi", "title": "Paragraphen-Profi", "icon": "scale", "description": "5 Quiz korrekt zum Rechtsrahmen (§14/§27 UStG)."},
|
||||||
|
{"id": "format_kenner", "title": "Format-Kenner", "icon": "git-compare", "description": "5 Quiz korrekt zum Format-Vergleich (XRechnung/ZUGFeRD/Peppol)."},
|
||||||
|
{"id": "validator_pro", "title": "Validator-Pro", "icon": "alert-triangle", "description": "10 Quiz korrekt zu Validator-Fehlern + BR-DE-Codes."},
|
||||||
|
{"id": "gobd_compliant", "title": "GoBD-Compliant", "icon": "archive", "description": "3 Quiz korrekt zur GoBD-Archivierung."},
|
||||||
|
{"id": "eli_meister", "title": "Eli-Meister", "icon": "crown", "description": "Alle 5 Module mit ≥80% abgeschlossen."},
|
||||||
|
{"id": "streak_7", "title": "Buchhaltungs-Disziplin", "icon": "flame", "description": "7 Tage in Folge aktiv gewesen."},
|
||||||
|
{"id": "night_owl", "title": "Nachteule", "icon": "moon", "description": "Nach 22 Uhr gelernt."},
|
||||||
|
{"id": "early_bird", "title": "Frühaufsteher", "icon": "sun", "description": "Vor 7 Uhr gelernt."}
|
||||||
|
],
|
||||||
|
"levels": [
|
||||||
|
{"min": 0, "title": "Buchhaltungs-Novize"},
|
||||||
|
{"min": 50, "title": "Sachbearbeiter:in"},
|
||||||
|
{"min": 200, "title": "Bilanzbuchhalter:in"},
|
||||||
|
{"min": 500, "title": "Leitung Finanzbuchhaltung"},
|
||||||
|
{"min": 1250, "title": "CFO Mittelstand"},
|
||||||
|
{"min": 2500, "title": "Steuerprofi"},
|
||||||
|
{"min": 5000, "title": "E-Rechnungs-Experte"}
|
||||||
|
]
|
||||||
|
}
|
||||||
4
src/levels-fallback.js
Normal file
4
src/levels-fallback.js
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
{ min: 0, title: 'Buchhaltungs-Novize' }, { min: 50, title: 'Sachbearbeiter:in' },
|
||||||
|
{ min: 200, title: 'Bilanzbuchhalter:in' }, { min: 500, title: 'Leitung Finanzbuchhaltung' },
|
||||||
|
{ min: 1250, title: 'CFO Mittelstand' }, { min: 2500, title: 'Steuerprofi' },
|
||||||
|
{ min: 5000, title: 'E-Rechnungs-Experte' }
|
||||||
29
src/welcome.html
Normal file
29
src/welcome.html
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
<h2>Willkommen bei Eli!</h2>
|
||||||
|
<p>Hi, ich bin Eli. Du musst seit <strong>01.01.2025</strong> E-Rechnungen empfangen können — ich helf dir durch. Sag mir was: hast du eine konkrete Rechnung zum Validieren? Oder erst Überblick über Pflichten? Oder geht's um Ausstellung in deinem ERP? Wir machen das in deinem Tempo, ohne SAP-Upgrade-Drama.</p>
|
||||||
|
<div class="mode-grid">
|
||||||
|
<button class="mode-card" data-goto="chat">
|
||||||
|
<strong>Chat</strong>
|
||||||
|
<span>Frag mich alles zu §14 UStG, XRechnung, ZUGFeRD, GoBD.</span>
|
||||||
|
</button>
|
||||||
|
<button class="mode-card" data-goto="quiz">
|
||||||
|
<strong>Quiz</strong>
|
||||||
|
<span>Praxis-Fragen aus dem Buchhaltungsalltag, mit XP.</span>
|
||||||
|
</button>
|
||||||
|
<button class="mode-card" data-goto="flash">
|
||||||
|
<strong>Flashcards</strong>
|
||||||
|
<span>BT-Codes, Format-Pflichten, Fristen — mit Spaced-Repetition.</span>
|
||||||
|
</button>
|
||||||
|
<button class="mode-card" data-goto="progress">
|
||||||
|
<strong>Fortschritt</strong>
|
||||||
|
<span>XP, Streaks, Badges, Level.</span>
|
||||||
|
</button>
|
||||||
|
<button class="mode-card" data-goto="curriculum">
|
||||||
|
<strong>Module</strong>
|
||||||
|
<span>5 Curricula: Grundlagen bis GoBD-Archivierung.</span>
|
||||||
|
</button>
|
||||||
|
<button class="mode-card" data-prompt="VALIDATE_REQUEST: Pasted XRechnung-XML / ZUGFeRD prüfen — gib Ampel + Issues">
|
||||||
|
<strong>Validator</strong>
|
||||||
|
<span><code>VALIDATE_REQUEST</code> + XRechnung/ZUGFeRD-XML → Ampel + Issue-Liste als Karte.</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<p style="font-size:.82rem;color:var(--text-mute)">In 3 Sätzen: Chat zum Plan-Bauen → Quiz zum Üben → Flashcards zum Merken. Fortschritt zeigt dir, wo du stehst; der E-Rechnungs-Atlas gibt dir 5 strukturierte Module von Grundlagen bis GoBD-Archivierung.</p>
|
||||||
1749
www/app.js
Normal file
1749
www/app.js
Normal file
File diff suppressed because it is too large
Load diff
417
www/curricula.json
Normal file
417
www/curricula.json
Normal file
|
|
@ -0,0 +1,417 @@
|
||||||
|
{
|
||||||
|
"version": "2026-04-25",
|
||||||
|
"updated": "2026-04-25",
|
||||||
|
"curricula": [
|
||||||
|
{
|
||||||
|
"id": "grundlagen",
|
||||||
|
"title": "1 · Grundlagen + Pflichten-Zeitplan",
|
||||||
|
"short": "§14 UStG, EN 16931, Stichtage 2025-2028",
|
||||||
|
"icon": "shield",
|
||||||
|
"color": "#0284c7",
|
||||||
|
"description": "Was ist eine E-Rechnung im Sinne des §14 UStG? Format-Familie XRechnung/ZUGFeRD/Peppol. Wachstumschancengesetz und der Pflichten-Stufenplan 2025/2027/2028. Ausnahmen (Kleinbeträge, B2C, §19).",
|
||||||
|
"source_md": "00-grundlagen-erechnung.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "definition-erechnung",
|
||||||
|
"title": "Was ist eine E-Rechnung wirklich?",
|
||||||
|
"objectives": [
|
||||||
|
"Definition §14 Abs. 1 Satz 3 UStG verstehen",
|
||||||
|
"PDF != E-Rechnung: warum reine PDFs nicht mehr zählen",
|
||||||
|
"Strukturiertes Format + EN 16931 als Kriterium"
|
||||||
|
],
|
||||||
|
"topics": ["§14 UStG", "EN 16931", "strukturiertes Format", "Wachstumschancengesetz"],
|
||||||
|
"difficulty": "einfach",
|
||||||
|
"source_heading": "Was ist eine E-Rechnung (im Sinne des §14 UStG ab 2025)?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "format-familie",
|
||||||
|
"title": "Format-Familie im Überblick",
|
||||||
|
"objectives": [
|
||||||
|
"XRechnung 3.0.2 vs ZUGFeRD 2.3 vs Peppol BIS 3.0 unterscheiden",
|
||||||
|
"Wann reine XML / wann Hybrid",
|
||||||
|
"EDIFACT als Sonderfall einordnen"
|
||||||
|
],
|
||||||
|
"topics": ["XRechnung", "ZUGFeRD", "Peppol BIS", "Factur-X", "EDIFACT"],
|
||||||
|
"difficulty": "einfach",
|
||||||
|
"source_heading": "Format-Familie im Überblick"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "stichtage",
|
||||||
|
"title": "Stichtage 2020-2028",
|
||||||
|
"objectives": [
|
||||||
|
"Empfangs-Pflicht ab 01.01.2025 (für ALLE)",
|
||||||
|
"Ausstellungs-Pflicht ab 2027 (>800k) bzw. 2028 (alle)",
|
||||||
|
"B2G seit 27.11.2020 + EU-Richtlinie 18.04.2020"
|
||||||
|
],
|
||||||
|
"topics": ["01.01.2025", "01.01.2027", "01.01.2028", "B2G 2020", "ViDA 2030"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Die wichtigsten Stichtage auf einer Seite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ausnahmen",
|
||||||
|
"title": "Ausnahmen + Sonderfälle",
|
||||||
|
"objectives": [
|
||||||
|
"Kleinbetragsrechnung §33 UStDV (≤ 250 EUR)",
|
||||||
|
"B2C bleibt formfrei",
|
||||||
|
"Steuerfreie Umsätze §4 Nr. 8-29 UStG"
|
||||||
|
],
|
||||||
|
"topics": ["§33 UStDV", "§34 UStDV Fahrausweise", "B2C", "Heilbehandlung §4 Nr. 14"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Welche Umsätze sind ausgenommen?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "kleinunternehmer",
|
||||||
|
"title": "Kleinunternehmer §19 UStG",
|
||||||
|
"objectives": [
|
||||||
|
"Empfangs-Pflicht GILT auch für §19",
|
||||||
|
"Ausstellungs-Erleichterung §34a UStDV verstehen",
|
||||||
|
"Praxis-Setup für Selbstständige (0 EUR)"
|
||||||
|
],
|
||||||
|
"topics": ["§19 UStG", "§34a UStDV", "Empfang vs Ausstellung", "Quba-Viewer"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Stolperstelle 2: \"Kleinunternehmer §19 sind komplett raus\""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rechtsrahmen",
|
||||||
|
"title": "2 · Rechtsrahmen §14/§27 UStG + GoBD",
|
||||||
|
"short": "Paragraphen, Fristen, Bußgelder",
|
||||||
|
"icon": "scale",
|
||||||
|
"color": "#38bdf8",
|
||||||
|
"description": "§14 UStG (Definition + Pflicht), §27 Abs. 38 UStG (Übergangsfristen), §13b UStG (Reverse Charge), GoBD-Aufbewahrung 8 Jahre, BMF-Schreiben 15.10.2024 + 15.10.2025, Bußgeldnormen §26a UStG.",
|
||||||
|
"source_md": "01-rechtsrahmen-14-ustg.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "wachstumschancen",
|
||||||
|
"title": "Wachstumschancengesetz + §14 UStG neu",
|
||||||
|
"objectives": [
|
||||||
|
"Reform 2024 + USt-Lücke als Treiber kennen",
|
||||||
|
"Definition §14 Abs. 1 Satz 3 UStG zitieren",
|
||||||
|
"BMF-Schreiben 15.10.2024 + 15.10.2025 einordnen"
|
||||||
|
],
|
||||||
|
"topics": ["BGBl 2024 I 108", "BMF 15.10.2024", "USt-Lücke 23 Mrd", "ViDA-Vorbereitung"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Wachstumschancengesetz — die zentrale Reform"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "uebergangsregeln",
|
||||||
|
"title": "§27 Abs. 38 UStG Übergangsregeln",
|
||||||
|
"objectives": [
|
||||||
|
"Phase 1 (2025-26): Empfang ja, Ausstellung optional",
|
||||||
|
"Phase 2 (2027): >800k Umsatz = Ausstellungs-Pflicht",
|
||||||
|
"Phase 3 (2028): Vollständige Pflicht alle B2B"
|
||||||
|
],
|
||||||
|
"topics": ["§27 UStG", "800k-Schwelle", "EDI-Frist 2027", "B2B-Inland"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "§27 Abs. 38 UStG — Übergangsregeln (Ausstellung)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "reverse-charge",
|
||||||
|
"title": "§13b UStG Reverse Charge im XML",
|
||||||
|
"objectives": [
|
||||||
|
"Wann §13b greift (Bauleistungen, EU-B2B, Schrott)",
|
||||||
|
"BT-151 VAT category code = AE",
|
||||||
|
"BT-120 Pflicht-Begründungstext"
|
||||||
|
],
|
||||||
|
"topics": ["§13b UStG", "BT-151 AE", "BT-120 Begründung", "Bauleistungen"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "§13b UStG — Steuerschuldumkehr (Reverse Charge)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "b2g-historie",
|
||||||
|
"title": "B2G-Pflicht seit 27.11.2020",
|
||||||
|
"objectives": [
|
||||||
|
"EU-Richtlinie 2014/55/EU als Grundlage",
|
||||||
|
"Bund / Länder / Kommunen abgrenzen",
|
||||||
|
"Leitweg-ID als Pflichtfeld bei B2G"
|
||||||
|
],
|
||||||
|
"topics": ["E-RechVO Bund", "RL 2014/55/EU", "OZG", "ZRE"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "B2G — bereits seit 2020 Pflicht"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "bussgelder",
|
||||||
|
"title": "§26a UStG Bußgelder + Vorsteuer-Risiko",
|
||||||
|
"objectives": [
|
||||||
|
"Bußgeld bis 5.000 EUR pro Vorgang ab 2027/28",
|
||||||
|
"GoBD-Verstoß = Schätzungsbefugnis FA",
|
||||||
|
"Vorsteuerabzug bei mangelhafter E-Rechnung"
|
||||||
|
],
|
||||||
|
"topics": ["§26a UStG", "§158 AO", "Vorsteuer-Versagung", "Schätzung"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Bußgelder bei Verstoß"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "zugferd-xrechnung",
|
||||||
|
"title": "3 · Format-Vergleich (XRechnung/ZUGFeRD/Peppol)",
|
||||||
|
"short": "Profile, BT-Codes, Anatomie eines XML",
|
||||||
|
"icon": "git-compare",
|
||||||
|
"color": "#0369a1",
|
||||||
|
"description": "Tiefer Dive in die Formate. XRechnung 3.0.2 (KoSIT-CIUS, BR-DE-Regeln). ZUGFeRD 2.3 Profile MINIMUM/BASIC-WL/BASIC/EN 16931/EXTENDED/XRECHNUNG. Peppol BIS 3.0 mit 4-Corner-Modell. BT-Code-Pflichten anhand echter XML-Snippets.",
|
||||||
|
"source_md": "03-xrechnung-vs-zugferd.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "xrechnung-deepdive",
|
||||||
|
"title": "XRechnung 3.0.2 Deep-Dive",
|
||||||
|
"objectives": [
|
||||||
|
"KoSIT-CIUS verstehen",
|
||||||
|
"BR-DE-Erweiterungen zur EN 16931",
|
||||||
|
"Pflichtfelder BT-23, BT-34, BT-49 ab 3.0.1"
|
||||||
|
],
|
||||||
|
"topics": ["KoSIT", "CIUS", "BR-DE", "BT-23/34/49", "01.02.2025"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "XRechnung — die behörden-getriebene Schiene"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "zugferd-profile",
|
||||||
|
"title": "ZUGFeRD-Profile + Hybrid-PDF",
|
||||||
|
"objectives": [
|
||||||
|
"MINIMUM/BASIC-WL = KEINE gültige E-Rechnung",
|
||||||
|
"BASIC/EN 16931/EXTENDED = gültig",
|
||||||
|
"Wann XRECHNUNG-Profil sinnvoll"
|
||||||
|
],
|
||||||
|
"topics": ["MINIMUM", "BASIC-WL", "BASIC", "EN 16931", "EXTENDED", "PDF/A-3"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "ZUGFeRD 2.3 — die wirtschafts-getriebene Schiene"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "peppol-deepdive",
|
||||||
|
"title": "Peppol BIS 3.0 + 4-Corner",
|
||||||
|
"objectives": [
|
||||||
|
"4-Corner-Modell verstehen",
|
||||||
|
"Access-Point-Provider auswählen",
|
||||||
|
"Wann Peppol nötig ist (vs E-Mail reicht)"
|
||||||
|
],
|
||||||
|
"topics": ["Peppol BIS 3.0", "4-Corner", "Participant-ID", "MLR", "ViDA 2030"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Peppol BIS Billing 3.0 — die EU-grenzüberschreitende Schiene"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "bt-codes",
|
||||||
|
"title": "BT-Codes (Business Terms EN 16931)",
|
||||||
|
"objectives": [
|
||||||
|
"BT-1 Rechnungsnummer, BT-2 Datum, BT-3 Typ",
|
||||||
|
"BT-10 Buyer reference / Leitweg-ID",
|
||||||
|
"BT-31/48 USt-IdNr, BT-151 VAT category"
|
||||||
|
],
|
||||||
|
"topics": ["BT-1", "BT-3 Code 380/381", "BT-10", "BT-20 Skonto", "BT-151"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Anatomie einer E-Rechnung (Pflicht-Inhalte)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "format-wahl",
|
||||||
|
"title": "Entscheidungs-Matrix Format",
|
||||||
|
"objectives": [
|
||||||
|
"B2G: XRechnung, B2B: ZUGFeRD, EU/Konzern: Peppol",
|
||||||
|
"Misch-Betrieb optimal aufstellen",
|
||||||
|
"Empfänger-Wünsche berücksichtigen"
|
||||||
|
],
|
||||||
|
"topics": ["Format-Wahl", "B2G vs B2B", "Misch-Betrieb"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Entscheidungs-Matrix für die Praxis"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ablehnung",
|
||||||
|
"title": "Wann darf der Empfänger ablehnen?",
|
||||||
|
"objectives": [
|
||||||
|
"Profil MINIMUM/BASIC-WL → ablehnen",
|
||||||
|
"PDF-XML-Diskrepanz → ablehnen",
|
||||||
|
"Korrektur-Workflow Storno + Neu"
|
||||||
|
],
|
||||||
|
"topics": ["Ablehnung", "Validator-Fehler", "Korrektur 381+380"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Wann lehnt der Empfänger eine ZUGFeRD-Rechnung berechtigt ab?"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "validator",
|
||||||
|
"title": "4 · Validator + typische Fehler",
|
||||||
|
"short": "KoSIT-Tools, BR-DE-Codes, Top-15-Fehler",
|
||||||
|
"icon": "alert-triangle",
|
||||||
|
"color": "#0ea5e9",
|
||||||
|
"description": "KoSIT-Validator + Mustang + eDocuPortal als Werkzeuge. Top-15 Validierungs-Fehler in der Praxis: Leitweg-ID, BT-151 VAT-category, BT-20 Skonto-Segment-Format, Beträge-Inkonsistenz, Encoding-Pannen.",
|
||||||
|
"source_md": "04-validator-fehler-typisch.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "tools-validator",
|
||||||
|
"title": "Validator-Tools im Vergleich",
|
||||||
|
"objectives": [
|
||||||
|
"KoSIT-Validator als Referenz",
|
||||||
|
"Mustang-Project + Quba-Viewer als Open Source",
|
||||||
|
"Online-Tools für Quick-Checks"
|
||||||
|
],
|
||||||
|
"topics": ["KoSIT-Validator", "Mustang", "Quba-Viewer", "eDocuPortal"],
|
||||||
|
"difficulty": "einfach",
|
||||||
|
"source_heading": "Welche Validatoren gibt es?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "leitweg-id",
|
||||||
|
"title": "Leitweg-ID (BT-10) korrekt",
|
||||||
|
"objectives": [
|
||||||
|
"Format <Grobadressierung>-<Feinadressierung>-<Prüfziffer>",
|
||||||
|
"Modulo-11-Prüfung",
|
||||||
|
"Häufige Copy-Paste-Fehler"
|
||||||
|
],
|
||||||
|
"topics": ["BT-10", "BR-DE-21", "Modulo-11", "Leitweg-ID-Lookup"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Fehler 1: Fehlende oder falsche Leitweg-ID (BT-10)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vat-category",
|
||||||
|
"title": "VAT category code (BT-151)",
|
||||||
|
"objectives": [
|
||||||
|
"S/AE/K/E/Z/G/O sicher unterscheiden",
|
||||||
|
"BT-120 Begründungspflicht bei AE/K/E/Z",
|
||||||
|
"Kategorie-Konsistenz Position vs Summe"
|
||||||
|
],
|
||||||
|
"topics": ["BT-151", "BT-120", "S Standard", "AE Reverse", "K innerg. Lieferung"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Fehler 2: Falscher VAT category code (BT-151)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "skonto-bt20",
|
||||||
|
"title": "Skonto-Segment-Format (BT-20)",
|
||||||
|
"objectives": [
|
||||||
|
"#SKONTO#TAGE=14#PROZENT=2.00# auswendig",
|
||||||
|
"Multi-Stufen-Skonto korrekt",
|
||||||
|
"Freitext = BR-DE-18-Warning"
|
||||||
|
],
|
||||||
|
"topics": ["BT-20", "BR-DE-18", "Skonto-Segment", "BASISBETRAG"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Fehler 3: Skonto im falschen Format (BT-20)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "betraege-konsistenz",
|
||||||
|
"title": "Betrags-Konsistenz + Rundung",
|
||||||
|
"objectives": [
|
||||||
|
"Kette LineExtensionAmount → Tax → Payable",
|
||||||
|
"Rundungs-Toleranz 0.02 EUR",
|
||||||
|
"Validator rechnet nach"
|
||||||
|
],
|
||||||
|
"topics": ["BT-106", "BT-109", "BT-112", "BT-115", "BR-CO-15"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Fehler 8: Beträge stimmen rechnerisch nicht"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "encoding-format",
|
||||||
|
"title": "Encoding + UN/CEFACT-Codes",
|
||||||
|
"objectives": [
|
||||||
|
"UTF-8 ist Pflicht (kein ANSI/Latin-1)",
|
||||||
|
"Punkt als Dezimal-Trenner (kein Komma)",
|
||||||
|
"C62 für Stück, HUR für Stunden, KGM für kg"
|
||||||
|
],
|
||||||
|
"topics": ["UTF-8", "Dezimal-Punkt", "UN/CEFACT", "C62", "HUR", "KGM"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Fehler 6: Falsche UN/CEFACT-Einheitencode (BT-130)"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "gobd",
|
||||||
|
"title": "5 · GoBD + Tools-Marktübersicht",
|
||||||
|
"short": "Archivierung 8 Jahre, DATEV/sevdesk/Lexware, Open Source",
|
||||||
|
"icon": "archive",
|
||||||
|
"color": "#7dd3fc",
|
||||||
|
"description": "GoBD-Aufbewahrung 8 Jahre, maschinelle Auswertbarkeit, Verfahrensdokumentation. Eingangs- und Ausgangs-Workflows. Tools-Marktübersicht: DATEV Unternehmen Online, Lexware Office, sevdesk, easybill, FastBill, SAP DRC, plus Open Source (Mustang, Quba, Fakturama).",
|
||||||
|
"source_md": "05-prozess-eingangs-rechnung.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "gobd-fristen",
|
||||||
|
"title": "GoBD-Fristen + Aufbewahrungs-Logik",
|
||||||
|
"objectives": [
|
||||||
|
"8 Jahre für Rechnungen ab 01.01.2025",
|
||||||
|
"10 Jahre für Banken/Versicherungen + Buchungsbelege",
|
||||||
|
"Fristbeginn Ablauf des Kalenderjahres"
|
||||||
|
],
|
||||||
|
"topics": ["§147 AO", "§14b UStG", "8-Jahres-Frist", "Fristbeginn"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "GoBD — Aufbewahrungsfristen + maschinelle Auswertbarkeit"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "verfahrensdoku",
|
||||||
|
"title": "Verfahrensdokumentation für KMU",
|
||||||
|
"objectives": [
|
||||||
|
"1-2 Seiten reichen",
|
||||||
|
"Empfangs-Pfad + Verarbeitung + Archivierung beschreiben",
|
||||||
|
"Rollen + Berechtigungen festlegen"
|
||||||
|
],
|
||||||
|
"topics": ["Verfahrensdoku", "Rollen", "Berechtigungen", "Korrektur-Prozess"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "GoBD-Anforderungen für E-Rechnungen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "eingangs-workflow",
|
||||||
|
"title": "Eingangs-Workflow Schritt für Schritt",
|
||||||
|
"objectives": [
|
||||||
|
"Empfang → Format-Erkennung → Validierung → Buchhaltung → Archiv",
|
||||||
|
"ZUGFeRD-PDF + XML zusammen archivieren",
|
||||||
|
"Vorsteuer-Falle bei mangelhafter Rechnung"
|
||||||
|
],
|
||||||
|
"topics": ["Eingangs-Workflow", "Format-Erkennung", "ZUGFeRD-Archiv", "Vorsteuer"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Der Eingangs-Workflow auf einer Seite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ausgangs-workflow",
|
||||||
|
"title": "Ausgangs-Workflow + Versand",
|
||||||
|
"objectives": [
|
||||||
|
"Erstellung → Validation → Versand → Nachweis",
|
||||||
|
"E-Mail vs Peppol vs Portal vergleichen",
|
||||||
|
"Storno+Neu nach §14 UStG"
|
||||||
|
],
|
||||||
|
"topics": ["Ausgangs-Workflow", "Peppol-Versand", "MLR-Quittung", "Storno 381"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Der Ausgangs-Workflow auf einer Seite"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "tools-kmu",
|
||||||
|
"title": "Tools-Marktübersicht KMU",
|
||||||
|
"objectives": [
|
||||||
|
"DATEV Unternehmen Online für STB-gebundene KMU",
|
||||||
|
"sevdesk/Lexware/easybill für KMU autonom",
|
||||||
|
"Open-Source-Stack (Mustang + Quba)"
|
||||||
|
],
|
||||||
|
"topics": ["DATEV", "sevdesk", "Lexware Office", "easybill", "Mustang"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "1. Komplett-Suiten (KMU-tauglich)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "stolperstellen-praxis",
|
||||||
|
"title": "Top-Stolperstellen + FAQ",
|
||||||
|
"objectives": [
|
||||||
|
"PDF-mit-XML-Mythos sauber widerlegen",
|
||||||
|
"Korrektur-Workflow ohne GoBD-Verstoß",
|
||||||
|
"Fehlerhafte Eingangs-Rechnung richtig handhaben"
|
||||||
|
],
|
||||||
|
"topics": ["Stolperstellen", "PDF-Mythos", "Korrektur", "Eingangs-Mängel"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Stolperstelle 1: \"Mein PDF mit eingebettetem XML reicht doch?\""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"badges": [
|
||||||
|
{"id": "erste_validierung", "title": "Erste Validierung", "icon": "check-circle", "description": "1. Quiz zu Grundlagen erfolgreich."},
|
||||||
|
{"id": "paragraphen_profi", "title": "Paragraphen-Profi", "icon": "scale", "description": "5 Quiz korrekt zum Rechtsrahmen (§14/§27 UStG)."},
|
||||||
|
{"id": "format_kenner", "title": "Format-Kenner", "icon": "git-compare", "description": "5 Quiz korrekt zum Format-Vergleich (XRechnung/ZUGFeRD/Peppol)."},
|
||||||
|
{"id": "validator_pro", "title": "Validator-Pro", "icon": "alert-triangle", "description": "10 Quiz korrekt zu Validator-Fehlern + BR-DE-Codes."},
|
||||||
|
{"id": "gobd_compliant", "title": "GoBD-Compliant", "icon": "archive", "description": "3 Quiz korrekt zur GoBD-Archivierung."},
|
||||||
|
{"id": "eli_meister", "title": "Eli-Meister", "icon": "crown", "description": "Alle 5 Module mit ≥80% abgeschlossen."},
|
||||||
|
{"id": "streak_7", "title": "Buchhaltungs-Disziplin", "icon": "flame", "description": "7 Tage in Folge aktiv gewesen."},
|
||||||
|
{"id": "night_owl", "title": "Nachteule", "icon": "moon", "description": "Nach 22 Uhr gelernt."},
|
||||||
|
{"id": "early_bird", "title": "Frühaufsteher", "icon": "sun", "description": "Vor 7 Uhr gelernt."}
|
||||||
|
],
|
||||||
|
"levels": [
|
||||||
|
{"min": 0, "title": "Buchhaltungs-Novize"},
|
||||||
|
{"min": 50, "title": "Sachbearbeiter:in"},
|
||||||
|
{"min": 200, "title": "Bilanzbuchhalter:in"},
|
||||||
|
{"min": 500, "title": "Leitung Finanzbuchhaltung"},
|
||||||
|
{"min": 1250, "title": "CFO Mittelstand"},
|
||||||
|
{"min": 2500, "title": "Steuerprofi"},
|
||||||
|
{"min": 5000, "title": "E-Rechnungs-Experte"}
|
||||||
|
]
|
||||||
|
}
|
||||||
125
www/index.html
Normal file
125
www/index.html
Normal file
|
|
@ -0,0 +1,125 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Eli · Dein E-Rechnungs-Navigator</title>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
|
||||||
|
<meta name="theme-color" content="#0a0a0f">
|
||||||
|
<meta name="description" content="Eli — der E-Rechnungs-Navigator für KMU. XRechnung & ZUGFeRD verstehen, Empfangs- und Versandpflicht, Aufbewahrung. Im deutschen Bunker.">
|
||||||
|
<link rel="stylesheet" href="styles.css">
|
||||||
|
<script>window.__ELI_KEY__ = 'qb_z2x46r4mdb7j';</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="app" role="application" aria-label="Eli Pflicht ab 2025/2027 — Eli macht's verständlich">
|
||||||
|
|
||||||
|
<header class="topbar">
|
||||||
|
<div class="brand">
|
||||||
|
<span class="brand-icon" aria-hidden="true">E</span>
|
||||||
|
<span>Eli <small>E-Rechnung</small></span>
|
||||||
|
</div>
|
||||||
|
<div class="spacer"></div>
|
||||||
|
<span class="status" role="status" aria-live="polite">Online</span>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<nav class="tabbar" role="tablist" aria-label="Modi">
|
||||||
|
<button class="tab" role="tab" aria-selected="true" aria-controls="view-chat" data-mode="chat">
|
||||||
|
Chat
|
||||||
|
<span class="tab-kbd">⌃1</span>
|
||||||
|
</button>
|
||||||
|
<button class="tab" role="tab" aria-selected="false" aria-controls="view-quiz" data-mode="quiz">
|
||||||
|
Quiz
|
||||||
|
<span class="tab-kbd">⌃2</span>
|
||||||
|
</button>
|
||||||
|
<button class="tab" role="tab" aria-selected="false" aria-controls="view-flash" data-mode="flash">
|
||||||
|
Karten
|
||||||
|
<span class="tab-kbd">⌃3</span>
|
||||||
|
</button>
|
||||||
|
<button class="tab" role="tab" aria-selected="false" aria-controls="view-progress" data-mode="progress">
|
||||||
|
Fortschritt
|
||||||
|
<span class="tab-kbd">⌃4</span>
|
||||||
|
</button>
|
||||||
|
<button class="tab" role="tab" aria-selected="false" aria-controls="view-curriculum" data-mode="curriculum">
|
||||||
|
Module
|
||||||
|
<span class="tab-kbd">⌃5</span>
|
||||||
|
</button>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<main class="main">
|
||||||
|
<!-- CHAT -->
|
||||||
|
<section id="view-chat" class="view" role="tabpanel" aria-labelledby="tab-chat" data-active="true">
|
||||||
|
<div id="welcome-screen" class="welcome hidden" aria-hidden="true">
|
||||||
|
<h2>Willkommen bei Eli!</h2>
|
||||||
|
<p>Hi, ich bin Eli. Du musst seit <strong>01.01.2025</strong> E-Rechnungen empfangen können — ich helf dir durch. Sag mir was: hast du eine konkrete Rechnung zum Validieren? Oder erst Überblick über Pflichten? Oder geht's um Ausstellung in deinem ERP? Wir machen das in deinem Tempo, ohne SAP-Upgrade-Drama.</p>
|
||||||
|
<div class="mode-grid">
|
||||||
|
<button class="mode-card" data-goto="chat">
|
||||||
|
<strong>Chat</strong>
|
||||||
|
<span>Frag mich alles zu §14 UStG, XRechnung, ZUGFeRD, GoBD.</span>
|
||||||
|
</button>
|
||||||
|
<button class="mode-card" data-goto="quiz">
|
||||||
|
<strong>Quiz</strong>
|
||||||
|
<span>Praxis-Fragen aus dem Buchhaltungsalltag, mit XP.</span>
|
||||||
|
</button>
|
||||||
|
<button class="mode-card" data-goto="flash">
|
||||||
|
<strong>Flashcards</strong>
|
||||||
|
<span>BT-Codes, Format-Pflichten, Fristen — mit Spaced-Repetition.</span>
|
||||||
|
</button>
|
||||||
|
<button class="mode-card" data-goto="progress">
|
||||||
|
<strong>Fortschritt</strong>
|
||||||
|
<span>XP, Streaks, Badges, Level.</span>
|
||||||
|
</button>
|
||||||
|
<button class="mode-card" data-goto="curriculum">
|
||||||
|
<strong>Module</strong>
|
||||||
|
<span>5 Curricula: Grundlagen bis GoBD-Archivierung.</span>
|
||||||
|
</button>
|
||||||
|
<button class="mode-card" data-prompt="VALIDATE_REQUEST: Pasted XRechnung-XML / ZUGFeRD prüfen — gib Ampel + Issues">
|
||||||
|
<strong>Validator</strong>
|
||||||
|
<span><code>VALIDATE_REQUEST</code> + XRechnung/ZUGFeRD-XML → Ampel + Issue-Liste als Karte.</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<p style="font-size:.82rem;color:var(--text-mute)">In 3 Sätzen: Chat zum Plan-Bauen → Quiz zum Üben → Flashcards zum Merken. Fortschritt zeigt dir, wo du stehst; der E-Rechnungs-Atlas gibt dir 5 strukturierte Module von Grundlagen bis GoBD-Archivierung.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="chat-box" class="chat-box" aria-live="polite" aria-label="Gespräch"></div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- QUIZ -->
|
||||||
|
<section id="view-quiz" class="view" role="tabpanel" aria-labelledby="tab-quiz">
|
||||||
|
<div id="quiz-host"></div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- FLASHCARDS -->
|
||||||
|
<section id="view-flash" class="view" role="tabpanel" aria-labelledby="tab-flash">
|
||||||
|
<div id="flash-host"></div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- PROGRESS -->
|
||||||
|
<section id="view-progress" class="view" role="tabpanel" aria-labelledby="tab-progress">
|
||||||
|
<div id="progress-host"></div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- CURRICULUM -->
|
||||||
|
<section id="view-curriculum" class="view" role="tabpanel" aria-labelledby="tab-curr">
|
||||||
|
<div id="curr-host"></div>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<form id="composer-form" class="composer" aria-label="Nachricht verfassen">
|
||||||
|
<div id="attach-strip" class="attach-strip" aria-live="polite"></div>
|
||||||
|
<div class="composer-row">
|
||||||
|
<button type="button" class="btn-attach" id="composer-attach" aria-label="Datei anhängen" title="Datei anhängen (PDF, Bild, Text — max 5 Dateien, 8 MB)">📎</button>
|
||||||
|
<input type="file" id="composer-file" multiple accept=".pdf,.txt,.md,.csv,.json,.xml,.yaml,.yml,.log,.png,.jpg,.jpeg,.webp,.gif" hidden>
|
||||||
|
<textarea id="composer" rows="1" placeholder="Frag Eli — Enter zum Senden, Shift+Enter für Zeilenumbruch" aria-label="Nachricht"></textarea>
|
||||||
|
<button type="submit" class="btn-primary" id="composer-send">Senden</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<footer class="footer">
|
||||||
|
Sovereign AI · Deutscher Bunker · <a href="https://qognio.com">Qognio</a> · DSGVO-konform · Keine externen Fonts · Keine Cookies
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="toast-stack" class="toast-stack" aria-live="polite"></div>
|
||||||
|
|
||||||
|
<script src="app.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
1038
www/styles.css
Normal file
1038
www/styles.css
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue