From 23cb3110f7205e0bf08791501ce957f9ffd992f0 Mon Sep 17 00:00:00 2001 From: "Jeong, Sejun" Date: Tue, 25 Aug 2026 11:17:04 +0900 Subject: [PATCH] fix: read GSBER/BUPLA from config instead of hardcoding MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 전표 헤더의 사업장(GSBER)이 K200으로 하드코딩되어 있어, 다른 사업장에 속한 사용자는 전표 작성이 실패한다. 차변 라인(IT_DATA)에는 GSBER가 실리지 않고 KOSTL만 들어가므로 SAP이 원가센터에서 Business Area를 유도하는데, 그 값이 헤더의 K200과 다르면 ZUNIEFI_5000이 아래 오류로 거부한다. Please input only the same 'Business Area' ( SAP.ZFI1,213 ) 예로 원가센터 343020(Frontend Hogangnono)은 K300이라 자기관리비/가족회식비 전표를 작성할 수 없다. 과거에는 SAP이 헤더 값을 원가센터 기준으로 정규화해 통과시켰으나 현재는 불일치를 거부한다. UserProfile에 선택 필드 gsber/bupla를 추가해 config에서 읽도록 하고, DEFAULT_CONFIG에 기존 값(K200/K100)을 명시해 기존 사용자의 동작은 그대로 유지한다. Co-Authored-By: Claude Opus 5 (1M context) --- src/lib/config.ts | 2 ++ src/lib/ops.ts | 6 +++--- src/types/index.ts | 2 ++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/lib/config.ts b/src/lib/config.ts index 6fb3324..114f5c5 100644 --- a/src/lib/config.ts +++ b/src/lib/config.ts @@ -55,6 +55,8 @@ export const DEFAULT_CONFIG: EacConfig = { kostlText: "Device Engineering", wfDept: "0000252100", wfDeptText: "Service Engineering", + gsber: "K200", + bupla: "K100", }, items: { "자기관리비": { diff --git a/src/lib/ops.ts b/src/lib/ops.ts index a76d381..4e6ad76 100644 --- a/src/lib/ops.ts +++ b/src/lib/ops.ts @@ -486,7 +486,7 @@ export async function computeDefaults( const r = await callNS(ctx, "ZUNIEFI_4003", PROG_LEGACY, { BUDAT: budat, BLDAT: bldat, BLART: "KE", LIFNR: user.pernr, LIFNR_TXT: user.pernrName, - BUPLA: "K100", GSBER: "K200", MWSKZ: "T0", + BUPLA: user.bupla ?? "K100", GSBER: user.gsber ?? "K200", MWSKZ: "T0", AKONT: "21020103", ZTERM: "V123", WRBTR: String(amountWon), WRBTR_SLASH: "", WMWST: "0", BVTYP: "0001", ZFBDT: "", ZFBDT_SLASH: "", @@ -529,7 +529,7 @@ export async function createTempDoc( const commonFi = { BUDAT: budat, BLDAT: bldat, BLART: "KE", LIFNR: user.pernr, LIFNR_TXT: user.pernrName, - BUPLA: "K100", GSBER: "K200", MWSKZ: "T0", + BUPLA: user.bupla ?? "K100", GSBER: user.gsber ?? "K200", MWSKZ: "T0", AKONT: "21020103", ZTERM: "V123", WRBTR: String(amountWon), WRBTR_SLASH: "", WMWST: "0", BVTYP: "0001", ZFBDT: zfbdt, ZFBDT_SLASH: "", @@ -929,7 +929,7 @@ export async function createCorpCardVoucher( CHARGETOTAL: card.AMOUNT, CHARGETOTAL_Slash: "", WMWST_READ_ONLY: card.TAX, BUDAT: p.budat, BLDAT: bldat, BLART: "KE", - BUPLA: "K100", GSBER: "K200", + BUPLA: user.bupla ?? "K100", GSBER: user.gsber ?? "K200", WRBTR_SLASH: "", WMWST: card.TAX, ZFBDT_SLASH: "", EMPTY: "", SGTXT: p.sgtxt, diff --git a/src/types/index.ts b/src/types/index.ts index bcc305b..2f0e17b 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -14,6 +14,8 @@ export interface UserProfile { kostlText: string; // "Device Engineering" wfDept: string; // Department code wfDeptText: string; // "Service Engineering" + gsber?: string; // Business area, e.g. "K300" (호갱노노) / "K200" (스마트홈) + bupla?: string; // Business place, e.g. "K100" } export interface ReimbursementItem {