- 설문 테이블 스키마 추가 (survey_templates, survey_progress, survey_responses) - 설문 템플릿 데이터 추가 스크립트 - 모바일 문진표 HTML 템플릿 ※ 아직 개발 중인 기능으로 추가 구현 필요
71 lines
2.9 KiB
SQL
71 lines
2.9 KiB
SQL
-- 환자 사전 문진표 시스템 테이블
|
|
|
|
-- 1. 문진 메인 테이블
|
|
CREATE TABLE IF NOT EXISTS patient_surveys (
|
|
survey_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
patient_id INTEGER,
|
|
survey_token TEXT UNIQUE NOT NULL, -- QR/링크용 고유 토큰
|
|
survey_date DATE DEFAULT (date('now')),
|
|
status TEXT DEFAULT 'PENDING' CHECK(status IN ('PENDING', 'IN_PROGRESS', 'COMPLETED', 'REVIEWED')),
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
completed_at DATETIME,
|
|
reviewed_at DATETIME,
|
|
reviewed_by TEXT,
|
|
notes TEXT,
|
|
FOREIGN KEY (patient_id) REFERENCES patients(patient_id)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_survey_token ON patient_surveys(survey_token);
|
|
CREATE INDEX IF NOT EXISTS idx_survey_patient ON patient_surveys(patient_id);
|
|
|
|
-- 2. 문진 응답 테이블
|
|
CREATE TABLE IF NOT EXISTS survey_responses (
|
|
response_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
survey_id INTEGER NOT NULL,
|
|
category TEXT NOT NULL, -- 카테고리 (TEMPERATURE, BODY_TEMP, DIGESTION, etc)
|
|
question_code TEXT NOT NULL, -- 질문 코드
|
|
question_text TEXT, -- 질문 내용
|
|
answer_value TEXT, -- 응답 값 (JSON 또는 TEXT)
|
|
answer_type TEXT, -- SINGLE, MULTIPLE, TEXT, RANGE
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (survey_id) REFERENCES patient_surveys(survey_id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_response_survey ON survey_responses(survey_id);
|
|
CREATE INDEX IF NOT EXISTS idx_response_category ON survey_responses(category);
|
|
|
|
-- 3. 문진 템플릿 테이블 (질문 정의)
|
|
CREATE TABLE IF NOT EXISTS survey_templates (
|
|
template_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
category TEXT NOT NULL,
|
|
category_name TEXT NOT NULL, -- 카테고리 한글명
|
|
question_code TEXT NOT NULL UNIQUE,
|
|
question_text TEXT NOT NULL,
|
|
question_subtext TEXT, -- 부가 설명
|
|
input_type TEXT NOT NULL CHECK(input_type IN ('RADIO', 'CHECKBOX', 'RANGE', 'TEXT', 'TEXTAREA', 'NUMBER')),
|
|
options TEXT, -- JSON 배열 형태의 선택지
|
|
is_required INTEGER DEFAULT 1,
|
|
sort_order INTEGER DEFAULT 0,
|
|
is_active INTEGER DEFAULT 1,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_template_category ON survey_templates(category);
|
|
CREATE INDEX IF NOT EXISTS idx_template_active ON survey_templates(is_active);
|
|
|
|
-- 4. 문진 진행 상태 추적 테이블
|
|
CREATE TABLE IF NOT EXISTS survey_progress (
|
|
progress_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
survey_id INTEGER NOT NULL,
|
|
category TEXT NOT NULL,
|
|
total_questions INTEGER DEFAULT 0,
|
|
answered_questions INTEGER DEFAULT 0,
|
|
is_completed INTEGER DEFAULT 0,
|
|
last_updated DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (survey_id) REFERENCES patient_surveys(survey_id) ON DELETE CASCADE,
|
|
UNIQUE(survey_id, category)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_progress_survey ON survey_progress(survey_id);
|