Files
RoggioApp/Brainstorm/260426/12_Das_Kollektiv_als_Entitaet.md
2026-04-26 19:42:42 +02:00

2.5 KiB
Executable File

RoggioApp - Das Kollektiv als eigene Entität

Die Erkenntnis: Das Kollektiv ist kein abstrakter "Gott", sondern nur eine Gruppe

Wenn man konsequent abstrahiert, ist die Betreiber-Struktur (das Kollektiv) nichts anderes als eine ganz normale Entität im Graphen.

1. Das Kollektiv ist eine Group

In unserer Datenbank-Tabelle Group existieren Gruppen für "Familie Rossi" (Gäste). Genau dort existiert auch ein Datensatz für "Das Kollektiv". Unterschieden wird dies nur durch das JSONB-Feld traits:

  • Familie Rossi: {"group_type": "guest", "preferences": "quiet"}
  • Das Kollektiv: {"group_type": "operator", "bank_account": "DE123...", "tax_id": "DE999..."}

2. Die Mitglieder sind Person-Entitäten mit Relationen

Die Menschen, die das System betreiben (Sev, Sarah, etc.), sind normale Person-Einträge. Ihre Zugehörigkeit zum Kollektiv wird durch die reguläre Pivot-Tabelle GroupMembership definiert:

  • Person ID (Sev) + Group ID (Das Kollektiv) + Rolle (finance_admin)
  • Person ID (Sarah) + Group ID (Das Kollektiv) + Rolle (cleaning_crew)

3. Warum das absolut genial ist: Mandantenfähigkeit ("Multi-Tenancy")

Wenn wir das Kollektiv als einfache Gruppe speichern, ist das System sofort mandantenfähig. Beispiel: In 5 Jahren wollt ihr neben dem Haupt-Gelände noch ein zweites Haus im Nachbardorf verwalten, das aber von einer anderen Genossenschaft (oder GmbH) betrieben wird. Wir müssen keinen einzigen Datenbankumbau vornehmen! Wir legen einfach eine zweite Operator-Gruppe an, ordnen dieser Gruppe ein paar Personen und die neuen "Units" (Räume) zu, und fertig. Die Rechnungen ziehen sich dann automatisch die Bankdaten von Gruppe B statt von Gruppe A.

Fazit

Das System kennt keinen "Super-Admin-Hardcode". Es kennt nur den Graphen. Das Kollektiv ist ein normaler Knotenpunkt, der sich über seine Beziehungen definiert.

4. B2B / Firmen als Kunden (Organisationen)

Genau wie "Das Kollektiv" eine Operator-Gruppe ist, sind auch B2B-Kunden (Firmen, NGOs, Vereine) einfache Einträge in der Tabelle Group.

  • Verein e.V.: {"group_type": "b2b_guest", "tax_id": "DE123...", "invoice_notes": "Vereinsrabatt"}
  • Die Verknüpfung der tatsächlichen Gäste erfolgt wieder über GroupMembership. (Z.B. ist Peter der invoice_contact für den Verein, und Sarah, Tim und Lisa sind guest).
  • Auch Rechnungen können somit direkt an die Entität Group ausgestellt werden, da die Firmen-/Vereinsadresse in deren Traits liegt, anstatt an einer einzelnen Person zu kleben.