# Automatische Businessrollen-Benennung - EINDEUTIGKEITS-FOKUS

## KRITISCHE REGEL: KEINE DOPPELTEN NAMEN
**JEDER ROLLENNAME MUSS EINZIGARTIG SEIN - Das ist die wichtigste Regel!**

## SYSTEMATISCHES VORGEHEN (PFLICHT):

### SCHRITT 1: Sammle alle bestehenden Namen
Erstelle eine Liste: `verwendete_Namen = []`

### SCHRITT 2: Für jede Businessrolle
1. **Analysiere die Subrollen** und bestimme Hauptfunktion
2. **Prüfe JobTitle** der zugewiesenen Person(en)  
3. **Generiere Basis-Namen**
4. **PRÜFE SOFORT**: Ist dieser Name bereits in `verwendete_Namen`?
5. **Falls JA**: Füge unterscheidendes Merkmal hinzu
6. **Füge finalen Namen zu `verwendete_Namen` hinzu**

# Automatische Businessrollen-Benennung für IAM-System

## Aufgabe
Benenne Businessrollen basierend auf zugewiesenen Personen und Subrollen sinnvoll um. **WICHTIG: Jeder Name muss einzigartig sein.**

## Eingabedaten-Format
Die Daten werden im JSON-Format oder als Tabellen übergeben. Analysiere die Struktur und verwende alle verfügbaren Informationen.

## Benennungslogik

### 1. Basis-Name generieren
- **Primär**: Funktionen aus Subrollen ableiten
- **Sekundär**: Jobtitel der zugewiesenen Personen berücksichtigen
- **Format**: Deutsche Begriffe, erste Buchstaben der Hauptwörter groß schreiben, Bindestriche als Trenner
- **Beispiele**: `HR-Verwaltung`, `IT-Administration`, `Sales-Support`, `Marketing-Koordination`

### 2. Organisationssuffix mit schonender Org-Unit-Erhaltung
**Regel für Einzelpersonen-Rollen:**
- Hänge alle verfügbaren orgunit-Werte der Person an
- Format: `_orgunit1_orgunit2_orgunit3` (nur wenn Wert vorhanden)

**Regel für Mehrpersonen-Rollen:**
- Nur orgunit-Werte anhängen, die ALLE Personen gemeinsam haben
- Leere Werte ignorieren

**Erweiterte Org-Unit Normalisierung (Parser-Kompatibilität):**
**Grundprinzip: Minimale Anpassungen - erhalte Originalität soweit möglich**

**Normalisiere diese Zeichen für eindeutiges Parsing:**
- **Leerzeichen** → Bindestrich: "Human Resources" → "Human-Resources"
- **&** → "und": "Research & Development" → "Research-und-Development"  
- **/** → Bindestrich: "Finance/Accounting" → "Finance-Accounting"
- **_** → Bindestrich: "IT_Support" → "IT-Support"
- **__** (doppelt) → einfacher Bindestrich: "Sales__North" → "Sales-North"
- **Klammern entfernen**: "Marketing (Digital)" → "Marketing-Digital"
- **Doppelte Leerzeichen** → einfache Bindestriche

**Erhalte diese Eigenschaften:**
- **Groß-/Kleinschreibung**: Original beibehalten wo sinnvoll
- **Abteilungskürzel**: Kurze Bezeichnungen (2-4 Buchstaben) unverändert lassen
- **Eigennamen**: Firmenspezifische Bezeichnungen respektieren
- **Fachbegriffe**: Bekannte Abteilungsbezeichnungen nicht übersetzen

**Erweiterte Normalisierungs-Beispiele:**
```
"Human Resources" → "Human-Resources"
"Research & Development" → "Research-und-Development"
"Finance/Accounting" → "Finance-Accounting"  
"IT_Support" → "IT-Support"
"Sales_Region_North" → "Sales-Region-North"
"Quality_Assurance" → "Quality-Assurance"
"Customer_Service" → "Customer-Service"
"Project_Management_Office" → "Project-Management-Office"
"Regional__Sales__North" → "Regional-Sales-North"
"Marketing (Digital)" → "Marketing-Digital"
```

### 3. Eindeutigkeit sicherstellen - ERWEITERT
- **SCHRITT 1**: Sammle während der Bearbeitung alle bereits generierten Namen
- **SCHRITT 2**: Prüfe vor der Finalisierung jeden Namen gegen die Liste
- **SCHRITT 3**: Bei Konflikten verwende JobTitle-Unterscheidung STATT numerischer Suffixe:
  - Head of → `-Lead`
  - Director → `-Director`
  - Team Leader → `-Team-Lead`
  - Employee → `-Employee`
  - Manager → `-Manager`
- **SCHRITT 4**: Falls immer noch Konflikt, nutze Org-Unit-Unterscheidung
- **SCHRITT 5**: Erst als letztes Mittel: Numerisches Suffix (`-1`, `-2`, etc.)

## Subrollen-Interpretation
- Verwende die bereitgestellten Systemrollen-Mappings
- Falls keine Mappings vorhanden: Leite aus ID-Pattern ab:
  - `3sr*` → Basis-Berechtigungen
  - `4sr*` → Anwendungszugriffe  
  - `5sr*` → Workflow-Rechte
  - `6sr*` → Administrative Rechte

## Ausgabeformat
```
BusinessRole_br0 = HR-Personalverwaltung_Board-of-Directors_HR
BusinessRole_br1 = IT-Compliance-Zugriff_Board-of-Directors_IT-Support
BusinessRole_br2 = Sales-Koordination_Board-of-Directors_Sales-und-Marketing_Sales-Region-North
```

## Qualitätsrichtlinien
- **Maximal 60 Zeichen** pro Rollenname (erweitert für Org-Unit-Namen)
- **Sprechende Namen** die Funktion erkennbar machen
- **Deutsche Begriffe** für Funktionen verwenden wo möglich, erste Buchstaben groß schreiben
- **Original Org-Unit-Namen** soweit möglich erhalten und nur minimal normalisieren
- **Parser-Kompatibilität** durch eindeutige Trennzeichen sicherstellen
- **Konsistente Namenskonventionen** innerhalb der gleichen Organisationsstruktur
- **Professionelle Lesbarkeit** durch angemessene Groß-/Kleinschreibung
- **Eindeutigkeit hat Vorrang** - jeder Name nur einmal verwenden

## Spezialregeln
- **Geschäftsführung/CEO-Rollen**: Prefix `Exec-` verwenden
- **Trainee/Praktikanten-Rollen**: Prefix `Trainee-` verwenden  
- **Externe/Consultant-Rollen**: Suffix `-Extern` vor Org-Units
- **Führungskräfte/Team Lead-Rollen**: Prefix `Lead-` verwenden

## Universelle Org-Unit-Behandlungsregeln
**Immer erhalten - niemals ändern:**
- Kurze Bezeichnungen (2-4 Zeichen): Wahrscheinlich Kürzel oder Codes
- Zahlen in Org-Unit-Namen: Können Kostenstellen/Abteilungsnummern sein
- Firmenspezifische Begriffe: Unbekannte Bezeichnungen respektieren

**Normalisieren für Parser-Kompatibilität:**
- Alle Unterstriche zu Bindestrichen (verhindert Parsing-Konflikte)
- Leerzeichen zu Bindestrichen (für Systemkompatibilität)
- Sonderzeichen (&, /) nur bei Bedarf normalisieren

**Vorsichtig normalisieren:**
- Sehr lange Org-Unit-Namen (>25 Zeichen): Nur notwendige Zeichen ändern
- Bei Unsicherheit: Eher zu wenig als zu viel normalisieren

## Beispiel-Transformationen (firmenunabhängig)
```
Person mit JobTitle "Team Leader" in Org-Units: "Hauptverwaltung", "Vertrieb_Nord", "Region_A"
→ Lead-Vertrieb-Verwaltung_Hauptverwaltung_Vertrieb-Nord_Region-A

Person mit JobTitle "Coordinator" in Org-Units: "Corporate", "Human_Resources"  
→ Personal-Koordination_Corporate_Human-Resources

Mehrere Personen in gemeinsamer Org-Unit: "Zentrale", "IT_Services"
→ IT-Administration_Zentrale_IT-Services

Person mit externem Type in Org-Units: "Beratung", "Projekt_Alpha"
→ Beratungs-Zugriff-Extern_Beratung_Projekt-Alpha
```

## Adaptive Namenslogik
**Analysiere die vorliegenden Org-Unit-Strukturen:**
1. **Tiefe der Hierarchie**: Wie viele Org-Unit-Ebenen gibt es?
2. **Namenskonventionen**: Sind es deutsche, englische oder gemischte Begriffe?
3. **Länge der Namen**: Kurze Kürzel oder ausgeschriebene Bezeichnungen?
4. **Sonderzeichen-Verwendung**: Enthalten Org-Units Unterstriche, Schrägstriche oder andere Zeichen?
5. **Konsistenz**: Folgt die Struktur erkennbaren Mustern?

**Passe die Normalisierung entsprechend an:**
- Bei deutschen Org-Units: Minimale Normalisierung
- Bei englischen Org-Units: Kann stärker normalisiert werden
- Bei gemischten Systemen: Konsistenz innerhalb einer Hierarchie-Ebene
- Bei Sonderzeichen: Immer zu Bindestrichen normalisieren (Parser-Schutz)

## Validierung vor Ausgabe
**Prüfe die generierten Namen:**
- Sind alle Namen einzigartig? (KRITISCH!)
- Sind die Org-Unit-Namen noch als solche erkennbar?
- Wurde die Hierarchie-Reihenfolge beibehalten?
- Sind firmenspezifische Begriffe respektiert worden?
- Wurden alle Unterstriche zu Bindestrichen konvertiert (Parser-Kompatibilität)?
- Funktioniert die Systematik für alle Rollen konsistent?
- Ist die Schreibweise professionell und gut lesbar?

Analysiere die spezifische Organisationsstruktur in den Eingabedaten und generiere entsprechend angepasste Businessrollen-Namen mit eindeutiger Parser-Kompatibilität.

---

## EINGABEDATEN

**Wenn gleicher Basis-Name entsteht:**

1. **Nach JobTitle unterscheiden:**
   - Head of → `-Lead`
   - Director → `-Director` 
   - Team Leader → `-Team-Lead`
   - Employee → `-Employee`

2. **Nach OrgUnit unterscheiden:**
   - HR → `-HR`
   - IT → `-IT`
   - Administration → `-Admin`
   - Sales & Marketing → `-Sales` oder `-Marketing`
   - Consulting & Support → `-Consulting` oder `-Support`

3. **Nach Personenanzahl unterscheiden:**
   - 1 Person → `-Single`
   - 2+ Personen → `-Multi`

4. **Nach externen/internen unterscheiden:**
   - external → `-Extern`
   - internal → (kein Zusatz)

## UNIVERSELLE BEISPIELE FÜR KONFLIKTAUFLÖSUNG:

**Beispiel 1**: Beide würden "Administration-Access" werden (adaptive Ableitung aus Systemrollen)
- Person A: Head of Administration → `Administration-Access-Lead`
- Person B: Employee Administration → `Administration-Access-Employee`

**Beispiel 2**: Beide würden "HR-Standard" werden (aus ähnlichen HR-Systemrollen)
- Person in HR OrgUnit → `HR-Standard-HR`
- Person in IT OrgUnit → `HR-Standard-IT` (anderer Bereich, aber HR-Zugriff)

**Beispiel 3**: Beide würden "Customer-Management" werden
- Single Person → `Customer-Management-Single`
- Multiple Persons → `Customer-Management-Multi`

**Beispiel 4**: Beide würden "Project-Access" werden
- Internal Person → `Project-Access`
- External Person → `Project-Access-Extern`

**Beispiel 5**: Vollständig identische Basis-Situation
- Person mit JobTitle "Manager" → `System-Access-Manager`
- Person mit JobTitle "Employee" → `System-Access-Employee`
- Falls JobTitles auch gleich → verwende OrgUnit-Unterschied

## AUSGABEFORMAT MIT EINDEUTIGKEITS-BESTÄTIGUNG:

```
BusinessRole_br0 = [EINDEUTIGER_NAME]_[ORG_UNITS]
BusinessRole_br1 = [ANDERER_EINDEUTIGER_NAME]_[ORG_UNITS]
...

EINDEUTIGKEITS-CHECK: ✓ Alle Namen sind einzigartig
```

## EINFACHE NAMENS-KONSTRUKTION:

1. **Hauptfunktion** aus dominierender Subrolle ableiten
2. **Sofort prüfen**: Name bereits verwendet?
3. **Falls ja**: JobTitle-Suffix oder OrgUnit-Suffix hinzufügen
4. **Erneut prüfen**: Immer noch Konflikt?
5. **Falls ja**: Personenanzahl-Suffix hinzufügen
6. **Name in Liste speichern**

## PRAKTISCHE UMSETZUNG:

Arbeite die Businessrollen **der Reihe nach** ab:
- br0: Generiere Namen, speichere in Liste
- br1: Generiere Namen, prüfe gegen Liste, bei Konflikt anpassen, speichern
- br2: Generiere Namen, prüfe gegen Liste, bei Konflikt anpassen, speichern
- usw.

**Am Ende MUSS gelten: Jeder Name kommt nur einmal vor!**

---

## EINGABEDATEN