diff --git a/system1-factory/web/pages/attendance/annual-overview.html b/system1-factory/web/pages/attendance/annual-overview.html index 540985d..10cca91 100644 --- a/system1-factory/web/pages/attendance/annual-overview.html +++ b/system1-factory/web/pages/attendance/annual-overview.html @@ -437,29 +437,34 @@ }; }); - // 잔액 데이터 매핑 + // 잔액 데이터 매핑 — balance_type 우선, type_code/type_name 폴백 balances.forEach(b => { if (!vacationData[b.user_id]) return; + const btype = (b.balance_type || '').toUpperCase(); const code = b.type_code || ''; const data = vacationData[b.user_id]; - if (code === 'CARRYOVER' || b.type_name === '이월') { - data.carryover = b.total_days || 0; - data.totalUsed += b.used_days || 0; - } else if (code === 'ANNUAL' || b.type_name === '정기연차' || b.type_name === '연차') { - data.annual = b.total_days || 0; - data.totalUsed += b.used_days || 0; - } else if (code === 'LONG_SERVICE' || b.type_name === '장기근속') { - data.longService = b.total_days || 0; - data.totalUsed += b.used_days || 0; - } else if (code.startsWith('SPECIAL_') || specialTypes.some(st => st.code === code)) { + if (btype === 'CARRY_OVER' || code === 'CARRYOVER' || b.type_name === '이월') { + data.carryover += parseFloat(b.total_days) || 0; + data.totalUsed += parseFloat(b.used_days) || 0; + } else if (btype === 'LONG_SERVICE') { + data.longService += parseFloat(b.total_days) || 0; + data.totalUsed += parseFloat(b.used_days) || 0; + } else if (btype === 'AUTO' || btype === 'MANUAL' || code === 'ANNUAL' || code === 'ANNUAL_FULL' || b.type_name === '정기연차' || b.type_name === '연차') { + data.annual += parseFloat(b.total_days) || 0; + data.totalUsed += parseFloat(b.used_days) || 0; + } else if (btype === 'COMPANY_GRANT' || code.startsWith('SPECIAL_') || specialTypes.some(st => st.code === code)) { data.specials.push({ type: code, typeName: b.type_name, days: b.total_days || 0, id: b.id }); - data.totalUsed += b.used_days || 0; + data.totalUsed += parseFloat(b.used_days) || 0; + } else { + // 미분류 → 정기연차에 합산 + data.annual += parseFloat(b.total_days) || 0; + data.totalUsed += parseFloat(b.used_days) || 0; } });