kdrug-inventory-system/docs/database_schema.md
시골약사 116712aa24 docs: 데이터베이스 스키마 및 API 문서 추가
- database_schema.md: 전체 테이블 구조 상세 설명
  - 27개 테이블의 컬럼 정의 및 설명
  - 테이블 간 관계 설명
  - 주요 비즈니스 규칙 문서화

- database_erd.md: ER 다이어그램 및 데이터 플로우
  - Mermaid 다이어그램으로 시각화
  - 재고 흐름도, 처방-조제 흐름 설명
  - 인덱스 전략 및 데이터 무결성 규칙

- api_documentation.md: REST API 상세 명세
  - 약재, 처방, 조제, 재고, 환자 관리 API
  - 요청/응답 형식 예시
  - 에러 처리 방식

- README 업데이트: 문서 링크 추가

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-15 19:07:34 +00:00

13 KiB

한의원 약재 관리 시스템 데이터베이스 스키마

목차

  1. 핵심 마스터 테이블
  2. 재고 관리 테이블
  3. 조제 관리 테이블
  4. 구매/입고 관리 테이블
  5. 환자 관리 테이블
  6. 재고 조정 테이블
  7. 설문 관리 테이블

핵심 마스터 테이블

herb_masters (약재 마스터)

통합 약재 마스터 정보. 성분코드(ingredient_code) 기준 관리.

컬럼명 타입 설명
ingredient_code VARCHAR(10) PK 성분코드 (예: 3400H1AHM)
herb_name VARCHAR(100) 한글명 (예: 인삼)
herb_name_hanja VARCHAR(100) 한자명 (예: 人蔘)
herb_name_latin VARCHAR(200) 라틴명
description TEXT 설명
is_active BOOLEAN 사용 여부
created_at TIMESTAMP 생성일시
updated_at TIMESTAMP 수정일시

herb_items (약재 제품)

실제 재고 관리 단위. 제조사별 개별 제품.

컬럼명 타입 설명
herb_item_id INTEGER PK 제품 ID
ingredient_code VARCHAR(10) FK 성분코드 (herb_masters 참조)
insurance_code TEXT 보험코드
herb_name TEXT 제품명 (예: 신흥인삼)
specification TEXT 규격/제조사 (예: (주)신흥제약)
default_unit TEXT 기본 단위
is_active INTEGER 사용 여부
created_at DATETIME 생성일시
updated_at DATETIME 수정일시

herb_products (표준 약재 제품 목록)

건강보험 표준 약재 제품 목록.

컬럼명 타입 설명
product_id INTEGER PK 제품 ID
ingredient_code VARCHAR(10) FK 성분코드
product_code VARCHAR(9) 제품코드
company_name VARCHAR(200) 제조사명
product_name VARCHAR(200) 제품명
standard_code VARCHAR(20) 표준코드
representative_code VARCHAR(20) 대표코드
package_size VARCHAR(20) 포장 크기
package_unit VARCHAR(20) 포장 단위
valid_from DATE 유효 시작일
valid_to DATE 유효 종료일
is_active BOOLEAN 사용 여부

formulas (처방 마스터)

등록된 처방 정보.

컬럼명 타입 설명
formula_id INTEGER PK 처방 ID
formula_code TEXT 처방코드
formula_name TEXT 처방명 (예: 쌍화탕)
formula_type TEXT 처방 유형
base_cheop INTEGER 기본 첩수
base_pouches INTEGER 기본 포수
description TEXT 설명
is_active INTEGER 사용 여부
created_by TEXT 생성자
created_at DATETIME 생성일시
updated_at DATETIME 수정일시

formula_ingredients (처방 구성)

처방별 구성 약재. ingredient_code 기반.

컬럼명 타입 설명
ingredient_id INTEGER PK 구성 ID
formula_id INTEGER FK 처방 ID
ingredient_code TEXT 성분코드 (herb_masters 참조)
grams_per_cheop REAL 1첩당 용량(g)
notes TEXT 비고
sort_order INTEGER 정렬 순서
created_at DATETIME 생성일시

재고 관리 테이블

inventory_lots (재고 로트)

로트별 재고 관리.

컬럼명 타입 설명
lot_id INTEGER PK 로트 ID
herb_item_id INTEGER FK 제품 ID
supplier_id INTEGER FK 공급처 ID
receipt_line_id INTEGER FK 입고 라인 ID
received_date DATE 입고일
origin_country TEXT 원산지 (예: 중국, 한국)
unit_price_per_g REAL g당 단가
quantity_received REAL 입고량(g)
quantity_onhand REAL 현재고량(g)
expiry_date DATE 유효기간
lot_number TEXT 로트번호
is_depleted INTEGER 소진 여부
created_at DATETIME 생성일시
updated_at DATETIME 수정일시

stock_ledger (재고 원장)

모든 재고 변동 이력 관리.

컬럼명 타입 설명
ledger_id INTEGER PK 원장 ID
event_time DATETIME 이벤트 시간
event_type TEXT 이벤트 유형 (IN/OUT/ADJUST)
herb_item_id INTEGER FK 제품 ID
lot_id INTEGER FK 로트 ID
quantity_delta REAL 수량 변동 (+/-)
unit_cost_per_g REAL g당 단가
reference_table TEXT 참조 테이블명
reference_id INTEGER 참조 ID
notes TEXT 비고
created_by TEXT 생성자
created_at DATETIME 생성일시

조제 관리 테이블

compounds (조제 내역)

환자별 조제 내역.

컬럼명 타입 설명
compound_id INTEGER PK 조제 ID
patient_id INTEGER FK 환자 ID
formula_id INTEGER FK 처방 ID (NULL 가능 - 직접조제)
compound_date DATE 조제일
je_count REAL 제수
cheop_total REAL 총 첩수
pouch_total REAL 총 포수
cost_total REAL 원가 합계
sell_price_total REAL 판매가 합계
prescription_no TEXT 처방전 번호
status TEXT 상태
notes TEXT 비고
created_by TEXT 생성자
created_at DATETIME 생성일시
updated_at DATETIME 수정일시

compound_ingredients (조제 구성 약재)

조제별 사용 약재 구성.

컬럼명 타입 설명
compound_ingredient_id INTEGER PK 구성 ID
compound_id INTEGER FK 조제 ID
herb_item_id INTEGER FK 제품 ID
grams_per_cheop REAL 1첩당 용량(g)
total_grams REAL 총 용량(g)
notes TEXT 비고
created_at DATETIME 생성일시

compound_consumptions (조제 소비 내역)

조제 시 실제 소비한 재고 로트별 내역.

컬럼명 타입 설명
consumption_id INTEGER PK 소비 ID
compound_id INTEGER FK 조제 ID
herb_item_id INTEGER FK 제품 ID
lot_id INTEGER FK 로트 ID
quantity_used REAL 사용량(g)
unit_cost_per_g REAL g당 단가
cost_amount REAL 원가 금액
created_at DATETIME 생성일시

구매/입고 관리 테이블

suppliers (공급처)

약재 공급처 정보.

컬럼명 타입 설명
supplier_id INTEGER PK 공급처 ID
name TEXT 공급처명
business_no TEXT 사업자번호
contact_person TEXT 담당자
phone TEXT 전화번호
address TEXT 주소
is_active INTEGER 사용 여부
created_at DATETIME 생성일시
updated_at DATETIME 수정일시

purchase_receipts (구매 영수증)

구매/입고 영수증 헤더.

컬럼명 타입 설명
receipt_id INTEGER PK 영수증 ID
supplier_id INTEGER FK 공급처 ID
receipt_date DATE 거래일
receipt_no TEXT 영수증 번호
vat_included INTEGER VAT 포함 여부
vat_rate REAL VAT 비율
total_amount REAL 총 금액
source_file TEXT 원본 파일
notes TEXT 비고
created_at DATETIME 생성일시
updated_at DATETIME 수정일시

purchase_receipt_lines (구매 영수증 라인)

구매/입고 영수증 상세 라인.

컬럼명 타입 설명
line_id INTEGER PK 라인 ID
receipt_id INTEGER FK 영수증 ID
herb_item_id INTEGER FK 제품 ID
origin_country TEXT 원산지
quantity_g REAL 수량(g)
unit_price_per_g REAL g당 단가
line_total REAL 라인 합계
expiry_date DATE 유효기간
lot_number TEXT 로트번호
created_at DATETIME 생성일시

환자 관리 테이블

patients (환자)

환자 기본 정보.

컬럼명 타입 설명
patient_id INTEGER PK 환자 ID
name TEXT 환자명
phone TEXT 전화번호
jumin_no TEXT 주민번호
gender TEXT 성별
birth_date DATE 생년월일
address TEXT 주소
notes TEXT 비고
is_active INTEGER 사용 여부
created_at DATETIME 생성일시
updated_at DATETIME 수정일시

재고 조정 테이블

stock_adjustments (재고 조정)

재고 보정 헤더.

컬럼명 타입 설명
adjustment_id INTEGER PK 조정 ID
adjustment_date DATE 조정일
adjustment_no TEXT 조정 번호
adjustment_type TEXT 조정 유형
notes TEXT 비고
created_by TEXT 생성자
created_at DATETIME 생성일시
updated_at DATETIME 수정일시

stock_adjustment_details (재고 조정 상세)

재고 보정 상세 내역.

컬럼명 타입 설명
detail_id INTEGER PK 상세 ID
adjustment_id INTEGER FK 조정 ID
herb_item_id INTEGER FK 제품 ID
lot_id INTEGER FK 로트 ID
quantity_before REAL 조정 전 수량
quantity_after REAL 조정 후 수량
quantity_delta REAL 조정량
reason TEXT 사유
created_at DATETIME 생성일시

효능 태그 테이블

herb_efficacy_tags (효능 태그)

약재 효능 마스터.

컬럼명 타입 설명
tag_id INTEGER PK 태그 ID
tag_name VARCHAR(50) 태그명 (예: 보혈, 활혈)
tag_category VARCHAR(50) 카테고리
description TEXT 설명
created_at TIMESTAMP 생성일시

herb_item_tags (약재-태그 연결)

약재와 효능 태그 다대다 관계.

컬럼명 타입 설명
herb_item_id INTEGER FK 제품 ID
tag_id INTEGER FK 태그 ID

설문 관리 테이블

survey_templates (설문 템플릿)

설문 질문 템플릿.

컬럼명 타입 설명
template_id INTEGER PK 템플릿 ID
category TEXT 카테고리
category_name TEXT 카테고리명
question_code TEXT 질문 코드
question_text TEXT 질문 내용
question_subtext TEXT 보조 설명
input_type TEXT 입력 타입
options TEXT 선택 옵션
is_required INTEGER 필수 여부
sort_order INTEGER 정렬 순서
is_active INTEGER 사용 여부
created_at DATETIME 생성일시

patient_surveys (환자 설문)

환자별 설문 내역.

컬럼명 타입 설명
survey_id INTEGER PK 설문 ID
patient_id INTEGER FK 환자 ID
survey_token TEXT 설문 토큰
survey_date DATE 설문일
status TEXT 상태
created_at DATETIME 생성일시
completed_at DATETIME 완료일시
reviewed_at DATETIME 검토일시
reviewed_by TEXT 검토자
notes TEXT 비고

survey_responses (설문 응답)

설문 응답 내역.

컬럼명 타입 설명
response_id INTEGER PK 응답 ID
survey_id INTEGER FK 설문 ID
category TEXT 카테고리
question_code TEXT 질문 코드
question_text TEXT 질문 내용
answer_value TEXT 응답 값
answer_type TEXT 응답 타입
created_at DATETIME 생성일시
updated_at DATETIME 수정일시

survey_progress (설문 진행 상태)

설문 카테고리별 진행 상태.

컬럼명 타입 설명
progress_id INTEGER PK 진행 ID
survey_id INTEGER FK 설문 ID
category TEXT 카테고리
total_questions INTEGER 전체 질문 수
answered_questions INTEGER 응답 질문 수
is_completed INTEGER 완료 여부
last_updated DATETIME 최종 수정일시

주요 관계

  1. 약재 계층 구조

    • herb_masters (마스터) ← herb_items (제품) ← inventory_lots (로트)
    • ingredient_code로 연결
  2. 처방-조제 관계

    • formulasformula_ingredients (ingredient_code 기반)
    • compoundscompound_ingredientscompound_consumptions
  3. 재고 추적

    • 입고: purchase_receiptspurchase_receipt_linesinventory_lots
    • 출고: compound_consumptionsinventory_lots
    • 이력: 모든 변동은 stock_ledger에 기록
  4. 가격 정책

    • FIFO (선입선출) 기준
    • lot별 unit_price_per_g 관리

마이그레이션 이력

2024년 주요 변경사항

  1. formula_ingredients 테이블: herb_item_idingredient_code 변경

    • 특정 제품이 아닌 성분코드 기준 처방 구성
    • 조제 시 동일 성분의 다른 제품 선택 가능
  2. herb_masters 테이블 추가

    • 454개 표준 약재 마스터 데이터
    • ingredient_code 기준 통합 관리
  3. herb_efficacy_tags 시스템 추가

    • 18개 기본 효능 태그
    • 약재별 효능 분류 체계