# 한약 재고관리 시스템 - 개발 가이드라인 ## 📋 테스트 데이터 입력 규칙 ### 🔴 중요: 입고 테스트 시 필수 준수사항 **모든 재고 입고 테스트는 반드시 다음 프로세스를 따라야 합니다:** 1. **입고장 생성 (purchase_receipts)** - 공급업체, 날짜, 총액 등 기본 정보 등록 - VAT 포함/미포함 구분 2. **입고 라인 생성 (purchase_receipt_lines)** - 각 약재별 상세 입고 정보 - 수량, 단가, 원산지 등 기록 3. **재고 LOT 자동 생성 (inventory_lots)** - 입고 라인에 따라 자동으로 LOT 생성 - `receipt_line_id`로 입고장과 연결 - 재고 추적 및 이력 관리 ### ❌ 금지사항 - inventory_lots 테이블에 직접 데이터 INSERT 금지 - 입고장 없이 재고만 추가하는 것은 테스트 목적 외 금지 ### ✅ 올바른 예시 ```python # 1. 입고장 생성 INSERT INTO purchase_receipts (supplier_id, receipt_date, receipt_no, ...) VALUES (1, '2024-02-18', 'PR-20240218-001', ...); # 2. 입고 라인 추가 INSERT INTO purchase_receipt_lines (receipt_id, herb_item_id, quantity_g, ...) VALUES (1, 47, 1000, ...); # 3. LOT은 자동 생성되거나 트리거로 처리 INSERT INTO inventory_lots (receipt_line_id, ...) # receipt_line_id 필수! ``` ### 📌 특수 케이스 **입고장 없는 재고 테스트가 필요한 경우:** - `receipt_line_id = 0` 사용 (입고장 없음 표시) - 반드시 테스트 완료 후 삭제 또는 원복 - 실제 운영 환경에서는 사용 금지 --- ## 🗂️ 데이터베이스 구조 ### 핵심 테이블 관계 ``` purchase_receipts (입고장) ↓ purchase_receipt_lines (입고 상세) ↓ inventory_lots (재고 LOT) - receipt_line_id로 연결 ↓ compound_consumptions (소비 내역) ``` ### 재고 계산 방식 1. **전체 재고 (all)** - 모든 LOT 포함 - `receipt_line_id = 0` 포함 2. **입고장 기준 (receipt_only)** - `receipt_line_id > 0`인 LOT만 - 정식 입고된 재고만 계산 3. **검증된 재고 (verified)** - 현재는 입고장 기준과 동일 - 향후 별도 검증 플래그 추가 예정 --- ## 🔄 재고 흐름 ```mermaid graph LR A[입고장 등록] --> B[입고 라인 생성] B --> C[LOT 자동 생성] C --> D[재고 보유] D --> E1[복합제 소비] D --> E2[처방 출고] D --> E3[재고 보정] ``` --- ## 💡 개발 시 주의사항 1. **재고 자산 계산** - 효능 태그 JOIN 시 중복 주의 - GROUP BY 전에 DISTINCT 사용 - 태그는 별도 쿼리로 조회 권장 2. **LOT 관리** - receipt_line_id는 NOT NULL 제약 - 0 = 입고장 없음 (특수 케이스) - NULL 사용 불가 3. **단가 처리** - 입고 시점 단가 저장 - 출고 시 LOT의 단가 사용 - 가중평균 계산 시 주의 --- ## 📝 테스트 체크리스트 - [ ] 입고장 생성 확인 - [ ] 입고 라인과 LOT 연결 확인 - [ ] 재고 자산 계산 정확성 - [ ] 소비 후 재고 차감 확인 - [ ] 재고 보정 처리 확인 --- *Last Updated: 2024-02-18* *작성자: Claude & User*