mivita/dev/steuerberater/steuerberater-abgleich-status.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>