MD-07 · 지역(센터)별 가격

지역(센터)별 가격 관리 (신규오픈 마진율 일괄 · 권역별 타겟가격)

신규오픈 지역 대응을 위해 공급사·상품 마진율을 권역 단위로 일괄 조정하고, 특정 상품을 MFC 권역(센터 묶음)별로 정액/정률 지정하는 가격 정책 화면

🔴 결정 대기 가격 관리 신규오픈 대응 권역/센터
🆕 신규 메뉴 개발
무엇 — 신규오픈 지역 대응을 위해 공급사·상품 마진율을 권역 단위로 일괄 조정하고, 특정 상품을 MFC 권역(센터 묶음)별로 정액/정률 지정하는 가격 정책 화면📍 위치: 상품관리 › 가격 관리 › 권역별 가격

핵심 결정

기능 분리
신규오픈 마진율 일괄(범위 마진 조정) 과 권역별 타겟가격(상품 정액/정률 지정)은 별개 기능 — 둘 다 구현
권역 정의
권역 = 센터 묶음(신규). center_area는 동(洞) 단위라 재사용 불가 → center_region 신설
지정 방식
권역별 = 정액(고정가) 또는 정률(마진율 %) 선택
가드레일
지정가 ≥ 넷 공급가(net), 마진율 범위 검증(마이너스/과도 차단), 적용기간 겹침 차단
필드 재사용
일괄 마진은 seller_product.margin_flag/margin_rate·seller_center.margin_rate 재사용, 권역 지정가만 신규 테이블
01

화면 — 먼저 보기

이 티켓이 실제로 어떤 화면이 되는지 먼저 봅니다

[결정 필요] ① 신규오픈은 '마진율 일괄'과 '권역별 지정가' 두 기능이 별개(둘 다 필요) ② 권역=센터 묶음의 신규 개념으로, 기존 center_area(동 단위)를 그대로 쓸 수 없음 — 권역 정의를 먼저 확정해야 착수 가능
현행 화면 · 실제 캡처
현행 「가격수정」 모달 — 여기에 지역별 탭 추가
현행 「가격수정」 모달 — 여기에 지역별 탭 추가
변경안 · 제안 화면
상품관리 › 가격 관리 › 권역별 가격신규 메뉴
권역 ▾상태 ▾🔍 히어로코드 / 상품명권역 지정가 등록신규오픈 마진율 일괄
권역 🆕히어로코드상품명넷 공급가(net)지정 방식 🆕지정값 🆕적용가(계산) 🆕적용기간 🆕상태
성동광진권HERO-018245청양고추 100g1,850정률+12%2,07207/25~오픈+30일적용중
강남권HERO-007731대파 1kg2,400정액3,2003,20007/25~미정예약
성동광진권HERO-003920깐마늘 1kg9,100정률-5%8,645저장차단(원가하한)

▲ 권역별 타겟가격 목록 — 바뀌는 컬럼은 🆕 로 표시(예시 데이터)

1
권역 정의(센터 묶음) — 신규오픈 대응 권역을 만들고 소속 센터를 매핑한다. center_area(동 단위)가 아닌 center를 묶어 권역을 신규 정의한다.
2
신규오픈 마진율 일괄 — 권역 + (전체/공급사/카테고리) 범위를 선택해 마진율을 일괄 지정하거나 기존 마진율(지정가)을 재사용한다. seller_product.margin 필드를 갱신.
3
권역별 타겟가격 등록 — 특정 상품(히어로코드)을 골라 권역별로 정액 또는 정률을 지정하고 적용기간을 입력한다.
4
유효성 검증 — 지정가 ≥ 넷 공급가(원가 하한), 마진율 범위, 동일 권역×상품 적용기간 겹침을 검증하고 위반 시 저장을 차단한다.
5
적용·노출 — 우선순위(회원별>권역>기본)에 따라 앱 판매가에 반영된다. 미지정 권역은 전사 기본가로 fallback.
6
이력·모니터링 — 등록·수정·일괄배치 이력을 created_by/시각과 함께 기록하고 목록에서 상태(적용중/예약/차단)를 확인한다.
02

정책 / 정의

용어를 못 박고, 규칙을 명확히

용어 정의
용어정의
권역(region)신규오픈 대응을 위해 여러 센터를 묶은 가격 정책 단위. 신규 개념이며 center_area(동 단위)와 구분된다.
센터물류거점(예: 성동광진센터). center 테이블의 id/center_code로 식별하며, 하나 이상이 모여 권역을 구성한다.
center_area (동)기존 배송 구역 테이블로 동(洞) 단위. 권역보다 훨씬 작아 권역 정의에 그대로 쓸 수 없음.
넷 공급가(net)매입 순공급가. seller_product.net_price / net_unit_price. 지정가·마진 계산의 원가 하한 기준.
정액 지정권역별로 상품 판매가를 고정 금액으로 못박는 방식(예: 3,200원).
정률 지정넷 공급가에 마진율(%)을 곱해 판매가를 산출하는 방식(예: net×(1+12%)).
신규오픈 마진율 일괄신규오픈 권역 한정으로 공급사·상품 범위를 골라 마진율을 일괄 조정하거나 기존 마진율(지정가)을 재사용하는 배치.
정책 (규칙)
#규칙비고
1권역은 센터 묶음으로 신규 정의(center_region). 한 센터는 여러 권역에 속할 수 있음(N:M 매핑).[가정] 센터 다중 소속 허용. 동일 상품에 권역 지정가가 충돌하면 우선순위 규칙(정책 6) 적용.
2권역 지정가는 넷 공급가(net_price) 미만으로 저장 불가. 정액·정률 모두 계산 적용가가 net 미만이면 저장 차단.티켓 '지정가가 원가보다 낮아지지 않게' 확정 반영. 차단 시 목록 상태=저장차단(원가하한).
3마진율은 허용 범위 밖(마이너스/과도)이면 경고. 마이너스·상한 초과는 관리자 승인 없이는 저장 불가.[가정] 기본 0%~100%. 상·하한 값은 정책 확정 필요(티켓 '마진율 범위(마이너스/과도)' 확인 항목).
4동일 권역×히어로코드에 적용기간이 겹치는 지정가는 등록 불가.티켓 '적용기간 겹침' 확인 항목. start_date/end_date 오버랩 검증.
5가격 우선순위: 회원별 마진(seller_product_member_margin) > 권역 지정가(product_region_price) > 상품 기본 마진/기본가.[가정] 회원 개별 협의가가 최상위. 확정 필요.
6신규오픈 마진율 일괄은 대상 권역 + (공급사/카테고리/전체) 범위를 골라 seller_product.margin_flag=Y·margin_rate 세팅 또는 기존 지정가 재사용.'기존 마진율 재사용' 옵션 = 값 미입력 시 현재 마진 유지. 배치 실행 로그 남김.
7정률 적용가 = ROUND(net_price × (1 + margin_rate)). 정액 적용가 = price_value.[가정] 반올림 단위(원 단위) 확정 필요. VAT 처리는 기존 규칙 승계.
8미지정 권역·미지정 상품은 전사 기본가로 fallback. 권역 정책이 없는 지역은 현행과 동일하게 동작.신규오픈 외 지역 영향 없음(회귀 방지).
9모든 등록·수정·일괄배치는 created_by/updated_by·시각을 기록하고 이력 조회 가능.가격 변경 감사 추적. product_price_change_message 등 기존 알림 파이프라인과 연계 가능.
03

ERD

데이터 구조 · 관계 · DDL

center_region 신규
region_idPK varchar(30)
region_namevarchar(100)
descriptionvarchar(255)
use_flagboolean
created_byvarchar(20)
created_attimestamp
권역(센터 묶음) 마스터. 신규 개념 — center_area(동 단위)와 별개.
center_region_mapping 신규
region_idFK varchar(30)
center_idFK varchar(20)
created_byvarchar(20)
created_attimestamp
권역 ↔ 센터 N:M 매핑. 어떤 센터가 어느 권역에 속하는지.
product_region_price 신규
idPK bigserial
region_idFK varchar(30)
hero_product_codeFK varchar(100)
price_typevarchar(10)
price_valuenumeric(12,3)
start_datedate
end_datedate
use_flagboolean
created_byvarchar(20)
updated_byvarchar(20)
권역별 상품 타겟가격(정액/정률) + 적용기간. 핵심 신규 테이블.
seller_product WRITE
hero_product_codePK varchar(100)
net_pricebigint
priceinteger
margin_flagboolean
margin_ratedouble precision
상품 마스터. 신규오픈 마진율 일괄은 이 테이블의 margin 필드를 갱신(신규 컬럼 불필요).
center READ
idPK varchar(20)
center_namevarchar(100)
center_codevarchar(20)
센터 마스터. 권역 매핑 시 센터 목록 소스.
center_region_mapping.region_id → center_region.region_id
center_region_mapping.center_id → center.id
product_region_price.region_id → center_region.region_id
product_region_price.hero_product_code → seller_product.hero_product_code
(참고) seller_center.margin_rate = 공급사×센터 마진 — 일괄 조정 시 함께 갱신 가능
-- 권역(센터 묶음) 마스터 : 신규 개념, center_area(동 단위)와 별개
CREATE TABLE center_region (
    region_id    varchar(30)  PRIMARY KEY,              -- 권역 식별자
    region_name  varchar(100) NOT NULL,                 -- 권역명(예: 성동광진권)
    description  varchar(255),                          -- 설명/신규오픈 메모
    use_flag     boolean      NOT NULL DEFAULT true,     -- 사용 여부
    created_by   varchar(20),                           -- 생성 관리자
    created_at   timestamp    NOT NULL DEFAULT CURRENT_TIMESTAMP
);

-- 권역 ↔ 센터 N:M 매핑 (한 센터가 여러 권역에 소속 가능 — [가정])
CREATE TABLE center_region_mapping (
    region_id  varchar(30) NOT NULL REFERENCES center_region(region_id),  -- 권역
    center_id  varchar(20) NOT NULL REFERENCES center(id),                 -- 센터
    created_by varchar(20),
    created_at timestamp   NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (region_id, center_id)
);

-- 권역별 상품 타겟가격(정액/정률) + 적용기간
CREATE TABLE product_region_price (
    id                bigserial    PRIMARY KEY,
    region_id         varchar(30)  NOT NULL REFERENCES center_region(region_id),       -- 권역
    hero_product_code varchar(100) NOT NULL REFERENCES seller_product(hero_product_code), -- 히어로코드
    price_type        varchar(10)  NOT NULL,   -- FIXED(정액) / RATE(정률)
    price_value       numeric(12,3) NOT NULL,  -- 정액=금액, 정률=마진율(%)
    start_date        date         NOT NULL,   -- 적용 시작
    end_date          date,                    -- 적용 종료(NULL=무기한)
    use_flag          boolean      NOT NULL DEFAULT true,
    created_by        varchar(20),
    created_at        timestamp    NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_by        varchar(20),
    updated_at        timestamp,
    CONSTRAINT chk_price_type CHECK (price_type IN ('FIXED','RATE'))
);

-- 동일 권역×상품 활성 지정가 조회/겹침검증 인덱스
CREATE INDEX idx_prp_region_hero ON product_region_price (region_id, hero_product_code, use_flag);

-- [가정] 기간 겹침 차단은 애플리케이션 검증 또는 EXCLUDE 제약으로 보강
-- ALTER TABLE product_region_price ADD CONSTRAINT no_overlap
--   EXCLUDE USING gist (region_id WITH =, hero_product_code WITH =,
--     daterange(start_date, COALESCE(end_date,'infinity'::date)) WITH &&) WHERE (use_flag);

-- 신규오픈 마진율 일괄은 기존 컬럼 재사용(신규 컬럼 없음):
--   UPDATE seller_product SET margin_flag=true, margin_rate=:rate, updated_by=:admin
--   WHERE hero_product_code IN (:권역 소속 센터의 대상 상품);
04

화면 상세 — 세부 표·규칙

목록 외 품목표·모달·규칙 등 세부 화면

권역 정의(센터 묶음) 모달
권역명소속 센터센터코드상태
성동광진권성동광진센터, 중랑센터SDGJ, JR사용
강남권강남센터, 서초센터GN, SC사용
center 테이블에서 센터를 다중 선택해 권역을 구성. center_area(동)와 무관한 신규 묶음. [가정] 한 센터의 다중 권역 소속 허용.
신규오픈 마진율 일괄 지정 모달
대상 범위공급사마진율 방식적용기간
권역:강남권 / 전체상품(전체 공급사)정률 마진15%오픈일~+30일
권역:강남권 / 카테고리:채소늘품유통지정가(기존 재사용)오픈일~+14일
권역·공급사·카테고리로 대상을 좁혀 seller_product.margin_rate를 일괄 세팅. '기존 재사용'은 값 미입력 시 현재 마진 유지. 마이너스/과도 마진은 승인 필요.