카카오헬스케어
경력근거: 간호기록, 투약, 인수인계 등 병동 간호 프로세스 분석 및 기능 구현
※ 실제 산출물이 아닌 AI 예측 시안입니다.
카카오헬스케어는 연속혈당측정 기반 혈당 관리 앱 파스타와, 의료진이 환자의 혈당·식사·운동 데이터를 보는 웹 대시보드 파스타 커넥트 Pro를 운영하고, FHIR·SNOMED CT·LOINC 같은 표준으로 의료 데이터를 연결하는 디지털 헬스케어 회사예요. 이 공고의 AI Native EHR 개발실 CPE팀은 AI가 의료 현장에서 실제로 일을 하게 만드는 EHR을 설계하고 개발해요.
공고는 이 자리의 주요 업무로 '간호기록, 투약, 인수인계 등 병동 간호 프로세스 분석 및 기능 구현'을 꼽고, 자격 요건에 '간호 모듈(간호기록, 투약, 간호처방 수행 등) 개발 또는 운영 경험'을 적었어요. 처방은 하루 세 번처럼 빈도로 내려오고 투약은 회차마다 따로 기록되기 때문에, 빈도를 회차로 펼쳐 기록과 맞춰 보기 전에는 빠진 회차가 눈에 띄지 않아요. 근무 중에 처방이 중지되거나 용량이 바뀌면 같은 약의 옛 처방과 새 처방이 함께 남아, 어느 처방으로 기록했는지도 따로 봐야 해요.
공고는 간호기록, 투약, 인수인계 같은 병동 간호 프로세스를 분석해 기능으로 구현하는 일을 이 자리의 주요 업무로 꼽아요. AI Native EHR 의 간호 도메인 시스템을 설계·개발하는 일도 함께 적었어요.
자격 요건에 간호기록, 투약, 간호처방 수행 같은 간호 모듈을 개발하거나 운영해 본 경험과, 병동·특수부서 간호 업무 흐름을 시스템 기능과 데이터 구조로 구현할 수 있는 능력을 적었어요.
공고는 AI 활용을 위한 간호 임상 데이터 모델을 설계·개발하고, 의료 정보 표준과 병원 운영 정책을 고려해 시스템을 개발하는 일을 할 일로 적었어요.
병동 간호사가 근무를 다음 근무자에게 넘기기 직전에 여는 관리자 페이지예요. 그 병동 환자마다 이번 근무 동안 처방된 약의 회차가 제때 투약됐는지, 기록이 없는 회차·정해진 시간을 벗어난 투약·중지된 처방에 들어간 투약·같은 회차에 두 번 남은 기록이 있는지 알려 주고, 다음 근무자에게 넘길 것을 환자별로 모아 보여 줘요. 받은 데이터를 담을 DB 설계와 기술·구조, 그리고 투약 시각이 예정 시각에서 얼마나 벗어나면 정해진 시간을 벗어났다고 볼지는 지원자가 정해요.
병동 간호사예요. 근무를 넘길 때 환자마다 처방된 약이 회차대로 들어갔는지 투약 기록을 하나씩 열어 확인하면 시간이 들고, 빠진 회차나 중지된 처방에 들어간 투약이 말로만 전해지면 다음 근무자와 수간호사가 놓치기 쉬워요.
병동마다 근무가 바뀌는 인수인계 한 번이 한 행이고 handoff_id 가 키예요. 근무는 낮번(07:00~15:00)·저녁번(15:00~23:00)·밤번(23:00~07:00) 셋이고, shift_start_at 은 넘겨주는 근무가 시작한 시각, handoff_at 은 다음 근무에 넘기는 시각이에요. handoff_at 은 이 기능이 '지금'으로 삼는 시각이라, 그 시각까지 입력된 투약 기록만 그 인수인계에서 알 수 있어요. ward 는 admissions.ward 와 같은 병동 코드예요. 큰 데이터는 2026년 9월 1일 07:00 낮번부터 10월 31일 07:00 밤번 인수인계까지 병동 6곳의 인수인계 1,080번 전부이고, 시작용은 그 가운데 71병동 10월 30일 낮번 → 저녁번 인수인계 한 번이에요.
전체 1행 가운데 앞 1행이에요.
| handoff_id | ward | shift | shift_start_at | handoff_at |
|---|---|---|---|---|
| HO-11063 | 71 | day | 2026-10-30T07:00:00+09:00 | 2026-10-30T15:00:00+09:00 |
1행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 1,080행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "근무 교대 인수인계 한 번. 키는 handoff_id.",
"additionalProperties": false,
"required": [
"handoff_id",
"ward",
"shift",
"shift_start_at",
"handoff_at"
],
"properties": {
"handoff_id": {
"type": "string",
"pattern": "^HO-[0-9]{5}$",
"description": "인수인계 번호. 이 표의 키예요."
},
"ward": {
"type": "string",
"description": "병동 코드(71·72·73·81·82·83). admissions.ward 와 같은 코드예요."
},
"shift": {
"type": "string",
"enum": [
"day",
"evening",
"night"
],
"description": "넘겨주는 근무. day 는 낮번, evening 은 저녁번, night 는 밤번이에요."
},
"shift_start_at": {
"type": "string",
"format": "date-time",
"description": "넘겨주는 근무가 시작한 시각. 한국 시간(+09:00) ISO 8601."
},
"handoff_at": {
"type": "string",
"format": "date-time",
"description": "다음 근무에 넘기는 시각. 한국 시간(+09:00) ISO 8601. 이 기능이 '지금'으로 삼는 시각이에요."
}
}
}입원 한 건이 한 행이고 admission_id 가 키예요. 이 데이터에서 한 입원은 입원부터 퇴원까지 한 병동·한 병실·한 병상에 머물러요. patient_name 은 성만 남기고 가린 이름이라 같은 표기가 여러 환자에게 나와요 — 환자는 admission_id 로 가려요. discharged_at 이 null 이면 데이터 끝(10월 31일 07:00)까지 퇴원하지 않은 입원이에요. 근무 중에 퇴원한 환자와 근무 중에 새로 입원한 환자도 들어 있어요. 큰 데이터는 병동 6곳·병상 144개의 입원 997건이고, 시작용은 10월 30일 낮번 동안 71병동에 있던 입원 24건 전부예요.
전체 24행 가운데 앞 5행이에요.
| admission_id | patient_name | ward | room | bed | admitted_at | discharged_at |
|---|---|---|---|---|---|---|
| AD-30875 | 황OO | 71 | 711 | A | 2026-10-23T16:10:00+09:00 | — |
| AD-30817 | 안OO | 71 | 711 | B | 2026-10-19T01:30:00+09:00 | 2026-10-30T10:10:00+09:00 |
| AD-30820 | 송OO | 71 | 711 | C | 2026-10-19T05:40:00+09:00 | — |
| AD-30956 | 윤OO | 71 | 711 | D | 2026-10-28T21:30:00+09:00 | — |
| AD-30969 | 이OO | 71 | 712 | A | 2026-10-29T19:00:00+09:00 | — |
24행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 997행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "입원 한 건. 키는 admission_id.",
"additionalProperties": false,
"required": [
"admission_id",
"patient_name",
"ward",
"room",
"bed",
"admitted_at",
"discharged_at"
],
"properties": {
"admission_id": {
"type": "string",
"pattern": "^AD-[0-9]{5}$",
"description": "입원 번호. 이 표의 키예요."
},
"patient_name": {
"type": "string",
"description": "성만 남기고 가린 환자 이름(예: 김OO). 여러 환자가 같은 표기일 수 있어요."
},
"ward": {
"type": "string",
"description": "입원한 병동 코드. handoffs.ward 와 같은 코드예요."
},
"room": {
"type": "string",
"description": "병실 번호(병동 코드 + 병실 순번, 예: 712)."
},
"bed": {
"type": "string",
"enum": [
"A",
"B",
"C",
"D"
],
"description": "병실 안 병상(A~D)."
},
"admitted_at": {
"type": "string",
"format": "date-time",
"description": "입원한 시각. 한국 시간(+09:00) ISO 8601."
},
"discharged_at": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "퇴원한 시각. 한국 시간(+09:00) ISO 8601. null 은 데이터 끝까지 입원 중이에요."
}
}
}의사가 낸 투약 처방 한 건이 한 행이고 order_id 가 키예요. admission_id 는 admissions.admission_id 를 가리켜요. 이 데이터에는 정해진 시각에 주는 처방만 있고, frequency 는 dose_schedules.frequency 와 같은 빈도 코드예요. start_at 은 처방이 효력을 가진 시각, stop_at 은 처방이 중지된 시각이고 중지는 입력한 시각에 바로 효력을 가져요. 퇴원하면 그 입원의 처방은 퇴원 시각에 중지돼요. stop_at 이 null 이면 데이터 끝까지 중지되지 않은 처방이에요. 이 데이터에서는 용량이 바뀌면 옛 처방이 중지되고 이름이 비슷한 다른 약 코드의 새 처방으로 기록돼요(예: 와파린 2mg 정 → 와파린 3mg 정). 근무 중에 중지된 처방, 근무 중에 시작된 처방, 회차 바로 앞뒤에 시작·중지된 처방이 들어 있어요. 큰 데이터는 처방 5,068건이고, 시작용은 시작용 입원의 처방 가운데 10월 30일 낮번과 기간이 겹치는 103건 전부예요.
전체 103행 가운데 앞 5행이에요.
| order_id | admission_id | drug_code | drug_name | route | frequency | start_at | stop_at |
|---|---|---|---|---|---|---|---|
| RX-203757 | AD-30755 | D-WAR03 | 와파린 3mg 정 | PO | qd | 2026-10-15T02:43:00+09:00 | — |
| RX-203759 | AD-30755 | D-CFZ10 | 세파졸린 1g 주사 | IV | q8h | 2026-10-15T02:57:00+09:00 | — |
| RX-203763 | AD-30755 | D-PAN40 | 판토프라졸 40mg 주사 | IV | qd | 2026-10-15T03:21:00+09:00 | — |
| RX-204102 | AD-30817 | D-MEM10 | 메로페넴 1g 주사 | IV | q8h | 2026-10-19T02:08:00+09:00 | 2026-10-30T10:10:00+09:00 |
| RX-204108 | AD-30817 | D-APA65 | 아세트아미노펜 650mg 서방정 | PO | tid | 2026-10-19T02:42:00+09:00 | 2026-10-30T10:10:00+09:00 |
103행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 5,068행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "투약 처방 한 건. 키는 order_id.",
"additionalProperties": false,
"required": [
"order_id",
"admission_id",
"drug_code",
"drug_name",
"route",
"frequency",
"start_at",
"stop_at"
],
"properties": {
"order_id": {
"type": "string",
"pattern": "^RX-[0-9]{6}$",
"description": "처방 번호. 이 표의 키예요."
},
"admission_id": {
"type": "string",
"pattern": "^AD-[0-9]{5}$",
"description": "이 처방을 받은 입원. admissions.admission_id 를 가리켜요."
},
"drug_code": {
"type": "string",
"description": "약 코드. 함량이 다르면 다른 코드예요."
},
"drug_name": {
"type": "string",
"description": "약 이름과 함량·제형. 같은 약 코드는 언제나 같은 글자예요."
},
"route": {
"type": "string",
"enum": [
"IV",
"PO",
"SC",
"INH"
],
"description": "투여 경로. IV 정맥, PO 경구, SC 피하, INH 흡입."
},
"frequency": {
"type": "string",
"enum": [
"qd",
"bid",
"tid",
"q12h",
"q8h",
"q6h",
"q4h",
"hs"
],
"description": "투약 빈도 코드. dose_schedules.frequency 와 같은 코드예요."
},
"start_at": {
"type": "string",
"format": "date-time",
"description": "처방이 효력을 가진 시각. 한국 시간(+09:00) ISO 8601."
},
"stop_at": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "처방이 중지된 시각(입력한 시각에 바로 효력). 퇴원하면 퇴원 시각. 한국 시간(+09:00) ISO 8601. null 은 데이터 끝까지 중지되지 않은 처방이에요."
}
}
}이 데이터의 병원이 빈도 코드마다 정해 둔 투약 시각이에요. 한 행이 빈도 하나의 시각 하나이고, frequency 와 time_of_day 묶음이 키예요. 예를 들어 q8h 는 06:00·14:00·22:00 세 행이에요. 시각은 한국 시간의 하루 안 시각이고, 처방 기간 안에 드는 날마다 같은 시각에 회차가 생겨요. 큰 데이터와 시작용 모두 22행 전부예요.
전체 22행 가운데 앞 5행이에요.
| frequency | time_of_day |
|---|---|
| qd | 09:00 |
| bid | 09:00 |
| bid | 21:00 |
| tid | 08:00 |
| tid | 13:00 |
22행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 22행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "빈도 코드의 투약 시각 하나. 키는 (frequency, time_of_day) 묶음.",
"additionalProperties": false,
"required": [
"frequency",
"time_of_day"
],
"properties": {
"frequency": {
"type": "string",
"enum": [
"qd",
"bid",
"tid",
"q12h",
"q8h",
"q6h",
"q4h",
"hs"
],
"description": "빈도 코드. med_orders.frequency 와 같은 코드예요."
},
"time_of_day": {
"type": "string",
"pattern": "^[0-2][0-9]:[0-5][0-9]$",
"description": "그 빈도의 투약 시각(한국 시간 HH:MM, 24시간제)."
}
}
}간호사가 남긴 투약 기록 한 건이 한 행이고 mar_id 가 키예요. order_id 는 med_orders.order_id 를 가리켜요. scheduled_at 은 간호사가 이 투약을 어느 회차로 기록했는지 나타내는 회차 시각, given_at 은 간호사가 적은 실제 투약 시각, recorded_at 은 기록이 전산에 입력된 시각(서버 시계)이에요. 세 시각 모두 한국 시간(+09:00)이고 given_at 은 recorded_at 보다 늦지 않아요. 이 데이터의 기록은 모두 실제로 준 투약이에요. 회차에 기록이 아예 없는 경우, 예정 시각보다 한참 늦거나 이르게 준 경우, 중지된 처방으로 기록한 경우, 같은 회차를 두 번 기록한 경우, 투약은 근무 중에 했지만 기록은 인수인계 뒤에 입력한 경우가 들어 있어요. 큰 데이터는 9월 1일 07:00 이후 회차의 투약 기록 66,339건이고, 시작용은 시작용 처방의 회차 가운데 scheduled_at 이 10월 30일 07:00 이상 15:00 미만인 기록 111건 전부예요(인수인계 뒤에 입력된 기록도 포함).
전체 111행 가운데 앞 5행이에요.
| mar_id | order_id | scheduled_at | given_at | recorded_at |
|---|---|---|---|---|
| MR-1065300 | RX-204844 | 2026-10-30T07:00:00+09:00 | 2026-10-30T06:51:00+09:00 | 2026-10-30T06:53:32+09:00 |
| MR-1065304 | RX-204631 | 2026-10-30T07:00:00+09:00 | 2026-10-30T06:59:00+09:00 | 2026-10-30T07:01:58+09:00 |
| MR-1065311 | RX-204711 | 2026-10-30T07:00:00+09:00 | 2026-10-30T07:07:00+09:00 | 2026-10-30T07:14:45+09:00 |
| MR-1065314 | RX-204590 | 2026-10-30T07:00:00+09:00 | 2026-10-30T07:18:00+09:00 | 2026-10-30T07:20:26+09:00 |
| MR-1065315 | RX-204282 | 2026-10-30T07:00:00+09:00 | 2026-10-30T07:17:00+09:00 | 2026-10-30T07:21:17+09:00 |
111행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 66,339행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "투약 기록 한 건. 키는 mar_id.",
"additionalProperties": false,
"required": [
"mar_id",
"order_id",
"scheduled_at",
"given_at",
"recorded_at"
],
"properties": {
"mar_id": {
"type": "string",
"pattern": "^MR-[0-9]{7}$",
"description": "투약 기록 번호. 이 표의 키예요."
},
"order_id": {
"type": "string",
"pattern": "^RX-[0-9]{6}$",
"description": "이 기록이 달린 처방. med_orders.order_id 를 가리켜요."
},
"scheduled_at": {
"type": "string",
"format": "date-time",
"description": "간호사가 이 투약을 기록한 회차의 예정 시각. 한국 시간(+09:00) ISO 8601."
},
"given_at": {
"type": "string",
"format": "date-time",
"description": "간호사가 적은 실제 투약 시각(분 단위). 한국 시간(+09:00) ISO 8601."
},
"recorded_at": {
"type": "string",
"format": "date-time",
"description": "기록이 전산에 입력된 시각(서버 시계, 초 단위). 한국 시간(+09:00) ISO 8601."
}
}
}