feat(dispatch): 말레이시아 재고 차감 버튼(날짜 1회성)

- 달력 다운로드 아래 '말레이시아 재고 차감' 버튼. 선택 날짜 출고를
  말레이시아 재고관리에 OUT 으로 반영(movement_date=해당 날짜)
  · 낱개(MT/MX/MZ)=낱개 OUT, 콤보(MY-)=세트 OUT(재고관리가 BOM 분해)
  · _N 배수 반영, MD-(뚜껑) 제외
- 날짜당 1회만: dispatch_stock_deductions 마커로 재차감 차단(이중 출고 방지)
  · 마커 선점 후 반영, 콤보 BOM 누락은 사전검증으로 차단
- export.split_singles_combos, db 차감 가드 메서드, 라우터 POST /dispatch/stock-deduct
- 스키마: dispatch_stock_deductions (init + 마이그레이션 dispatch_add_deductions.sql)
- 이미 차감된 날짜는 버튼 비활성 + 안내

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-22 18:07:37 +09:00
parent 27e2c17606
commit b583627bd3
6 changed files with 259 additions and 3 deletions
+16 -2
View File
@@ -142,11 +142,25 @@ CREATE TABLE IF NOT EXISTS dispatch_logs (
CREATE INDEX IF NOT EXISTS idx_dispatch_logs_parcel ON dispatch_logs (parcel_id);
-- ════════════════════════════════════════════════════════════
-- 5) 권한 (dispatch_app: CRUD only)
-- 5) 말레이시아 재고 차감 1회성 기록 (날짜 단위 멱등 가드)
-- 그날 출고를 말레이시아 재고관리(OUT)로 1회만 반영. 존재 시 재차감 차단.
-- ════════════════════════════════════════════════════════════
CREATE TABLE IF NOT EXISTS dispatch_stock_deductions (
dispatch_date DATE PRIMARY KEY,
warehouse_code TEXT NOT NULL DEFAULT '',
single_lines INTEGER NOT NULL DEFAULT 0,
combo_lines INTEGER NOT NULL DEFAULT 0,
worker_name TEXT NOT NULL DEFAULT '',
deducted_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
-- ════════════════════════════════════════════════════════════
-- 6) 권한 (dispatch_app: CRUD only)
-- ════════════════════════════════════════════════════════════
GRANT USAGE ON SCHEMA public TO dispatch_app;
GRANT SELECT, INSERT, UPDATE, DELETE ON
dispatch_batches, dispatch_parcels, dispatch_items, dispatch_logs
dispatch_batches, dispatch_parcels, dispatch_items, dispatch_logs,
dispatch_stock_deductions
TO dispatch_app;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO dispatch_app;
ALTER DEFAULT PRIVILEGES IN SCHEMA public