# Automatische Generierung von Business-Role-Rules für IAM-System (Universal)

## Aufgabe
Generiere für jede Businessrolle eine präzise XML-Rule, die bei einer Suche gegen die **GESAMTE Personendatenbank** exakt nur die zugewiesenen Personen zurückliefert.

## KRITISCHE ANFORDERUNG
**Die generierten Rules werden gegen ALLE Personen der Datenbank ausgeführt - nicht nur gegen die bereitgestellten Personen!**
Die Rule muss **EXAKT** nur die der Rolle zugewiesenen Personen treffen - keine zusätzlichen Personen.

## Universelle Analyse-Methodik

### SCHRITT 1: Datenstruktur analysieren
**Analysiere die verfügbaren Personenattribute in den Eingabedaten:**
- Identifiziere alle verfügbaren Spalten der Personentabelle
- Erkenne Attribut-Ausprägungen und Werte-Bereiche
- Verstehe die Organisationshierarchie (orgunit1/2/3-Struktur)
- Erkenne JobTitle-Patterns und type/status-Werte

### SCHRITT 2: Spezifitäts-Bewertung
**Für jede Businessrolle bewerte:**
- **Einzelperson vs. Multi-Person**: Anzahl zugewiesener Personen
- **Eindeutigkeit**: Sind Namen/Attribute ausreichend distinktiv?
- **Gemeinsame Merkmale**: Bei Multi-Person-Rollen gemeinsame Attribute finden
- **Organisatorische Abgrenzung**: Spezifische vs. allgemeine orgunit-Werte

### SCHRITT 3: Strategie-Auswahl (Prioritätsreihenfolge)

#### **Priorität 1: Namen-Basiert (Höchste Präzision)**
```xml
<!-- Bei eindeutigen Namen -->
<rule><attribute>givenname</attribute><operator>EQUALS</operator><value>[Name]</value></rule>
<rule><attribute>surname</attribute><operator>EQUALS</operator><value>[Nachname]</value></rule>
```

#### **Priorität 2: Einzigartige Positions-Kombinationen**
```xml
<!-- JobTitle + Organisationseinheit (wenn datenbankweit eindeutig) -->
<rule><attribute>jobtitle</attribute><operator>EQUALS</operator><value>[Erkannter_JobTitle]</value></rule>
<rule><attribute>[orgunit_attribute]</attribute><operator>EQUALS</operator><value>[Erkannte_OrgUnit]</value></rule>
```

#### **Priorität 3: Multi-Attribut-Kombinationen**
```xml
<!-- Mehrere Attribute für spezifische Abgrenzung -->
<rule><attribute>type</attribute><operator>EQUALS</operator><value>[Erkannter_Type]</value></rule>
<rule><attribute>[weitere_attribute]</attribute><operator>EQUALS</operator><value>[Erkannte_Werte]</value></rule>
```

#### **Priorität 4: OR-Verknüpfung bei Multi-Person (letzte Option)**
```xml
<!-- Separate Gruppen für verschiedene Personen -->
<condition>
<group_nexus>OR</group_nexus>
<group_internal_nexus>AND</group_internal_nexus>
<groups>
<group><rules>[Person_1_Kriterien]</rules></group>
<group><rules>[Person_2_Kriterien]</rules></group>
</groups>
</condition>
```

## Adaptive Regel-Generierung

### **Für Einzelperson-Rollen:**
1. **Prüfe Namen-Eindeutigkeit** in wahrscheinlicher Gesamtdatenbank
2. **Falls Namen nicht eindeutig**: Kombiniere mit spezifischen Attributen
3. **Minimiere Attribut-Anzahl** bei ausreichender Spezifität

### **Für Multi-Person-Rollen:**
1. **Suche gemeinsame Attribute** aller zugewiesenen Personen
2. **Teste Spezifität** der gemeinsamen Attribute
3. **Falls zu unspezifisch**: Verwende OR-Gruppen mit individuellen Kriterien
4. **Optimiere Balance** zwischen Einfachheit und Präzision

### **Spezielle Attribute-Behandlung:**
- **Leere Werte**: Verwende NOT_EXISTS oder spezifische Leer-Tests
- **Hierarchische Strukturen**: Nutze präziseste verfügbare orgunit-Ebene  
- **Status-Filter**: Berücksichtige active/inactive bei Präzision
- **Type-Unterscheidung**: internal/external als Differenzierungsmerkmal

## XML-Struktur (Universal)

### Verfügbare Operatoren:
`EQUALS`, `EQUALS_CI`, `NOT_EQUALS`, `NOT_EQUALS_CI`, `STARTSWITH`, `STARTSWITH_CI`, `NOT_STARTSWITH`, `NOT_STARTSWITH_CI`, `ENDSWITH`, `ENDSWITH_CI`, `NOT_ENDSWITH`, `NOT_ENDSWITH_CI`, `CONTAINS`, `CONTAINS_CI`, `NOT_CONTAINS`, `NOT_CONTAINS_CI`, `COUNTOFLETTERS_EQUALS`, `COUNTOFLETTERS_LESS`, `COUNTOFLETTERS_GREATER`, `EXISTS`, `NOT_EXISTS`

### XML-Template:
```xml
<condition>
<group_nexus>OR/AND</group_nexus>
<group_internal_nexus>AND</group_internal_nexus>
<groups>
<group>
<rules>
<rule>
<type>Person</type>
<attribute>[DYNAMISCHES_ATTRIBUT]</attribute>
<operator>[PASSENDER_OPERATOR]</operator>
<value>[SPEZIFISCHER_WERT]</value>
</rule>
</rules>
</group>
</groups>
</condition>
```

## Universelle Qualitätssicherung
**Validiere jede generierte Rule gegen die Datenstruktur:**
- ✅ **Präzision**: Trifft exakt die zugewiesenen Personen?
- ✅ **Spezifität**: Würde sie zusätzliche Personen treffen?
- ✅ **Datenvalidität**: Existieren die verwendeten Attribut-Werte?
- ✅ **Effizienz**: Minimale aber ausreichende Attribut-Anzahl?
- ✅ **Robustheit**: Funktioniert bei verschiedenen Datenstrukturen?

## Ausgabeformat
Beende die Nachricht ausschließlich mit der Auflistung aller Rollen und ihren Rules:
```
[RoleID] = <condition>[Serialisierte_XML_Rule]</condition>
```
**Eine Zuordnung pro Zeile. Keine weiteren Informationen. Rules serialisiert zurückgeben.**

---

## EINGABEDATEN