Add procedural documentatino (for GODB)
This commit is contained in:
@@ -0,0 +1,217 @@
|
||||
<script setup lang="ts">
|
||||
import AppLayout from '@/layouts/AppLayout.vue';
|
||||
import { Table, TableCell, TableFooter, TableBody, TableHead, TableHeader, TableRow, } from '@/components/ui/table';
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
||||
<AppLayout title="Verfahrensdokumentation">
|
||||
<div class="pl-4 max-w-5xl">
|
||||
|
||||
<h1>Verfahrensdokumentation</h1>
|
||||
<h2>GoBD-konforme Rechnungsverwaltung</h2>
|
||||
|
||||
<section>
|
||||
<h3>1. Systembeschreibung</h3>
|
||||
<p><strong>Zweck</strong>: Erstellung, Verwaltung und Archivierung von Rechnungen gemäß §14 UStG und
|
||||
GoBD.</p>
|
||||
<p><strong>Technologie</strong>: Laravel (Backend), Vue.js (Frontend), SQLite/MySQL (Datenbank), S3
|
||||
(Speicher).</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h3>2. Prozesse</h3>
|
||||
<h4>2.1 Rechnungserstellung</h4>
|
||||
|
||||
<ol>
|
||||
<li>
|
||||
Nutzer erstellt <strong>Entwurf</strong> (Status: `draft`).
|
||||
</li>
|
||||
<li>
|
||||
System speichert Entwurf <strong>ohne Rechnungsnummer</strong>.
|
||||
</li>
|
||||
<li>
|
||||
Bei "Rechnung stellen":
|
||||
<ul>
|
||||
<li>
|
||||
System vergibt <strong>fortlaufende Nummer</strong> (z. B. `RE-2023-001`).
|
||||
</li>
|
||||
<li>
|
||||
Status wird auf `issued` gesetzt.
|
||||
</li>
|
||||
<li>
|
||||
<strong>PDF/XML</strong> wird generiert und <strong>unveränderlich</strong> gespeichert
|
||||
(S3 mit Versionierung).
|
||||
</li>
|
||||
<li>
|
||||
<strong>Audit-Log</strong> wird erstellt.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
</section>
|
||||
|
||||
|
||||
<h4>2.2 Rechnungsstornierung</h4>
|
||||
|
||||
<ol>
|
||||
<li>
|
||||
Nutzer wählt "Stornieren" und gibt <strong>Grund</strong> an (GoBD-Pflicht!).
|
||||
</li>
|
||||
<li>
|
||||
System:
|
||||
<ul>
|
||||
<li>Setzt Status auf `cancelled`.</li>
|
||||
<li>Erstellt <strong>Gutschrift</strong> (Credit Note) mit negativem Betrag.</li>
|
||||
<li>Speichert Stornierungsgrund im <strong>Audit-Log</strong>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
|
||||
<h4>2.3 Archivierung</h4>
|
||||
|
||||
<ol>
|
||||
<li><strong>Automatische Backups</strong> täglich um 3:00 Uhr (`spatie/laravel-backup`).</li>
|
||||
<li><strong>Aufbewahrungsfrist</strong>: 10 Jahre (S3 Lifecycle Policy).</li>
|
||||
<li><strong>Speicherformat</strong>: PDF + XML (ZUGFeRD-konform).</li>
|
||||
</ol>
|
||||
|
||||
|
||||
<h3>3. Technische Maßnahmen</h3>
|
||||
|
||||
|
||||
<Table>
|
||||
<TableHeader>
|
||||
<TableRow>
|
||||
<TableHead>Maßnahme</TableHead>
|
||||
<TableHead>Umsetzung</TableHead>
|
||||
</TableRow>
|
||||
</TableHeader>
|
||||
<TableBody>
|
||||
<TableRow>
|
||||
<TableCell>Unveränderbarkeit</TableCell>
|
||||
<TableCell>Rechnungen nach Stellung als `readonly` markiert. Datenbank-Trigger verhindern
|
||||
Änderungen.</TableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell>Nachvollziehbarkeit</TableCell>
|
||||
<TableCell>`laravel-auditing` protokolliert alle Änderungen (wer, wann, was).</TableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell>Vollständigkeit</TableCell>
|
||||
<TableCell>Fortlaufende Nummernvergabe ohne Lücken (Datenbank-Transaktionen).</TableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell>Aufbewahrung</TableCell>
|
||||
<TableCell>Tägliche Backups auf S3 mit Versionierung (10 Jahre Aufbewahrung).</TableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell>Zugriffsschutz</TableCell>
|
||||
<TableCell>Laravel Policies schränken Berechtigungen ein (z. B. nur Buchhalter dürfen
|
||||
stornieren).</TableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell>Prüfbarkeit</TableCell>
|
||||
<TableCell>Audit-Logs und Revisionsprotokolle sind über Admin-Oberfläche einsehbar.</TableCell>
|
||||
</TableRow>
|
||||
</TableBody>
|
||||
</Table>
|
||||
|
||||
|
||||
<h3>4. Verantwortlichkeiten</h3>
|
||||
|
||||
<Table>
|
||||
<TableHeader>
|
||||
<TableRow>
|
||||
<TableHead>Rolle</TableHead>
|
||||
<TableHead>Verantwortung</TableHead>
|
||||
</TableRow>
|
||||
</TableHeader>
|
||||
<TableBody>
|
||||
<TableRow>
|
||||
<TableCell>Buchhaltung</TableCell>
|
||||
<TableCell>Erstellung, Stellung und Stornierung von Rechnungen.</TableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell>IT-Administration</TableCell>
|
||||
<TableCell>Wartung der Systeme, Backups, Zugriffsrechte.</TableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell>Geschäftsführung</TableCell>
|
||||
<TableCell>Freigabe von Prozessen, regelmäßige Prüfung der GoBD-Konformität.</TableCell>
|
||||
</TableRow>
|
||||
</TableBody>
|
||||
</Table>
|
||||
|
||||
|
||||
<h3>5. Prüfprotokolle</h3>
|
||||
|
||||
<ul>
|
||||
<li><strong>Monatlich</strong>: Automatischer Report aller gestellten/stornierten Rechnungen (via
|
||||
`laravel-excel`).</li>
|
||||
<li><strong>Jährlich</strong>: Manuelle Prüfung der Archivierung durch Steuerberater.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</AppLayout>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
h1 {
|
||||
font-size: var(--text-xl);
|
||||
font-weight: var(--font-weight-bold);
|
||||
color: var(--color-primary-foreground);
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: var(--text-lg);
|
||||
color: var(--color-muted-foreground);
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: var(--text-lg);
|
||||
margin-top: calc(var(--spacing) * 12);
|
||||
margin-bottom: calc(var(--spacing) * 6);
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: var(--text-md);
|
||||
margin-top: calc(var(--spacing) * 12);
|
||||
margin-bottom: calc(var(--spacing) * 6);
|
||||
color: var(--color-muted-foreground);
|
||||
}
|
||||
|
||||
h3+h4 {
|
||||
margin-top: calc(var(--spacing) * -3);
|
||||
;
|
||||
}
|
||||
|
||||
section {
|
||||
margin-block: calc(var(--spacing) * 12);
|
||||
}
|
||||
|
||||
p {
|
||||
margin-block: calc(var(--spacing) * 3);
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type: disc;
|
||||
margin: calc(var(--spacing) * 4);
|
||||
}
|
||||
|
||||
ol {
|
||||
list-style-type: decimal;
|
||||
margin: calc(var(--spacing) * 4);
|
||||
}
|
||||
|
||||
li {
|
||||
margin-block: calc(var(--spacing) * 1);
|
||||
}
|
||||
|
||||
th,
|
||||
td {
|
||||
font-size: var(--text-base);
|
||||
}
|
||||
</style>
|
||||
@@ -50,6 +50,11 @@
|
||||
Route::get('timesheets', function () {
|
||||
return Inertia::render('Timesheets');
|
||||
})->name('timesheets');
|
||||
|
||||
// Procedural Documentation
|
||||
Route::get('proceduralDocumentation', function () {
|
||||
return Inertia::render('ProceduralDocumentation');
|
||||
})->name('proceduralDocumentation');
|
||||
});
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user