MD-02 · 발주 문서 관리

발주 문서 관리 (매입처 발주)

MD-02 발주 문서 관리 — 매입처(바이어) 발주서 2종을 어드민에서 다운로드·작성본 업로드로 현황관리 (안1)

⏸ 보류 (꼴찌) 신규 「발주 문서 관리」 메뉴 발주서 2종 · 안1 대기업 API 발주와 별개

핵심 결정

우선순위/상태
꼴찌·보류 (재고·코드·이지어드민 완성 후 착수). 이번은 4단계 중 안1만
메뉴 분리
신규 「발주 문서 관리」 신설. 기존 「주문관리>발주현황관리」(삼성·현대 대기업 API 발주)와 완전 별개
안1 범위
2종 발주서 다운로드 + 작성본 업로드로 현황관리. 재고·발송·공급사로그인 미연결
양식 2종
선매입 발주서(1순위·문서형·VAT별도) / 판매분 발주서(2순위·간단)
매입단가
넷공급가(우리 매입 순공급가) 프리필 후 수기 수정. 대량 SKU는 엑셀 매핑 일괄
타 티켓 연동
유통기한→MD-01 소비기한, 면과세→MD-25 단가 면세/과세(별도 재무티켓)
01

정책 / 정의

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

용어 정의
용어정의
발주 문서 관리매입처(바이어) 발주가 카톡/메일로 흩어져 인계가 어려운 문제를 해결하기 위해 어드민에서 발주서를 문서화·현황관리하는 신규 메뉴
선매입 발주서1순위·문서형 양식. 헤더에 센터/납품처/연락처/배송요청일/TOTAL/입금금액, 품목표에 히어로코드·원산지·면과세·박스입수·유통기한·공급가액·부가세액 등. VAT별도
판매분 발주서2순위·간단 양식. 이지어드민/유통사코드/히어로코드/상품명/단위/BOX/EA(확인)/재고량/공급가/비고 컬럼
넷공급가우리(오더히어로) 매입 순공급가. 발주 품목의 매입단가로 프리필되는 기준값. seller_product.net_unit_price(ea)·net_price(box)
DC 작업 코드품목의 이지어드민코드에 해당하는 작업 코드. hero_code_mapping의 type='hub' specific_code로 히어로코드와 매핑됨(이지어드민 코드라 부르지 않음)
히어로코드오더히어로 표준 상품 식별 코드(seller_product.hero_product_code). 바코드·유통사코드·DC 작업 코드를 잇는 기준 키
공급사발주를 받는 매입처. 유통사/파트너/거래처가 아닌 '공급사'로 통일. 안4에서 공급사 로그인 열람 예정(늘품ID≠제조사ID 충돌로 ID 발번은 큰 작업)
정책 (규칙)
#규칙비고
1메뉴는 신규 「발주 문서 관리」로 분리한다기존 「주문관리>발주현황관리」는 삼성·현대 대기업 API 발주 전용(screen-po-create-modal.png)이라 로직·데이터가 다름. 혼용 금지
2안1 범위는 다운로드+업로드 현황관리로 한정발주서 2종을 어드민에서 다운로드해 작성 후 작성본을 업로드해 현황관리. 재고 물림(안2)·카톡메일 발송(안3)·공급사 로그인(안4)은 후속
3발주서 2종은 doc_type으로 구분한다PRE_PURCHASE(선매입)=문서형 풀컬럼, SALES(판매분)=간단. 한 품목 테이블 superset에서 doc_type별 사용 컬럼 상이
4선매입 발주서 금액은 VAT별도TOTAL/입금금액은 공급가액 기준. 부가세는 품목 vat_amount 합산으로 별도 산출(면과세 품목은 부가세 0)
5매입단가는 넷공급가로 프리필 후 수기 수정단가(ea)=net_unit_price, 단가(box)=net_price 프리필. 수정 시 price_prefilled=false로 수기 수정 추적
6대량 SKU는 엑셀 매핑으로 일괄 입력히어로코드↔이지어드민(DC 작업 코드)·바코드·유통사코드 매핑은 기존 hero_code_mapping(type='hub') 재사용해 일괄 채움
7유통기한은 MD-01 소비기한과 연결expiry_date는 MD-01 소비기한 정책과 연동. 안1에서는 발주서 값 기록 우선
8면과세는 MD-25(단가 면세/과세)와 연결tax_type(TAX/FREE)은 별도 재무티켓 MD-25 결과를 참조. 안1에서는 발주서 표기값 저장
9공급사 발송·로그인은 후속으로 보류안3은 담당자 연락처 조사 필요, 안4는 공급사 ID 전부 발번 필요(늘품ID≠제조사ID 충돌로 큰 작업)
02

ERD

데이터 구조 · 관계 · DDL

po_document 신규
po_doc_idPK bigserial
doc_typevarchar(20)
center_codeFK varchar(20)
delivery_placevarchar(255)
contactvarchar(100)
request_delivery_datedate
total_amountnumeric(15,2)
deposit_amountnumeric(15,2)
supplier_seller_idFK varchar(100)
statusvarchar(20)
original_file_urlvarchar(500)
발주 문서 헤더(선매입/판매분 공용). 헤더 필드=센터·납품처·연락처·배송요청일·TOTAL·입금금액
po_document_item 신규
po_item_idPK bigserial
po_doc_idFK bigint
line_nointeger
hero_product_codeFK varchar(100)
easyadmin_codevarchar(100)
barcodevarchar(100)
dist_codevarchar(100)
tax_typevarchar(20)
expiry_datedate
unit_price_eanumeric(15,2)
unit_price_boxnumeric(15,2)
supply_amountnumeric(15,2)
vat_amountnumeric(15,2)
order_qtyinteger
stock_qtyinteger
발주 품목행 superset. 선매입=NO/원산지/면과세/박스입수/유통기한/공급가액/부가세액/발주량, 판매분=단위/BOX/EA(확인)/재고량/비고
hero_code_mapping READ
hero_product_codePK varchar(100)
typePK varchar(30)
specific_codevarchar(100)
히어로코드↔DC 작업 코드 매핑(type='hub' 356건). 품목행 easyadmin_code 프리필 원천
seller_product READ
hero_product_codePK varchar(100)
seller_idFK varchar(100)
product_nametext
weightvarchar(255)
originvarchar(255)
taxationvarchar(100)
net_pricebigint
net_unit_pricebigint
상품 마스터. 상품명·중량·원산지·과세·넷공급가 프리필 원천
partner READ
seller_idPK varchar(100)
partner_infovarchar(255)
공급사 정보(36건). 안4 공급사 로그인·발송 담당자 연동 대비 참조
center READ
center_codePK varchar(20)
센터 마스터(40건). 발주서 헤더 센터 선택 원천
po_document_item.po_doc_id = po_document.po_doc_id (헤더↔품목)
po_document_item.hero_product_code = seller_product.hero_product_code (품목 프리필: 상품명·중량·원산지·net)
po_document_item.hero_product_code = hero_code_mapping.hero_product_code AND hero_code_mapping.type='hub' (DC 작업 코드 프리필)
po_document.center_code = center.center_code (센터 표시)
po_document.supplier_seller_id = partner.seller_id (공급사 정보, 안4 대비)
-- =====================================================================
-- MD-02 발주 문서 관리 (안1: 다운로드 + 작성본 업로드 현황관리)
-- 신규 메뉴 「발주 문서 관리」 전용 테이블. 기존 「주문관리>발주현황관리」
-- (삼성·현대 대기업 API 발주)와는 완전 별개.
-- 안1 단계에서는 재고/선입선출(안2)·발송(안3)·공급사 로그인(안4) 미연결.
-- =====================================================================

-- 발주 문서 헤더 -------------------------------------------------------
CREATE TABLE po_document (
    po_doc_id           bigserial   PRIMARY KEY,                 -- 발주 문서 PK
    doc_type            varchar(20) NOT NULL,                    -- 'PRE_PURCHASE'(선매입,1순위) / 'SALES'(판매분,2순위)
    center_code         varchar(20) NOT NULL,                    -- 센터(center.center_code 참조, FK 미설정: 안1 기록형)
    delivery_place      varchar(255),                            -- 납품처 (헤더)
    contact             varchar(100),                            -- 연락처 (헤더)
    request_delivery_date date,                                  -- 배송요청일 (헤더)
    total_amount        numeric(15,2) DEFAULT 0,                 -- TOTAL 합계금액 (VAT별도)
    deposit_amount      numeric(15,2) DEFAULT 0,                 -- 입금금액 (헤더)
    supplier_seller_id  varchar(100),                            -- 공급사 식별(partner.seller_id 참조, 안4 연동 대비)
    status              varchar(20) NOT NULL DEFAULT 'DRAFT',    -- DRAFT/UPLOADED (안3~4: SENT/VIEWED 예약)
    original_file_url   varchar(500),                            -- 작성본 업로드 원본 파일 경로
    template_version    varchar(20),                             -- 다운로드 양식 버전
    remark              text,                                    -- 비고
    created_by          varchar(100),                            -- 등록자(어드민 ID)
    created_at          timestamp   NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'Asia/Seoul'),
    updated_by          varchar(100),
    updated_at          timestamp
);
COMMENT ON TABLE  po_document IS 'MD-02 발주 문서 헤더(선매입/판매분 2종 공용)';
COMMENT ON COLUMN po_document.doc_type IS 'PRE_PURCHASE=바이어 선매입 발주서 / SALES=판매분 발주서';
COMMENT ON COLUMN po_document.total_amount IS 'VAT별도 합계. 부가세는 품목 vat_amount 합산으로 별도 산출';

-- 발주 문서 품목 (2종 양식 컬럼 superset, doc_type로 사용 컬럼 구분) ----
CREATE TABLE po_document_item (
    po_item_id          bigserial   PRIMARY KEY,                 -- 품목 PK
    po_doc_id           bigint      NOT NULL REFERENCES po_document(po_doc_id) ON DELETE CASCADE,
    line_no             integer     NOT NULL,                    -- NO (품목표 순번)
    hero_product_code   varchar(100) NOT NULL,                   -- 히어로코드 (seller_product.hero_product_code 참조)
    easyadmin_code      varchar(100),                            -- DC 작업 코드(이지어드민코드): hero_code_mapping type='hub'
    barcode             varchar(100),                            -- 상품바코드 (선매입)
    dist_code           varchar(100),                            -- 유통사코드 (판매분)
    product_name        text,                                    -- 상품명
    weight              varchar(100),                            -- 중량 (선매입)
    storage             varchar(50),                             -- 상태(냉동/냉장 등) (선매입)
    origin              varchar(255),                            -- 원산지 (선매입)
    tax_type            varchar(20),                             -- 면과세: 'TAX'/'FREE' (MD-25 단가 면세/과세 연동)
    box_qty             integer,                                 -- 박스입수 / BOX (양식 공통)
    expiry_date         date,                                    -- 유통기한 (MD-01 소비기한 연동)
    quantity            integer,                                 -- 수량
    unit_price_ea       numeric(15,2),                           -- 단가(ea) : net_unit_price 프리필 후 수기 수정
    unit_price_box      numeric(15,2),                           -- 단가(box) : net_price 프리필 후 수기 수정
    supply_amount       numeric(15,2),                           -- 공급가액 (선매입) / 공급가(판매분)
    vat_amount          numeric(15,2),                           -- 부가세액 (선매입, tax_type='TAX'일 때)
    line_total          numeric(15,2),                           -- 합계금액
    order_qty           integer,                                 -- 발주량 (선매입)
    unit                varchar(50),                             -- 단위 (판매분)
    ea_confirm          integer,                                 -- EA(확인) (판매분)
    stock_qty           integer,                                 -- 재고량 (판매분; 안1은 수기, 안2에서 재고 연결)
    remark              varchar(255),                            -- 비고 (판매분)
    price_prefilled     boolean     NOT NULL DEFAULT false,      -- 매입단가 자동 프리필 여부(수기 수정 추적)
    UNIQUE (po_doc_id, line_no)
);
COMMENT ON TABLE  po_document_item IS 'MD-02 발주 문서 품목행. doc_type=PRE_PURCHASE/SALES에 따라 사용 컬럼 상이';
COMMENT ON COLUMN po_document_item.easyadmin_code IS 'DC 작업 코드. hero_code_mapping(hero_product_code,type=hub).specific_code에서 매핑';
COMMENT ON COLUMN po_document_item.unit_price_ea IS 'net(넷공급가=우리 매입 순공급가) 프리필. seller_product.net_unit_price 기준, 수기 수정 가능';
03

스토리보드 — 실제 화면·변경 포인트

현행 발주현황관리(대기업 API)와 신규 발주문서관리의 관계

현행 「주문관리 › 발주현황관리」(삼성·현대 API 발주) — 신규 「발주 문서 관리」는 이것과 완전 별개
현행 「주문관리 › 발주현황관리」(삼성·현대 API 발주) — 신규 「발주 문서 관리」는 이것과 완전 별개
1
1. 발주 문서 목록 진입 — 신규 메뉴 「발주 문서 관리」에 진입. 기존 「주문관리>발주현황관리」(대기업 API 발주)와 별개 메뉴. 상태(DRAFT/UPLOADED)·양식(선매입/판매분)·센터·배송요청일로 필터한 발주 문서 목록을 본다.
2
2. 양식 선택 후 발주서 다운로드 — 선매입 발주서(1순위·문서형) 또는 판매분 발주서(2순위·간단) 양식을 선택해 다운로드. 헤더(센터·납품처·연락처·배송요청일)와 품목표 컬럼이 세팅된 엑셀 양식을 받는다.
3
3. 품목·매입단가 프리필 — 히어로코드 기준으로 상품명·중량·원산지·DC 작업 코드(hero_code_mapping hub)를 채우고, 매입단가는 넷공급가(net_unit_price=ea, net_price=box)로 프리필. 대량 SKU는 엑셀 매핑으로 일괄 입력.
4
4. 단가 수기 수정 및 금액 산출 — 프리필된 단가(ea/box)를 수기 수정(price_prefilled=false). 공급가액·부가세액(면과세 품목은 0)·합계금액·TOTAL 산출. 선매입은 VAT별도, 입금금액 기입.
5
5. 작성본 업로드로 현황관리 — 작성 완료한 발주서를 어드민에 업로드(original_file_url)하면 상태가 UPLOADED로 전환. 카톡/메일로 흩어지던 발주가 어드민 한 곳에서 현황관리·인계 가능해진다.
6
6. 후속 단계 안내(범위 밖) — 안2=재고·선입선출 연결(발주가 재고 물고 판단), 안3=공급사 카톡/메일 발송, 안4=공급사 로그인 열람은 후속. 참고로 대기업 API 발주 생성 화면은 별개 흐름.
04

화면 설계

실제 어드민에 어떤 컬럼·화면으로 노출되나

발주 문서 관리 - 목록 (신규 화면)
문서번호(po_doc_id)양식(doc_type)센터납품처배송요청일TOTAL(VAT별도)입금금액상태등록자등록일
1024선매입센터A○○상회2026-08-0312,450,0006,000,000UPLOADEDadmin_kim2026-07-29
1025판매분센터B△△유통2026-08-043,280,0000DRAFTadmin_lee2026-07-29
상태 DRAFT=작성중, UPLOADED=작성본 업로드 완료. SENT/VIEWED는 안3~4 예약. 양식/센터/배송요청일 필터
선매입 발주서 품목표 (1순위·문서형)
NO히어로코드이지어드민코드(DC 작업 코드)상품바코드상품명중량상태(냉동)원산지면과세박스입수유통기한수량단가(ea)단가(box)공급가액부가세액합계금액발주량
1HERO00123HUB-88428801234567890냉동 삼겹살 1kg1kg냉동국내산과세202026-11-30208,50085,0001,700,000170,0001,870,00020
2HERO00456HUB-88438809876543210깐마늘 500g500g냉장중국산면세152026-09-15153,20064,000960,0000960,00015
단가(ea/box)=넷공급가 프리필 후 수기. 면세 품목 부가세액 0. TOTAL은 VAT별도
판매분 발주서 품목표 (2순위·간단)
이지어드민(DC 작업 코드)유통사코드히어로코드상품명단위BOXEA(확인)재고량공급가비고
HUB-8842DIST-551HERO00123냉동 삼겹살 1kg1kg102003585,000선입선출 우선
HUB-8850DIST-560HERO00789대파 1단1단20300072,000재고 소진
재고량은 안1 수기 입력, 안2에서 재고 시스템 연결. 공급가=넷공급가 프리필