From 5b9d9c45ea15d9095e7ccd0f7ff0e7eca2a38d4b Mon Sep 17 00:00:00 2001 From: king Date: Tue, 16 Jun 2026 11:40:30 +0900 Subject: [PATCH] =?UTF-8?q?fix(malaysia):=20=EA=B0=99=EC=9D=80=20=EB=82=A0?= =?UTF-8?q?=20=EC=BD=A4=EB=B3=B4=20=EC=B6=9C=EA=B3=A0=EB=8F=84=20=EC=BD=A4?= =?UTF-8?q?=EB=B3=B4=20=EC=9E=AC=EA=B3=A0=EC=97=90=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 콤보 재고 차감 기준을 movement_date > stocktake_date 에서 재고조사 created_at < set_movement.created_at 으로 변경. 날짜만 비교하면 재고조사 당일 출고가 누락되던 문제 수정. Co-Authored-By: Claude Opus 4.8 --- app/modules/malaysia/db.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/app/modules/malaysia/db.py b/app/modules/malaysia/db.py index c6dd9a6..8d5bac1 100644 --- a/app/modules/malaysia/db.py +++ b/app/modules/malaysia/db.py @@ -531,14 +531,18 @@ class MalaysiaStockStore: 콤보는 movement 테이블(낱개 전용)에 직접 안 들어가므로, 재고조사 입력을 기준점으로 set_movement(콤보 출고 원장)를 차감해 현재 콤보 재고를 낸다. - 콤보재고 = 최근(취소 제외) 재고조사 콤보수량 − 재고조사일 이후 콤보 OUT 합 + 콤보재고 = 최근(취소 제외) 재고조사 콤보수량 − 재고조사 기록 이후 콤보 OUT 합 + + 차감 기준은 날짜가 아니라 재고조사 생성시각(created_at)이다. 같은 날 + 재고조사 후 출고해도 반영되도록(날짜만 비교하면 당일 출고가 누락됨). + 재고조사를 다시 카운트하면 기준점이 갱신돼 이전 출고는 자동 리셋된다. 반환: {"stocktake_date": str|None, "rows": [{set_code, set_name, stocktake_qty, out_qty, qty}]} """ with self._pool.connection() as conn: head = conn.execute( - "SELECT id, stocktake_date FROM daily_stocktake " + "SELECT id, stocktake_date, created_at FROM daily_stocktake " "WHERE warehouse_code = %s AND status <> 'cancelled' " "ORDER BY stocktake_date DESC, id DESC LIMIT 1", (warehouse_code,), @@ -551,17 +555,17 @@ class MalaysiaStockStore: "ORDER BY sku_code ASC", (head["id"],), ).fetchall() - # 재고조사일 이후의 콤보 출고(OUT)/조정(ADJUST) 합. 재고조사 시점 - # 물리 카운트가 기준이므로, 그 이후 출고만 차감한다. + # 재고조사 기록 시점 이후의 콤보 출고(OUT)/조정(ADJUST) 합. + # created_at 비교라 같은 날 출고도 반영된다. out_rows = conn.execute( """ SELECT set_code, SUM(CASE WHEN movement_type = 'OUT' THEN qty ELSE -qty END) AS out_qty FROM set_movement - WHERE warehouse_code = %s AND movement_date > %s + WHERE warehouse_code = %s AND created_at > %s GROUP BY set_code """, - (warehouse_code, head["stocktake_date"]), + (warehouse_code, head["created_at"]), ).fetchall() out_map = {r["set_code"]: int(r["out_qty"] or 0) for r in out_rows} names = self.item_name_map()