제8장
세포치료를 둘러싼 규제가 어떻게 소프트웨어 요구사항으로 바뀌는지, 구현이 WIA-BIO-005가 말하는 대로 동작한다는 것을 어떻게 증명하는지, 그리고 표준의 다음 판에는 무엇이 필요한지를 다룬다.
앞의 일곱 장에서 전체 그림을 차례로 쌓아 올렸다. 제품의 생물학, 제조 공정, 출하 판정의 근거가 되는 시험, 데이터 레코드, 다섯 가지 필수 소프트웨어 구성요소, 정맥에서 정맥까지의 워크플로, 그리고 임상 안전성 계층이다. 마지막 장은 다른 질문을 던진다. 어떤 조직이 이 모든 것을 구축했다고 하자. 그 시스템이 사용에 적합하다는 것을 규제기관, 감사인, 협력 병원에 어떻게 보여 줄 것인가. 그리고 그 시스템이 누군가의 느슨한 해석이 아니라 WIA-BIO-005 자체에 부합한다는 것을 어떻게 보여 줄 것인가.
이하의 논의는 두 가지 전제 위에 있다. 첫째, WIA-BIO-005는 WIA가 발행한 자율 기술 표준이다. FDA, EMA, 식품의약품안전처(MFDS)가 인정한 표준이 아니며, 이 표준에 부합한다고 해서 어떤 규제 의무도 대체되지 않는다. 표준 제9절은 적합한 시스템이 운영자의 규제 준수를 돕기 위해 고려해야 할 법규를 나열할 뿐이다. 둘째, 이 장에서 말하는 "인증"은 cert.wiastandards.com에서 운영하는 WIA 프로그램, 즉 공개된 문서에 대한 적합성 평가를 뜻한다. 규제상의 지위나 허가, 제품 승인이 아니다.
규격 제9절은 관련 규칙을 미국 규정, 유럽연합 법령, ICH 가이드라인의 세 묶음으로 나눈다. 목록은 짧지만 항목마다 방대한 지침이 딸려 있다. 이 절의 목적은 그 자체로 하나의 전문 분야인 인허가 업무를 가르치는 것이 아니라, 각 규칙이 WIA-BIO-005가 다루는 데이터와 소프트웨어의 어느 지점에 닿는지를 보여 주는 것이다.
21 CFR Part 1271은 인체 세포·조직 및 세포·조직 기반 제품(HCT/P)을 규율한다. 세포치료제 제조사에게 가장 중요한 부분은 공여자 적격성(공여자 선별과 검사, 제2장의 주제)과 우수 조직 관리 기준(current good tissue practice) 요건으로, 시설, 환경 관리, 장비, 자재, 공정 관리, 표시, 보관, 입고와 유통, 기록과 추적을 포괄한다. 유전자가 변형된 T세포 제품은 최소 조작의 범위를 넘으므로 생물의약품으로도 규제된다. 그 제조에는 21 CFR Part 211(완제의약품 GMP)이 적용되고, 허가 제품에는 Title 21의 600번대 생물의약품 규정이 적용된다.
21 CFR Part 312는 임상시험용 신약 신청(IND)을 다룬다. 규격이 강조하는 두 가지 보고 의무는 안전성 모니터(Safety Monitor)와 직접 관련된다. 21 CFR 312.32에 따라 의뢰자는 중대하고 예상하지 못한 이상사례가 의심되는 경우 이를 인지한 날로부터 15일(역일) 이내에 IND 안전성 보고를 제출해야 하며, 예상하지 못한 사망 또는 생명을 위협하는 이상사례가 의심되는 경우에는 정보를 처음 입수한 날로부터 7일(역일) 이내에 FDA에 알려야 한다. 21 CFR 312.33에 따라 의뢰자는 제조 변경과 임상시험계획 변경 등을 담은 연차 보고서를 제출한다. 규격은 로트 출하 데이터 제출도 언급하는데, 그 방법과 시점은 제품의 허가 조건과 규제기관과의 합의에 따라 다르다. 따라서 소프트웨어는 특정 제출 경로를 전제하기보다 출하 데이터를 내보낼 수 있는 형태로 저장해야 한다.
규격에는 없지만, 종이 배치 기록을 대체하거나 시험성적서(CoA)에 전자 서명을 하는 시스템이라면 전자 기록과 전자 서명에 관한 21 CFR Part 11의 적용을 받는다. 소프트웨어 구조를 가장 직접적으로 규정하는 규칙이 바로 이것이다. 감사 추적, 고유한 사용자 식별, 서명의 표시 방식, 그리고 서명과 그 서명이 붙은 기록 사이의 연결이 모두 여기서 나온다.
Regulation (EC) No 1394/2007은 첨단치료의약품(ATMP)을 정의한다. ATMP에는 체세포치료제와 유전자치료제가 포함되며, CAR-T 제품도 이 규정의 적용을 받는다. ATMP는 의약품이므로 Directive 2001/83/EC의 일반 체계가 적용되고, 여기에는 각 배치를 출하 전에 품질책임자(Qualified Person, QP)가 인증해야 한다는 요건이 포함된다. 제조는 EudraLex Volume 4를 따른다. 규격은 Annex 2(생물학적 원료의약품 및 인체용 의약품의 제조)를 인용하는데, 이와 별도로 유럽 집행위원회는 ATMP 전용 GMP 지침을 Volume 4의 Part IV로 발행했으며, 이 책에서 다룬 소프트웨어와 장비에는 Annex 11(컴퓨터화 시스템)과 Annex 15(적격성 평가와 밸리데이션)도 적용된다. Regulation 1394/2007에는 데이터 설계에 중요한 조항이 하나 있다. 공여자에서 수혜자까지 각 제품을 추적하는 데 필요한 데이터를 제품 유효기한 만료 후 최소 30년간 보관하도록 한 추적성 조항이다.
ICH Q10은 의약품 품질 시스템, 즉 경영진 책임, 시정·예방 조치(CAPA), 변경 관리, 경영 검토를 기술한다. ICH E6는 임상시험에서 데이터를 수집하고 검증하는 방식을 규율하는 임상시험 관리기준(GCP) 가이드라인이다. ICH E2A는 임상 안전성 데이터 관리의 용어(이상사례, 약물이상반응, 중대한, 예상하지 못한)와 신속 보고의 원칙을 정의하며, 앞에서 본 15일·7일 기한도 이 원칙 위에 서 있다. 규격은 원료의약품 GMP인 ICH Q7도 나열하지만, 세포치료에 대한 적용 범위는 제한적이다. Q7은 화학 원료와 전통적인 생명공학 원료를 염두에 두고 작성되었고, 환자 맞춤형 세포 제품은 앞서 본 완제의약품 GMP와 ATMP 전용 GMP 문서로 규제된다. Q7은 규율 문서라기보다 배경 자료로 보는 편이 맞다.
규격 제10.2절은 FACT-JACIE 기준을 추가한다. 세포치료 제품을 채집·처리·투여하는 여러 병원 프로그램이 사용하는 인증 기준이다. 여기에 미국약전(USP) 네 개 장이 더해진다. USP <71>(무균 시험)과 USP <85>(엔도톡신 시험)는 제3장의 출하 시험 두 가지의 공정서 시험법을 정한다. USP <1043>은 사이토카인, 활성화 시약, 배지처럼 제조에 쓰이는 부자재를 다룬다. USP <1046>은 세포 기반·조직 기반 제품에 관한 정보 장(informational chapter)인데, 규격이 작성된 뒤 제목이 바뀌었으므로 규격에 적힌 제목 대신 현행 USP 판을 인용해야 한다. 규격이 공정서 시험법을 명시하지 않은 마이코플라스마 시험은 USP <63>과 유럽약전(Ph. Eur.) 2.6.7이 다룬다.
규격 참고문헌의 오류. 제10.2절은 ISO 13022의 제목을 "Medical laboratories — Practical guide to ISO 15189"로 적고 있으나 이는 틀렸다. ISO 13022는 살아 있는 인체 세포를 포함하는 의료 제품, 구체적으로 위험 관리의 적용과 처리 관행에 대한 요구사항을 다룬다. 제10.1절의 참고문헌 목록도 불완전하다(1, 3, 4번 항목 누락). 남아 있는 항목 가운데 CAR-T 제조 데이터와 직접 관련되는 것은 인체 유전자치료제 IND의 화학·제조·품질관리(CMC) 정보에 관한 FDA의 2020년 가이던스이다.
국내 독자라면 「첨단재생의료 및 첨단바이오의약품 안전 및 지원에 관한 법률」이 국가 차원의 체계라는 점을 기억해야 한다. 소관 기관은 식품의약품안전처 등이다. 규격은 이 법을 언급하지 않으므로, 국내 관할에서 운영하는 조직은 아래의 대응표에 이 법을 추가해 확장해야 한다.
규제는 조직과 제품의 언어로 쓰여 있지, 함수와 필드의 언어로 쓰여 있지 않다. 이 의무들이 검증 가능한 규칙으로 바뀌는 곳이 규격 제8.1절이 정한 다섯 번째 필수 구성요소인 규정 준수 점검기(Compliance Checker)이다. 규격은 이 구성요소의 이름만 정하고 무엇을 검증해야 하는지는 규정하지 않으며, 참조 SDK도 이를 구현하지 않았다. CellularTherapySDK에는 checkCompliance 같은 메서드가 없다. 따라서 구현자가 규제로부터 규칙 집합을 직접 도출해야 한다. 아래 표는 규격이 나열한 규제를 따라 만든 출발점이다.
| 규제·가이드라인 | 시스템 요구사항 | WIA-BIO-005 구성요소 |
|---|---|---|
| 21 CFR 1271 (공여자 적격성) | 출발 물질이 제조에 투입되기 전에 공여자 선별·검사 결과가 기록·검토되어야 한다. 적격성 판정이 끝나지 않은 동종 로트는 출하할 수 없다. | 제조 추적기, 규정 준수 점검기 |
| 21 CFR 211, EudraLex Vol. 4(Part IV 포함) | 실행된 배치 기록이 완결되어야 하고, 모든 일탈(C006)은 출하 전에 기록·평가되어야 하며, 출하는 권한 있는 사람이 한다. | 제조 추적기, 품질 평가기, 규정 준수 점검기 |
| Directive 2001/83/EC (QP 인증) | 출하 판정이 이름이 특정된 자격 있는 서명자와 연결되어야 하며, 인증 전에는 출고 상태로 바뀔 수 없다. | 규정 준수 점검기 |
| USP <71>, <85>, <63> | 출하 시험마다 시험법, 결과, 단위, 판정 기준을 저장한다. 엔도톡신은 mL당이 아니라 체중 kg당으로 판정한다. | 품질 평가기 |
| 21 CFR 312.32, ICH E2A | 중대한 이상사례를 처음 인지한 시점부터 기한을 계산하고, 15일·7일 마감을 산출해 상향 보고한다. | 안전성 모니터, 규정 준수 점검기 |
| 21 CFR 312.33 | 보고 연도 동안의 제조 변경과 임상시험계획 변경을 수집한다. | 규정 준수 점검기 |
| 21 CFR Part 11, EU GMP Annex 11 | 모든 생성·변경·삭제에 대한 감사 추적, 고유 사용자 ID, 기록과 연결된 전자 서명. | 다섯 구성요소 전체(플랫폼 수준) |
| Reg. (EC) 1394/2007 추적성 | 공여자-수혜자 추적 데이터를 법정 기간 동안 보관한다(EU는 유효기한 만료 후 최소 30년). | 규정 준수 점검기, 저장 계층 |
| ICH Q10 | 일탈과 기준 일탈(OOS) 결과에 연결된 CAPA 기록, 공정과 소프트웨어의 변경 관리. | 규정 준수 점검기 |
| FACT-JACIE (임상 기관) | 입고 시와 투여 직전 병상에서의 신원 연속성 확인(C005 발생 시 절차 중단). | 용량 계산기 워크플로, 안전성 모니터 |
이 표에서 네 가지 설계 원칙이 나온다. 첫째는 판정 전에 완결성이다. 품질 평가기는 "이 결과들이 기준을 충족하는가"에 답하지만, 규정 준수 점검기는 그보다 먼저 "필요한 결과가 모두 있고, 서명되었고, 추적 가능한가"에 답한다. 생존율은 합격이지만 마이코플라스마 결과가 기록되지 않은 로트는 애초에 출하 판정 단계에 이르러서는 안 된다. 실무적으로는 규정 준수 점검기가 assessQuality보다 먼저 실행되며, 우연히 채워진 필드가 아니라 제품 유형별 필수 시험 목록을 기준으로 삼는다는 뜻이다.
둘째는 서명도 데이터라는 원칙이다. SDK의 generateCertificate는 approvedBy: 'QC Manager'라는 고정 문자열을 기록한다. Part 11과 Annex 11에서 승인은 그 자체로 하나의 기록이다. 누가, 언제, 어떤 역할로, 어떤 의미로 서명했는지, 그리고 그 서명이 시험성적서의 어느 판에 묶여 있는지가 모두 남아야 한다. SDK가 반환하는 성적서는 품질 시스템이 완성해야 할 초안으로 다루어야 하며, 서명된 문서 자체로 취급해서는 안 된다. 이 메서드에 하드코딩된 다른 값들, 즉 제5장에서 다룬 24개월 고정 유효기간, 시설명, 운송 문구도 마찬가지이다. 특히 운송 문구에 들어 있는 드라이아이스(약 −78 °C)는 규격의 ≤−150 °C 보관 조건과 양립하지 않으므로, 이 문구가 남아 있는 성적서는 규정 준수 규칙에서 반려되어야 한다.
셋째는 기한은 기억하는 것이 아니라 계산하는 것이라는 원칙이다. SDK의 안전성 모니터(monitorSafety)는 위험 수준과 권고를 반환하지만 보고 기한 개념은 없다. 적합한 시스템은 의뢰자가 각 중대 이상사례를 처음 인지한 날짜를 기록하고, 사망 또는 생명 위협 여부를 판단해 마감일을 산출한다. 코드는 몇 줄이지만 규제상 결과는 크다.
넷째는 보관 기간은 관할별 설정값이라는 원칙이다. 모든 규제기관을 만족시키는 단일 보관 기간은 없으며, 규격에 딸린 PHASE 부속서에는 세포치료 법규와 무관한 고정 보관 기간이 적혀 있다. 보관 기간은 관할과 기록 유형(공여자 기록, 배치 기록, 임상 안전성 기록)별로 설정해야 하며, 제품이 국경을 넘는 경우에는 적용 가능한 기간 중 가장 긴 것을 따른다.
적합성 주장은 그 뒤에 있는 시험만큼만 믿을 수 있다. WIA-BIO-005에서 가장 강력한 시험 벡터는 규격에 적힌 숫자에서 곧바로 도출한 것이다. 감사인이 확인하는 것이 바로 그 숫자이기 때문이다. "≥" 또는 "<"로 표현된 모든 임계값에는 최소 세 개의 벡터가 필요하다. 경계 바로 아래, 경계와 정확히 같은 값, 경계 바로 위이다. 합격 범위 한가운데에 편안히 놓인 벡터는 증명하는 것이 거의 없다.
벡터를 작성하기 전에 참조 SDK에 관한 사실 하나를 분명히 해 두어야 한다. assessQuality 메서드는 규격의 오류 코드 C001~C003을 예외로 던지지 않는다. 대신 failures 목록, criteria 객체, 권고값을 담은 QualityResult를 반환한다. CellularTherapyError를 던지는 경로는 몇 개뿐이다. calculateDose의 잘못된 입력(C010), 그리고 불합격 로트에 대한 성적서 생성 시도(C007)이다. 따라서 불합격 기준을 C001, C002, C003으로 매핑하는 일은 통합 계층의 몫이며, 그 매핑 자체도 시험해야 한다. 마찬가지로 assessICANS는 등급을 입력으로 받을 뿐 ICE 점수에서 등급을 계산하지 않으므로, ICE 점수에서 등급으로 가는 규칙은 구현자의 코드와 그 시험에 속한다.
| 벡터 | 입력(규격 근거) | 기대 결과 |
|---|---|---|
| V-01 생존율 경계, 불합격 | 생존율 84.9(§4.2: ≥85%) | passRelease false, 매핑 코드 C001 |
| V-02 생존율 경계, 합격 | 생존율 85.0 | 생존율 기준 합격, SDK는 최적 미만 경고(<90)를 추가 |
| V-03 역가 경계 | 10:1에서 특이 세포용해율 69.9%(§4.1.3: ≥70%) | passRelease false, 매핑 코드 C002 |
| V-04 무균 | 균 증식 검출(sterility: false) | 권고 reject, 매핑 코드 C003 |
| V-05 용량 예시 | 세포 2.5×10⁸개, 생존율 95%, CAR+ 80%, 70 kg(§6.1.1) | 약 2.7×10⁶ CAR+ 세포/kg, 1×10⁶~5×10⁶ 범위 내, optimal |
| V-06 잘못된 입력 | 환자 체중 0 kg | C010 예외 |
| V-07 kg당 엔도톡신 | 4.9 EU/mL, 100 mL, 70 kg(§4.1.5: <5 EU/kg) | 7.0 EU/kg로 불합격. SDK의 단순 비교는 합격 처리 |
| V-08 ICE → ICANS | ICE 점수 7, 다른 소견 없음 | ICANS 1등급 |
| V-09 불합격 로트의 성적서 | 불합격 지표 아무것이나 | C007 예외 |
아래 Jest 시험 세트는 이 표의 핵심을 CellularTherapySDK에 대해 구현한 것이다. SDK가 아니라 통합 계층에 속하는 두 보조 함수를 전제로 한다. 불합격 기준을 규격 코드로 매핑하는 toSpecCodes, 그리고 제3장에서 소개한 단위 환산을 수행하는 endotoxinPerKg이다. 값은 모두 규격에서 가져왔으며, 시험 세트의 어떤 값도 임상 권고가 아니다.
import {
CellularTherapySDK,
CellularTherapyError,
CellularTherapyErrorCode as E,
QualityMetrics,
QualityResult,
} from '@wia/bio-005';
// --- 통합 계층 보조 함수(SDK에 포함되지 않음) ---
function toSpecCodes(r: QualityResult): string[] {
const codes: string[] = [];
if (!r.criteria.viability.pass) codes.push(E.VIABILITY_LOW); // C001
if (!r.criteria.potency.pass) codes.push(E.POTENCY_FAILURE); // C002
if (!r.criteria.sterility.pass) codes.push(E.STERILITY_FAILURE); // C003
return codes;
}
const endotoxinPerKg = (euPerMl: number, doseMl: number, kg: number) =>
(euPerMl * doseMl) / kg;
function iceToIcansGrade(ice: number, unarousable = false): 0 | 1 | 2 | 3 | 4 {
if (unarousable) return 4; // ASTCT 2019: 평가 불가로 ICE 0점인 경우
if (ice === 10) return 0;
if (ice >= 7) return 1;
if (ice >= 3) return 2;
return 3;
}
function thrown(fn: () => unknown): CellularTherapyError | undefined {
try { fn(); } catch (e) { return e as CellularTherapyError; }
return undefined;
}
// --- 규격 JSON 예시(제8.3.1절)로 만든 합격 로트 ---
const base: QualityMetrics = {
viability: 92.5, potency: 78.5, sterility: true, endotoxin: 0.25, mycoplasma: false,
identity: { positive: { CD3: 97.8, CAR: 85.3 }, negative: {} },
cellCount: { total: 5.2e8, viable: 4.81e8 },
appearance: { color: 'pale yellow', clarity: 'slightly opaque', particulates: false },
};
describe('WIA-BIO-005 적합성 벡터', () => {
const sdk = new CellularTherapySDK();
test('V-01 생존율 84.9 %는 불합격이며 C001로 매핑된다', () => {
const r = sdk.assessQuality({ ...base, viability: 84.9 });
expect(r.passRelease).toBe(false);
expect(toSpecCodes(r)).toEqual(['C001']);
});
test('V-02 생존율 85.0 %는 기준을 통과한다', () => {
const r = sdk.assessQuality({ ...base, viability: 85.0 });
expect(r.criteria.viability.pass).toBe(true);
expect(r.warnings.length).toBeGreaterThan(0); // 최적 미만 경고(< 90 %)
});
test('V-03 10:1 특이 세포용해율 69.9 %는 C002로 매핑된다', () => {
const r = sdk.assessQuality({ ...base, potency: 69.9 });
expect(toSpecCodes(r)).toEqual(['C002']);
});
test('V-04 무균 시험 균 증식은 reject이며 C003으로 매핑된다', () => {
const r = sdk.assessQuality({ ...base, sterility: false });
expect(r.recommendation).toBe('reject');
expect(toSpecCodes(r)).toContain('C003');
});
test('V-05 70 kg 용량 예시는 약 2.7e6 CAR+ 세포/kg', () => {
const d = sdk.calculateDose({
cellType: 'CAR-T', strategy: 'weight-based',
totalCells: 2.5e8, viability: 95, targetMarkerPercent: 80, patientWeight: 70,
});
expect(d.dose / 1e6).toBeCloseTo(2.714, 3);
expect(d.withinRange).toBe(true);
expect(d.assessment).toBe('optimal');
});
test('V-06 체중 0은 C010으로 거부된다', () => {
const err = thrown(() => sdk.calculateDose({
cellType: 'CAR-T', strategy: 'weight-based',
totalCells: 2.5e8, viability: 95, patientWeight: 0,
}));
expect(err?.code).toBe(E.INVALID_PARAMETERS);
});
test('V-07 엔도톡신은 mL당이 아니라 kg당으로 판정한다', () => {
expect(endotoxinPerKg(4.9, 100, 70)).toBeCloseTo(7.0, 1); // < 5 EU/kg 불합격
expect(sdk.assessQuality({ ...base, endotoxin: 4.9 }).criteria.endotoxin.pass)
.toBe(true); // 알려진 SDK 결함을 기록: 래퍼가 이 판정을 덮어써야 한다
});
test('V-08 ICE 점수 7은 ICANS 1등급', () => {
expect(iceToIcansGrade(7)).toBe(1);
expect(iceToIcansGrade(6)).toBe(2);
expect(iceToIcansGrade(2)).toBe(3);
});
test('V-09 불합격 로트에는 성적서를 발행하지 않는다(C007)', () => {
const product = { batchId: 'CT-2024-001' } as any; // 시험용 최소 스텁
const err = thrown(() =>
sdk.generateCertificate(product, { ...base, mycoplasma: true }, {} as any));
expect(err?.code).toBe(E.QUALITY_FAILURE);
});
});
이 시험 세트에서 짚어 둘 점이 세 가지 있다. V-07은 SDK의 현재 동작과 올바른 동작을 의도적으로 나란히 단언한다. 알려진 결함을 다루는 하나의 패턴이다. 시험이 결함을 기록해 두고, 향후 SDK 판에서 결함이 고쳐지면 시험이 실패하므로 누군가가 래퍼의 우회 코드를 의식적으로 걷어 내게 된다. V-08은 ICE 점수의 ASTCT 2019 매핑을 시험한다(총 10점: 지남력 4, 이름 대기 3, 명령 수행 1, 쓰기 1, 주의력 1). SDK의 iceComponents 타입은 여전히 명령 수행에 0~2점을 허용하고 주의력 항목이 없다. 제7장에서 다룬 이 오류 때문에, 통합 계층은 항목 점수를 합산하기 전에 ASTCT 범위로 검증해야 한다. 끝으로 V-05는 정확한 일치가 아니라 허용 오차를 쓴다. 2.5×10⁸ × 0.95 × 0.80 같은 양의 부동소수점 연산은 십진 결과를 정확히 재현한다는 보장이 없기 때문이다.
완전한 시험 세트는 이 벡터 외에도 다음을 포함한다. 구현이 지원하는 모든 세포 유형에 대한 용량 평가 구간(최솟값의 0.5배 미만, 0.5배~1배, 범위 내, 최댓값의 1.5배까지, 그 초과), trackManufacturing의 각 핵심 공정 변수 한계, 증식 지연 경보, assessPostThawQuality의 해동 후 판정 규칙(생존율 ≥85%, 회수율 ≥70%, 역가 유지율 ≥70%), 그리고 CLI이다. 제5장에서 보았듯 CLI의 등급 구간은 SDK와 다르므로 CLI에는 별도의 벡터가 필요하다. SDK만 시험한 세트는 wia-bio-005 assess-quality를 호출하는 스크립트에 대해 아무것도 말해 주지 않는다.
시험을 돌리는 것은 일의 절반이다. 나머지 절반은 다른 사람이 모든 시험을 다시 돌리지 않고도 확인할 수 있도록 결과를 제시하는 일이다. 규격과 함께 제공되는 PHASE 문서들에는 증거 형식을 설명하는 비규범적 부속서(G~J)가 있다. 그런데 이 문서들은 범용 상용구이다. 다른 표준 번호가 제목에 붙어 있고, 라이선스와 날짜도 다르며, 세포치료와 무관한 수치 목표와 기간이 들어 있다. 그 숫자들은 어느 것도 WIA-BIO-005 적합성 주장에 들어가서는 안 된다. 다만 바탕에 있는 발상은 건전하므로, 여기서는 비규범적 안내로만 활용한다.
| 항목 | 내용 | 필요한 이유 |
|---|---|---|
| 시험 벡터 매트릭스 | 모든 벡터의 입력, 기대 결과, 실제 결과, 합격·불합격. 건너뛴 벡터는 사유와 함께 기재. | 어떤 요구사항이 실제로 시험되었는지 정확히 보여 준다. 사유 없는 건너뜀은 불합격으로 읽힌다. |
| 프로파일 매니페스트 | 요구사항마다 supported, partial(사유 포함), excluded(정당화 포함)로 표시. | 부분 적합이 완전 적합으로 제시되는 것을 막는다. |
| 일탈·정오 등록부 | 규격, SDK, 구현 사이의 알려진 차이(ICE 항목, 엔도톡신 단위, 용량 단위, 등급 규칙)와 각각의 처리 방식. | 의도적인 선택을 감사인이 스스로 찾아내게 두지 않고 드러낸다. |
| 소프트웨어 자재 명세서(SBOM) | CycloneDX나 SPDX 같은 표준 형식의 SBOM, 정확한 @wia/bio-005 버전 포함. | 무엇이 시험되었는지 의존성 수준까지 식별한다. |
| 인터페이스 기술서 | 구현이 자체 HTTP API를 제공한다면 그 OpenAPI 기술서. WIA-BIO-005 자체는 REST 엔드포인트가 아니라 TypeScript 인터페이스를 정의한다. | 통합자가 필드 이름과 타입을 제8.2절·제8.3절과 대조할 수 있게 한다. |
| 밸리데이션 요약 | 시험이 실행된 환경의 컴퓨터화 시스템 밸리데이션(8.5절) 참조. | 적합성과 GMP 밸리데이션을 연결한다. |
| 서명된 매니페스트 | 위 파일들과 해시를 나열하고 조직이 서명한 매니페스트(부속서가 제안하듯 예컨대 Sigstore 사용). | 패키지가 생성된 뒤 변경되지 않았음을 증명한다. |
규격에는 공식 요구사항 식별자가 없으므로 조직이 직접 만들어야 한다. 실용적인 방법은 절 번호와 판정 기준에서 식별자를 도출하는 것이다. 그러면 매니페스트의 모든 행을 규격의 한 줄로 되짚어 갈 수 있다. 다음 조각은 프로파일 매니페스트의 예시일 뿐, WIA-BIO-005가 정의한 형식이 아니다.
{
"standard": "WIA-BIO-005",
"specVersion": "1.0.0",
"implementation": { "name": "example-cell-therapy-platform", "sdk": "@wia/bio-005@1.0.0" },
"requirements": [
{ "id": "BIO005-8.1-dose-calculator", "status": "supported" },
{ "id": "BIO005-4.2-viability-min", "status": "supported" },
{ "id": "BIO005-4.1.5-endotoxin-perkg", "status": "supported",
"note": "래퍼가 비교 전에 EU/mL를 EU/kg으로 환산" },
{ "id": "BIO005-7.2.1-ice-score", "status": "partial",
"reason": "ASTCT 2019 항목 사용, 규격은 '명령 수행'을 2점으로 기재" },
{ "id": "BIO005-2.2.1-car-nk-dose", "status": "excluded",
"justification": "본 사업장은 CAR-NK 제품을 제조하지 않음" }
]
}
매니페스트에 없는 것에 주목하라. 백분율 점수도, 브론즈·골드 같은 등급도, 정확도에 대한 주장도 없다. 이런 표준에 대한 적합성이란 충족한 요구사항, 부분적으로 충족한 요구사항, 주장하지 않는 요구사항의 목록이며, 각각에 증거가 붙는다. 이보다 더 압축된 표현은 감사인에게 필요한 바로 그 정보를 감춘다.
제2장에서는 장비의 IQ·OQ·PQ를 설명했다. 설치 적격성 평가는 배양기가 사양대로 설치되었음을, 운전 적격성 평가는 운전 범위 전체에서 37 °C를 유지함을, 성능 적격성 평가는 실제 공정을 뒷받침함을 증명한다. GMP 판정에 쓰이는 소프트웨어에도 같은 논리가 필요하며, EU의 Annex 11과 미국의 Part 11 모두 이를 요구한다. 시스템의 위험도에 맞춰 이 노력의 크기를 조정하는 틀로는 ISPE의 GAMP 5 가이드가 가장 널리 쓰인다.
| 장비 단계 | 소프트웨어 대응 | 대표적 증거 |
|---|---|---|
| 설치 적격성 평가 | 밸리데이션된 환경에 올바른 빌드가 설치됨. 설정과 SDK 버전 기록. | 설치 기록, SBOM, 설정 내보내기. |
| 운전 적격성 평가 | 경계와 오류 경로를 포함해 각 기능이 사양대로 동작함. | 8.3절의 적합성 벡터를 밸리데이션된 환경에서 실행. |
| 성능 적격성 평가 | 실제 사용자와 인터페이스(LIMS, MES, EHR)로 실제 워크플로를 뒷받침함. | 제6장·제7장의 흐름을 따라 시험 로트와 시험 환자로 수행한 종단 간 실행. |
| 재적격성 평가 | 주기적 검토, 변경 후 재밸리데이션. | 주기적 검토 보고서, 변경 관리 기록. |
소프트웨어와 GMP가 가장 자주 충돌하는 곳은 변경 관리이다. 의존성 업데이트, 새 CLI 버전, 바뀐 설정값 하나가 출하 판정을 바꿀 수 있다. 이런 변경은 모두 영향 평가를 포함한 조직의 변경 관리 절차를 거쳐야 하며, 적합성 벡터는 비용이 적고 객관적인 회귀 점검 수단이 된다. 출하 기준과 관련된 시험은 주요 릴리스 때만이 아니라 변경이 있을 때마다 실행해야 한다.
버전 관리는 서로 독립적인 버전 번호가 여럿 있기 때문에 특히 주의가 필요하다. 규격은 2025-12-26에 MIT 라이선스로 발행된 1.0.0판이다. npm 패키지 @wia/bio-005도 1.0.0이고, CLI도 자체 버전 1.0.0을 보고한다. 번호가 같은 것은 첫 릴리스라서 생긴 우연일 뿐, 앞으로 함께 움직인다는 약속이 아니다. 적합한 시스템은 출하 판정과 용량 계산마다 어떤 규격 버전을 주장하는지, 어떤 SDK와 CLI 빌드를 사용했는지를 기록한다. 패키지 버전은 범위가 아니라 정확한 값으로 고정해야 한다. 그렇지 않으면 임계값이나 등급 규칙을 바꾸는 SDK의 부 버전 업데이트가 변경 관리를 거치지 않고 운영 환경에 들어올 수 있다. PHASE 부속서가 언급하는 시맨틱 버전 관리는 유용한 관례이다. 주 버전은 규범 요구사항의 비호환 변경을, 부 버전은 요구사항 추가를, 패치는 편집상 수정을 뜻한다. 다만 같은 부속서의 폐기 유예 기간 규정은 서로 모순되며 WIA-BIO-005의 일부가 아니다.
마지막으로 감사 추적은 출력뿐 아니라 입력도 담아야 한다. SDK가 recommendation: 'release'를 반환했다면, 감사 기록에는 그 결과를 만든 지표 객체, 관련 버전, 검사를 실행한 사용자, 결과를 수용하거나 번복한 사용자가 함께 남아야 한다. 자동 권고는 사람이 내리는 결정의 입력이며, 기록은 둘 다를 보여 주어야 한다.
세포치료는 빠르게 변하고 있으며, 혈액암용 자가 CAR-T 제품을 중심으로 쓰인 표준은 확장이 필요하다. 이미 현장에서 보이는 방향이 몇 가지 있다. 아래 내용에는 전망 수치가 없다. 기술이 어디로 가고 있으며, 표준이 이를 뒷받침하려면 무엇이 필요한지를 설명할 뿐이다.
CAR-NK 세포와 iPSC 유래 작용 세포는 한 환자를 위해 만드는 대신, 건강한 공여자나 마스터 세포주로부터 미리 제조해 보관했다가 필요할 때 쓰는 제품을 가능하게 한다. 이는 데이터 모델을 바꾼다. 한 배치가 여러 환자에게 공급될 수 있으므로 규격 JSON 레코드의 product_id와 patient_id 사이의 일대일 연결이 더는 성립하지 않는다. 공여자 적격성과 세포 은행 기록이 중심이 되고, 용량 범위는 제품별 임상 데이터에 근거해야 한다. 규격과 SDK의 현재 CAR-NK 범위(10⁷~10⁹ 세포/kg)는 공개된 임상시험에서 보고된 용량보다 훨씬 높으므로, 의존하기보다 개정해야 한다.
활성화, 형질도입, 증식, 수확을 한 장비 안에서 수행하는 폐쇄형 자동화 플랫폼은 개방 조작을 줄이고, 주변 공간에 요구되는 청정 등급을 낮출 수 있다. 소프트웨어 측면에서는 더 많은 공정 데이터가 수기 입력이 아니라 장비 기록으로 들어오고, 제조 추적기가 점검 시점마다가 아니라 연속적으로 CPP 데이터를 받게 된다는 뜻이다. 표준의 다음 판에는 장비 데이터용 이벤트 형식이 정의되어 있으면 유익할 것이다.
14일이 걸리는 공정서 무균 시험과 28일이 걸리는 마이코플라스마 배양법은 유효기간이 짧거나 급히 필요한 제품과 잘 맞지 않는다. 신속 미생물 시험법과 핵산 기반 마이코플라스마 시험은 대기 시간을 줄여 주지만, 밸리데이션과 관할 규제기관의 수용이 전제되어야 한다. 데이터 표준은 어떤 시험법을 썼는지와 그 밸리데이션 상태를 기록할 수 있어야 하며, 규제기관이 허용한다면 확인 결과를 기다리는 동안 신속 시험법에 근거해 출하된 상태를 문서화된 형태로 거칠 수 있어야 한다.
규격은 이미 CAR-T 표적 항원 가운데 HER2와 GD2를 나열한다. 고형암은 항원 이질성, 적대적인 종양 미세환경, 표적 적중·종양 외 독성 같은 다른 과제를 안고 있으며, 새로운 투여 경로를 요구할 수도 있다. 정맥 투여 외의 경로는 엔도톡신 한도도 훨씬 낮다. 예를 들어 척수강 내 투여 제품은 5 EU/kg이 아니라 0.2 EU/kg을 적용받으므로, 엔도톡신 규칙은 투여 경로를 인식해야 한다. 겸상적혈구병과 β-지중해빈혈을 위한 유전자 편집 자가 조혈모세포 제품이 여러 관할에서 허가에 이르렀다. SDK의 CellType 열거형에는 이미 HSC 값이 있지만, 규격은 이에 대한 규칙을 정하지 않는다.
HSC, DC, Treg)의 규범적 정의. 유형마다 확인 마커, 출하 기준, 용량 단위를 포함.conditional)과 SDK(conditional-release, retest) 사이의 권고 열거값 정렬.다음 체크리스트는 조직이 WIA-BIO-005 적합성을 주장하기 전에 갖추어야 할 것을 요약한다. 자체 평가용으로 작성했으며, "예"라고 답한 항목마다 근거가 되는 문서나 기록을 가리킬 수 있어야 한다.
범위와 주장
구성요소
알려진 결함 처리
시험과 증거
GMP와 규제
마지막 항목은 이 책 전체에 해당한다. WIA-BIO-005는 소프트웨어가 일관되게 검사할 수 있도록 임상 수치를 부호화하지만, 임상 가이드라인은 아니다. 허가사항은 바뀌고, 규제기관은 모니터링 요건을 개정한다. 데이터 표준의 가치는 다른 데 있다. 제조사, 병원, 소프트웨어 공급자에게 공통의 어휘, 공통의 레코드, 공통의 검사를 제공해, 세포 제품이 환자의 정맥에서 출발해 실험실을 거쳐 같은 환자에게 돌아가는 동안 그 신원과 품질과 이력이 온전히 유지되도록 하는 데 있다. 적합성 시험은 조직이 그 공통 언어를 구현한 결과를 믿을 수 있다는 것을 보여 주는 방법이다.