From 0cc0ddf4b9a7e4d590411bab1a238027f91c04ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Tue, 17 Mar 2026 16:21:40 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20[finance]=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=ED=95=98=EB=93=9C=EC=BD=94=EB=94=A9=20=EA=B3=84=EC=A0=95?= =?UTF-8?q?=EC=BD=94=EB=93=9C=203=EC=9E=90=EB=A6=AC=E2=86=925=EC=9E=90?= =?UTF-8?q?=EB=A6=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 급여전표: 801→80100, 207→20700, 205→20500 - 카드전표: 135→13500, 826→82600, 205→20500 - 홈택스분개: 108→10800, 401→40100, 208→20800, 501→50100, 117→11700, 201→20100 - 일반전표: 135→13500, 253→25300, 103→10300 --- .../Api/Admin/HR/PayrollController.php | 20 +++++++++---------- .../Controllers/Barobill/EcardController.php | 12 +++++------ ...0000_fix_duplicate_journal_entry_lines.php | 2 +- .../views/barobill/ecard/index.blade.php | 14 ++++++------- .../views/barobill/hometax/index.blade.php | 12 +++++------ .../views/finance/journal-entries.blade.php | 10 +++++----- 6 files changed, 35 insertions(+), 35 deletions(-) diff --git a/app/Http/Controllers/Api/Admin/HR/PayrollController.php b/app/Http/Controllers/Api/Admin/HR/PayrollController.php index 293117f6..ed018f0f 100644 --- a/app/Http/Controllers/Api/Admin/HR/PayrollController.php +++ b/app/Http/Controllers/Api/Admin/HR/PayrollController.php @@ -842,11 +842,11 @@ public function generateJournalEntry(Request $request): JsonResponse } // 계정과목 조회 - $accountCodes = AccountCode::whereIn('code', ['801', '207', '205']) + $accountCodes = AccountCode::whereIn('code', ['80100', '20700', '20500']) ->where('is_active', true) ->pluck('name', 'code'); - $missingCodes = array_diff(['801', '207', '205'], $accountCodes->keys()->toArray()); + $missingCodes = array_diff(['80100', '20700', '20500'], $accountCodes->keys()->toArray()); if (! empty($missingCodes)) { return response()->json([ 'success' => false, @@ -885,12 +885,12 @@ public function generateJournalEntry(Request $request): JsonResponse } } - // 1. 차변: 801 급여 / 임직원 — 총지급액 + // 1. 차변: 80100 급여 / 임직원 — 총지급액 if ($grossAmount > 0) { $lines[] = [ 'dc_type' => 'debit', - 'account_code' => '801', - 'account_name' => $accountCodes['801'], + 'account_code' => '80100', + 'account_name' => $accountCodes['80100'], 'trading_partner_id' => $partners['임직원'], 'trading_partner_name' => '임직원', 'debit_amount' => $grossAmount, @@ -916,8 +916,8 @@ public function generateJournalEntry(Request $request): JsonResponse } else { $creditLines[$mergeKey] = [ 'dc_type' => 'credit', - 'account_code' => '207', - 'account_name' => $accountCodes['207'], + 'account_code' => '20700', + 'account_name' => $accountCodes['20700'], 'trading_partner_id' => $partners[$partnerName], 'trading_partner_name' => $partnerName, 'debit_amount' => 0, @@ -935,12 +935,12 @@ public function generateJournalEntry(Request $request): JsonResponse $lines[] = $creditLine; } - // 최종: 대변 205 미지급비용 / 임직원 — 실수령액 (DB 값) + // 최종: 대변 20500 미지급비용 / 임직원 — 실수령액 (DB 값) if ($netSalary > 0) { $lines[] = [ 'dc_type' => 'credit', - 'account_code' => '205', - 'account_name' => $accountCodes['205'], + 'account_code' => '20500', + 'account_name' => $accountCodes['20500'], 'trading_partner_id' => $partners['임직원'], 'trading_partner_name' => '임직원', 'debit_amount' => 0, diff --git a/app/Http/Controllers/Barobill/EcardController.php b/app/Http/Controllers/Barobill/EcardController.php index 1e658557..8b072867 100644 --- a/app/Http/Controllers/Barobill/EcardController.php +++ b/app/Http/Controllers/Barobill/EcardController.php @@ -1882,8 +1882,8 @@ private function syncJournalAmounts(int $tenantId, string $uniqueKey, float $new if ($isDeductible && $debitLines->count() >= 2) { // 공제: 비용 계정(공급가액) + 부가세대급금(세액) - $expenseLine = $debitLines->first(fn ($l) => $l->account_code !== '135') ?? $debitLines[0]; - $taxLine = $debitLines->first(fn ($l) => $l->account_code === '135') ?? $debitLines[1]; + $expenseLine = $debitLines->first(fn ($l) => $l->account_code !== '13500') ?? $debitLines[0]; + $taxLine = $debitLines->first(fn ($l) => $l->account_code === '13500') ?? $debitLines[1]; JournalEntryLine::create([ 'tenant_id' => $tenantId, @@ -1919,7 +1919,7 @@ private function syncJournalAmounts(int $tenantId, string $uniqueKey, float $new 'journal_entry_id' => $journal->id, 'line_no' => $lineNo++, 'dc_type' => 'debit', - 'account_code' => $expenseAccount?->account_code ?? '826', + 'account_code' => $expenseAccount?->account_code ?? '82600', 'account_name' => $expenseAccount?->account_name ?? '잡비', 'debit_amount' => $supplyInt, 'credit_amount' => 0, @@ -1932,7 +1932,7 @@ private function syncJournalAmounts(int $tenantId, string $uniqueKey, float $new 'journal_entry_id' => $journal->id, 'line_no' => $lineNo++, 'dc_type' => 'debit', - 'account_code' => '135', + 'account_code' => '13500', 'account_name' => '부가세대급금', 'debit_amount' => $taxInt, 'credit_amount' => 0, @@ -1945,7 +1945,7 @@ private function syncJournalAmounts(int $tenantId, string $uniqueKey, float $new 'journal_entry_id' => $journal->id, 'line_no' => $lineNo++, 'dc_type' => 'debit', - 'account_code' => $expenseAccount?->account_code ?? '826', + 'account_code' => $expenseAccount?->account_code ?? '82600', 'account_name' => $expenseAccount?->account_name ?? '잡비', 'debit_amount' => $totalAmount, 'credit_amount' => 0, @@ -1962,7 +1962,7 @@ private function syncJournalAmounts(int $tenantId, string $uniqueKey, float $new 'journal_entry_id' => $journal->id, 'line_no' => $lineNo, 'dc_type' => 'credit', - 'account_code' => $creditAccount?->account_code ?? '205', + 'account_code' => $creditAccount?->account_code ?? '20500', 'account_name' => $creditAccount?->account_name ?? '미지급비용', 'debit_amount' => 0, 'credit_amount' => $totalAmount, diff --git a/database/migrations/2026_03_13_100000_fix_duplicate_journal_entry_lines.php b/database/migrations/2026_03_13_100000_fix_duplicate_journal_entry_lines.php index ef327c6b..3d0d8629 100644 --- a/database/migrations/2026_03_13_100000_fix_duplicate_journal_entry_lines.php +++ b/database/migrations/2026_03_13_100000_fix_duplicate_journal_entry_lines.php @@ -22,7 +22,7 @@ public function up(): void debit_amount, credit_amount, COUNT(*) as cnt, MIN(id) as keep_id, GROUP_CONCAT(id ORDER BY id) as all_ids FROM journal_entry_lines - WHERE account_code IN ('204', '205') + WHERE account_code IN ('20400', '20500') GROUP BY journal_entry_id, account_code, dc_type, trading_partner_name, debit_amount, credit_amount HAVING cnt > 1 diff --git a/resources/views/barobill/ecard/index.blade.php b/resources/views/barobill/ecard/index.blade.php index a65fc9c2..d0b68430 100644 --- a/resources/views/barobill/ecard/index.blade.php +++ b/resources/views/barobill/ecard/index.blade.php @@ -716,7 +716,7 @@ className={`px-3 py-1.5 text-sm cursor-pointer ${index === highlightIndex ? 'bg- const splitSupply = Math.round(parseFloat(singleSplit.split_supply_amount ?? singleSplit.supplyAmount ?? singleSplit.split_amount ?? singleSplit.amount ?? 0)); const splitTax = Math.round(parseFloat(singleSplit.split_tax ?? singleSplit.tax ?? 0)); const splitDeductionType = singleSplit.deduction_type || singleSplit.deductionType || 'non_deductible'; - const splitAccountCode = singleSplit.account_code || singleSplit.accountCode || '826'; + const splitAccountCode = singleSplit.account_code || singleSplit.accountCode || '82600'; const splitAccountName = singleSplit.account_name || singleSplit.accountName || '잡비'; const lines = []; @@ -732,7 +732,7 @@ className={`px-3 py-1.5 text-sm cursor-pointer ${index === highlightIndex ? 'bg- totalDebitSum += splitSupply; if (splitTax > 0) { lines.push({ - dc_type: 'debit', account_code: '135', account_name: '부가세대급금', + dc_type: 'debit', account_code: '13500', account_name: '부가세대급금', debit_amount: splitTax, credit_amount: 0, trading_partner_id: null, trading_partner_name: '', description: '' }); @@ -751,7 +751,7 @@ className={`px-3 py-1.5 text-sm cursor-pointer ${index === highlightIndex ? 'bg- // 대변: 미지급비용 = 합계 lines.push({ - dc_type: 'credit', account_code: '205', account_name: '미지급비용', + dc_type: 'credit', account_code: '20500', account_name: '미지급비용', debit_amount: 0, credit_amount: totalDebitSum, trading_partner_id: null, trading_partner_name: '', description: '' }); @@ -760,19 +760,19 @@ className={`px-3 py-1.5 text-sm cursor-pointer ${index === highlightIndex ? 'bg- } // splits가 없으면 기존 로직 (원본 금액 기반, 분리 없는 거래용) - const expenseCode = log.accountCode || '826'; + const expenseCode = log.accountCode || '82600'; const expenseName = log.accountName || '잡비'; if (isDeductible) { return [ { dc_type: 'debit', account_code: expenseCode, account_name: expenseName, debit_amount: supplyAmount, credit_amount: 0, trading_partner_id: null, trading_partner_name: '', description: '' }, - { dc_type: 'debit', account_code: '135', account_name: '부가세대급금', debit_amount: taxAmount, credit_amount: 0, trading_partner_id: null, trading_partner_name: '', description: '' }, - { dc_type: 'credit', account_code: '205', account_name: '미지급비용', debit_amount: 0, credit_amount: totalAmount, trading_partner_id: null, trading_partner_name: '', description: '' }, + { dc_type: 'debit', account_code: '13500', account_name: '부가세대급금', debit_amount: taxAmount, credit_amount: 0, trading_partner_id: null, trading_partner_name: '', description: '' }, + { dc_type: 'credit', account_code: '20500', account_name: '미지급비용', debit_amount: 0, credit_amount: totalAmount, trading_partner_id: null, trading_partner_name: '', description: '' }, ]; } else { return [ { dc_type: 'debit', account_code: expenseCode, account_name: expenseName, debit_amount: totalAmount, credit_amount: 0, trading_partner_id: null, trading_partner_name: '', description: '' }, - { dc_type: 'credit', account_code: '205', account_name: '미지급비용', debit_amount: 0, credit_amount: totalAmount, trading_partner_id: null, trading_partner_name: '', description: '' }, + { dc_type: 'credit', account_code: '20500', account_name: '미지급비용', debit_amount: 0, credit_amount: totalAmount, trading_partner_id: null, trading_partner_name: '', description: '' }, ]; } }; diff --git a/resources/views/barobill/hometax/index.blade.php b/resources/views/barobill/hometax/index.blade.php index 5d7d4b20..11c3b0bc 100644 --- a/resources/views/barobill/hometax/index.blade.php +++ b/resources/views/barobill/hometax/index.blade.php @@ -2290,15 +2290,15 @@ className={`px-3 py-1.5 text-xs cursor-pointer ${ const getDefaultLines = () => { if (isSales) { return [ - { dc_type: 'debit', account_code: '108', account_name: '외상매출금', debit_amount: totalAmount, credit_amount: 0, description: '' }, - { dc_type: 'credit', account_code: '401', account_name: '상품매출', debit_amount: 0, credit_amount: supplyAmount, description: '' }, - { dc_type: 'credit', account_code: '208', account_name: '부가세예수금', debit_amount: 0, credit_amount: taxAmount, description: '' }, + { dc_type: 'debit', account_code: '10800', account_name: '외상매출금', debit_amount: totalAmount, credit_amount: 0, description: '' }, + { dc_type: 'credit', account_code: '40100', account_name: '상품매출', debit_amount: 0, credit_amount: supplyAmount, description: '' }, + { dc_type: 'credit', account_code: '20800', account_name: '부가세예수금', debit_amount: 0, credit_amount: taxAmount, description: '' }, ]; } else { return [ - { dc_type: 'debit', account_code: '501', account_name: '상품매출원가', debit_amount: supplyAmount, credit_amount: 0, description: '' }, - { dc_type: 'debit', account_code: '117', account_name: '부가세대급금', debit_amount: taxAmount, credit_amount: 0, description: '' }, - { dc_type: 'credit', account_code: '201', account_name: '외상매입금', debit_amount: 0, credit_amount: totalAmount, description: '' }, + { dc_type: 'debit', account_code: '50100', account_name: '상품매출원가', debit_amount: supplyAmount, credit_amount: 0, description: '' }, + { dc_type: 'debit', account_code: '11700', account_name: '부가세대급금', debit_amount: taxAmount, credit_amount: 0, description: '' }, + { dc_type: 'credit', account_code: '20100', account_name: '외상매입금', debit_amount: 0, credit_amount: totalAmount, description: '' }, ]; } }; diff --git a/resources/views/finance/journal-entries.blade.php b/resources/views/finance/journal-entries.blade.php index 09a4fe2a..d79dd9ad 100644 --- a/resources/views/finance/journal-entries.blade.php +++ b/resources/views/finance/journal-entries.blade.php @@ -1967,14 +1967,14 @@ className="px-4 py-2 text-sm font-medium bg-blue-600 text-white rounded-lg hover // 공제: 차변(비용=공급가) + 차변(부가세대급금=세액) / 대변(미지급금=합계) return [ { key: 1, dc_type: 'debit', account_code: expenseCode, account_name: expenseName, trading_partner_id: null, trading_partner_name: '', debit_amount: supplyAmount, credit_amount: 0, description: '' }, - { key: 2, dc_type: 'debit', account_code: '135', account_name: '부가세대급금', trading_partner_id: null, trading_partner_name: '', debit_amount: taxAmount, credit_amount: 0, description: '' }, - { key: 3, dc_type: 'credit', account_code: '253', account_name: '미지급금', trading_partner_id: null, trading_partner_name: '', debit_amount: 0, credit_amount: amount, description: '' }, + { key: 2, dc_type: 'debit', account_code: '13500', account_name: '부가세대급금', trading_partner_id: null, trading_partner_name: '', debit_amount: taxAmount, credit_amount: 0, description: '' }, + { key: 3, dc_type: 'credit', account_code: '25300', account_name: '미지급금', trading_partner_id: null, trading_partner_name: '', debit_amount: 0, credit_amount: amount, description: '' }, ]; } else { // 불공제: 차변(비용=합계) / 대변(미지급금=합계) return [ { key: 1, dc_type: 'debit', account_code: expenseCode, account_name: expenseName, trading_partner_id: null, trading_partner_name: '', debit_amount: amount, credit_amount: 0, description: '' }, - { key: 2, dc_type: 'credit', account_code: '253', account_name: '미지급금', trading_partner_id: null, trading_partner_name: '', debit_amount: 0, credit_amount: amount, description: '' }, + { key: 2, dc_type: 'credit', account_code: '25300', account_name: '미지급금', trading_partner_id: null, trading_partner_name: '', debit_amount: 0, credit_amount: amount, description: '' }, ]; } }; @@ -2365,13 +2365,13 @@ className={`px-6 py-2 text-sm font-medium rounded-lg flex items-center gap-1 tra const getDefaultLines = () => { if (isDeposit) { return [ - { key: 1, dc_type: 'debit', account_code: '103', account_name: '보통예금', trading_partner_id: null, trading_partner_name: '', debit_amount: amount, credit_amount: 0, description: '' }, + { key: 1, dc_type: 'debit', account_code: '10300', account_name: '보통예금', trading_partner_id: null, trading_partner_name: '', debit_amount: amount, credit_amount: 0, description: '' }, { key: 2, dc_type: 'credit', account_code: '', account_name: '', trading_partner_id: null, trading_partner_name: '', debit_amount: 0, credit_amount: amount, description: '' }, ]; } else { return [ { key: 1, dc_type: 'debit', account_code: '', account_name: '', trading_partner_id: null, trading_partner_name: '', debit_amount: amount, credit_amount: 0, description: '' }, - { key: 2, dc_type: 'credit', account_code: '103', account_name: '보통예금', trading_partner_id: null, trading_partner_name: '', debit_amount: 0, credit_amount: amount, description: '' }, + { key: 2, dc_type: 'credit', account_code: '10300', account_name: '보통예금', trading_partner_id: null, trading_partner_name: '', debit_amount: 0, credit_amount: amount, description: '' }, ]; } };