제8장

제8장: 검증·적합성·인증과 미래

바이오센서와 WIA-BIO-011 구현이 주장하는 성능을 실제로 내는지 입증하는 방법을 다룬다. 분석적 밸리데이션 연구, ISO 15197의 혈당 정확도 기준, 시장 진입을 위한 규제 경로, 적합성 증거의 형태, v1.0 구현자가 처리해야 할 정오표, 그리고 이 분야의 향후 방향을 정리한다.

제3장부터 제6장까지는 성능 지표를 계산하고, WIA 레코드에 저장하고, SDK로 생성하고, 교정과 정도관리를 통해 유효하게 유지하는 방법을 보였다. 그러나 그것만으로는 아직 증명이 되지 않는다. 규제 당국, 병원 검사실, 현장 모니터를 사는 구매자는 다른 질문을 던진다. "그것을 어떻게 아는가?" 그 답은 밸리데이션 파일이다. 곧 정해진 설계와 사전에 정한 허용 기준, 추적 가능한 원자료를 갖춘 연구의 묶음이며, 그 뒤에 기기를 판매할 시장의 규칙에 따른 적합성 평가가 이어진다. 이 장은 그 마지막 단계를 차례로 살펴본다.

이 장은 세 종류의 출처를 다루며, 본문에서 이들을 구분한다. 첫째는 WIA-BIO-011 자체이다. 규격 §6–§7은 목표값과 허용 기준을 정하고, §9는 규제와 지침을 나열하며, 참조 SDK는 validateSensor를 제공한다. 둘째는 외부 표준과 지침(CLSI, ISO, 미국 FDA와 EU의 규제 체계)이다. 이 책은 공개된 적용 범위를 바탕으로 이들을 설명하고 실제 번호로 인용하지만, 판단의 근거는 언제나 각 문서의 현행판이다. 셋째는 PHASE 문서의 비규범 부속서로, 적합성 증거를 어떻게 묶을 수 있는지 제안한다. 이 장은 그것을 권장 형태로만 사용하며, 이 책의 해설은 해설이라고 표시한다.

8.1 CLSI 지침에 기반한 분석적 밸리데이션 계획

8.1.1 지표에서 연구로

CV나 LOD 같은 지표는 하나의 숫자이다. 밸리데이션 연구는 그 숫자를 믿을 만한 조건에서 만들어 내는 실험이다. 둘의 차이는 설계에 있다. 며칠, 몇 회의 런, 몇 개의 시약 또는 전극 로트, 몇 명의 작업자와 몇 대의 기기를 포함하는지, 어떤 시료 매트릭스를 쓰는지, 그리고 데이터를 보기 전에 어떤 허용 한계를 정했는지가 설계를 이룬다. 임상검사표준연구소(CLSI)는 임상 검사실과 IVD 제조사가 이 목적에 가장 흔히 쓰는 평가 프로토콜(EP 문서)을 발행한다. 규격 §9.2.3은 그중 다섯 가지, 곧 EP05, EP06, EP07, EP09, EP15를 명시한다. 이 책은 여기에 EP17을 더한다. 표준이 LOD와 LOQ를 보고하도록 하면서도 그 설정 방법에 대한 지침은 지정하지 않기 때문이다.

8.1.2 밸리데이션 매트릭스

아래 표는 이 지침들을 WIA-BIO-011 밸리데이션 계획으로 옮긴 것이다. 설계 열은 지침이 기술하는 유형의 예시 설계이며, 규제 문서에 쓰기 전에는 반드시 현행판을 확인해야 한다. 허용 기준 열은 규격에 값이 있으면 그 값을 인용하고, 마지막 열은 결과가 WIA 데이터 모델의 어디에 들어가는지, 또는 왜 들어갈 수 없는지를 적는다.

연구지침예시 설계허용 기준 (출처)WIA/SDK 필드
정밀도CLSI EP052–3개 수준, 20일 × 2런 × 2반복CV < 5 % (규격 §6.8), 교정 수준별 RSD < 5 %, n ≥ 3 (§7.2.2)validateSensor → precision.cv, PerformanceMetrics.precision
직선성CLSI EP06혼합 풀로 만든 5–9개 수준, 수준당 2–3반복R² > 0.99, 목표 0.995, 무작위 잔차 (§7.2.1)validateSensor → linearity.rSquared, 잔차는 CalibrationData.qualityControl
진도 / 회수율CLSI EP15(진도 부분), 첨가 회수 시험실제 매트릭스에 저·중·고 수준 첨가회수율 90–110 % (§7.2.3), 상대 오차 ±5 % (§6.7)validateSensor → accuracy.recovery (평균만)
간섭 / 선택성CLSI EP07각 간섭 물질을 생리적 상한 농도로 넣은 시료와 넣지 않은 시료의 쌍Kij > 100 (§6.5), 감도의 비로 계산validateSensor → selectivity.coefficients (원신호 비)
방법 비교CLSI EP09구간 전체에 걸친 수십에서 백여 개 이상의 시료, 비교 방법 1개허용 편향은 사용 목적에 따라 정함, v1.0에는 없음없음, BatchMeasurement로 모은 뒤 외부에서 분석
검출 능력CLSI EP17 (이 책의 추가)여러 날·여러 로트의 블랭크 및 저농도 시료LoD·LoQ 주장값, LOQ = 10σ/S (제3장)calculateLOD → LODResult, PerformanceMetrics.lod/loq
안정성규격이 지정한 CLSI EP 없음 (실시간·가속 연구)보관품을 정해진 간격으로 시험, 운용 수명 끝까지 사용2–8 °C 보관 시 유효기간 3–12개월, 100–1000회 측정, 드리프트 < 5 %/월 (§6.9)ValidationParameters.stability는 입력만 받고 평가하지 않음
응답 시간지정된 지침 없음농도를 계단식으로 바꾸고 높은 속도로 신호 기록규범 한계 없음 (CLI는 "≤ 60 s"를 출력)updatePerformanceMetrics(…, responseTime), 호출자가 입력

8.1.3 EP17 방식의 검출 능력

제3장은 교정으로부터 LOD = 3.3σ/S, LOQ = 10σ/S를 유도하였다. EP17은 검출 능력을 두 가지 오류율로 표현한다. 블랭크 한계는 블랭크 시료가 주어진 확률로 넘지 않는 가장 높은 결과이다. 검출 한계는 주어진 확률로 LoB보다 높은 결과를 내는 가장 낮은 농도이다. 위양성과 위음성을 각각 5 %로 두고 데이터가 대략 정규분포를 따른다고 보면 모수적 형태는 다음과 같다.

LoB = 블랭크 평균 + 1.645 × SD(블랭크)
LoD = LoB + 1.645 × SD(저농도 시료)

이 식을 부록 A.1의 블랭크에 적용하면 유용한 교차 검증이 된다. 블랭크 SD는 0.0070 µA이고 부록 A.2에서 다시 계산한 기울기는 약 1.1585 µA/mM이므로, LoB는 블랭크 평균보다 1.645 × 0.0070 / 1.1585 ≈ 0.0099 mM 위에 있다. 예시로, 여러 날에 걸쳐 측정한 저농도 포도당 시료의 SD가 0.009 µA라고 하자. 그러면 LoD는 0.0099 + 1.645 × 0.009 / 1.1585 ≈ 0.023 mM이다. 3.3σ/S 규칙이 주는 0.020 mM과 가깝지만, 블랭크만이 아니라 저농도 시료와 명시된 오류 모형에 근거한다는 점이 다르다. EP17은 소표본 보정 계수를 곱하고 로트 간 데이터를 요구하는데, 여기서는 두 가지 모두 생략하였다. LoQ는 제조사가 정한 총 오차 또는 CV 목표를 만족하는 가장 낮은 수준이다. WIA 레코드에서는 LoD와 LoQ 주장값을 PerformanceMetrics에 저장하고 방법은 밸리데이션 보고서에 기록한다. LODResult.method 열거형에는 EP17에 해당하는 값이 없으므로, 결과를 억지로 'iupac'이나 'epa'로 표시해서는 안 된다.

8.1.4 방법 비교: Bland–Altman과 Deming

상관계수는 방법 비교에 맞지 않는 도구이다. 두 방법은 거의 완벽하게 상관하면서도 일정하게 10 %씩 다를 수 있다. 올바른 질문에 답하는 분석은 두 가지이다. Bland–Altman 그림은 각 쌍의 차이(또는 백분율 차이)를 두 값의 평균에 대해 그리고, 평균 편향 d̄와 95 % 일치 한계 d̄ ± 1.96 SDd를 보고한다. 그 한계가 받아들일 만한지는 연구 전에 임상적으로 정해 두어야 한다. Deming 회귀는 두 방법 모두에 측정 오차가 있을 때 직선을 적합하며, 보통 최소제곱법은 이 오차를 무시한다. Deming 회귀의 기울기와 절편은 비례 편향과 상수 편향을 구분해 준다. 이상값이나 비정규 오차가 예상되면 비모수적 대안인 Passing–Bablok 회귀를 흔히 쓴다. SDK에는 이 가운데 어떤 것도 없다. 실무적인 방법은 결과 쌍을 BatchMeasurement 안의 MeasurementResult 레코드로 모아 내보낸 뒤, 버전을 보고서에 기록한 검증된 통계 패키지로 분석하는 것이다.

8.1.5 validateSensor가 검사하는 것과 사용자에게 남기는 것

validateSensor의 동작은 제5장에서 설명하였다. 밸리데이션 관점에서는 네 가지 공백이 중요하다. 정확도를 평균 회수율로 판정하므로, 90–110 %를 벗어난 개별 첨가 시료가 좋은 평균 뒤에 숨을 수 있다. 선택성은 원신호끼리 나누며, 입력으로 받는 농도를 무시한다. 안정성 블록은 평가되지 않는다. 그리고 방법 비교, 간섭 용량–반응, 검출 능력에는 필드 자체가 없다. SDK를 고치지 않고도 얇은 래퍼 하나로 앞의 세 공백을 메울 수 있다. 아래 도우미는 이 책의 코드이며 @wia/bio-011의 일부가 아니다.

import { BiosensorSDK, ValidationParameters } from '@wia/bio-011';

// 이 책의 도우미: validateSensor 위에 더 엄격한 검사를 덧붙인다.
interface StrictReport {
  sdkValidated: boolean;
  recoveryPerSample: { expected: number; recovery: number; passed: boolean }[];
  selectivityNormalized: Record<string, number>;
  stability?: { retentionPct: number; halfLifeDays: number; driftPctPerMonth: number };
  validated: boolean;
}

export function strictValidate(
  sdk: BiosensorSDK,
  p: ValidationParameters,
  targetConcentration: number,          // targetSignal을 낸 분석물 농도
): StrictReport {
  const base = sdk.validateSensor(p);
  let ok = base.validated;

  // 1. 평균이 아니라 모든 첨가 시료가 허용 범위 안에서 회수되어야 한다.
  const [lo, hi] = p.accuracy?.requiredRecovery ?? [90, 110];
  const recoveryPerSample = (p.accuracy?.spikedSamples ?? []).map(s => {
    const recovery = (s.measuredConcentration / s.expectedConcentration) * 100;
    return { expected: s.expectedConcentration, recovery, passed: recovery >= lo && recovery <= hi };
  });
  if (recoveryPerSample.some(r => !r.passed)) ok = false;

  // 2. 선택성은 감도(단위 농도당 신호)의 비로 계산한다.
  const selectivityNormalized: Record<string, number> = {};
  if (p.selectivity) {
    const sTarget = p.selectivity.targetSignal / targetConcentration;
    for (const i of p.selectivity.interferents) {
      const k = sTarget / (i.signal / i.concentration);
      selectivityNormalized[i.name] = k;
      if (k < p.selectivity.requiredSelectivity) ok = false;
    }
  }

  // 3. 안정성: ln(신호)를 시간(시간 단위)에 대해 1차 감쇠로 적합한다.
  let stability: StrictReport['stability'];
  const m = p.stability?.measurements ?? [];
  if (m.length >= 3) {
    const t = m.map(x => x.time), y = m.map(x => Math.log(x.signal));
    const mt = t.reduce((a, b) => a + b) / t.length, my = y.reduce((a, b) => a + b) / y.length;
    const k = -t.reduce((s, ti, j) => s + (ti - mt) * (y[j] - my), 0) /
               t.reduce((s, ti) => s + (ti - mt) ** 2, 0);
    const retentionPct = (m[m.length - 1].signal / m[0].signal) * 100;
    stability = {
      retentionPct,
      halfLifeDays: Math.LN2 / k / 24,
      driftPctPerMonth: (1 - Math.exp(-k * 730)) * 100,   // 730 h ≈ 1개월
    };
    if (retentionPct < p.stability!.requiredStability) ok = false;
  }

  return { sdkValidated: base.validated, recoveryPerSample, selectivityNormalized, stability, validated: ok };
}

예시로 첨가 시료 세 개(2 mM을 1.78로, 10 mM을 10.2로, 20 mM을 21.9로 측정)를 넣으면 SDK는 평균 회수율 100.2 %로 합격 판정을 낸다. 래퍼는 2 mM 시료의 회수율이 89 %에 그쳐 파일 전체가 불합격임을 보여 준다. 부록 A.3의 간섭 데이터와 목표 농도 5 mM을 넣으면 래퍼는 과당 K ≈ 39, 아스코르브산 ≈ 1.5, 요산 ≈ 4.9를 보고하므로 세 물질 모두 §6.5의 목표 100에 미달한다. SDK의 원신호 비(39, 73, 49)도 불합격이기는 하지만, 그 차이의 크기를 잘못 보여 준다. 4주간의 예시 안정성 계열(주 간격 신호 100, 98.9, 97.6, 96.8, 95.5)을 넣으면 잔존율 95.5 %, 적합한 반감기 약 430일, 드리프트 월 약 4.8 %가 나오며, 이는 §6.9의 목표 5 %를 간신히 만족한다. 이 값들은 예시 데이터이며, 실제 안정성 주장에는 여러 로트와 주장하는 기간 전체의 데이터가 필요하다.

8.2 ISO 15197:2013에 따른 혈당 정확도

8.2.1 기준

ISO 15197:2013은 자가 검사용 혈당 측정 시스템의 요구사항을 규정한다. 바이오센서 제품에 대한 정확도 표준으로 가장 잘 알려진 예이며, 규격 §9.2.1이 그 핵심 시스템 정확도 기준을 인용한다. 기준값이 100 mg/dL(5.55 mmol/L) 미만일 때는 결과의 95 % 이상이 기준값의 ±15 mg/dL(±0.83 mmol/L) 이내에 있어야 하고, 그 이상일 때는 ±15 % 이내에 있어야 한다. 또한 결과의 99 %가 제1형 당뇨병용 합의 오차 격자(Consensus Error Grid)의 A 구역과 B 구역 안에 들어야 한다. 규격 §9.2.1은 여기에 Clarke 오차 격자를 적고 있으나 이는 오류이며, 2013년판은 합의(Parkes) 격자를 사용한다. 시스템 정확도 연구는 정해진 농도 구간에 걸쳐 분포한 최소 100명의 피험자 모세혈 시료를 시약 로트 3개로 이중 측정하여, 최소 600개의 결과를 얻는다. 이 표준은 일반 사용자가 참여하는 사용자 수행 평가와 간섭, 적혈구 용적률 같은 영향 요인도 다룬다. 오차 격자의 구역 경계는 공표된 좌표로 주어지므로, 근사하지 말고 원 출판물의 좌표로 구현해야 한다.

8.2.2 합격·불합격 계산 예

아래 스무 쌍은 예시일 뿐이다. 실제 연구에는 최소 600개의 결과가 필요하지만 계산 방법은 같다. 각 쌍의 판정 규칙은 기준값 100 mg/dL에서 바뀐다. 그 미만에서는 절대 차이를 15 mg/dL과 비교하고, 그 이상에서는 상대 차이를 15 %와 비교한다.

#기준값 (mg/dL)측정기 (mg/dL)차이한계 이내?
14552+7 mg/dL예
26270+8 mg/dL예
37866−12 mg/dL예
48895+7 mg/dL예
595112+17 mg/dL아니오
69990−9 mg/dL예
7104112+7.7 %예
8120131+9.2 %예
9135128−5.2 %예
10150163+8.7 %예
11168160−4.8 %예
12185198+7.0 %예
13210236+12.4 %예
14240229−4.6 %예
15270301+11.5 %예
16300284−5.3 %예
17340322−5.3 %예
18380402+5.8 %예
19420445+6.0 %예
20480455−5.2 %예

스무 개 중 열아홉 개(95 %)가 한계 안에 있으므로, 이 데이터는 첫째 기준을 경계선에서 정확히 만족한다. 13번 쌍이 236 대신 244 mg/dL(+16.2 %)로 측정되었다면 18/20(90 %)만 남아 불합격이 된다. 여기서 두 가지를 배울 수 있다. 첫째, 소규모 연구는 결과 하나로 합격과 불합격이 갈릴 수 있으며, 표준이 큰 최소 표본 수를 정한 이유가 여기에 있다. 둘째, ±15 % 기준은 평균 편향이 아니라 오차 분포의 꼬리에 대한 기준이다. 이 표의 평균 차이는 작지만 결과 하나가 판정을 좌우한다. 오차 격자 기준은 따로 검사한다. 이 정도 크기의 오차는 항등선 가까이에 있어 A 구역에 들 것으로 예상되지만, 각 점의 구역은 공표된 격자 좌표로 판정해야 한다. 단위 처리도 중요하다. WIA 레코드는 기본적으로 포도당을 mM으로 저장하며, 환산 계수는 mmol/L당 약 18.0 mg/dL이다. 반올림하지 않은 계수로 환산하고, 비교하기 전에 기준값과 측정값의 단위를 일치시켜야 한다.

// 이 책의 도우미: ISO 15197:2013 시스템 정확도 기준 1 (입력 단위 mg/dL)
export function iso15197Within(ref: number, meter: number): boolean {
  return ref < 100 ? Math.abs(meter - ref) <= 15
                   : Math.abs(meter - ref) / ref <= 0.15;
}
export function iso15197Criterion1(pairs: [number, number][]): { pct: number; passed: boolean } {
  const ok = pairs.filter(([r, m]) => iso15197Within(r, m)).length;
  const pct = (ok / pairs.length) * 100;
  return { pct, passed: pct >= 95 };
}

8.2.3 다른 혈당 시스템

ISO 15197은 자가 검사용 측정기에 적용된다. 연속혈당측정기(CGM)는 다른 체계로 평가한다. 미국 FDA는 통합형 CGM 시스템에 대한 특별 관리 기준을 정해 두었으며, 그 성능은 흔히 평균 절대 상대 차이(MARD)와 정해진 일치 구간 안에 드는 판독값의 비율로 요약하고, 혈당 범위별·삽입 후 경과 시간별로 나누어 본다. 규격 §8.1은 출처 없이 CGM 정확도 수치("A 구역 90 %")를 제시하는데, 이 책은 그 수치를 쓰지 않는다. 중환자에게 쓰는 병원용 현장 혈당 측정기는 흔히 자가 검사용보다 엄격한 기준으로 평가한다. 구현자에게 주는 일반적인 교훈은 정확도 목표가 바이오센서 표준이 아니라 사용 목적과 적용되는 규제에서 나온다는 것이다.

8.3 시장 진입을 위한 규제 경로

WIA-BIO-011은 규제 표준이 아니다. 이 표준을 따른다고 해서 어느 나라에서든 기기가 허가되거나 인증되는 것은 아니다. 이 표준이 할 수 있는 일은 규제 당국이 요구하는 증거를 정리하는 것이다. 이 절은 규격 §9가 언급하는 두 체계를 개관하고, 규격이 드는 예를 바로잡으며, 모든 IVD 제조사가 결국 충족하게 되는 공통 표준을 정리한다. 한국 식품의약품안전처(MFDS)처럼 다른 관할권도 고유한 등급 분류와 허가 제도를 운영하지만, 여기서는 다루지 않으므로 별도의 검토가 필요하다.

8.3.1 미국 (FDA)

FDA는 IVD를 다른 의료기기와 마찬가지로 위험도와 안전성·유효성 확보에 필요한 관리 수준에 따라 Class I, II, III으로 분류한다. Class I 기기는 일반 관리의 대상이며, 상당수는 시판 전 신고가 면제된다. Class II 기기는 보통 합법적으로 판매 중인 비교 기기(predicate)와의 실질적 동등성을 보이는 510(k) 시판 전 신고와 함께, 해당 기기 유형의 특별 관리 기준을 충족해야 한다. Class III 기기는 시판 전 승인(PMA)이 필요하며, 대개 임상 데이터를 포함한 타당한 과학적 증거가 뒷받침되어야 한다. 비교 기기가 없지만 위험도가 중간인 새로운 기기는 De Novo 신청으로 새로운 Class II 분류를 만들 수 있다. 규격 §9.1.1의 예는 틀렸다. 시험지와 측정기를 포함한 혈당 검사 시스템은 Class I이 아니라 Class II이다. 심장 트로포닌 분석도 Class II로 규제된다. "새로운 심장 표지자는 Class III"은 규칙이 아니다. 등급은 새로움이 아니라 기기 유형과 위험도를 따른다. 현장진단 용도에서는 미국에서 한 가지 문제가 더 생긴다. CLIA에 따라 각 검사는 면제(waived), 중등도 복잡성, 고도 복잡성으로 분류되며, 이에 따라 검사를 수행할 수 있는 장소가 정해진다. 의원이나 약국에서 쓰기 위한 CLIA 면제는 훈련받지 않은 사용자도 정확한 결과를 얻는다는 별도의 증거를 요구한다.

8.3.2 유럽연합 (IVDR)

체외진단 의료기기에 관한 규정 (EU) 2017/746(IVDR)은 부속서 VIII의 분류 규칙에 따라 기기를 A부터 D까지의 등급으로 나누고, 과학적 타당성, 분석적 성능, 임상적 성능으로 이루어진 성능 평가를 요구한다. 규격 §9.1.2의 예 가운데 두 가지는 바로잡아야 한다. HIV 감염을 검출하는 기기는 C등급이 아니라 최고 등급인 D등급이다. 분류 규칙이 전파 위험이 높은 생명 위협 전파성 병원체에 대한 검사와 혈액 선별 검사를 D등급에 두기 때문이다. 혈액형 검사는 일부 항원만 D등급이고 나머지는 C등급이다. 자가 검사용 기기는 기본적으로 C등급이며, 임신·가임 검사 등 짧은 예외 목록만 B등급이다. EU 분류 지침(MDCG 2020-16)은 자가 검사용 혈당 측정 시스템을 C등급으로 본다. 검체 용기와 일반 검사실 기기가 A등급의 전형적인 예이다. 비멸균 A등급 기기를 제외하면 적합성 평가에 인증기관(notified body)이 참여하며, 등급이 높을수록 심사가 깊어진다.

8.3.3 비교

예시 기기미국 FDAEU IVDR비고
자가 검사용 혈당 측정기와 시험지Class II, 510(k)C등급 (자가 검사, MDCG 2020-16)두 시장 모두 ISO 15197을 통상적인 성능 기준으로 삼는다
통합형 CGM특별 관리 기준이 있는 Class II (iCGM)IVD가 아님: 생체 내 센서로서 의료기기 규정 (EU) 2017/745의 적용을 받는다정확도는 ISO 15197이 아니라 MARD와 일치 구간으로 평가한다
심장 트로포닌 분석 (전문가용)Class II, 510(k)사용 목적에 따라 다르나 보통 규칙 3에 따른 C등급임상 판정 기준값은 분석법별로 다르다 (기준 집단의 99번째 백분위수)
임신 자가 검사 (hCG, 측방유동)Class II (다수가 일반의약품 판매)B등급 (명시된 자가 검사 예외)결과를 해석하는 판독 앱은 규제 범위를 바꿀 수 있다
HIV 항원/항체 검사FDA 생물의약품 센터가 규제, 흔히 PMA 또는 BLAD등급규격 §9.1.2는 "HIV = C등급"으로 잘못 적고 있다
환경·식품용 바이오센서 (비의료)IVD 아님IVD 아님방법 밸리데이션은 AOAC나 각국 환경 시험법 같은 분야별 체계를 따른다

이 표는 방향을 잡기 위한 전형적인 결과이다. 실제 제품의 법적 등급은 정확한 사용 목적과 주장 내용에 따라 달라지므로, 현행 규정과 지침에 비추어 확인해야 하며 이 책으로 추론할 수는 없다.

8.3.4 품질 시스템, 위험, 소프트웨어, 표시 사항

어느 경로를 택하든 같은 공통 표준이 등장한다. ISO 13485는 품질경영시스템을 정의하며, 규격 §9.3.1이 나열하듯 설계 관리, 공급자 관리, 공정 밸리데이션, 추적성, 시판 후 감시를 포함한다. ISO 14971은 수명주기 전반의 위험관리를 다룬다. 바이오센서의 전형적인 위해 요인으로는 인슐린 과다 투여로 이어지는 거짓 저혈당 결과, 유효한 것으로 판독된 만료 시험지, 내보낸 값에 붙은 잘못된 단위, 신호를 높이는 간섭 물질 등이 있다. WIA 품질 플래그의 상당수는 이런 의미의 위험 통제 수단이다. calibration-expired, sensor-expired, temperature-out-of-range는 각각 특정 위해 요인을 줄이며, 그래서 이 가운데 일부가 결과를 막지 못한다는 제5장의 관찰이 중요하다. BiosensorSDK를 실행하는 앱처럼 임상 값을 계산하는 소프트웨어는 수명주기에 대해 IEC 62304의 적용을 받고, 사용적합성 공학에 대해서는 보통 IEC 62366-1의 적용을 받는다. ISO 18113 시리즈는 제조사가 사용자에게 알려야 할 내용, 곧 사용 목적, 성능 특성, 시료 종류와 부피, 보관 조건, 유효기간, 정도관리 절차를 규정한다(규격 §9.2.2). 여기서 WIA 레코드가 직접 도움이 된다. PerformanceMetrics, Biosensor.lifetime, QualityControlSample에 표시 사항에 적어야 할 숫자 대부분이 이미 들어 있으므로, 표시 사항과 데이터를 하나의 원천에서 만들 수 있다. 규격 §9.3.2는 제조 관리 기준으로 청정실 등급(ISO 14644), 설비 적격성 평가(IQ, OQ, PQ), 공정 밸리데이션, 변경 관리, 시정 및 예방 조치(CAPA)를 추가로 든다.

8.4 WIA 적합성 증거 (비규범)

규제 허가는 기기에 관한 것이다. 반면 WIA 적합성은 구현에 관한 것이다. 판독기 펌웨어, SDK 이식판, 또는 WIA-BIO-011 레코드를 올바르게 생성·저장·해석한다고 주장하는 클라우드 서비스가 그 대상이다. 버전 1.0은 인증 프로그램도, 적합성 등급도, 합격률도 정의하지 않는다. 그런 제도가 있다고 말하면 지어낸 것이 된다. 다만 PHASE 문서에는 적합성 증거의 합리적인 형태를 기술한 비규범 부속서(G, I, J)가 있다. 앞 장들에서 지적했듯이 그 주변 본문은 범용 템플릿이므로, 이 책은 증거의 형태만 받아들이고 내용은 바이오센서에 맞게 채운다.

8.4.1 테스트 벡터

부속서 G는 요구사항마다 긍정 테스트 벡터와 부정 테스트 벡터를 최소 하나씩 두고, CI에서 실행하여 합격·불합격 매트릭스를 공개하도록 권한다. 부속서가 가리키는 디렉터리는 바이오센서 저장소에 존재하지 않으므로, 구현자가 벡터를 직접 작성해야 한다. 부록 A의 데이터는 다시 계산한 값을 쓴다면 좋은 출발점이 된다. 아래의 요구사항 식별자(BIO011-CAL-01 등)는 v1.0이 요구사항에 번호를 붙이지 않기 때문에 이 책이 정한 관례이다.

[
  {
    "id": "BIO011-CAL-01-pos",
    "requirement": "교정은 5점 이상, R² > 0.99 (규격 7.1, 7.2.1)",
    "input": {
      "standardConcentrations": [0, 1, 5, 10, 50, 100],
      "measuredSignals": [0.05, 1.20, 5.85, 11.50, 58.20, 115.80],
      "concentrationUnit": "mM", "signalUnit": "uA"
    },
    "expect": { "accepted": true, "slope": { "value": 1.1585, "tol": 0.0005 },
                "intercept": { "value": 0.047, "tol": 0.001 }, "rSquaredMin": 0.9999 }
  },
  {
    "id": "BIO011-CAL-01-neg",
    "requirement": "5점 미만의 교정은 거부된다",
    "input": { "standardConcentrations": [0, 5, 10, 50],
               "measuredSignals": [0.05, 5.85, 11.50, 58.20] },
    "expect": { "accepted": false, "errorCode": "BIO010" }
  },
  {
    "id": "BIO011-LOQ-01-pos",
    "requirement": "LOQ = 10 sigma / S (SDK의 계산과 같음, 규격 6.3 정정)",
    "input": { "blankSignals": [0.05, 0.06, 0.05, 0.07, 0.05, 0.06, 0.05, 0.06, 0.05, 0.06],
               "sensitivity": 1.1585 },
    "expect": { "lod": { "value": 0.0199, "tol": 0.0005 }, "loq": { "value": 0.0604, "tol": 0.001 } }
  }
]

부정 벡터는 긍정 벡터만큼 중요하다. 부속서 G는 기록된 사유 없이 건너뛴 시험을 불합격으로 간주하며, 부정 결과도 긍정 결과와 같은 충실도로 보고해야 한다고 적고 있다. 바이오센서 구현에 쓸모 있는 부정 벡터로는 만료된 교정에서의 측정(BIO004 기대), 교정되지 않은 센서에서의 측정(BIO003), 목표보다 25 % 높은 QC 결과(불합격 판정과 재교정 조치 기대), 그리고 25 °C 기준으로 처리한 37 °C 시료(temperature-out-of-range 플래그 기대)가 있다.

8.4.2 증거 패키지와 그 유지

부속서 G는 증거 패키지를 네 가지 항목을 담은 묶음으로 설명한다. 소프트웨어 자재명세서(CycloneDX 또는 SPDX), 원격 API가 있다면 그 OpenAPI 문서, 테스트 벡터 매트릭스, 그리고 서명된 매니페스트이다. Sigstore처럼 투명성 로그에 기록되는 방식으로 서명하면, 소비자는 사설 인증기관을 신뢰하지 않고도 패키지의 출처를 검증할 수 있다. 부속서는 또한 소스 변경이 없어도 분기마다 패키지를 다시 발행하여 컴파일러, 의존성, 운영체제의 변화로 생기는 드리프트가 드러나게 하라고 권한다. 바이오센서 제품에 대해서는 범용 부속서가 예상하지 못한 세 가지를 더할 것을 이 책은 제안한다. 보고한 성능의 근거가 되는 교정·QC 데이터, 정확한 SDK 버전과 8.6절 정오표에 대한 로컬 패치, 그리고 품질 플래그와 위해 요인 사이의 위험 통제 대응표이다.

8.4.3 프로파일 매니페스트

부속서 I는 서명된 JSON 프로파일 매니페스트를 제안한다. 구현은 여기에 각 요구사항을 supported, partial(사유 포함), excluded(정당화 포함) 가운데 하나로 적는다. 부분 적합성을 정직하게 기술하는 방법이며, v1.0 구현에서는 부분 적합이 정상적인 상태이다. 부속서 J는 배포 토폴로지 필드(단일 테넌트 엣지, 멀티 테넌트 게이트웨이, 연합 메시, 망 분리 배치)를 더하는데, 이는 제7장에서 기기–클라우드 아키텍처를 다루며 논의하였다. 참조 SDK로 만든 앱의 최소 매니페스트는 다음과 같을 수 있다.

{
  "implementation": "example-glucose-reader-app",
  "standard": "WIA-BIO-011",
  "standardVersion": "1.0.0",
  "sdk": { "package": "@wia/bio-011", "version": "1.0.0", "localPatches": ["temp-comp-direction", "loq-10-sigma"] },
  "topology": "single-tenant-edge",
  "requirements": [
    { "id": "BIO011-CAL-01", "status": "supported" },
    { "id": "BIO011-CAL-02", "status": "partial",
      "reason": "잔차 무작위성은 앱 코드에서 검사, SDK는 잔차만 보고" },
    { "id": "BIO011-ACC-01", "status": "supported" },
    { "id": "BIO011-SEL-01", "status": "partial",
      "reason": "선택성은 앱에서 농도로 정규화, SDK의 비는 사용하지 않음" },
    { "id": "BIO011-STB-01", "status": "excluded",
      "justification": "유효기간 주장은 소프트웨어가 아니라 제조사 연구로 설정" },
    { "id": "BIO011-NLC-01", "status": "excluded",
      "justification": "비선형(4PL) 역산은 v1.0 SDK에 구현되어 있지 않음" }
  ],
  "evidence": { "vectorMatrix": "vectors/results.json", "sbom": "sbom.cdx.json" }
}

이 매니페스트는 누군가가 인증했다고 주장하지 않는다. 다른 사람이 벡터로 확인할 수 있는 구조화된 진술일 뿐이다. 이 절제는 의도된 것이다. 표준이 인증 기관과 그 기준을 정의하기 전까지 "WIA 인증"은 의미 있는 표시가 아니므로, 제품 설명 자료에 써서는 안 된다.

8.5 구현 자체 점검

아래 표는 규격 §6–§7의 정량적 요구사항을 모으고, 각각을 SDK나 CLI로 어떻게 시험하는지, 그리고 도구만으로는 무엇을 할 수 없는지를 적는다. 규격은 §6의 값을 "목표(target)"로, §7의 값을 최소 요구사항과 허용 기준으로 표현하며, MUST나 SHOULD 같은 형식적 규범 용어는 쓰지 않는다. 그래서 "v1.0에서의 지위" 열에 그 표현을 그대로 기록한다.

요구사항규격v1.0에서의 지위SDK / CLI로 시험메워야 할 공백
블랭크를 포함한 5점 이상 교정, 각 수준 이중 측정§7.1최소 요구사항calibrateSensor가 5점 미만에서 BIO010 발생SDK는 배열 항목 수를 세므로 반복 측정도 점으로 세고, 블랭크는 요구하지 않는다. 설계를 따로 확인한다.
R² > 0.99 (목표 0.995), 무작위 잔차§7.2.1허용 기준calibrateSensor (0.99 미만이면 BIO011), validateSensor.linearity잔차 패턴은 검사하지 않는다. 연속 부호 검정이나 EP06 방식의 편차 한계를 적용한다.
수준별 RSD < 5 %, n ≥ 3§7.2.2허용 기준수준마다 validateSensor.precision을 한 번씩 호출수준별 반복 처리와 분산 성분이 없다. 성능 주장에는 EP05 설계를 쓴다.
회수율 90–110 %§7.2.3허용 기준validateSensor.accuracy, CLI validate --accuracySDK는 평균 회수율을 쓴다. 첨가 시료마다 확인한다(8.1.5절).
상대 오차 ±5 % 정확도§6.7목표MeasurementResult.concentration을 기준값과 비교SDK 메서드가 없다. 방법 비교(EP09)는 외부에서 수행한다.
CV < 5 %§6.8목표validateSensor.precision, CLI validate --precisionCLI는 입력한 숫자를 5와 비교할 뿐이다.
Kij > 100§6.5목표validateSensor.selectivity원신호 비이다. 농도로 정규화한다.
3수준 QC가 목표의 ±10 % 및 과거 평균의 ±2 SD 이내§7.4허용 기준두 창의 교집합을 acceptableRange로 설정하고 runQualityControl 실행z-점수는 passed에 영향을 주지 않는다. CLI qc-report는 고정된 시연 값을 출력한다.
재교정: 첫 사용 전, 매일, 20–50개 시료마다 QC, 매주 또는 QC 실패 시§7.3절차SDK의 교정 유효기간은 24시간 (이후 BIO004)시료 수 기반 QC 시점과 주간 전체 재교정은 애플리케이션이 일정을 잡아야 한다.
2–8 °C에서 유효기간 3–12개월, 100–1000회 측정, 드리프트 < 5 %/월§6.9목표Biosensor.lifetime 만료 (BIO007)maxMeasurements는 강제되지 않고, 안정성은 평가되지 않는다.
효소 센서의 온도 관리 ±1 °CREADME QA지침temperature-out-of-range 플래그플래그는 권고일 뿐이다. 결과 출고를 막을지 정한다.

CLI에는 특히 두 가지 주의가 필요하다. validate 명령은 하드코딩된 R² 0.9995와 응답 시간 15 s를 출력하고, qc-report는 고정된 관리 시료 결과 세 개를 출력한다. 두 명령 모두 출력 형식을 보여 주는 시연용이다. 그 출력을 측정 증거로 밸리데이션 파일에 넣어서는 절대 안 된다.

8.6 알려진 v1.0 정오표

이 문제들은 앞 장들에서 각각 등장한 자리에서 지적하였다. 구현자와 감사자에게는 하나의 목록이 필요하므로 여기에 모은다. 제안하는 수정은 이 책의 해설이며, 개정된 규격이 각 항목을 확정할 때까지 이 책이 권고하는 내용이다.

항목위치v1.0의 기술 또는 동작틀린 이유수정 제안 (이 책의 해설)
LOQ 관계규격 §6.3LOQ = 3.3 × LODLOD = 3.3σ/S, LOQ = 10σ/S이면 비는 10/3.3 ≈ 3.03이다LOQ = 10σ/S로 적고 배수 형식은 삭제
QCM 상수규격 §4.3.15 MHz에 대해 2.26 × 10⁸ Hz·cm²/g10 MHz의 값이다. Sauerbrey 식은 f₀²에 비례한다5 MHz에서 5.66 × 10⁷ Hz·cm²/g (56.6 Hz·cm²/µg)
SPR 관계식규격 §4.2.3Δθ = m × Δn × d를 법칙처럼 제시, 10⁻⁶–10⁻⁷ RIU를 "감도"로 표기표준적인 물리 관계식이 아니며, RIU 값은 분해능이다감도는 deg/RIU, 분해능은 RIU로 보고
온도 보상 방향규격 §5.4 대 SDK/CLI규격은 [1 + α(T − Tref)]를 곱하고 코드는 나눈다두 관례에서 α의 의미가 반대가 된다SDK처럼 나누는 형식을 택하고, α를 °C당 신호의 증가 비율로 정의
선택성 정규화부록 A.3, validateSensor농도가 다른 원신호의 비, 39:1을 "양호"로 판단Kij는 감도의 비이며, 규격 자신의 목표는 > 100이다각 신호를 농도로 나누어 ≈ 39, 1.5, 4.9로 보고
부록 A.2 회귀규격 부록 A.2기울기 1.157, 절편 0.043, R² 0.9998데이터로 계산하면 ≈ 1.1585, 0.047, 0.99999이다다시 계산한 값을 공표하고 테스트 벡터에 사용
README 37 °C 예제README SDK 예제규격 A.2의 20.3 mM과 같은 결과를 암시데이터(5.8 대 5.85)와 온도(37 °C)가 다르며, SDK는 ≈ 14.9 mM과 온도 플래그를 반환한다두 예를 분리하고 SDK 출력을 그대로 보인다
동적 범위 정의규격 §1.4"센서가 선형으로 응답하는 범위"그것은 선형 범위이며, 동적 범위는 log₁₀(Cmax/LOD)이다두 용어를 따로 정의
"EPA" LOD 방법SDK calculateLOD고정 배수 3.14t = 3.14는 n = 7, 99 %에서만 성립한다n − 1 자유도의 t를 쓰거나 방법 이름을 바꾼다
규제 예시규격 §9.1.1–§9.1.2혈당 시험지 Class I, 새로운 심장 표지자 Class III, HIV 검사 C등급혈당·트로포닌 검사는 FDA Class II이고, HIV 검사는 IVDR D등급이다8.3절의 표로 교체
오차 격자규격 §9.2.1, §8.1Clarke 오차 격자, "CGM A 구역 90 %"ISO 15197:2013은 합의(Parkes) 격자를 쓰며, CGM 수치는 출처가 없다합의 격자를 인용하고 CGM 수치는 삭제
트로포닌 판정 기준규격 §8.2보편 기준값 0.04 ng/mL판정 기준은 분석법별 99번째 백분위수 한계이다분석법마다 POCTestResult.cutoff에 저장
참고문헌 목록규격 §10.1번호가 1, 3, 5항목이 빠져 있다번호를 다시 매기고, 빠진 항목을 추정해 채우지 않는다
PHASE 문서의 정체spec/PHASE-1..4WIA-BIO-010 식별자, 파일 이름과 맞지 않는 제목, 더 느슨한 범용 기준값다른 표준의 템플릿 문서이다바이오센서 전용 PHASE 문서로 교체하고, 그 전까지는 본 규격만 규범으로 취급

SDK를 로컬에서 패치하는 구현자는 각 패치를 프로파일 매니페스트(위의 localPatches 필드)에 기록해야 한다. 그렇지 않으면 패치하지 않은 참조 구현과 결과를 비교하는 감사자에게 그 차이가 결함처럼 보인다.

8.7 향후 방향

바이오센서 연구는 빠르게 움직이며, 그 상당수는 결국 v1.0 데이터 모델의 한계를 시험하게 될 것이다. 아래 방향들은 연구 문헌에서 이미 확립된 것들이다. 그 시기와 상업적 규모는 여기서 예측하지 않는다.

WIA-BIO-011의 향후 개정에 대해 앞 장들은 실무적인 목록을 제시한다. 타입 시스템에 이미 있는 4PL과 Michaelis–Menten 모형의 비선형 역산, SignalProcessingParams가 이미 선언한 필드에 맞는 드리프트 보상과 필터링, maxMeasurements의 강제와 실패 시 상태 전이, 실제로 평가되는 안정성 블록, 번호가 붙은 요구사항과 공식 테스트 벡터, 그리고 실제 전송 프로토콜과 이 표준에 맞게 다시 쓴 PHASE 문서가 그것이다. 이들은 모두 현재의 공백을 검사 가능한 요구사항으로 바꾸며, 그것이 표준이 존재하는 이유이다.

8.8 장 요약

밸리데이션은 지표를 증거로 바꾼다. CLSI 프로토콜은 연구 설계를 제공한다. EP05는 정밀도, EP06은 직선성, EP07은 간섭, EP09는 방법 비교, EP15는 사용자 검증을 다루며, 이 책은 검출 능력을 위해 EP17을 더하였다. 참조 validateSensor는 이 가운데 일부만 다루며, 얇은 래퍼로 정확도·선택성·안정성의 공백을 메울 수 있다. 혈당에 대해 ISO 15197:2013은 오차 분포의 꼬리에 대한 정확도 기준을 정하며, 계산 예는 결과 하나로 판정이 갈릴 수 있음을 보여 주었다. 규제 경로는 FDA와 IVDR에서 다르고, 규격의 예는 바로잡아야 한다. 혈당과 트로포닌 검사는 FDA Class II이고, HIV 검사는 IVDR D등급이다. v1.0에는 WIA 적합성 인증 제도가 없다. 정직한 주장은 긍정·부정 테스트 벡터, 증거 패키지, 그리고 부분 적합을 숨기지 않는 프로파일 매니페스트의 형태를 띤다. 정오표는 v1.0에 의존하기 전에 구현자가 고치거나 문서화해야 할 항목을 모았고, 향후 방향 목록은 다음 버전이 오늘의 공백을 요구사항으로 바꿀 수 있는 지점을 보여 준다.