# Portal Classification

> **Note :** La detection initiale des utilisateurs externes a lieu dans le batch 1 (4a).
> Ce bloc RESOUT la detection en classifiant les stakeholders et configurant le portail.

## External Signals Detection

```
EXTERNAL_SIGNALS = ["client", "customer", "fournisseur", "supplier", "partenaire",
  "partner", "portail", "portal", "externe", "external", "tiers", "third-party",
  "organisation cliente"]
```

## SmartStack Native Support

> **SmartStack gère nativement les utilisateurs externes :**
> - **Person Extension Pattern** : User → Employee, Contact, Customer via `UserId` FK
> - **Organisation Extension** : Organisation → Client, Supplier via `OrganisationId` FK
> - **Multi-tenant** : portail et interne déployés sur des tenants séparés automatiquement

## Classification and Portal Mode Resolution

SI `_portalDetected` (from batch 1) OU un profil stakeholder (batch 2) match EXTERNAL_SIGNALS :
  → **Auto-classifier** chaque stakeholder : `audience: "internal" | "external" | "shared"`
  → **Auto-déduire** `_portalMode` :

| Stakeholders détectés | `_portalMode` |
|----------------------|---------------|
| Internes + Externes | `"dual"` |
| Uniquement externes | `"portal-only"` |
| Uniquement internes | `"internal-only"` |

## Portal Module Rule (SCOPE LOCK)

SI `_portalMode = "dual"` ou `"portal-only"`:
  Un portail = UN module "Portal" avec des sections view par entite.
  INTERDICTION de creer des modules separes MyAccount, MyProjects, MyInvoices.
  Le module Portal aura des sections (view/inherit) pour chaque zone accessible.

## Client Notification

→ **Informer le client** (statement, PAS de question) :

```
"{language == 'fr'
  ? 'J\'ai détecté des utilisateurs externes ({profiles}). SmartStack déploiera automatiquement un portail dédié ({_portalMode}) avec isolation multi-tenant. Les extensions Person/Organisation gèrent nativement la séparation des profils internes et externes.'
  : 'I detected external users ({profiles}). SmartStack will automatically deploy a dedicated portal ({_portalMode}) with multi-tenant isolation. Person/Organisation extensions natively handle the separation of internal and external profiles.'}"
```

## Default Case

SI aucun profil ne match EXTERNAL_SIGNALS → `_portalMode = "internal-only"` (défaut silencieux, rien à informer).
