310 lines
11 KiB
HTML
310 lines
11 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Steuerberater-Abgleich DATEV - Status</title>
|
|
<style>
|
|
:root {
|
|
--bg: #f6f8fb;
|
|
--card: #ffffff;
|
|
--text: #1f2937;
|
|
--muted: #6b7280;
|
|
--border: #e5e7eb;
|
|
--ok-bg: #ecfdf3;
|
|
--ok-text: #065f46;
|
|
--warn-bg: #fffbeb;
|
|
--warn-text: #92400e;
|
|
--open-bg: #eff6ff;
|
|
--open-text: #1e3a8a;
|
|
--danger-bg: #fef2f2;
|
|
--danger-text: #991b1b;
|
|
}
|
|
|
|
* {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
body {
|
|
margin: 0;
|
|
font-family: Arial, Helvetica, sans-serif;
|
|
background: var(--bg);
|
|
color: var(--text);
|
|
line-height: 1.45;
|
|
}
|
|
|
|
.container {
|
|
max-width: 1240px;
|
|
margin: 24px auto;
|
|
padding: 0 16px 24px;
|
|
}
|
|
|
|
.card {
|
|
background: var(--card);
|
|
border: 1px solid var(--border);
|
|
border-radius: 10px;
|
|
padding: 20px;
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
h1 {
|
|
margin: 0 0 8px;
|
|
font-size: 26px;
|
|
}
|
|
|
|
h2 {
|
|
margin: 0 0 14px;
|
|
font-size: 20px;
|
|
}
|
|
|
|
.meta {
|
|
color: var(--muted);
|
|
font-size: 14px;
|
|
}
|
|
|
|
.kpis {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
|
|
gap: 12px;
|
|
}
|
|
|
|
.kpi {
|
|
border: 1px solid var(--border);
|
|
border-radius: 8px;
|
|
padding: 12px;
|
|
background: #fcfdff;
|
|
}
|
|
|
|
.kpi .value {
|
|
font-size: 24px;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.kpi .label {
|
|
color: var(--muted);
|
|
font-size: 13px;
|
|
}
|
|
|
|
.callout {
|
|
border-radius: 8px;
|
|
padding: 12px 14px;
|
|
margin-top: 10px;
|
|
border: 1px solid transparent;
|
|
font-size: 14px;
|
|
}
|
|
|
|
.callout strong {
|
|
display: block;
|
|
margin-bottom: 4px;
|
|
font-size: 14px;
|
|
}
|
|
|
|
.callout.warn {
|
|
background: var(--warn-bg);
|
|
color: var(--warn-text);
|
|
border-color: #fde68a;
|
|
}
|
|
|
|
.callout.ok {
|
|
background: var(--ok-bg);
|
|
color: var(--ok-text);
|
|
border-color: #a7f3d0;
|
|
}
|
|
|
|
table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
font-size: 13px;
|
|
}
|
|
|
|
th, td {
|
|
border: 1px solid var(--border);
|
|
padding: 8px 10px;
|
|
vertical-align: top;
|
|
text-align: left;
|
|
}
|
|
|
|
th {
|
|
background: #f9fafb;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.status {
|
|
display: inline-block;
|
|
padding: 3px 8px;
|
|
border-radius: 999px;
|
|
font-size: 12px;
|
|
font-weight: 700;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.status.ok {
|
|
background: var(--ok-bg);
|
|
color: var(--ok-text);
|
|
}
|
|
|
|
.status.warn {
|
|
background: var(--warn-bg);
|
|
color: var(--warn-text);
|
|
}
|
|
|
|
.status.open {
|
|
background: var(--open-bg);
|
|
color: var(--open-text);
|
|
}
|
|
|
|
.status.danger {
|
|
background: var(--danger-bg);
|
|
color: var(--danger-text);
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<section class="card">
|
|
<h1>Steuerberater-Abgleich DATEV (Stand nach Korrekturen)</h1>
|
|
<div class="meta">
|
|
Basis: <code>steuerberater.csv</code> vs. August-Export DATEV plus DB-Abgleich
|
|
(<code>user_invoices</code>, <code>shopping_orders</code>, <code>datev_export_lines</code>).
|
|
</div>
|
|
<div class="kpis" style="margin-top: 14px;">
|
|
<div class="kpi">
|
|
<div class="value">66</div>
|
|
<div class="label">Rueckmeldezeilen Steuerberater</div>
|
|
</div>
|
|
<div class="kpi">
|
|
<div class="value">30</div>
|
|
<div class="label">Nicht im August-Export enthalten</div>
|
|
</div>
|
|
<div class="kpi">
|
|
<div class="value">27</div>
|
|
<div class="label">Davon DB-Periode September 2025</div>
|
|
</div>
|
|
<div class="kpi">
|
|
<div class="value">3</div>
|
|
<div class="label">Unter Rechnungsnummer nicht in DB</div>
|
|
</div>
|
|
</div>
|
|
<div class="callout warn">
|
|
<strong>Auffaelliges Muster</strong>
|
|
24 Rueckmeldefaelle entsprechen dem Schema <em>Betrag Test + 19%</em>. Neben Netto/Brutto-Missverstaendnis gab es
|
|
echte technische Split-Fehler bei Sammelrechnungen und Homeparty.
|
|
</div>
|
|
<div class="callout ok">
|
|
<strong>Nach Umsetzung</strong>
|
|
Sammelrechnungen nutzen jetzt Netto+Steuer korrekt, Homeparty liest <code>ek_tax/ek_net</code>.
|
|
Kritische Beispielbelege laufen auf die Rechnungstotals.
|
|
</div>
|
|
</section>
|
|
|
|
<section class="card">
|
|
<h2>Umsetzung und offene Themen</h2>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Thema</th>
|
|
<th>Ist-Zustand / Ursache</th>
|
|
<th>Aenderung / Entscheidung</th>
|
|
<th>Status</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Sammelrechnungen/API</td>
|
|
<td>Export enthielt nur Steueranteil, weil <code>net_split</code> auf <code>ShoppingOrder</code> fehlte.</td>
|
|
<td><code>net_split</code> wird gespeichert; historischer Fallback auf <code>ShoppingCollectOrder.net_split</code>.</td>
|
|
<td><span class="status ok">Umgesetzt</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Homeparty</td>
|
|
<td>Export las <code>vk_*</code>; Rechnungstotal basiert auf <code>ek_*</code>.</td>
|
|
<td>DATEV-Service nutzt fuer Homeparty nun <code>ek_tax/ek_net</code>.</td>
|
|
<td><span class="status ok">Umgesetzt</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>USt-ID pro Bestellung</td>
|
|
<td>Validierung erfolgt aktuell beim Eintragen, nicht bei jeder Bestellung.</td>
|
|
<td>Folgeticket: pro Bestellung pruefen; bei ungueltig Warnung + USt-Berechnung.</td>
|
|
<td><span class="status open">Offen</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Storno in August</td>
|
|
<td>Vom Steuerberater als Storno markiert, aber keine Stornorechnungslogik aktiv gewesen.</td>
|
|
<td>Fuer August kein DATEV-Storno ableiten, solange keine echte Stornorechnung existiert.</td>
|
|
<td><span class="status warn">Fachlich geklaert</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Doppelzahlung / Payone</td>
|
|
<td>DATEV-Export belegt keine echte Doppelabbuchung.</td>
|
|
<td>Abgleich ueber <code>payment_transactions</code> plus PAYONE Portal/API erforderlich.</td>
|
|
<td><span class="status open">Offen</span></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</section>
|
|
|
|
<section class="card">
|
|
<h2>Logik-Hinweise 8125 vs. 8400</h2>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Rechnung</th>
|
|
<th>Exportkonto</th>
|
|
<th>Systembefund</th>
|
|
<th>Einordnung</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>202536848 / 202537290 / 202537832</td>
|
|
<td>8400</td>
|
|
<td>AT-Faelle ohne verifizierte USt-ID, <code>taxable_sales=2</code></td>
|
|
<td>8400 ist aus Systemdaten plausibel; fuer 8125 fehlt USt-ID-Grundlage.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>202537251</td>
|
|
<td>8125 / BU 1</td>
|
|
<td>ES-USt-ID vorhanden, <code>reverse_charge=1</code></td>
|
|
<td>Export folgt Rechnungsstand und ist fachlich konsistent.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>202538445 / 202538446 / 202538774 / 202539011 / 202539399</td>
|
|
<td>Nicht in August-Datei</td>
|
|
<td>DB-Periode September 2025</td>
|
|
<td>Kein August-Exportfehler; separat gegen September-Export pruefen.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</section>
|
|
|
|
<section class="card">
|
|
<h2>Fehlende Belege im August-Export</h2>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Rechnung</th>
|
|
<th>DB-Befund</th>
|
|
<th>Einordnung</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>202506145 / 202506147 / 202538333</td>
|
|
<td><span class="status danger">Nicht in DB gefunden</span></td>
|
|
<td>Separat klaeren: Datenstand, Rechnungsformat oder extern erzeugte Rechnung.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
202538154, 202538182, 202538270, 202538271, 202538332, 202538398, 202538429, 202538431, 202538445,
|
|
202538446, 202538661, 202538728, 202538744, 202538759, 202538774, 202538809, 202538926, 202539010,
|
|
202539011, 202539031, 202539062, 202539094, 202539162, 202539168, 202539302, 202539399, 202539419
|
|
</td>
|
|
<td><span class="status warn">DB-Periode September 2025</span></td>
|
|
<td>Kein August-Exportfehler.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</section>
|
|
</div>
|
|
</body>
|
|
</html>
|