-- 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);