의료기기 UDI 추적관리
의료기기 제조업체 한 곳. 관리자용 PC 웹 화면과 현장의 인쇄·검사용 PC 프로그램, 포장·출고용 안드로이드 PDA 세 가지 단말을 쓰고, 식약처 의료기기통합정보시스템과 라인의 잉크젯 인쇄기에 직접 연결돼 있습니다.
식약처 마스터 직결
제품 정보와 거래처를 시스템 안에 따로 두지 않았습니다
의료기기는 제품마다 표준코드(DI)와 통합정보를 식약처에 등록해야 출하할 수 있습니다. 같은 정보를 사내 시스템에 한 벌 더 두면 두 곳이 어긋나고, 어느 쪽이 맞는지 확인할 방법이 없습니다.
그래서 DI·모델·품목·거래처 테이블을 만들지 않았습니다. DI_통합정보 화면은 모델을 검색해 식약처 의료기기통합정보시스템에서 그 모델의 DI 를 그대로 불러오고, 신규 DI 추가와 세부정보 수정, 사용종료도 이 화면에서 식약처로 보냅니다. 거래처도 같은 방식으로 조회하고, 없으면 통합업체·도로명주소를 받아 등록합니다. 작업지시와 출고지시를 만들 때는 그 시점의 값을 지시 행에 복제해 둡니다.
화면에 뜬 제품 정보가 곧 규제기관에 등록된 정보이고, 지난 지시는 그때 등록돼 있던 값으로 남습니다.
UDI 바코드 AI 조합
바코드에 무엇을 넣을지는 DI 가 정합니다
UDI 바코드는 제품마다 구성이 다릅니다. 로트번호만 넣는 제품이 있고 일련번호와 제조연월, 사용기한까지 넣는 제품이 있어, 지시를 낼 때 어떤 값을 적어야 하는지가 제품마다 갈립니다.
DI 통합정보에 등록된 로트번호·제조일자·사용기한 사용여부를 그대로 받아, 지시내역 화면의 해당 칸을 열고 닫습니다. 쓰지 않는 항목의 칸은 잠겨 있고, 필요하면 「강제로 사용」으로 그 지시에서만 엽니다. 작업수량이 한 건이라도 나온 지시는 값이 잠깁니다. 일련번호는 지시에 적는 값이 아니라 발행 시점에 붙습니다. 바코드는 네 가지 사용여부 조합대로 GS1 응용식별자 (01)·(11)·(17)·(10)·(21) 을 이어 붙여 만들고, 구분자까지 넣은 스캐너용 값과 괄호 표기 그대로의 사람이 읽는 값을 나눠 저장합니다.
제품마다 다른 바코드 규칙을 지시를 내는 사람이 외우지 않습니다.
라벨 일련번호 채번
일련번호는 그날 그 제품의 몇 번째인지로 매깁니다
개체를 하나씩 추적해야 하는 제품은 바코드마다 다른 일련번호가 필요합니다. 사람이 번호를 이어 적으면 같은 번호가 두 번 나가거나 중간이 비어 버립니다.
일련번호는 연도 두 자리에 월과 일을 각각 한 글자로 압축하고, 그날 그 DI 로 마지막에 발행된 번호 다음 네 자리를 붙여 만듭니다. 일련번호를 쓰는 제품은 바코드 한 줄이 실물 하나이고, 쓰지 않는 제품은 같은 바코드 줄의 수량을 더해 나갑니다. 두 가지가 작업내역에 같은 형식으로 쌓입니다.
어느 개체가 언제 어느 로트번호로 발행됐는지 작업내역에서 그대로 확인합니다.
잉크젯 마킹 연동
인쇄기에는 저장된 디자인을 불러 값만 보냅니다
제품에 UDI 를 직접 찍는 산업용 잉크젯 인쇄기는 문서를 보내는 방식이 아니라 자체 규격으로 통신합니다. 인쇄가 멈추거나 잉크가 떨어져도 무엇 때문인지는 인쇄기 표시등으로만 알 수 있습니다.
인쇄기와는 현장 PC 프로그램이 TCP 로 직접 연결합니다. 설비설정 화면에 등록한 Job 이름으로 인쇄기에 저장된 디자인을 불러오고, 디자인별 품목매핑에서 지정한 필드번호에 로트번호·제조연월·사용기한·바코드 값을 채워 보냅니다. 인쇄 시작과 중지, 연결상태, 인쇄기가 돌려주는 응답은 작업등록 화면에 그대로 뜨고, 잉크 수준이 임계값에 닿으면 교체 권고를, 소진으로 판단되면 인쇄 종료를 알립니다.
인쇄가 멈추면 그 원인을 인쇄기 표시등이 아니라 화면의 응답 기록에서 확인합니다.
인쇄 바코드 판독 검사
찍힌 바코드는 스캐너로 읽혀야 합격입니다
잉크젯으로 찍은 코드는 번지거나 일부가 빠져도 눈으로는 구분되지 않습니다. 읽히지 않는 코드가 그대로 나가면 병원에서 그 제품을 확인할 방법이 없습니다.
인쇄된 제품은 시리얼 스캐너로 한 개씩 읽습니다. 그 지시에서 발행됐고 아직 판정되지 않은 건과 스캔값을 대조해 맞으면 합격으로 남기고, 이미 처리됐거나 다른 지시의 코드면 받지 않습니다. 합격수량이 지시수량에 닿으면 스캔을 더 받지 않습니다. 지시를 끝낼 때 확정처리를 하면 끝까지 읽히지 않고 남은 건이 한 번에 불량으로 확정되고, 그만큼은 재인쇄 화면에서 다시 찍습니다.
포장으로 넘어가는 것은 스캐너가 읽어 낸 코드뿐입니다.
박스 적입 스캔
포장은 카톤 바코드를 먼저 읽고 제품을 담습니다
완제품을 카톤에 담을 때 무엇이 몇 개 들어갔는지는 대개 포장 담당자의 기억과 종이에만 남습니다. 출고한 뒤에는 어느 카톤에 어떤 개체가 들어갔는지 되짚을 수 없습니다.
포장 건을 등록하면 카톤 바코드가 PA 에 날짜와 당일 순번을 붙여 자동으로 매겨집니다. PDA 는 읽은 값의 앞 두 글자가 PA 인지로 카톤 바코드와 제품 바코드를 갈라 받습니다. 카톤 바코드를 먼저 읽으면 그 카톤의 모델·품명·제품과 지금까지 담긴 수량이 뜨고, 이어서 제품 바코드를 읽을 때마다 목록에 쌓입니다. 이미 다른 카톤에 들어가 있는 제품을 읽으면 그 카톤에서 빼고 옮길지 확인하고, 일련번호가 없는 제품은 담을 수량을 지정합니다.
카톤 하나를 읽으면 그 안에 든 것이 그대로 나옵니다.
프린터 좌표 보정
라벨 인쇄 위치는 출력 직전에 맞춥니다
같은 라벨 양식이라도 프린터와 라벨지에 따라 인쇄 시작 위치가 조금씩 달라집니다. 그대로 두면 내용이 라벨지 밖으로 밀리거나 한쪽에 치우쳐 찍힙니다.
카톤에 붙이는 포장 라벨은 브라우저 인쇄로 출력하고, 인쇄를 누르기 전에 위쪽·왼쪽 여백과 글자 크기를 지정합니다. 지정한 값은 그 PC 에 한 벌 남아 다음 인쇄에도 그대로 쓰입니다. 라벨에는 제품명·로트번호·포장수량·포장날짜와 카톤 바코드가 들어갑니다.
서식 파일을 고치지 않고 인쇄 화면에서 위치를 맞춥니다.
공급형태별 출고지시
어디로 나가는 물건인지를 출고지시에 함께 적습니다
식약처 공급내역 보고에는 수량뿐 아니라 누구에게 어떤 형태로 공급했는지와 금액이 들어갑니다. 출고가 끝난 뒤에 이 값을 채우면 월말마다 지난 전표를 다시 확인하게 됩니다.
출고 지시내역에 거래처·DI·수량과 함께 식약처 공급유형 네 가지 중 하나와 공급단가·공급금액을 적습니다. 현장은 PDA 에서 출고지시를 고르고 카톤 바코드만 읽습니다. 지시 항목과 맞지 않는 카톤은 받지 않고, 읽을 때마다 남은수량과 스캔합계가 바뀝니다.
월 보고에 필요한 값이 출고 시점에 이미 채워져 있습니다.
반품·폐기 출처 구분
폐기는 반품을 거친 것과 만든 자리에서 버린 것이 다릅니다
폐기는 출하 전 불량에서도 나오고 거래처에서 반품된 제품에서도 나옵니다. 두 가지를 한 줄로 쌓아 두면 규제기관에 낼 때 어디서 나온 폐기인지 설명하지 못합니다.
폐기 행은 언제나 생산바코드를 가리키고, 반품을 거친 것만 반품 행을 함께 가리킵니다. 폐기내역 화면은 이 둘을 「~생산」과 「~반품」으로 갈라 보여주고, 모델·품목·DI 는 반품을 거쳤으면 출고지시에서, 그렇지 않으면 작업지시에서 가져옵니다. 반품은 최초 반품수량과 남은 반품수량을 따로 들고 있어 일부만 폐기해도 잔량이 남고, 보고 자료에 이미 담긴 건은 잠깁니다.
폐기 한 건마다 어디서 나온 것인지가 함께 남습니다.
식약처 공급내역 월보고
한 달치 출고·반품·폐기를 모아 식약처로 보냅니다
공급내역 보고는 월 단위로 기한이 있고, 한 번 올린 뒤 자료가 바뀌면 다시 보고해야 합니다. 어느 건이 이미 올라갔는지 사람이 표시해 두면 다음 달에 같은 건이 또 올라갑니다.
기준월을 고르고 보고용 자료를 만들면 그달의 출고·반품·폐기 가운데 아직 담기지 않은 건만 새로 담깁니다. 바코드 문자열은 다시 분해해 DI·로트번호·일련번호·제조연월·사용기한으로 나눠 보냅니다. 행마다 연동에서 뺄 수 있고, 이미 올라간 행을 빼면 식약처에서 그 건만 지웁니다. 올린 뒤 자료가 바뀐 달은 붉게 표시해 재보고가 필요함을 알리고, 보고 기한이 지난 달은 자료를 다시 만들지 못하게 막습니다.
이번 달에 무엇이 몇 건 올라갔고 언제까지 보고할 수 있는지는 식약처 응답을 받아 화면에 그대로 둡니다.