pharmacy-pos-qr-system/docs/postgresql-apdb.md
thug0bin e470deaefc fix: rx-usage 쿼리에 PS_Type!=9 조건 추가 (실제 조제된 약만 집계)
- patient_query: 대체조제 원본 처방 제외
- rx_query: 대체조제 원본 처방 제외
- PS_Type=9는 대체조제시 원래 처방된 약(조제 안됨)
- 기타 배치 스크립트 및 문서 추가
2026-03-09 21:54:32 +09:00

9.4 KiB

PostgreSQL APDB (apdb_master) 데이터베이스 문서

접속 정보

항목
Host 192.168.0.87
Port 5432
Database apdb_master
User admin
Password trajet6640
Connection String postgresql://admin:trajet6640@192.168.0.87:5432/apdb_master
from sqlalchemy import create_engine
engine = create_engine('postgresql://admin:trajet6640@192.168.0.87:5432/apdb_master')

핵심 테이블

apc — 동물약품 마스터 (16,326건)

APC(Animal Product Code) 기반 동물약품 정보. 모든 동물약의 기준 테이블.

컬럼 타입 설명
idx INTEGER PK 일련번호
apc VARCHAR(100) APC 코드 (13자리, '023'으로 시작)
item_seq VARCHAR(100) 품목기준코드
item_code VARCHAR(100) 품목코드 (APC 앞 8자리 = item_code)
product_name VARCHAR(200) 제품명 (한글)
product_english_name VARCHAR(200) 제품 영문명
company_name VARCHAR(100) 제조/수입사명
approval_number VARCHAR(100) 허가번호
ac VARCHAR(100) AC 코드
dosage_code VARCHAR(100) 제형코드
packaging_code VARCHAR(100) 포장코드
pc VARCHAR(100) PC 코드
dosage VARCHAR(100) 제형 (정, 액, 캡슐 등)
packaging VARCHAR(100) 포장단위
approval_date VARCHAR(100) 허가일자
product_type VARCHAR(500) 제품유형
main_ingredient VARCHAR(500) 주성분
finished_material VARCHAR(500) 완제원료
manufacture_import VARCHAR(100) 제조/수입 구분
country_of_manufacture VARCHAR(100) 제조국
basic_info TEXT 기본정보
raw_material TEXT 원료약품
efficacy_effect TEXT 효능효과
dosage_instructions TEXT 용법용량
precautions TEXT 주의사항
component_code VARCHAR(100) 성분코드
component_name_ko VARCHAR(200) 성분명(한글)
component_name_en VARCHAR(200) 성분명(영문)
dosage_factor VARCHAR(100) 용량계수
llm_pharm JSONB LLM 생성 약사용 정보 (투여량, 주의사항 등)
llm_user VARCHAR(500) LLM 생성 사용자용 설명
image_url1~3 VARCHAR(500) 제품 이미지 URL
list_price NUMERIC(10,2) 정가
weight_min_kg DOUBLE PRECISION 체중 하한 (kg)
weight_max_kg DOUBLE PRECISION 체중 상한 (kg)
pet_size_label VARCHAR(100) 체중 라벨 (소형견용, 대형견용 등)
pet_size_code VARCHAR(10) 체중 코드
for_pets BOOLEAN 반려동물용 여부
prescription_target BOOLEAN 처방대상 여부
is_not_medicine BOOLEAN 비의약품 여부
usage_guide JSONB 사용 가이드 (구조화)
godoimage_url_f/b/d VARCHAR(500) 고도몰 이미지 URL
pill_color VARCHAR(100) 알약 색상
updated_at TIMESTAMP 수정일시
parent_item_id INTEGER 부모 품목 ID

APC 코드 구조: 023XXXXXYYZZZ

  • 앞 8자리 (023XXXXX) = item_code (품목코드, 대표 APC)
  • 나머지 = 포장단위별 구분

component_code — 성분 정보 (1,105건)

컬럼 타입 설명
idx INTEGER PK 일련번호
code VARCHAR(500) 성분코드
component_name_ko VARCHAR(500) 성분명(한글)
component_name_en VARCHAR(500) 성분명(영문)
description VARCHAR(500) 설명
efficacy TEXT 효능
target_animals JSONB 대상 동물
precautions TEXT 주의사항
additional_precautions TEXT 추가 주의사항
prohibited_breeds VARCHAR(500) 금기 품종
offlabel TEXT 오프라벨 사용

component_guide — 성분별 투여 가이드 (1건)

컬럼 타입 설명
component_code VARCHAR(50) PK 성분코드
component_name_ko/en VARCHAR(200) 성분명
dosing_interval_adult VARCHAR(200) 성체 투여간격
dosing_interval_high_risk VARCHAR(200) 고위험군 투여간격
dosing_interval_puppy VARCHAR(200) 유아 투여간격
dosing_interval_source VARCHAR(500) 출처
withdrawal_period VARCHAR(200) 휴약기간
contraindication VARCHAR(500) 금기사항
companion_drugs VARCHAR(500) 병용약물

dosage_info — 용량 정보 (152건)

컬럼 타입 설명
id INTEGER PK 일련번호
apdb_idx INTEGER apc 테이블 idx 참조
component_code VARCHAR(100) 성분코드
dose_per_kg DOUBLE PRECISION kg당 용량
dose_per_kg_min/max DOUBLE PRECISION kg당 용량 범위
dose_unit VARCHAR(20) 용량 단위
unit_dose DOUBLE PRECISION 단위 용량
unit_type VARCHAR(20) 단위 타입
frequency VARCHAR(50) 투여 빈도
route VARCHAR(30) 투여 경로
weight_min/max_kg DOUBLE PRECISION 적용 체중 범위
animal_type VARCHAR(10) 동물 종류
source VARCHAR(20) 출처
verified BOOLEAN 검증 여부
raw_text TEXT 원문

symptoms — 증상 코드 (51건)

컬럼 타입 설명
idx INTEGER PK 일련번호
prefix VARCHAR(1) 카테고리 접두사
prefix_description VARCHAR(50) 카테고리 설명
symptom_code VARCHAR(10) 증상 코드
symptom_description VARCHAR(255) 증상 설명
disease_description VARCHAR(255) 질병 설명

symptom_component_mapping — 증상-성분 매핑 (111건)

컬럼 타입 설명
symptom_code VARCHAR(10) 증상 코드
component_code VARCHAR(500) 성분 코드

재고/유통 테이블

inventory — 재고 (656건)

컬럼 타입 설명
id INTEGER PK 일련번호
apdb_id INTEGER apc.idx 참조
supplier_cost NUMERIC(12,2) 공급가
wholesaler_price NUMERIC(12,2) 도매가
retail_price NUMERIC(12,2) 소매가
quantity INTEGER 수량
transaction_type VARCHAR(20) 거래유형
order_no VARCHAR(100) 주문번호
serial_number VARCHAR(100) 시리얼번호
expiration_date DATE 유효기간
receipt_id INTEGER 입고전표 ID
entity_id VARCHAR(50) 거래처 ID
entity_type VARCHAR(20) 거래처 유형
location_id INTEGER 보관위치 ID
goods_no INTEGER 고도몰 상품번호

receipt — 입고전표 (21건)

컬럼 타입 설명
idx INTEGER PK 일련번호
receipt_number VARCHAR(100) 전표번호
receipt_date TIMESTAMP 입고일
total_quantity INTEGER 총수량
total_amount NUMERIC(10,2) 총금액
entity_id VARCHAR(50) 거래처 ID
entity_type VARCHAR(20) 거래처 유형

vendor — 거래처 (3건)

컬럼 타입 설명
idx INTEGER PK 일련번호
vendor_code VARCHAR(50) 거래처 코드
name VARCHAR(200) 거래처명
business_reg_no VARCHAR(50) 사업자번호

약국/회원 테이블

animal_pharmacies — 동물약국 목록 (18,955건)

전국 동물약국 데이터 (공공데이터 기반).

컬럼 타입 설명
id INTEGER PK 일련번호
management_number VARCHAR(50) 관리번호
name VARCHAR(200) 약국명
phone VARCHAR(20) 전화번호
address_old/new VARCHAR(500) 주소
latitude/longitude NUMERIC 위경도
business_status VARCHAR(10) 영업상태

p_member — 약국 회원 (31건)

컬럼 타입 설명
idx INTEGER PK 일련번호
memno INTEGER 회원번호
pharmacyname VARCHAR(100) 약국명
businessregno VARCHAR(20) 사업자번호
kioskusage BOOLEAN 키오스크 사용
mem_nm VARCHAR(100) 회원명

기타 테이블

테이블 행수 설명
apc_subnames 0 APC 별칭 (미사용)
cs_memo 13 CS 메모
excluded_pharmacies 15 제외 약국
evidence_reference 0 근거 문헌 참조
recommendation_log 3 추천 로그
supplementary_product 5 보조제품
optimal_stock 3 적정재고 설정
sync_status 168 동기화 상태
system_log 438 시스템 로그
location 4 보관 위치
region / subregion 3/8 지역 구분
member_group_change_logs 4 회원그룹 변경 이력

주요 쿼리 예시

-- APC로 제품 조회
SELECT * FROM apc WHERE apc = '0230338510101';

-- 제품명 검색 (띄어쓰기 무시)
SELECT apc, product_name
FROM apc
WHERE REGEXP_REPLACE(LOWER(product_name), '[\s\-\.]+', '', 'g')
      LIKE '%파라캅%';

-- 체중별 제품 검색
SELECT apc, product_name, weight_min_kg, weight_max_kg
FROM apc
WHERE weight_min_kg IS NOT NULL
ORDER BY product_name;

-- 대표 APC → 포장단위 APC 조회 (앞 8자리 기준)
SELECT apc, product_name, packaging
FROM apc
WHERE LEFT(apc, 8) = '02303385';

-- 성분별 제품 검색
SELECT a.apc, a.product_name, a.component_name_ko
FROM apc a
WHERE a.component_code = 'P001';

-- 증상 → 성분 → 제품 검색
SELECT s.symptom_description, cc.component_name_ko, a.product_name
FROM symptoms s
JOIN symptom_component_mapping scm ON s.symptom_code = scm.symptom_code
JOIN component_code cc ON cc.code = scm.component_code
JOIN apc a ON a.component_code = cc.code;