6.9 KiB
6.9 KiB
WBS 및 데이터베이스 논리 모델링 (노션 정리)
출처: 차장님 노션. WBS, DB ERD(지자체·판매소·사용자·품목·입고·주문·수불).
WBS (Work Breakdown Structure)
1. 프로젝트 준비 및 설계 (Planning & Design)
- 1.1 요구사항 확정: 기존 UI 분석 및 웹 표준 기능 정의.
- 1.2 서버사양 확정: 공공클라우드 기준 서버사양 확정.
- 1.3 개발서버 준비: 개발/테스트 서버 별도 구축. 공공클라우드에서는 최소한의 테스트만 수행(비용 최소화).
- 1.4 데이터베이스 설계: 수불, 판매, 기본 코드 등 엔티티 정의 및 정규화.
- 1.5 UI/UX 디자인: 반응형 대시보드 및 그리드 UI 설계. 모바일 바코드 스캐너 전용 웹 화면 설계.
2. 기본 정보 관리 모듈 개발 (Base Information Management)
- 2.1 공통 코드 관리 (Image 1): 지역(도/시/구/동), 봉투 종류, 재질, 용량 등 계층형 코드 관리 개발.
- 2.2 단가 및 포장 관리 (Image 2, 3): 발주/도매/소매 단가 이력 관리 및 박스/팩/낱장 단위 자동 계산 로직 구현.
- 2.3 대행소 및 업체 관리 (Image 4, 7, 8): 판매 대행소(은행 등), 협회, 제작업체 마스터 정보 관리.
- 2.4 담당자 관리 (Image 5, 6): 지자체/대행소 담당자 및 업체별 담당자 권한 부여 기능 개발.
- 2.5 무료 대상자 관리 (Image 9): 대상자별 지급 상태, 유효 기간 관리 및 불출 연동 기능.
3. 발주 및 입고 관리 모듈 개발 (Order & Inbound)
- 3.1 발주 프로세스: 제작업체별 발주 등록, 수량 변경 및 발주서 생성.
- 3.2 바코드 엔진 구축: PDF417 규격의 LOT 번호 생성 및 이미지 생성 API 개발.
- 3.3 스마트 입고 처리: 스캐너/입고 검수 기능, 일괄 입고 처리 및 입고 현황 리포트 개발.
4. 판매 및 결제 관리 모듈 개발 (Sales & Payment)
- 4.1 주문 관리: 지정 판매소 주문(전화/온라인) 접수 및 상태 관리.
- 4.2 결제 시스템 연동: 고정 가상계좌(Fixed VA) 매핑 및 입금 확인 자동화 (Webhook), 카드 결제 API 연동 및 승인 처리.
- 4.3 반품 및 취소: 판매/반품 취소 처리 및 재고 환원 로직 구현.
5. 재고 및 수불 분석 모듈 개발 (Inventory & Statistics)
- 5.1 실시간 수불 관리: 기간별/일일 봉투 수불 현황 및 LOT 추적 기능 개발.
- 5.2 실무 재고 실사: 실사 대상 선별, 실고 수량 등록 및 오차 분석 기능.
- 5.3 통계 분석: 전년 대비 판매 분석, 계절별/월별 판매 추이 시각화 차트 구축.
- 5.4 외부 연동: 국세청 홈택스 판매 데이터 전송 기능 (CSV/API).
6. 지정 판매소 지원 서비스 개발
- 6.1 판매소 전용 웹: 주문 신청, 입금 확인, 판매 이력 조회 기능.
- 6.2 출력 시스템: 지정 판매소별 고유 바코드 라벨 및 인쇄 제어.
7. 테스트 및 배포 (Testing & Deployment)
- 7.1 통합 테스트: 가상계좌 입금-주문-재고 연동 시나리오 검증.
- 7.2 데이터 이관: 기존 시스템(엑셀/Legacy DB) 데이터 클렌징 및 마이그레이션.
- 7.3 사용자 교육: 구군청 담당자 및 판매소 운영자 매뉴얼 제작.
- 7.4 최종 배포: 서버 인프라(Cloud) 구축 및 도메인 연결.
데이터베이스 논리 모델링 (ERD)
지자체(LocalGovernment)를 중심으로 사용자·지정판매소·품목·입고·주문·수불이 연결되는 멀티테넌트 구조. local_gov_id로 데이터 격리.
erDiagram
%% [조직 및 사용자 체계]
LocalGovernment ||--o{ User : "지자체 소속 사용자"
LocalGovernment ||--o{ Retailer : "관할 지정판매소"
Retailer ||--o{ User : "판매소 소속 사용자"
LocalGovernment {
int local_gov_id PK "지자체 고유 ID"
string gov_name "지자체 명칭(예: 북구청)"
string area_code "지역 코드"
string address "주소"
}
User {
int user_id PK
int local_gov_id FK "nullable (SuperAdmin용)"
int retailer_id FK "nullable"
string username "로그인 ID"
string password_hash
string role_type "SUPER, GOV, RETAIL"
datetime last_login
}
Retailer {
int retailer_id PK
int local_gov_id FK "관할 지자체 ID"
string retailer_name "상호명"
string owner_name "대표자명"
string va_number "고정 가상계좌 번호"
string status "정상, 취소, 폐업"
}
%% [물류 및 재고 체계]
LocalGovernment ||--o{ Product : "지자체별 취급 품목"
LocalGovernment ||--o{ StockTransaction : "지자체 수불 내역"
LocalGovernment ||--o{ InboundReceipt : "지자체 입고 내역"
Retailer ||--o{ SalesOrder : "판매소 주문"
Product {
int product_id PK
int local_gov_id FK "지자체별 단가 관리용"
string product_type "일반, 음식물, 재사용"
string capacity "3L, 5L, 10L 등"
int purchase_price "발주 단가"
int wholesale_price "도매가"
int retail_price "소비자가"
}
InboundReceipt {
int receipt_id PK
int local_gov_id FK
int product_id FK
string lot_number "PDF417 바코드 연동"
int quantity
datetime receipt_date
}
SalesOrder {
int sales_id PK
int local_gov_id FK "데이터 격리용 필드"
int retailer_id FK
datetime order_date
int total_amount
string payment_status "입금대기, 완료, 취소"
}
StockTransaction {
int trans_id PK
int local_gov_id FK "지자체 구분"
int product_id FK
string trans_type "IN(입고), OUT(판매), FREE(불출), DISCARD(파기)"
int quantity
int reference_id "SalesOrder 혹은 InboundID 연결"
datetime trans_date
}
ERD 요약
| 엔티티 | 설명 | 지자체 FK |
|---|---|---|
| LocalGovernment | 지자체 마스터(테넌트 루트) | — |
| User | 판매소/지자체 소속 사용자. SuperAdmin은 local_gov_id nullable | local_gov_id (nullable) |
| Retailer | 관할 지정판매소. 고정 가상계좌(va_number) 보유 | local_gov_id |
| Product | 지자체별 취급 품목·단가(발주/도매/소비자가) | local_gov_id |
| InboundReceipt | 지자체 입고 내역. LOT·바코드 연동 | local_gov_id |
| SalesOrder | 판매소 주문. 데이터 격리용 local_gov_id | local_gov_id |
| StockTransaction | 지자체 수불(입고/판매/불출/파기) | local_gov_id |
이 ERD는 docs/종량제 관련 자료/ss_gbms/ss_gbms/1-5.png 등에 포함된 다이어그램과 동일한 구조를 마크다운(mermaid)으로 표현한 것임.