87 lines
3.6 KiB
SQL
87 lines
3.6 KiB
SQL
-- KIMS API 로그 테이블 스키마
|
|
-- AI 학습 데이터로 활용 예정
|
|
|
|
-- 1. API 호출 로그 (메인)
|
|
CREATE TABLE IF NOT EXISTS kims_api_logs (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
-- 호출 컨텍스트
|
|
pre_serial TEXT, -- 처방번호
|
|
user_id INTEGER, -- 마일리지 회원 ID (있으면)
|
|
source TEXT DEFAULT 'admin', -- 호출 소스 (admin, api, batch 등)
|
|
|
|
-- 요청 데이터
|
|
request_drug_codes TEXT NOT NULL, -- JSON: ["055101150", "622801610"]
|
|
request_drug_names TEXT, -- JSON: ["오메프투캡슐", "락소펜엠정"]
|
|
request_drug_count INTEGER, -- 요청 약품 수
|
|
|
|
-- 응답 데이터
|
|
api_status TEXT NOT NULL, -- SUCCESS, ERROR, TIMEOUT
|
|
http_status INTEGER, -- HTTP 상태 코드
|
|
response_time_ms INTEGER, -- 응답 시간 (밀리초)
|
|
|
|
-- 상호작용 결과
|
|
interaction_count INTEGER DEFAULT 0, -- 발견된 상호작용 수
|
|
has_severe_interaction INTEGER DEFAULT 0, -- 심각한 상호작용 여부 (1/2 등급)
|
|
|
|
-- 상세 데이터 (JSON)
|
|
interactions_json TEXT, -- 상호작용 상세 정보 JSON
|
|
response_raw TEXT, -- 전체 API 응답 (디버깅/학습용)
|
|
|
|
-- 에러 정보
|
|
error_message TEXT
|
|
);
|
|
|
|
-- 2. 상호작용 상세 (정규화, AI 학습용)
|
|
CREATE TABLE IF NOT EXISTS kims_interactions (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
log_id INTEGER NOT NULL, -- kims_api_logs.id FK
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
-- 약품 1
|
|
drug1_code TEXT NOT NULL,
|
|
drug1_name TEXT,
|
|
drug1_generic TEXT, -- 성분명 (영문)
|
|
|
|
-- 약품 2
|
|
drug2_code TEXT NOT NULL,
|
|
drug2_name TEXT,
|
|
drug2_generic TEXT, -- 성분명 (영문)
|
|
|
|
-- 상호작용 정보
|
|
severity_level INTEGER, -- 1=심각, 2=중등도, 3=경미, 4=참고
|
|
severity_desc TEXT, -- 심각도 설명 (중증, 경미 등)
|
|
likelihood_level INTEGER, -- 발생 가능성
|
|
likelihood_desc TEXT,
|
|
|
|
-- 상세 설명 (AI 학습 핵심 데이터)
|
|
observation TEXT, -- 상호작용 설명 (한글)
|
|
observation_generic TEXT, -- 일반적 설명
|
|
clinical_management TEXT, -- 임상적 관리 방법
|
|
action_to_take TEXT, -- 권장 조치
|
|
reference TEXT, -- 참고문헌
|
|
|
|
FOREIGN KEY (log_id) REFERENCES kims_api_logs(id)
|
|
);
|
|
|
|
-- 인덱스
|
|
CREATE INDEX IF NOT EXISTS idx_kims_logs_created ON kims_api_logs(created_at);
|
|
CREATE INDEX IF NOT EXISTS idx_kims_logs_pre_serial ON kims_api_logs(pre_serial);
|
|
CREATE INDEX IF NOT EXISTS idx_kims_logs_status ON kims_api_logs(api_status);
|
|
CREATE INDEX IF NOT EXISTS idx_kims_interactions_log ON kims_interactions(log_id);
|
|
CREATE INDEX IF NOT EXISTS idx_kims_interactions_drugs ON kims_interactions(drug1_code, drug2_code);
|
|
CREATE INDEX IF NOT EXISTS idx_kims_interactions_severity ON kims_interactions(severity_level);
|
|
|
|
-- 통계 뷰
|
|
CREATE VIEW IF NOT EXISTS kims_stats AS
|
|
SELECT
|
|
DATE(created_at) as date,
|
|
COUNT(*) as total_calls,
|
|
SUM(CASE WHEN api_status = 'SUCCESS' THEN 1 ELSE 0 END) as success_count,
|
|
SUM(CASE WHEN interaction_count > 0 THEN 1 ELSE 0 END) as with_interaction,
|
|
SUM(CASE WHEN has_severe_interaction = 1 THEN 1 ELSE 0 END) as with_severe,
|
|
AVG(response_time_ms) as avg_response_ms
|
|
FROM kims_api_logs
|
|
GROUP BY DATE(created_at);
|