

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 드리프트 보고서 이해
<a name="data-transformation-drift-report"></a>

 드리프트 감지가 활성화되면 대량 작업은 라는 집계 보고서를 `jobLevelDriftResult.json` 출력 위치에 기록합니다. 이 보고서는 프로파일이 실제로 캡처한 소스 데이터의 양과 누락된 내용을 알려주므로 매핑을 개선할 위치를 알 수 있습니다.

 보고서의 구조는 소스 형식에 따라 다릅니다. C-CDA 보고서는 문서 섹션 및 항목(OIDs로 식별됨)을 중심으로 구성되고 CSV 보고서는 테이블, 열 및 행을 중심으로 구성됩니다. 둘 다 동일한 적용 범위 비율 개념을 공유합니다(0.0에서 1.0까지의 분율. 여기서 높을수록 더 많은 소스가 캡처되었음을 의미함).
+ [C-CDA 드리프트 보고서](#data-transformation-drift-report-ccda)
+ [CSV 드리프트 보고서](#data-transformation-drift-report-csv)
+ [적용 범위 개선(두 형식 모두)](#data-transformation-drift-report-improving)

## C-CDA 드리프트 보고서
<a name="data-transformation-drift-report-ccda"></a>

```
{
  "jobId": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6",
  "profileId": "0f1e2d3c4b5a69788796a5b4c3d2e1f0",
  "profileVersion": 3,
  "timestamp": "2026-07-14T18:30:00Z",
  "filesProcessed": 500,
  "totalFilesFailed": 2,
  "avgSectionCoverageRate": 0.92,
  "avgEntryCoverageRate": 0.85,
  "avgOverallCoverageRate": 0.88,
  "avgResourceAccuracy": 0.97,
  "totalUnknownSections": 14,
  "totalUnknownEntries": 63,
  "documentOids": { 
    "2.16.840.1.113883.10.20.22.1.2": 480 
    },
  "unknownSectionOidCount": 2,
  "unknownSections": { 
    "2.16.840.1.113883.10.20.22.2.14": 12 
    },
  "unknownEntryOidCount": 5,
  "unknownEntries": { 
    "2.16.840.1.113883.10.20.22.4.13": 40 
    },
  "missingResources": { 
    "2.16.840.1.113883.10.20.22.2.6.1": { 
      "AllergyIntolerance": 8 
      } 
    },
  "perFileDrift": { 
    "patient-001.xml": 0.95, 
    "patient-002.xml": 0.61 
    }
}
```

### 판독 방법
<a name="data-transformation-drift-report-ccda-read"></a>

 적용률부터 시작합니다. 이는 처리된 모든 파일의 평균으로, 0.0\~1.0의 분수로 표시됩니다(백분율에 100을 곱함). 높을수록 좋습니다. 속도가 높을수록 소스 데이터가 FHIR 출력으로 더 많이 만들어집니다.


| Field | 의미 | 
| --- | --- | 
| avgOverallCoverageRate | 헤드라인 번호입니다. 프로필이 FHIR에 매핑된 소스 콘텐츠(섹션 \+ 항목)의 평균 비율입니다. 0.88은 소스 데이터의 \~88%가 캡처되었음을 의미합니다. | 
| avgSectionCoverageRate | 매핑된 C-CDA 섹션(예: 문제, 약물, 알러지)의 평균 비율입니다. | 
| avgEntryCoverageRate | 매핑된 섹션 내 개별 항목(예: 단일 문제 또는 약물)의 평균 비율입니다. | 
| avgResourceAccuracy | 예상한 FHIR 리소스 중에서 실제로 생성된 평균 비율입니다. | 

 그런 다음 누락된 내용을 찾습니다. 이러한 필드는 추가할 특정 매핑을 가리킵니다.


| Field | 의미 | 수행할 작업 | 
| --- | --- | --- | 
| unknownSections | 프로파일이 인식하지 못한 소스 섹션 OIDs의 맵과 각 섹션이 나타난 횟수입니다. | 높은 수의 섹션 OIDs에 대한 매핑을 추가합니다. | 
| unknownEntries | 프로파일이 인식하지 못한 소스 항목 OIDs의 맵과 빈도입니다. | 높은 수의 항목 OIDs에 대한 매핑을 추가합니다. | 
| missingResources | 소스 OID 맵 → 예상되었지만 생성되지 않은 FHIR 리소스 유형, 개수 포함. | 이러한 리소스를 생성해야 하는 매핑을 수정합니다. | 
| totalUnknownSections / totalUnknownEntries | 작업 전체에서 매핑되지 않은 섹션 및 항목의 총 수입니다. | 를 빠른 "남은 양" 신호로 사용합니다. | 
| documentOids | 작업에 표시되는 C-CDA 문서 유형 OIDs의 수입니다. | 데이터에 포함된 문서 유형을 확인합니다. | 

 빈도에 따라 우선 순위를 지정합니다. `unknownSections`, `unknownEntries`및의 개수는 가장 많은 레코드에 영향을 미치는 격차를 `missingResources` 알려줍니다. 40회 나타나는 OID는 두 번 나타나는 것보다 매핑에 더 큰 성공입니다.

 특정 파일을 드릴링합니다.는 각 소스 파일을 전체 적용률에 `perFileDrift` 매핑합니다. 가장 낮은 값을 기준으로 정렬하여 프로파일이 최악의 상태로 처리한 파일을 찾습니다. 예를 들어 0.61`patient-002.xml`에서는 검사할 가치가 있습니다. 파일별 전체 분석(각 파일이 놓친 특정 OIDs)은 `driftDetectionPerFileResults/` 폴더 아래의 개별 보고서를 참조하세요.

### 적용 범위 개선
<a name="data-transformation-drift-report-ccda-improving"></a>

1. `unknownSections`, `unknownEntries`및에서 가장 높은 빈도의 항목을 식별합니다`missingResources`.

1. 데이터 변환 AI 에이전트(`UpdateProfileWithAgent`)를 사용하여 해당 OIDs 및 리소스에 대한 매핑을 추가합니다. OID를 붙여넣고 에이전트에게 매핑을 요청할 수 있습니다.

1. 새 프로필 버전을 게시하고 작업을 다시 실행합니다.

1. 새 `avgOverallCoverageRate`를 비교하여 갭이 닫혔는지 확인합니다.

## CSV 드리프트 보고서
<a name="data-transformation-drift-report-csv"></a>

 CSV 작업의 경우 보고서는 섹션 및 OIDs가 아닌 테이블(각 CSV 파일은 테이블), 열 및 행을 중심으로 구성됩니다.

```
{
  "jobId": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6",
  "profileId": "0f1e2d3c4b5a69788796a5b4c3d2e1f0",
  "profileVersion": 3,
  "summary": {
    "totalTablesInProfile": 4,
    "totalTablesInInput": 5,
    "tablesProcessed": 4,
    "tablesUnmapped": 1,
    "totalColumnsInInput": 42,
    "columnsMapped": 35,
    "columnsUnmapped": 7,
    "totalRowsScanned": 120000,
    "rowsConvertedSuccessfully": 119850,
    "rowsFailedCustomerError": 140,
    "rowsFailedServerError": 10,
    "totalResourcesGenerated": 245000,
    "tablesCoverageRate": 0.80,
    "columnsCoverageRate": 0.83,
    "overallCoverageRate": 0.83
  },
  "unmappedTables": [
    {
      "tableName": "billing",
      "fileName": "billing.csv",
      "reason": "No matching table declared in the mapping profile",
      "columns": ["invoice_id", "amount", "payer"]
    }
  ],
  "unmappedColumns": [
    {
      "tableName": "patients",
      "columns": ["preferred_language", "ethnicity_detail"],
      "reason": "Present in CSV but not referenced by any field mapping"
    }
  ]
}
```

### 판독 방법
<a name="data-transformation-drift-report-csv-read"></a>

 요약부터 시작합니다. 적용률은 0.0\~1.0의 분수입니다(높을수록 좋음).


| Field | 의미 | 
| --- | --- | 
| overallCoverageRate | 헤드라인 번호: 프로파일이 실제로 사용하는 모든 입력 테이블에서 모든 열의 비율입니다. 0.83은 소스 열의 \~83%가 매핑되었음을 의미합니다. | 
| tablesCoverageRate | 프로필이 매핑하는 입력 CSV 파일(테이블)의 비율(tablesProcessed/totalTablesInInput). | 
| columnsCoverageRate | 필드 매핑에서 참조하는 매핑된 테이블의 열 비율입니다. | 

 그런 다음 개수를 확인하여 변환 결과를 이해합니다.


| Field | 의미 | 
| --- | --- | 
| totalTablesInInput 대 tablesProcessed 비교 | 실제로 사용된 CSV 파일과 찾은 CSV 파일의 수. | 
| totalColumnsInInput / columnsMapped / columnsUnmapped | 존재하는 소스 열, 사용된 열 및 무시된 열의 수입니다. | 
| totalRowsScanned / rowsConvertedSuccessfully | 성공적으로 변환된 행과 읽은 행의 수. | 
| rowsFailedCustomerError / rowsFailedServerError | 데이터 품질 문제와 내부 오류로 인해 실패한 행. | 
| totalResourcesGenerated | 생성된 총 FHIR 리소스입니다. | 

 그런 다음 누락된 내용을 찾습니다.


| Field | 의미 | 수행할 작업 | 
| --- | --- | --- | 
| unmappedTables | 프로파일이 선언하지 않는 입력의 CSV 파일(이유 및 해당 파일의 열 포함). | 해당 파일을 변환해야 하는 경우 테이블 매핑을 추가합니다. | 
| unmappedColumns | 테이블별로 CSV에 존재하지만 필드 매핑에 사용되지 않는 열입니다. | FHIR 출력에서 원하는 열에 대한 필드 매핑을 추가합니다. | 

## 적용 범위 개선(두 형식 모두)
<a name="data-transformation-drift-report-improving"></a>

1. 가장 큰 영향 격차 식별: C-CDA의 경우 `unknownSections`//의 가장 높은 빈도의 항목, CSV의 `unknownEntries``missingResources`경우 , `unmappedTables` `unmappedColumns`및 경고의 항목.

1. 데이터 변환 AI 에이전트(`UpdateProfileWithAgent`)를 사용하여 누락된 매핑을 추가합니다. 매핑되지 않은 OID(C-CDA) 또는 열 이름(CSV)을 붙여넣고 에이전트에게 매핑하도록 요청할 수 있습니다.

1. 새 프로필 버전을 게시하고 작업을 다시 실행합니다.

1. 새 `overallCoverageRate`를 비교하여 갭이 닫혔는지 확인합니다.

**참고**  
드리프트 감지는 프로필이 매핑되지 않은 내용을 보고합니다. 이는 변환 오류를 나타내지 않습니다. 소스 데이터는 사용 사례와 관련이 없는 경우 의도적으로 매핑되지 않은 상태로 둘 수 있습니다. 보고서를 사용하여 매핑할 가치가 있는 항목을 결정합니다.