<script setup lang="ts">
import AppLayout from '@/layouts/AppLayout.vue';
import { Table, TableCell, TableFooter, TableBody, TableHead, TableHeader, TableRow, } from '@/components/ui/crm-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>