제6장
출하된 배치가 병상 옆의 한 백(bag)이 되기까지: 배치 상태 기계, 콜드체인, 해동, 환자 준비, 용량, 병상 신원 확인, 그리고 그 뒤의 모니터링 기간을 다룬다.
앞 장들은 세포치료제를 세 방향에서 살펴보았다. 어떻게 만드는가(제2장), 어떻게 시험하는가(제3장), 그리고 데이터로 어떻게 기술하는가(제4장·제5장)이다. 이 장은 이 관점들을 하나의 종단 간 프로토콜로 잇는다. 자가 CAR-T 배치 하나를 따라가며, 백혈구성분채집 백이 제조소에 도착한 순간부터 세포가 환자에게 들어간 뒤 첫 1시간까지를 살핀다. 그리고 각 단계마다 WIA-BIO-005 구현자가 소프트웨어로 답해야 하는 두 가지 질문을 던진다. 다음 단계로 넘어가기 전에 무엇이 참이어야 하는가, 그리고 그렇지 않다면 어떤 오류 코드를 발생시키는가이다.
이 장은 규격 5절(동결보존)과 6절(임상 투여), 그리고 SDK 타입 ManufacturingStage, CryopreservationProtocol, ThawingProtocol, PostThawQuality, PatientDose, LymphodepletionRegimen에 기반한다. 앞에서 유도한 공식은 여기서 참조만 한다. 생존율·특이 세포용해율·체중당 엔도톡신은 제3장, 증식 배수는 제2장, 용량 알고리즘은 제5장에 있다.
임상 관련 주의. 이 장에 나오는 모든 약물, 용량, 요법, 시간 기준은 WIA-BIO-005 규격이 부호화한 내용으로서 소개하는 것이다. 어느 것도 치료 지시가 아니다. 실제 환자에게는 현행 제품 허가사항(설명서·SmPC)과 치료 기관의 프로토콜이 이 장의 값보다 우선한다.
SDK는 배치의 생애를 문자열 유니언 타입 ManufacturingStage로 모델링하며, 그 값은 collection, activation, transduction, expansion, harvest, cryopreservation, complete, failed의 여덟 가지이다. 앞의 일곱 개는 CAR-T 배치의 정상적인 전진 경로를 나타내고, failed는 진행 중인 어느 단계에서든 빠질 수 있는 종료 상태이다. 규격은 단계를 나열할 뿐 단계 간 전이를 정의하지 않으며, SDK도 이를 강제하지 않는다. trackManufacturing()은 공정 변수와 생존율을 점검해 경보를 발생시키지만 currentStage를 바꾸지는 않는다. 따라서 단계 순서를 강제하는 일은 통합 시스템, 즉 대개 제조실행시스템(MES)이나 SDK 위에 구축한 배치 기록 계층의 몫이다.
단계를 명시적인 상태 기계로 다루면 세 가지 이점이 있다. 첫째, 배치 기록을 감사할 수 있게 된다. 모든 전이는 시각, 작업자, 그리고 그 전이를 정당화한 증거를 가진 사건이 된다. 둘째, 제2장의 각 공정 중 시험이 특정 간선(edge) 위의 관문으로서 자연스러운 자리를 얻는다. 셋째, 표준의 오류 코드가 정확한 의미를 갖게 된다. 관문 실패는 단순히 나쁜 숫자가 아니라 거부된 전이가 된다.
WIA-BIO-005 배치 상태 기계 (CAR-T)
[collection] --G0--> [activation] --G1--> [transduction] --G2--> [expansion]
| | | |
| | | G3 (배양 중간)
| | | |
| | | v
| | | [harvest] --G4--> [cryopreservation] --G5--> [complete]
| | | | |
+--------------------+---------------------+---------------------+--------------------+
| 관문 실패 + 일탈 처리 미승인
| (C006 / C001 / C003 ...)
v
[failed] (종료 상태, 나가는 간선 없음)
G0 출발 물질 승인, 0일차 생존율 >= 85 %
G1 2일차 활성화 표지자(CD25+/CD69+) >= 50 %
G2 4일차 형질도입 효율 >= 30 % CAR+
G3 7일차 세포 수 배가, 생존율 > 80 % (expansion 내부 점검)
G4 10-14일차 전체 출하 시험 검체 채취 (결과는 이후 도착 가능)
G5 속도 제어 동결 기록 완료, <= -150 C 보관 위치 입고
공정 중 시험 일정은 제2장에서 설명했다. 여기서는 그것이 전제 조건의 집합이 된다. collection을 벗어나려면 출발 물질이 승인되고 0일차 생존율이 85% 이상이어야 한다. activation을 벗어나려면 세포의 절반 이상이 활성화 표지자 CD25 또는 CD69를 발현해야 한다. transduction을 벗어나려면 4일차 형질도입 점검(CAR+ 30% 이상)을 통과해야 한다. 이 값은 출하 판정 기준인 CAR+ 20% 이상, 그리고 공정 목표인 형질도입 효율 40% 초과와 목적이 다른 별개의 숫자이다. 상태 기계는 하나의 "CAR+ 기준"이 아니라 세 값을 각각 따로 저장해야 한다. expansion 내부의 7일차 점검은 종료 관문이라기보다 중간 건강 점검이다. 생존율이 80% 이하로 떨어져도 배치가 자동으로 실패 처리되지는 않지만, 일탈을 개시하고 영향을 평가해야 한다. harvest를 벗어나려면 출하 시험 검체가 채취되어 있어야 한다. cryopreservation을 벗어나려면 동결 기록이 완결되고 제품이 보관 위치에 도달했음이 확인되어야 한다.
미묘하지만 중요한 점은 complete가 출하를 뜻하지 않는다는 것이다. 수확 시점에 채취한 14일 무균 시험은 배치가 동결고에 들어갈 때에도 대개 진행 중이다. 따라서 상태 기계는 물리적 공정을 기술하고, 출하 판정(제3장)은 배치에 대해 별도로 기록되는 결정이다. 보통 시험성적서를 첨부하는 방식으로 기록한다. 불출 시스템은 두 가지를 모두 확인해야 한다. 단계가 complete이고, 동시에 서명된 출하 승인이 있어야 한다.
오류 코드 C006(MANUFACTURING_DEVIATION)은 규격에서 "기록하고 영향을 평가한다"는 조치와 함께 정의된다. 이 코드는 배치를 검증된 공정 밖으로 벗어나게 했지만 아직 제품이 사용 불가하다고 입증되지는 않은 모든 사건에 알맞다. trackManufacturing()이 보고한 핵심 공정 변수 이탈, 놓친 배지 교환 시점, 누락되거나 늦어진 공정 중 시험, 배치를 뒤로 되돌리거나 단계를 건너뛰려는 시도, 회복 가능할 수도 있는 관문 실패가 그 예이다. C006 자체는 배치를 failed로 옮기지 않는다. 대신 품질 결정(일탈 처리)이 기록될 때까지 전이를 막는다. 배치는 그 결정이 실패로 판단하거나, 확정된 무균 시험 양성(C003)처럼 더 강한 코드에 해당하는 상황이 생길 때에만 failed로 간다. SDK는 C006을 열거값으로 정의하지만 실제로 던지지는 않는다. 아래의 가드 함수는 이를 발생시키는 한 가지 방법을 보여 준다.
import {
CellularTherapyError,
CellularTherapyErrorCode,
ManufacturingStage,
} from '@wia/bio-005';
// 허용되는 전진 간선. 'complete'와 'failed'는 종료 상태이다.
const NEXT: Record<ManufacturingStage, ManufacturingStage[]> = {
collection: ['activation', 'failed'],
activation: ['transduction', 'failed'],
transduction: ['expansion', 'failed'],
expansion: ['harvest', 'failed'],
harvest: ['cryopreservation', 'failed'],
cryopreservation: ['complete', 'failed'],
complete: [],
failed: [],
};
// 현재 단계의 관문에 대해 MES가 수집한 증거
interface GateEvidence {
passed: boolean; // 공정 중 합격 기준 충족 여부
test: string; // 예: 'Day 4 transduction (CAR+ %)'
value?: number;
deviationApproved?: boolean; // 열린 일탈에 대한 QA 처리 결과
}
export function transition(
from: ManufacturingStage,
to: ManufacturingStage,
gate: GateEvidence
): ManufacturingStage {
if (!NEXT[from].includes(to)) {
throw new CellularTherapyError(
CellularTherapyErrorCode.MANUFACTURING_DEVIATION,
`Illegal transition ${from} -> ${to}`,
{ from, to }
);
}
if (to !== 'failed' && !gate.passed && !gate.deviationApproved) {
throw new CellularTherapyError(
CellularTherapyErrorCode.MANUFACTURING_DEVIATION,
`Gate not met: ${gate.test}`,
{ from, to, value: gate.value }
);
}
return to; // 호출자가 사용자·시각·증거와 함께 사건을 저장한다
}
이 가드는 일부러 작게 만들었다. 일탈을 받아들일 수 있는지는 사람이 내리는 품질 결정이므로 가드는 그것을 판단하지 않는다. 증거가 뒷받침하지 않는 전이를 소프트웨어가 기록하지 못하게 거부할 뿐이다. 실제 시스템에서는 반환된 단계를 작업자 신원, 시각, 관문 증거와 함께 추가 전용(append-only) 감사 추적에 기록한다.
대부분의 자가 CAR-T 제품은 수확 후 동결보존된다. 동결은 제조를 임상 일정과 분리한다. 출하 시험, 운송, 환자 준비에 필요한 시간을 벌어 주고, 배양이 끝나는 시점이 아니라 환자가 임상적으로 준비된 시점에 투여할 수 있게 해 준다. 규격 5.1절은 동결 프로토콜을 제형과 냉각 프로그램의 두 부분으로 정의한다.
규격의 동결보호제는 최종 농도 10%의 디메틸설폭사이드(DMSO)이며, 인간 혈청 알부민(HSA)이나 혈장처럼 단백질을 함유한 기제에 담기고, 선택적으로 덱스트란 40이나 펜타스타치 같은 고분자 첨가제를 더한다. 균형 전해질 용액이나 생리식염수에 HSA를 더한 대체 기제도 기술되어 있다. DMSO는 세포 안으로 스며들어 세포 내 얼음 형성을 줄이고, 단백질과 고분자는 세포막을 보호하며 삼투 스트레스를 완화한다. 규격은 두 제형을 백분율 목록으로 적었지만, 각 목록의 성분을 더하면 100%를 넘으므로 문자 그대로 조제법으로 읽을 수 없다. 이 책은 이를 정오(erratum) 사항으로 본다. 조성은 정성적으로 구현한다. 즉 HSA 또는 혈장 기반 기제에 최종 10% DMSO, 선택적으로 덱스트란 40이며, 정확한 조제법은 제조사의 밸리데이션된 배치 기록에서 가져온다.
데이터 모델에서 CryopreservationProtocol.cryoprotectant는 퍼센트 단위의 숫자 필드 dmso, hsa, dextran을 가진다. 검증기는 조제된 제품에서 각 성분의 최종 농도를 기록해야 하며, 선언된 백분율의 합이 100을 넘는 레코드는 실제 백을 기술할 수 없으므로 거부하는 것이 타당하다.
시간도 중요하다. DMSO는 실온에서 세포에 독성을 띠므로, 규격은 세포 부유액을 4 °C로 냉각한 뒤 부드럽게 섞으면서 동결보호제를 한 방울씩 첨가하고, 그다음 용기에 충전해 동결기에 넣도록 요구한다. DMSO와 처음 접촉한 시점부터 동결 프로그램 시작까지의 시간은 규격이 한도를 두지 않았더라도 배치 기록이 남겨야 할 변수이다.
규격 5.1.2절은 4 °C에서 −90 °C까지 −1 °C/min으로 냉각하고, −90 °C에서 30분 이상 유지한 뒤, −150 °C 이하의 보관 장소로 옮기도록 규정한다. 약 −1 °C/min은 유핵 세포에 대한 고전적인 선택이다. 세포 안의 물이 얼기 전에 삼투에 의해 빠져나갈 만큼 느리고, 세포가 농축된 용질 속에 머무는 시간을 줄일 만큼 빠르다. 이 속도에서 4 °C에서 −90 °C까지의 하강에는 94분이 걸리므로, 유지 시간을 포함하면 프로그램은 두 시간을 조금 넘는다.
T (C)
4 |*
| *
0 | *. <- 핵생성 시 잠열 방출; 속도 제어 동결기가 이를
| *.. 보상해 검체 온도가 다시 오르지 않게 한다
-30 | *
| * 기울기 = -1 C/min
-60 | *
| *
-90 | *=========* 유지 >= 30분
| \
-120 | \ 보관 장소로 이동
| \
-150 |- - - - - - - - - - - - - - - - - - *~~~~~~~~~~~~~~~~~~ <= -150 C (기상 액체질소)
+------+------+------+------+------+------+------> 시간(분)
0 20 40 60 80 100 120 140
4 C -> -90 C, -1 C/min 하강 = 94분; 유지 >= 30분.
이 곡선에는 규격이 언급하지 않았지만 모든 동결 기록에 나타나는 특징이 하나 있다. 세포 밖 용액에서 얼음이 처음 핵생성할 때 융해 잠열이 방출되어 검체 온도가 몇 도 튀어 오른다. 밸리데이션된 동결 프로그램에는 이 열을 빠르게 제거하는 단계가 들어 있으며, 크고 통제되지 않은 반등이 보이는 기록은 조사가 필요하다는 신호이다. 따라서 배치 기록에는 프로그램 이름만이 아니라 동결기 탐침의 온도 궤적 자체를 첨부해야 한다.
규격의 수확 절(§3.2.4)은 백당 10–50 mL 충전과 1–10 × 10⁷ cells/mL의 최종 농도를 제시한다. SDK는 세 가지 용기 유형(cryovial, cryobag, straw)을 허용하고 fillVolume을 mL로, cellConcentration을 cells/mL로 기록한다. 임상 용량은 거의 언제나 백으로 동결하고, 바이알은 보존 검체와 안정성 시험(제3장 3.7절)에 쓴다. 따라서 잘 설계된 배치는 환자용 백과 함께, 같은 프로그램을 겪는 대표 바이알 세트를 함께 동결한다.
| 변수 | 규격 값 | SDK 필드 | 검증 힌트 |
|---|---|---|---|
| 동결보호제 | 최종 10% DMSO, HSA/혈장 기제, 선택적 덱스트란 40 | cryoprotectant.dmso / hsa / dextran | 최종 부피 대비 %; 합계 ≤ 100 |
| 동결 방식 | 속도 제어 | freezingMethod | 'controlled-rate' | 'passive' | 'slow-freeze' |
| 냉각 속도 | −1 °C/min | coolingRate | °C/min; 크기와 부호를 일관되게 저장 |
| 하강 종점 / 유지 | −90 °C, 30분 이상 | targetTemperature | 유지 시간 필드 없음 — 스키마에 추가할 것 |
| 보관 온도 | ≤ −150 °C | storageTemperature, StorageInfo.temperature | ≤ CELLULAR_THERAPY_CONSTANTS.STORAGE.CRYOGENIC |
| 용기 | 백(임상), 바이알(검체) | containerType | 'cryovial' | 'cryobag' | 'straw' |
| 충전량 | 백당 10–50 mL | fillVolume | mL; > 0 |
| 농도 | 1–10 × 10⁷ cells/mL | cellConcentration | cells/mL; 부동소수점 |
규격 5.3절은 네 가지 보관 요건을 둔다. −150 °C 이하의 온도, 최대 24개월까지 밸리데이션된 보관 기간, 경보를 갖춘 연속 온도 모니터링, 그리고 이중화된 액체질소 공급과 예비 보관 설비이다. −150 °C라는 수치는 임의로 정한 것이 아니다. 이 온도는 물의 유리 전이 온도(약 −135 °C)보다 낮으며, 그 아래에서는 얼음 결정이 실질적인 시간 안에 자랄 수 없다. 기계식 냉동고의 −80 °C 보관이나 약 −78 °C인 드라이아이스 운송은 이 선보다 한참 위에 있다. SDK도 CRYOGENIC: -150과 별도로 ULTRA_LOW: -80 상수를 두고 있으며, 임상용 제품에서 둘을 혼동해서는 안 된다. 동결보존된 세포 제품은 기상 온도를 유지하는 액체질소 드라이 시퍼(dry shipper)로 운송하고, 온도 기록계가 제품과 함께 이동한다.
기상 보관, 즉 백을 액체질소 안이 아니라 그 위에 두는 방식이 선호되는 이유는 액체를 통한 교차 오염과 손상된 용기로 액체가 스며드는 위험을 줄이기 때문이다. 그 대가로 탱크 안에 온도 구배가 생긴다. 뚜껑에 가까운 위치는 액면에 가까운 위치보다 따뜻하다. 따라서 모니터링 설계는 가장 따뜻한 곳에 놓인 제품 위치에 탐침을 두고, 온도 상승을 성가신 경보가 아니라 관리 연속성 사건으로 다루어야 한다.
StorageInfo는 location, temperature, freezeDate, 선택 필드인 expirationDate, 그리고 필수 카운터 freezeThawCycles를 가진다. 임상용 제품에서 이 카운터는 투여를 위해 해동하기 전까지 0이어야 한다. 다른 값이 있다면 계획되지 않은 가온을 겪었다는 뜻이므로 사용 전에 검토해야 한다. 속도 제어 동결기에서 보관 탱크로, 탱크에서 드라이 시퍼로, 시퍼에서 병원 탱크로 옮기는 매 이동은 누가, 언제, 어디에서, 어디로 옮겼는지와 그 구간의 온도 데이터를 기록해야 하는 관리 연속성 사건이다.
이 구간은 두 오류 코드가 지킨다. C008(STORAGE_VIOLATION)은 온도 기록에 보관 한도를 넘는 이탈이 있을 때, 투여 전인데 동결-해동 카운터가 0이 아닐 때, 또는 기록의 공백 때문에 제품이 차갑게 유지되었음을 보일 수 없을 때 발생시켜야 한다. C009(EXPIRED_PRODUCT)는 유효기한이 지난 뒤 제품이 요청되었을 때 발생시켜야 한다. C006과 마찬가지로 두 코드는 SDK의 CellularTherapyErrorCode 열거형에 정의되어 있지만 어떤 SDK 메서드도 던지지 않으며, 재고·불출 계층에 속한다. 또한 SDK의 시험성적서 생성기는 유효기한을 동결일에 24개월을 더한 값으로 채운다. 이 값은 제조사가 자체 안정성 프로그램(제3장 3.7절)으로 확립한 제품별 유효기간을 대신하는 자리표시자일 뿐, 표준의 규칙이 아니다.
| 점검 항목 | 데이터 출처 | 실패 시 |
|---|---|---|
| 동결 이후 −150 °C 이하의 연속 기록 | 보관 모니터링 시스템, 시퍼 기록계 | C008, QA 검토 전까지 격리 |
freezeThawCycles = 0 | StorageInfo | C008 |
오늘 날짜가 expirationDate 이전 | StorageInfo, 시험성적서 | C009, 불출 금지 |
| 서명된 출하 승인 존재 | QMS / 시험성적서 | 불출 차단(출하 없으면 불출 없음) |
| 제품 라벨이 불출 요청과 일치 | 라벨 스캔 대 오더 | C005, 중지 후 조사 |
해동은 동결 문제의 반대이며 속도 요건도 반대이다. 빨라야 한다. 천천히 데우면 동결 중에 생긴 작은 얼음 결정이 더 크고 해로운 결정으로 재결정화될 수 있다. 그래서 규격은 37 °C 수조(§5.2.1)를 규정하고, 작은 얼음 결정이 남았을 때 백을 꺼내도록 한다. 이는 보통 2–5분이 걸린다. 얼음 조각을 조금 남겨 두면 DMSO가 아직 있는 동안 제품을 차갑게 유지할 수 있고, 제품이 농축된 동결보호제 속에서 37 °C로 머무는 것을 막는다.
이 시점부터 제품에는 시계가 돌기 시작한다. 규격은 투여까지의 시간을 4시간 미만, 가능하면 1시간 미만으로 정한다. 허가된 제품의 경우 제품 허가사항이 해동 종료부터 투여 종료까지의 자체 한도를 대개 더 짧게 정하며, 그 한도가 우선한다. 데이터 모델은 방법, 온도, 소요 시간, 세척 횟수를 ThawingProtocol에, 경과 시간을 PostThawQuality.timeToInfusion(시간 단위)에 기록한다.
규격은 동결된 백에서 환자까지 가는 두 가지 방법을 기술한다. 실험실 해동에서는 세포처리실에서 백을 해동하고, 즉시 해동 배지로 약 10배 희석한 다음, 병동으로 내보내기 전에 한두 번 세척해 DMSO를 제거한다. 병상 해동(§5.2.2)에서는 환자 옆에서 백을 해동해 세척 없이 곧바로 투여하고, 의료진은 투여된 DMSO에 대한 반응을 관찰한다. 대부분의 상업용 CAR-T 제품은 병상 방식으로 투여되며, 실험실 해동은 해동 후 조작이 필요한 제품을 다루는 세포치료 실험실에서 흔하다.
| 항목 | 실험실 해동(§5.2.1) | 병상 해동(§5.2.2) |
|---|---|---|
| 장소 | 세포처리 실험실 | 환자 병상 |
| 수조 | 37 °C, 작은 얼음 결정이 남을 때까지 2–5분 | 37 °C, 작은 얼음 결정이 남을 때까지 3–5분 |
| 해동 후 처리 | 즉시 약 10배 희석, 1–2회 세척 | 희석·세척 없음 |
| 환자에게 들어가는 DMSO | 대부분 제거됨 | 백에 든 전량 |
| 세포 손실 | 세척·취급에 따른 일부 손실 | 취급 손실 최소 |
| 투여 전 해동 후 QC 가능 여부 | 가능(세포 수, 생존율) | 대체로 불가; 출하·안정성 데이터에 의존 |
| 주의할 주요 위험 | 투여까지의 시간, 세척 후 이송 | DMSO 투여 반응 |
ThawingProtocol | method: 'water-bath', washSteps: 1–2, qualityCheck: true | method: 'bedside', washSteps: 0 |
해동 후 합격 기준은 생존율 85% 이상, 회수율 70% 이상, 그리고 역가 유지이다. SDK는 "유지"를 assessPostThawQuality(preFreeze, postThaw)로 구체화한다. 이 함수는 해동 후 생존율, 회수율(해동 후 세포 수 ÷ 동결 전 세포 수 × 100), 역가 유지율(해동 후 역가 ÷ 동결 전 역가 × 100)을 돌려주고, 생존율 ≥ MIN_VIABILITY(85), 회수율 ≥ MIN_RECOVERY(70), 역가 유지율 ≥ 70을 모두 만족할 때에만 acceptable을 참으로 설정한다.
const sdk = new CellularTherapySDK();
// 예시 수치
const r = sdk.assessPostThawQuality(
{ viability: 94, cellCount: 2.5e8, potency: 82 }, // 동결 전
{ viability: 88, cellCount: 1.9e8, potency: 66 } // 해동 후 바이알
);
// r = { viability: 88, recovery: 76, potencyRetained: 80.49..., acceptable: true }
실무상 두 가지를 조심해야 한다. 첫째, 회수율은 세포 수를 비교하므로 두 값을 같은 방식(총 유핵 세포 또는 생세포, 같은 장비)으로 측정해야 한다. 그렇지 않으면 비율은 의미가 없다. 둘째, 병상 해동에서는 환자의 백 자체를 투여 전에 시험하지 않는다. 해동 후 수치는 동반 바이알이나 안정성 프로그램에서 나온다. 기록에는 어느 쪽인지 적어 두어야, 나중의 조사에서 그 수치가 투여된 제품을 기술하는지 대리 검체를 기술하는지 알 수 있다.
제품이 제조·시험되는 동안 환자도 준비된다. 핵심 단계는 림프구제거 화학요법, 즉 투여 전에 짧게 시행하는 항암 요법이다. 규격의 표현을 빌리면 그 목적은 CAR-T 증식을 위한 "공간을 만드는 것"이다. 환자 자신의 림프구를 줄이면 항상성 사이토카인을 두고 벌이는 경쟁이 줄고 투여 제품을 억제할 수 있는 세포도 줄어, CAR-T 세포의 생착과 증식을 돕는다.
규격 6.2.1절은 세 가지 요법과 투여 2–7일 전이라는 시기를 제시한다. 구현자가 참조 데이터를 채울 수 있도록 아래에 표준이 부호화한 그대로 옮기지만, 이 책의 권고가 아니다.
| 요법 | 규격 기재 내용 |
|---|---|
| Flu/Cy | 플루다라빈 30 mg/m²/일 × 3일 + 사이클로포스파마이드 500 mg/m²/일 × 3일 |
| 벤다무스틴 | 벤다무스틴 90 mg/m² × 2일 |
| 사이클로포스파마이드 단독 | 사이클로포스파마이드 300 mg/m²/일 × 3일 |
실제로는 허가된 각 제품의 허가사항이 요법과 용량을 정하고, 치료팀이 신기능 등을 고려해 조정한다. 따라서 소프트웨어는 표에서 요법을 골라 넣을 것이 아니라 실제로 처방된 요법을 저장해야 한다. SDK 타입 LymphodepletionRegimen은 이를 위한 모양을 갖추고 있다. name, 각각 자유 텍스트 dose와 투약일 days를 가진 drugs 목록, startDate, completionDate, 그리고 daysBeforeInfusion이다. 마지막 필드는 환자 준비를 제품 워크플로와 연결한다. 배치가 제때 출하되지 않으면 계획된 투여일이 림프구제거 후의 허용 기간을 벗어날 수 있고, 그러면 임상팀이 대응을 결정해야 한다. 따라서 일정 관리 시스템은 예상 출하일과 계획 투여일이 어긋나기 시작하는 즉시 — 항암 요법이 시작된 뒤가 아니라 시작되기 전에 — 경고를 내야 한다.
PatientDose.lymphodepletion는 선택 필드인데, 림프구제거가 선행되지 않는 MSC 같은 제품을 생각하면 옳은 설계이다. CAR-T의 PatientDose라면 검증기가 이를 필수로 요구하는 것이 합리적이다.
제5장은 용량 알고리즘을 유도하고 규격의 계산 예를 재현했다. 체중 70 kg 성인이 총 2.5 × 10⁸ 세포, 생존율 95%, CAR+ 80%인 제품을 받으면 CAR+ 세포는 1.9 × 10⁸ 개, 즉 2.7 × 10⁶ CAR+ cells/kg이다. 이 절은 그 계산을 되풀이하지 않고 워크플로 안에 배치한다.
규격은 두 가지 용량 방식을 인정한다. 체중 기반 용량(§6.1.1)에서는 처방 용량을 킬로그램당으로 표현하므로, 투여할 세포 수가 투여 당일 환자의 체중에 따라 달라진다. 고정 용량(§6.1.2)에서는 체중과 관계없이 총 세포 수로 용량을 정한다. 규격은 환자당 1–6 × 10⁸ CAR+ 세포를 예로 들고 이를 성인 B세포 악성종양과 연결한다. 규격은 제품 예시도 인용하는데, 이 책은 이를 집필 시점에 표준에 기록된 값으로만 소개한다.
| 제품(INN) | 규격에 기록된 값 | 용량 방식 |
|---|---|---|
| tisagenlecleucel | 0.2–5.0 × 10⁶ CAR+ cells/kg(소아); 0.6–6.0 × 10⁸ CAR+ cells(성인) | 체중 기반 / 고정 |
| axicabtagene ciloleucel | 2 × 10⁶ CAR+ cells/kg | 체중 기반 |
| brexucabtagene autoleucel | 2 × 10⁶ CAR+ cells/kg | 체중 기반 |
허가사항에는 대개 이 표에 없는 세부가 더해진다. 적응증마다 다른 용량 범위, 킬로그램당 용량에서 총량 용량으로 바뀌는 체중 기준, 최대 총 용량 등이다. 따라서 용량 모듈은 제품 허가사항을 버전이 붙은 참조 문서로 다루고, 각 용량 기록에 어느 허가사항 버전을 적용했는지 함께 저장해야 한다.
calculateDose()는 strategy: 'weight-based' | 'flat-dose' | 'split-dose'를 받지만, 고유한 처리를 하는 것은 첫 번째 분기뿐이다. weight-based CAR-T에서는 targetMarkerPercent가 주어지면 CAR+ 세포를 체중으로 나눈다. 그 밖의 방식에서는 split-dose를 포함해 CAR+ 세포가 아닌 총 생세포 수를 'total cells' 단위로 돌려주고, 1 × 10⁸–6 × 10⁸이라는 고정 범위와 비교한다. 통합자에게는 두 가지 결과가 따른다. 처방 용량이 CAR+ 세포로 표현된다면 고정 CAR-T 용량은 호출 코드가 CAR+ 비율로 직접 계산해야 하고, 분할 용량은 SDK가 전혀 분할하지 않는다. 용량 기록은 또한 AdministrationRoute를 따로 가진다. 이 장은 'intravenous'를 전제로 한다. 다른 경로를 쓴다면 제3장에서 다룬 엔도톡신 한도를 다시 평가해야 한다. 척수강 내 투여의 한도는 비경구 5 EU/kg보다 훨씬 낮기 때문이다.
규격 6.3.2절은 종양 부담이 크거나 이전에 심한 반응이 있었던 환자를 위한 선택적 분할 일정 — 1일째 총 용량의 10%, 2일째 30%, 3일째 60% — 을 기술한다. 비율의 합은 100%이므로 산술은 간단하다. 소프트웨어에서 중요한 것은 각 분할분이 자체 신원 확인과 자체 활력징후 기록을 가진 독립된 투여 사건이 된다는 점이다. 규격의 예시 제품을 오직 설명 목적으로 사용하면 다음과 같다.
계산 예(예시이며 치료 지시가 아님). 총 CAR+ 용량 = 1.9 × 10⁸ 세포.
동결된 백은 보통 통째로 해동하므로, 분할 일정은 병상에서 즉흥적으로 정할 것이 아니라 제형 단계에서 — 예를 들어 분할 비율에 맞춘 여러 백을 충전하는 식으로 — 미리 계획해야 한다.
오류 코드 C004(DOSE_OUT_OF_RANGE, 조치 "재계산 또는 조정")는 계산된 용량이 처방 범위를 벗어날 때 적용된다. 제5장에서 논의했듯이 SDK는 이를 예외로 던지지 않고 withinRange와 assessment로 표현하며, 이를 차단형 C004로 격상할지는 불출 계층이 결정한다.
자가 제품은 오직 한 사람에게만 안전하다. 다른 사람에게 투여하는 것은 치명적일 수 있는 오류이며, 그 제품은 모든 출하 기준을 통과할 것이므로 어떤 품질 시험으로도 잡아낼 수 없다. 따라서 신원 연속성의 마지막이자 가장 중요한 통제는 절차적인 것이다. 손에 든 제품이 침대에 누운 환자의 것임을 병상에서 확인하는 일이다.
규격 6.2.2절은 투여 전에 확인해야 할 일곱 항목을 나열한다. 이는 간호·약제 애플리케이션이 "투여 시작" 동작을 허용하기 전에 항목별로 완료를 요구할 수 있는 점검표로 그대로 옮겨진다.
신원 확인은 두 가지 독립 식별자와 두 사람으로 수행하고, 환자 팔찌와 백 라벨의 바코드 스캔으로 뒷받침하는 것이 가장 좋다. 규격은 이름, 생년월일, 제품 ID를 나열하며, 많은 기관은 제조사가 백에 인쇄한 신원 연속성 번호도 함께 대조한다. 데이터 모델에서 이는 PatientDose.patientId / PatientDose.productId와 스캔된 값의 비교이다. 불일치는 C005(IDENTITY_MISMATCH)를 발생시키며, 규격의 조치는 "중지하고 조사한다"이다. C005는 절대적인 중지여야 한다. 애플리케이션은 무시(override) 옵션을 제공해서는 안 되며, 이 사건은 기관의 사고 보고 절차로 보고해야 한다. 토실리주맙 항목이 있는 이유는 사이토카인 방출 증후군이 투여 직후부터 시작될 수 있기 때문이며, 그 관리는 제7장에서 다룬다.
§6.3.1의 표준 투여는 중력 점적이나 주입 펌프로 10–20 mL/min의 속도로 10–30분간 주입하고, 전량이 들어가도록 생리식염수로 관을 세척하며, 주입 중과 주입 후 최소 1시간 동안 활력징후를 연속 모니터링하는 것이다. 규격의 단계 목록은 다음과 같다. 제품과 환자 신원 확인, 투여 전 활력징후 기록, 생리식염수로 수액관 프라이밍, 제품 백 연결, 처방 속도로 주입, 관 세척, 최소 1시간 환자 관찰이다. 소프트웨어 측면에서 두 가지를 짚어 둘 만하다. 속도와 소요 시간이 독립적으로 적혀 있으므로, 오더 입력 화면은 실제 백 부피를 이용해 하나로부터 다른 하나를 계산해야 한다. 50 mL 백 하나를 10–20 mL/min으로 주입하면 약 2.5–5분이 걸리며, 규격의 더 긴 소요 시간은 부피가 크거나 백이 여러 개일 때에만 성립한다. 또한 백혈구 제거 필터는 제품 자체를 걸러내므로 사용해서는 안 된다. 규격에는 적혀 있지 않지만 세포 제품의 표준 관행이다.
투여 기록에는 실제 시작·종료 시각(PatientDose.actualDate 설정), 투여한 백 식별자, 해동 종료부터 투여 종료까지의 시간, 중단 여부, 활력징후가 담겨야 한다. 이 시각들은 6.4절과 고리를 닫는다. 해동 후 허용 시간을 넘겨 투여가 끝났다면, 환자가 괜찮더라도 QA가 검토해야 할 일탈이다.
투여가 끝나면 워크플로는 임상 안전성 모니터링으로 넘어간다. 규격은 두 기간을 정의한다. 입원 기간(§6.4.1)은 CAR-T 투여 후 최소 10일, 중환자실을 갖춘 병원에서, 4–6시간마다 활력징후와 신경학적 점검을 하고, 매일 체온·혈압·심박수·호흡수, ICE 점수를 포함한 신경학적 검사, 전혈구 검사, 종합 대사 검사, CRP·페리틴·피브리노겐, 가능하면 사이토카인 패널을 평가하는 것으로 적혀 있다. 외래 기간(§6.4.2)은 퇴원 후 최대 4주, 최소 주 1회 외래 방문, 그리고 치료 기관에서 2시간 이내 거리에 머무를 것을 요구하는 것으로 적혀 있다.
이 수치들은 현행 규제가 아니라 표준의 과거 기본값으로 취급해야 한다. 10일 입원은 규제 요건이 아니며, 많은 기관이 허가된 CAR-T 제품을 매일 방문과 낮은 입원 문턱을 조건으로 외래에서 투여한다. 승인된 자가 CAR-T 제품에 대해서는 FDA 허가사항 개정으로 근접 거주 요건과 운전 제한 기간이 이후 2주로 단축되었다. 특정 환자에게 적용되는 시기는 현행 제품 허가사항과 기관 프로토콜이 정한다.
| 항목 | 규격 기재 내용 | 구현 지침 |
|---|---|---|
| 입원 기간 | 최소 10일, 중환자실을 갖춘 병원 | 제품·기관별로 설정 가능하게; 규제상 최소 기간이 아님 |
| 급성기 점검 | 4–6시간마다 활력징후·신경학적 점검; 매일 검사실 검사와 ICE 점수 | 과업 일정을 생성하고, 놓친 과업이 조용히 묻히지 않고 드러나게 |
| 외래 추적 | 최대 4주, 최소 주 1회 방문 | 허가사항 버전별로 설정 가능하게 |
| 치료 기관 근접 거주 | 최대 4주 동안 2시간 이내 | 승인된 자가 CAR-T의 현행 허가사항: 2주; 값은 허가사항에서 가져올 것 |
설계상의 교훈은 이 장 전체를 관통한 것과 같다. 표준의 숫자를 코드 속 상수가 아니라 출처가 붙은 설정값으로 부호화하라. 각 값에 출처(규격 절, 허가사항 버전, 기관 프로토콜)와 발효일을 붙여 두면, 허가사항이 바뀔 때 프로토콜은 소프트웨어 배포가 아니라 설정 변경과 감사 기록으로 바뀐다. 모니터링 기간 안에서 일어나는 일 — CRS와 ICANS의 등급 판정, monitorSafety()의 위험 종합, EHR 및 약물감시 시스템과의 통합 — 은 제7장에서 다룬다.
장 요약. 배치는 일곱 개의 전진 단계와 하나의 실패 상태를 거치며, SDK가 순서를 강제하지 않으므로 소프트웨어가 이를 강제해야 한다. 공정 중 시험은 관문이 되고, C006은 QA가 처리할 때까지 전이를 막는다. 제품은 최종 10% DMSO 제형으로 −1 °C/min의 속도로 −90 °C까지 동결한 뒤 −150 °C 이하에서 보관하며, C008과 C009가 콜드체인과 유효기간을 지킨다. 해동은 빠르게 하고, 투여까지의 시계는 즉시 돌기 시작한다. 림프구제거 시기, 용량 방식, 분할 비율은 허가사항에 따라 실제 처방대로 기록한다. 병상 신원 확인(C005)은 절대적인 중지 조건이다. 모니터링 기간은 출처가 붙은 설정값이다.