🆕 신규 메뉴 개발
무엇 — MD-04 재고회전 산출 — 상품별 월말 회전일수·상태·재고금액 조회 (신규 별도 메뉴)📍 위치: 재고관리 › 재고회전
핵심 결정
메뉴 형태
상품에 부여하지 않는 별도 신규 메뉴 · 상품별 산출 · 컬럼=총재고/월판매/회전일수/상태/재고금액
회전일수 산식
(전월말일재고+금월말일재고)/금월판매량×30 · Buggy 확정(÷2 평균재고 없음) · 수량 기반
상태 정책
0~30일 양호 / 31~70일 경계 / 71일~ 폐기 · 판매0이면 폐기
재고금액
금월말재고 × 넷공급가 단가(MD-01에서 쌓인 원가) = 수량×원가 · ÷2 없음
신규상품 유예
첫달 부진 오분류 방지 위해 GRACE 처리(회전/폐기 판정 제외)
산출 시점·의존성
월말 확정치로만 산출 · MD-01(재고관리) 다음 버전(재고금액이 MD-01 단가 필요)
01화면 — 먼저 보기
이 티켓이 실제로 어떤 화면이 되는지 먼저 봅니다
회전일수 = (전월말재고 + 금월말재고) / 금월판매량 × 30 · 상태 0~30 양호 / 31~70 경계 / 71~ 폐기 · 재고금액 = 금월말재고 × 넷공급가(MD-01) · 월말 확정치 스냅샷.
신규 화면 · 제안
재고관리 › 재고회전신규 메뉴
기준월 2026-07 ▾상태 ▾센터 ▾🔍 히어로코드·상품명 검색
▲ 재고회전 조회 목록 — 바뀌는 컬럼은 🆕 로 표시(예시 데이터)
1재고회전 메뉴 진입(신규 별도 메뉴) — 상품 화면에 부여하지 않고 어드민 좌측 메뉴에 신규 항목 '재고회전' 진입. 상품별 산출 목록이 기본 화면.
2기준월 선택 — 상단에서 산출 기준월(YYYYMM) 선택. 월말 확정치로만 산출하므로 마감된 월만 조회 가능. 미마감 당월은 비활성.
3상품별 목록 조회 — 히어로코드·그룹상품명·센터·총재고(금월말)·월판매량·회전일수·상태·재고금액단가(넷공급가)·재고금액 컬럼 노출. 상품 단위 1행.
4상태 필터 — 양호/경계/폐기/유예 상태로 필터. 폐기(71일~ 또는 판매0)·경계 상품을 우선 확인. 유예(신규)는 별도 구분 표기.
5행 상세 — 산식 근거 확인 — 행 펼침에서 전월말재고·금월말재고·금월판매량과 회전일수 산식 (전월말+금월말)/판매량×30, 재고금액 산식 금월말재고×넷공급가 노출.
stock_turnover_monthly 신규
idPK BIGSERIAL
ymCHAR(6)
hero_codeFK VARCHAR
center_codeVARCHAR
prev_month_end_qtyINT
curr_month_end_qtyINT
month_sales_qtyINT
turnover_daysNUMERIC(10,1)
statusVARCHAR
unit_net_costINT
stock_valueBIGINT
is_new_productBOOLEAN
computed_atTIMESTAMP
월·상품·센터별 재고회전 산출 스냅샷(월말 확정치). 재산출 시 upsert.
stock_balance READ
hero_codePK VARCHAR
center_codePK VARCHAR
total_qtyINT
MD-01 집계(= SUM stock_entry.change_qty). 월말 재고 수량 산출 근거.
stock_entry READ
hero_codeFK VARCHAR
center_codeFK VARCHAR
change_qtyINT
net_supply_priceINT
created_atTIMESTAMP
MD-01 수불 로그(입고/조정/출고). 월판매량 집계 + 넷공급가 단가 참조.
product READ
hero_codePK VARCHAR
product_nameVARCHAR
created_atTIMESTAMP
상품 기준. 그룹상품명 표기 + 등록일로 신규상품(유예) 판정.
stock_turnover_monthly.hero_code → product.hero_code (상품 기준)
월말재고 = stock_balance.total_qty (hero_code, center_code, 월말 확정 시점)
금월판매량 = SUM(-stock_entry.change_qty) 출고분, 해당월 created_at 귀속, GROUP BY hero_code, center_code
unit_net_cost = stock_entry.net_supply_price (MD-01 월말 시점 원가 단가)
-- ============================================================
-- MD-04 재고회전 산출 (신규 별도 메뉴)
-- 월말 확정치 기반 상품별 회전일수·상태·재고금액 스냅샷
-- 회전일수는 수량 기반 / 재고금액은 MD-01 넷공급가 단가 참조
-- ============================================================
CREATE TABLE stock_turnover_monthly (
id BIGSERIAL PRIMARY KEY,
ym CHAR(6) NOT NULL, -- 산출 기준월 'YYYYMM' (월말 확정치)
hero_code VARCHAR NOT NULL
REFERENCES product(hero_code), -- 히어로코드(상품 단위 산출)
center_code VARCHAR, -- 센터(예: 성동광진) · NULL=전체합산
prev_month_end_qty INT NOT NULL DEFAULT 0, -- 전월 말일 재고 수량
curr_month_end_qty INT NOT NULL DEFAULT 0, -- 금월 말일 재고 수량
month_sales_qty INT NOT NULL DEFAULT 0, -- 금월 판매량(수량)
-- 회전일수 = (prev_month_end_qty + curr_month_end_qty) / month_sales_qty * 30
-- ※ Buggy 확정: ÷2(평균재고) 없음 · 판매0이면 NULL(→ 상태 DISPOSE 폐기)
turnover_days NUMERIC(10,1),
-- 상태: GOOD 0~30일 양호 / WARN 31~70일 경계 / DISPOSE 71일~ 또는 판매0 폐기 / GRACE 신규상품 유예
status VARCHAR NOT NULL
CHECK (status IN ('GOOD','WARN','DISPOSE','GRACE')),
unit_net_cost INT, -- 재고금액 단가 = MD-01에 쌓인 넷공급가(월말 시점 원가)
stock_value BIGINT, -- 재고금액 = curr_month_end_qty * unit_net_cost
is_new_product BOOLEAN NOT NULL DEFAULT FALSE, -- 신규상품 유예 대상 여부(첫달 부진 오분류 방지)
computed_at TIMESTAMP NOT NULL DEFAULT now(), -- 산출 실행 일시
UNIQUE (ym, hero_code, center_code) -- 월·상품·센터 1건(재산출 시 upsert)
);
CREATE INDEX ON stock_turnover_monthly (ym, status);
CREATE INDEX ON stock_turnover_monthly (hero_code, ym);
04화면 상세 — 세부 표·규칙
목록 외 품목표·모달·규칙 등 세부 화면
상태 판정 규칙(범례 · 목록 상단 노출)
월말 확정치 기준. 회전일수는 수량 기반, 재고금액만 넷공급가 원가 사용.
행 상세 — 회전일수·재고금액 산식 근거
Buggy 확정 산식(÷2 평균재고 미적용). 넷공급가 단가는 MD-01 재고관리에서 쌓인 원가를 그대로 참조.