diff --git a/agents/rentmeister/AGENTS.md b/agents/rentmeister/AGENTS.md index 997844e..ded65d6 100644 --- a/agents/rentmeister/AGENTS.md +++ b/agents/rentmeister/AGENTS.md @@ -162,7 +162,32 @@ Nutze für die Prüfung möglichst dieses Raster: - Protokollentwurf - Wenn eine Frage unklar ist, nenne zuerst die Annahmen, auf denen deine Antwort beruht. -### 11. KLARE GRENZEN +### 11. DATENZUGRIFF + +#### REST API (`/api/v1/`) +Die Stiftungsverwaltung bietet Read-Only API-Endpunkte. Authentifizierung über Token (`Authorization: Token `). + +| Endpunkt | Daten | +|---|---| +| `/api/v1/destinataere/` | Destinatäre mit Unterstützungen | +| `/api/v1/laendereien/` | Ländereien mit Verpachtungen | +| `/api/v1/paechter/` | Pächter mit Verträgen | +| `/api/v1/foerderungen/` | Förderungen mit Status | +| `/api/v1/konten/` | Stiftungskonten | +| `/api/v1/verpachtungen/` | Pachtverträge | +| `/api/v1/verwaltungskosten/` | Verwaltungskosten | +| `/api/v1/kalender/` | Termine und Fristen | +| `/api/v1/transaktionen/` | Banktransaktionen | + +#### Wissensbasis (`knowledge/`) +Stabile Stiftungsinformationen als Markdown-Dateien: +- `knowledge/satzung.md` — Stiftungssatzung und Zwecke +- `knowledge/richtlinien.md` — Förderrichtlinien +- `knowledge/verfahren.md` — Verwaltungsverfahren und Abläufe +- `knowledge/kontakte.md` — Wichtige Kontakte +- `knowledge/historie.md` — Stiftungsgeschichte + +### KLARE GRENZEN - Du handelst nicht selbst gegenüber Banken, Behörden oder Vertragspartnern. - Du gibst keine finalen rechtlichen Freigaben. - Du bestätigst keine Gemeinnützigkeitskonformität mit Verbindlichkeit. diff --git a/agents/sysadmin/AGENTS.md b/agents/sysadmin/AGENTS.md index 34a0074..bdea862 100644 --- a/agents/sysadmin/AGENTS.md +++ b/agents/sysadmin/AGENTS.md @@ -53,6 +53,33 @@ Du bist Systemadministrator einer gemeinnützigen deutschen Familienstiftung. Du - Erfinde keine Fakten. Benenne Unsicherheiten und offene Punkte klar. - Eskaliere bei Unklarheiten oder potenziellen Risiken. +## Datenzugriff + +### REST API (`/api/v1/`) +Die Stiftungsverwaltung bietet Read-Only API-Endpunkte für alle Kernmodelle. Authentifizierung über Token (`Authorization: Token `). + +| Endpunkt | Daten | +|---|---| +| `/api/v1/destinataere/` | Destinatäre mit Unterstützungen | +| `/api/v1/laendereien/` | Ländereien mit Verpachtungen | +| `/api/v1/paechter/` | Pächter mit Verträgen | +| `/api/v1/foerderungen/` | Förderungen mit Status | +| `/api/v1/konten/` | Stiftungskonten | +| `/api/v1/verpachtungen/` | Pachtverträge | +| `/api/v1/verwaltungskosten/` | Verwaltungskosten | +| `/api/v1/kalender/` | Termine und Fristen | +| `/api/v1/transaktionen/` | Banktransaktionen | + +Token erstellen: `python manage.py create_agent_token ` + +### Wissensbasis (`knowledge/`) +Stabile Stiftungsinformationen als Markdown-Dateien: +- `knowledge/satzung.md` — Stiftungssatzung und Zwecke +- `knowledge/richtlinien.md` — Förderrichtlinien +- `knowledge/verfahren.md` — Verwaltungsverfahren und Abläufe +- `knowledge/kontakte.md` — Wichtige Kontakte +- `knowledge/historie.md` — Stiftungsgeschichte + ## Grenzen - Du triffst keine eigenständigen Entscheidungen über Architektur oder Technologieauswahl ohne Rücksprache. diff --git a/app/core/settings.py b/app/core/settings.py index 2655e10..b874a11 100644 --- a/app/core/settings.py +++ b/app/core/settings.py @@ -34,6 +34,7 @@ INSTALLED_APPS = [ "django.contrib.staticfiles", "django.contrib.humanize", "rest_framework", + "rest_framework.authtoken", "django_otp", "django_otp.plugins.otp_totp", "django_otp.plugins.otp_static", @@ -99,6 +100,15 @@ STATICFILES_DIRS = [ ] DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" + +REST_FRAMEWORK = { + "DEFAULT_AUTHENTICATION_CLASSES": [ + "rest_framework.authentication.TokenAuthentication", + ], + "DEFAULT_PERMISSION_CLASSES": [ + "rest_framework.permissions.IsAuthenticated", + ], +} MEDIA_URL = "/media/" MEDIA_ROOT = BASE_DIR / "media" diff --git a/app/core/urls.py b/app/core/urls.py index b98381a..1e8c316 100644 --- a/app/core/urls.py +++ b/app/core/urls.py @@ -7,6 +7,7 @@ from django.urls import include, path from stiftung.views import home urlpatterns = [ + path("api/v1/", include("stiftung.api_urls")), path("", include("stiftung.urls")), path("admin/", admin.site.urls), # Authentication URLs diff --git a/app/stiftung/api_serializers.py b/app/stiftung/api_serializers.py new file mode 100644 index 0000000..8c0dc35 --- /dev/null +++ b/app/stiftung/api_serializers.py @@ -0,0 +1,88 @@ +from rest_framework import serializers + +from .models import ( + BankTransaction, + Destinataer, + DestinataerUnterstuetzung, + Foerderung, + Land, + LandVerpachtung, + Paechter, + StiftungsKalenderEintrag, + StiftungsKonto, + Verwaltungskosten, +) + + +class DestinataerUnterstuetzungSerializer(serializers.ModelSerializer): + class Meta: + model = DestinataerUnterstuetzung + fields = "__all__" + + +class DestinataerSerializer(serializers.ModelSerializer): + unterstuetzungen = DestinataerUnterstuetzungSerializer(many=True, read_only=True) + + class Meta: + model = Destinataer + fields = "__all__" + + +class LandVerpachtungSerializer(serializers.ModelSerializer): + class Meta: + model = LandVerpachtung + fields = "__all__" + + +class LandSerializer(serializers.ModelSerializer): + aktive_verpachtungen = serializers.SerializerMethodField() + + class Meta: + model = Land + fields = "__all__" + + def get_aktive_verpachtungen(self, obj): + qs = obj.neue_verpachtungen.filter(status="aktiv") + return LandVerpachtungSerializer(qs, many=True).data + + +class PaechterSerializer(serializers.ModelSerializer): + aktive_verpachtungen = serializers.SerializerMethodField() + + class Meta: + model = Paechter + fields = "__all__" + + def get_aktive_verpachtungen(self, obj): + qs = obj.neue_verpachtungen.filter(status="aktiv") + return LandVerpachtungSerializer(qs, many=True).data + + +class FoerderungSerializer(serializers.ModelSerializer): + class Meta: + model = Foerderung + fields = "__all__" + + +class StiftungsKontoSerializer(serializers.ModelSerializer): + class Meta: + model = StiftungsKonto + fields = "__all__" + + +class VerwaltungskostenSerializer(serializers.ModelSerializer): + class Meta: + model = Verwaltungskosten + fields = "__all__" + + +class StiftungsKalenderEintragSerializer(serializers.ModelSerializer): + class Meta: + model = StiftungsKalenderEintrag + fields = "__all__" + + +class BankTransactionSerializer(serializers.ModelSerializer): + class Meta: + model = BankTransaction + fields = "__all__" diff --git a/app/stiftung/api_urls.py b/app/stiftung/api_urls.py new file mode 100644 index 0000000..f059c6d --- /dev/null +++ b/app/stiftung/api_urls.py @@ -0,0 +1,26 @@ +from rest_framework.routers import DefaultRouter + +from .api_views import ( + BankTransactionViewSet, + DestinataerViewSet, + FoerderungViewSet, + LandVerpachtungViewSet, + LandViewSet, + PaechterViewSet, + StiftungsKalenderEintragViewSet, + StiftungsKontoViewSet, + VerwaltungskostenViewSet, +) + +router = DefaultRouter() +router.register(r"destinataere", DestinataerViewSet) +router.register(r"laendereien", LandViewSet) +router.register(r"paechter", PaechterViewSet) +router.register(r"foerderungen", FoerderungViewSet) +router.register(r"konten", StiftungsKontoViewSet) +router.register(r"verpachtungen", LandVerpachtungViewSet) +router.register(r"verwaltungskosten", VerwaltungskostenViewSet) +router.register(r"kalender", StiftungsKalenderEintragViewSet) +router.register(r"transaktionen", BankTransactionViewSet) + +urlpatterns = router.urls diff --git a/app/stiftung/api_views.py b/app/stiftung/api_views.py new file mode 100644 index 0000000..ef46365 --- /dev/null +++ b/app/stiftung/api_views.py @@ -0,0 +1,69 @@ +from rest_framework.viewsets import ReadOnlyModelViewSet + +from .api_serializers import ( + BankTransactionSerializer, + DestinataerSerializer, + FoerderungSerializer, + LandSerializer, + LandVerpachtungSerializer, + PaechterSerializer, + StiftungsKalenderEintragSerializer, + StiftungsKontoSerializer, + VerwaltungskostenSerializer, +) +from .models import ( + BankTransaction, + Destinataer, + Foerderung, + Land, + LandVerpachtung, + Paechter, + StiftungsKalenderEintrag, + StiftungsKonto, + Verwaltungskosten, +) + + +class DestinataerViewSet(ReadOnlyModelViewSet): + queryset = Destinataer.objects.all() + serializer_class = DestinataerSerializer + + +class LandViewSet(ReadOnlyModelViewSet): + queryset = Land.objects.all() + serializer_class = LandSerializer + + +class PaechterViewSet(ReadOnlyModelViewSet): + queryset = Paechter.objects.all() + serializer_class = PaechterSerializer + + +class FoerderungViewSet(ReadOnlyModelViewSet): + queryset = Foerderung.objects.all() + serializer_class = FoerderungSerializer + + +class StiftungsKontoViewSet(ReadOnlyModelViewSet): + queryset = StiftungsKonto.objects.all() + serializer_class = StiftungsKontoSerializer + + +class LandVerpachtungViewSet(ReadOnlyModelViewSet): + queryset = LandVerpachtung.objects.all() + serializer_class = LandVerpachtungSerializer + + +class VerwaltungskostenViewSet(ReadOnlyModelViewSet): + queryset = Verwaltungskosten.objects.all() + serializer_class = VerwaltungskostenSerializer + + +class StiftungsKalenderEintragViewSet(ReadOnlyModelViewSet): + queryset = StiftungsKalenderEintrag.objects.all() + serializer_class = StiftungsKalenderEintragSerializer + + +class BankTransactionViewSet(ReadOnlyModelViewSet): + queryset = BankTransaction.objects.all() + serializer_class = BankTransactionSerializer diff --git a/app/stiftung/management/commands/create_agent_token.py b/app/stiftung/management/commands/create_agent_token.py new file mode 100644 index 0000000..33a4b38 --- /dev/null +++ b/app/stiftung/management/commands/create_agent_token.py @@ -0,0 +1,28 @@ +from django.contrib.auth import get_user_model +from django.core.management.base import BaseCommand, CommandError +from rest_framework.authtoken.models import Token + + +class Command(BaseCommand): + help = "Erstellt oder gibt ein API-Token für einen Django-User aus (für Agent-Zugriff)" + + def add_arguments(self, parser): + parser.add_argument("username", type=str, help="Django-Username") + + def handle(self, *args, **options): + User = get_user_model() + username = options["username"] + + try: + user = User.objects.get(username=username) + except User.DoesNotExist: + raise CommandError(f'User "{username}" nicht gefunden.') + + token, created = Token.objects.get_or_create(user=user) + + if created: + self.stdout.write(self.style.SUCCESS(f"Neues Token erstellt für {username}:")) + else: + self.stdout.write(self.style.WARNING(f"Bestehendes Token für {username}:")) + + self.stdout.write(token.key) diff --git a/deploy-production/docker-compose.prod.yml b/deploy-production/docker-compose.prod.yml index ca7f8f5..7b4b4c5 100644 --- a/deploy-production/docker-compose.prod.yml +++ b/deploy-production/docker-compose.prod.yml @@ -66,6 +66,15 @@ services: - DJANGO_SECRET_KEY=${DJANGO_SECRET_KEY} - DJANGO_DEBUG=${DJANGO_DEBUG} - REDIS_URL=${REDIS_URL} + - IMAP_HOST=${IMAP_HOST} + - IMAP_PORT=${IMAP_PORT} + - IMAP_USER=${IMAP_USER} + - IMAP_PASSWORD=${IMAP_PASSWORD} + - IMAP_FOLDER=${IMAP_FOLDER} + - IMAP_USE_SSL=${IMAP_USE_SSL} + - PAPERLESS_API_URL=${PAPERLESS_API_URL} + - PAPERLESS_API_TOKEN=${PAPERLESS_API_TOKEN} + - PAPERLESS_DESTINATAERE_TAG_ID=${PAPERLESS_DESTINATAERE_TAG_ID} depends_on: - redis - db @@ -83,6 +92,15 @@ services: - DJANGO_SECRET_KEY=${DJANGO_SECRET_KEY} - DJANGO_DEBUG=${DJANGO_DEBUG} - REDIS_URL=${REDIS_URL} + - IMAP_HOST=${IMAP_HOST} + - IMAP_PORT=${IMAP_PORT} + - IMAP_USER=${IMAP_USER} + - IMAP_PASSWORD=${IMAP_PASSWORD} + - IMAP_FOLDER=${IMAP_FOLDER} + - IMAP_USE_SSL=${IMAP_USE_SSL} + - PAPERLESS_API_URL=${PAPERLESS_API_URL} + - PAPERLESS_API_TOKEN=${PAPERLESS_API_TOKEN} + - PAPERLESS_DESTINATAERE_TAG_ID=${PAPERLESS_DESTINATAERE_TAG_ID} depends_on: - redis - db diff --git a/knowledge/README.md b/knowledge/README.md new file mode 100644 index 0000000..04ddf9c --- /dev/null +++ b/knowledge/README.md @@ -0,0 +1,30 @@ +# Wissensbasis – van Hees-Theyssen-Vogel'sche Stiftung + +Dieses Verzeichnis enthält langfristig stabiles Stiftungswissen als Referenz für alle Agents und Mitarbeiter. + +## Dateien + +| Datei | Inhalt | +|---|---| +| [satzung.md](satzung.md) | Stiftungsname, Zweck, Förderberechtigte, Organe | +| [richtlinien.md](richtlinien.md) | Förderrichtlinien, Einkommensgrenzen, Nachweisfristen | +| [verfahren.md](verfahren.md) | Verwaltungsabläufe: Anträge, E-Mail, Pacht, Backup | +| [kontakte.md](kontakte.md) | Institutionelle Kontakte (Behörden, Berater) | +| [historie.md](historie.md) | Stiftungsgeschichte und Meilensteine | + +## Wichtige Hinweise + +- **Keine personenbezogenen Daten** von Destinatären in dieser Wissensbasis +- Angaben mit `[TODO]` müssen manuell aus Originalunterlagen ergänzt werden +- Operative Daten (Destinatäre, Zahlungen, Ländereien) befinden sich in der Datenbank +- Diese Dateien sind Strukturwissen, nicht Echtzeitdaten + +## Pflege + +Diese Dateien sollten aktualisiert werden bei: +- Satzungsänderungen +- Änderungen der Förderkriterien +- Wechsel externer Dienstleister/Behörden +- Wesentlichen Änderungen der Verwaltungsverfahren + +*Erstellt: 2026-03 durch RentmeisterAI* diff --git a/knowledge/bedienungsanleitung_email_eingang.md b/knowledge/bedienungsanleitung_email_eingang.md new file mode 100644 index 0000000..2bbb6b2 --- /dev/null +++ b/knowledge/bedienungsanleitung_email_eingang.md @@ -0,0 +1,163 @@ +# Bedienungsanleitung: E-Mail-Eingangsverarbeitung für Destinatäre + +> VHTV-Stiftung | Stand: März 2026 + +--- + +## 1. Überblick + +Das E-Mail-Eingangssystem verarbeitet automatisch eingehende E-Mails von Destinatären. Eingehende Nachrichten an **paperless@vhtv-stiftung.de** werden alle 15 Minuten abgerufen, dem richtigen Destinatär zugeordnet und Anhänge in Paperless-NGX archiviert. + +**Typische Inhalte:** Studien- und Ausbildungsnachweise, Quartalsbelege, Anträge, allgemeine Korrespondenz. + +--- + +## 2. So funktioniert der Workflow + +``` +E-Mail eingehend + │ + â–¼ +Automatischer Abruf (alle 15 Min.) + │ + â–¼ +Absender-Zuordnung ──► Bekannter Destinatär? ──► Ja: Status "zugewiesen" + │ Anhänge → Paperless + │ + â–¼ Nein +Status "unbekannt" → Manuelle Zuordnung nötig +``` + +1. **E-Mail-Eingang:** Jan Siebels leitet Destinatär-Emails von jan.siebels@gmail.com an paperless@vhtv-stiftung.de weiter. +2. **Automatische Zuordnung:** Das System gleicht die Absender-E-Mail mit den hinterlegten E-Mail-Adressen der aktiven Destinatäre ab. +3. **Anhänge:** Werden automatisch in Paperless-NGX hochgeladen und mit dem Tag `Stiftung_Destinatäre` versehen. +4. **Unbekannte Absender:** Erhalten den Status `unbekannt` und müssen manuell zugeordnet werden. + +--- + +## 3. E-Mail-Eingang aufrufen + +Öffnen Sie im Hauptmenü der Stiftungsverwaltung: + +**Pfad:** `/email-eingang/` + +### 3.1 Listenansicht + +Die Übersicht zeigt: + +- **Statuskarten** oben: Gesamtzahl, Neue, Unbekannte, Fehler +- **Tabelle** mit allen eingegangenen E-Mails: + - Eingangsdatum + - Absender (Name und E-Mail) + - Zugeordneter Destinatär + - Betreff + - Anzahl Anhänge + - Status + +**Filtern und Suchen:** +- **Suchfeld:** Durchsucht Absender, Betreff und Destinatär-Namen +- **Status-Filter:** Dropdown zur Einschränkung nach Status (Neu, Zugewiesen, Verarbeitet, Unbekannt, Fehler) + +### 3.2 Detailansicht + +Klicken Sie auf eine E-Mail, um die Details zu sehen (`/email-eingang//`): + +- Vollständiger E-Mail-Text +- Anhänge mit Direktlinks zu Paperless-NGX +- Zuordnungsinformationen +- Fehlermeldungen (falls vorhanden) + +--- + +## 4. Häufige Aufgaben + +### 4.1 Unbekannten Absender zuordnen + +1. Öffnen Sie die E-Mail mit Status `unbekannt` +2. Im Seitenbereich **"Destinatär zuordnen"**: Wählen Sie den richtigen Destinatär aus dem Dropdown +3. Klicken Sie **"Zuordnen"** +4. Der Status wechselt automatisch zu `zugewiesen` + +### 4.2 E-Mail als verarbeitet markieren + +1. Öffnen Sie die zugewiesene E-Mail +2. Im Seitenbereich **"Als verarbeitet markieren"**: + - Optional: Notizen zur Bearbeitung eintragen +3. Klicken Sie **"Verarbeitet"** +4. Der Status wechselt zu `verarbeitet` + +### 4.3 Interne Notizen hinzufügen + +1. Öffnen Sie eine E-Mail +2. Im Bereich **"Interne Notizen"**: Text eingeben +3. Klicken Sie **"Speichern"** + +Notizen sind nur intern sichtbar und dienen der Dokumentation der Bearbeitung. + +### 4.4 E-Mails manuell abrufen + +Falls Sie nicht auf den nächsten automatischen Abruf warten möchten: + +1. In der Listenansicht: Klicken Sie **"Jetzt abrufen"** +2. Der Abruf startet im Hintergrund +3. Neue E-Mails erscheinen nach dem Neuladen der Seite + +--- + +## 5. Status-Übersicht + +| Status | Bedeutung | Aktion erforderlich? | +|---|---|---| +| **Neu** | Gerade eingegangen, Destinatär zugeordnet | Inhalt prüfen, ggf. verarbeiten | +| **Zugewiesen** | Destinatär wurde zugeordnet | Inhalt prüfen, dann verarbeiten | +| **Verarbeitet** | Bearbeitung abgeschlossen | Keine | +| **Unbekannt** | Absender konnte nicht zugeordnet werden | Manuell zuordnen | +| **Fehler** | Technischer Fehler bei Verarbeitung | SysAdmin informieren | + +--- + +## 6. Anhänge und Paperless-NGX + +Alle E-Mail-Anhänge werden automatisch in Paperless-NGX gespeichert: + +- **Tag:** `Stiftung_Destinatäre` +- **Korrespondent:** Name des zugeordneten Destinatärs +- **Zugriff:** Direktlinks in der Detailansicht der E-Mail + +Um Anhänge in Paperless einzusehen, klicken Sie auf den jeweiligen Dokumentlink in der Detailansicht. + +--- + +## 7. Empfohlener Bearbeitungsablauf + +1. **Täglich** die Listenansicht öffnen (`/email-eingang/`) +2. **Statuskarten** prüfen: Gibt es neue oder unbekannte E-Mails? +3. **Unbekannte Absender** zuerst zuordnen +4. **Neue E-Mails** inhaltlich prüfen: + - Handelt es sich um einen Studiennachweis? → Zum Quartalsnachweis verknüpfen + - Allgemeine Korrespondenz? → Notizen ergänzen +5. **Als verarbeitet markieren** wenn erledigt + +--- + +## 8. Fehlerbehebung + +| Problem | Lösung | +|---|---| +| Keine neuen E-Mails trotz Weiterleitung | "Jetzt abrufen" klicken; ggf. SysAdmin kontaktieren | +| Anhänge fehlen in Paperless | Paperless-API-Verbindung prüfen (SysAdmin) | +| Status "Fehler" | Fehlerdetails in der Detailansicht lesen; SysAdmin informieren | +| Falscher Destinatär zugeordnet | In Detailansicht korrekten Destinatär neu zuordnen | + +--- + +## 9. Technische Hinweise (für Administratoren) + +- **E-Mail-Postfach:** paperless@vhtv-stiftung.de (IMAP, SSL, Port 993) +- **Polling-Intervall:** Alle 15 Minuten via Celery Beat +- **Duplikaterkennung:** Basierend auf Absender, Datum und Betreff +- **Konfiguration:** Umgebungsvariablen in der Docker-Compose-Datei + +--- + +*VHTV-Stiftung | Bedienungsanleitung E-Mail-Eingang | Stand: März 2026* diff --git a/knowledge/bedienungsanleitung_email_eingang.pdf b/knowledge/bedienungsanleitung_email_eingang.pdf new file mode 100644 index 0000000..cab4b26 --- /dev/null +++ b/knowledge/bedienungsanleitung_email_eingang.pdf @@ -0,0 +1,124 @@ +%PDF-1.4 +%“Œ‹ž ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 6 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/BaseFont /Helvetica-BoldOblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font +>> +endobj +5 0 obj +<< +/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 11 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/BaseFont /Symbol /Name /F4 /Subtype /Type1 /Type /Font +>> +endobj +7 0 obj +<< +/Contents 13 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 11 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +8 0 obj +<< +/Contents 14 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 11 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +9 0 obj +<< +/PageMode /UseNone /Pages 11 0 R /Type /Catalog +>> +endobj +10 0 obj +<< +/Author (\(anonymous\)) /CreationDate (D:20260309224153+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260309224153+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False +>> +endobj +11 0 obj +<< +/Count 3 /Kids [ 5 0 R 7 0 R 8 0 R ] /Type /Pages +>> +endobj +12 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1781 +>> +stream +Gau0DD/Yn7&H88.1$U.\A.pV(Ce(C%;^HifF?TNTdj`^ZD$I=(/Em5X27alZZcc"W0/62T6jZV=jdG;"H"Ifr6i(EWpG)qt3JZWr%%%Lq!17Q40`M.9o:rKZXLuuf/T5B")2q'qMbUl6h++Auk-S;4d0cs]e:W$?$eiBY]qB6.jk.YZ]]!g%kN>&$?D9)Lk&Q`-)55.8drUn+Jb^rQBO=@k5190X/G?#n`NhZ')T1]W'A]TVkEp39)I;fZE5=t"3#?VS$.KD6Xqh0n#d0]&X5FE89Lta\3NfEe6Mgbq@?W0VjQJ8L4Dr#W$[<(,#+a_UpZ]s#dpSJu^u5#!Af6s7$!\;qG@1quY7$q1!tU#gqK[9q9hMuTNdn]*P%KCb>]4@O-IW;"&]&;@nt%f9@;7J(XrPJfTNX`m\NV"&B/a=94i+Dr,FHSePN>11TIP#VGK*S6:d=oEAf*n+"IK59ZR"\$8=(JB?%sLp+3PU%\4PaNIRjjllg(PNHC'!s.^9C!,.nl0\.Df?dE%45'Sm[24n9]k$E;B>`i+a-e)hBKF%dPjr64nRM@H^+r[D9JPmOa(TFhV@_pCsZ-[5X#_gKEUara$3r5$);kHsWDDSS>b(?*W2aDDC/kidMa"lW?@%t)umH?d$hU_2O/NX<'A[oU5lO1*2'NE")kOftFHY,J7WlFk\NXjomVJSNI2Vj&gHS5Qj_[O'0%/_Oj\E8s=X**6qi`m?7PX]8"qcTLW)-1)"?NjnPd'JUl46A<=."[2m(HnNdS8@aPrQT&!LSsqeV,l>L-uB%7!=stMG^I'P!BI>'gC"(>`iMGDn:p,X=c?8-D^qk]3^$*lP(^Ej[o2-$[;?AW5^qJhZ"kF$^R]s(#8euRq3!*0*s=T]j>,8?dc"WC]:0l=0L'A9hMSa4h_fQ=;Oh?n-OZ.dn/>4HB6QIsqJ_9OFmJoSl,,"[,?,\6[jLRA".sZ"1"#\'VEIE[@'UUU[>(W$U7;QdaMtPKmapRVDu4Do?=Kcc#l9OsX'\p'i@+*XSsf>Xo&RtJ^rYE\NH1KddTh!iqbToO`c]ueqNAm)Wm;aT)(_AD?@u=2r,RRVSuLf):MqHrU=,esFVQ\Fb-g))l.N='oBu7u$.^U5i8<\A'pJ.PROX]Q@X`c8GSlQ@:/Ne"&lXEc*?]0R+MrS`piHURZX61iN,%U$?ST\LM>c_3$BbKB'&k/eA4mCF%7o^",NrO:\QVH9`4h\+5dXH-^'X"c5aE:+CefJ!UJ/KGT^%*kEHDF5g$kfD7VaQga;W43%Ra"`s!bLDaqSIbC5OO4+NE:&*$@+lC5^U@U7@)aU7!;-!I?dM#20tIfNKHUfdoM6Z:X/Md)1@!GS+e/P#t3Bb@o)U`T\/4'dA)iOT''r!1VLDpV^fB&WF3*%7%:&g;Eo`YqJ7!K@F9)@.h$I*e-u8?YAZf48,i\.<`30~>endstream +endobj +13 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1861 +>> +stream +Gau0D>BALf'Roe[30T+-ai#sH&jgU[4Cf):cG`KbBfd2E3l7u:#&1?=+&AecoN'X]%bBNC3&V2+>8G7+=n;<4`UGO$qlP[nq*Q+&Z0U85''6mooX+Z0>[VRa;eJRqZ&Hhu.M+a@Dss01.6(Q;!6+nFVMBVCI7+ENr7:\N.+p.A5Y4hkP_!kFg*.GCf,1ZV.@`Ci_YCopm*^K\&r9mtaq2mrr\3A,f.)/78iRq;'4ORd$B[L4K+>P`1Y]W25cHTY$,HKpW_nEU*9QjiDS*2!)-dZJl+\?kdo26$_R;_nEI8W*WX1h`E0oZ@Pj0WD4?,LYe#ChC\mG-P>f![N9hJVMfCVs"e6WAr2g!IiW3&5T$3LuY:KfL_`kMmaiVH([p>(hiOfY&I5,oWIj<-nnKG`tC-;D2VGPok,Uh:?l0*^ohj9=>11gkdAM1dfD6GbPNH**PVN("<2GaYMiW\A5&!G"LMeJI+/`d_4DpGPR2;C^enD-egfJLpG9]8U*p?)c8^Y6/`%apQ2AkpM[W1/K&U#TSWFZ*@-k4Np&("oYT6V\qbl0?krANFi4D&@HEj8@nr%jN/L.S1bRUftSI@Ddo()9'Ml)AG_RF@3+GT5K7)pF?E-*.iE`*7n$l9?mQ*SX)i=mTm-5-I'n:irLE,1Z6BLbH3T[VfpDK/4::D,(hh5`ThBJ)1;&kZHcM%6UP%CW2`2$[PAGcJaX6Ygl<1Y`usnGu\%4f:jii/p^naO2Z"FZ%&_a'ICC<_DXi3/GBnC/qi:fKN9&NNRF-D:(%udR$R<29$ui7;jjB'#iXUB*Z.[*?kS1pMmE>kT"MKJI@Q#$a,2ZfMf\ZE8R8b0'ED)E>4S=VCI/s4nB!Hs)3(7>o/MK%AIGqUMe:Gdp$aHk'$dFWj5p2(hk_e"Vg,NR=k(8,LZQ/Z.M3u/^?^mkWm8DdFV,/s`M=BnWP,eHj/XjBk+`c=P0^.0&-5UY[jZZ`9T3q.>0gendstream +endobj +14 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 802 +>> +stream +Gau0A968fP%)2<`FWSL-^7&i`TF.\]M*PS,K=CQchmUif8$l$;]!+`'@"5'sm;*-$6%9#f+*h!&`?q9lEE%e/K4#:AJ^Gg""usPD=2r(J7%/\L/+("RfO4\B$EKkIl5A;6>,0*LAM%1'H0`OcWRk5h:P)'kXCn_@X7A!OH^Z/*?/4Q&-e7^e9oT3dQa1a@h(@(CBR\Ku$\Z5>duh2:kh<($ULP'rL4%kWSZGd=3TU.cqHTXsi?co'cAoT;\W-c'@3_))YYi8EsJ^ba,2R=%0hQ9'fD(-r,<]f`,7b5'-be;WpX;E%1G8qLZ.l0*Q:#'GuN#^Okn6?2W?E1oCV.&VZ(WRfAPo%#*(eL[p13RN&/]jtaK#O]gkN7%3/FRKf>?fdimH~>endstream +endobj +xref +0 15 +0000000000 65535 f +0000000061 00000 n +0000000122 00000 n +0000000229 00000 n +0000000341 00000 n +0000000460 00000 n +0000000665 00000 n +0000000742 00000 n +0000000947 00000 n +0000001152 00000 n +0000001221 00000 n +0000001502 00000 n +0000001574 00000 n +0000003447 00000 n +0000005400 00000 n +trailer +<< +/ID +[] +% ReportLab generated PDF document -- digest (opensource) + +/Info 10 0 R +/Root 9 0 R +/Size 15 +>> +startxref +6293 +%%EOF diff --git a/knowledge/historie.md b/knowledge/historie.md new file mode 100644 index 0000000..ff37a70 --- /dev/null +++ b/knowledge/historie.md @@ -0,0 +1,90 @@ +# Stiftungsgeschichte + +> **Status:** Grundstruktur angelegt. Inhalte aus der Datenbank-Tabelle `GeschichteSeite` sind zu entnehmen. +> Die Verwaltungssoftware enthält ein Wiki-ähnliches Modul (`Geschichte`) unter `/geschichte/`, +> in dem die Stiftungsgeschichte gepflegt wird. + +--- + +## Hinweis zur Datenpflege + +Die Stiftungsgeschichte wird primär in der **Django-App** gepflegt: +- **URL:** `/geschichte/` +- **Modell:** `GeschichteSeite` (Markdown-Seiten) + `GeschichteBild` (Bilder) +- Seiten sind sortierbar und können mit Bildern versehen werden +- Bearbeitungsrecht erfordert Berechtigung `change_geschichteseite` + +Diese Datei dient als **statischer Referenzpunkt** für Agents. Für aktuelle und detaillierte Inhalte ist die Datenbank maßgeblich. + +--- + +## Stiftungsname und Familienhintergrund + +Die **van Hees-Theyssen-Vogel'sche Stiftung** (VHTV) ist eine Familienstiftung, deren Name auf die Gründerfamilien(zweige) zurückgeht: +- van Hees +- Theyssen +- Vogel + +[TODO: Herkunft und Bedeutung dieser Familiennamen aus Stiftungsunterlagen ergänzen] + +--- + +## Gründungsgeschichte + +[TODO: Folgende Angaben aus der Datenbank (GeschichteSeite) oder Stiftungsunterlagen entnehmen] + +- **Gründungsjahr:** [TODO] +- **Gründer(in):** [TODO] +- **Gründungsanlass:** [TODO] +- **Ursprüngliches Stiftungsvermögen:** [TODO] +- **Ursprünglicher Stiftungszweck:** [TODO] + +--- + +## Historische Entwicklung + +[TODO: Wichtige Meilensteine in chronologischer Reihenfolge aus Stiftungsunterlagen eintragen] + +| Jahr | Ereignis | +|---|---| +| [TODO] | Gründung der Stiftung | +| [TODO] | [Weitere Meilensteine] | +| [TODO] | Erste digitale Verwaltung | +| 2024/2025 | Einführung der modernen Django-Verwaltungssoftware | +| 2025 | Implementierung der automatischen E-Mail-Verarbeitung für Destinatäre | +| 2026 | Einführung KI-gestützter Stiftungsverwaltung (RentmeisterAI) | + +--- + +## Ländereien und Vermögensgeschichte + +[TODO: Geschichte des Landbesitzes beschreiben] + +- Die Stiftung verwaltet landwirtschaftliche Ländereien in der Region Hamminkeln/Kreis Wesel (NRW) +- Nutzungsarten: Grünland, Acker, Wald +- Die Ländereien werden verpachtet; der Pachtzins bildet einen wesentlichen Teil der Erträge + +--- + +## Digitalisierung der Verwaltung + +Die Stiftungsverwaltung wurde sukzessive modernisiert: + +- **Frühere Verwaltung:** [TODO: Wie wurde früher verwaltet?] +- **2024:** Entwicklung der Django-basierten Verwaltungssoftware +- **2025:** Integration von Paperless-NGX zur Dokumentenverwaltung +- **2025:** Automatische E-Mail-Verarbeitung für Destinatärs-Eingänge +- **2026:** KI-Unterstützung durch RentmeisterAI (Paperclip-Plattform) + +--- + +## Zugriff auf ausführliche Geschichte + +Die vollständige Stiftungsgeschichte mit Bildern und Artikeln ist in der Anwendung abrufbar: + +1. In der Verwaltungsoberfläche → Menüpunkt **Geschichte** +2. URL: `https://vhtv-stiftung.de/geschichte/` + +--- + +*Zuletzt aktualisiert: 2026-03 | Pflege der ausführlichen Geschichte: Verwaltungs-App unter /geschichte/* diff --git a/knowledge/kontakte.md b/knowledge/kontakte.md new file mode 100644 index 0000000..99f1fd2 --- /dev/null +++ b/knowledge/kontakte.md @@ -0,0 +1,105 @@ +# Wichtige Kontakte der Stiftung + +> **Datenschutzhinweis:** Diese Datei enthält ausschließlich institutionelle Kontakte (Behörden, externe Stellen). +> **Keine personenbezogenen Daten von Destinatären** werden hier gespeichert. +> Personenbezogene Daten von Rentmeistern und externen Dienstleistern nur in anonymisierter Form. + +--- + +## 1. Stiftung (Eigene Kontaktdaten) + +| Feld | Wert | +|---|---| +| Name | van Hees-Theyssen-Vogel'sche Stiftung | +| Adresse | Raesfelder Str. 3, 46499 Hamminkeln | +| E-Mail (Paperless/Eingang) | paperless@vhtv-stiftung.de | +| Website | https://vhtv-stiftung.de | + +--- + +## 2. Rentmeister / Geschäftsführung + +Die aktuell aktiven Rentmeister sind im System unter `/rentmeister/` (Geschäftsführung) einsehbar. + +> **Hinweis:** Aus Datenschutzgründen werden hier keine Namen oder persönlichen Kontaktdaten gespeichert. Die aktuellen Rentmeister sind in der Datenbank (`Rentmeister`-Tabelle) hinterlegt. + +--- + +## 3. Steuerberater + +[TODO: Kanzleiname, Adresse, Telefon, E-Mail eintragen] + +- **Kanzlei:** [TODO] +- **Ansprechpartner:** [TODO] +- **Adresse:** [TODO] +- **Telefon:** [TODO] +- **E-Mail:** [TODO] +- **Zuständig für:** Jahresabschluss, Gemeinnützigkeitsrecht, Steuererklärungen + +--- + +## 4. Notar + +[TODO: Notariat und Kontakt eintragen] + +- **Notariat:** [TODO] +- **Ansprechpartner:** [TODO] +- **Adresse:** [TODO] +- **Telefon:** [TODO] +- **Zuständig für:** Satzungsänderungen, Grundstücksangelegenheiten + +--- + +## 5. Bankverbindungen + +Die Bankkonten der Stiftung sind im System unter `/konten/` (Geschäftsführung → Konten) einsehbar. + +> **Sicherheitshinweis:** Kontodaten (IBAN, BIC) werden ausschließlich in der Datenbank gespeichert, nicht in dieser Datei. + +[TODO: Hauptbank und Kontoart eintragen (ohne IBAN)] + +- **Hauptbank:** [TODO – z. B. Sparkasse, Volksbank, etc.] +- **Konto-Typ:** [TODO] + +--- + +## 6. Stiftungsaufsicht + +- **Behörde:** [TODO – Bezirksregierung Düsseldorf? Hamminkeln liegt im Kreis Wesel, Regierungsbezirk Düsseldorf] +- **Referat:** [TODO] +- **Adresse:** [TODO] +- **Telefon:** [TODO] +- **Aktenzeichen:** [TODO] + +--- + +## 7. Finanzamt + +- **Finanzamt:** [TODO – zuständiges Finanzamt für Hamminkeln/Kreis Wesel] +- **Steuernummer:** [TODO] +- **Freistellungsbescheid:** [TODO – Datum des letzten Freistellungsbescheids] + +--- + +## 8. Amtsgericht / Grundbuch + +Für Grundstücksangelegenheiten zuständig: +- **Amtsgericht:** [TODO – Amtsgericht Wesel? Hamminkeln liegt im Kreis Wesel] +- **Grundbuchamt:** [TODO] +- **Kontakt:** [TODO] + +--- + +## 9. Sonstige externe Stellen + +### Landwirtschaft / Ländereien +- **Landwirtschaftskammer NRW:** [TODO] +- **Katasteramt Kreis Wesel:** [TODO] + +### IT / Hosting +- **Server-Hosting:** [TODO – Hoster für vhtv-stiftung.de] +- **Paperless-NGX Installation:** https://vhtv-stiftung.de/paperless + +--- + +*Zuletzt aktualisiert: 2026-03 | Hinweis: Alle mit [TODO] markierten Felder sind manuell zu ergänzen* diff --git a/knowledge/richtlinien.md b/knowledge/richtlinien.md new file mode 100644 index 0000000..1f69de7 --- /dev/null +++ b/knowledge/richtlinien.md @@ -0,0 +1,142 @@ +# Förderrichtlinien und Vergabekriterien + +> **Status:** Abgeleitet aus der Systemlogik der Verwaltungssoftware (models.py). +> Angaben mit [TODO] sind aus der formalen Richtliniendokumentation zu ergänzen. + +--- + +## 1. Förderberechtigung (Grundvoraussetzungen) + +Für eine laufende Unterstützung durch die Stiftung müssen **alle drei** Voraussetzungen erfüllt sein: + +### 1.1 Abstammungsnachweis +- Der Antragsteller muss **Abkömmling gemäß Satzung** sein (`ist_abkoemmling`) +- [TODO: Welche Abstammungsnachweise sind zu erbringen?] + +### 1.2 Einkommensgrenzen +Die monatlichen Bezüge dürfen eine Einkommensgrenze nicht überschreiten: + +| Haushaltsgröße | Max. monatliche Bezüge | +|---|---| +| 1 Person | 2.815,00 € | +| 2 Personen | 3.265,40 € | +| 3 Personen | 3.715,80 € | +| n Personen | 2.815,00 € + (n-1) × 450,40 € | + +**Berechnungsgrundlage:** Regelsatz 563 € × 5 (Basis) + 0,8 × Regelsatz je weitere Haushaltsperson + +### 1.3 Vermögensgrenze +- Eigenvermögen ≤ **15.500 €** + +--- + +## 2. Förderkategorien + +| Kategorie | Beschreibung | +|---|---| +| `bildung` | Bildung und Studium | +| `forschung` | Wissenschaftliche Forschung | +| `kultur` | Kulturelle Projekte | +| `soziales` | Soziale Unterstützung | +| `umwelt` | Umweltschutz | +| `anderes` | Sonstiges | + +--- + +## 3. Laufende Unterstützungen (Destinatär-Unterstützungen) + +### 3.1 Zahlungsmodalitäten +- Zahlungen erfolgen **quartalsweise im Voraus** +- Betrag: individuell festgelegter **vierteljährlicher Betrag** je Destinatär +- Zahlung auf das hinterlegte Bankkonto des Destinatärs (IBAN) + +### 3.2 Zahlungsfristen (quartalsweise, im Voraus) + +| Quartal | Zahlungsfälligkeit | +|---|---| +| Q1 (Jan–Mär) | 15. Dezember (Vorjahr) | +| Q2 (Apr–Jun) | 15. März | +| Q3 (Jul–Sep) | 15. Juni | +| Q4 (Okt–Dez) | 15. September | + +### 3.3 Wiederkehrende Zahlungen +Folgende Zahlungsintervalle können eingerichtet werden: +- Monatlich +- Vierteljährlich (standard) +- Halbjährlich +- Jährlich + +--- + +## 4. Nachweispflichten (Vierteljahresnachweise) + +Destinatäre müssen quartalsweise folgende Nachweise einreichen: + +### 4.1 Pflichtbestandteile +1. **Studiennachweis** (sofern erforderlich) +2. **Einkommenssituation** – Bestätigung oder Beschreibung von Änderungen +3. **Vermögenssituation** – Bestätigung oder Beschreibung von Änderungen +4. Ggf. weitere Dokumente + +### 4.2 Fristen für Studiennachweise (semesterbasiert) +| Quartal | Studiennachweis-Frist | +|---|---| +| Q1 (Jan–Mär) | 15. März | +| Q2 (Apr–Jun) | 15. März | +| Q3 (Jul–Sep) | 15. September | +| Q4 (Okt–Dez) | 15. September | + +**Hintergrund:** Die Studiennachweise sind semesterbasiert (Wintersemester / Sommersemester), nicht quartalsbasiert. + +### 4.3 Nachweisstatus +| Status | Bedeutung | +|---|---| +| `offen` | Nachweis ausstehend | +| `teilweise` | Teilweise eingereicht | +| `eingereicht` | Vollständig eingereicht | +| `geprueft` | Geprüft & Freigegeben | +| `auto_geprueft` | Automatisch freigegeben (Semesterbasis) | +| `nachbesserung` | Nachbesserung erforderlich | +| `abgelehnt` | Abgelehnt | + +--- + +## 5. Einzel-Förderungen (Projektförderungen) + +### 5.1 Antragsprozess +[TODO: Formalen Antragsprozess beschreiben] + +Bekannte Felder aus der Förderungsdatenbank: +- Antragsteller (Destinatär) +- Jahr +- Betrag +- Kategorie +- Antragsdatum / Entscheidungsdatum +- Verwendungsnachweis + +### 5.2 Förderungsstatus +| Status | Bedeutung | +|---|---| +| `beantragt` | Antrag gestellt | +| `genehmigt` | Genehmigt, noch nicht ausgezahlt | +| `ausgezahlt` | Ausgezahlt | +| `abgelehnt` | Abgelehnt | +| `storniert` | Storniert | + +--- + +## 6. Prüfkriterien bei Förderanfragen + +Checkliste für die Prüfung von Förderanträgen: + +- [ ] Antragsteller ist Abkömmling gem. Satzung +- [ ] Einkommensgrenzen eingehalten +- [ ] Vermögensgrenze eingehalten +- [ ] Kategorie entspricht Stiftungszweck +- [ ] Betrag ist angemessen und plausibel +- [ ] Verwendungsnachweis planbar +- [ ] Kein Interessenkonflikt + +--- + +*Zuletzt aktualisiert: 2026-03 | Quelle: Systemanalyse models.py, Softwarelogik* diff --git a/knowledge/satzung.md b/knowledge/satzung.md new file mode 100644 index 0000000..63f95e7 --- /dev/null +++ b/knowledge/satzung.md @@ -0,0 +1,101 @@ +# Satzung und Stiftungszweck + +> **Status:** Abgeleitet aus dem Systemcode und den Datenmodellen der Verwaltungsanwendung. +> Angaben ohne Quellennachweis aus der Originalsatzung sind als **[TODO: aus Satzungsurkunde prüfen]** markiert. + +--- + +## 1. Stiftungsname und Sitz + +- **Name:** van Hees-Theyssen-Vogel'sche Stiftung +- **Kurzbezeichnung:** VHTV-Stiftung +- **Sitz:** Raesfelder Str. 3, 46499 Hamminkeln (Nordrhein-Westfalen) +- **Website / E-Mail:** vhtv-stiftung.de / paperless@vhtv-stiftung.de +- **Rechtsform:** Gemeinnützige Stiftung des bürgerlichen Rechts + +--- + +## 2. Stiftungszweck + +[TODO: Stiftungszweck(e) aus der Satzungsurkunde entnehmen und eintragen] + +Aus dem Systemcode ableitbar sind folgende Förderfelder, die die Stiftung in ihrer Verwaltungssoftware abbildet: + +- **Bildung** – Förderung von Ausbildung und Studium +- **Forschung** – Unterstützung wissenschaftlicher Arbeiten +- **Kultur** – Kulturelle Projekte und Aktivitäten +- **Soziales** – Soziale Unterstützungsleistungen +- **Umwelt** – Umweltschutz und Nachhaltigkeit +- **Anderes** – Sonstige zweckentsprechende Maßnahmen + +--- + +## 3. Förderberechtigter Personenkreis (Destinatäre) + +Die Stiftung fördert **Destinatäre** – natürliche Personen, die der Stifterfamilie angehören oder ihr nahestehen. + +### Familienzweige +Die Software unterscheidet folgende Familienzweige: +- Hauptzweig +- Nebenzweig +- Verwandt +- Anderer + +### Fördervoraussetzungen (gemäß Systemlogik) +Für eine Förderung/Unterstützung müssen kumulativ erfüllt sein: + +1. **Abkömmling gemäß Satzung** (`ist_abkoemmling = True`) +2. **Einkommensgrenzen eingehalten:** + - Basierend auf Regelsatz (563 €/Monat) + - Einkommensgrenze = 5 × Regelsatz für erste Person + 0,8 × Regelsatz je weiterer Haushaltsperson + - Beispiel Einzelperson: max. 2.815 €/Monat + - Beispiel 2 Personen: max. 3.265,40 €/Monat +3. **Vermögen ≤ 15.500 €** + +Diese Werte sind aus der Softwarelogik abgeleitet und sollten mit der Satzung abgeglichen werden. + +--- + +## 4. Organe der Stiftung + +[TODO: Organe und deren Zusammensetzung aus der Satzungsurkunde entnehmen] + +Aus dem System ableitbar: +- **Rentmeister / Geschäftsführung:** Hauptverwaltungsorgan, verwaltet Ländereien, Finanzen und Destinatäre +- [TODO: Vorstand? Kuratorium? Beirat? – aus Satzung prüfen] + +--- + +## 5. Stiftungsvermögen + +Das Stiftungsvermögen setzt sich zusammen aus: + +- **Immobilien / Ländereien:** Landwirtschaftliche Nutzflächen (Grünland, Acker, Wald) in verschiedenen Gemeinden des Kreises Wesel/NRW, die verpachtet werden +- **Bankkonten:** Stiftungskonten bei [TODO: Bank(en) eintragen] +- **Sonstige Vermögenswerte:** [TODO: ergänzen] + +Der Vermögenserhalt ist Grundprinzip der Stiftungsführung; Erträge werden für den Stiftungszweck eingesetzt. + +--- + +## 6. Wichtige Regelungen + +[TODO: Folgende Punkte aus der Satzungsurkunde entnehmen] + +- Regelungen zur Mittelverwendung +- Rechnungslegung und Berichtspflichten +- Satzungsänderungen und Auflösung +- Stiftungsaufsicht (zuständige Behörde: [TODO]) +- Steuerliche Anerkennung / Freistellungsbescheid [TODO: Finanzamt, AZ] + +--- + +## 7. Stiftungsaufsicht + +- **Zuständige Behörde:** [TODO: Bezirksregierung Düsseldorf? – prüfen, Hamminkeln liegt im Regierungsbezirk Düsseldorf] +- **Aktenzeichen Stiftungsregister:** [TODO] +- **Steuer-Nr. / Finanzamt:** [TODO] + +--- + +*Zuletzt aktualisiert: 2026-03 | Quelle: Systemanalyse der Verwaltungssoftware* diff --git a/knowledge/verfahren.md b/knowledge/verfahren.md new file mode 100644 index 0000000..d87916c --- /dev/null +++ b/knowledge/verfahren.md @@ -0,0 +1,176 @@ +# Verwaltungsverfahren und Abläufe + +> **Status:** Aus Systemcode, Celery-Tasks und App-Struktur abgeleitet. +> Punkte mit [TODO] sind manuell zu ergänzen. + +--- + +## 1. Antragsprozess für Förderungen + +### 1.1 Erstaufnahme eines Destinatärs +1. Destinatär-Datensatz anlegen (Django Admin oder Weboberfläche `/destinataere/`) +2. Pflichtfelder ausfüllen: + - Name, Geburtsdatum, E-Mail, Telefon + - Familienzweig + - `ist_abkoemmling` setzen + - Haushaltsgröße, monatliche Bezüge, Vermögen +3. Prüfung Fördervoraussetzungen (automatisch via `erfuellt_voraussetzungen()`) +4. `unterstuetzung_bestaetigt` setzen wenn Voraussetzungen erfüllt +5. Vierteljährlichen Betrag festlegen +6. Standard-Auszahlungskonto zuordnen + +### 1.2 Einzel-Förderungsantrag +1. Förderung anlegen unter `/foerderungen/` +2. Status beginnt mit `beantragt` +3. Prüfung durch Rentmeister +4. Entscheidung: `genehmigt` oder `abgelehnt` +5. Nach Auszahlung: Status auf `ausgezahlt` setzen +6. Verwendungsnachweis als Dokument in Paperless hochladen und verknüpfen + +--- + +## 2. Vierteljährliches Nachweisverfahren + +### 2.1 Ablauf +1. Zu Beginn jedes Quartals: VierteljahresNachweis-Datensätze für alle aktiven Destinatäre erstellen +2. Destinatäre werden benachrichtigt (per E-Mail, [TODO: Benachrichtigungsvorlage?]) +3. Destinatäre reichen Unterlagen ein: + - Per E-Mail an paperless@vhtv-stiftung.de (automatisch erfasst) + - Oder direkt über das Self-Service-Portal (sofern eingerichtet) +4. Rentmeister prüft eingegangene Unterlagen +5. Status aktualisieren: `eingereicht` → `geprueft` +6. Zahlung freigeben wenn Nachweis genehmigt + +### 2.2 Fristen (Überblick) +- **Studiennachweis:** 15. März (Q1/Q2) bzw. 15. September (Q3/Q4) +- **Zahlung:** 15. Dez. Vorjahr (Q1), 15. März (Q2), 15. Juni (Q3), 15. September (Q4) + +### 2.3 Automatische Freigabe +Bei Destinatären mit Semesterbasis-Studiennachweis kann eine automatische Freigabe erfolgen (`auto_geprueft`). + +--- + +## 3. E-Mail-Eingangsverarbeitung (Automatisiert) + +### 3.1 Übersicht +Das System verarbeitet automatisch eingehende E-Mails an `paperless@vhtv-stiftung.de`. + +**Technologie:** Celery Beat Task, läuft alle 15 Minuten + +### 3.2 Konfiguration +| Env-Variable | Standard | Bedeutung | +|---|---|---| +| `IMAP_HOST` | – | IMAP-Server (Pflicht) | +| `IMAP_PORT` | 993 | IMAP-Port (SSL) | +| `IMAP_USER` | paperless@vhtv-stiftung.de | Benutzername | +| `IMAP_PASSWORD` | – | Passwort (Pflicht) | +| `IMAP_FOLDER` | INBOX | E-Mail-Ordner | +| `IMAP_USE_SSL` | true | SSL verwenden | + +### 3.3 Workflow +1. System liest ungelesene E-Mails aus dem IMAP-Postfach +2. Absender-E-Mail wird mit Destinatär-Datenbank abgeglichen +3. `DestinataerEmailEingang`-Datensatz wird angelegt +4. Anhänge werden in **Paperless-NGX** hochgeladen mit Tag `Stiftung_Destinatäre` +5. Für jeden Anhang wird ein `DokumentLink` erstellt +6. Unbekannte Absender werden als `unbekannt` markiert (manuelle Nachbearbeitung nötig) + +### 3.4 Paperless-Tags +| Tag | Verwendung | +|---|---| +| `Stiftung_Destinatäre` | Dokumente von/für Destinatäre | +| `Stiftung_Land_und_Pächter` | Dokumente zu Ländereien/Pächtern | +| `Stiftung_Administration` | Verwaltungsdokumente | + +--- + +## 4. Pachtvertragsverwaltung + +### 4.1 Datenstruktur +- **Land** (Flurstück): Grundeinheit, identifiziert durch `lfd_nr` +- **LandVerpachtung**: Pachtvertrag (neue Struktur) +- **LandAbrechnung**: Jährliche Abrechnung je Flurstück + +### 4.2 Anlage eines Pachtvertrags +1. Land-Datensatz prüfen/anlegen (`/land/`) +2. Pächter anlegen (`/paechter/`) falls nicht vorhanden +3. LandVerpachtung anlegen (`/land//verpachtung/`) + - Vertragsnummer vergeben + - Pachtbeginn, Pachtende, Verlängerungsklausel + - Pachtzins (pro ha oder pauschal) + - Zahlungsweise + - USt-Option und Umlagen konfigurieren +4. System aktualisiert LandAbrechnung automatisch + +### 4.3 Pachtzins-Zahlungsweisen +| Option | Beschreibung | +|---|---| +| `jaehrlich` | Einmal jährlich | +| `halbjaehrlich` | Zweimal jährlich | +| `vierteljaehrlich` | Quartalsweise | +| `monatlich` | Monatlich | + +### 4.4 Umlagen (Durchreichungen an Pächter) +Folgende Kosten können als Umlage auf Pächter umgelegt werden: +- Grundsteuer +- Versicherungen +- Verbandsbeiträge +- Jagdpachtanteile (optional) + +--- + +## 5. Abrechnungsverfahren für Ländereien (LandAbrechnung) + +### 5.1 Jährliche Abrechnung +- Pro Flurstück wird automatisch eine `LandAbrechnung` für jedes Abrechnungsjahr erstellt +- Felder: Pacht vereinnahmt, Umlagen, sonstige Einnahmen +- Ausgaben: nach Kategorien (Grundsteuer, Versicherung, Verwaltung etc.) +- USt-Berechnung wenn USt-Option aktiv + +### 5.2 Dokumentenablage +Relevante Dokumente (Pachtverträge, Grundsteuerbescheide, Versicherungsnachweise) werden in **Paperless-NGX** abgelegt und per `DokumentLink` verknüpft. + +--- + +## 6. Backup-Verfahren + +### 6.1 Backup-Typen +| Typ | Inhalt | +|---|---| +| `full` | Datenbank + Dateien | +| `database` | Nur PostgreSQL-Datenbank | +| `files` | Nur Mediendateien | + +### 6.2 Ablauf +1. Backup-Job über Weboberfläche anlegen (`/backup/`) +2. System erstellt Backup asynchron im Hintergrund +3. Backup wird als `.tar.gz` unter `/app/backups/` gespeichert +4. Status: `pending` → `running` → `completed` / `failed` + +### 6.3 Speicherort +- **Container:** `/app/backups/` +- **Dateiname:** `stiftung_backup_YYYYMMDD_HHMMSS.tar.gz` + +--- + +## 7. Verwaltungskosten-Erfassung + +Verwaltungskosten werden kategorisiert erfasst: +- Bezeichnung, Kategorie, Betrag, Datum +- Lieferant/Firma, Rechnungsnummer +- Zuordnung zu Rentmeister (für Fahrtkosten etc.) +- Kilometerpauschale: Standard 0,30 €/km + +--- + +## 8. Audit Trail + +Alle Änderungen in der Anwendung werden im `AuditLog` erfasst: +- Benutzer, Zeitstempel, Aktion +- Entitätstyp, ID, Name +- Änderungsdetails (JSON) +- IP-Adresse, Browser + +--- + +*Zuletzt aktualisiert: 2026-03 | Quelle: Systemcode tasks.py, models.py, backup_utils.py*