fix: [payroll] 전표 기타공제 항목별 분리 및 음수 금액 처리

- 기타공제를 합산 단일 라인에서 항목별(연말정산소득세, 연말정산지방소득세 등) 분리
- formatInputCurrency/parseInputCurrency 음수 부호 처리 추가
- JournalEntryController validation에서 min:0 제거하여 음수 credit_amount 허용
This commit is contained in:
김보곤
2026-03-10 12:44:09 +09:00
parent 5bf2914e22
commit bde4be4123
3 changed files with 27 additions and 17 deletions

View File

@@ -749,13 +749,18 @@ public function generateJournalEntry(Request $request): JsonResponse
], 422);
}
// 기타공제(deductions JSON) 합산 포함
$extraDeductionsTotal = 0;
// 기타공제(deductions JSON) 항목별 합산
$extraDeductionsByName = [];
foreach ($payrolls as $p) {
foreach ($p->deductions ?? [] as $d) {
$extraDeductionsTotal += (int) ($d['amount'] ?? 0);
$name = $d['name'] ?? '기타공제';
$amount = (int) ($d['amount'] ?? 0);
if ($amount != 0) {
$extraDeductionsByName[$name] = ($extraDeductionsByName[$name] ?? 0) + $amount;
}
}
}
$extraDeductionsTotal = array_sum($extraDeductionsByName);
$sums = (object) [
'total_gross' => $payrolls->sum('gross_salary'),
@@ -827,10 +832,11 @@ public function generateJournalEntry(Request $request): JsonResponse
[(int) $sums->total_resident_tax, '강서구청', "{$monthLabel} 지방소득세"],
];
// 기타공제
$extraDeductions = (int) $sums->total_extra_deductions;
if ($extraDeductions != 0) {
$deductionItems[] = [$extraDeductions, '임직원', '기타공제'];
// 기타공제 (항목별)
foreach ($extraDeductionsByName as $deductionName => $deductionAmount) {
if ($deductionAmount != 0) {
$deductionItems[] = [$deductionAmount, '임직원', $deductionName];
}
}
// 1. 차변: 801 급여 / 임직원 — 총지급액