fix:부가세 카드매입 분개 이중계산 버그 수정
분개가 있는 카드거래의 unique_key가 금액 변경/수동입력으로 달라질 경우 매칭 실패하여 원본+분개 이중 집계되는 문제 수정. 금액을 제외한 부분키(card_num|use_dt|approval_num)로 보조 매칭하여 분개가 있으면 원본 금액을 사용하지 않도록 개선. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -98,13 +98,29 @@ public function index(Request $request): JsonResponse
|
|||||||
|
|
||||||
$splitsByKey = CardTransactionSplit::getByDateRange($tenantId, $startDateYmd, $endDateYmd);
|
$splitsByKey = CardTransactionSplit::getByDateRange($tenantId, $startDateYmd, $endDateYmd);
|
||||||
|
|
||||||
|
// 분개가 존재하는 거래의 부분키(금액 제외) 인덱스 생성
|
||||||
|
// 수동입력 등으로 금액이 달라져도 매칭되도록 함
|
||||||
|
$splitsByPartialKey = [];
|
||||||
|
foreach ($splitsByKey as $fullKey => $splits) {
|
||||||
|
$parts = explode('|', $fullKey);
|
||||||
|
if (count($parts) >= 3) {
|
||||||
|
$partialKey = $parts[0] . '|' . $parts[1] . '|' . $parts[2];
|
||||||
|
$splitsByPartialKey[$partialKey] = $splits;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($cardTransactions as $card) {
|
foreach ($cardTransactions as $card) {
|
||||||
// 숨김 처리된 거래는 skip
|
// 숨김 처리된 거래는 skip
|
||||||
if ($hiddenKeys->contains($card->unique_key)) {
|
if ($hiddenKeys->contains($card->unique_key)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 분개 매칭: 정확한 키 → 부분키(금액 제외) 순으로 시도
|
||||||
$splits = $splitsByKey[$card->unique_key] ?? null;
|
$splits = $splitsByKey[$card->unique_key] ?? null;
|
||||||
|
if (!$splits) {
|
||||||
|
$cardPartialKey = $card->card_num . '|' . $card->use_dt . '|' . $card->approval_num;
|
||||||
|
$splits = $splitsByPartialKey[$cardPartialKey] ?? null;
|
||||||
|
}
|
||||||
|
|
||||||
if ($splits && count($splits) > 0) {
|
if ($splits && count($splits) > 0) {
|
||||||
// 분개가 있으면: deductible 분개만 포함
|
// 분개가 있으면: deductible 분개만 포함
|
||||||
|
|||||||
Reference in New Issue
Block a user