fix:일반전표 은행거래 잔액 오류 수정 (API 레코드 우선 선택)

동일 거래가 수동(is_manual=true)과 API(is_manual=false)로 중복 저장된 경우
MAX(id)로 최신 레코드를 선택하면 잔액이 0에서 계산된 수동 레코드가
선택되어 잔액이 잘못 표시되는 문제 수정.
API 레코드의 balance가 바로빌에서 제공한 정확한 은행 잔액이므로 우선 선택.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
김보곤
2026-02-11 13:08:15 +09:00
parent 6b07841d91
commit 83e79cf30d

View File

@@ -379,7 +379,8 @@ public function bankTransactions(Request $request): JsonResponse
$accountNum = $request->input('accountNum', '');
// barobill_bank_transactions 테이블에서 직접 조회
// 같은 거래가 잔액(balance)만 다르게 중복 저장된 경우 최신 건만 사용
// 같은 거래가 수동/API로 중복 저장된 경우 API(is_manual=false) 레코드 우선 사용
// API 레코드의 balance가 바로빌에서 제공한 정확한 은행 잔액
$dedupQuery = BankTransaction::where('tenant_id', $tenantId)
->whereBetween('trans_date', [$startDate, $endDate]);
@@ -388,9 +389,12 @@ public function bankTransactions(Request $request): JsonResponse
}
$latestIds = $dedupQuery
->selectRaw('MAX(id) as id')
->selectRaw('MAX(CASE WHEN COALESCE(is_manual, 0) = 0 THEN id END) as api_id, MAX(id) as fallback_id')
->groupBy('bank_account_num', 'trans_dt', 'deposit', 'withdraw')
->pluck('id');
->get()
->map(fn($row) => $row->api_id ?? $row->fallback_id)
->filter()
->values();
$transactions = BankTransaction::whereIn('id', $latestIds)
->orderByDesc('trans_date')