# 사용자 발견 자동화 정책

## 사용자 발견 자동화 룰

SMPLY가 새롭게 발견한 **사용자(소프트웨어를 쓰는 사람)** 를 조건에 따라 **자동으로 승인·거절·무시**하도록 설정하는 기능입니다. 새 사람이 SaaS 를 쓰기 시작할 때마다 관리자가 일일이 검토할 필요 없이 미리 정한 규칙으로 일괄 처리할 수 있습니다.

{% hint style="info" %}
**사용자 발견 룰이란** 소프트웨어 사용자 발견(User Discovery)에서 새로 나타난 사용자 항목 중 미리 정한 조건에 해당하는 건들을 **우선순위가 낮은(먼저 평가) 룰부터** 순차 평가하여 자동 처리합니다.
{% endhint %}

{% hint style="warning" %}
**소프트웨어 룰과의 차이** 같은 자동화 룰 화면에 두 개의 탭이 있습니다.

* **소프트웨어 룰** — *어떤 소프트웨어를 도입할지* 를 자동 결정 (예: 결제 내역으로 발견된 SW 는 자동 승인)
* **사용자 룰** — *그 소프트웨어를 누가 쓰는지* 를 자동 결정 (이 페이지)

두 룰은 서로 영향을 주지 않으며, 평가 시점도 다릅니다. 자세한 흐름은 §3 을 참고하세요.
{% endhint %}

***

### 1. 접속 경로

**사이드바**: `소프트웨어` > `발견` > `자동화 룰` > 상단 **`사용자 룰`** 탭 **URL**: `/software/discovery/user-discovery-automation-rules`

소프트웨어 룰 화면에서 "사용자 룰" 탭을 누르면 이 페이지로 자동 전환됩니다.

***

### 2. 목록 페이지

목록 페이지에서는 등록된 룰을 한눈에 볼 수 있습니다.

| 컬럼   | 설명                    |
| ---- | --------------------- |
| 이름   | 룰 이름                  |
| 설명   | 룰의 용도 (선택)            |
| 우선순위 | 작은 숫자가 먼저 평가됨         |
| 조건   | 조건 개수 요약 (예: "2개 조건") |
| 액션   | 승인 / 거절 / 무시          |
| 상태   | 활성 / 비활성              |
| 생성일  | 등록 시점                 |

행 메뉴(⋯): **수정** / **활성↔비활성 토글** / **삭제**

#### 헤더 버튼

* **룰 추가** — 생성 페이지로 이동
* **지금 실행** — 대기 중인 사용자 발견에 활성 룰을 즉시 적용

#### 빈 상태

```
등록된 사용자 룰이 없습니다.
룰을 추가하면 발견된 사용자가 자동으로 처리됩니다.
```

{% hint style="success" %}
**출시 시점 디폴트 룰 5개가 시드됩니다** 신규 가입 고객사에는 다음 5개 룰이 자동으로 등록됩니다. 별도 설정 없이도 흔한 신호는 곧바로 자동 승인됩니다.

카드 결제로만 발견됐거나, 구성원에 매칭되지 않은 외부 사용자는 기본적으로 *대기* 로 남아 관리자 검토 대상이 됩니다.
{% endhint %}

| 우선순위 | 조건                                     | 액션 |
| ---- | -------------------------------------- | -- |
| 100  | 발견 소스 = Google Workspace               | 승인 |
| 150  | 발견 소스 = 에이전트 사용량 **그리고** 구성원 매칭 = true | 승인 |
| 200  | 발견 소스 = 에이전트 설치 **그리고** 구성원 매칭 = true  | 승인 |
| 250  | 발견 소스 = Anthropic 연동                   | 승인 |
| 260  | 발견 소스 = OpenAI 연동                      | 승인 |

***

### 3. 룰이 평가되는 시점

사용자 룰은 **사용자 발견(User Discovery) 파이프라인** 안에서 평가됩니다.

```
GWS / 에이전트 / SaaS 연동에서 신호 수집
        ↓
사용자 발견 (pending) 생성        ← 한 사용자가 여러 PC 에 깔려 있어도 1건만 생성
        ↓
사용자 룰 평가 (우선순위 순, first-match-wins)
        ↓
승인 → 소프트웨어 사용자에 반영
거절 → 명시적 거부 기록
무시 → 목록에서 감춤
```

#### "지금 실행" 버튼

1. **지금 실행** 클릭 → 확인 다이얼로그 "사용자 룰 실행" 이 열립니다.
2. 설명: "활성화된 모든 사용자 룰을 대기 중인 발견 항목에 대해 즉시 실행합니다. 계속하시겠습니까?"
3. 확인하면 백엔드가 모든 활성 룰을 우선순위 순으로 평가해 매칭된 항목을 처리합니다.
4. 완료 후 토스트:
   * 처리된 항목 있음: "N건이 자동 처리되었습니다."
   * 처리된 항목 없음: "처리할 항목이 없습니다."

{% hint style="info" %}
**자동 스케줄 여부** 현재 사용자 룰은 수동 실행 전용입니다. 신규 발견이 ingestion 시점에 자동으로 룰 평가에 들어가지만, 평가 누락분을 일괄 정리하려면 일정 주기로 담당자가 **지금 실행** 을 눌러 주세요. 추후 스케줄 실행 기능이 추가될 수 있습니다.
{% endhint %}

{% hint style="warning" %}
**고객사 단위 ON/OFF** 고객사 설정에서 사용자 발견 자동 처리를 OFF 로 두면 ingestion 단계에서 룰 평가 자체를 건너뜁니다. 룰을 만들어 두고도 평가가 안 되는 것 같다면 설정을 확인해 주세요.
{% endhint %}

***

### 4. 룰 만들기

**단계 1: 룰 추가 페이지 열기**

1. 목록에서 **룰 추가** 버튼을 클릭합니다.
2. 페이지 제목: "사용자 룰 추가"

**단계 2: 기본 정보 입력**

| 필드   | 설명                                      |
| ---- | --------------------------------------- |
| 이름   | 룰 이름 (필수) — 예: "GWS 구성원이 매칭된 사용자 자동 승인" |
| 설명   | 룰의 용도 (선택)                              |
| 우선순위 | 작은 숫자가 먼저 평가됨 (필수)                      |

**단계 3: 조건(Condition) 설정**

* 조건 그룹 타입: **모두 충족할 때 (AND)** 또는 **하나라도 충족할 때 (OR)**
* 각 조건 행은 **필드 → 연산자 → 값** 세 셀렉터로 구성되며 **조건 추가** 버튼으로 여러 개 추가할 수 있습니다.

**지원 필드** (사용자 발견 룰에서만 사용 가능한 4종):

| 필드     | 의미                  | 값 예시                                                                     |
| ------ | ------------------- | ------------------------------------------------------------------------ |
| 발견 소스  | 어디서 발견됐는지           | Google Workspace / 에이전트 설치 / 에이전트 사용량 / 결제 내역 / Anthropic 연동 / OpenAI 연동 |
| 소프트웨어  | 특정 SaaS 한정          | Slack / Notion / Figma 등 등록된 소프트웨어                                       |
| 카테고리   | SaaS 카테고리           | 생산성 / 디자인 / 커뮤니케이션 등                                                     |
| 구성원 매칭 | 발견된 이메일이 구성원과 매칭되는지 | true (조직 구성원) / false (외부)                                               |

{% hint style="info" %}
**"구성원 매칭" 필드** 에이전트 설치/사용량 신호의 host 소유자가 SMPLY 에 등록된 구성원과 이메일로 일치하면 `true`, 외부 협력자나 미매칭이면 `false` 입니다. *조직 구성원의 활동만 자동 승인* 하고 *외부 사용자는 대기* 로 두는 패턴에 가장 흔히 쓰입니다.
{% endhint %}

**단계 4: 액션(Action) 설정**

| 액션    | 결과                               |
| ----- | -------------------------------- |
| 자동 승인 | 발견된 사용자가 해당 소프트웨어의 *사용자* 로 등록됩니다 |
| 자동 거절 | 명시적 거부 기록을 남깁니다 (재검토 흔적이 남음)     |
| 자동 무시 | 목록에서 감춥니다 (재검토 가능성을 열어 둠)        |

**단계 5: 저장**

* **저장** 클릭 → 토스트 "자동화 룰이 생성되었습니다."
* 자동으로 목록 페이지로 복귀합니다.

***

### 5. 🪄 AI로 조건 생성하기

조건을 직접 만드는 대신, 자연어로 설명만 하면 AI가 이름·조건·액션을 자동으로 채워주는 기능이 생성 페이지에 포함되어 있습니다.

{% hint style="info" %}
**AI 조건 생성 위치** 생성 페이지 하단의 **🪄 AI 조건 생성** 섹션을 펼치세요(기본 접힘). 편집 페이지에는 없습니다.
{% endhint %}

**단계 1: 자연어로 룰 설명**

1. 입력창에 원하는 룰을 자연어로 입력합니다. 예: "GWS 로 발견되고 구성원으로 매칭된 사용자는 자동 승인"
2. **조건 생성** 클릭 → "조건을 분석하고 있어요..." 로딩
3. AI가 제안 카드를 출력합니다.

예시 칩(클릭 한 번으로 입력됨):

* "GWS 로 발견된 사용자는 자동 승인"
* "에이전트로 발견된 외부 사용자는 무시"
* "Anthropic·OpenAI 연동 사용자는 자동 승인"

**단계 2: AI 제안 확인 및 적용**

AI 제안 카드에는 이름·조건·액션이 요약되어 표시됩니다. 두 가지 선택이 가능합니다.

* **적용** — 폼 필드(이름·설명·조건·액션)에 자동으로 채워집니다.
* **다시 생성** — 입력을 유지한 채 다른 제안을 받습니다.

{% hint style="warning" %}
**AI 가 만든 조건은 마지막에 직접 검토하세요** AI 가 만든 조건은 편집 가능한 폼 상태로 적용되므로, 우선순위·연산자·값을 마지막에 한 번 더 점검한 뒤 저장하세요. 화이트리스트 외 필드(예: IP 주소, 사용자 이름)나 허용되지 않은 액션을 요청하면 AI 가 거부합니다.
{% endhint %}

***

### 6. 룰 편집 / 비활성화 / 삭제

목록 행의 ⋯ 메뉴에서 다음 작업을 수행할 수 있습니다.

* **수정** — 생성과 동일한 폼. AI 조건 생성 섹션은 편집 시 노출되지 않습니다.
* **활성 / 비활성 토글** — 룰을 즉시 비활성화(삭제 없이 일시 중단).
* **삭제** — 확인 다이얼로그 후 영구 삭제.

수정 후 저장 시 토스트: "자동화 룰이 수정되었습니다."

***

### 7. 처리 결과 확인 — 발견된 사용자 목록

룰이 잘 동작하는지는 **소프트웨어** > **발견** > **발견 목록** > **신규 사용자** 탭에서 확인할 수 있습니다.

| 컬럼          | 설명                                               |
| ----------- | ------------------------------------------------ |
| 소프트웨어 / 사용자 | 어떤 SaaS 의 누구인지                                   |
| 이메일         | 발견된 이메일                                          |
| 소스          | 어디서 신호가 왔는지 (GWS / Agent / Anthropic / OpenAI 등) |
| 감지일         | 신호 수신 시점                                         |
| 상태          | 검토 대기 / 승인됨 / 거절됨 / 무시됨                          |
| 처리 메모       | 수동 처리 시 남긴 메모                                    |
| **처리자**     | **자동화 룰** 또는 처리한 멤버 이름                           |

처리자 컬럼에 "자동화 규칙" 으로 표시된 행이 사용자 룰이 처리한 결과입니다. "검토 대기" 로 남아 있는 항목은 어느 룰에도 매칭되지 않은 항목으로, 수동 검토 대상입니다.

{% hint style="success" %}
**한 사용자가 여러 PC 에서 같은 소프트웨어를 써도 1건만 표시됩니다** 같은 사용자(이메일 기준)의 같은 소프트웨어는 한 사용자 발견 항목으로 묶입니다. 호스트마다 별도 행이 생기지 않으므로, 룰을 한 번 적용하면 그 사용자에 대해 끝입니다.
{% endhint %}

{% hint style="info" %}
**거절·무시한 소프트웨어는 사용자 발견도 자동 차단** 어떤 소프트웨어를 SW 발견 단계에서 *거절* 하거나 *무시* 했다면, 그 SW 의 사용자 발견은 ingestion 단계에서 아예 만들어지지 않습니다. 이중 안전망이라 별도 룰을 만들 필요가 없습니다.
{% endhint %}

***

### 8. 권한 안내

| 권한              | 가능한 동작                             |
| --------------- | ---------------------------------- |
| `software-edit` | 룰 추가 / 편집 / 삭제 / 활성↔비활성 토글 / 지금 실행 |
| 그 외             | 목록 조회만 가능                          |

권한이 없으면 **룰 추가**·**지금 실행** 버튼이 비활성화되고 툴팁으로 "수정 권한이 없습니다." 가 표시됩니다.

***

### 9. 활용 팁

* **우선순위 설계** — 범위가 좁은 조건(특정 소프트웨어, 특정 카테고리)을 작은 숫자로, 포괄적 조건(모든 GWS 사용자 등)은 큰 숫자로 두면 예측 가능한 흐름이 됩니다.
* **외부 사용자 패턴** — `구성원 매칭 = false` 조건으로 외부 협력자 발견을 일괄 *무시* 처리하면, 신규 사용자 검토 큐가 빠르게 비워집니다.
* **거절 vs 무시** — *거절* 은 해당 사용자를 명시적으로 거부한 기록이 남고, *무시* 는 단순히 목록에서 감춥니다. 재검토 가능성이 있다면 **무시** 를 추천합니다.
* **AI 생성 후 반드시 검토** — AI가 만든 조건은 편집 가능한 폼 상태로 적용되므로, 우선순위와 액션을 마지막에 직접 점검하고 저장하세요.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.smply.one/software_management/user-discovery-automation-rules.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
