> ## Documentation Index
> Fetch the complete documentation index at: https://docs.alforse.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 리스크 등록부

> 품목, 고객, 공급업체, 작업, 견적 라인, 작업장에 대한 리스크와 기회를 기록하고, 각각을 심각도와 발생 가능성으로 평가하며, 종결 또는 수용될 때까지 추적합니다.

리스크 등록부는 잘못될 *수도 있는* 일, 또는 추구할 만한 기회를 일이 일어나기 전에 기록합니다. 회사의 누구나 항목을 제기할 수 있으며, 품질 담당자가 이를 평가하고 등급을 매기고 해결까지 이끕니다.

## 개요

항목은 보통 다른 Alforse 레코드에 연결되지만 일반 리스크로 독립적으로 존재할 수도 있습니다. **유형** 외에 **심각도**와 **발생 가능성**(각각 따로 1\~5로 평가), 담당자, 그리고 `"Closed"` 또는 `"Accepted"`로 끝나는 상태를 가집니다.

항목은 두 곳에서 볼 수 있습니다.

* **품질 → 리스크**는 회사 전체의 리스크 등록부를 표시합니다.
* 품목, 고객, 공급업체, 작업, 견적 라인, 유지보수 배차의 페이지에는 각각 해당 레코드의 항목을 나열하고 새 항목을 추가할 수 있는 리스크 카드가 있습니다.

## 리스크 제기

1. **품질 → 리스크**를 열고 항목을 추가하거나, 리스크와 관련된 레코드의 리스크 카드를 엽니다.
2. **제목**을 입력하고 **유형**을 선택하고 **심각도**와 **발생 가능성**을 평가합니다.
3. 선택적으로 담당자를 지정하고, 한 줄 설명을 추가하고, 메모를 작성합니다.
4. 저장합니다.

레코드의 페이지에서 추가하면 항목이 자동으로 해당 레코드의 **소스**를 받습니다. 레코드 없이 **품질 → 리스크**에서 추가하면 `General`을 받습니다.

## 필드

각 항목은 `apps/erp/app/modules/quality/quality.models.ts`의 `riskRegisterValidator`가 검증하는 하나의 `riskRegister` 레코드입니다.

FieldType

<details>
  <summary>**title**required</summary>

  리스크의 짧은 이름입니다. 항상 필수인 유일한 텍스트 필드입니다.
</details>

<details>
  <summary>**type**required</summary>

  `Risk`(하방 위험) 또는 `Opportunity`(상방 기회). 기본값은 `Risk`입니다.
</details>

<details>
  <summary>**severity**required`1–5`</summary>

  영향이 얼마나 심각한지입니다.
</details>

<details>
  <summary>**likelihood**required`1–5`</summary>

  발생할 가능성이 얼마나 높은지이며, 같은 척도지만 따로 평가합니다.
</details>

<details>
  <summary>**status**required</summary>

  수명 주기에서 항목의 위치입니다. 기본값은 `"Open"`입니다.
</details>

<details>
  <summary>**source**required</summary>

  리스크가 속한 레코드의 종류: `Customer`, `General`, `Item`, `Job`, `Quote Line`, `Supplier` 또는 `Work Center`. 추가하는 페이지에서 자동으로 채워집니다.
</details>

<details>
  <summary>**assignee**</summary>

  책임자입니다. 비워 두면 항목을 만든 사람이 기본값입니다. 변경하면 알림이 전송됩니다.
</details>

<details>
  <summary>**description**</summary>

  목록과 레코드의 카드에 표시되는 한 줄 요약입니다.
</details>

<details>
  <summary>**notes**</summary>

  JSON으로 저장되는 서식 있는 텍스트 상세입니다.
</details>

## 심각도와 발생 가능성

두 평가 모두 1\~5 척도를 사용하며 `RiskRating.tsx`가 점수마다 하나씩 색상 막대 행으로 그립니다.

| 등급 | 막대 색상 |
| - | - |
| 1–2 | 에메랄드 |
| 3 | 노란색 |
| 4 | 주황색 |
| 5 | 빨간색 |

레코드의 카드에서 심각도 막대는 경고 아이콘 뒤에, 발생 가능성 막대는 주사위 아이콘 뒤에 있어 둘을 한눈에 읽을 수 있습니다.

NOTE

**통합 리스크 점수는 없습니다.**

심각도와 발생 가능성은 각각 1에서 5로 제한되는 두 개의 별도 정수입니다. Alforse는 이를 곱해 하나의 점수로 만들거나 리스크 매트릭스의 셀에 배치하지 않으며, UI는 의도적으로 나란히 표시합니다. 등록부가 우선순위를 계산해 줄 것으로 기대하지 마십시오.

왜 따로 둘까요? 거의 일어나지 않지만 재앙이 될 실패와 매주 일어나지만 비용이 적은 불편은 곱하면 같은 어중간한 숫자가 됩니다. 따로 보여 주면 각각 고유한 모양을 유지하고 가중치는 사용자의 판단에 맡겨집니다.

## 상태

상태는 `quality.models.ts`의 `riskStatus` 열거형에서 옵니다. 자유롭게 설정되며 Alforse는 순서를 강제하지 않고 어떤 상태든 다른 어떤 상태로 바꿀 수 있습니다.

<details>
  <summary>**Open**</summary>

  제기되었지만 아직 살펴보지 않았습니다. 새 항목의 기본값입니다.
</details>

<details>
  <summary>**In Review**</summary>

  평가 중입니다. 누군가 대응 여부와 방법을 결정하고 있습니다.
</details>

<details>
  <summary>**Mitigating**</summary>

  심각도나 발생 가능성을 줄이기 위한 처리가 진행 중입니다.
</details>

<details open>
  <summary>**Closed**</summary>

  해결되었습니다. 리스크가 완화되었거나 더 이상 해당되지 않습니다.
</details>

<details>
  <summary>**Accepted**</summary>

  처리하는 대신 리스크를 안고 가기로 한 의식적인 결정입니다. `"Closed"`와는 다른 결과입니다.
</details>

### 처리 추적

별도의 완화 조치 레코드는 없습니다. 항목을 `"In Review"`와 `"Mitigating"`을 거치게 하고, 상세는 **메모**에 작성하며, 처리했다면 `"Closed"`로, 감수하기로 했다면 `"Accepted"`로 마무리하여 처리를 추적하십시오.

## 리스크 카드가 나타나는 곳

이 모든 페이지는 고정된 `source`와 레코드의 ID를 전달하여 하나의 공유 카드를 재사용합니다. 그래서 각 카드에는 자신의 레코드 항목만 표시되고 거기서 추가한 것은 올바른 소스로 분류됩니다.

| 레코드 | 컴포넌트 | 소스 |
| - | - | - |
| 품목: 부품, 자재, 공구, 소모품, 서비스 | `ItemRiskRegister.tsx` | `Item`. `itemId` 외래 키도 채움 |
| 고객(리스크 탭) | `CustomerRiskRegister.tsx` | `Customer` |
| 공급업체(리스크 탭) | `SupplierRiskRegister.tsx` | `Supplier` |
| 작업 | `JobRiskRegister.tsx` | `Job`. 품목도 채움 |
| 견적 라인 | `QuoteLineRiskRegister.tsx` | `Quote Line` |
| 유지보수 배차 | 배차 페이지의 공유 카드 | `Work Center`, 배차의 작업장에 연결 |

작업장은 예외입니다. 작업장 자체 페이지에는 카드가 없습니다. 소스가 `Work Center`인 항목은 유지보수 배차와 회사 전체 목록에 나타나며, `riskRegisters` 뷰가 작업장 이름을 제공합니다.

TIP

**목록 보기와 엔터티 카드는 서로 다른 소스를 읽습니다.**

회사 전체 목록(`getRisks`)은 각 행에 작업장 이름을 추가하는 `riskRegisters` 뷰를 읽습니다. 레코드 카드와 단일 항목 편집 페이지는 `source`와 레코드 ID로 필터링한 기본 `riskRegister` 테이블을 읽습니다. 데이터는 같고 읽기 경로만 다릅니다.

## 권한과 알림

| 작업 | 요구 사항 |
| - | - |
| 리스크 생성 | 회사의 **직원**이어야 합니다. 새 리스크 라우트는 `quality` 생성 권한이 아니라 `role: "employee"`를 확인하므로 현장의 누구나 제기할 수 있습니다. |
| 리스크 편집 | `quality` **update** |
| 리스크 삭제 | `quality` **delete** |

데이터베이스도 같은 구분을 강제합니다.

담당자가 되는 사람은 백그라운드 `notify` 작업이 보내는 `RiskAssignment` 알림을 받습니다. 편집은 담당자가 이전과 다를 때만 이를 발생시키므로 항목을 다시 저장해도 현재 소유자는 방해받지 않습니다.

## 리스크 대 이슈 및 CAPA

리스크 등록부는 별도의 테이블이며 부적합이나 그 시정 및 예방 조치와 코드상 **연결이 없습니다**. 리스크를 제기해도 이슈가 생성되지 않으며 이슈를 종결해도 리스크에 영향을 주지 않습니다.

| | 리스크 등록부 | [이슈](https://docs.alforse.com/ko/docs/reference/quality.md) |
| - | - | - |
| 시선 | 앞을 향함: 일어날 수 있는 일 또는 기회 | 뒤를 향함: 이미 일어난 결함 |
| 목적 | 사전에 평가하고 처리 | 격리하고 워크플로 작업을 통해 종결까지 진행 |

사전 평가에는 등록부를, 사후 격리에는 이슈를 사용하십시오.

## 문제 해결

| 메시지 또는 증상 | 원인 | 해결 방법 |
| - | - | - |
| "Title is required", "Severity is required" 또는 "Likelihood is required" | 양식에 필수 값이 없습니다. | 제목, 심각도, 발생 가능성을 입력하십시오. |
| 심각도 또는 발생 가능성이 거부됩니다 | 값이 1에서 5 사이의 정수가 아닙니다. 데이터베이스가 범위를 강제합니다. | 1에서 5 사이의 값을 선택하십시오. |
| "Failed to create risk", "Failed to update risk" 또는 "Failed to delete risk" | 쓰기가 실패했으며 대개 권한 때문입니다. | 위의 권한 표를 확인하십시오. |
| 상태 변경이 유지되지 않습니다 | 상태에는 워크플로 규칙이 없으므로 원인은 저장 실패나 권한 부족입니다. | `quality` update 권한이 있는지 확인하십시오. |
| 리스크를 생성할 수 있지만 편집하거나 삭제할 수 없습니다 | 직원 접근 권한은 있지만 `quality` update 또는 delete 권한이 없습니다. | 관리자에게 해당 권한을 요청하십시오. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.